Bruno Prémont [Sat, 14 Mar 2009 17:06:58 +0000 (18:06 +0100)]
bind plugin: Actually handle RR cache numbers as `gauge'..
Hi Florian,
Well a working patch was even less trivial as the quick one from
yesterday evening.
Just using a gauge type is not sufficient (only 0 is written to RRD
files), it's also necessary to adjust the bind_xml_stats_handle_view()
as has been done for the memory statistics
Attached is a patch to bind.c (I skipped types.db) which fixes the
cache data collection.
In addition I attached a graph of the cache evolution and memory (for
memory it might be worth giving it an own type as it's not cumulative
at all)
Sebastian Harl [Sat, 7 Mar 2009 16:43:54 +0000 (17:43 +0100)]
postgresql_default.conf: Make sure the "disk_io" query does not return NULLs.
Starting with some version between 8.3.3 and 8.3.6, pg_statio_*_tables returns
NULL instead of 0 for statistics if no instance of the appropriate relation
exists. PQgetvalue() returns an empty string in that case which would then
result in error messages when udb_result_submit() tries to convert that to a
number.
Now, the "disk_io" query uses PostgreSQL's coalesce() function to make sure 0
is returned instead of NULL.
Florian Forster [Fri, 6 Mar 2009 15:53:28 +0000 (16:53 +0100)]
rrdtool plugin: Fix a possible race condition at startup.
On a very busy system, if the network plugin was initialized before the
rrdtool plugin, `rrd_cache_insert' may be called before the RRDtool
plugin is initialized. It would then pass `cache == NULL' to
`c_avl_get', resulting in a segmentation fault.
Florian Forster [Mon, 2 Mar 2009 14:27:12 +0000 (15:27 +0100)]
libcollectdclient: Check if the file handle is valid before writing to it.
And free allocated memory when connecting fails. Only assign anything to
the user-provided pointer if `lcc_connect' succeeds. This should make
error-handling much more straight-forward.
Florian Forster [Mon, 2 Mar 2009 08:49:22 +0000 (09:49 +0100)]
snmp plugin: Added a note about a potential bug that needs fixing.
Negative absolute (gauge) values may be casted to an unsigned integer
variable on their way throught he daemon, producing VERY HIGH tempera-
tures in winter..
Bruno Prémont [Sun, 1 Mar 2009 21:20:10 +0000 (22:20 +0100)]
php-collection: Add support for named graph lists as favorites
php-collection: Add support for named graph lists as favorites
php-collection allowed saving and loading a list of graphs from a
cookie.
This patch changes loading/saving to provide support for naming
of favorite graph lists.
When saving a name has to be provided (up to 30 alphanumerical
characters includeing underscore and hyphen.
For loading a named list can be selected from a dropdown list (this list
is refreshed when it gets focus) of available favorites.
Bruno Prémont [Sun, 1 Mar 2009 21:20:06 +0000 (22:20 +0100)]
php-collection/functions.php: Escape/avoid problematic characters in RRD commandline
php-collection/functions.php: Escape/avoid problematic characters in RRD commandline
rrdtool does not like '!' in variable names so replace them with '_'.
(bind plugin has them in a few type-instances and type-instance is used
as variable name by MetaGraphs)
Also escape rrdtool field seperators that might appear in file names.
Bruno Prémont [Sun, 1 Mar 2009 21:19:59 +0000 (22:19 +0100)]
php-collection/definitions.php: Add MetaGraph definitions for bind plugin
php-collection/definitions.php: Add MetaGraph definitions for bind plugin
Add metagraph definition and matching function for the various
types used by bind plugin.
Adjust the memory MetaGraph function to support bind memory statistics.
Bruno Prémont [Sun, 1 Mar 2009 21:19:49 +0000 (22:19 +0100)]
php-collection/graph.php: Add missing error500() function
php-collection/graph.php: Add missing error500() function
When a call to rrdtool fails or some other internal error occurs
a HTTP error with code 500 and matching error image should be
returned, added the missing error500() function which does this
the same way as error404() and error400() functions.
Some obsolete code in collectd_flush() caused PHP Notice errors
and prevented caused the function to return before attempting
to ask collectd to flush cache.
Florian Forster [Sat, 28 Feb 2009 09:29:08 +0000 (10:29 +0100)]
dns plugin: Don't pass a NULL pointer to `pcap_open_live'.
Although the documentation states clearly, that passing a NULL pointer
as device is okay and handled like "any", doing so will crash the daemon
on some systems, most notably *BSDs but Linux users have reported this
behavior, too.
This patch passes "any" when the pointer it NULL, which reportedly
resulted in a different behavior, but still crashing the daemon. We'll
keep trying ;)
Sebastian Harl [Tue, 24 Feb 2009 10:27:22 +0000 (11:27 +0100)]
src/common.c: Fixed a race condition in check_create_dir().
Between checking for the existence of a directory using stat() and creating
the directory using mkdir(), another thread might have already created the
directory thus causing mkdir() to fail with errno == EEXIST. This case is now
handled sanely, no longer causing the function (and thus some write callback)
to fail in this case.
Most likely, this only happens during startup when creating the data
directories - later, no two threads should try to create the same directory.
Interestingly enough, I frequently encountered this issue on a single core
machine.
Florian Forster [Tue, 24 Feb 2009 09:08:29 +0000 (10:08 +0100)]
src/plugin.c: Assure that targets get dynamically allocated memory.
If targets want to replace the values, they will have to use dynamically
allocated memory. If they can't free the values, because the pointer
might point to statically allocated memory, memory will be lost.
Unfortunately stack allocation will not do, since we will then not be able
to detect multiple replacements.
To impose as little a performance issue as possible, the dynamic allo-
cation is only done when either chain is present. If the filter mecha-
nism is not used, the values will not be copied.
Sebastian Harl [Thu, 19 Feb 2009 11:09:46 +0000 (12:09 +0100)]
contrib/cussh.pl: Fixed and improved command parsing.
The input line is now split into separate tokens which are either quoted or
unquoted strings. This simplifies e.g. the parsing of identifiers as the whole
token may be interpreted as just the id string. This allows for specifying a
somewhat greedy regex which before led to the whole remainder of the input
line ending up in the type or type instance.
Bruno Prémont [Thu, 19 Feb 2009 08:42:05 +0000 (09:42 +0100)]
bind plugin: Fix various bugs.
On Mon, 16 February 2009 Florian Forster wrote:
> The new plugins are:
>
> * BIND: Name-server and zone statistics
A few bugs are hidden there, attached is a patch that fixes most
of those I've discovered untils now.
- Url parameter never considered
- missing type definition for dns_reject
- MemoryStats is linked to the wrong variable
(TODO: memory stats seem not to work, probably dispatch_counter()
for gauge value ...)
- SOAOutv6 should be translated to SOA-IPv6 instead of SOA-IPv4
in order to be saved correctly and not cause timestamp collisions
Sebastian Harl [Mon, 16 Feb 2009 21:41:19 +0000 (22:41 +0100)]
postgresql: Fixed calculation of a database's max_params_num.
This parameter is used to store the size of a frequently used temporary list
and allows that it may be efficiently stored on the stack. It was accidentally
lost in commit 4d380d9, triggering an assertion in c_psql_exec_query_params().
Sebastian Harl [Mon, 16 Feb 2009 14:16:48 +0000 (15:16 +0100)]
src/filter_chain.c: Made match_proc_t.create optional.
In most cases it does not make sense to not provide a create callback.
However, we never know what the future might bring, so let's chose the more
flexible approach.
Sebastian Harl [Mon, 16 Feb 2009 13:59:57 +0000 (14:59 +0100)]
perl plugin, Collectd.pm: Added support for filter chains.
fc_register() may now be used to register matches and targets with collectd.
The function takes three arguments: type, name, proc. 'type' has to be any of
FC_MATCH or FC_TARGET, 'name' specifies the name of the target / match and
'proc' is a hash of callbacks (specified by name just like any other
callbacks). There are three types of callbacks: create, destroy and match /
invoke - the former two being optional.
The match / invoke callback has to return any of the following statuses:
FC_MATCH_NO_MATCH, FC_MATCH_MATCHES, FC_TARGET_CONTINUE, FC_TARGET_STOP or
FC_TARGET_RETURN. If none of those constants are used, the behavior is
undefined.
Sebastian Harl [Mon, 16 Feb 2009 11:02:09 +0000 (12:02 +0100)]
Changed plugin_notification_meta_free()'s argument to a notification_meta_t.
This is more flexible and allows the function to be used when using the meta
data without an embedding notification object, e.g. when using the filter
chains.