]> arthur.barton.de Git - netdata.git/blob - src/rrd.c
unified streaming logging
[netdata.git] / src / rrd.c
1 #define NETDATA_RRD_INTERNALS 1
2 #include "common.h"
3
4 // ----------------------------------------------------------------------------
5 // globals
6
7 /*
8 // if not zero it gives the time (in seconds) to remove un-updated dimensions
9 // DO NOT ENABLE
10 // if dimensions are removed, the chart generation will have to run again
11 int rrd_delete_unupdated_dimensions = 0;
12 */
13
14 int default_rrd_update_every = UPDATE_EVERY;
15 int default_rrd_history_entries = RRD_DEFAULT_HISTORY_ENTRIES;
16 RRD_MEMORY_MODE default_rrd_memory_mode = RRD_MEMORY_MODE_SAVE;
17
18
19 // ----------------------------------------------------------------------------
20 // RRD - memory modes
21
22 inline const char *rrd_memory_mode_name(RRD_MEMORY_MODE id) {
23     switch(id) {
24         case RRD_MEMORY_MODE_RAM:
25             return RRD_MEMORY_MODE_RAM_NAME;
26
27         case RRD_MEMORY_MODE_MAP:
28             return RRD_MEMORY_MODE_MAP_NAME;
29
30         case RRD_MEMORY_MODE_SAVE:
31         default:
32             return RRD_MEMORY_MODE_SAVE_NAME;
33     }
34 }
35
36 RRD_MEMORY_MODE rrd_memory_mode_id(const char *name) {
37     if(unlikely(!strcmp(name, RRD_MEMORY_MODE_RAM_NAME)))
38         return RRD_MEMORY_MODE_RAM;
39     else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_MAP_NAME)))
40         return RRD_MEMORY_MODE_MAP;
41
42     return RRD_MEMORY_MODE_SAVE;
43 }
44
45
46 // ----------------------------------------------------------------------------
47 // RRD - algorithms types
48
49 RRD_ALGORITHM rrd_algorithm_id(const char *name) {
50     if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
51         return RRD_ALGORITHM_INCREMENTAL;
52
53     else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
54         return RRD_ALGORITHM_ABSOLUTE;
55
56     else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
57         return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
58
59     else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
60         return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
61
62     else
63         return RRD_ALGORITHM_ABSOLUTE;
64 }
65
66 const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
67     switch(algorithm) {
68         case RRD_ALGORITHM_ABSOLUTE:
69         default:
70             return RRD_ALGORITHM_ABSOLUTE_NAME;
71
72         case RRD_ALGORITHM_INCREMENTAL:
73             return RRD_ALGORITHM_INCREMENTAL_NAME;
74
75         case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
76             return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
77
78         case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
79             return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
80     }
81 }
82
83
84 // ----------------------------------------------------------------------------
85 // RRD - chart types
86
87 inline RRDSET_TYPE rrdset_type_id(const char *name) {
88     if(unlikely(strcmp(name, RRDSET_TYPE_AREA_NAME) == 0))
89         return RRDSET_TYPE_AREA;
90
91     else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
92         return RRDSET_TYPE_STACKED;
93
94     else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
95         return RRDSET_TYPE_LINE;
96 }
97
98 const char *rrdset_type_name(RRDSET_TYPE chart_type) {
99     switch(chart_type) {
100         case RRDSET_TYPE_LINE:
101         default:
102             return RRDSET_TYPE_LINE_NAME;
103
104         case RRDSET_TYPE_AREA:
105             return RRDSET_TYPE_AREA_NAME;
106
107         case RRDSET_TYPE_STACKED:
108             return RRDSET_TYPE_STACKED_NAME;
109     }
110 }
111
112
113 // ----------------------------------------------------------------------------
114 // RRD - cache directory
115
116 char *rrdset_cache_dir(RRDHOST *host, const char *id, const char *config_section) {
117     char *ret = NULL;
118
119     char b[FILENAME_MAX + 1];
120     char n[FILENAME_MAX + 1];
121     rrdset_strncpyz_name(b, id, FILENAME_MAX);
122
123     snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
124     ret = config_get(config_section, "cache directory", n);
125
126     if(host->rrd_memory_mode == RRD_MEMORY_MODE_MAP || host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE) {
127         int r = mkdir(ret, 0775);
128         if(r != 0 && errno != EEXIST)
129             error("Cannot create directory '%s'", ret);
130     }
131
132     return ret;
133 }
134