X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgmond.c;h=2ffc42a57d93aadf0b3d3bf080d6566c093592f4;hb=f6fa5e18f901664a445699b54cf0afe5a3078176;hp=93bbc95d1091518fb105cba97a7c550c1b87f011;hpb=cfb86a0f119d0ee0e72a920ba1251bb0350cf08b;p=collectd.git diff --git a/src/gmond.c b/src/gmond.c index 93bbc95d..2ffc42a5 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -1,6 +1,6 @@ /** * collectd - src/gmond.c - * Copyright (C) 2005-2009 Florian octo Forster + * Copyright (C) 2009 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -541,6 +541,11 @@ static int staging_entry_update (const char *host, const char *name, /* {{{ */ se->vl.values[ds_index].counter += value.counter; else if (ds_type == DS_TYPE_GAUGE) se->vl.values[ds_index].gauge = value.gauge; + else if (ds_type == DS_TYPE_DERIVE) + se->vl.values[ds_index].derive += value.derive; + else if (ds_type == DS_TYPE_ABSOLUTE) + se->vl.values[ds_index].absolute = value.absolute; + se->flags |= (0x01 << ds_index); /* Check if all values have been set and submit if so. */ @@ -565,6 +570,7 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ value_t value_counter; value_t value_gauge; + value_t value_derive; /* Fill in `host', `name', `value_counter', and `value_gauge' according to * the value type, or return with an error. */ @@ -580,6 +586,7 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ name = msg_uint.metric_id.name; value_counter.counter = (counter_t) msg_uint.ui; value_gauge.gauge = (gauge_t) msg_uint.ui; + value_derive.derive = (derive_t) msg_uint.ui; break; } @@ -595,7 +602,7 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ endptr = NULL; errno = 0; - value_counter.counter = (counter_t) strtoll (msg_string.str, + value_counter.counter = (counter_t) strtoull (msg_string.str, &endptr, /* base = */ 0); if ((endptr == msg_string.str) || (errno != 0)) value_counter.counter = -1; @@ -606,6 +613,13 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ if ((endptr == msg_string.str) || (errno != 0)) value_gauge.gauge = NAN; + endptr = NULL; + errno = 0; + value_derive.derive = (derive_t) strtoll (msg_string.str, + &endptr, /* base = */ 0); + if ((endptr == msg_string.str) || (errno != 0)) + value_derive.derive = 0; + break; } @@ -619,6 +633,7 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ name = msg_float.metric_id.name; value_counter.counter = (counter_t) msg_float.f; value_gauge.gauge = (gauge_t) msg_float.f; + value_derive.derive = (derive_t) msg_float.f; break; } @@ -632,6 +647,7 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ name = msg_double.metric_id.name; value_counter.counter = (counter_t) msg_double.d; value_gauge.gauge = (gauge_t) msg_double.d; + value_derive.derive = (derive_t) msg_double.d; break; } default: @@ -644,10 +660,20 @@ static int mc_handle_value_msg (Ganglia_value_msg *msg) /* {{{ */ map = metric_lookup (name); if (map != NULL) + { + value_t val_copy; + + val_copy = value_counter; + if (map->ds_type == DS_TYPE_GAUGE) + val_copy = value_gauge; + else if (map->ds_type == DS_TYPE_DERIVE) + val_copy = value_derive; + return (staging_entry_update (host, name, map->type, map->type_instance, map->ds_index, map->ds_type, - (map->ds_type == DS_TYPE_COUNTER) ? value_counter : value_gauge)); + val_copy)); + } DEBUG ("gmond plugin: Cannot find a translation for %s.", name); return (-1);