Code

email plugin: Unlock mutexes before submitting the data.
[collectd.git] / src / sensors.c
index c60f2914e1d32e793c314aaf0909a8907d5feea6..ff8b580de0a688e51bf6e02c6541de1d636b54ca 100644 (file)
@@ -33,7 +33,7 @@
 #include "common.h"
 #include "plugin.h"
 #include "configfile.h"
-#include "config_list.h"
+#include "utils_ignorelist.h"
 #include "utils_debug.h"
 
 #define MODULE_NAME "sensors"
@@ -81,6 +81,7 @@ static char *extended_filename_format = "lm_sensors-%s.rrd";
 #define SENSOR_TYPE_FANSPEED 2
 #define SENSOR_TYPE_TEMPERATURE 3
 
+#if SENSORS_HAVE_READ
 static char *sensor_type_prefix[] =
 {
        "unknown",
@@ -89,6 +90,7 @@ static char *sensor_type_prefix[] =
        "temperature",
        NULL
 };
+#endif
 
 typedef struct sensors_labeltypes {
        char *label;
@@ -98,6 +100,7 @@ typedef struct sensors_labeltypes {
 /*
  * finite list of known labels extracted from lm_sensors
  */
+#if SENSORS_HAVE_READ
 static sensors_labeltypes known_features[] = 
 {
        { "fan1", SENSOR_TYPE_FANSPEED },
@@ -154,6 +157,7 @@ static sensors_labeltypes known_features[] =
        { "12V", SENSOR_TYPE_VOLTAGE },
        { 0, -1 }
 };
+#endif
 /* end new naming */
 
 static char *config_keys[] =
@@ -165,7 +169,7 @@ static char *config_keys[] =
 };
 static int config_keys_num = 3;
 
-static configlist_t *sensor_list;
+static ignorelist_t *sensor_list;
 
 /* 
  * sensor_extended_naming:
@@ -174,7 +178,7 @@ static configlist_t *sensor_list;
  */
 static int sensor_extended_naming = 0;
 
-#ifdef HAVE_LIBSENSORS
+#if SENSORS_HAVE_READ
 typedef struct featurelist
 {
        const sensors_chip_name    *chip;
@@ -184,27 +188,28 @@ typedef struct featurelist
 } featurelist_t;
 
 featurelist_t *first_feature = NULL;
-#endif /* defined (HAVE_LIBSENSORS) */
+#endif /* if SENSORS_HAVE_READ */
 
 static int sensors_config (char *key, char *value)
 {
        if (sensor_list == NULL)
-               sensor_list = configlist_init();
+               sensor_list = ignorelist_create (1);
 
        if (strcasecmp (key, "Sensor") == 0)
        {
-               if (!configlist_add (sensor_list, value))
+               if (ignorelist_add (sensor_list, value))
                {
-                       syslog (LOG_EMERG, "Cannot add value.");
+                       syslog (LOG_EMERG, "Cannot add value to ignorelist.");
                        return (1);
                }
        }
        else if (strcasecmp (key, "IgnoreSelected") == 0)
        {
+               ignorelist_set_invert (sensor_list, 1);
                if ((strcasecmp (value, "True") == 0)
                                || (strcasecmp (value, "Yes") == 0)
                                || (strcasecmp (value, "On") == 0))
-                       configlist_ignore (sensor_list, 1);
+                       ignorelist_set_invert (sensor_list, 0);
        }
        else if (strcasecmp (key, "ExtendedSensorNaming") == 0)
        {
@@ -225,7 +230,7 @@ static int sensors_config (char *key, char *value)
 
 static void collectd_sensors_init (void)
 {
-#ifdef HAVE_LIBSENSORS
+#if SENSORS_HAVE_READ
        FILE *fh;
        featurelist_t *last_feature = NULL;
        featurelist_t *new_feature;
@@ -325,18 +330,37 @@ static void collectd_sensors_init (void)
 
        if (first_feature == NULL)
                sensors_cleanup ();
-#endif /* defined(HAVE_LIBSENSORS) */
+#endif /* if SENSORS_HAVE_READ */
 
        return;
 }
 
+static void sensors_shutdown (void)
+{
+#if SENSORS_HAVE_READ
+       featurelist_t *thisft = first_feature;
+       featurelist_t *nextft;
+
+       while (thisft != NULL)
+       {
+               nextft = thisft->next;
+               sfree (thisft);
+               thisft = nextft;
+       }
+
+       sensors_cleanup ();
+#endif /* if SENSORS_HAVE_READ */
+
+       ignorelist_free (sensor_list);
+}
+
 static void sensors_voltage_write (char *host, char *inst, char *val)
 {
        char file[BUFSIZE];
        int status;
 
        /* skip ignored in our config */
-       if (configlist_ignored (sensor_list, inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        /* extended sensor naming */
@@ -357,7 +381,7 @@ static void sensors_write (char *host, char *inst, char *val)
        int status;
 
        /* skip ignored in our config */
-       if (configlist_ignored (sensor_list, inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        /* extended sensor naming */
@@ -384,7 +408,7 @@ static void sensors_submit (const char *feat_name,
                return;
 
        /* skip ignored in our config */
-       if (configlist_ignored (sensor_list, inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        if (snprintf (buf, BUFSIZE, "%u:%.3f", (unsigned int) curtime,
@@ -469,6 +493,7 @@ void module_register (void)
 {
        plugin_register (MODULE_NAME, collectd_sensors_init, sensors_read, sensors_write);
        plugin_register (MODULE_NAME_VOLTAGE, NULL, NULL, sensors_voltage_write);
+       plugin_register_shutdown (MODULE_NAME, sensors_shutdown);
        cf_register (MODULE_NAME, sensors_config, config_keys, config_keys_num);
 }