tail plugin: Implement the "GaugePersist" type.
authorFlorian Forster <octo@collectd.org>
Sun, 30 Oct 2016 20:40:04 +0000 (21:40 +0100)
committerFlorian Forster <octo@collectd.org>
Sun, 30 Oct 2016 20:40:04 +0000 (21:40 +0100)
src/collectd.conf.pod
src/daemon/utils_match.c
src/daemon/utils_match.h
src/tail.c

index 761351e..dff0e37 100644 (file)
@@ -7144,6 +7144,13 @@ Use the greatest number only.
 
 Use the last number found.
 
+=item B<GaugePersist>
+
+Use the last number found. The number if not reset at the end of an interval.
+It is continously reported until another number if matched. This is intended
+for cases in which only state changes are reported, for example a thermometer
+that only reports the temperature when it changes.
+
 =item B<CounterSet>
 
 =item B<DeriveSet>
index 914b6e2..31ee6df 100644 (file)
@@ -295,14 +295,13 @@ cu_match_t *match_create_simple (const char *regex,
 
 void match_value_reset (cu_match_value_t *mv)
 {
-  if (mv == NULL)
+  if ((mv == NULL)
+      || ((mv->ds_type & UTILS_MATCH_DS_TYPE_GAUGE) == 0)
+      || ((mv->ds_type & UTILS_MATCH_CF_GAUGE_PERSIST) != 0))
     return;
 
-  if (mv->ds_type & UTILS_MATCH_DS_TYPE_GAUGE)
-  {
-    mv->value.gauge = NAN;
-    mv->values_num = 0;
-  }
+  mv->value.gauge = NAN;
+  mv->values_num = 0;
 } /* }}} void match_value_reset */
 
 void match_destroy (cu_match_t *obj)
index a1d1002..d43ae3b 100644 (file)
@@ -46,6 +46,7 @@
 #define UTILS_MATCH_CF_GAUGE_LAST    0x08
 #define UTILS_MATCH_CF_GAUGE_INC     0x10
 #define UTILS_MATCH_CF_GAUGE_ADD     0x20
+#define UTILS_MATCH_CF_GAUGE_PERSIST 0x40
 
 #define UTILS_MATCH_CF_COUNTER_SET   0x01
 #define UTILS_MATCH_CF_COUNTER_ADD   0x02
index 74fdf84..0ac8be7 100644 (file)
@@ -85,6 +85,8 @@ static int ctail_config_add_match_dstype (ctail_config_match_t *cm,
       cm->flags |= UTILS_MATCH_CF_GAUGE_INC;
     else if (strcasecmp ("GaugeAdd", ci->values[0].value.string) == 0)
       cm->flags |= UTILS_MATCH_CF_GAUGE_ADD;
+    else if (strcasecmp ("GaugePersist", ci->values[0].value.string) == 0)
+      cm->flags |= UTILS_MATCH_CF_GAUGE_PERSIST;
     else
       cm->flags = 0;
   }