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_SAVE:
32 return RRD_MEMORY_MODE_SAVE_NAME;
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;
42 return RRD_MEMORY_MODE_SAVE;
46 // ----------------------------------------------------------------------------
47 // RRD - algorithms types
49 RRD_ALGORITHM rrd_algorithm_id(const char *name) {
50 if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
51 return RRD_ALGORITHM_INCREMENTAL;
53 else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
54 return RRD_ALGORITHM_ABSOLUTE;
56 else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
57 return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
59 else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
60 return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
63 return RRD_ALGORITHM_ABSOLUTE;
66 const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
68 case RRD_ALGORITHM_ABSOLUTE:
70 return RRD_ALGORITHM_ABSOLUTE_NAME;
72 case RRD_ALGORITHM_INCREMENTAL:
73 return RRD_ALGORITHM_INCREMENTAL_NAME;
75 case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
76 return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
78 case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
79 return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
84 // ----------------------------------------------------------------------------
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;
91 else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
92 return RRDSET_TYPE_STACKED;
94 else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
95 return RRDSET_TYPE_LINE;
98 const char *rrdset_type_name(RRDSET_TYPE chart_type) {
100 case RRDSET_TYPE_LINE:
102 return RRDSET_TYPE_LINE_NAME;
104 case RRDSET_TYPE_AREA:
105 return RRDSET_TYPE_AREA_NAME;
107 case RRDSET_TYPE_STACKED:
108 return RRDSET_TYPE_STACKED_NAME;
113 // ----------------------------------------------------------------------------
114 // RRD - cache directory
116 char *rrdset_cache_dir(RRDHOST *host, const char *id, const char *config_section) {
119 char b[FILENAME_MAX + 1];
120 char n[FILENAME_MAX + 1];
121 rrdset_strncpyz_name(b, id, FILENAME_MAX);
123 snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
124 ret = config_get(config_section, "cache directory", n);
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);