diff --git a/src/disk.c b/src/disk.c
index 490da07ae56098e2e438a835e8e4a72b1c9c110d..50beb46096c14cf07c645152e49c97fdfe11e936 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;
strcpy (vl.plugin, "disk");
strncpy (vl.plugin_instance, plugin_instance,
sizeof (vl.plugin_instance));
+ strncpy (vl.type, type, sizeof (vl.type));
- plugin_dispatch_values (type, &vl);
+ plugin_dispatch_values (&vl);
} /* void disk_submit */
#if HAVE_IOKIT_IOKITLIB_H
int disk_minor;
char disk_name[64];
- static complain_t complain_obj;
-
/* Get the list of all disk objects. */
if (IOServiceGetMatchingServices (io_master_port,
IOServiceMatching (kIOBlockStorageDriverClass),
&disk_list) != kIOReturnSuccess)
{
- plugin_complain (LOG_ERR, &complain_obj, "disk plugin: "
- "IOServiceGetMatchingServices failed.");
+ ERROR ("disk plugin: IOServiceGetMatchingServices failed.");
return (-1);
}
- else if (complain_obj.interval != 0)
- {
- plugin_relief (LOG_NOTICE, &complain_obj, "disk plugin: "
- "IOServiceGetMatchingServices succeeded.");
- }
while ((disk = IOIteratorNext (disk_list)) != 0)
{
diskstats_t *ds, *pre_ds;
- static complain_t complain_obj;
-
if ((fh = fopen ("/proc/diskstats", "r")) == NULL)
{
- if ((fh = fopen ("/proc/partitions", "r")) == NULL)
+ fh = fopen ("/proc/partitions", "r");
+ if (fh == NULL)
{
- plugin_complain (LOG_ERR, &complain_obj,
- "disk plugin: Failed to open /proc/"
- "{diskstats,partitions}.");
+ ERROR ("disk plugin: fopen (/proc/{diskstats,partitions}) failed.");
return (-1);
}
fieldshift = 1;
}
- plugin_relief (LOG_NOTICE, &complain_obj, "disk plugin: "
- "Succeeded to open /proc/{diskstats,partitions}.");
-
while (fgets (buffer, sizeof (buffer), fh) != NULL)
{
char *disk_name;
if (is_disk)
{
- if ((read_merged != -1LL) || (write_merged != -1LL))
- disk_submit (disk_name, "disk_merged",
- read_merged, write_merged);
+ disk_submit (disk_name, "disk_merged",
+ read_merged, write_merged);
} /* if (is_disk) */
} /* while (fgets (buffer, sizeof (buffer), fh) != NULL) */
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 */