#include "plugin.h"
#include "utils_parse_option.h"
+#include "utils_cmd_putval.h"
#define print_to_socket(fh, ...) \
- if (fprintf (fh, __VA_ARGS__) < 0) { \
- char errbuf[1024]; \
- WARNING ("handle_putval: failed to write to socket #%i: %s", \
- fileno (fh), sstrerror (errno, errbuf, sizeof (errbuf))); \
- return -1; \
- }
-
-static int dispatch_values (const data_set_t *ds, value_list_t *vl,
- FILE *fh, char *buffer)
-{
- int status;
-
- status = parse_values (buffer, vl, ds);
- if (status != 0)
- {
- print_to_socket (fh, "-1 Parsing the values string failed.\n");
- return (-1);
- }
-
- plugin_dispatch_values (vl);
- return (0);
-} /* int dispatch_values */
+ do { \
+ if (fprintf (fh, __VA_ARGS__) < 0) { \
+ char errbuf[1024]; \
+ WARNING ("handle_putval: failed to write to socket #%i: %s", \
+ fileno (fh), sstrerror (errno, errbuf, sizeof (errbuf))); \
+ sfree (vl.values); \
+ return -1; \
+ } \
+ fflush(fh); \
+ } while (0)
static int set_option (value_list_t *vl, const char *key, const char *value)
{
if (strcasecmp ("interval", key) == 0)
{
- int tmp;
+ double tmp;
char *endptr;
endptr = NULL;
errno = 0;
- tmp = strtol (value, &endptr, 0);
+ tmp = strtod (value, &endptr);
if ((errno == 0) && (endptr != NULL)
- && (endptr != value) && (tmp > 0))
- vl->interval = tmp;
+ && (endptr != value) && (tmp > 0.0))
+ vl->interval = DOUBLE_TO_CDTIME_T (tmp);
}
else
return (1);
const data_set_t *ds;
value_list_t vl = VALUE_LIST_INIT;
+ vl.values = NULL;
DEBUG ("utils_cmd_putval: handle_putval (fh = %p, buffer = %s);",
(void *) fh, buffer);
/* parse_option failed, buffer has been modified.
* => we need to abort */
print_to_socket (fh, "-1 Misformatted option.\n");
+ sfree (vl.values);
return (-1);
}
else if (status == 0)
if (status != 0)
{
print_to_socket (fh, "-1 Misformatted value.\n");
+ sfree (vl.values);
return (-1);
}
assert (string != NULL);
- status = dispatch_values (ds, &vl, fh, string);
+ status = parse_values (string, &vl, ds);
if (status != 0)
{
- /* An error has already been printed. */
+ print_to_socket (fh, "-1 Parsing the values string failed.\n");
+ sfree (vl.values);
return (-1);
}
+
+ plugin_dispatch_values (&vl);
values_submitted++;
} /* while (*buffer != 0) */
/* Done parsing the options. */
values_submitted,
(values_submitted == 1) ? "value has" : "values have");
- sfree (vl.values);
-
+ sfree (vl.values);
return (0);
} /* int handle_putval */
escape_string (buffer_values, sizeof (buffer_values));
ssnprintf (ret, ret_len,
- "PUTVAL %s interval=%i %s",
+ "PUTVAL %s interval=%.3f %s",
buffer_ident,
- (vl->interval > 0) ? vl->interval : interval_g,
+ (vl->interval > 0)
+ ? CDTIME_T_TO_DOUBLE (vl->interval)
+ : CDTIME_T_TO_DOUBLE (plugin_get_interval ()),
buffer_values);
return (0);