src/utils_{cache,threshold}.c: Don't replace %{data_source} and %{value} …
authorFlorian Forster <octo@noris.net>
Wed, 29 Sep 2010 16:02:01 +0000 (18:02 +0200)
committerFlorian Forster <octo@noris.net>
Wed, 29 Sep 2010 16:02:01 +0000 (18:02 +0200)
… if the value is missing.

src/utils_cache.c
src/utils_threshold.c

index 0e9bdbe..f00cc9b 100644 (file)
@@ -216,7 +216,7 @@ static int uc_send_notification (const char *name)
     sstrncpy (msg, th.missing_message, sizeof (msg));
     status = ut_build_message (msg, sizeof (msg),
        /* format = */ th.missing_message,
-        &ds, /* ds index = */ 0,
+        &ds, /* ds index = */ -1,
        &vl, ce->values_gauge,
         &n, &th);
     if (status != 0)
index 6f28da2..075af02 100644 (file)
@@ -645,12 +645,18 @@ int ut_build_message(char *out, size_t bufsize, const char *fmt,
   REPLACE_FIELD ("%{plugin_instance}", n->plugin_instance);
   REPLACE_FIELD ("%{type}", n->type);
   REPLACE_FIELD ("%{type_instance}", n->type_instance);
-  REPLACE_FIELD ("%{data_source}", ds->ds[ds_index].name);
 
-  /* This is the offending value, its equivalent to %{ds:value}, if
-   * value is the data_source name. */
-  FTOA(ftoa_temp,values[ds_index])
-    REPLACE_FIELD ("%{value}", ftoa_temp);
+  /* ds_index is set to -1 if the value is missing (there is no data source /
+   * value we could reasonably use. */
+  if (ds_index >= 0)
+  {
+    REPLACE_FIELD ("%{data_source}", ds->ds[ds_index].name);
+
+    /* This is the offending value, its equivalent to %{ds:value}, if
+     * value is the data_source name. */
+    FTOA(ftoa_temp,values[ds_index])
+      REPLACE_FIELD ("%{value}", ftoa_temp);
+  }
 
   /* Now replace all %{ds:<template>} like target_notification does */
   rates_failed = 0;