summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: fd7673e)
raw | patch | inline | side by side (parent: fd7673e)
author | John Leach <john@johnleach.co.uk> | |
Mon, 18 Aug 2014 20:36:35 +0000 (21:36 +0100) | ||
committer | Florian Forster <octo@collectd.org> | |
Thu, 21 Aug 2014 05:48:35 +0000 (07:48 +0200) |
Fixes "Unable to parse line" bug, often seen receiving stats from
OpenStack Swift. Should fix GH issue #461
OpenStack Swift. Should fix GH issue #461
src/statsd.c | patch | blob | history |
diff --git a/src/statsd.c b/src/statsd.c
index 52dd8f86367d70bb3fb1f6de3e3ef1eb67de4005..327b8db476e0b192d0bf12ee13268d6170cbd253 100644 (file)
--- a/src/statsd.c
+++ b/src/statsd.c
} /* }}} int statsd_handle_gauge */
static int statsd_handle_timer (char const *name, /* {{{ */
- char const *value_str)
+ char const *value_str,
+ char const *extra)
{
statsd_metric_t *metric;
value_t value_ms;
+ value_t scale;
cdtime_t value;
int status;
+ if ((extra != NULL) && (extra[0] != '@'))
+ return (-1);
+
+ scale.gauge = 1.0;
+ if (extra != NULL)
+ {
+ status = statsd_parse_value (extra + 1, &scale);
+ if (status != 0)
+ return (status);
+
+ if (!isfinite (scale.gauge) || (scale.gauge <= 0.0) || (scale.gauge > 1.0))
+ return (-1);
+ }
+
value_ms.derive = 0;
status = statsd_parse_value (value_str, &value_ms);
if (status != 0)
return (status);
- value = MS_TO_CDTIME_T (value_ms.gauge);
+ value = MS_TO_CDTIME_T (value_ms.gauge / scale.gauge);
pthread_mutex_lock (&metrics_lock);
if (strcmp ("c", type) == 0)
return (statsd_handle_counter (name, value, extra));
+ else if (strcmp ("ms", type) == 0)
+ return (statsd_handle_timer (name, value, extra));
- /* extra is only valid for counters */
+ /* extra is only valid for counters and timers */
if (extra != NULL)
return (-1);
if (strcmp ("g", type) == 0)
return (statsd_handle_gauge (name, value));
- else if (strcmp ("ms", type) == 0)
- return (statsd_handle_timer (name, value));
else if (strcmp ("s", type) == 0)
return (statsd_handle_set (name, value));
else