Merge pull request #2742 from elfiesmelfie/ipmi_bugfix_sensor_option
[collectd.git] / src / ipmi.c
index a880586..98cc3b0 100644 (file)
@@ -388,12 +388,8 @@ static int sensor_list_add(c_ipmi_instance_t *st, ipmi_sensor_t *sensor) {
         ipmi_sensor_get_event_support(sensor));
 
   /* Both `ignorelist' and `sensor_name_ptr' may be NULL. */
-  if (ignorelist_match(st->ignorelist, sensor_name_ptr) != 0) {
-    INFO("ipmi plugin: sensor_list_add: Ignore sensor `%s` of `%s`, "
-         "because it is on ignore list.",
-         sensor_name_ptr, st->name);
-    return -1;
-  }
+  if (ignorelist_match(st->ignorelist, sensor_name_ptr) != 0)
+    return 0;
 
   /* FIXME: Use rate unit or base unit to scale the value */
 
@@ -782,11 +778,6 @@ entity_sensor_update_handler(enum ipmi_update_e op,
                              ipmi_entity_t __attribute__((unused)) * entity,
                              ipmi_sensor_t *sensor, void *user_data) {
   c_ipmi_instance_t *st = user_data;
-  char sensor_name[DATA_MAX_NAME_LEN] = {0};
-
-  sensor_get_name(sensor, sensor_name, sizeof(sensor_name));
-  if (ignorelist_match(st->ignorelist, sensor_name) != 0)
-    return; /* Ignore - sensor on ignore list */
 
   if ((op == IPMI_ADDED) || (op == IPMI_CHANGED)) {
     /* Will check for duplicate entries.. */
@@ -805,8 +796,9 @@ entity_sensor_update_handler(enum ipmi_update_e op,
             sensor, sensor_discrete_event_handler, st);
 
       if (status) {
-        ERROR("Unable to add sensor %s event handler, status: %d", sensor_name,
-              status);
+        char buf[DATA_MAX_NAME_LEN] = {0};
+        sensor_get_name(sensor, buf, sizeof(buf));
+        ERROR("Unable to add sensor %s event handler, status: %d", buf, status);
       }
     }
   } else if (op == IPMI_DELETED) {
@@ -1070,9 +1062,14 @@ static int c_ipmi_config_add_instance(oconfig_item_t *ci) {
   for (int i = 0; i < ci->children_num; i++) {
     oconfig_item_t *child = ci->children + i;
 
-    if (strcasecmp("Sensor", child->key) == 0)
-      ignorelist_add(st->ignorelist, child->values[0].value.string);
-    else if (strcasecmp("IgnoreSelected", child->key) == 0) {
+    if (strcasecmp("Sensor", child->key) == 0) {
+      char *value = NULL;
+      status = cf_util_get_string(child, &value);
+      if (status != 0)
+        break;
+      ignorelist_add(st->ignorelist, value);
+      sfree(value);
+    } else if (strcasecmp("IgnoreSelected", child->key) == 0) {
       _Bool t;
       status = cf_util_get_boolean(child, &t);
       if (status != 0)