X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fping.c;h=b87abb8c2ab98796858ff6cf774023057a16ed48;hb=8d6491e0d382a69b3bdc3d4fb16d58ea20e008ea;hp=e6456f8c9ef66593b364edde4a91df2327b978dc;hpb=c1e47ad7b5e5e889fb86250f714b299e4bf8819f;p=collectd.git diff --git a/src/ping.c b/src/ping.c index e6456f8c..b87abb8c 100644 --- a/src/ping.c +++ b/src/ping.c @@ -20,27 +20,24 @@ * Florian octo Forster **/ -#include "ping.h" - -#if COLLECT_PING -#define MODULE_NAME "ping" - -#include "plugin.h" +#include "collectd.h" #include "common.h" +#include "plugin.h" #include "configfile.h" +#include "utils_debug.h" + +#define MODULE_NAME "ping" #include -#include "libping/ping.h" +#include "liboping/liboping.h" -extern char *pinghosts[MAX_PINGHOSTS]; -extern int num_pinghosts; -static int pingerrors[MAX_PINGHOSTS]; +static pingobj_t *pingobj = NULL; static char *file_template = "ping-%s.rrd"; static char *ds_def[] = { - "DS:ping:GAUGE:25:0:65535", + "DS:ping:GAUGE:"COLLECTD_HEARTBEAT":0:65535", NULL }; static int ds_num = 1; @@ -52,39 +49,37 @@ static char *config_keys[] = }; static int config_keys_num = 1; -void ping_init (void) +static void ping_init (void) { - int i; - - for (i = 0; i < num_pinghosts; i++) - pingerrors[i] = 0; - return; } -int ping_config (char *key, char *value) +static int ping_config (char *key, char *value) { if (strcasecmp (key, "host")) { return (-1); } - else if (num_pinghosts >= MAX_PINGHOSTS) - { - return (1); - } - else if ((pinghosts[num_pinghosts] = strdup (value)) == NULL) + + if (pingobj == NULL) { - return (2); + if ((pingobj = ping_construct ()) == NULL) + { + syslog (LOG_ERR, "ping: `ping_construct' failed.\n"); + return (-1); + } } - else + + if (ping_host_add (pingobj, value) < 0) { - pingerrors[num_pinghosts] = 0; - num_pinghosts++; - return (0); + syslog (LOG_ERR, "ping: `ping_host_add' failed.\n"); + return (-1); } + + return (0); } -void ping_write (char *host, char *inst, char *val) +static void ping_write (char *host, char *inst, char *val) { char file[512]; int status; @@ -99,61 +94,49 @@ void ping_write (char *host, char *inst, char *val) } #define BUFSIZE 256 -void ping_submit (int ping_time, char *host) +static void ping_submit (char *host, double latency) { char buf[BUFSIZE]; - if (snprintf (buf, BUFSIZE, "%u:%u", (unsigned int) curtime, ping_time) >= BUFSIZE) + if (snprintf (buf, BUFSIZE, "%u:%f", (unsigned int) curtime, latency) >= BUFSIZE) return; plugin_submit (MODULE_NAME, host, buf); } #undef BUFSIZE -void ping_read (void) +static void ping_read (void) { - int ping; - int i; + pingobj_iter_t *iter; + + char *host; + double latency; + + if (pingobj == NULL) + return; + + if (ping_send (pingobj) < 0) + { + syslog (LOG_ERR, "ping: `ping_send' failed."); + return; + } - for (i = 0; i < num_pinghosts; i++) + for (iter = ping_iterator_get (pingobj); iter != NULL; iter = ping_iterator_next (iter)) { - if (pingerrors[i] & 0x30) + const char *tmp; + + if ((tmp = ping_iterator_get_host (iter)) == NULL) + continue; + if ((host = strdup (tmp)) == NULL) continue; - - ping = tpinghost (pinghosts[i]); - switch (ping) - { - case 0: - if (!(pingerrors[i] & 0x01)) - syslog (LOG_WARNING, "ping %s: Connection timed out.", pinghosts[i]); - pingerrors[i] |= 0x01; - break; - - case -1: - if (!(pingerrors[i] & 0x02)) - syslog (LOG_WARNING, "ping %s: Host or service is not reachable.", pinghosts[i]); - pingerrors[i] |= 0x02; - break; - - case -2: - syslog (LOG_ERR, "ping %s: Socket error. Ping will be disabled.", pinghosts[i]); - pingerrors[i] |= 0x10; - break; - - case -3: - if (!(pingerrors[i] & 0x04)) - syslog (LOG_WARNING, "ping %s: Connection refused.", pinghosts[i]); - pingerrors[i] |= 0x04; - break; - - default: - if (pingerrors[i] != 0x00) - syslog (LOG_NOTICE, "ping %s: Back to normal: %ims.", pinghosts[i], ping); - pingerrors[i] = 0x00; - ping_submit (ping, pinghosts[i]); - } /* switch (ping) */ - } /* for (i = 0; i < num_pinghosts; i++) */ + latency = ping_iterator_get_latency (iter); + + DBG ("host = %s, latency = %f", host, latency); + ping_submit (host, latency); + + free (host); host = NULL; + } } void module_register (void) @@ -163,4 +146,3 @@ void module_register (void) } #undef MODULE_NAME -#endif /* COLLECT_PING */