ipmi: added SELClearEvent parameter.
authorKorynkevych, RomanX <romanx.korynkevych@intel.com>
Wed, 28 Dec 2016 15:08:42 +0000 (15:08 +0000)
committerKorynkevych, RomanX <romanx.korynkevych@intel.com>
Wed, 28 Dec 2016 15:50:18 +0000 (15:50 +0000)
Make deletion of event from SEL list configurable to avoid other tools
that may be subscribed for SEL events to receive an empty event.

Change-Id: Ibd578c8652d9d6df8ee28825f20df356ef46b840
Signed-off-by: Korynkevych, RomanX <romanx.korynkevych@intel.com>
src/collectd.conf.in
src/collectd.conf.pod
src/ipmi.c

index e85b42a..20a0108 100644 (file)
 #      NotifySensorRemove true
 #      NotifySensorNotPresent false
 #      SELEnabled false
+#      SELClearEvent false
 #</Plugin>
 
 #<Plugin iptables>
index a164e11..d8d30f5 100644 (file)
@@ -3087,6 +3087,13 @@ If system event log (SEL) is enabled, plugin will listen for sensor threshold
 and discrete events. When event is received the notification is sent.
 Defaults to B<false>.
 
+=item B<SELClearEvent> I<true>|I<false>
+
+If SEL clear event is enabled, plugin will delete event from SEL list after
+it is received and successfully handled. In this case other tools that are
+subscribed for SEL events will receive an empty event.
+Defaults to B<false>.
+
 =back
 
 =head2 Plugin C<iptables>
index 5dca1fd..39250e4 100644 (file)
@@ -61,7 +61,8 @@ static pthread_t thread_id = (pthread_t)0;
 
 static const char *config_keys[] = {"Sensor", "IgnoreSelected",
                                     "NotifySensorAdd", "NotifySensorRemove",
-                                    "NotifySensorNotPresent", "SELEnabled"};
+                                    "NotifySensorNotPresent", "SELEnabled",
+                                    "SELClearEvent"};
 static int config_keys_num = STATIC_ARRAY_SIZE(config_keys);
 
 static ignorelist_t *ignorelist = NULL;
@@ -70,6 +71,7 @@ static int c_ipmi_notify_add = 0;
 static int c_ipmi_notify_remove = 0;
 static int c_ipmi_notify_notpresent = 0;
 static int c_ipmi_sel_enabled = 0;
+static int c_ipmi_sel_clear_event = 0;
 
 /*
  * Misc private functions
@@ -533,9 +535,12 @@ static int sensor_threshold_event_handler(
   plugin_dispatch_notification(&n);
 
   /* Delete handled ipmi event from the list */
-  ipmi_event_delete(event, NULL, NULL);
+  if (c_ipmi_sel_clear_event) {
+    ipmi_event_delete(event, NULL, NULL);
+    return (IPMI_EVENT_HANDLED);
+  }
 
-  return (IPMI_EVENT_HANDLED);
+  return (IPMI_EVENT_NOT_HANDLED);
 } /* int sensor_threshold_event_handler */
 
 static int sensor_discrete_event_handler(ipmi_sensor_t *sensor,
@@ -581,9 +586,12 @@ static int sensor_discrete_event_handler(ipmi_sensor_t *sensor,
   plugin_dispatch_notification(&n);
 
   /* Delete handled ipmi event from the list */
-  ipmi_event_delete(event, NULL, NULL);
+  if (c_ipmi_sel_clear_event) {
+    ipmi_event_delete(event, NULL, NULL);
+    return (IPMI_EVENT_HANDLED);
+  }
 
-  return (IPMI_EVENT_HANDLED);
+  return (IPMI_EVENT_NOT_HANDLED);
 } /* int sensor_discrete_event_handler */
 
 /*
@@ -759,6 +767,9 @@ static int c_ipmi_config(const char *key, const char *value) {
   } else if (strcasecmp("SELEnabled", key) == 0) {
     if (IS_TRUE(value))
       c_ipmi_sel_enabled = 1;
+  } else if (strcasecmp("SELClearEvent", key) == 0) {
+    if (IS_TRUE(value))
+      c_ipmi_sel_clear_event = 1;
   } else {
     return (-1);
   }