Pavel Rochnyack [Wed, 31 May 2017 16:27:13 +0000 (23:27 +0700)]
snmp plugin: Fix double free of request PDU
snmp_sess_synch_response() always frees request PDU, in both case of request
error and success. If error condition occurs inside of `while (status == 0)`
loop, double free of `req` happens.
Pavel Rochnyack [Mon, 31 Jul 2017 05:21:24 +0000 (12:21 +0700)]
Proper return value from 'swrite()' when connection has been closed
According to POSIX, errno is set only if 'recv()' returns -1.
When connection has been closed, 'recv()' returns 0 and errno left untouched.
For functions which check errno value after 'swrite()', errno now is set to ECONNRESET,
so they produce correct message 'Connection reset by peer'.
Pavel Rochnyack [Thu, 1 Jun 2017 07:39:24 +0000 (14:39 +0700)]
snmp plugin: Added res->errstat check
Collectd does not check for `res->errstat` value after
`snmp_sess_synch_response()` call. In case of error, there is no any data in
`res->variables` actually, but variables are tried to be processed as usual.
Suffix calculation will fail, so all subtrees will be marked as failed, not
only one subtree which caused an error.
The csnmp_instance_list_add() call will fail too, and, as result,
`csnmp_read_table` will finish it's work without any data submission.
The log message like
"snmp plugin: host HOSTNAME: csnmp_instance_list_add failed",
which is put into logs in this case, also has no enough diagnostic data.
Added code to proper check for `res->errstat` and to try to get available data.
This change introduces max_set_duration, the duration for the value
as max_set_size. max_set_size can keep the db size, however, sometime
max_set_size allows to contain old data. max_set_duration can keep
the latest data.
Marcin Jurkowski [Tue, 11 Jul 2017 13:00:25 +0000 (15:00 +0200)]
uptime plugin: don't cache boot time and simplify Linux code
Caching boottime on startup yields incorrect uptime values if system
date changes after the daemon is started.
This is almost certain to happen on embedded systems without RTC, where
clock is set from NTP server at some point after boot process.
On Linux, we can retrieve uptime directly by either reading /proc/uptime
(it's sufficient to read a few bytes) or calling sysinfo() function.
Use the latter since it's the most efficient way in speed, memory
requirements and code simplicity terms.
Pavel Rochnyack [Sun, 24 Sep 2017 14:00:53 +0000 (21:00 +0700)]
tail plugin: Allow to set "bucket" metrics type
When several distributions needs to be calculated in one 'tail' instance,
all their metrics will be reported as single 'bucket' type with the same plugin instance value.
That is confusing and this patch allows to split these metrics to their own types.
Ivan Kurnosov [Sat, 23 Sep 2017 05:32:14 +0000 (17:32 +1200)]
swap plugin: Added `ReportIO` option
lxc/lxd containers at the moment cannot properly report the swap io (the corresponding /proc/vmstat are not virtualized), so added an option to disable that reporting.
Enabled by default.
Pavel Rochnyack [Sun, 9 Oct 2016 14:28:52 +0000 (20:28 +0600)]
Filecount plugin: Custom values for reported plugin, type and type instance
* Allow to set plugin name;
* Allow to set empty plugin instance;
* Allow to set metric types: Added 'FilesSizeType' and 'FilesCountType' options;
* Allow to disable metric reporting;
* Allow to set metrics type instance
Pavel Rochnyack [Sat, 8 Jul 2017 18:04:05 +0000 (01:04 +0700)]
openvpn: reworked status file parser
* Added detection of status fields index by parsing 'HEADER' lines.
This allows to support status files from latest OpenVPN-2.4 and possible from future versions;
* Fixed a bug with OpenVPN status file version 3 where delimiter is 'tab' (not space or comma);
* Status file version detection was moved from configuration callback to read callback;
* Now 'plugin_register_complex_read()' is used for registering read callback.