static int gr_format_name_tagged(char *ret, int ret_len, value_list_t const *vl,
                                 char const *ds_name, char const *prefix,
                                 char const *postfix, char const escape_char,
                                 unsigned int flags) {
  char n_host[DATA_MAX_NAME_LEN];
  char n_plugin[DATA_MAX_NAME_LEN];
  char n_plugin_instance[DATA_MAX_NAME_LEN];
  char n_type[DATA_MAX_NAME_LEN];
  char n_type_instance[DATA_MAX_NAME_LEN];

  char tmp_plugin[DATA_MAX_NAME_LEN + 8];
  char tmp_plugin_instance[DATA_MAX_NAME_LEN + 17];
  char tmp_type[DATA_MAX_NAME_LEN + 6];
  char tmp_type_instance[DATA_MAX_NAME_LEN + 15];
  char tmp_metric[3 * DATA_MAX_NAME_LEN + 2];
  char tmp_ds_name[DATA_MAX_NAME_LEN + 9];

  if (prefix == NULL)
    prefix = "";

  if (postfix == NULL)
    postfix = "";

  gr_copy_escape_part(n_host, vl->host, sizeof(n_host), escape_char, 1);
  gr_copy_escape_part(n_plugin, vl->plugin, sizeof(n_plugin), escape_char, 1);
  gr_copy_escape_part(n_plugin_instance, vl->plugin_instance,
                      sizeof(n_plugin_instance), escape_char, 1);
  gr_copy_escape_part(n_type, vl->type, sizeof(n_type), escape_char, 1);
  gr_copy_escape_part(n_type_instance, vl->type_instance,
                      sizeof(n_type_instance), escape_char, 1);

  snprintf(tmp_plugin, sizeof(tmp_plugin), ";plugin=%s", n_plugin);

  if (n_plugin_instance[0] != '\0')
    snprintf(tmp_plugin_instance, sizeof(tmp_plugin_instance),
             ";plugin_instance=%s", n_plugin_instance);
  else
    tmp_plugin_instance[0] = '\0';

  if (!(flags & GRAPHITE_DROP_DUPE_FIELDS) || strcmp(n_plugin, n_type) != 0)
    snprintf(tmp_type, sizeof(tmp_type), ";type=%s", n_type);
  else
    tmp_type[0] = '\0';

  if (n_type_instance[0] != '\0') {
    if (!(flags & GRAPHITE_DROP_DUPE_FIELDS) ||
        strcmp(n_plugin_instance, n_type_instance) != 0)
      snprintf(tmp_type_instance, sizeof(tmp_type_instance),
               ";type_instance=%s", n_type_instance);
    else
      tmp_type_instance[0] = '\0';
  } else
    tmp_type_instance[0] = '\0';

  /* Assert always_append_ds -> ds_name */
  assert(!(flags & GRAPHITE_ALWAYS_APPEND_DS) || (ds_name != NULL));
  if (ds_name != NULL) {
    snprintf(tmp_ds_name, sizeof(tmp_ds_name), ";ds_name=%s", ds_name);

    if ((flags & GRAPHITE_DROP_DUPE_FIELDS) && strcmp(n_plugin, n_type) == 0)
      snprintf(tmp_metric, sizeof(tmp_metric), "%s.%s", n_plugin, ds_name);
    else
      snprintf(tmp_metric, sizeof(tmp_metric), "%s.%s.%s", n_plugin, n_type,
               ds_name);
  } else {
    tmp_ds_name[0] = '\0';

    if ((flags & GRAPHITE_DROP_DUPE_FIELDS) && strcmp(n_plugin, n_type) == 0)
      snprintf(tmp_metric, sizeof(tmp_metric), "%s", n_plugin);
    else
      snprintf(tmp_metric, sizeof(tmp_metric), "%s.%s", n_plugin, n_type);
  }

  snprintf(ret, ret_len, "%s%s%s;host=%s%s%s%s%s%s", prefix, tmp_metric,
           postfix, n_host, tmp_plugin, tmp_plugin_instance, tmp_type,
           tmp_type_instance, tmp_ds_name);

  return 0;
}
Beispiel #2
0
static int gr_format_name (char *ret, int ret_len,
        value_list_t const *vl,
        char const *ds_name,
        char const *prefix,
        char const *postfix,
        char const escape_char,
        unsigned int flags)
{
    char n_host[DATA_MAX_NAME_LEN];
    char n_plugin[DATA_MAX_NAME_LEN];
    char n_plugin_instance[DATA_MAX_NAME_LEN];
    char n_type[DATA_MAX_NAME_LEN];
    char n_type_instance[DATA_MAX_NAME_LEN];

    char tmp_plugin[2 * DATA_MAX_NAME_LEN + 1];
    char tmp_type[2 * DATA_MAX_NAME_LEN + 1];

    if (prefix == NULL)
        prefix = "";

    if (postfix == NULL)
        postfix = "";

    gr_copy_escape_part (n_host, vl->host,
            sizeof (n_host), escape_char);
    gr_copy_escape_part (n_plugin, vl->plugin,
            sizeof (n_plugin), escape_char);
    gr_copy_escape_part (n_plugin_instance, vl->plugin_instance,
            sizeof (n_plugin_instance), escape_char);
    gr_copy_escape_part (n_type, vl->type,
            sizeof (n_type), escape_char);
    gr_copy_escape_part (n_type_instance, vl->type_instance,
            sizeof (n_type_instance), escape_char);

    if (n_plugin_instance[0] != '\0')
        ssnprintf (tmp_plugin, sizeof (tmp_plugin), "%s%c%s",
            n_plugin,
            (flags & GRAPHITE_SEPARATE_INSTANCES) ? '.' : '-',
            n_plugin_instance);
    else
        sstrncpy (tmp_plugin, n_plugin, sizeof (tmp_plugin));

    if (n_type_instance[0] != '\0')
        ssnprintf (tmp_type, sizeof (tmp_type), "%s%c%s",
            n_type,
            (flags & GRAPHITE_SEPARATE_INSTANCES) ? '.' : '-',
            n_type_instance);
    else
        sstrncpy (tmp_type, n_type, sizeof (tmp_type));

    /* Assert always_append_ds -> ds_name */
    assert (!(flags & GRAPHITE_ALWAYS_APPEND_DS) || (ds_name != NULL));
    if (ds_name != NULL)
        ssnprintf (ret, ret_len, "%s%s%s.%s.%s.%s",
            prefix, n_host, postfix, tmp_plugin, tmp_type, ds_name);
    else
        ssnprintf (ret, ret_len, "%s%s%s.%s.%s",
            prefix, n_host, postfix, tmp_plugin, tmp_type);

    return (0);
}
static int gr_format_name (char *ret, int ret_len,
        value_list_t const *vl,
        char const *ds_name,
        char const *prefix,
        char const *postfix,
        char const escape_char,
        unsigned int flags)
{
    char n_host[DATA_MAX_NAME_LEN];
    char n_plugin[DATA_MAX_NAME_LEN];
    char n_plugin_instance[DATA_MAX_NAME_LEN];
    char n_type[DATA_MAX_NAME_LEN];
    char n_type_instance[DATA_MAX_NAME_LEN];

    char tmp_plugin[2 * DATA_MAX_NAME_LEN + 1];
    char tmp_type[2 * DATA_MAX_NAME_LEN + 1];

    if (prefix == NULL)
        prefix = "";

    if (postfix == NULL)
        postfix = "";

    gr_copy_escape_part (n_host, vl->host,
            sizeof (n_host), escape_char);
    gr_copy_escape_part (n_plugin, vl->plugin,
            sizeof (n_plugin), escape_char);
    gr_copy_escape_part (n_plugin_instance, vl->plugin_instance,
            sizeof (n_plugin_instance), escape_char);
    gr_copy_escape_part (n_type, vl->type,
            sizeof (n_type), escape_char);
    gr_copy_escape_part (n_type_instance, vl->type_instance,
            sizeof (n_type_instance), escape_char);

    if (n_plugin_instance[0] != '\0')
        ssnprintf (tmp_plugin, sizeof (tmp_plugin), "%s%c%s",
            n_plugin,
            (flags & GRAPHITE_SEPARATE_INSTANCES) ? '.' : '-',
            n_plugin_instance);
    else
        sstrncpy (tmp_plugin, n_plugin, sizeof (tmp_plugin));

    if (n_type_instance[0] != '\0')
        ssnprintf (tmp_type, sizeof (tmp_type), "%s%c%s",
            n_type,
            (flags & GRAPHITE_SEPARATE_INSTANCES) ? '.' : '-',
            n_type_instance);
    else
        sstrncpy (tmp_type, n_type, sizeof (tmp_type));

	char *username = NULL;
    if (meta_data_get_string (vl->meta, "network:username", &username) != 0) {
    	WARNING ("No username provided with this packet? Can't write to graphite correctly");
    } 
    
    /* Assert always_append_ds -> ds_name */
    assert (!(flags & GRAPHITE_ALWAYS_APPEND_DS) || (ds_name != NULL));
    if (ds_name != NULL)
         ssnprintf (ret, ret_len, "%s%s.%s%s.%s.%s.%s",
            prefix, username, n_host, postfix, tmp_plugin, tmp_type, ds_name); 
    else
       ssnprintf (ret, ret_len, "%s%s.%s%s.%s.%s",
            prefix, username, n_host, postfix, tmp_plugin, tmp_type); 

	if (username != NULL) {
      sfree(username);
    } 
    return (0);
}