static int statsd_handle_set (statsd_config_t *conf, char const *name, /* {{{ */ char const *set_key_orig) { statsd_metric_t *metric = NULL; char *set_key; int status; pthread_mutex_lock (&conf->metrics_lock); metric = statsd_metric_lookup_unsafe (conf, name, STATSD_SET); if (metric == NULL) { pthread_mutex_unlock (&conf->metrics_lock); return (-1); } /* Make sure metric->set exists. */ if (metric->set == NULL) metric->set = c_avl_create ((void *) strcmp); if (metric->set == NULL) { pthread_mutex_unlock (&conf->metrics_lock); ERROR ("statsd plugin: c_avl_create failed."); return (-1); } set_key = strdup (set_key_orig); if (set_key == NULL) { pthread_mutex_unlock (&conf->metrics_lock); ERROR ("statsd plugin: strdup failed."); return (-1); } status = c_avl_insert (metric->set, set_key, /* value = */ NULL); if (status < 0) { pthread_mutex_unlock (&conf->metrics_lock); if (status < 0) ERROR ("statsd plugin: c_avl_insert (\"%s\") failed with status %i.", set_key, status); sfree (set_key); return (-1); } else if (status > 0) /* key already exists */ { sfree (set_key); } metric->updates_num++; pthread_mutex_unlock (&conf->metrics_lock); return (0); } /* }}} int statsd_handle_set */
static int statsd_handle_timer (statsd_config_t *conf, char const *name, /* {{{ */ 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 = DOUBLE_TO_CDTIME_T (value_ms.gauge / scale.gauge); pthread_mutex_lock (&conf->metrics_lock); metric = statsd_metric_lookup_unsafe (conf, name, STATSD_TIMER); if (metric == NULL) { pthread_mutex_unlock (&conf->metrics_lock); return (-1); } if (metric->latency == NULL) metric->latency = latency_counter_create (); if (metric->latency == NULL) { pthread_mutex_unlock (&conf->metrics_lock); return (-1); } latency_counter_add (metric->latency, value); metric->updates_num++; pthread_mutex_unlock (&conf->metrics_lock); return (0); } /* }}} int statsd_handle_timer */
static int statsd_metric_add(char const *name, double delta, /* {{{ */ metric_type_t type) { statsd_metric_t *metric; pthread_mutex_lock(&metrics_lock); metric = statsd_metric_lookup_unsafe(name, type); if (metric == NULL) { pthread_mutex_unlock(&metrics_lock); return -1; } metric->value += delta; metric->updates_num++; pthread_mutex_unlock(&metrics_lock); return 0; } /* }}} int statsd_metric_add */
static int statsd_metric_add (statsd_config_t *conf, char const *name, double delta, /* {{{ */ metric_type_t type) { statsd_metric_t *metric; pthread_mutex_lock (&conf->metrics_lock); metric = statsd_metric_lookup_unsafe (conf, name, type); if (metric == NULL) { pthread_mutex_unlock (&conf->metrics_lock); return (-1); } metric->value += delta; metric->updates_num++; pthread_mutex_unlock (&conf->metrics_lock); return (0); } /* }}} int statsd_metric_add */
static int statsd_metric_set (char const *name, double value, /* {{{ */ metric_type_t type) { statsd_metric_t *metric; pthread_mutex_lock (&metrics_lock); metric = statsd_metric_lookup_unsafe (name, type); if (metric == NULL) { pthread_mutex_unlock (&metrics_lock); return (-1); } metric->value = value; metric->updates_num++; pthread_mutex_unlock (&metrics_lock); return (0); } /* }}} int statsd_metric_set */