コード例 #1
0
ファイル: statsd.c プロジェクト: skolot/collectd
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 */
コード例 #2
0
ファイル: statsd.c プロジェクト: skolot/collectd
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 */
コード例 #3
0
ファイル: statsd.c プロジェクト: EMSL-MSC/collectd
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 */
コード例 #4
0
ファイル: statsd.c プロジェクト: skolot/collectd
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 */
コード例 #5
0
ファイル: statsd.c プロジェクト: dacamp/collectd
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 */