Code

dns plugin: Remove unnecessary poll code and use the (blocking) `pcap_loop' function...
[collectd.git] / src / sensors.c
index 4dd826e2907fdb94cc941a713e955591de83a40b..7cf787c7a8b155b9a74f1398a2e4c550f42372bc 100644 (file)
@@ -33,6 +33,7 @@
 #include "common.h"
 #include "plugin.h"
 #include "configfile.h"
+#include "utils_ignorelist.h"
 #include "utils_debug.h"
 
 #define MODULE_NAME "sensors"
@@ -80,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",
@@ -88,6 +90,7 @@ static char *sensor_type_prefix[] =
        "temperature",
        NULL
 };
+#endif
 
 typedef struct sensors_labeltypes {
        char *label;
@@ -97,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 },
@@ -153,6 +157,7 @@ static sensors_labeltypes known_features[] =
        { "12V", SENSOR_TYPE_VOLTAGE },
        { 0, -1 }
 };
+#endif
 /* end new naming */
 
 static char *config_keys[] =
@@ -164,14 +169,8 @@ static char *config_keys[] =
 };
 static int config_keys_num = 3;
 
-static char **sensor_list = NULL;
-static int sensor_list_num = 0;
-/* 
- * sensor_list_action:
- * 0 => default is to collect selected sensors
- * 1 => ignore selected sensors
- */
-static int sensor_list_action = 0;
+static ignorelist_t *sensor_list;
+
 /* 
  * sensor_extended_naming:
  * 0 => default is to create chip-feature
@@ -193,33 +192,24 @@ featurelist_t *first_feature = NULL;
 
 static int sensors_config (char *key, char *value)
 {
-       char **temp;
+       if (sensor_list == NULL)
+               sensor_list = ignorelist_create (1);
 
        if (strcasecmp (key, "Sensor") == 0)
        {
-               temp = (char **) realloc (sensor_list, (sensor_list_num + 1) * sizeof (char *));
-               if (temp == NULL)
+               if (ignorelist_add (sensor_list, value))
                {
-                       syslog (LOG_EMERG, "Cannot allocate more memory.");
+                       syslog (LOG_EMERG, "Cannot add value to ignorelist.");
                        return (1);
                }
-               sensor_list = temp;
-
-               if ((sensor_list[sensor_list_num] = strdup (value)) == NULL)
-               {
-                       syslog (LOG_EMERG, "Cannot allocate memory.");
-                       return (1);
-               }
-               sensor_list_num++;
        }
        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))
-                       sensor_list_action = 1;
-               else
-                       sensor_list_action = 0;
+                       ignorelist_set_invert (sensor_list, 0);
        }
        else if (strcasecmp (key, "ExtendedSensorNaming") == 0)
        {
@@ -238,25 +228,6 @@ static int sensors_config (char *key, char *value)
        return (0);
 }
 
-/*
- * Check if this feature should be ignored. This is called from
- * both, `submit' and `write' to give client and server
- *  the ability to ignore certain stuff...
- */
-static int config_get_ignored (const char *inst)
-{
-       int i;
-
-       /* If no ignored are given collect all features. */
-       if (sensor_list_num < 1)
-               return (0);
-
-       for (i = 0; i < sensor_list_num; i++)
-               if (strcasecmp (inst, sensor_list[i]) == 0)
-                       return (sensor_list_action);
-       return (1 - sensor_list_action);
-}
-
 static void collectd_sensors_init (void)
 {
 #ifdef HAVE_LIBSENSORS
@@ -370,7 +341,7 @@ static void sensors_voltage_write (char *host, char *inst, char *val)
        int status;
 
        /* skip ignored in our config */
-       if (config_get_ignored (inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        /* extended sensor naming */
@@ -391,7 +362,7 @@ static void sensors_write (char *host, char *inst, char *val)
        int status;
 
        /* skip ignored in our config */
-       if (config_get_ignored (inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        /* extended sensor naming */
@@ -418,7 +389,7 @@ static void sensors_submit (const char *feat_name,
                return;
 
        /* skip ignored in our config */
-       if (config_get_ignored (inst))
+       if (ignorelist_match (sensor_list, inst))
                return;
 
        if (snprintf (buf, BUFSIZE, "%u:%.3f", (unsigned int) curtime,