From 3c11483706eebaac9650a4bf051dfd665ff8ed0f Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Sun, 31 Oct 2010 14:11:59 +0100 Subject: [PATCH] Various plugins: More fixes for the "cdtime_t" change. --- src/bind.c | 2 +- src/netapp.c | 2 +- src/onewire.c | 12 +++++------- src/snmp.c | 54 +++++++++++++++++------------------------------------- src/utils_time.h | 16 ++++++++-------- 5 files changed, 32 insertions(+), 54 deletions(-) diff --git a/src/bind.c b/src/bind.c index 6e0b907f..47215c74 100644 --- a/src/bind.c +++ b/src/bind.c @@ -241,7 +241,7 @@ static void submit (time_t ts, const char *plugin_instance, /* {{{ */ vl.values = values; vl.values_len = 1; - vl.time = ts; + vl.time = TIME_T_TO_CDTIME_T (ts); sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, "bind", sizeof(vl.plugin)); if (plugin_instance) { diff --git a/src/netapp.c b/src/netapp.c index 2336d467..1640cfd2 100644 --- a/src/netapp.c +++ b/src/netapp.c @@ -2547,7 +2547,7 @@ static int cna_config (oconfig_item_t *ci) { /* {{{ */ ssnprintf (cb_name, sizeof (cb_name), "netapp-%s", host->name); - interval = CDTIME_T_TO_TIMESPEC (host->interval); + CDTIME_T_TO_TIMESPEC (host->interval, &interval); memset (&ud, 0, sizeof (ud)); ud.data = host; diff --git a/src/onewire.c b/src/onewire.c index 462458c7..d308122a 100644 --- a/src/onewire.c +++ b/src/onewire.c @@ -106,10 +106,10 @@ static int cow_load_config (const char *key, const char *value) } else if (strcasecmp ("Interval", key) == 0) { - int tmp; - tmp = atoi (value); - if (tmp > 0) - ow_interval = tmp; + double tmp; + tmp = atof (value); + if (tmp > 0.0) + ow_interval = DOUBLE_TO_CDTIME_T (tmp); else ERROR ("onewire plugin: Invalid `Interval' setting: %s", value); } @@ -306,9 +306,7 @@ static int cow_init (void) return (1); } - memset (&cb_interval, 0, sizeof (cb_interval)); - if (ow_interval > 0) - cb_interval.tv_sec = (time_t) ow_interval; + CDTIME_T_TO_TIMESPEC (ow_interval, &cb_interval); plugin_register_complex_read (/* group = */ NULL, "onewire", cow_read, &cb_interval, /* user data = */ NULL); diff --git a/src/snmp.c b/src/snmp.c index 1c2828c1..e78ade97 100644 --- a/src/snmp.c +++ b/src/snmp.c @@ -69,7 +69,7 @@ struct host_definition_s int version; void *sess_handle; c_complain_t complaint; - uint32_t interval; + cdtime_t interval; data_definition_t **data_list; int data_list_len; }; @@ -159,7 +159,6 @@ static void csnmp_host_definition_destroy (void *arg) /* {{{ */ * +-> csnmp_config_add_host_community * +-> csnmp_config_add_host_version * +-> csnmp_config_add_host_collect - * +-> csnmp_config_add_host_interval */ static void call_snmp_init_once (void) { @@ -543,22 +542,6 @@ static int csnmp_config_add_host_collect (host_definition_t *host, return (0); } /* int csnmp_config_add_host_collect */ -static int csnmp_config_add_host_interval (host_definition_t *hd, oconfig_item_t *ci) -{ - if ((ci->values_num != 1) - || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) - { - WARNING ("snmp plugin: The `Interval' config option needs exactly one number argument."); - return (-1); - } - - hd->interval = ci->values[0].value.number >= 0 - ? (uint32_t) ci->values[0].value.number - : 0; - - return (0); -} /* int csnmp_config_add_host_interval */ - static int csnmp_config_add_host (oconfig_item_t *ci) { host_definition_t *hd; @@ -607,7 +590,7 @@ static int csnmp_config_add_host (oconfig_item_t *ci) else if (strcasecmp ("Collect", option->key) == 0) csnmp_config_add_host_collect (hd, option); else if (strcasecmp ("Interval", option->key) == 0) - csnmp_config_add_host_interval (hd, option); + cf_util_get_cdtime (option, &hd->interval); else { WARNING ("snmp plugin: csnmp_config_add_host: Option `%s' not allowed here.", option->key); @@ -651,9 +634,7 @@ static int csnmp_config_add_host (oconfig_item_t *ci) cb_data.data = hd; cb_data.free_func = csnmp_host_definition_destroy; - memset (&cb_interval, 0, sizeof (cb_interval)); - if (hd->interval != 0) - cb_interval.tv_sec = (time_t) hd->interval; + CDTIME_T_TO_TIMESPEC (hd->interval, &cb_interval); status = plugin_register_complex_read (/* group = */ NULL, cb_name, csnmp_read_host, /* interval = */ &cb_interval, @@ -1076,7 +1057,7 @@ static int csnmp_dispatch_table (host_definition_t *host, data_definition_t *dat sstrncpy (vl.host, host->name, sizeof (vl.host)); sstrncpy (vl.plugin, "snmp", sizeof (vl.plugin)); - vl.interval = host->interval; + vl.interval = (int) CDTIME_T_TO_TIME_T (host->interval); subid = 0; have_more = 1; @@ -1464,7 +1445,7 @@ static int csnmp_read_value (host_definition_t *host, data_definition_t *data) sstrncpy (vl.type, data->type, sizeof (vl.type)); sstrncpy (vl.type_instance, data->instance.string, sizeof (vl.type_instance)); - vl.interval = host->interval; + vl.interval = (int) CDTIME_T_TO_TIME_T (host->interval); req = snmp_pdu_create (SNMP_MSG_GET); if (req == NULL) @@ -1529,20 +1510,19 @@ static int csnmp_read_value (host_definition_t *host, data_definition_t *data) static int csnmp_read_host (user_data_t *ud) { host_definition_t *host; - time_t time_start; - time_t time_end; + cdtime_t time_start; + cdtime_t time_end; int status; int success; int i; host = ud->data; + /* FIXME: Convert "interval_g" to cdtime_t, too. */ if (host->interval == 0) - host->interval = interval_g; + host->interval = TIME_T_TO_CDTIME_T (interval_g); - time_start = time (NULL); - DEBUG ("snmp plugin: csnmp_read_host (%s) started at %u;", host->name, - (unsigned int) time_start); + time_start = cdtime (); if (host->sess_handle == NULL) csnmp_host_open_session (host); @@ -1564,14 +1544,14 @@ static int csnmp_read_host (user_data_t *ud) success++; } - time_end = time (NULL); - DEBUG ("snmp plugin: csnmp_read_host (%s) finished at %u;", host->name, - (unsigned int) time_end); - if ((uint32_t) (time_end - time_start) > host->interval) + time_end = cdtime (); + if ((time_end - time_start) > host->interval) { - WARNING ("snmp plugin: Host `%s' should be queried every %"PRIu32 - " seconds, but reading all values takes %u seconds.", - host->name, host->interval, (unsigned int) (time_end - time_start)); + WARNING ("snmp plugin: Host `%s' should be queried every %.3f " + "seconds, but reading all values takes %.3f seconds.", + host->name, + CDTIME_T_TO_DOUBLE (host->interval), + CDTIME_T_TO_DOUBLE (time_end - time_start)); } if (success == 0) diff --git a/src/utils_time.h b/src/utils_time.h index 3c31b353..c3928d63 100644 --- a/src/utils_time.h +++ b/src/utils_time.h @@ -48,17 +48,17 @@ typedef uint64_t cdtime_t; #define NS_TO_CDTIME_T(ns) ((cdtime_t) (((double) (ns)) * 1.073741824)) #define CDTIME_T_TO_NS(t) ((long) (((double) (t)) / 1.073741824)) -#define CDTIME_T_TO_TIMEVAL(t) { \ - CDTIME_T_TO_TIME_T (t), \ - CDTIME_T_TO_US (t % 1073741824) \ -} +#define CDTIME_T_TO_TIMEVAL(cdt,tvp) do { \ + (tvp)->tv_sec = CDTIME_T_TO_TIME_T (cdt); \ + (tvp)->tv_used = CDTIME_T_TO_US ((cdt) % 1073741824) \ +} while (0) #define TIMEVAL_TO_CDTIME_T(tv) (TIME_T_TO_CDTIME_T ((tv).tv_sec) \ + US_TO_CDTIME_T ((tv).tv_usec)) -#define CDTIME_T_TO_TIMESPEC(t) { \ - CDTIME_T_TO_TIME_T (t), \ - CDTIME_T_TO_NS (t % 1073741824) \ -} +#define CDTIME_T_TO_TIMESPEC(cdt,tsp) do { \ + (tsp)->tv_sec = CDTIME_T_TO_TIME_T (cdt); \ + (tsp)->tv_nsec = CDTIME_T_TO_NS ((cdt) % 1073741824); \ +} while (0) #define TIMESPEC_TO_CDTIME_T(ts) (TIME_T_TO_CDTIME_T ((ts).tv_sec) \ + NS_TO_CDTIME_T ((ts).tv_nsec)) -- 2.11.0