This patch upgrades the collectd package from 5.7.2 to 5.8.2. All openwrt patches got either updated or deleted in case they are already included into upstream collectd. The new collectd 5.8.0 package compiles and got tested on current lede trunk with latest luci on an PCengines APU. All default plugins (enabled via Openwrt Makefile) - so also iwinfo - are running fine with the new version. Signed-off-by: Thomas Huehn <thomas@net.t-labs.tu-berlin.de> Amended with the following changes: * preserve git file history by avoiding unnecessary patch renames * mark new plugins introduced with 5.8 branch as disabled Compile tested all plugins with ipq806x Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
279 lines
8 KiB
Diff
279 lines
8 KiB
Diff
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -710,6 +710,11 @@ AC_CACHE_CHECK([whether clock_boottime a
|
|
]
|
|
)
|
|
|
|
+# For the iwinfo plugin
|
|
+AC_CHECK_LIB([iwinfo], [iwinfo_backend],
|
|
+ [with_iwinfo="yes"],
|
|
+ [with_iwinfo="no (libiwinfo not found)"]
|
|
+)
|
|
|
|
#
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
@@ -6127,6 +6132,7 @@ plugin_ipc="no"
|
|
plugin_ipmi="no"
|
|
plugin_ipvs="no"
|
|
plugin_irq="no"
|
|
+plugin_iwinfo="no"
|
|
plugin_load="no"
|
|
plugin_log_logstash="no"
|
|
plugin_mcelog="no"
|
|
@@ -6538,6 +6544,7 @@ AC_PLUGIN([ipmi], [$plugi
|
|
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([log_logstash], [$plugin_log_logstash], [Logstash json_event compatible logging])
|
|
@@ -6899,6 +6906,7 @@ AC_MSG_RESULT([ libyajl . . . . . . .
|
|
AC_MSG_RESULT([ oracle . . . . . . . $with_oracle])
|
|
AC_MSG_RESULT([ protobuf-c . . . . . $have_protoc_c])
|
|
AC_MSG_RESULT([ protoc 3 . . . . . . $have_protoc3])
|
|
+AC_MSG_RESULT([ iwinfo . . . . . . . $with_iwinfo])
|
|
AC_MSG_RESULT()
|
|
AC_MSG_RESULT([ Features:])
|
|
AC_MSG_RESULT([ daemon mode . . . . . $enable_daemon])
|
|
@@ -6957,6 +6965,7 @@ AC_MSG_RESULT([ ipmi . . . . . . . .
|
|
AC_MSG_RESULT([ iptables . . . . . . $enable_iptables])
|
|
AC_MSG_RESULT([ ipvs . . . . . . . . $enable_ipvs])
|
|
AC_MSG_RESULT([ irq . . . . . . . . . $enable_irq])
|
|
+AC_MSG_RESULT([ iwinfo . . . . . . . $enable_iwinfo])
|
|
AC_MSG_RESULT([ java . . . . . . . . $enable_java])
|
|
AC_MSG_RESULT([ load . . . . . . . . $enable_load])
|
|
AC_MSG_RESULT([ logfile . . . . . . . $enable_logfile])
|
|
--- a/src/collectd.conf.in
|
|
+++ b/src/collectd.conf.in
|
|
@@ -137,6 +137,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
|
|
@@ -720,6 +721,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
|
|
@@ -3503,6 +3503,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/types.db
|
|
+++ b/src/types.db
|
|
@@ -269,6 +269,7 @@ voltage_threshold 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
|
|
--- a/Makefile.am
|
|
+++ b/Makefile.am
|
|
@@ -983,6 +983,14 @@ irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
|
|
irq_la_LIBADD = libignorelist.la
|
|
endif
|
|
|
|
+if BUILD_PLUGIN_IWINFO
|
|
+pkglib_LTLIBRARIES += iwinfo.la
|
|
+iwinfo_la_SOURCES = src/iwinfo.c
|
|
+#iwinfo_la_LDFLAGS = -module -avoid-version
|
|
+iwinfo_la_LDFLAGS = $(PLUGIN_LDFLAGS)
|
|
+iwinfo_la_LIBADD = -liwinfo libignorelist.la
|
|
+endif
|
|
+
|
|
if BUILD_PLUGIN_JAVA
|
|
pkglib_LTLIBRARIES += java.la
|
|
java_la_SOURCES = src/java.c
|