From d157b2b3c1edff0a72dd7594f69fa955169285f4 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 2 Feb 2007 21:38:02 +0100 Subject: [PATCH] dns plugin: Converted to the new plugin interface. --- src/dns.c | 224 ++++++++++++++++++++------------------------------------------ 1 file changed, 71 insertions(+), 153 deletions(-) diff --git a/src/dns.c b/src/dns.c index 5e114b16..d4e56dac 100644 --- a/src/dns.c +++ b/src/dns.c @@ -1,11 +1,10 @@ /** * collectd - src/dns.c - * Copyright (C) 2006 Florian octo Forster + * Copyright (C) 2006,2007 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 - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. + * Free Software Foundation; only version 2 of the License is applicable. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -27,8 +26,6 @@ #include "utils_debug.h" #include "utils_dns.h" -#define MODULE_NAME "dns" - #if HAVE_LIBPCAP && HAVE_LIBPTHREAD # include # include @@ -54,43 +51,39 @@ typedef struct counter_list_s counter_list_t; /* * Private variables */ -static char *traffic_file = "dns/dns_traffic.rrd"; -static char *qtype_file = "dns/qtype-%s.rrd"; -static char *opcode_file = "dns/opcode-%s.rrd"; -static char *rcode_file = "dns/rcode-%s.rrd"; +static data_source_t octets_dsrc[2] = +{ + {"queries", DS_TYPE_COUNTER, 0, 125000000.0}, + {"responses", DS_TYPE_COUNTER, 0, 125000000.0} +}; -static char *traffic_ds_def[] = +static data_set_t octets_ds = { - /* Limit to 1GBit/s */ - "DS:queries:COUNTER:"COLLECTD_HEARTBEAT":0:125000000", - "DS:responses:COUNTER:"COLLECTD_HEARTBEAT":0:125000000", - NULL + "dns_octets", 2, octets_dsrc }; -static int traffic_ds_num = 2; -static char *qtype_ds_def[] = +static data_source_t counter_dsrc[1] = { - "DS:value:COUNTER:"COLLECTD_HEARTBEAT":0:65535", - NULL + {"value", DS_TYPE_COUNTER, 0, 65535.0} }; -static int qtype_ds_num = 1; -static char *opcode_ds_def[] = +static data_set_t qtype_ds = { - "DS:value:COUNTER:"COLLECTD_HEARTBEAT":0:65535", - NULL + "dns_qtype", 1, counter_dsrc }; -static int opcode_ds_num = 1; -static char *rcode_ds_def[] = +static data_set_t opcode_ds = { - "DS:value:COUNTER:"COLLECTD_HEARTBEAT":0:65535", - NULL + "dns_opcode", 1, counter_dsrc +}; + +static data_set_t rcode_ds = +{ + "dns_rcode", 1, counter_dsrc }; -static int rcode_ds_num = 1; #if DNS_HAVE_READ -static char *config_keys[] = +static const char *config_keys[] = { "Interface", "IgnoreSource", @@ -101,8 +94,8 @@ static int config_keys_num = 2; #define PCAP_SNAPLEN 1460 static char *pcap_device = NULL; -static unsigned int tr_queries; -static unsigned int tr_responses; +static counter_t tr_queries; +static counter_t tr_responses; static counter_list_t *qtype_list; static counter_list_t *opcode_list; static counter_list_t *rcode_list; @@ -191,7 +184,7 @@ static void counter_list_add (counter_list_t **list, DBG ("return ()"); } -static int dns_config (char *key, char *value) +static int dns_config (const char *key, const char *value) { if (strcasecmp (key, "Interface") == 0) { @@ -310,11 +303,9 @@ static void *dns_child_loop (void *dummy) return (NULL); } /* static void dns_child_loop (void) */ -#endif /* DNS_HAVE_READ */ -static void dns_init (void) +static int dns_init (void) { -#if DNS_HAVE_READ /* clean up an old thread */ int status; @@ -324,7 +315,7 @@ static void dns_init (void) pthread_mutex_unlock (&traffic_mutex); if (listen_thread_init != 0) - return; + return (-1); status = pthread_create (&listen_thread, NULL, dns_child_loop, (void *) 0); @@ -332,123 +323,50 @@ static void dns_init (void) { syslog (LOG_ERR, "dns plugin: pthread_create failed: %s", strerror (status)); - return; + return (-1); } listen_thread_init = 1; -#endif /* DNS_HAVE_READ */ -} - -static void traffic_write (char *host, char *inst, char *val) -{ - rrd_update_file (host, traffic_file, val, - traffic_ds_def, traffic_ds_num); -} - -static void qtype_write (char *host, char *inst, char *val) -{ - char file[512]; - int status; - - status = snprintf (file, 512, qtype_file, inst); - if (status < 1) - return; - else if (status >= 512) - return; - - rrd_update_file (host, file, val, qtype_ds_def, qtype_ds_num); -} - -static void rcode_write (char *host, char *inst, char *val) -{ - char file[512]; - int status; - - status = snprintf (file, 512, rcode_file, inst); - if (status < 1) - return; - else if (status >= 512) - return; - rrd_update_file (host, file, val, rcode_ds_def, rcode_ds_num); -} - -static void opcode_write (char *host, char *inst, char *val) -{ - char file[512]; - int status; - - status = snprintf (file, 512, opcode_file, inst); - if (status < 1) - return; - else if (status >= 512) - return; - - rrd_update_file (host, file, val, opcode_ds_def, opcode_ds_num); -} - -#if DNS_HAVE_READ -static void traffic_submit (unsigned int queries, unsigned int replies) -{ - char buffer[64]; - int status; - - status = snprintf (buffer, 64, "N:%u:%u", queries, replies); - if ((status < 1) || (status >= 64)) - return; - - plugin_submit ("dns_traffic", "-", buffer); -} - -static void qtype_submit (int qtype, unsigned int counter) -{ - char inst[32]; - char buffer[32]; - int status; - - strncpy (inst, qtype_str (qtype), 32); - inst[31] = '\0'; - - status = snprintf (buffer, 32, "N:%u", counter); - if ((status < 1) || (status >= 32)) - return; - - plugin_submit ("dns_qtype", inst, buffer); -} + return (0); +} /* int dns_init */ -static void rcode_submit (int rcode, unsigned int counter) +static void submit_counter (const char *type, const char *type_instance, + counter_t value) { - char inst[32]; - char buffer[32]; - int status; + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; - strncpy (inst, rcode_str (rcode), 32); - inst[31] = '\0'; + values[0].counter = value; - status = snprintf (buffer, 32, "N:%u", counter); - if ((status < 1) || (status >= 32)) - return; + vl.values = values; + vl.values_len = 1; + vl.time = time (NULL); + strcpy (vl.host, hostname); + strcpy (vl.plugin, "dns"); + strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); - plugin_submit ("dns_rcode", inst, buffer); -} + plugin_dispatch_values (type, &vl); +} /* void submit_counter */ -static void opcode_submit (int opcode, unsigned int counter) +static void submit_octets (counter_t queries, counter_t responses) { - char inst[32]; - char buffer[32]; - int status; + value_t values[2]; + value_list_t vl = VALUE_LIST_INIT; - strncpy (inst, opcode_str (opcode), 32); - inst[31] = '\0'; + values[0].counter = queries; + values[1].counter = responses; - status = snprintf (buffer, 32, "N:%u", counter); - if ((status < 1) || (status >= 32)) - return; + vl.values = values; + vl.values_len = 2; + vl.time = time (NULL); + strcpy (vl.host, hostname); + strcpy (vl.plugin, "dns"); - plugin_submit ("dns_opcode", inst, buffer); -} + plugin_dispatch_values ("dns_octets", &vl); +} /* void submit_counter */ -static void dns_read (void) +static int dns_read (void) { unsigned int keys[T_MAX]; unsigned int values[T_MAX]; @@ -461,7 +379,7 @@ static void dns_read (void) values[0] = tr_queries; values[1] = tr_responses; pthread_mutex_unlock (&traffic_mutex); - traffic_submit (values[0], values[1]); + submit_octets (values[0], values[1]); pthread_mutex_lock (&qtype_mutex); for (ptr = qtype_list, len = 0; @@ -476,7 +394,7 @@ static void dns_read (void) for (i = 0; i < len; i++) { DBG ("qtype = %u; counter = %u;", keys[i], values[i]); - qtype_submit (keys[i], values[i]); + submit_counter ("dns_qtype", qtype_str (keys[i]), values[i]); } pthread_mutex_lock (&opcode_mutex); @@ -492,7 +410,7 @@ static void dns_read (void) for (i = 0; i < len; i++) { DBG ("opcode = %u; counter = %u;", keys[i], values[i]); - opcode_submit (keys[i], values[i]); + submit_counter ("dns_opcode", opcode_str (keys[i]), values[i]); } pthread_mutex_lock (&rcode_mutex); @@ -508,23 +426,23 @@ static void dns_read (void) for (i = 0; i < len; i++) { DBG ("rcode = %u; counter = %u;", keys[i], values[i]); - rcode_submit (keys[i], values[i]); + submit_counter ("dns_rcode", rcode_str (keys[i]), values[i]); } -} -#else /* if !DNS_HAVE_READ */ -# define dns_read NULL + + return (0); +} /* int dns_read */ #endif void module_register (void) { - plugin_register (MODULE_NAME, dns_init, dns_read, NULL); - plugin_register ("dns_traffic", NULL, NULL, traffic_write); - plugin_register ("dns_qtype", NULL, NULL, qtype_write); - plugin_register ("dns_rcode", NULL, NULL, rcode_write); - plugin_register ("dns_opcode", NULL, NULL, opcode_write); + plugin_register_data_set (&octets_ds); + plugin_register_data_set (&qtype_ds); + plugin_register_data_set (&opcode_ds); + plugin_register_data_set (&rcode_ds); + #if DNS_HAVE_READ - cf_register (MODULE_NAME, dns_config, config_keys, config_keys_num); + plugin_register_config ("dns", dns_config, config_keys, config_keys_num); + plugin_register_init ("dns", dns_init); + plugin_register_read ("dns", dns_read); #endif -} - -#undef MODULE_NAME +} /* void module_register */ -- 2.11.0