From 41d873aaed85e99a34e93bcce9ddcb7c7ffd57e3 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Sun, 31 May 2015 22:54:47 +0200 Subject: [PATCH] tail_csv plugin: Print warning and continue when metric is not found. Previously, when multiple metrics were specified on one "Collect" line and one didn't exist, all *following* metrics would be ignored. This patch changes this to continue in this case and configure as many metrics as possible. --- src/tail_csv.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/tail_csv.c b/src/tail_csv.c index 4794f82e..740095d6 100644 --- a/src/tail_csv.c +++ b/src/tail_csv.c @@ -377,41 +377,42 @@ static void tcsv_instance_definition_destroy(void *arg){ sfree(id); } -static int tcsv_config_add_instance_collect(instance_definition_t *id, oconfig_item_t *ci){ +static int tcsv_config_add_instance_collect(instance_definition_t *id, oconfig_item_t *ci) { metric_definition_t *metric; metric_definition_t **metric_list; - int i,j,n; + size_t metric_list_size; + int i; - if (ci->values_num < 1){ + if (ci->values_num < 1) { WARNING("tail_csv plugin: The `Collect' config option needs at least one argument."); return (-1); } - /* Verify string arguments */ - for (i = 0; i < ci->values_num; ++i) - if (ci->values[i].type != OCONFIG_TYPE_STRING){ - WARNING("tail_csv plugin: All arguments to `Collect' must be strings."); - return (-1); - } - - n = id->metric_list_len + ci->values_num; - metric_list = (metric_definition_t **)realloc(id->metric_list, sizeof(metric_definition_t *) * n); + metric_list_size = id->metric_list_len + (size_t) ci->values_num; + metric_list = realloc (id->metric_list, sizeof (*id->metric_list) * metric_list_size); if (metric_list == NULL) return (-1); - id->metric_list = metric_list; - for (i = id->metric_list_len, j=0; i < n; ++i, ++j){ + for (i = 0; i < ci->values_num; i++) { + char *metric_name; + + if (ci->values[i].type != OCONFIG_TYPE_STRING) { + WARNING("tail_csv plugin: All arguments to `Collect' must be strings."); + continue; + } + metric_name = ci->values[i].value.string; + for (metric = metric_head; metric != NULL; metric = metric->next) - if (strcasecmp(ci->values[j].value.string, metric->name) == 0) + if (strcasecmp(metric_name, metric->name) == 0) break; - if (metric == NULL){ - WARNING("tail_csv plugin: `Collect' argument not found `%s'.", ci->values[j].value.string); - return (-1); + if (metric == NULL) { + WARNING ("tail_csv plugin: `Collect' argument not found `%s'.", metric_name); + continue; } - id->metric_list[i] = metric; + id->metric_list[id->metric_list_len] = metric; id->metric_list_len++; } -- 2.11.0