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
}