From 7e1ee1bc185e7638d6dbd643ff61bce340829bc6 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 13 May 2009 18:17:35 +0200 Subject: [PATCH] olsrd plugin: Implement a `submit' function and use it, too ;) --- src/olsrd.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++---------- src/types.db | 4 ++ 2 files changed, 102 insertions(+), 20 deletions(-) diff --git a/src/olsrd.c b/src/olsrd.c index 8b73214d..123520a4 100644 --- a/src/olsrd.c +++ b/src/olsrd.c @@ -209,6 +209,31 @@ static FILE *olsrd_connect (void) /* {{{ */ return (fh); } /* }}} FILE *olsrd_connect */ +__attribute__ ((nonnull(2))) +static void olsrd_submit (const char *plugin_instance, /* {{{ */ + const char *type, const char *type_instance, gauge_t value) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].gauge = value; + + vl.values = values; + vl.values_len = 1; + + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "olsrd", sizeof (vl.plugin)); + if (plugin_instance != NULL) + sstrncpy (vl.plugin_instance, plugin_instance, + sizeof (vl.plugin_instance)); + sstrncpy (vl.type, type, sizeof (vl.type)); + if (type_instance != NULL) + sstrncpy (vl.type_instance, type_instance, + sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); +} /* }}} void olsrd_submit */ + static int olsrd_cb_ignore (int lineno, /* {{{ */ size_t fields_num, char **fields) { @@ -232,7 +257,6 @@ static int olsrd_cb_links (int lineno, /* {{{ */ static double nlq_sum; static uint32_t nlq_num; - char link_name[DATA_MAX_NAME_LEN]; double lq; /* tx */ double nlq; /* rx */ @@ -256,17 +280,23 @@ static int olsrd_cb_links (int lineno, /* {{{ */ /* Special handling of the last line. */ if (fields_num == 0) { - DEBUG ("olsrd plugin: fields_num = %"PRIu32";", links_num); + DEBUG ("olsrd plugin: Number of links: %"PRIu32, links_num); + olsrd_submit (/* p.-inst = */ "links", /* type = */ "links", + /* t.-inst = */ NULL, (gauge_t) links_num); lq = NAN; if (lq_num > 0) lq = lq_sum / ((double) lq_num); DEBUG ("olsrd plugin: Average LQ: %g", lq); + olsrd_submit (/* p.-inst = */ "links", /* type = */ "signal_quality", + "average-tx", lq); nlq = NAN; if (nlq_num > 0) nlq = nlq_sum / ((double) nlq_num); DEBUG ("olsrd plugin: Average NLQ: %g", nlq); + olsrd_submit (/* p.-inst = */ "links", /* type = */ "signal_quality", + "average-rx", nlq); return (0); } @@ -276,9 +306,6 @@ static int olsrd_cb_links (int lineno, /* {{{ */ links_num++; - memset (link_name, 0, sizeof (link_name)); - ssnprintf (link_name, sizeof (link_name), "%s-%s", fields[0], fields[1]); - errno = 0; endptr = NULL; lq = strtod (fields[3], &endptr); @@ -296,7 +323,15 @@ static int olsrd_cb_links (int lineno, /* {{{ */ if (config_want_links == OLSRD_WANT_DETAIL) { - DEBUG ("olsrd plugin: %s: LQ = %g.", link_name, lq); + char type_instance[DATA_MAX_NAME_LEN]; + + ssnprintf (type_instance, sizeof (type_instance), "%s-%s-tx", + fields[0], fields[1]); + + DEBUG ("olsrd plugin: links: type_instance = %s; lq = %g;", + type_instance, lq); + olsrd_submit (/* p.-inst = */ "links", /* type = */ "signal_quality", + type_instance, lq); } } @@ -317,7 +352,15 @@ static int olsrd_cb_links (int lineno, /* {{{ */ if (config_want_links == OLSRD_WANT_DETAIL) { - DEBUG ("olsrd plugin: %s: NLQ = %g.", link_name, lq); + char type_instance[DATA_MAX_NAME_LEN]; + + ssnprintf (type_instance, sizeof (type_instance), "%s-%s-rx", + fields[0], fields[1]); + + DEBUG ("olsrd plugin: links: type_instance = %s; nlq = %g;", + type_instance, lq); + olsrd_submit (/* p.-inst = */ "links", /* type = */ "signal_quality", + type_instance, nlq); } } @@ -334,9 +377,9 @@ static int olsrd_cb_routes (int lineno, /* {{{ */ * 3 = ETX * 4 = Interface */ + static uint32_t routes_num; static uint32_t metric_sum; static uint32_t metric_num; - static double etx_sum; static uint32_t etx_num; @@ -350,8 +393,12 @@ static int olsrd_cb_routes (int lineno, /* {{{ */ /* Special handling of the first line */ if (lineno <= 0) { + routes_num = 0; metric_num = 0; metric_sum = 0; + etx_sum = 0.0; + etx_num = 0; + return (0); } @@ -360,22 +407,32 @@ static int olsrd_cb_routes (int lineno, /* {{{ */ { double metric_avg; + DEBUG ("olsrd plugin: Number of routes: %"PRIu32, routes_num); + olsrd_submit (/* p.-inst = */ "routes", /* type = */ "routes", + /* t.-inst = */ NULL, (gauge_t) routes_num); + metric_avg = NAN; if (metric_num > 0) metric_avg = ((double) metric_sum) / ((double) metric_num); + DEBUG ("olsrd plugin: Average metric: %g", metric_avg); + olsrd_submit (/* p.-inst = */ "routes", /* type = */ "route_metric", + "average", metric_avg); etx = NAN; if (etx_num > 0) etx = etx_sum / ((double) etx_sum); + DEBUG ("olsrd plugin: Average ETX: %g", etx); + olsrd_submit (/* p.-inst = */ "routes", /* type = */ "route_etx", + "average", etx); - DEBUG ("olsrd plugin: Number of routes: %"PRIu32"; Average metric: %g", - metric_num, metric_avg); return (0); } if (fields_num != 5) return (-1); + routes_num++; + errno = 0; endptr = NULL; metric = (uint32_t) strtoul (fields[2], &endptr, 0); @@ -390,7 +447,10 @@ static int olsrd_cb_routes (int lineno, /* {{{ */ if (config_want_routes == OLSRD_WANT_DETAIL) { - DEBUG ("olsrd plugin: Route with metric %"PRIu32".", metric); + DEBUG ("olsrd plugin: destination = %s; metric = %"PRIu32";", + fields[0], metric); + olsrd_submit (/* p.-inst = */ "routes", /* type = */ "route_metric", + /* t.-inst = */ fields[0], (gauge_t) metric); } } @@ -411,7 +471,10 @@ static int olsrd_cb_routes (int lineno, /* {{{ */ if (config_want_routes == OLSRD_WANT_DETAIL) { - DEBUG ("olsrd plugin: Route with ETX %g.", etx); + DEBUG ("olsrd plugin: destination = %s; etx = %g;", + fields[0], etx); + olsrd_submit (/* p.-inst = */ "routes", /* type = */ "route_etx", + /* t.-inst = */ fields[0], etx); } } @@ -433,7 +496,6 @@ static int olsrd_cb_topology (int lineno, /* {{{ */ static uint32_t links_num; - char link_name[DATA_MAX_NAME_LEN]; double lq; char *endptr; @@ -453,12 +515,16 @@ static int olsrd_cb_topology (int lineno, /* {{{ */ /* Special handling after the last line */ if (fields_num == 0) { + DEBUG ("olsrd plugin: topology: Number of links: %"PRIu32, links_num); + olsrd_submit (/* p.-inst = */ "topology", /* type = */ "links", + /* t.-inst = */ NULL, (gauge_t) links_num); + lq = NAN; if (lq_num > 0) lq = lq_sum / ((double) lq_sum); - - DEBUG ("olsrd plugin: Number of links: %"PRIu32, links_num); - DEBUG ("olsrd plugin: Average link quality: %g", lq); + DEBUG ("olsrd plugin: topology: Average link quality: %g", lq); + olsrd_submit (/* p.-inst = */ "topology", /* type = */ "signal_quality", + /* t.-inst = */ "average", lq); return (0); } @@ -466,8 +532,6 @@ static int olsrd_cb_topology (int lineno, /* {{{ */ if (fields_num != 5) return (-1); - memset (link_name, 0, sizeof (link_name)); - ssnprintf (link_name, sizeof (link_name), "%s-%s", fields[0], fields[1]); links_num++; errno = 0; @@ -487,7 +551,14 @@ static int olsrd_cb_topology (int lineno, /* {{{ */ if (config_want_topology == OLSRD_WANT_DETAIL) { - DEBUG ("olsrd plugin: link_name = %s; lq = %g;", link_name, lq); + char type_instance[DATA_MAX_NAME_LEN]; + + memset (type_instance, 0, sizeof (type_instance)); + ssnprintf (type_instance, sizeof (type_instance), "%s-%s-rx", + fields[0], fields[1]); + DEBUG ("olsrd plugin: type_instance = %s; lq = %g;", type_instance, lq); + olsrd_submit (/* p.-inst = */ "topology", /* type = */ "signal_quality", + type_instance, lq); } } @@ -504,7 +575,14 @@ static int olsrd_cb_topology (int lineno, /* {{{ */ } else { - DEBUG ("olsrd plugin: link_name = %s; nlq = %g;", link_name, nlq); + char type_instance[DATA_MAX_NAME_LEN]; + + memset (type_instance, 0, sizeof (type_instance)); + ssnprintf (type_instance, sizeof (type_instance), "%s-%s-tx", + fields[0], fields[1]); + DEBUG ("olsrd plugin: type_instance = %s; nlq = %g;", type_instance, nlq); + olsrd_submit (/* p.-inst = */ "topology", /* type = */ "signal_quality", + type_instance, nlq); } } diff --git a/src/types.db b/src/types.db index 6ebc20d0..ad9de7ed 100644 --- a/src/types.db +++ b/src/types.db @@ -63,6 +63,7 @@ ipt_bytes value:COUNTER:0:134217728 ipt_packets value:COUNTER:0:134217728 irq value:COUNTER:U:65535 latency value:GAUGE:0:65535 +links value:GAUGE:0:U load shortterm:GAUGE:0:100, midterm:GAUGE:0:100, longterm:GAUGE:0:100 memcached_command value:COUNTER:0:U memcached_connections value:GAUGE:0:U @@ -105,6 +106,9 @@ ps_stacksize value:GAUGE:0:9223372036854775807 ps_state value:GAUGE:0:65535 ps_vm value:GAUGE:0:9223372036854775807 queue_length value:GAUGE:0:U +route_etx value:GAUGE:0:U +route_metric value:GAUGE:0:U +routes value:GAUGE:0:U serial_octets rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295 signal_noise value:GAUGE:U:0 signal_power value:GAUGE:U:0 -- 2.11.0