From 39016ac2ff4bd81c46fd03d16ff26f1866fbeb57 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 19 Mar 2009 17:40:46 +0100 Subject: [PATCH] onewire plugin: Make use of the `complex read' callbacks. The `Interval' option is not honored and can be used to set an arbitrary interval for this plugin. --- src/collectd.conf.pod | 5 ++++ src/onewire.c | 64 +++++++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 8dd53caf..19ca6c50 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -1771,6 +1771,11 @@ enables you to do that: By setting B to I the effect of B is inverted: All selected interfaces are ignored and all other interfaces are collected. +=item B I + +Sets the interval in which all sensors should be read. If not specified, the +global B setting is used. + =back B The C plugin is experimental, because it doesn't yet diff --git a/src/onewire.c b/src/onewire.c index c40d5ad7..261457a1 100644 --- a/src/onewire.c +++ b/src/onewire.c @@ -59,12 +59,14 @@ static ow_family_features_t ow_family_features[] = static int ow_family_features_num = STATIC_ARRAY_SIZE (ow_family_features); static char *device_g = NULL; +static int ow_interval = 0; static const char *config_keys[] = { "Device", "IgnoreSelected", "Sensor", + "Interval" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -104,33 +106,22 @@ static int cow_load_config (const char *key, const char *value) sfree (device_g); device_g = temp; } - else + else if (strcasecmp ("Interval", key) == 0) { - return (-1); + int tmp; + tmp = atoi (value); + if (tmp > 0) + ow_interval = tmp; + else + ERROR ("onewire plugin: Invalid `Interval' setting: %s", value); } - - return (0); -} - -static int cow_init (void) -{ - int status; - - if (device_g == NULL) + else { - ERROR ("onewire plugin: cow_init: No device configured."); return (-1); } - status = (int) OW_init (device_g); - if (status != 0) - { - ERROR ("onewire plugin: OW_init(%s) failed: %i.", device_g, status); - return (1); - } - return (0); -} /* int cow_init */ +} static int cow_read_values (const char *path, const char *name, const ow_family_features_t *family_info) @@ -287,7 +278,7 @@ static int cow_read_bus (const char *path) return (0); } /* int cow_read_bus */ -static int cow_read (void) +static int cow_read (user_data_t *ud __attribute__((unused))) { return (cow_read_bus ("/")); } /* int cow_read */ @@ -299,11 +290,38 @@ static int cow_shutdown (void) return (0); } /* int cow_shutdown */ +static int cow_init (void) +{ + int status; + struct timespec cb_interval; + + if (device_g == NULL) + { + ERROR ("onewire plugin: cow_init: No device configured."); + return (-1); + } + + status = (int) OW_init (device_g); + if (status != 0) + { + ERROR ("onewire plugin: OW_init(%s) failed: %i.", device_g, status); + return (1); + } + + memset (&cb_interval, 0, sizeof (cb_interval)); + if (ow_interval > 0) + cb_interval.tv_sec = (time_t) ow_interval; + + plugin_register_complex_read ("onewire", cow_read, + &cb_interval, /* user data = */ NULL); + plugin_register_shutdown ("onewire", cow_shutdown); + + return (0); +} /* int cow_init */ + void module_register (void) { plugin_register_init ("onewire", cow_init); - plugin_register_read ("onewire", cow_read); - plugin_register_shutdown ("onewire", cow_shutdown); plugin_register_config ("onewire", cow_load_config, config_keys, config_keys_num); } -- 2.30.2