@cryptotaxi247 / netdata-1 / commits / c7ddf8d2e

Add zero minimum (#5395)

Vladimir Kobal committed Mar 6, 2019 at 19:51 UTC c7ddf8d2ea407ba2717e07a51aa631ca26739c3a
1 file changed +42 -23
collectors/proc.plugin/sys_class_power_supply.c
+42 -23
@@ -19,6 +19,7 @@ struct ps_property_dim {
19
20 RRDDIM *rd;
21 unsigned long long value;
22 + int always_zero;
23
24 struct ps_property_dim *next;
25 };
@@ -184,6 +185,7 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
185 for(pr_idx = 0; pr_idx < 3; pr_idx++) {
186 if(unlikely(do_property[pr_idx] != CONFIG_BOOLEAN_NO)) {
187 struct ps_property *pr = NULL;
188 + int min_value_found = 0, max_value_found = 0;
189
190 for(pd_idx = pr_idx * 5; pd_idx < pr_idx * 5 + 5; pd_idx++) {
191
@@ -193,6 +195,11 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
195 ps_property_names[pr_idx], ps_property_dim_names[pd_idx]);
196 if (stat(filename, &stbuf) == 0) {
197
198 + if(unlikely(pd_idx == pr_idx * 5 + 1))
199 + min_value_found = 1;
200 + if(unlikely(pd_idx == pr_idx * 5 + 3))
201 + max_value_found = 1;
202 +
203 // add chart
204 if(unlikely(prev_idx != pr_idx)) {
205 pr = callocz(sizeof(struct ps_property), 1);
@@ -215,6 +222,16 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
222 pr->property_dim_root = pd;
223 }
224 }
225 +
226 + // create a zero empty/min dimension
227 + if(unlikely(max_value_found && !min_value_found)) {
228 + struct ps_property_dim *pd;
229 + pd= callocz(sizeof(struct ps_property_dim), 1);
230 + pd->name = strdupz(ps_property_dim_names[pr_idx * 5 + 1]);
231 + pd->always_zero = 1;
232 + pd->next = pr->property_dim_root;
233 + pr->property_dim_root = pd;
234 + }
235 }
236 }
237 }
@@ -258,36 +275,38 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
275 for(pr = ps->property_root; pr && !read_error; pr = pr->next) {
276 struct ps_property_dim *pd;
277 for(pd = pr->property_dim_root; pd; pd = pd->next) {
261 - char buffer[30 + 1];
278 + if(likely(!pd->always_zero)) {
279 + char buffer[30 + 1];
280
263 - if(unlikely(pd->fd == -1)) {
264 - pd->fd = open(pd->filename, O_RDONLY, 0666);
281 if(unlikely(pd->fd == -1)) {
266 - error("Cannot open file '%s'", pd->filename);
282 + pd->fd = open(pd->filename, O_RDONLY, 0666);
283 + if(unlikely(pd->fd == -1)) {
284 + error("Cannot open file '%s'", pd->filename);
285 + read_error = 1;
286 + power_supply_free(ps);
287 + break;
288 + }
289 + }
290 +
291 + ssize_t r = read(pd->fd, buffer, 30);
292 + if(unlikely(r < 1)) {
293 + error("Cannot read file '%s'", pd->filename);
294 read_error = 1;
295 power_supply_free(ps);
296 break;
297 }
271 - }
298 + buffer[r] = '\0';
299 + pd->value = str2ull(buffer);
300
273 - ssize_t r = read(pd->fd, buffer, 30);
274 - if(unlikely(r < 1)) {
275 - error("Cannot read file '%s'", pd->filename);
276 - read_error = 1;
277 - power_supply_free(ps);
278 - break;
279 - }
280 - buffer[r] = '\0';
281 - pd->value = str2ull(buffer);
282 -
283 - if(unlikely(!keep_fds_open)) {
284 - close(pd->fd);
285 - pd->fd = -1;
286 - }
287 - else if(unlikely(lseek(pd->fd, 0, SEEK_SET) == -1)) {
288 - error("Cannot seek in file '%s'", pd->filename);
289 - close(pd->fd);
290 - pd->fd = -1;
301 + if(unlikely(!keep_fds_open)) {
302 + close(pd->fd);
303 + pd->fd = -1;
304 + }
305 + else if(unlikely(lseek(pd->fd, 0, SEEK_SET) == -1)) {
306 + error("Cannot seek in file '%s'", pd->filename);
307 + close(pd->fd);
308 + pd->fd = -1;
309 + }
310 }
311 }
312 }