X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsmart.c;h=752cb74cbe603baf47be59d482c0475983f063a6;hb=ae26fc2829c30b957c81179a46590e0bb02b13a6;hp=45bfd171275f6ae7f874fab6ffdb06bcf7ff8566;hpb=a77a72e4e0af9507794355070d02471c29dbd77f;p=collectd.git diff --git a/src/smart.c b/src/smart.c index 45bfd171..752cb74c 100644 --- a/src/smart.c +++ b/src/smart.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" @@ -36,13 +37,15 @@ static const char *config_keys[] = { "Disk", "IgnoreSelected", - "IgnoreSleepMode" + "IgnoreSleepMode", + "UseSerial" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); static ignorelist_t *ignorelist = NULL; static int ignore_sleep_mode = 0; +static int use_serial = 0; static int smart_config (const char *key, const char *value) { @@ -67,6 +70,11 @@ static int smart_config (const char *key, const char *value) if (IS_TRUE (value)) ignore_sleep_mode = 1; } + else if (strcasecmp ("UseSerial", key) == 0) + { + if (IS_TRUE (value)) + use_serial = 1; + } else { return (-1); @@ -137,7 +145,7 @@ static void smart_handle_disk_attribute(SkDisk *d, const SkSmartAttributeParsedD } } -static void smart_handle_disk (const char *dev) +static void smart_handle_disk (const char *dev, const char *serial) { SkDisk *d = NULL; SkBool awake = FALSE; @@ -146,9 +154,16 @@ static void smart_handle_disk (const char *dev) const SkSmartParsedData *spd; uint64_t poweron, powercycles, badsectors, temperature; - shortname = strrchr(dev, '/'); - if (!shortname) return; - shortname++; + if (use_serial && serial) + { + shortname = serial; + } + else + { + shortname = strrchr(dev, '/'); + if (!shortname) return; + shortname++; + } if (ignorelist_match (ignorelist, shortname) != 0) { DEBUG ("smart plugin: ignoring %s.", dev); return; @@ -257,13 +272,14 @@ static int smart_read (void) devices = udev_enumerate_get_list_entry (enumerate); udev_list_entry_foreach (dev_list_entry, devices) { - const char *path, *devpath; + const char *path, *devpath, *serial; path = udev_list_entry_get_name (dev_list_entry); dev = udev_device_new_from_syspath (handle_udev, path); devpath = udev_device_get_devnode (dev); + serial = udev_device_get_property_value (dev, "ID_SERIAL"); /* Query status with libatasmart */ - smart_handle_disk (devpath); + smart_handle_disk (devpath, serial); udev_device_unref (dev); }