From: Marek Becka Date: Mon, 31 Jul 2017 11:41:25 +0000 (-0400) Subject: use generic types in synproxy plugin and code refactoring X-Git-Tag: collectd-5.8.0~100^2 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=ad2ad9fc2f87f07e74f019edb6c92a17a34ec5b5 use generic types in synproxy plugin and code refactoring --- diff --git a/src/synproxy.c b/src/synproxy.c index eea65baa..dcfb0082 100644 --- a/src/synproxy.c +++ b/src/synproxy.c @@ -28,20 +28,23 @@ #error "No applicable input method." #endif +#define SYNPROXY_FIELDS 6 + static const char *synproxy_stat_path = "/proc/net/stat/synproxy"; -static const char *column_names[] = { +static const char *column_names[SYNPROXY_FIELDS] = { "entries", "syn_received", "invalid", "valid", "retransmission", "reopened" }; -static const char *column_types[] = { - "current_connections", "synproxy_connections", "synproxy_cookies", - "synproxy_cookies", "synproxy_cookies", "synproxy_connections" +static const char *column_types[SYNPROXY_FIELDS] = { + "current_connections", "connections", "cookies", "cookies", "cookies", + "connections" }; static void synproxy_submit(value_t *results) { value_list_t vl = VALUE_LIST_INIT; - for (unsigned n = 1; n < 6; n++) { + /* 1st column (entries) is hardcoded to 0 in kernel code */ + for (size_t n = 1; n < SYNPROXY_FIELDS; n++) { vl.values = &results[n]; vl.values_len = 1; @@ -54,12 +57,11 @@ static void synproxy_submit(value_t *results) { } static int synproxy_read(void) { - FILE *fh; char buf[1024]; - value_t results[6]; + value_t results[SYNPROXY_FIELDS]; int is_header = 1, status = 0; - fh = fopen(synproxy_stat_path, "r"); + FILE *fh = fopen(synproxy_stat_path, "r"); if (fh == NULL) { ERROR("synproxy plugin: unable to open %s", synproxy_stat_path); return -1; @@ -68,16 +70,15 @@ static int synproxy_read(void) { memset(results, 0, sizeof(results)); while (fgets(buf, sizeof(buf), fh) != NULL) { - int numfields; - char *fields[6], *endprt; + char *fields[SYNPROXY_FIELDS], *endprt; if (is_header) { is_header = 0; continue; } - numfields = strsplit(buf, fields, STATIC_ARRAY_SIZE(fields)); - if (numfields != 6) { + int numfields = strsplit(buf, fields, STATIC_ARRAY_SIZE(fields)); + if (numfields != SYNPROXY_FIELDS) { ERROR("synproxy plugin: unexpected number of columns in %s", synproxy_stat_path); status = -1; @@ -85,20 +86,19 @@ static int synproxy_read(void) { } /* 1st column (entries) is hardcoded to 0 in kernel code */ - for (unsigned n = 1; n < 6; n++) { + for (size_t n = 1; n < SYNPROXY_FIELDS; n++) { char *endptr = NULL; errno = 0; results[n].derive += strtoull(fields[n], &endprt, 16); if ((endptr == fields[n]) || errno != 0) { ERROR("synproxy plugin: unable to parse value: %s", fields[n]); - status = -1; - goto err_close; + fclose(fh); + return -1; } } } -err_close: fclose(fh); if (status == 0) { diff --git a/src/types.db b/src/types.db index a0a17824..87a82ee0 100644 --- a/src/types.db +++ b/src/types.db @@ -34,6 +34,7 @@ compression_ratio value:GAUGE:0:2 connections value:DERIVE:0:U conntrack value:GAUGE:0:4294967295 contextswitch value:DERIVE:0:U +cookies value:DERIVE:0:U count value:GAUGE:0:U counter value:COUNTER:U:U cpu value:DERIVE:0:U @@ -232,8 +233,6 @@ spam_score value:GAUGE:U:U spl value:GAUGE:U:U swap value:GAUGE:0:1099511627776 swap_io value:DERIVE:0:U -synproxy_connections value:DERIVE:0:U -synproxy_cookies value:DERIVE:0:U tcp_connections value:GAUGE:0:4294967295 temperature value:GAUGE:U:U threads value:GAUGE:0:U