]> arthur.barton.de Git - netdata.git/blob - src/rrd.c
Merge pull request #1998 from ktsaou/master
[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_NONE:
31             return RRD_MEMORY_MODE_NONE_NAME;
32
33         case RRD_MEMORY_MODE_SAVE:
34         default:
35             return RRD_MEMORY_MODE_SAVE_NAME;
36     }
37 }
38
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;
46
47     return RRD_MEMORY_MODE_SAVE;
48 }
49
50
51 // ----------------------------------------------------------------------------
52 // RRD - algorithms types
53
54 RRD_ALGORITHM rrd_algorithm_id(const char *name) {
55     if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
56         return RRD_ALGORITHM_INCREMENTAL;
57
58     else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
59         return RRD_ALGORITHM_ABSOLUTE;
60
61     else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
62         return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
63
64     else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
65         return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
66
67     else
68         return RRD_ALGORITHM_ABSOLUTE;
69 }
70
71 const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
72     switch(algorithm) {
73         case RRD_ALGORITHM_ABSOLUTE:
74         default:
75             return RRD_ALGORITHM_ABSOLUTE_NAME;
76
77         case RRD_ALGORITHM_INCREMENTAL:
78             return RRD_ALGORITHM_INCREMENTAL_NAME;
79
80         case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
81             return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
82
83         case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
84             return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
85     }
86 }
87
88
89 // ----------------------------------------------------------------------------
90 // RRD - chart types
91
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;
95
96     else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
97         return RRDSET_TYPE_STACKED;
98
99     else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
100         return RRDSET_TYPE_LINE;
101 }
102
103 const char *rrdset_type_name(RRDSET_TYPE chart_type) {
104     switch(chart_type) {
105         case RRDSET_TYPE_LINE:
106         default:
107             return RRDSET_TYPE_LINE_NAME;
108
109         case RRDSET_TYPE_AREA:
110             return RRDSET_TYPE_AREA_NAME;
111
112         case RRDSET_TYPE_STACKED:
113             return RRDSET_TYPE_STACKED_NAME;
114     }
115 }
116
117
118 // ----------------------------------------------------------------------------
119 // RRD - cache directory
120
121 char *rrdset_cache_dir(RRDHOST *host, const char *id, const char *config_section) {
122     char *ret = NULL;
123
124     char b[FILENAME_MAX + 1];
125     char n[FILENAME_MAX + 1];
126     rrdset_strncpyz_name(b, id, FILENAME_MAX);
127
128     snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
129     ret = config_get(config_section, "cache directory", n);
130
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);
135     }
136
137     return ret;
138 }