Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>lilik-openwrt-22.03
@ -0,0 +1,312 @@ | |||
# | |||
# Copyright (C) 2006-2014 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=collectd | |||
PKG_VERSION:=4.10.8 | |||
PKG_RELEASE:=3 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | |||
PKG_SOURCE_URL:=http://collectd.org/files/ | |||
PKG_MD5SUM:=7a60495208b9383225493c6dd6abb2f0 | |||
PKG_FIXUP:=autoreconf | |||
PKG_REMOVE_FILES:=aclocal.m4 libltdl/aclocal.m4 | |||
PKG_MAINTAINER:=Jo-Philipp Wich <jow@openwrt.org> | |||
PKG_INSTALL:=1 | |||
PKG_BUILD_PARALLEL:=1 | |||
PKG_USE_MIPS16:=0 | |||
COLLECTD_PLUGINS_DISABLED:= \ | |||
apple_sensors \ | |||
battery \ | |||
cpufreq \ | |||
curl_json \ | |||
entropy \ | |||
genericjmx \ | |||
gmond \ | |||
hddtemp \ | |||
ipmi \ | |||
ipvs \ | |||
java \ | |||
libvirt \ | |||
mbmon \ | |||
memcachec \ | |||
memcached \ | |||
monitorus \ | |||
multimeter \ | |||
netapp \ | |||
nfs \ | |||
notify_desktop \ | |||
notify_email \ | |||
openvz \ | |||
oracle \ | |||
perl \ | |||
pinba \ | |||
python \ | |||
routeros \ | |||
rrdcached \ | |||
serial \ | |||
swap \ | |||
tape \ | |||
tokyotyrant \ | |||
uuid \ | |||
vserver \ | |||
xmms \ | |||
zfs_arc \ | |||
COLLECTD_PLUGINS_SELECTED:= \ | |||
apache \ | |||
apcups \ | |||
ascent \ | |||
bind \ | |||
conntrack \ | |||
contextswitch \ | |||
cpu \ | |||
csv \ | |||
curl \ | |||
dbi \ | |||
df \ | |||
disk \ | |||
dns \ | |||
email \ | |||
exec \ | |||
filecount \ | |||
fscache \ | |||
interface \ | |||
iptables \ | |||
irq \ | |||
iwinfo \ | |||
load \ | |||
logfile \ | |||
madwifi \ | |||
memory \ | |||
modbus \ | |||
mysql \ | |||
netlink \ | |||
network \ | |||
nginx \ | |||
ntpd \ | |||
nut \ | |||
olsrd \ | |||
onewire \ | |||
openvpn \ | |||
ping \ | |||
postgresql \ | |||
powerdns \ | |||
processes \ | |||
protocols \ | |||
rrdtool \ | |||
sensors \ | |||
snmp \ | |||
syslog \ | |||
tail \ | |||
table \ | |||
ted \ | |||
tcpconns \ | |||
teamspeak2 \ | |||
thermal \ | |||
unixsock \ | |||
uptime \ | |||
users \ | |||
vmem \ | |||
wireless \ | |||
write_http \ | |||
PKG_CONFIG_DEPENDS:= \ | |||
$(patsubst %,CONFIG_PACKAGE_collectd-mod-%,$(subst _,-,$(COLLECTD_PLUGINS_SELECTED))) \ | |||
include $(INCLUDE_DIR)/package.mk | |||
include $(INCLUDE_DIR)/kernel.mk | |||
define Package/collectd/Default | |||
SECTION:=utils | |||
CATEGORY:=Utilities | |||
TITLE:=Lightweight system statistics collection daemon | |||
URL:=http://verplant.org/collectd/ | |||
endef | |||
define Package/collectd | |||
$(call Package/collectd/Default) | |||
DEPENDS:= +libpthread +zlib +libltdl +libip4tc | |||
MENU:=1 | |||
endef | |||
define Package/collectd/description | |||
collectd is a small daemon which collects system information periodically | |||
and provides mechanismns to store the values in a variety of ways. | |||
endef | |||
ifneq ($(CONFIG_avr32),) | |||
TARGET_CFLAGS += -fsigned-char | |||
endif | |||
# common configure args | |||
CONFIGURE_ARGS+= \ | |||
--disable-debug \ | |||
--enable-daemon \ | |||
--enable-getifaddrs \ | |||
--with-nan-emulation \ | |||
--without-libgcrypt | |||
CONFIGURE_VARS+= \ | |||
CFLAGS="$$$$CFLAGS $(FPIC)" \ | |||
LDFLAGS="$$$$LDFLAGS -lm -lz" \ | |||
KERNEL_DIR="$(LINUX_DIR)" \ | |||
CONFIGURE_PLUGIN= \ | |||
$(foreach m, $(1), \ | |||
$(if $(CONFIG_PACKAGE_collectd-mod-$(subst _,-,$(m))),--enable-$(m),--disable-$(m)) \ | |||
) | |||
CONFIGURE_ARGS+= \ | |||
$(call CONFIGURE_PLUGIN,$(COLLECTD_PLUGINS_SELECTED)) \ | |||
$(call CONFIGURE_PLUGIN,$(COLLECTD_PLUGINS_DISABLED)) \ | |||
# exception: mod-ascent needs libxml2 | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-ascent),) | |||
CONFIGURE_VARS+= \ | |||
CPPFLAGS="$$$$CPPFLAGS -I$(STAGING_DIR)/usr/include/libxml2" | |||
endif | |||
ifneq ($(CONFIG_BIG_ENDIAN),) | |||
CONFIGURE_ARGS+= --with-fp-layout=endianflip | |||
else | |||
CONFIGURE_ARGS+= --with-fp-layout=nothing | |||
endif | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-postgresql),) | |||
CONFIGURE_ARGS+= --with-libpq="$(STAGING_DIR)/usr/" | |||
endif | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-mysql),) | |||
CONFIGURE_ARGS+= --with-libmysql="$(STAGING_DIR)/usr/" | |||
endif | |||
# exception: mod-netlink needs libnetlink from iproute | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-netlink),) | |||
CONFIGURE_ARGS+= --with-libnetlink="$(STAGING_DIR)/usr" | |||
endif | |||
# exception: mod-modbus needs libmodbus | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-modbus),) | |||
CONFIGURE_ARGS+= --with-libmodbus="$(STAGING_DIR)/usr" | |||
endif | |||
# exception: mod-onewire needs libow-capi | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-onewire),) | |||
CONFIGURE_ARGS+= --with-libowcapi="$(STAGING_DIR)/usr" | |||
endif | |||
# exception: mod-rrdtool needs rrdtool-1.0.x | |||
ifneq ($(CONFIG_PACKAGE_collectd-mod-rrdtool),) | |||
CONFIGURE_ARGS+= --with-librrd="$(STAGING_DIR)/usr/lib/rrdtool-1.0" | |||
endif | |||
define Package/collectd/conffiles | |||
/etc/collectd.conf | |||
endef | |||
define Package/collectd/install | |||
$(INSTALL_DIR) $(1)/usr/sbin | |||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/collectd $(1)/usr/sbin/ | |||
$(INSTALL_DIR) $(1)/usr/share/collectd | |||
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/collectd/types.db $(1)/usr/share/collectd/ | |||
$(INSTALL_DIR) $(1)/etc | |||
$(INSTALL_CONF) ./files/collectd.conf $(1)/etc/ | |||
$(INSTALL_DIR) $(1)/etc/init.d | |||
$(INSTALL_BIN) ./files/collectd.init $(1)/etc/init.d/collectd | |||
endef | |||
# 1: plugin name | |||
# 2: plugin title/description | |||
# 3: files | |||
# 4: extra dependency | |||
define BuildPlugin | |||
PKG_CONFIG_DEPENDS+= CONFIG_PACKAGE_collectd-mod-$(1) | |||
define Package/collectd-mod-$(1) | |||
$$(call Package/collectd/Default) | |||
TITLE:=$(2) plugin | |||
DEPENDS:= collectd $(4) | |||
endef | |||
define Package/collectd-mod-$(1)/install | |||
$(INSTALL_DIR) $$(1)/usr/lib/collectd | |||
for m in $(3); do \ | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/lib/collectd/$$$$$$$${m}.so \ | |||
$$(1)/usr/lib/collectd/ ; \ | |||
done | |||
endef | |||
$$(eval $$(call BuildPackage,collectd-mod-$(1))) | |||
endef | |||
$(eval $(call BuildPackage,collectd)) | |||
#$(eval $(call BuildPlugin,NAME,DESCRIPTION,FILES,DEPENDENCIES)) | |||
$(eval $(call BuildPlugin,apache,apache status input,apache,+PACKAGE_collectd-mod-apache:libcurl)) | |||
$(eval $(call BuildPlugin,apcups,apcups status input,apcups,)) | |||
$(eval $(call BuildPlugin,ascent,ascent status input,ascent,+PACKAGE_collectd-mod-ascent:libcurl +PACKAGE_collectd-mod-ascent:libxml2)) | |||
$(eval $(call BuildPlugin,bind,BIND server/zone input,bind,+PACKAGE_collectd-mod-bind:libcurl +PACKAGE_collectd-mod-bind:libxml2)) | |||
$(eval $(call BuildPlugin,conntrack,connection tracking table size input,conntrack,)) | |||
$(eval $(call BuildPlugin,contextswitch,context switch input,contextswitch,)) | |||
$(eval $(call BuildPlugin,cpu,CPU input,cpu,)) | |||
$(eval $(call BuildPlugin,csv,CSV output,csv,)) | |||
$(eval $(call BuildPlugin,curl,cURL input,curl,+PACKAGE_collectd-mod-curl:libcurl)) | |||
$(eval $(call BuildPlugin,dbi,relational database input,dbi,+PACKAGE_collectd-mod-dbi:libdbi)) | |||
$(eval $(call BuildPlugin,df,disk space input,df,)) | |||
$(eval $(call BuildPlugin,disk,disk usage/timing input,disk,)) | |||
$(eval $(call BuildPlugin,dns,DNS traffic input,dns,+PACKAGE_collectd-mod-dns:libpcap)) | |||
$(eval $(call BuildPlugin,email,email output,email,)) | |||
$(eval $(call BuildPlugin,exec,process exec input,exec,)) | |||
$(eval $(call BuildPlugin,filecount,file count input,filecount,)) | |||
$(eval $(call BuildPlugin,fscache,file-system based caching framework input,fscache,)) | |||
$(eval $(call BuildPlugin,interface,network interfaces input,interface,)) | |||
$(eval $(call BuildPlugin,iptables,iptables status input,iptables,+PACKAGE_collectd-mod-iptables:iptables +libiptc)) | |||
$(eval $(call BuildPlugin,irq,interrupt usage input,irq,)) | |||
$(eval $(call BuildPlugin,iwinfo,libiwinfo wireless statistics,iwinfo,+PACKAGE_collectd-mod-iwinfo:libiwinfo)) | |||
$(eval $(call BuildPlugin,load,system load input,load,)) | |||
$(eval $(call BuildPlugin,logfile,log files output,logfile,)) | |||
$(eval $(call BuildPlugin,madwifi,MadWifi status input,madwifi,)) | |||
$(eval $(call BuildPlugin,mysql,MySQL status input,mysql,+PACKAGE_collectd-mod-mysql:libmysqlclient-r)) | |||
$(eval $(call BuildPlugin,memory,physical memory usage input,memory,)) | |||
$(eval $(call BuildPlugin,modbus,read variables through libmodbus,modbus,+PACKAGE_collectd-mod-modbus:libmodbus @BROKEN)) | |||
$(eval $(call BuildPlugin,netlink,netlink input,netlink,+PACKAGE_collectd-mod-netlink:ip @BROKEN)) | |||
$(eval $(call BuildPlugin,network,network input/output,network)) | |||
$(eval $(call BuildPlugin,nginx,nginx status input,nginx,+PACKAGE_collectd-mod-nginx:libcurl)) | |||
$(eval $(call BuildPlugin,ntpd,NTP daemon status input,ntpd,)) | |||
$(eval $(call BuildPlugin,nut,UPS monitoring input,nut,+PACKAGE_collectd-mod-nut:nut)) | |||
$(eval $(call BuildPlugin,olsrd,OLSRd status input,olsrd,)) | |||
$(eval $(call BuildPlugin,onewire,onewire sensor input,onewire,+PACKAGE_collectd-mod-onewire:libow-capi @BROKEN)) | |||
$(eval $(call BuildPlugin,openvpn,OpenVPN traffic/compression input,openvpn,)) | |||
$(eval $(call BuildPlugin,ping,ping status input,ping,+PACKAGE_collectd-mod-ping:liboping)) | |||
$(eval $(call BuildPlugin,postgresql,PostgreSQL status input,postgresql,+PACKAGE_collectd-mod-postgresql:libpq)) | |||
$(eval $(call BuildPlugin,powerdns,PowerDNS server status input,powerdns,)) | |||
$(eval $(call BuildPlugin,processes,process status input,processes,)) | |||
$(eval $(call BuildPlugin,protocols,network protocols input,protocols,)) | |||
$(eval $(call BuildPlugin,rrdtool,RRDtool output,rrdtool,+PACKAGE_collectd-mod-rrdtool:librrd1)) | |||
$(eval $(call BuildPlugin,sensors,lm_sensors input,sensors,+PACKAGE_collectd-mod-sensors:libsensors @BROKEN)) | |||
$(eval $(call BuildPlugin,snmp,SNMP input,snmp,+PACKAGE_collectd-mod-snmp:libnetsnmp)) | |||
$(eval $(call BuildPlugin,syslog,syslog output,syslog,)) | |||
$(eval $(call BuildPlugin,tail,tail input,tail,)) | |||
$(eval $(call BuildPlugin,table,table-like structured file input,table,)) | |||
$(eval $(call BuildPlugin,teamspeak2,TeamSpeak2 input,teamspeak2,)) | |||
$(eval $(call BuildPlugin,ted,The Energy Detective input,ted,@((!TARGET_avr32)||BROKEN))) # fails on avr32 because of warnings treated as errors | |||
$(eval $(call BuildPlugin,tcpconns,TCP connection tracking input,tcpconns,)) | |||
$(eval $(call BuildPlugin,thermal,system temperatures input,thermal,)) | |||
$(eval $(call BuildPlugin,unixsock,unix socket output,unixsock,)) | |||
$(eval $(call BuildPlugin,uptime,uptime status input,uptime,)) | |||
$(eval $(call BuildPlugin,users,user logged in status input,users,)) | |||
$(eval $(call BuildPlugin,vmem,virtual memory usage input,vmem,)) | |||
$(eval $(call BuildPlugin,wireless,wireless status input,wireless,)) | |||
$(eval $(call BuildPlugin,write-http,HTTP POST output,write_http,+PACKAGE_collectd-mod-write-http:libcurl)) |
@ -0,0 +1,90 @@ | |||
# | |||
# OpenWrt Config file for collectd(1). | |||
# Please read collectd.conf(5) for a list of options. | |||
# http://collectd.org/ | |||
# | |||
#Hostname "localhost" | |||
#FQDNLookup true | |||
BaseDir "/var/lib/collectd" | |||
PIDFile "/var/run/collectd.pid" | |||
#PluginDir "/usr/lib/collectd" | |||
#TypesDB "/usr/share/collectd/types.db" | |||
Interval 30 | |||
ReadThreads 2 | |||
#LoadPlugin syslog | |||
#LoadPlugin logfile | |||
#<Plugin syslog> | |||
# LogLevel info | |||
#</Plugin> | |||
#<Plugin logfile> | |||
# LogLevel info | |||
# File STDOUT | |||
# Timestamp true | |||
#</Plugin> | |||
LoadPlugin cpu | |||
LoadPlugin df | |||
LoadPlugin disk | |||
LoadPlugin interface | |||
LoadPlugin load | |||
LoadPlugin memory | |||
LoadPlugin network | |||
#LoadPlugin ping | |||
#LoadPlugin processes | |||
#LoadPlugin rrdtool | |||
#LoadPlugin serial | |||
LoadPlugin wireless | |||
#<Plugin df> | |||
# FSType tmpfs | |||
# IgnoreSelected true | |||
# ReportByDevice false | |||
# ReportReserved false | |||
# ReportInodes false | |||
#</Plugin> | |||
#<Plugin disk> | |||
# Disk "/^[hs]d[a-f][0-9]?$/" | |||
# IgnoreSelected false | |||
#</Plugin> | |||
#<Plugin interface> | |||
# Interface "eth0" | |||
# Interface "br-lan" | |||
# IgnoreSelected false | |||
#</Plugin> | |||
<Plugin network> | |||
# Server "ff18::efc0:4a42" "25826" | |||
Server "239.192.74.66" "25826" | |||
# Listen "ff18::efc0:4a42" "25826" | |||
# Listen "239.192.74.66" "25826" | |||
# TimeToLive "128" | |||
# Forward false | |||
# CacheFlush 1800 | |||
# ReportStats false | |||
</Plugin> | |||
#<Plugin ping> | |||
# Host "host.foo.bar" | |||
# Interval 1.0 | |||
# Timeout 0.9 | |||
# TTL 255 | |||
# SourceAddress "1.2.3.4" | |||
# Device "eth0" | |||
# MaxMissed -1 | |||
#</Plugin> | |||
#<Plugin processes> | |||
# Process "name" | |||
#</Plugin> | |||
#<Plugin rrdtool> | |||
# DataDir "/var/lib/collectd/rrd" | |||
# CacheTimeout 120 | |||
# CacheFlush 900 | |||
#</Plugin> |
@ -0,0 +1,15 @@ | |||
#!/bin/sh /etc/rc.common | |||
# Copyright (C) 2006-2011 OpenWrt.org | |||
START=80 | |||
SERVICE_USE_PID=1 | |||
start() { | |||
mkdir -m 0755 -p /var/lib/collectd | |||
service_start /usr/sbin/collectd | |||
} | |||
stop() { | |||
service_stop /usr/sbin/collectd | |||
} |
@ -0,0 +1,4 @@ | |||
--- /dev/null | |||
+++ b/fake-am_path_libgcrypt.m4 | |||
@@ -0,0 +1 @@ | |||
+AC_DEFUN([AM_PATH_LIBGCRYPT],[:]) |
@ -0,0 +1,66 @@ | |||
--- a/src/Makefile.am | |||
+++ b/src/Makefile.am | |||
@@ -7,7 +7,7 @@ SUBDIRS += liboconfig | |||
endif | |||
if COMPILER_IS_GCC | |||
-AM_CFLAGS = -Wall -Werror | |||
+AM_CFLAGS = -Wall | |||
endif | |||
AM_CPPFLAGS = -DPREFIX='"${prefix}"' | |||
--- a/src/Makefile.in | |||
+++ b/src/Makefile.in | |||
@@ -1833,7 +1833,7 @@ top_build_prefix = @top_build_prefix@ | |||
top_builddir = @top_builddir@ | |||
top_srcdir = @top_srcdir@ | |||
SUBDIRS = libcollectdclient $(am__append_1) $(am__append_2) | |||
-@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall -Werror | |||
+@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall | |||
AM_CPPFLAGS = -DPREFIX='"${prefix}"' \ | |||
-DCONFIGFILE='"${sysconfdir}/${PACKAGE_NAME}.conf"' \ | |||
-DLOCALSTATEDIR='"${localstatedir}"' \ | |||
--- a/src/libcollectdclient/Makefile.am | |||
+++ b/src/libcollectdclient/Makefile.am | |||
@@ -1,7 +1,7 @@ | |||
AUTOMAKE_OPTIONS = foreign no-dependencies | |||
if COMPILER_IS_GCC | |||
-AM_CFLAGS = -Wall -Werror | |||
+AM_CFLAGS = -Wall | |||
endif | |||
pkginclude_HEADERS = client.h lcc_features.h | |||
--- a/src/libcollectdclient/Makefile.in | |||
+++ b/src/libcollectdclient/Makefile.in | |||
@@ -327,7 +327,7 @@ top_build_prefix = @top_build_prefix@ | |||
top_builddir = @top_builddir@ | |||
top_srcdir = @top_srcdir@ | |||
AUTOMAKE_OPTIONS = foreign no-dependencies | |||
-@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall -Werror | |||
+@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall | |||
pkginclude_HEADERS = client.h lcc_features.h | |||
lib_LTLIBRARIES = libcollectdclient.la | |||
nodist_pkgconfig_DATA = libcollectdclient.pc | |||
--- a/src/owniptc/Makefile.am | |||
+++ b/src/owniptc/Makefile.am | |||
@@ -3,7 +3,7 @@ AUTOMAKE_OPTIONS = foreign no-dependenci | |||
EXTRA_DIST = libiptc.c README.collectd | |||
if COMPILER_IS_GCC | |||
-AM_CFLAGS = -Wall -Werror | |||
+AM_CFLAGS = -Wall | |||
endif | |||
noinst_LTLIBRARIES = libiptc.la | |||
--- a/src/owniptc/Makefile.in | |||
+++ b/src/owniptc/Makefile.in | |||
@@ -296,7 +296,7 @@ top_builddir = @top_builddir@ | |||
top_srcdir = @top_srcdir@ | |||
AUTOMAKE_OPTIONS = foreign no-dependencies | |||
EXTRA_DIST = libiptc.c README.collectd | |||
-@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall -Werror | |||
+@COMPILER_IS_GCC_TRUE@AM_CFLAGS = -Wall | |||
noinst_LTLIBRARIES = libiptc.la | |||
libiptc_la_SOURCES = libip4tc.c libip6tc.c \ | |||
ipt_kernel_headers.h libip6tc.h libiptc.h linux_list.h \ |
@ -0,0 +1,57 @@ | |||
--- a/src/rrdtool.c | |||
+++ b/src/rrdtool.c | |||
@@ -80,6 +80,7 @@ static const char *config_keys[] = | |||
"HeartBeat", | |||
"RRARows", | |||
"RRATimespan", | |||
+ "RRASingle", | |||
"XFF", | |||
"WritesPerSecond", | |||
"RandomTimeout" | |||
@@ -101,6 +102,8 @@ static rrdcreate_config_t rrdcreate_conf | |||
/* timespans = */ NULL, | |||
/* timespans_num = */ 0, | |||
+ /* rrasingle = */ 0, | |||
+ | |||
/* consolidation_functions = */ NULL, | |||
/* consolidation_functions_num = */ 0 | |||
}; | |||
@@ -1027,6 +1030,14 @@ static int rrd_config (const char *key, | |||
free (value_copy); | |||
} | |||
+ else if (strcasecmp ("RRASingle", key) == 0) | |||
+ { | |||
+ if (IS_TRUE (value)) | |||
+ { | |||
+ rrdcreate_config.rrasingle = 1; | |||
+ NOTICE ("rrdtool plugin: RRASingle = true: creating only AVERAGE RRAs"); | |||
+ } | |||
+ } | |||
else if (strcasecmp ("XFF", key) == 0) | |||
{ | |||
double tmp = atof (value); | |||
--- a/src/utils_rrdcreate.c | |||
+++ b/src/utils_rrdcreate.c | |||
@@ -122,6 +122,9 @@ static int rra_get (char ***ret, const v | |||
rts_num = rra_timespans_num; | |||
} | |||
+ if (cfg->rrasingle) | |||
+ rra_types_num = 1; | |||
+ | |||
rra_max = rts_num * rra_types_num; | |||
if ((rra_def = (char **) malloc ((rra_max + 1) * sizeof (char *))) == NULL) | |||
--- a/src/utils_rrdcreate.h | |||
+++ b/src/utils_rrdcreate.h | |||
@@ -36,6 +36,8 @@ struct rrdcreate_config_s | |||
int *timespans; | |||
size_t timespans_num; | |||
+ int rrasingle; | |||
+ | |||
char **consolidation_functions; | |||
size_t consolidation_functions_num; | |||
}; |
@ -0,0 +1,46 @@ | |||
--- | |||
src/interface.c | 33 ++++++++++++++++++++++++++++++++- | |||
1 file changed, 32 insertions(+), 1 deletion(-) | |||
--- a/src/interface.c | |||
+++ b/src/interface.c | |||
@@ -203,7 +203,38 @@ static int interface_read (void) | |||
# define IFA_RX_ERROR rx_errors | |||
# define IFA_TX_ERROR tx_errors | |||
#else | |||
-# error "No suitable type for `struct ifaddrs->ifa_data' found." | |||
+struct net_device_stats { | |||
+ unsigned long rx_packets; | |||
+ unsigned long tx_packets; | |||
+ unsigned long rx_bytes; | |||
+ unsigned long tx_bytes; | |||
+ unsigned long rx_errors; | |||
+ unsigned long tx_errors; | |||
+ unsigned long rx_dropped; | |||
+ unsigned long tx_dropped; | |||
+ unsigned long multicast; | |||
+ unsigned long collisions; | |||
+ unsigned long rx_length_errors; | |||
+ unsigned long rx_over_errors; | |||
+ unsigned long rx_crc_errors; | |||
+ unsigned long rx_frame_errors; | |||
+ unsigned long rx_fifo_errors; | |||
+ unsigned long rx_missed_errors; | |||
+ unsigned long tx_aborted_errors; | |||
+ unsigned long tx_carrier_errors; | |||
+ unsigned long tx_fifo_errors; | |||
+ unsigned long tx_heartbeat_errors; | |||
+ unsigned long tx_window_errors; | |||
+ unsigned long rx_compressed; | |||
+ unsigned long tx_compressed; | |||
+}; | |||
+# define IFA_DATA net_device_stats | |||
+# define IFA_RX_BYTES rx_bytes | |||
+# define IFA_TX_BYTES tx_bytes | |||
+# define IFA_RX_PACKT rx_packets | |||
+# define IFA_TX_PACKT tx_packets | |||
+# define IFA_RX_ERROR rx_errors | |||
+# define IFA_TX_ERROR tx_errors | |||
#endif | |||
struct IFA_DATA *if_data; |
@ -0,0 +1,78 @@ | |||
--- a/src/owniptc/libiptc.c | |||
+++ b/src/owniptc/libiptc.c | |||
@@ -81,11 +81,11 @@ static const char *hooknames[] = { | |||
}; | |||
/* Convenience structures */ | |||
-struct ipt_error_target | |||
+ struct ipt_error_target2 | |||
{ | |||
STRUCT_ENTRY_TARGET t; | |||
char error[TABLE_MAXNAMELEN]; | |||
-}; | |||
+}; | |||
struct chain_head; | |||
struct rule_head; | |||
@@ -1007,10 +1007,10 @@ static int parse_table(TC_HANDLE_T h) | |||
/* Convenience structures */ | |||
struct iptcb_chain_start{ | |||
STRUCT_ENTRY e; | |||
- struct ipt_error_target name; | |||
+ struct ipt_error_target2 name; | |||
}; | |||
#define IPTCB_CHAIN_START_SIZE (sizeof(STRUCT_ENTRY) + \ | |||
- ALIGN(sizeof(struct ipt_error_target))) | |||
+ ALIGN(sizeof(struct ipt_error_target2))) | |||
struct iptcb_chain_foot { | |||
STRUCT_ENTRY e; | |||
@@ -1021,10 +1021,10 @@ struct iptcb_chain_foot { | |||
struct iptcb_chain_error { | |||
STRUCT_ENTRY entry; | |||
- struct ipt_error_target target; | |||
+ struct ipt_error_target2 target; | |||
}; | |||
#define IPTCB_CHAIN_ERROR_SIZE (sizeof(STRUCT_ENTRY) + \ | |||
- ALIGN(sizeof(struct ipt_error_target))) | |||
+ ALIGN(sizeof(struct ipt_error_target2))) | |||
@@ -1069,7 +1069,7 @@ static int iptcc_compile_chain(TC_HANDLE | |||
head->e.next_offset = IPTCB_CHAIN_START_SIZE; | |||
strcpy(head->name.t.u.user.name, ERROR_TARGET); | |||
head->name.t.u.target_size = | |||
- ALIGN(sizeof(struct ipt_error_target)); | |||
+ ALIGN(sizeof(struct ipt_error_target2)); | |||
strcpy(head->name.error, c->name); | |||
} else { | |||
repl->hook_entry[c->hooknum-1] = c->head_offset; | |||
@@ -1113,7 +1113,7 @@ static int iptcc_compile_chain_offsets(T | |||
if (!iptcc_is_builtin(c)) { | |||
/* Chain has header */ | |||
*offset += sizeof(STRUCT_ENTRY) | |||
- + ALIGN(sizeof(struct ipt_error_target)); | |||
+ + ALIGN(sizeof(struct ipt_error_target2)); | |||
(*num)++; | |||
} | |||
@@ -1153,7 +1153,7 @@ static int iptcc_compile_table_prep(TC_H | |||
/* Append one error rule at end of chain */ | |||
num++; | |||
offset += sizeof(STRUCT_ENTRY) | |||
- + ALIGN(sizeof(struct ipt_error_target)); | |||
+ + ALIGN(sizeof(struct ipt_error_target2)); | |||
/* ruleset size is now in offset */ | |||
*size = offset; | |||
@@ -1177,7 +1177,7 @@ static int iptcc_compile_table(TC_HANDLE | |||
error->entry.target_offset = sizeof(STRUCT_ENTRY); | |||
error->entry.next_offset = IPTCB_CHAIN_ERROR_SIZE; | |||
error->target.t.u.user.target_size = | |||
- ALIGN(sizeof(struct ipt_error_target)); | |||
+ ALIGN(sizeof(struct ipt_error_target2)); | |||
strcpy((char *)&error->target.t.u.user.name, ERROR_TARGET); | |||
strcpy((char *)&error->target.error, "ERROR"); | |||
@ -0,0 +1,14 @@ | |||
Derived from uptream commit d5b09f2b: http://octo.cx/d5b09f2 | |||
--- a/src/types.db | |||
+++ b/src/types.db | |||
@@ -152,7 +152,7 @@ tcp_connections value:GAUGE:0:429496729 | |||
temperature value:GAUGE:-273.15:U | |||
threads value:GAUGE:0:U | |||
time_dispersion seconds:GAUGE:-1000000:1000000 | |||
-timeleft timeleft:GAUGE:0:3600 | |||
+timeleft timeleft:GAUGE:0:U | |||
time_offset seconds:GAUGE:-1000000:1000000 | |||
total_bytes value:DERIVE:0:U | |||
total_requests value:DERIVE:0:U | |||
@ -0,0 +1,11 @@ | |||
--- a/version-gen.sh | |||
+++ b/version-gen.sh | |||
@@ -2,7 +2,7 @@ | |||
DEFAULT_VERSION="4.10.8.git" | |||
-VERSION="`git describe 2> /dev/null | sed -e 's/^collectd-//'`" | |||
+#VERSION="`git describe 2> /dev/null | sed -e 's/^collectd-//'`" | |||
if test -z "$VERSION"; then | |||
VERSION="$DEFAULT_VERSION" |
@ -0,0 +1,11 @@ | |||
--- a/src/olsrd.c | |||
+++ b/src/olsrd.c | |||
@@ -653,7 +653,7 @@ static int olsrd_read (void) /* {{{ */ | |||
if (fh == NULL) | |||
return (-1); | |||
- fputs ("\r\n", fh); | |||
+ fputs ("/all \r\n", fh); | |||
fflush (fh); | |||
while (fgets (buffer, sizeof (buffer), fh) != NULL) |
@ -0,0 +1,275 @@ | |||
--- a/configure.in | |||
+++ b/configure.in | |||
@@ -490,6 +490,9 @@ AC_CHECK_HEADERS(netinet/if_ether.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)"], []) | |||
+ | |||
# | |||
# Checks for typedefs, structures, and compiler characteristics. | |||
# | |||
@@ -4081,6 +4084,7 @@ plugin_interface="no" | |||
plugin_ipmi="no" | |||
plugin_ipvs="no" | |||
plugin_irq="no" | |||
+plugin_iwinfo="no" | |||
plugin_libvirt="no" | |||
plugin_load="no" | |||
plugin_memory="no" | |||
@@ -4388,6 +4392,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([libvirt], [$plugin_libvirt], [Virtual machine statistics]) | |||
AC_PLUGIN([load], [$plugin_load], [System load]) | |||
@@ -4666,6 +4671,7 @@ Configuration: | |||
protobuf-c . . . . . $have_protoc_c | |||
oracle . . . . . . . $with_oracle | |||
python . . . . . . . $with_python | |||
+ iwinfo . . . . . . . $with_iwinfo | |||
Features: | |||
daemon mode . . . . . $enable_daemon | |||
@@ -4705,6 +4711,7 @@ Configuration: | |||
iptables . . . . . . $enable_iptables | |||
ipvs . . . . . . . . $enable_ipvs | |||
irq . . . . . . . . . $enable_irq | |||
+ iwinfo . . . . . . . $enable_iwinfo | |||
java . . . . . . . . $enable_java | |||
libvirt . . . . . . . $enable_libvirt | |||
load . . . . . . . . $enable_load | |||
--- a/src/collectd.conf.in | |||
+++ b/src/collectd.conf.in | |||
@@ -82,6 +82,7 @@ FQDNLookup true | |||
#@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi | |||
#@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_LIBVIRT_TRUE@LoadPlugin libvirt | |||
@BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load | |||
@@ -376,6 +377,12 @@ FQDNLookup true | |||
# 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 | |||
@@ -1478,6 +1478,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 | |||
@@ -453,6 +453,15 @@ collectd_LDADD += "-dlopen" irq.la | |||
collectd_DEPENDENCIES += irq.la | |||
endif | |||
+if BUILD_PLUGIN_IWINFO | |||
+pkglib_LTLIBRARIES += iwinfo.la | |||
+iwinfo_la_SOURCES = iwinfo.c | |||
+iwinfo_la_LDFLAGS = -module -avoid-version | |||
+iwinfo_la_LIBADD = -liwinfo | |||
+collectd_LDADD += "-dlopen" iwinfo.la | |||
+collectd_DEPENDENCIES += iwinfo.la | |||
+endif | |||
+ | |||
if BUILD_PLUGIN_JAVA | |||
pkglib_LTLIBRARIES += java.la | |||
java_la_SOURCES = java.c | |||
--- a/src/types.db | |||
+++ b/src/types.db | |||
@@ -171,3 +171,4 @@ 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 |
@ -0,0 +1,11 @@ | |||
--- a/src/ping.c | |||
+++ b/src/ping.c | |||
@@ -651,7 +651,7 @@ static int ping_read (void) /* {{{ */ | |||
/ ((double) (pkg_recv * (pkg_recv - 1)))); | |||
/* Calculate drop rate. */ | |||
- droprate = ((double) (pkg_sent - pkg_recv)) / ((double) pkg_sent); | |||
+ droprate = ((double) (pkg_sent - pkg_recv)) * 100 / ((double) pkg_sent); | |||
submit (hl->host, "ping", latency_average); | |||
submit (hl->host, "ping_stddev", latency_stddev); |