projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
oconfig: fix oconfig_free to free all elements
[collectd.git]
/
src
/
sensors.c
diff --git
a/src/sensors.c
b/src/sensors.c
index
5ed82a8
..
209482e
100644
(file)
--- a/
src/sensors.c
+++ b/
src/sensors.c
@@
-1,6
+1,7
@@
/**
* collectd - src/sensors.c
* Copyright (C) 2005-2008 Florian octo Forster
/**
* collectd - src/sensors.c
* Copyright (C) 2005-2008 Florian octo Forster
+ * Copyright (C) 2006 Luboš Staněk
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@
-26,6
+27,10
@@
* - honor sensors.conf's ignored
* - config Sensor option
* - config IgnoreSelected option
* - honor sensors.conf's ignored
* - config Sensor option
* - config IgnoreSelected option
+ *
+ * Henrique de Moraes Holschuh <hmh at debian.org>
+ * - use default libsensors config file on API 0x400
+ * - config SensorConfigFile option
**/
#include "collectd.h"
**/
#include "collectd.h"
@@
-131,7
+136,8
@@
static int known_features_num = STATIC_ARRAY_SIZE (known_features);
static const char *config_keys[] =
{
"Sensor",
static const char *config_keys[] =
{
"Sensor",
- "IgnoreSelected"
+ "IgnoreSelected",
+ "SensorConfigFile"
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
@@
-147,6
+153,7
@@
typedef struct featurelist
# ifndef SENSORS_CONF_PATH
# define SENSORS_CONF_PATH "/etc/sensors.conf"
# endif
# ifndef SENSORS_CONF_PATH
# define SENSORS_CONF_PATH "/etc/sensors.conf"
# endif
+static char *conffile = SENSORS_CONF_PATH;
/* #endif SENSORS_API_VERSION < 0x400 */
#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
/* #endif SENSORS_API_VERSION < 0x400 */
#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
@@
-158,9
+165,7
@@
typedef struct featurelist
struct featurelist *next;
} featurelist_t;
struct featurelist *next;
} featurelist_t;
-# ifndef SENSORS_CONF_PATH
-# define SENSORS_CONF_PATH "/etc/sensors3.conf"
-# endif
+static char *conffile = NULL;
/* #endif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */
#else /* if SENSORS_API_VERSION >= 0x500 */
/* #endif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */
#else /* if SENSORS_API_VERSION >= 0x500 */
@@
-168,10
+173,8
@@
typedef struct featurelist
"as bug."
#endif
"as bug."
#endif
-static const char *conffile = SENSORS_CONF_PATH;
featurelist_t *first_feature = NULL;
static ignorelist_t *sensor_list;
featurelist_t *first_feature = NULL;
static ignorelist_t *sensor_list;
-static time_t sensors_config_mtime = 0;
#if SENSORS_API_VERSION < 0x400
/* full chip name logic borrowed from lm_sensors */
#if SENSORS_API_VERSION < 0x400
/* full chip name logic borrowed from lm_sensors */
@@
-224,7
+227,19
@@
static int sensors_config (const char *key, const char *value)
if (sensor_list == NULL)
sensor_list = ignorelist_create (1);
if (sensor_list == NULL)
sensor_list = ignorelist_create (1);
- if (strcasecmp (key, "Sensor") == 0)
+ /* TODO: This setting exists for compatibility with old versions of
+ * lm-sensors. Remove support for those ancient versions in the next
+ * major release. */
+ if (strcasecmp (key, "SensorConfigFile") == 0)
+ {
+ char *tmp = strdup (value);
+ if (tmp != NULL)
+ {
+ sfree (conffile);
+ conffile = tmp;
+ }
+ }
+ else if (strcasecmp (key, "Sensor") == 0)
{
if (ignorelist_add (sensor_list, value))
{
{
if (ignorelist_add (sensor_list, value))
{
@@
-236,9
+251,7
@@
static int sensors_config (const char *key, const char *value)
else if (strcasecmp (key, "IgnoreSelected") == 0)
{
ignorelist_set_invert (sensor_list, 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))
+ if (IS_TRUE (value))
ignorelist_set_invert (sensor_list, 0);
}
else
ignorelist_set_invert (sensor_list, 0);
}
else
@@
-269,47
+282,37
@@
void sensors_free_features (void)
static int sensors_load_conf (void)
{
static int sensors_load_conf (void)
{
- FILE *fh;
+ static int call_once = 0;
+
+ FILE *fh = NULL;
featurelist_t *last_feature = NULL;
const sensors_chip_name *chip;
int chip_num;
featurelist_t *last_feature = NULL;
const sensors_chip_name *chip;
int chip_num;
- struct stat statbuf;
int status;
int status;
-
- status = stat (conffile, &statbuf);
- if (status != 0)
- {
- char errbuf[1024];
- ERROR ("sensors plugin: stat (%s) failed: %s", conffile,
- sstrerror (errno, errbuf, sizeof (errbuf)));
- sensors_config_mtime = 0;
- }
- if ((sensors_config_mtime != 0)
- && (sensors_config_mtime == statbuf.st_mtime))
- return (0);
+ if (call_once)
+ return 0;
- if (sensors_config_mtime != 0)
- {
- NOTICE ("sensors plugin: Reloading config from %s",
- conffile);
- sensors_free_features ();
- sensors_config_mtime = 0;
- }
+ call_once = 1;
- fh = fopen (conffile, "r");
- if (fh == NULL)
+ if (conffile != NULL)
{
{
- char errbuf[1024];
- ERROR ("sensors plugin: fopen(%s) failed: %s", conffile,
- sstrerror (errno, errbuf, sizeof (errbuf)));
- return (-1);
+ fh = fopen (conffile, "r");
+ if (fh == NULL)
+ {
+ char errbuf[1024];
+ ERROR ("sensors plugin: fopen(%s) failed: %s", conffile,
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
}
status = sensors_init (fh);
}
status = sensors_init (fh);
- fclose (fh);
+ if (fh)
+ fclose (fh);
+
if (status != 0)
{
ERROR ("sensors plugin: Cannot initialize sensors. "
if (status != 0)
{
ERROR ("sensors plugin: Cannot initialize sensors. "
@@
-317,8
+320,6
@@
static int sensors_load_conf (void)
return (-1);
}
return (-1);
}
- sensors_config_mtime = statbuf.st_mtime;
-
#if SENSORS_API_VERSION < 0x400
chip_num = 0;
while ((chip = sensors_get_detected_chips (&chip_num)) != NULL)
#if SENSORS_API_VERSION < 0x400
chip_num = 0;
while ((chip = sensors_get_detected_chips (&chip_num)) != NULL)
@@
-496,7
+497,6
@@
static void sensors_submit (const char *plugin_instance,
vl.values = values;
vl.values_len = 1;
vl.values = values;
vl.values_len = 1;
- vl.time = time (NULL);
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "sensors", sizeof (vl.plugin));
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "sensors", sizeof (vl.plugin));