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.
To detect cflags and libs use the sometimes provided pkg-config for
libdpdk. That avoids build errors on systems where special flags are
needed and provided by dpdk via pkg-config, but not yet considered by
the collectd build system.
root [Thu, 17 Aug 2017 14:18:02 +0000 (14:18 +0000)]
configure.ac: dpdk: tolerate no pkg-config
Since pull request #2400 pkg-config works great for dpdk, but not if
there is no pkg-config around at all.
To fix that the PKG_CHECK_MODULES macro needs to define a valid fourth
argument, otherwise it will error out.
This closes 2404
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
configure.ac: dpdk: append DPDK_CFLAGS to LIBDPDK_CPPFLAGS
In some way it is bad naming in pkg-config - it is always some sort of
conflated ldflags + libs and cppflags + cxxflags + cflags.
Due to that to work correctly we append DPDK_CFLAGS (if defined by
pkg-config) to LIBDPDK_CPPFLAGS as well.
This intentionally does not add those CFLAGS specified by a user to
allow full override and fully separated CLFAGS/CPPFLAGS if needed.
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
To detect cflags and libs use the sometimes provided pkg-config for
libdpdk. That avoids build errors on systems where special flags are
needed and provided by dpdk via pkg-config, but not yet considered by
the collectd build system.
This closes #2399
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Pavel Rochnyack [Mon, 24 Jul 2017 08:07:16 +0000 (15:07 +0700)]
openldap: Fix plugin shutdown with connection failed
When plugin failes to connect to LDAP server, the `ldap_unbind_ext_s(st->ld)` is called.
According to `man 3 ldap_unbind_ext_s`, that call is used to free the resources contained in the ld structure.
When plugin shutdown, the `ldap_unbind_ext_s` called again, which causes coredump.
The plugin code was changed to set st->ld to NULL after `ldap_unbind_ext_s()` call.
Pavel Rochnyack [Mon, 24 Jul 2017 07:05:16 +0000 (14:05 +0700)]
openldap: Fixed possible dereference of NULL pointer
If `plugin_register_complex_read()` has failed, then `cldap_free` is called which set pointer to NULL.
That pointer is accessed by `cldap_shutdown()` callback later.