summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4ebf0ce)
raw | patch | inline | side by side (parent: 4ebf0ce)
author | Florian Forster <octo@collectd.org> | |
Fri, 12 Jul 2013 16:56:15 +0000 (18:56 +0200) | ||
committer | Florian Forster <octo@collectd.org> | |
Fri, 12 Jul 2013 16:56:15 +0000 (18:56 +0200) |
While the documentation states that "values should generally be integers", this
"should" is not taken in the strict RFC meaning. For compatibility with Etsy's
statsd, handle everything as a double up until the last possible moment.
"should" is not taken in the strict RFC meaning. For compatibility with Etsy's
statsd, handle everything as a double up until the last possible moment.
src/statsd.c | patch | blob | history |
diff --git a/src/statsd.c b/src/statsd.c
index 4a58f41067ee795def9a53bd9686782738808265..b697a347c838a61d6c28223e2c8a3e8014572e50 100644 (file)
--- a/src/statsd.c
+++ b/src/statsd.c
struct statsd_metric_s
{
metric_type_t type;
- int64_t value;
+ double value;
latency_counter_t *latency;
c_avl_tree_t *set;
unsigned long updates_num;
@@ -136,7 +136,7 @@ static statsd_metric_t *statsd_metric_lookup_unsafe (char const *name, /* {{{ */
return (metric);
} /* }}} statsd_metric_lookup_unsafe */
-static int statsd_metric_set (char const *name, int64_t value, /* {{{ */
+static int statsd_metric_set (char const *name, double value, /* {{{ */
metric_type_t type)
{
statsd_metric_t *metric;
return (0);
} /* }}} int statsd_metric_set */
-static int statsd_metric_add (char const *name, int64_t delta, /* {{{ */
+static int statsd_metric_add (char const *name, double delta, /* {{{ */
metric_type_t type)
{
statsd_metric_t *metric;
{
char *endptr = NULL;
- ret_value->derive = (derive_t) strtoll (str, &endptr, /* base = */ 0);
+ ret_value->gauge = (gauge_t) strtod (str, &endptr);
if ((str == endptr) || ((endptr != NULL) && (*endptr != 0)))
return (-1);
scale.gauge = 1.0;
if (extra != NULL)
{
- status = parse_value (extra + 1, &scale, DS_TYPE_GAUGE);
+ status = statsd_parse_value (extra + 1, &scale);
if (status != 0)
return (status);
return (-1);
}
- value.derive = 1;
+ value.gauge = 1.0;
status = statsd_parse_value (value_str, &value);
if (status != 0)
return (status);
if (value.derive < 1)
return (-1);
- return (statsd_metric_add (name,
- (int64_t) (((gauge_t) value.derive) / scale.gauge),
+ return (statsd_metric_add (name, (double) (value.gauge / scale.gauge),
STATSD_COUNTER));
} /* }}} int statsd_handle_counter */
value_t value;
int status;
- value.derive = 0;
+ value.gauge = 0;
status = statsd_parse_value (value_str, &value);
if (status != 0)
return (status);
if ((value_str[0] == '+') || (value_str[0] == '-'))
- return (statsd_metric_add (name, (int64_t) value.derive, STATSD_GAUGE));
+ return (statsd_metric_add (name, (double) value.gauge, STATSD_GAUGE));
else
- return (statsd_metric_set (name, (int64_t) value.derive, STATSD_GAUGE));
+ return (statsd_metric_set (name, (double) value.gauge, STATSD_GAUGE));
} /* }}} int statsd_handle_gauge */
static int statsd_handle_timer (char const *name, /* {{{ */
if (status != 0)
return (status);
- value = MS_TO_CDTIME_T (value_ms.derive);
+ value = MS_TO_CDTIME_T (value_ms.gauge);
pthread_mutex_lock (&metrics_lock);