1 #define NETDATA_RRD_INTERNALS 1
4 // ----------------------------------------------------------------------------
8 // if not zero it gives the time (in seconds) to remove un-updated dimensions
10 // if dimensions are removed, the chart generation will have to run again
11 int rrd_delete_unupdated_dimensions = 0;
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;
19 // ----------------------------------------------------------------------------
22 inline const char *rrd_memory_mode_name(RRD_MEMORY_MODE id) {
24 case RRD_MEMORY_MODE_RAM:
25 return RRD_MEMORY_MODE_RAM_NAME;
27 case RRD_MEMORY_MODE_MAP:
28 return RRD_MEMORY_MODE_MAP_NAME;
30 case RRD_MEMORY_MODE_NONE:
31 return RRD_MEMORY_MODE_NONE_NAME;
33 case RRD_MEMORY_MODE_SAVE:
35 return RRD_MEMORY_MODE_SAVE_NAME;
39 RRD_MEMORY_MODE rrd_memory_mode_id(const char *name) {
40 if(unlikely(!strcmp(name, RRD_MEMORY_MODE_RAM_NAME)))
41 return RRD_MEMORY_MODE_RAM;
42 else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_MAP_NAME)))
43 return RRD_MEMORY_MODE_MAP;
44 else if(unlikely(!strcmp(name, RRD_MEMORY_MODE_NONE_NAME)))
45 return RRD_MEMORY_MODE_NONE;
47 return RRD_MEMORY_MODE_SAVE;
51 // ----------------------------------------------------------------------------
52 // RRD - algorithms types
54 RRD_ALGORITHM rrd_algorithm_id(const char *name) {
55 if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
56 return RRD_ALGORITHM_INCREMENTAL;
58 else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
59 return RRD_ALGORITHM_ABSOLUTE;
61 else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
62 return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
64 else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
65 return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
68 return RRD_ALGORITHM_ABSOLUTE;
71 const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
73 case RRD_ALGORITHM_ABSOLUTE:
75 return RRD_ALGORITHM_ABSOLUTE_NAME;
77 case RRD_ALGORITHM_INCREMENTAL:
78 return RRD_ALGORITHM_INCREMENTAL_NAME;
80 case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
81 return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
83 case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
84 return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
89 // ----------------------------------------------------------------------------
92 inline RRDSET_TYPE rrdset_type_id(const char *name) {
93 if(unlikely(strcmp(name, RRDSET_TYPE_AREA_NAME) == 0))
94 return RRDSET_TYPE_AREA;
96 else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
97 return RRDSET_TYPE_STACKED;
99 else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
100 return RRDSET_TYPE_LINE;
103 const char *rrdset_type_name(RRDSET_TYPE chart_type) {
105 case RRDSET_TYPE_LINE:
107 return RRDSET_TYPE_LINE_NAME;
109 case RRDSET_TYPE_AREA:
110 return RRDSET_TYPE_AREA_NAME;
112 case RRDSET_TYPE_STACKED:
113 return RRDSET_TYPE_STACKED_NAME;
118 // ----------------------------------------------------------------------------
119 // RRD - cache directory
121 char *rrdset_cache_dir(RRDHOST *host, const char *id, const char *config_section) {
124 char b[FILENAME_MAX + 1];
125 char n[FILENAME_MAX + 1];
126 rrdset_strncpyz_name(b, id, FILENAME_MAX);
128 snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
129 ret = config_get(config_section, "cache directory", n);
131 if(host->rrd_memory_mode == RRD_MEMORY_MODE_MAP || host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE) {
132 int r = mkdir(ret, 0775);
133 if(r != 0 && errno != EEXIST)
134 error("Cannot create directory '%s'", ret);