[freeipmi] Remove id in sensor name when already unique (#6296)
Adrien Mahieux committed
Jun 20, 2019 at 20:38 UTC
1f891e8db4e3924156cae42cb7e0b1a044e7c154
1 file changed
+34
-18
collectors/freeipmi.plugin/freeipmi_plugin.c
+34
-18
@@ -338,7 +338,8 @@ static void netdata_mark_as_not_updated() {
338
}
339
340
static void send_chart_to_netdata_for_units(int units) {
341
- struct sensor *sn;
341
+ struct sensor *sn, *sn_stored;
342
+ int dupfound, multiplier;
343
344
switch(units) {
345
case IPMI_MONITORING_SENSOR_UNITS_CELSIUS:
@@ -398,29 +399,44 @@ static void send_chart_to_netdata_for_units(int units) {
399
}
400
401
for(sn = sensors_root; sn; sn = sn->next) {
402
+ dupfound = 0;
403
if(sn->sensor_units == units && sn->updated && !sn->ignore) {
404
sn->exposed = 1;
405
+ multiplier = 1;
406
407
switch(sn->sensor_reading_type) {
408
+ case IPMI_MONITORING_SENSOR_READING_TYPE_DOUBLE:
409
+ multiplier = 1000;
410
+ // fallthrough
411
case IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER8_BOOL:
412
case IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER32:
407
- printf("DIMENSION i%d_n%d_r%d '%s i%d' absolute 1 1\n"
408
- , sn->sensor_number
409
- , sn->record_id
410
- , sn->sensor_reading_type
411
- , sn->sensor_name
412
- , sn->sensor_number
413
- );
414
- break;
415
-
416
- case IPMI_MONITORING_SENSOR_READING_TYPE_DOUBLE:
417
- printf("DIMENSION i%d_n%d_r%d '%s i%d' absolute 1 1000\n"
418
- , sn->sensor_number
419
- , sn->record_id
420
- , sn->sensor_reading_type
421
- , sn->sensor_name
422
- , sn->sensor_number
423
- );
413
+ for (sn_stored = sensors_root; sn_stored; sn_stored = sn_stored->next) {
414
+ if (sn_stored == sn) continue;
415
+ // If the name is a duplicate, append the sensor number
416
+ if ( !strcmp(sn_stored->sensor_name, sn->sensor_name) ) {
417
+ dupfound = 1;
418
+ printf("DIMENSION i%d_n%d_r%d '%s i%d' absolute 1 %d\n"
419
+ , sn->sensor_number
420
+ , sn->record_id
421
+ , sn->sensor_reading_type
422
+ , sn->sensor_name
423
+ , sn->sensor_number
424
+ , multiplier
425
+ );
426
+ break;
427
+ }
428
+ }
429
+ // No duplicate name was found, display it just with Name
430
+ if (!dupfound) {
431
+ // display without ID
432
+ printf("DIMENSION i%d_n%d_r%d '%s' absolute 1 %d\n"
433
+ , sn->sensor_number
434
+ , sn->record_id
435
+ , sn->sensor_reading_type
436
+ , sn->sensor_name
437
+ , multiplier
438
+ );
439
+ }
440
break;
441
442
default: