X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fsensors.c;h=61868e884f747cb543f7e944228e93945f0f728f;hp=f4ecda5e49e0f12114ea32ccc2260a31789b4ad4;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=1b10ab706f8b70ce2f086e59a54cc09d671ad989 diff --git a/src/sensors.c b/src/sensors.c index f4ecda5e..61868e88 100644 --- a/src/sensors.c +++ b/src/sensors.c @@ -35,9 +35,9 @@ #include "collectd.h" -#include "common.h" #include "plugin.h" -#include "utils_ignorelist.h" +#include "utils/common/common.h" +#include "utils/ignorelist/ignorelist.h" #if defined(HAVE_SENSORS_SENSORS_H) #include @@ -47,90 +47,6 @@ #define SENSORS_API_VERSION 0x000 #endif -/* - * The sensors library prior to version 3.0 (internal version 0x400) didn't - * report the type of values, only a name. The following lists are there to - * convert from the names to the type. They are not used with the new - * interface. - */ -#if SENSORS_API_VERSION < 0x400 -static char *sensor_type_name_map[] = { -#define SENSOR_TYPE_VOLTAGE 0 - "voltage", -#define SENSOR_TYPE_FANSPEED 1 - "fanspeed", -#define SENSOR_TYPE_TEMPERATURE 2 - "temperature", -#define SENSOR_TYPE_POWER 3 - "power", -#define SENSOR_TYPE_UNKNOWN 4 - NULL}; - -struct sensors_labeltypes_s { - char *label; - int type; -}; -typedef struct sensors_labeltypes_s sensors_labeltypes_t; - -/* finite list of known labels extracted from lm_sensors */ -static sensors_labeltypes_t known_features[] = { - {"fan1", SENSOR_TYPE_FANSPEED}, - {"fan2", SENSOR_TYPE_FANSPEED}, - {"fan3", SENSOR_TYPE_FANSPEED}, - {"fan4", SENSOR_TYPE_FANSPEED}, - {"fan5", SENSOR_TYPE_FANSPEED}, - {"fan6", SENSOR_TYPE_FANSPEED}, - {"fan7", SENSOR_TYPE_FANSPEED}, - {"AIN2", SENSOR_TYPE_VOLTAGE}, - {"AIN1", SENSOR_TYPE_VOLTAGE}, - {"in10", SENSOR_TYPE_VOLTAGE}, - {"in9", SENSOR_TYPE_VOLTAGE}, - {"in8", SENSOR_TYPE_VOLTAGE}, - {"in7", SENSOR_TYPE_VOLTAGE}, - {"in6", SENSOR_TYPE_VOLTAGE}, - {"in5", SENSOR_TYPE_VOLTAGE}, - {"in4", SENSOR_TYPE_VOLTAGE}, - {"in3", SENSOR_TYPE_VOLTAGE}, - {"in2", SENSOR_TYPE_VOLTAGE}, - {"in0", SENSOR_TYPE_VOLTAGE}, - {"CPU_Temp", SENSOR_TYPE_TEMPERATURE}, - {"remote_temp", SENSOR_TYPE_TEMPERATURE}, - {"temp1", SENSOR_TYPE_TEMPERATURE}, - {"temp2", SENSOR_TYPE_TEMPERATURE}, - {"temp3", SENSOR_TYPE_TEMPERATURE}, - {"temp4", SENSOR_TYPE_TEMPERATURE}, - {"temp5", SENSOR_TYPE_TEMPERATURE}, - {"temp6", SENSOR_TYPE_TEMPERATURE}, - {"temp7", SENSOR_TYPE_TEMPERATURE}, - {"temp", SENSOR_TYPE_TEMPERATURE}, - {"Vccp2", SENSOR_TYPE_VOLTAGE}, - {"Vccp1", SENSOR_TYPE_VOLTAGE}, - {"vdd", SENSOR_TYPE_VOLTAGE}, - {"vid5", SENSOR_TYPE_VOLTAGE}, - {"vid4", SENSOR_TYPE_VOLTAGE}, - {"vid3", SENSOR_TYPE_VOLTAGE}, - {"vid2", SENSOR_TYPE_VOLTAGE}, - {"vid1", SENSOR_TYPE_VOLTAGE}, - {"vid", SENSOR_TYPE_VOLTAGE}, - {"vin4", SENSOR_TYPE_VOLTAGE}, - {"vin3", SENSOR_TYPE_VOLTAGE}, - {"vin2", SENSOR_TYPE_VOLTAGE}, - {"vin1", SENSOR_TYPE_VOLTAGE}, - {"voltbatt", SENSOR_TYPE_VOLTAGE}, - {"volt12", SENSOR_TYPE_VOLTAGE}, - {"volt5", SENSOR_TYPE_VOLTAGE}, - {"vrm", SENSOR_TYPE_VOLTAGE}, - {"5.0V", SENSOR_TYPE_VOLTAGE}, - {"5V", SENSOR_TYPE_VOLTAGE}, - {"3.3V", SENSOR_TYPE_VOLTAGE}, - {"2.5V", SENSOR_TYPE_VOLTAGE}, - {"2.0V", SENSOR_TYPE_VOLTAGE}, - {"12V", SENSOR_TYPE_VOLTAGE}, - {"power1", SENSOR_TYPE_POWER}}; -static int known_features_num = STATIC_ARRAY_SIZE(known_features); -/* end new naming */ -#endif /* SENSORS_API_VERSION < 0x400 */ - static const char *config_keys[] = {"Sensor", "IgnoreSelected", "SensorConfigFile", "UseLabels"}; static int config_keys_num = STATIC_ARRAY_SIZE(config_keys); @@ -149,7 +65,7 @@ typedef struct featurelist { static char *conffile = SENSORS_CONF_PATH; /* #endif SENSORS_API_VERSION < 0x400 */ -#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) +#elif (SENSORS_API_VERSION >= 0x400) typedef struct featurelist { const sensors_chip_name *chip; const sensors_feature *feature; @@ -157,48 +73,13 @@ typedef struct featurelist { struct featurelist *next; } featurelist_t; -static char *conffile = NULL; -static _Bool use_labels = 0; -/* #endif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */ - -#else /* if SENSORS_API_VERSION >= 0x500 */ -#error "This version of libsensors is not supported yet. Please report this " \ - "as bug." +static char *conffile; +static bool use_labels; #endif -static featurelist_t *first_feature = NULL; +static featurelist_t *first_feature; static ignorelist_t *sensor_list; -#if SENSORS_API_VERSION < 0x400 -/* full chip name logic borrowed from lm_sensors */ -static int sensors_snprintf_chip_name(char *buf, size_t buf_size, - const sensors_chip_name *chip) { - int status = -1; - - if (chip->bus == SENSORS_CHIP_NAME_BUS_ISA) { - status = snprintf(buf, buf_size, "%s-isa-%04x", chip->prefix, chip->addr); - } else if (chip->bus == SENSORS_CHIP_NAME_BUS_DUMMY) { - status = snprintf(buf, buf_size, "%s-%s-%04x", chip->prefix, chip->busname, - chip->addr); - } else { - status = snprintf(buf, buf_size, "%s-i2c-%d-%02x", chip->prefix, chip->bus, - chip->addr); - } - - return status; -} /* int sensors_snprintf_chip_name */ - -static int sensors_feature_name_to_type(const char *name) { - /* Yes, this is slow, but it's only ever done during initialization, so - * it's a one time cost.. */ - for (int i = 0; i < known_features_num; i++) - if (strcasecmp(known_features[i].label, name) == 0) - return known_features[i].type; - - return SENSOR_TYPE_UNKNOWN; -} /* int sensors_feature_name_to_type */ -#endif - static int sensors_config(const char *key, const char *value) { if (sensor_list == NULL) sensor_list = ignorelist_create(1); @@ -223,9 +104,9 @@ static int sensors_config(const char *key, const char *value) { if (IS_TRUE(value)) ignorelist_set_invert(sensor_list, 0); } -#if (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) +#if (SENSORS_API_VERSION >= 0x400) else if (strcasecmp(key, "UseLabels") == 0) { - use_labels = IS_TRUE(value) ? 1 : 0; + use_labels = IS_TRUE(value); } #endif else { @@ -251,7 +132,7 @@ static void sensors_free_features(void) { } static int sensors_load_conf(void) { - static int call_once = 0; + static int call_once; FILE *fh = NULL; featurelist_t *last_feature = NULL; @@ -269,9 +150,7 @@ static int sensors_load_conf(void) { if (conffile != NULL) { fh = fopen(conffile, "r"); if (fh == NULL) { - char errbuf[1024]; - ERROR("sensors plugin: fopen(%s) failed: %s", conffile, - sstrerror(errno, errbuf, sizeof(errbuf))); + ERROR("sensors plugin: fopen(%s) failed: %s", conffile, STRERRNO); return -1; } } @@ -351,9 +230,9 @@ static int sensors_load_conf(void) { last_feature = fl; } /* while sensors_get_all_features */ } /* while sensors_get_detected_chips */ -/* #endif SENSORS_API_VERSION < 0x400 */ + /* #endif SENSORS_API_VERSION < 0x400 */ -#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) +#elif (SENSORS_API_VERSION >= 0x400) chip_num = 0; while ((chip = sensors_get_detected_chips(NULL, &chip_num)) != NULL) { const sensors_feature *feature; @@ -370,6 +249,9 @@ static int sensors_load_conf(void) { #if SENSORS_API_VERSION >= 0x402 (feature->type != SENSORS_FEATURE_CURR) && #endif +#if SENSORS_API_VERSION >= 0x431 + (feature->type != SENSORS_FEATURE_HUMIDITY) && +#endif (feature->type != SENSORS_FEATURE_POWER)) { DEBUG("sensors plugin: sensors_load_conf: " "Ignoring feature `%s', " @@ -389,6 +271,9 @@ static int sensors_load_conf(void) { #if SENSORS_API_VERSION >= 0x402 (subfeature->type != SENSORS_SUBFEATURE_CURR_INPUT) && #endif +#if SENSORS_API_VERSION >= 0x431 + (subfeature->type != SENSORS_SUBFEATURE_HUMIDITY_INPUT) && +#endif (subfeature->type != SENSORS_SUBFEATURE_POWER_INPUT)) continue; @@ -410,7 +295,7 @@ static int sensors_load_conf(void) { } /* while (subfeature) */ } /* while (feature) */ } /* while (chip) */ -#endif /* (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */ +#endif /* (SENSORS_API_VERSION >= 0x400) */ if (first_feature == NULL) { sensors_cleanup(); @@ -483,9 +368,9 @@ static int sensors_read(void) { sensors_submit(plugin_instance, sensor_type_name_map[fl->type], type_instance, value); } /* for fl = first_feature .. NULL */ -/* #endif SENSORS_API_VERSION < 0x400 */ + /* #endif SENSORS_API_VERSION < 0x400 */ -#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) +#elif (SENSORS_API_VERSION >= 0x400) for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) { double value; int status; @@ -523,12 +408,16 @@ static int sensors_read(void) { else if (fl->feature->type == SENSORS_FEATURE_CURR) type = "current"; #endif +#if SENSORS_API_VERSION >= 0x431 + else if (fl->feature->type == SENSORS_FEATURE_HUMIDITY) + type = "humidity"; +#endif else continue; sensors_submit(plugin_instance, type, type_instance, value); } /* for fl = first_feature .. NULL */ -#endif /* (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */ +#endif /* (SENSORS_API_VERSION >= 0x400) */ return 0; } /* int sensors_read */