Sebastian Harl [Tue, 3 Feb 2009 13:08:32 +0000 (14:08 +0100)]
Let plugin_dispatch_values() set value_list.time in case of 'now'.
Basically any (read) plugin was calling time(NULL) to set the time of a values
list. This is now done by plugin_dispatch_values() in case the time is zero
(which is the case when using VALUE_LIST_INIT or VALUE_LIST_STATIC).
This change slightly simplifies the code and makes future changes to the time
management (like the possibly upcoming subsecond resolution support) less
intrusive in respect to the amount of required code changes.
Sebastian Harl [Tue, 3 Feb 2009 12:05:21 +0000 (13:05 +0100)]
Converted timeval_sub_timespec() to timeval_cmp().
The third (return) argument is now of type 'struct timeval' (instead of
'struct timespec') as well. Also, it may now be NULL, in which case the
difference is not returned. This is a more general and thus more flexible
approach that permitted to remove the custom timeval_sub*() implementations in
the multimeter and ntpd plugins.
The return value has been changed to reflect the return value used by
functions like strcmp(), i.e. it is less than, equal to, or greater than zero
if the first argument is less than, equal to, or greater than the second
argument respectively.
In the cases where a 'struct timespec' is required, the return value is now
converted by multiplying the tv_usec member with 1000.
Sebastian Harl [Mon, 2 Feb 2009 11:28:43 +0000 (11:28 +0000)]
build system: Check for and work-around broken Perl_load_module().
Configure now checks for a broken Perl_load_module() definition as introduced
in Perl 5.10 which incorrectly uses __attribute__nonnull__(3). If that has been
detected, the perl plugin will now be built using -Wno-nonnull, thus ignoring
the warning / error produced by the nonnull attribute.
Bruno Prémont [Wed, 4 Feb 2009 22:06:06 +0000 (23:06 +0100)]
ipmi plugin: Improve error handling and handle a temporary error condition more gracefully.
On a server IPMI readings suddenly failed causing the plugin to stop
collecting data.
The following entries got logged:
ipmi plugin: sensor_read_handler: Removing sensor Temp 7 processor (3.6), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 6 processor (3.5), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 5 power_supply (10.5), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 4 processor (3.4), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 3 processor (3.3), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 2 external_environment (39.1), because it failed with status 0x10000d5.
ipmi plugin: sensor_read_handler: Removing sensor Temp 1 system_internal_expansion_board (16.1), because it failed with status 0x10000d5.
This patch attempts to provide slightly better error message and just
skip current reading iteration if the error
IPMI_NOT_SUPPORTED_IN_PRESENT_STATE_CC is indicated.
This error happens e.g. when iLo firmware is upgraded (or reboots?) on
HP servers.
Florian Forster [Wed, 4 Feb 2009 13:29:45 +0000 (14:29 +0100)]
src/plugin.c: Add the `{Pre,Post}CacheChain' options and appropriate chains.
The PreCacheChain is executed before the values are added to the cache, the
PostCacheChain afterwards. If no post-cache chain is given, values will be
dispatched to all write plugins by default.
Florian Forster [Mon, 2 Feb 2009 17:40:11 +0000 (18:40 +0100)]
dbi plugin: Put the row handling logic in an extra module.
The `utils_db_query' module now handles config parsing and row handling.
This unifies basically all of the <Query> blocks, so that the `dbi' and
`oracle' plugins behave exactly alike. Porting the `postgresql' plugin
should be possible, too, so that all three database plugins are in line.
Sebastian Harl [Sun, 1 Feb 2009 22:24:54 +0000 (23:24 +0100)]
dbi plugin: Fixed error handling in an inner loop.
The macro BAIL_OUT_CONTINUE() is used inside the loop iterating over the
result sets to clean up and continue with the next loop iteration. In two
cases this was used in a loop iterating over the instances and values lists
contained within that loop as well though. This would cause the memory that
was currently written to (the two target lists) to be freed and thus cause a
possible segfault. In any case it would leave behind inconsistent and most
probably uninitialized data. The usage of that macro has now been pulled out
of the inner loops.
Sebastian Harl [Sun, 1 Feb 2009 21:48:01 +0000 (22:48 +0100)]
postgresql plugin: Added support for <Result> blocks.
This is a replacement for the "Column" config option (which has been
deprecated). <Result> blocks allow for much more flexible handling of the
data. Besides being able to use data types with multiple data sources, the
plugin now supports to generate the type instance using information from the
database.
An example <Result> block might look like this (taken from the manpage):
<Result>
Type counter
InstancePrefix "rt36_tickets"
InstancesFrom "type"
ValuesFrom "count"
</Result>
Sebastian Harl [Sun, 1 Feb 2009 16:37:52 +0000 (17:37 +0100)]
postgresql plugin: Reinitialize a database after reconnecting.
During initialization we get the right version of each query definition. After
reconnecting, the PostgreSQL server version might have changed, so we might
need to update some of the query definitions.
Sebastian Harl [Sun, 1 Feb 2009 16:36:25 +0000 (17:36 +0100)]
utils_complain: Added macro c_would_release().
This macro returns true if the specified complaint would be released, false
else. This is useful e.g. to do further actions when releasing a complaint.
Florian Forster [Sun, 1 Feb 2009 14:46:27 +0000 (15:46 +0100)]
csv plugin: Make the output to STDOUT compatible to the exec plugin.
Probably not that useful, but the output written to STDOUT by the csv
plugin is not in the form accepted by the exec plugin. This makes some
potentially interesting hacks possible ;)
Florian Forster [Sat, 31 Jan 2009 22:55:30 +0000 (23:55 +0100)]
processes plugin: Make sure ARG_MAX is defined.
Apparently the GNU libc 2.8 removed the macro for some unholy reason. We
either use `sysconf(3)' transparently (if available) or 4kByte (the
POSIX minimum).
Florian Forster [Sat, 24 Jan 2009 10:00:30 +0000 (11:00 +0100)]
tcpconns plugin: Fix an endianness problem under *BSD.
The port numbers were assumed to be in the host's byte order, when in
fact they are in network byte order (big endian). The patch adds `ntohs'
where necessary to fix this problem.
Doug MacEachern [Tue, 20 Jan 2009 09:27:10 +0000 (10:27 +0100)]
contrib/cussh.pl: Add the PUTNOTIF command.
I was using this to test notifications for jcollectd like so:
echo "PUTNOTIF host=foo severity=warning message=my perl is rusty" |
perl -Mblib=bindings/perl contrib/cussh.pl
Florian Forster [Mon, 19 Jan 2009 12:05:23 +0000 (13:05 +0100)]
bind plugin: Don't use LLONG_{MIN,MAX} to increase portability.
Sagly, there's a bug in some versions of GCC/GNU libc which leads to LLONG_*
not being defined. We'll check the return value of strtoll for `>0' and `<0',
which should do the trick, too.
Bruno Prémont [Sat, 17 Jan 2009 10:56:30 +0000 (11:56 +0100)]
bind plugin: Add a new plugin for BIND 9.5 and 9.6 statistics.
Attached are patches for collectd-4.5.x and collectd-4.4.x series for a
plugin to collect statistics from a ISC Bind server.
ISC Bind introduces XML-based statistics which can be fetched via HTTP
starting with bind-9.5.0 and updated the XML structure with bind-9.6.0.
Both XML formats are supported by this plugin.
To enable access to these statistics, use the following configuration
block:
Suggestions on improving the grouping of statistics values are welcome,
currently the following groups are implemented:
RRQueriesIn type=dns_qtype
Requests type=dns_request
QueryResults type=dns_rcode
Updates type=dns_update
ZoneMaintenance type=dns_zops
Resolver type=dns_resolver
Florian Forster [Sat, 17 Jan 2009 10:19:08 +0000 (11:19 +0100)]
network plugin: Make the receive thread even faster.
On very busy systems, the thread apparently may not be scheduled often enough.
So the receive buffer fills up quickly and data may be lost.
This patch changes the `mutex_lock' to a `mutex_trylock' and data is only
appended to the global receive-queue if the lock can be obtained without
blocking.
If the lock cannot be obtained without blocking, the data is instead appended
to a private queue and that queue is appended to the global queue when the lock
can next be taken.
Florian Forster [Sat, 17 Jan 2009 10:01:10 +0000 (11:01 +0100)]
collectd: Don't *abort* on the first read-error with the `-T' option.
The `-T' option used to basically quit the daemon right away when the
first read function of a plugin failed. This patch changes the behavior,
so that:
- All read-functions are tried. If one or more fail, the daemon will
exit with a non-zero exit status, but all read-functions will be
tried.
- Don't quit if one read-function failed without calling all the
shutdown-functions first. This will clean up the UNIX socket of the
unixsock plugin and stuff like that.
Florian Forster [Sat, 17 Jan 2009 09:39:53 +0000 (10:39 +0100)]
openvpn plugin: Added support for LZO compression.
There are four counters for pre/post (de)compression. The code compares
the pre/post counters and submits the current compression ratio based on
the counter change rate.
The type `compression_ratio' (gauge) is used to store the data.
Sebastian Harl [Sun, 11 Jan 2009 14:10:54 +0000 (15:10 +0100)]
libcollectdclient: Added header lcc_features.h.
This header provides various macros and functions that may be used to
determine the version of libcollectdclient (i.e. collectd). The file will be
auto-created from lcc_features.h.in by configure.
The macro LCC_VERSION (previously defined in client.h) has been moved to this
header as well and has been renamed to LCC_API_VERSION.
This allows for fine grained version checks at compile- and runtime.
Florian Forster [Tue, 30 Dec 2008 13:44:39 +0000 (14:44 +0100)]
network plugin: Fix an invalid size of buffer being used.
When specifying the amount of data to copy, we used `sizeof (buffer)' where
`buffer' is a pointer, giving 4 or 8 bytes, depending on the architecture (and
not depending on the actual buffer size). This results in the `type' being sent
much more often than necessary and sometimes not sending a new type when is was
actually necessary. The only prominent case in the default configuration(s) was
`cpufreq' being used instead of `cpu', though.
While in the process, the global `type' buffer was replaced, because an
appropriate buffer is in `value_list_t' now.
Much thanks to Bruno Prémont for reporting and debugging this issue :)
Florian Forster [Tue, 30 Dec 2008 15:46:38 +0000 (16:46 +0100)]
libcollectdclient: Don't use `PF_UNIX', it's broken on Mac OS X.
Under Mac OS X (10.4, possibly others), PF_UNIX is defined as PF_LOCAL, which
in turn is defined as AF_LOCAL. AF_LOCAL, however, is only defined if
POSIX_C_SOURCE is not.
Florian Forster [Tue, 30 Dec 2008 13:44:39 +0000 (14:44 +0100)]
network plugin: Fix an invalid size of buffer being used.
When specifying the amount of data to copy, we used `sizeof (buffer)' where
`buffer' is a pointer, giving 4 or 8 bytes, depending on the architecture (and
not depending on the actual buffer size). This results in the `type' being sent
much more often than necessary and sometimes not sending a new type when is was
actually necessary. The only prominent case in the default configuration(s) was
`cpufreq' being used instead of `cpu', though.
While in the process, the global `type' buffer was replaced, because an
appropriate buffer is in `value_list_t' now.
Much thanks to Bruno Prémont for reporting and debugging this issue :)