123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- --- a/configure.ac
- +++ b/configure.ac
- @@ -705,6 +705,9 @@ AC_CHECK_HEADERS(net/pfvar.h,
- have_termios_h="no"
- AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"])
-
- +# For the iwinfo plugin
- +AC_CHECK_LIB(iwinfo, iwinfo_backend, [with_iwinfo="yes"], [with_iwinfo="no (libiwinfo not found)"], [])
- +
- # For the turbostat plugin
- have_asm_msrindex_h="no"
- AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"])
- @@ -5310,6 +5313,7 @@ plugin_interface="no"
- plugin_ipmi="no"
- plugin_ipvs="no"
- plugin_irq="no"
- +plugin_iwinfo="no"
- plugin_load="no"
- plugin_log_logstash="no"
- plugin_memory="no"
- @@ -5713,6 +5717,7 @@ AC_PLUGIN([ipmi], [$plugin_ipmi],
- AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters])
- AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics])
- AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics])
- +AC_PLUGIN([iwinfo], [$with_iwinfo], [Common iwinfo wireless statistics])
- AC_PLUGIN([java], [$with_java], [Embed the Java Virtual Machine])
- AC_PLUGIN([load], [$plugin_load], [System load])
- AC_PLUGIN([logfile], [yes], [File logging plugin])
- @@ -6042,6 +6047,7 @@ Configuration:
- oracle . . . . . . . $with_oracle
- protobuf-c . . . . . $have_protoc_c
- python . . . . . . . $with_python
- + iwinfo . . . . . . . $with_iwinfo
-
- Features:
- daemon mode . . . . . $enable_daemon
- @@ -6091,6 +6097,7 @@ Configuration:
- iptables . . . . . . $enable_iptables
- ipvs . . . . . . . . $enable_ipvs
- irq . . . . . . . . . $enable_irq
- + iwinfo . . . . . . . $enable_iwinfo
- java . . . . . . . . $enable_java
- load . . . . . . . . $enable_load
- logfile . . . . . . . $enable_logfile
- --- a/src/collectd.conf.in
- +++ b/src/collectd.conf.in
- @@ -128,6 +128,7 @@
- #@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
- #@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
- #@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
- +#@BUILD_PLUGIN_IWINFO_TRUE@LoadPlugin iwinfo
- #@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
- @BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
- #@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar
- @@ -582,6 +583,12 @@
- # IgnoreSelected true
- #</Plugin>
-
- +#<Plugin iwinfo>
- +# Interface "ath0"
- +# Interface "ra0"
- +# Interface "wlan0"
- +#</Plugin>
- +
- #<Plugin java>
- # JVMArg "-verbose:jni"
- # JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
- --- a/src/collectd.conf.pod
- +++ b/src/collectd.conf.pod
- @@ -2612,6 +2612,27 @@ and all other interrupts are collected.
-
- =back
-
- +=head2 Plugin C<iwinfo>
- +
- +=over 4
- +
- +=item B<Interface> I<Interface>
- +
- +Select this interface. By default all detected wireless interfaces will be
- +collected. For a more detailed description see B<IgnoreSelected> below.
- +
- +=item B<IgnoreSelected> I<true>|I<false>
- +
- +If no configuration if given, the B<iwinfo>-plugin will collect data from all
- +detected wireless interfaces. You can use the B<Interface>-option to pick the
- +interfaces you're interested in. Sometimes, however, it's easier/preferred to
- +collect all interfaces I<except> a few ones. This option enables you to do
- +that: By setting B<IgnoreSelected> to I<true> the effect of B<Interface> is
- +inverted: All selected interfaces are ignored and all other interfaces are
- +collected.
- +
- +=back
- +
- =head2 Plugin C<java>
-
- The I<Java> plugin makes it possible to write extensions for collectd in Java.
- --- /dev/null
- +++ b/src/iwinfo.c
- @@ -0,0 +1,150 @@
- +/**
- + * collectd - src/iwinfo.c
- + * Copyright (C) 2011 Jo-Philipp Wich
- + *
- + * 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; 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
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License along
- + * with this program; if not, write to the Free Software Foundation, Inc.,
- + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- + **/
- +
- +#include "collectd.h"
- +#include "common.h"
- +#include "plugin.h"
- +#include "utils_ignorelist.h"
- +
- +#include <stdint.h>
- +#include <iwinfo.h>
- +
- +#define PROCNETDEV "/proc/net/dev"
- +
- +static const char *config_keys[] = {
- + "Interface",
- + "IgnoreSelected"
- +};
- +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
- +
- +static ignorelist_t *ignorelist = NULL;
- +
- +static int iwinfo_config(const char *key, const char *value)
- +{
- + if (ignorelist == NULL)
- + ignorelist = ignorelist_create(1);
- +
- + if (ignorelist == NULL)
- + return 1;
- +
- + if (strcasecmp(key, "Interface") == 0)
- + ignorelist_add(ignorelist, value);
- + else if (strcasecmp(key, "IgnoreSelected") == 0)
- + ignorelist_set_invert(ignorelist, IS_TRUE(value) ? 0 : 1);
- + else
- + return -1;
- +
- + return 0;
- +}
- +
- +static void iwinfo_submit(const char *ifname, const char *type, int 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, "iwinfo", sizeof(vl.plugin));
- + sstrncpy(vl.plugin_instance, ifname, sizeof(vl.plugin_instance));
- + sstrncpy(vl.type, type, sizeof(vl.type));
- + /*sstrncpy(vl.type_instance, "", sizeof(vl.type_instance));*/
- +
- + plugin_dispatch_values(&vl);
- +}
- +
- +static void iwinfo_process(const char *ifname)
- +{
- + int val;
- + char buf[IWINFO_BUFSIZE];
- + const struct iwinfo_ops *iw = iwinfo_backend(ifname);
- +
- + /* does appear to be a wifi iface */
- + if (iw)
- + {
- + if (iw->bitrate(ifname, &val))
- + val = 0;
- + iwinfo_submit(ifname, "bitrate", val * 1000);
- +
- + if (iw->signal(ifname, &val))
- + val = 0;
- + iwinfo_submit(ifname, "signal_power", val);
- +
- + if (iw->noise(ifname, &val))
- + val = 0;
- + iwinfo_submit(ifname, "signal_noise", val);
- +
- + if (iw->quality(ifname, &val))
- + val = 0;
- + iwinfo_submit(ifname, "signal_quality", val);
- +
- + if (iw->assoclist(ifname, buf, &val))
- + val = 0;
- + iwinfo_submit(ifname, "stations",
- + val / sizeof(struct iwinfo_assoclist_entry));
- + }
- +
- + iwinfo_finish();
- +}
- +
- +static int iwinfo_read(void)
- +{
- + char line[1024];
- + char ifname[128];
- + FILE *f;
- +
- + f = fopen(PROCNETDEV, "r");
- + if (f == NULL)
- + {
- + char err[1024];
- + WARNING("iwinfo: Unable to open " PROCNETDEV ": %s",
- + sstrerror(errno, err, sizeof(err)));
- + return -1;
- + }
- +
- + while (fgets(line, sizeof(line), f))
- + {
- + if (!strchr(line, ':'))
- + continue;
- +
- + if (!sscanf(line, " %127[^:]", ifname))
- + continue;
- +
- + if (ignorelist_match(ignorelist, ifname))
- + continue;
- +
- + if (strstr(ifname, "mon.") || strstr(ifname, ".sta") ||
- + strstr(ifname, "tmp.") || strstr(ifname, "wifi"))
- + continue;
- +
- + iwinfo_process(ifname);
- + }
- +
- + fclose(f);
- +
- + return 0;
- +}
- +
- +void module_register(void)
- +{
- + plugin_register_config("iwinfo", iwinfo_config, config_keys, config_keys_num);
- + plugin_register_read("iwinfo", iwinfo_read);
- +}
- --- a/src/Makefile.am
- +++ b/src/Makefile.am
- @@ -457,6 +457,13 @@ irq_la_SOURCES = irq.c
- irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
- endif
-
- +if BUILD_PLUGIN_IWINFO
- +pkglib_LTLIBRARIES += iwinfo.la
- +iwinfo_la_SOURCES = iwinfo.c
- +iwinfo_la_LDFLAGS = -module -avoid-version
- +iwinfo_la_LIBADD = -liwinfo
- +endif
- +
- if BUILD_PLUGIN_JAVA
- pkglib_LTLIBRARIES += java.la
- java_la_SOURCES = java.c
- --- a/src/types.db
- +++ b/src/types.db
- @@ -228,6 +228,7 @@ voltage value:GAUGE:U:U
- vs_memory value:GAUGE:0:9223372036854775807
- vs_processes value:GAUGE:0:65535
- vs_threads value:GAUGE:0:65535
- +stations value:GAUGE:0:256
-
- #
- # Legacy types
|