X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Ftail_csv.c;h=ab8bf6d5958e557db327db5f02f93c76680bd7af;hp=9d0a15bee75444d03111eb402250c1b1d96d33d7;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=88bd89f106abd5c0a9f9a80246e31a16c36a3c6d diff --git a/src/tail_csv.c b/src/tail_csv.c index 9d0a15be..ab8bf6d5 100644 --- a/src/tail_csv.c +++ b/src/tail_csv.c @@ -23,9 +23,9 @@ #include "collectd.h" -#include "common.h" /* auxiliary functions */ -#include "plugin.h" /* plugin_register_*, plugin_dispatch_values */ -#include "utils_tail.h" +#include "plugin.h" /* plugin_register_*, plugin_dispatch_values */ +#include "utils/common/common.h" /* auxiliary functions */ +#include "utils/tail/tail.h" #include #include @@ -44,19 +44,19 @@ struct metric_definition_s { typedef struct metric_definition_s metric_definition_t; struct instance_definition_s { + char *plugin_name; char *instance; char *path; cu_tail_t *tail; metric_definition_t **metric_list; size_t metric_list_len; - cdtime_t interval; ssize_t time_from; struct instance_definition_s *next; }; typedef struct instance_definition_s instance_definition_t; /* Private */ -static metric_definition_t *metric_head = NULL; +static metric_definition_t *metric_head; static int tcsv_submit(instance_definition_t *id, metric_definition_t *md, value_t v, cdtime_t t) { @@ -67,7 +67,8 @@ static int tcsv_submit(instance_definition_t *id, metric_definition_t *md, vl.values_len = 1; vl.values = &v; - sstrncpy(vl.plugin, "tail_csv", sizeof(vl.plugin)); + sstrncpy(vl.plugin, (id->plugin_name != NULL) ? id->plugin_name : "tail_csv", + sizeof(vl.plugin)); if (id->instance != NULL) sstrncpy(vl.plugin_instance, id->instance, sizeof(vl.plugin_instance)); sstrncpy(vl.type, md->type, sizeof(vl.type)); @@ -75,7 +76,6 @@ static int tcsv_submit(instance_definition_t *id, metric_definition_t *md, sstrncpy(vl.type_instance, md->instance, sizeof(vl.type_instance)); vl.time = t; - vl.interval = id->interval; return plugin_dispatch_values(&vl); } @@ -118,17 +118,17 @@ static int tcsv_read_metric(instance_definition_t *id, metric_definition_t *md, return tcsv_submit(id, md, v, t); } -static _Bool tcsv_check_index(ssize_t index, size_t fields_num, - char const *name) { +static bool tcsv_check_index(ssize_t index, size_t fields_num, + char const *name) { if (index < 0) - return 1; + return true; else if (((size_t)index) < fields_num) - return 1; + return true; ERROR("tail_csv plugin: Metric \"%s\": Request for index %zd when " - "only %zu fields are available.", + "only %" PRIsz " fields are available.", name, index, fields_num); - return 0; + return false; } static int tcsv_read_buffer(instance_definition_t *id, char *buffer, @@ -143,7 +143,7 @@ static int tcsv_read_buffer(instance_definition_t *id, char *buffer, while (buffer_size > 0) { if ((buffer[buffer_size - 1] == '\n') || (buffer[buffer_size - 1] == '\r')) { - buffer[buffer_size - 1] = 0; + buffer[buffer_size - 1] = '\0'; buffer_size--; } else { break; @@ -358,6 +358,7 @@ static void tcsv_instance_definition_destroy(void *arg) { cu_tail_destroy(id->tail); id->tail = NULL; + sfree(id->plugin_name); sfree(id->instance); sfree(id->path); sfree(id->metric_list); @@ -415,11 +416,13 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { int status = 0; /* Registration variables */ + cdtime_t interval = 0; char cb_name[DATA_MAX_NAME_LEN]; id = calloc(1, sizeof(*id)); if (id == NULL) return -1; + id->plugin_name = NULL; id->instance = NULL; id->path = NULL; id->metric_list = NULL; @@ -432,9 +435,6 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { return status; } - /* Use default interval. */ - id->interval = plugin_get_interval(); - for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *option = ci->children + i; status = 0; @@ -444,9 +444,11 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { else if (strcasecmp("Collect", option->key) == 0) status = tcsv_config_add_instance_collect(id, option); else if (strcasecmp("Interval", option->key) == 0) - cf_util_get_cdtime(option, &id->interval); + cf_util_get_cdtime(option, &interval); else if (strcasecmp("TimeFrom", option->key) == 0) status = tcsv_config_get_index(option, &id->time_from); + else if (strcasecmp("Plugin", option->key) == 0) + status = cf_util_get_string(option, &id->plugin_name); else { WARNING("tail_csv plugin: Option `%s' not allowed here.", option->key); status = -1; @@ -478,13 +480,13 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { snprintf(cb_name, sizeof(cb_name), "tail_csv/%s", id->path); status = plugin_register_complex_read( - NULL, cb_name, tcsv_read, id->interval, + NULL, cb_name, tcsv_read, interval, &(user_data_t){ - .data = id, .free_func = tcsv_instance_definition_destroy, + .data = id, + .free_func = tcsv_instance_definition_destroy, }); if (status != 0) { ERROR("tail_csv plugin: Registering complex read function failed."); - tcsv_instance_definition_destroy(id); return -1; } @@ -508,7 +510,7 @@ static int tcsv_config(oconfig_item_t *ci) { } /* int tcsv_config */ static int tcsv_init(void) { /* {{{ */ - static _Bool have_init = 0; + static bool have_init; metric_definition_t *md; if (have_init) @@ -527,7 +529,7 @@ static int tcsv_init(void) { /* {{{ */ md->type, md->name); continue; } else if (ds->ds_num != 1) { - ERROR("tail_csv plugin: The type \"%s\" has %zu data sources. " + ERROR("tail_csv plugin: The type \"%s\" has %" PRIsz " data sources. " "Only types with a single data source are supported.", ds->type, ds->ds_num); continue;