source: packages/utils/collectd/patches/900-add-iwinfo-plugin.patch @ 29404

Last change on this file since 29404 was 29404, checked in by jow, 5 years ago

[packages] collectd: add iwinfo plugin, similar to wireless but compatible to madwifi and mac80211 drivers

File size: 7.6 KB
  • configure.in

    a b AC_CHECK_HEADERS(netinet/if_ether.h, [], 
    471471have_termios_h="no" 
    472472AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"]) 
    473473 
     474# For the iwinfo plugin 
     475AC_CHECK_LIB(iwinfo, iwinfo_backend, [with_iwinfo="yes"], [with_iwinfo="no (libiwinfo not found)"], []) 
     476 
    474477# 
    475478# Checks for typedefs, structures, and compiler characteristics. 
    476479# 
    plugin_interface="no" 
    39853988plugin_ipmi="no" 
    39863989plugin_ipvs="no" 
    39873990plugin_irq="no" 
     3991plugin_iwinfo="no" 
    39883992plugin_libvirt="no" 
    39893993plugin_load="no" 
    39903994plugin_memory="no" 
    AC_PLUGIN([ipmi], [$plugin_ipmi], 
    42924296AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters]) 
    42934297AC_PLUGIN([ipvs],        [$plugin_ipvs],       [IPVS connection statistics]) 
    42944298AC_PLUGIN([irq],         [$plugin_irq],        [IRQ statistics]) 
     4299AC_PLUGIN([iwinfo],      [$with_iwinfo],       [Common iwinfo wireless statistics]) 
    42954300AC_PLUGIN([java],        [$with_java],         [Embed the Java Virtual Machine]) 
    42964301AC_PLUGIN([libvirt],     [$plugin_libvirt],    [Virtual machine statistics]) 
    42974302AC_PLUGIN([load],        [$plugin_load],       [System load]) 
    Configuration: 
    45704575    protobuf-c  . . . . . $have_protoc_c 
    45714576    oracle  . . . . . . . $with_oracle 
    45724577    python  . . . . . . . $with_python 
     4578    iwinfo  . . . . . . . $with_iwinfo 
    45734579 
    45744580  Features: 
    45754581    daemon mode . . . . . $enable_daemon 
    Configuration: 
    46094615    iptables  . . . . . . $enable_iptables 
    46104616    ipvs  . . . . . . . . $enable_ipvs 
    46114617    irq . . . . . . . . . $enable_irq 
     4618    iwinfo  . . . . . . . $enable_iwinfo 
    46124619    java  . . . . . . . . $enable_java 
    46134620    libvirt . . . . . . . $enable_libvirt 
    46144621    load  . . . . . . . . $enable_load 
  • src/collectd.conf.in

    a b FQDNLookup true 
    8282#@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi 
    8383#@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs 
    8484#@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq 
     85#@BUILD_PLUGIN_IWINFO_TRUE@LoadPlugin iwinfo 
    8586#@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java 
    8687#@BUILD_PLUGIN_LIBVIRT_TRUE@LoadPlugin libvirt 
    8788@BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load 
    FQDNLookup true 
    372373#       IgnoreSelected true 
    373374#</Plugin> 
    374375 
     376#<Plugin iwinfo> 
     377#   Interface "ath0" 
     378#   Interface "ra0" 
     379#   Interface "wlan0" 
     380#</Plugin> 
     381 
    375382#<Plugin "java"> 
    376383#       JVMArg "-verbose:jni" 
    377384#       JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar" 
  • src/collectd.conf.pod

    a b and all other interrupts are collected. 
    14681468 
    14691469=back 
    14701470 
     1471=head2 Plugin C<iwinfo> 
     1472 
     1473=over 4 
     1474 
     1475=item B<Interface> I<Interface> 
     1476 
     1477Select this interface. By default all detected wireless interfaces will be 
     1478collected. For a more detailed description see B<IgnoreSelected> below. 
     1479 
     1480=item B<IgnoreSelected> I<true>|I<false> 
     1481 
     1482If no configuration if given, the B<iwinfo>-plugin will collect data from all 
     1483detected wireless interfaces. You can use the B<Interface>-option to pick the 
     1484interfaces you're interested in. Sometimes, however, it's easier/preferred to 
     1485collect all interfaces I<except> a few ones. This option enables you to do 
     1486that: By setting B<IgnoreSelected> to I<true> the effect of B<Interface> is 
     1487inverted: All selected interfaces are ignored and all other interfaces are 
     1488collected. 
     1489 
     1490=back 
     1491 
    14711492=head2 Plugin C<java> 
    14721493 
    14731494The I<Java> plugin makes it possible to write extensions for collectd in Java. 
  • new file src/iwinfo.c

    - +  
     1/** 
     2 * collectd - src/iwinfo.c 
     3 * Copyright (C) 2011  Jo-Philipp Wich 
     4 * 
     5 * This program is free software; you can redistribute it and/or modify it 
     6 * under the terms of the GNU General Public License as published by the 
     7 * Free Software Foundation; only version 2 of the License is applicable. 
     8 * 
     9 * This program is distributed in the hope that it will be useful, but 
     10 * WITHOUT ANY WARRANTY; without even the implied warranty of 
     11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     12 * General Public License for more details. 
     13 * 
     14 * You should have received a copy of the GNU General Public License along 
     15 * with this program; if not, write to the Free Software Foundation, Inc., 
     16 * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA 
     17 **/ 
     18 
     19#include "collectd.h" 
     20#include "common.h" 
     21#include "plugin.h" 
     22#include "utils_ignorelist.h" 
     23 
     24#include <stdint.h> 
     25#include <iwinfo.h> 
     26 
     27#define PROCNETDEV "/proc/net/dev" 
     28 
     29static const char *config_keys[] = { 
     30        "Interface", 
     31        "IgnoreSelected" 
     32}; 
     33static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); 
     34 
     35static ignorelist_t *ignorelist = NULL; 
     36 
     37static int iwinfo_config(const char *key, const char *value) 
     38{ 
     39        if (ignorelist == NULL) 
     40                ignorelist = ignorelist_create(1); 
     41 
     42        if (ignorelist == NULL) 
     43                return 1; 
     44 
     45        if (strcasecmp(key, "Interface") == 0) 
     46                ignorelist_add(ignorelist, value); 
     47        else if (strcasecmp(key, "IgnoreSelected") == 0) 
     48                ignorelist_set_invert(ignorelist, IS_TRUE(value) ? 0 : 1); 
     49        else 
     50                return -1; 
     51 
     52        return 0; 
     53} 
     54 
     55static void iwinfo_submit(const char *ifname, const char *type, int value) 
     56{ 
     57        value_t values[1]; 
     58        value_list_t vl = VALUE_LIST_INIT; 
     59 
     60        values[0].gauge = value; 
     61 
     62        vl.values = values; 
     63        vl.values_len = 1; 
     64 
     65        sstrncpy(vl.host, hostname_g, sizeof(vl.host)); 
     66        sstrncpy(vl.plugin, "iwinfo", sizeof(vl.plugin)); 
     67        sstrncpy(vl.plugin_instance, ifname, sizeof(vl.plugin_instance)); 
     68        sstrncpy(vl.type, type, sizeof(vl.type)); 
     69        /*sstrncpy(vl.type_instance, "", sizeof(vl.type_instance));*/ 
     70 
     71        plugin_dispatch_values(&vl); 
     72} 
     73 
     74static void iwinfo_process(const char *ifname) 
     75{ 
     76        int val; 
     77        char buf[IWINFO_BUFSIZE]; 
     78        const struct iwinfo_ops *iw = iwinfo_backend(ifname); 
     79 
     80        /* does appear to be a wifi iface */ 
     81        if (iw) 
     82        { 
     83                if (iw->bitrate(ifname, &val)) 
     84                        val = 0; 
     85                iwinfo_submit(ifname, "bitrate", val * 1000); 
     86 
     87                if (iw->signal(ifname, &val)) 
     88                        val = 0; 
     89                iwinfo_submit(ifname, "signal_power", val); 
     90 
     91                if (iw->noise(ifname, &val)) 
     92                        val = 0; 
     93                iwinfo_submit(ifname, "signal_noise", val); 
     94 
     95                if (iw->quality(ifname, &val)) 
     96                        val = 0; 
     97                iwinfo_submit(ifname, "signal_quality", val); 
     98 
     99                if (iw->assoclist(ifname, buf, &val)) 
     100                        val = 0; 
     101                iwinfo_submit(ifname, "stations", val); 
     102        } 
     103 
     104        iwinfo_finish(); 
     105} 
     106 
     107static int iwinfo_read(void) 
     108{ 
     109        char line[1024]; 
     110        char ifname[128]; 
     111        FILE *f; 
     112 
     113        f = fopen(PROCNETDEV, "r"); 
     114        if (f == NULL) 
     115        { 
     116                char err[1024]; 
     117                WARNING("iwinfo: Unable to open " PROCNETDEV ": %s", 
     118                        sstrerror(errno, err, sizeof(err))); 
     119                return -1; 
     120        } 
     121 
     122        while (fgets(line, sizeof(line), f)) 
     123        { 
     124                if (!strchr(line, ':')) 
     125                        continue; 
     126 
     127                if (!sscanf(line, " %127[^:]", ifname)) 
     128                        continue; 
     129 
     130                if (ignorelist_match(ignorelist, ifname)) 
     131                        continue; 
     132 
     133                if (strstr(ifname, "mon.") || strstr(ifname, ".sta") || 
     134                    strstr(ifname, "wmaster") || strstr(ifname, "wifi")) 
     135                        continue; 
     136 
     137                iwinfo_process(ifname); 
     138        } 
     139 
     140        fclose(f); 
     141 
     142        return 0; 
     143} 
     144 
     145void module_register(void) 
     146{ 
     147        plugin_register_config("iwinfo", iwinfo_config, config_keys, config_keys_num); 
     148        plugin_register_read("iwinfo", iwinfo_read); 
     149} 
  • src/Makefile.am

    a b collectd_LDADD += "-dlopen" irq.la 
    452452collectd_DEPENDENCIES += irq.la 
    453453endif 
    454454 
     455if BUILD_PLUGIN_IWINFO 
     456pkglib_LTLIBRARIES += iwinfo.la 
     457iwinfo_la_SOURCES = iwinfo.c 
     458iwinfo_la_LDFLAGS = -module -avoid-version 
     459iwinfo_la_LIBADD = -liwinfo 
     460collectd_LDADD += "-dlopen" iwinfo.la 
     461collectd_DEPENDENCIES += iwinfo.la 
     462endif 
     463 
    455464if BUILD_PLUGIN_JAVA 
    456465pkglib_LTLIBRARIES += java.la 
    457466java_la_SOURCES = java.c 
  • src/types.db

    a b voltage value:GAUGE:U:U 
    171171vs_memory               value:GAUGE:0:9223372036854775807 
    172172vs_processes            value:GAUGE:0:65535 
    173173vs_threads              value:GAUGE:0:65535 
     174stations                value:GAUGE:0:256 
Note: See TracBrowser for help on using the repository browser.