src/utils_threshold.c: Added creation of a notification.
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Thu, 1 Nov 2007 11:27:56 +0000 (12:27 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Thu, 1 Nov 2007 11:27:56 +0000 (12:27 +0100)
src/plugin.c
src/plugin.h
src/utils_threshold.c

index 84b7e0b..6b17290 100644 (file)
@@ -717,6 +717,11 @@ int plugin_dispatch_notification (const notification_t *notif)
        llentry_t *le;
        /* Possible TODO: Add flap detection here */
 
+       DEBUG ("plugin_dispatch_notification: severity = %i; message = %s; "
+                       "time = %u; host = %s;",
+                       notif->severity, notif->message,
+                       (unsigned int) notif->time, notif->host);
+
        /* Nobody cares for notifications */
        if (list_notification == NULL)
                return (-1);
index f1a985f..96eb0cb 100644 (file)
@@ -45,7 +45,7 @@
 # define LOG_DEBUG 7
 #endif
 
-#define NOTIF_MAX_MSG_LEN 128
+#define NOTIF_MAX_MSG_LEN 256
 
 #define NOTIF_FAILURE 1
 #define NOTIF_WARNING 2
index 91407e0..1c9ccdd 100644 (file)
@@ -480,9 +480,60 @@ int ut_check_threshold (const data_set_t *ds, const value_list_t *vl)
   for (i = 0; i < ds->ds_num; i++)
   {
     if ((th->min > values[i]) || (th->max < values[i]))
-      WARNING ("ut_check_threshold: ds%i: %lf <= !%lf <= %lf",
-         i, th->min, values[i], th->max);
-  }
+    {
+      notification_t n;
+      char *buf;
+      size_t bufsize;
+      int status;
+
+      WARNING ("ut_check_threshold: ds[%s]: %lf <= !%lf <= %lf",
+         ds->ds[i].name, th->min, values[i], th->max);
+
+      buf = n.message;
+      bufsize = sizeof (n.message);
+
+      status = snprintf (buf, bufsize, "Host %s, plugin %s",
+         vl->host, vl->plugin);
+      buf += status;
+      bufsize -= status;
+
+      if (vl->plugin_instance[0] != '\0')
+      {
+       status = snprintf (buf, bufsize, " (instance %s)",
+           vl->plugin_instance);
+       buf += status;
+       bufsize -= status;
+      }
+
+      status = snprintf (buf, bufsize, " type %s", ds->type);
+      buf += status;
+      bufsize -= status;
+
+      if (vl->type_instance[0] != '\0')
+      {
+       status = snprintf (buf, bufsize, " (instance %s)",
+           vl->type_instance);
+       buf += status;
+       bufsize -= status;
+      }
+
+      status = snprintf (buf, bufsize, ": Data source \"%s\" is currently "
+         "%lf. That is %s the configured threshold of %lf.",
+         ds->ds[i].name, values[i],
+         (values[i] < th->min) ? "below" : "above",
+         (values[i] < th->min) ? th->min : th->max);
+      buf += status;
+      bufsize -= status;
+
+      n.severity = NOTIF_FAILURE;
+      n.time = vl->time;
+
+      strncpy (n.host, vl->host, sizeof (n.host));
+      n.host[sizeof (n.host) - 1] = '\0';
+
+      plugin_dispatch_notification (&n);
+    }
+  } /* for (i = 0; i < ds->ds_num; i++) */
 
   sfree (values);