From ca3fb937748e51b9a4e7ef170777a0f4bfff7695 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 21 May 2008 16:50:07 +0200 Subject: [PATCH] collectd-nagios: Updated to the new "unixsock" protocol. When disambiguating the protocol used by the unixsock plugin in commit 90287c6d240a168fca8d01f8330e2e2263e1f0a4 ("Disambiguated the protocol used by the unixsock (and other) plugins.") the formatting of the return values of the "GETVAL" command has been modified. This patch updates collectd-nagios to handle the new format correctly. Signed-off-by: Sebastian Harl Signed-off-by: Florian Forster --- src/collectd-nagios.c | 52 ++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/collectd-nagios.c b/src/collectd-nagios.c index f4dff5bb..1bf5b3f3 100644 --- a/src/collectd-nagios.c +++ b/src/collectd-nagios.c @@ -201,12 +201,17 @@ static int get_values (int *ret_values_num, double **ret_values, fclose (fh_out); return (-1); } - fclose (fh_in); fh_in = NULL; fd = -1; - fclose (fh_out); fh_out = NULL; - values_num = atoi (buffer); - if (values_num < 1) - return (-1); + { + char *ptr = strchr (buffer, ' '); + + if (ptr != NULL) + *ptr = '\0'; + + values_num = atoi (buffer); + if (values_num < 1) + return (-1); + } values = (double *) malloc (values_num * sizeof (double)); if (values == NULL) @@ -225,32 +230,33 @@ static int get_values (int *ret_values_num, double **ret_values, return (-1); } + i = 0; + while (fgets (buffer, sizeof (buffer), fh_in) != NULL) { - char *ptr = strchr (buffer, ' ') + 1; char *key; char *value; - i = 0; - while ((key = strtok (ptr, " \t")) != NULL) - { - ptr = NULL; - value = strchr (key, '='); - if (value == NULL) - continue; - *value = '\0'; value++; + key = buffer; - if (ignore_ds (key) != 0) - continue; + value = strchr (key, '='); + if (value == NULL) + continue; + *value = '\0'; value++; - values_names[i] = strdup (key); - values[i] = atof (value); + if (ignore_ds (key) != 0) + continue; - i++; - if (i >= values_num) - break; - } - values_num = i; + values_names[i] = strdup (key); + values[i] = atof (value); + + i++; + if (i >= values_num) + break; } + values_num = i; + + fclose (fh_in); fh_in = NULL; fd = -1; + fclose (fh_out); fh_out = NULL; *ret_values_num = values_num; *ret_values = values; -- 2.11.0