X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_cmd_putval.c;h=15cd939b00610b68215d8b54143e435d50530c8a;hb=e7be1d7ea062e8d4d59c04c42e63d655188dc597;hp=5bd6ec738fd2e188b4b253e3e7ce51937383690a;hpb=c57f2a191b63ce73fc432befebe9fa3af97c8eb5;p=collectd.git diff --git a/src/utils_cmd_putval.c b/src/utils_cmd_putval.c index 5bd6ec73..15cd939b 100644 --- a/src/utils_cmd_putval.c +++ b/src/utils_cmd_putval.c @@ -1,6 +1,6 @@ /** * collectd - src/utils_cms_putval.c - * Copyright (C) 2007,2008 Florian octo Forster + * Copyright (C) 2007-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 @@ -33,65 +33,21 @@ return -1; \ } -static int parse_value (const data_set_t *ds, value_list_t *vl, +static int dispatch_values (const data_set_t *ds, value_list_t *vl, FILE *fh, char *buffer) { - char *dummy; - char *ptr; - char *saveptr; - int i; - - char *time_str = buffer; - char *value_str = strchr (time_str, ':'); - if (value_str == NULL) - { - print_to_socket (fh, "-1 No time found.\n"); - return (-1); - } - *value_str = '\0'; value_str++; - - vl->time = (time_t) atoi (time_str); - - i = 0; - dummy = value_str; - saveptr = NULL; - while ((ptr = strtok_r (dummy, ":", &saveptr)) != NULL) - { - dummy = NULL; - - if (i >= vl->values_len) - { - i = vl->values_len + 1; - break; - } - - if (strcmp (ptr, "U") == 0) - vl->values[i].gauge = NAN; - else if (ds->ds[i].type == DS_TYPE_COUNTER) - vl->values[i].counter = atoll (ptr); - else if (ds->ds[i].type == DS_TYPE_GAUGE) - vl->values[i].gauge = atof (ptr); + int status; - i++; - } /* while (strtok_r) */ - - if (i != vl->values_len) + status = parse_values (buffer, vl, ds); + if (status != 0) { - char identifier[128]; - FORMAT_VL (identifier, sizeof (identifier), vl, ds); - ERROR ("cmd putval: parse_value: " - "Number of values incorrect: " - "Got %i, expected %i. Identifier is `%s'.", - i, vl->values_len, identifier); - print_to_socket (fh, "-1 Number of values incorrect: " - "Got %i, expected %i.\n", - i, vl->values_len); + print_to_socket (fh, "-1 Parsing the values string failed.\n"); return (-1); } plugin_dispatch_values (vl); return (0); -} /* int parse_value */ +} /* int dispatch_values */ static int set_option (value_list_t *vl, const char *key, const char *value) { @@ -252,7 +208,7 @@ int handle_putval (FILE *fh, char *buffer) } assert (string != NULL); - status = parse_value (ds, &vl, fh, string); + status = dispatch_values (ds, &vl, fh, string); if (status != 0) { /* An error has already been printed. */ @@ -271,3 +227,29 @@ int handle_putval (FILE *fh, char *buffer) return (0); } /* int handle_putval */ +int create_putval (char *ret, size_t ret_len, /* {{{ */ + const data_set_t *ds, const value_list_t *vl) +{ + char buffer_ident[6 * DATA_MAX_NAME_LEN]; + char buffer_values[1024]; + int status; + + status = FORMAT_VL (buffer_ident, sizeof (buffer_ident), vl); + if (status != 0) + return (status); + escape_string (buffer_ident, sizeof (buffer_ident)); + + status = format_values (buffer_values, sizeof (buffer_values), + ds, vl, /* store rates = */ 0); + if (status != 0) + return (status); + escape_string (buffer_values, sizeof (buffer_values)); + + ssnprintf (ret, ret_len, + "PUTVAL %s interval=%i %s", + buffer_ident, + (vl->interval > 0) ? vl->interval : interval_g, + buffer_values); + + return (0); +} /* }}} int create_putval */