Dear collectd,
Please find attached a patch for the conntrack plugin.
The patch is about two things:
1. submit the value even if it is zero (which is a legitimate value according
to types.db);
2. use parse_value and a value_t instead of directly using a double and atof(3).
The first point was important because it meant that the metric was not created
when the initial value was zero. (It could also lead to holes in your graphs).
The parse_value return value is correctly checked, note that the parsed file
ends with a \n which mean that parse_value always complain when running in
debug/info maybe we should replace it with a \0 before handing the buffer to
parse_value() ?
Thanks
--
Louis Opter
Signed-off-by: Florian Forster <octo@collectd.org>
#define CONNTRACK_FILE "/proc/sys/net/netfilter/nf_conntrack_count"
#define CONNTRACK_FILE "/proc/sys/net/netfilter/nf_conntrack_count"
-static void conntrack_submit (double conntrack)
+static void conntrack_submit (value_t conntrack)
value_list_t vl = VALUE_LIST_INIT;
value_list_t vl = VALUE_LIST_INIT;
- values[0].gauge = conntrack;
-
- vl.values = values;
+ vl.values = &conntrack;
vl.values_len = 1;
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "conntrack", sizeof (vl.plugin));
vl.values_len = 1;
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "conntrack", sizeof (vl.plugin));
static int conntrack_read (void)
{
static int conntrack_read (void)
{
FILE *fh;
char buffer[64];
FILE *fh;
char buffer[64];
- conntrack = atof (buffer);
+ if (parse_value (buffer, &conntrack, DS_TYPE_GAUGE) == -1)
+ return (-1);
- if (conntrack > 0.0)
- conntrack_submit (conntrack);
+ conntrack_submit (conntrack);
return (0);
} /* static int conntrack_read */
return (0);
} /* static int conntrack_read */