smart: KNF
[collectd.git] / src / smart.c
index 6c01e67..2207bd6 100644 (file)
@@ -108,6 +108,25 @@ static void smart_handle_disk_attribute(SkDisk *d, const SkSmartAttributeParsedD
   sstrncpy (vl.type_instance, a->name, sizeof (vl.type_instance));
 
   plugin_dispatch_values (&vl);
+
+  if (a->threshold_valid && a->current_value <= a->threshold)
+  {
+    notification_t notif = { NOTIF_WARNING,
+                             cdtime (),
+                             "",
+                             "",
+                             "smart", "",
+                             "smart_attribute",
+                             "",
+                             NULL };
+    sstrncpy (notif.host, hostname_g, sizeof (notif.host));
+    sstrncpy (notif.plugin_instance, dev, sizeof (notif.plugin_instance));
+    sstrncpy (notif.type_instance, a->name, sizeof (notif.type_instance));
+    ssnprintf (notif.message, sizeof (notif.message),
+               "attribute %s is below allowed threshold (%d < %d)",
+               a->name, a->current_value, a->threshold);
+    plugin_dispatch_notification (&notif);
+  }
 }
 
 static void smart_handle_disk (const char *dev)
@@ -234,6 +253,7 @@ static int smart_read (void)
 
     /* Query status with libatasmart */
     smart_handle_disk (devpath);
+    udev_device_unref (dev);
   }
 
   udev_enumerate_unref (enumerate);