summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9451dd7)
raw | patch | inline | side by side (parent: 9451dd7)
author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sat, 29 Mar 2008 08:59:17 +0000 (09:59 +0100) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sat, 29 Mar 2008 08:59:17 +0000 (09:59 +0100) |
Not all disks collected by the disk plugin may be of interest. This commit
implements an ignorelist as provided by src/utils_ignorelist.c to make it
possible to select exactly which instances are interesting and which are not.
Resolves: #3
implements an ignorelist as provided by src/utils_ignorelist.c to make it
possible to select exactly which instances are interesting and which are not.
Resolves: #3
src/collectd.conf.pod | patch | blob | history | |
src/disk.c | patch | blob | history |
diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod
index c16a8fe2f5a2982722acebaf2c7ad500a0e7e7a1..d3f5195a0f40bca0fd1712f63e9a265b649730dd 100644 (file)
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
=back
+=head2 Plugin C<disk>
+
+The C<disk> plugin collects information about the usage of physical disks and
+logical disks (partitions). Values collected are the number of octets written
+to and read from a disk or partition, the number of read/write operations
+issued to the disk and a rather complex "time" it took for these commands to be
+issued.
+
+Using the following two options you can ignore some disks or configure the
+collection only of specific disks.
+
+=over 4
+
+=item B<Disk> I<Name>
+
+Select the disk I<Name>. Whether it is collected or ignored depends on the
+B<IgnoreSelected> setting, see below. As with other plugins that use the
+daemon's ignorelist functionality, a string that starts and ends with a slash
+is interpreted as a regular expression. Examples:
+
+ Disk "sdd"
+ Disk "/hda[34]/"
+
+=item B<IgnoreSelected> B<true>|B<false>
+
+Sets whether selected disks, i.E<nbsp>e. the ones matches by any of the B<Disk>
+statements, are ignored or if all other disks are ignored. The behavior
+(hopefully) is intuitive: If no B<Disk> option is configured, all disks are
+collected. If at least one B<Disk> option is given and no B<IgnoreSelected> or
+set to B<false>, B<only> matching disks will be collected. If B<IgnoreSelected>
+is set to B<true>, all disks are collected B<except> the ones matched.
+
+=back
+
=head2 Plugin C<dns>
=over 4
diff --git a/src/disk.c b/src/disk.c
index 8feaa8dff6fe77d8127c20c9afdaa9fd2530d14d..5491dcbd625f99124a4abf456a22ac5976aaafea 100644 (file)
--- a/src/disk.c
+++ b/src/disk.c
/**
* collectd - src/disk.c
- * Copyright (C) 2005-2007 Florian octo Forster
+ * Copyright (C) 2005-2008 Florian octo Forster
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
#include "collectd.h"
#include "common.h"
#include "plugin.h"
+#include "utils_ignorelist.h"
#if HAVE_MACH_MACH_TYPES_H
# include <mach/mach_types.h>
# error "No applicable input method."
#endif
+static const char *config_keys[] =
+{
+ "Disk",
+ "IgnoreSelected"
+};
+static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
+
+static ignorelist_t *ignorelist = NULL;
+
+static int disk_config (const char *key, const char *value)
+{
+ if (ignorelist == NULL)
+ ignorelist = ignorelist_create (/* invert = */ 1);
+ if (ignorelist == NULL)
+ return (1);
+
+ if (strcasecmp ("Disk", key) == 0)
+ {
+ ignorelist_add (ignorelist, value);
+ }
+ else if (strcasecmp ("IgnoreSelected", key) == 0)
+ {
+ int invert = 1;
+ if ((strcasecmp ("True", value) == 0)
+ || (strcasecmp ("Yes", value) == 0)
+ || (strcasecmp ("On", value) == 0))
+ invert = 0;
+ ignorelist_set_invert (ignorelist, invert);
+ }
+ else
+ {
+ return (-1);
+ }
+
+ return (0);
+} /* int disk_config */
+
static int disk_init (void)
{
#if HAVE_IOKIT_IOKITLIB_H
value_t values[2];
value_list_t vl = VALUE_LIST_INIT;
+ /* Both `ignorelist' and `plugin_instance' may be NULL. */
+ if (ignorelist_match (ignorelist, plugin_instance) != 0)
+ return;
+
values[0].counter = read;
values[1].counter = write;
void module_register (void)
{
- plugin_register_init ("disk", disk_init);
- plugin_register_read ("disk", disk_read);
+ plugin_register_config ("disk", disk_config,
+ config_keys, config_keys_num);
+ plugin_register_init ("disk", disk_init);
+ plugin_register_read ("disk", disk_read);
} /* void module_register */