From: Ruben Kerkhof Date: Sun, 2 Jul 2017 18:52:18 +0000 (+0200) Subject: Merge branch 'collectd-5.7' X-Git-Tag: collectd-5.8.0~129 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=867ad628dc6fcd05bd584b605d7093cfc00c3d07;hp=02a29964b4e67bb04c1419daedc8eacfafdf0a7c Merge branch 'collectd-5.7' --- diff --git a/.gitignore b/.gitignore index 8154d733..2911069a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ Makefile.in /aclocal.m4 /autom4te.cache /autom4te.cache +/build-aux/ /compile /config.guess /config.sub @@ -12,8 +13,15 @@ Makefile.in /install-sh /libltdl/ /ltmain.sh +/m4/libtool.m4 +/m4/ltargz.m4 +/m4/ltdl.m4 +/m4/lt~obsolete.m4 +/m4/ltoptions.m4 +/m4/ltsugar.m4 +/m4/ltversion.m4 /missing -src/config.h.in +/src/config.h.in # configure stuff: Makefile @@ -29,12 +37,13 @@ src/stamp-h1 *.la *.lo *.o +.dirstamp .libs/ .deps/ -src/collectd-nagios -src/collectd-tg -src/collectdctl -src/collectdmon +/collectd-nagios +/collectd-tg +/collectdctl +/collectdmon src/*.1 src/*.5 src/.pod2man.tmp.* @@ -51,26 +60,28 @@ src/liboconfig/parser.h src/liboconfig/scanner.c # protobuf stuff: -src/*.pb-c.[ch] -src/*.grpc.pb.cc -src/*.pb.cc -src/*.pb.h +*.pb-c.[ch] +*.grpc.pb.cc +*.pb.cc +*.pb.h # make dist stuff: /collectd-*.tar.gz /collectd-*.tar.bz2 # perl stuff: -bindings/.perl-directory-stamp +/.perl-directory-stamp bindings/perl/Collectd/pm_to_blib bindings/perl/blib/ bindings/perl/pm_to_blib -bindings/buildperl +/buildperl # java stuff -bindings/java/java-build-stamp -bindings/java/org/collectd/api/*.class -bindings/java/org/collectd/java/*.class +*.jar +/org/collectd/api/*.class +/org/collectd/java/*.class +/bindings/java/java-build-stamp +/classnoinst.stamp # python stuff *.pyc @@ -94,4 +105,4 @@ src/test-suite.log test_* # src/daemon/... -src/daemon/collectd +/collectd diff --git a/.travis.yml b/.travis.yml index 03d9dded..fc250cbb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,12 +16,15 @@ before_install: libganglia1-dev libgcrypt11-dev libglib2.0-dev + libgps-dev libhiredis-dev libi2c-dev libldap2-dev libltdl-dev + liblua5.2-dev liblvm2-dev libmemcached-dev + libmicrohttpd-dev libmnl-dev libmodbus-dev libmosquitto0-dev @@ -53,4 +56,4 @@ before_install: perl protobuf-c-compiler python-dev -script: sh build.sh && ./configure --with-python=/usr/bin/python && make distcheck DISTCHECK_CONFIGURE_FLAGS="--with-python=/usr/bin/python" +script: sh build.sh && ./configure && make distcheck diff --git a/AUTHORS b/AUTHORS index 8962e775..d866c700 100644 --- a/AUTHORS +++ b/AUTHORS @@ -294,6 +294,9 @@ Sjoerd van der Berg Stefan Hacker - teamspeak2 plugin. +Steven Bell + - nut plugin. + Sven Trenkel - netapp plugin. - python plugin. diff --git a/Makefile.am b/Makefile.am index 03bdd39a..f9273990 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,23 +1,2025 @@ -ACLOCAL_AMFLAGS = -I libltdl/m4 +ACLOCAL_AMFLAGS = -I m4 +AM_YFLAGS = -d -SUBDIRS = -if BUILD_INCLUDED_LTDL -SUBDIRS += libltdl +BUILT_SOURCES = \ + src/libcollectdclient/collectd/lcc_features.h \ + src/liboconfig/parser.h \ + $(dist_man_MANS) + + +CLEANFILES = \ + .perl-directory-stamp \ + bindings/buildperl/Collectd.pm \ + bindings/buildperl/Collectd/Plugins/OpenVZ.pm \ + bindings/buildperl/Collectd/Unixsock.pm \ + bindings/buildperl/Makefile.PL \ + collectd-api.jar \ + collectd.grpc.pb.cc \ + collectd.grpc.pb.h \ + collectd.pb.cc \ + collectd.pb.h \ + generic-jmx.jar \ + org/collectd/api/*.class \ + org/collectd/java/*.class \ + prometheus.pb-c.c \ + prometheus.pb-c.h \ + src/pinba.pb-c.c \ + src/pinba.pb-c.h \ + types.pb.cc \ + types.pb.h + + +EXTRA_DIST = \ + bindings/perl/Makefile.PL \ + bindings/perl/lib/Collectd.pm \ + bindings/perl/lib/Collectd/Plugins/Monitorus.pm \ + bindings/perl/lib/Collectd/Plugins/OpenVZ.pm \ + bindings/perl/lib/Collectd/Unixsock.pm \ + bindings/perl/uninstall_mod.pl \ + contrib \ + proto/collectd.proto \ + proto/prometheus.proto \ + proto/types.proto \ + src/collectd-email.pod \ + src/collectd-exec.pod \ + src/collectd-java.pod \ + src/collectd-lua.pod \ + src/collectd-nagios.pod \ + src/collectd-perl.pod \ + src/collectd-python.pod \ + src/collectd-snmp.pod \ + src/collectd-tg.pod \ + src/collectd-threshold.pod \ + src/collectd-unixsock.pod \ + src/collectd.conf.pod \ + src/collectd.pod \ + src/collectdctl.pod \ + src/collectdmon.pod \ + src/pinba.proto \ + src/postgresql_default.conf \ + src/types.db \ + src/types.db.pod \ + src/valgrind.FreeBSD.suppress \ + testwrapper.sh \ + version-gen.sh + + +dist_man_MANS = \ + src/collectd.1 \ + src/collectd.conf.5 \ + src/collectd-email.5 \ + src/collectd-exec.5 \ + src/collectdctl.1 \ + src/collectd-java.5 \ + src/collectd-lua.5 \ + src/collectdmon.1 \ + src/collectd-nagios.1 \ + src/collectd-perl.5 \ + src/collectd-python.5 \ + src/collectd-snmp.5 \ + src/collectd-tg.1 \ + src/collectd-threshold.5 \ + src/collectd-unixsock.5 \ + src/types.db.5 + + +nodist_pkgconfig_DATA = \ + src/libcollectdclient/libcollectdclient.pc + +pkginclude_HEADERS = \ + src/libcollectdclient/collectd/client.h \ + src/libcollectdclient/collectd/network.h \ + src/libcollectdclient/collectd/network_buffer.h \ + src/libcollectdclient/collectd/lcc_features.h + +lib_LTLIBRARIES = libcollectdclient.la + + +sbin_PROGRAMS = \ + collectd \ + collectdmon + + +bin_PROGRAMS = \ + collectd-nagios \ + collectd-tg \ + collectdctl + + +noinst_LTLIBRARIES = \ + libavltree.la \ + libcmds.la \ + libcommon.la \ + libformat_graphite.la \ + libformat_json.la \ + libheap.la \ + libignorelist.la \ + liblatency.la \ + liblookup.la \ + libmetadata.la \ + libmount.la \ + liboconfig.la + + +check_LTLIBRARIES = \ + libplugin_mock.la + + +check_PROGRAMS = \ + test_common \ + test_format_graphite \ + test_meta_data \ + test_utils_avltree \ + test_utils_cmds \ + test_utils_heap \ + test_utils_latency \ + test_utils_mount \ + test_utils_subst \ + test_utils_time \ + test_utils_vl_lookup + + +TESTS = $(check_PROGRAMS) + +LOG_COMPILER = env VALGRIND="@VALGRIND@" $(abs_srcdir)/testwrapper.sh + + +jardir = $(pkgdatadir)/java + +pkglib_LTLIBRARIES = + + +PLUGIN_LDFLAGS = \ + -module \ + -avoid-version \ + -export-symbols-regex '\' + + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src -I$(top_srcdir)/src/daemon \ + -DPREFIX='"${prefix}"' \ + -DCONFIGFILE='"${sysconfdir}/${PACKAGE_NAME}.conf"' \ + -DLOCALSTATEDIR='"${localstatedir}"' \ + -DPKGLOCALSTATEDIR='"${localstatedir}/lib/${PACKAGE_NAME}"' \ + -DPLUGINDIR='"${pkglibdir}"' \ + -DPKGDATADIR='"${pkgdatadir}"' + + +# Link to these libraries.. +COMMON_LIBS = $(PTHREAD_LIBS) +if BUILD_WITH_CAPABILITY +COMMON_LIBS += -lcap +endif +if BUILD_WITH_LIBRT +COMMON_LIBS += -lrt +endif +if BUILD_WITH_LIBPOSIX4 +COMMON_LIBS += -lposix4 +endif +if BUILD_WITH_LIBSOCKET +COMMON_LIBS += -lsocket +endif +if BUILD_WITH_LIBKSTAT +COMMON_LIBS += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +COMMON_LIBS += -ldevinfo +endif + + +collectd_SOURCES = \ + src/daemon/collectd.c \ + src/daemon/collectd.h \ + src/daemon/configfile.c \ + src/daemon/configfile.h \ + src/daemon/filter_chain.c \ + src/daemon/filter_chain.h \ + src/daemon/meta_data.c \ + src/daemon/meta_data.h \ + src/daemon/plugin.c \ + src/daemon/plugin.h \ + src/daemon/utils_cache.c \ + src/daemon/utils_cache.h \ + src/daemon/utils_complain.c \ + src/daemon/utils_complain.h \ + src/daemon/utils_llist.c \ + src/daemon/utils_llist.h \ + src/daemon/utils_random.c \ + src/daemon/utils_random.h \ + src/daemon/utils_subst.c \ + src/daemon/utils_subst.h \ + src/daemon/utils_time.c \ + src/daemon/utils_time.h \ + src/daemon/types_list.c \ + src/daemon/types_list.h \ + src/daemon/utils_threshold.c \ + src/daemon/utils_threshold.h + + +collectd_CFLAGS = $(AM_CFLAGS) +collectd_CPPFLAGS = $(AM_CPPFLAGS) +collectd_LDFLAGS = -export-dynamic +collectd_LDADD = \ + libavltree.la \ + libcommon.la \ + libheap.la \ + liboconfig.la \ + -lm \ + $(COMMON_LIBS) \ + $(DLOPEN_LIBS) + +if BUILD_FEATURE_DAEMON +collectd_CPPFLAGS += -DPIDFILE='"${localstatedir}/run/${PACKAGE_NAME}.pid"' +endif + +# The daemon needs to call sg_init, so we need to link it against libstatgrab, +# too. -octo +if BUILD_WITH_LIBSTATGRAB +collectd_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +collectd_LDADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif + + +collectdmon_SOURCES = src/collectdmon.c + + +collectd_nagios_SOURCES = src/collectd-nagios.c +collectd_nagios_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(srcdir)/src/libcollectdclient/collectd \ + -I$(top_builddir)/src/libcollectdclient/collectd +collectd_nagios_LDADD = libcollectdclient.la +if BUILD_WITH_LIBSOCKET +collectd_nagios_LDADD += -lsocket +endif +if BUILD_AIX +collectd_nagios_LDADD += -lm +endif + + +collectdctl_SOURCES = src/collectdctl.c +collectdctl_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(srcdir)/src/libcollectdclient/collectd \ + -I$(top_builddir)/src/libcollectdclient/collectd +collectdctl_LDADD = libcollectdclient.la +if BUILD_WITH_LIBSOCKET +collectdctl_LDADD += -lsocket +endif +if BUILD_AIX +collectdctl_LDADD += -lm +endif + + +collectd_tg_SOURCES = src/collectd-tg.c +collectd_tg_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(srcdir)/src/libcollectdclient/collectd \ + -I$(top_builddir)/src/libcollectdclient/collectd +collectd_tg_LDADD = \ + $(PTHREAD_LIBS) \ + libheap.la \ + libcollectdclient.la +if BUILD_WITH_LIBSOCKET +collectd_tg_LDADD += -lsocket +endif +if BUILD_WITH_LIBRT +collectd_tg_LDADD += -lrt +endif +if BUILD_AIX +collectd_tg_LDADD += -lm +endif + + +test_common_SOURCES = \ + src/daemon/common_test.c \ + src/testing.h +test_common_LDADD = libplugin_mock.la + +test_meta_data_SOURCES = \ + src/daemon/meta_data_test.c \ + src/testing.h +test_meta_data_LDADD = libmetadata.la libplugin_mock.la + +test_utils_avltree_SOURCES = \ + src/daemon/utils_avltree_test.c \ + src/testing.h +test_utils_avltree_LDADD = libavltree.la $(COMMON_LIBS) + +test_utils_heap_SOURCES = \ + src/daemon/utils_heap_test.c \ + src/testing.h +test_utils_heap_LDADD = libheap.la $(COMMON_LIBS) + +test_utils_time_SOURCES = \ + src/daemon/utils_time_test.c \ + src/testing.h + +test_utils_subst_SOURCES = \ + src/daemon/utils_subst_test.c \ + src/testing.h \ + src/daemon/utils_subst.c \ + src/daemon/utils_subst.h +test_utils_subst_LDADD = libplugin_mock.la + +libavltree_la_SOURCES = \ + src/daemon/utils_avltree.c \ + src/daemon/utils_avltree.h + +libcommon_la_SOURCES = \ + src/daemon/common.c \ + src/daemon/common.h +libcommon_la_LIBADD = $(COMMON_LIBS) + +libheap_la_SOURCES = \ + src/daemon/utils_heap.c \ + src/daemon/utils_heap.h + +libignorelist_la_SOURCES = \ + src/utils_ignorelist.c \ + src/utils_ignorelist.h + +libmetadata_la_SOURCES = \ + src/daemon/meta_data.c \ + src/daemon/meta_data.h + +libplugin_mock_la_SOURCES = \ + src/daemon/plugin_mock.c \ + src/daemon/utils_cache_mock.c \ + src/daemon/utils_complain.c \ + src/daemon/utils_complain.h \ + src/daemon/utils_time.c \ + src/daemon/utils_time.h + +libplugin_mock_la_CPPFLAGS = $(AM_CPPFLAGS) -DMOCK_TIME +libplugin_mock_la_LIBADD = libcommon.la libignorelist.la $(COMMON_LIBS) + +libformat_graphite_la_SOURCES = \ + src/utils_format_graphite.c \ + src/utils_format_graphite.h + +test_format_graphite_SOURCES = \ + src/utils_format_graphite_test.c \ + src/testing.h +test_format_graphite_LDADD = \ + libformat_graphite.la \ + libmetadata.la \ + libplugin_mock.la \ + -lm + +libformat_json_la_SOURCES = \ + src/utils_format_json.c \ + src/utils_format_json.h +libformat_json_la_CPPFLAGS = $(AM_CPPFLAGS) +libformat_json_la_LDFLAGS = $(AM_LDFLAGS) +libformat_json_la_LIBADD = +if BUILD_WITH_LIBYAJL +libformat_json_la_CPPFLAGS += $(BUILD_WITH_LIBYAJL_CPPFLAGS) +libformat_json_la_LDFLAGS += $(BUILD_WITH_LIBYAJL_LDFLAGS) +libformat_json_la_LIBADD += $(BUILD_WITH_LIBYAJL_LIBS) + +check_PROGRAMS += test_format_json + +test_format_json_SOURCES = \ + src/utils_format_json_test.c \ + src/testing.h +test_format_json_LDADD = \ + libformat_json.la \ + libmetadata.la \ + libplugin_mock.la \ + -lm +endif + +if BUILD_PLUGIN_CEPH +test_plugin_ceph_SOURCES = src/ceph_test.c +test_plugin_ceph_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +test_plugin_ceph_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +test_plugin_ceph_LDADD = libplugin_mock.la $(BUILD_WITH_LIBYAJL_LIBS) +check_PROGRAMS += test_plugin_ceph +endif + +liblatency_la_SOURCES = \ + src/utils_latency.c \ + src/utils_latency.h \ + src/utils_latency_config.c \ + src/utils_latency_config.h +liblatency_la_LIBADD = \ + libcommon.la \ + -lm + +test_utils_latency_SOURCES = \ + src/utils_latency_test.c \ + src/testing.h +test_utils_latency_LDADD = \ + liblatency.la \ + libplugin_mock.la \ + -lm + +libcmds_la_SOURCES = \ + src/utils_cmds.c \ + src/utils_cmds.h \ + src/utils_cmd_flush.c \ + src/utils_cmd_flush.h \ + src/utils_cmd_getthreshold.c \ + src/utils_cmd_getthreshold.h \ + src/utils_cmd_getval.c \ + src/utils_cmd_getval.h \ + src/utils_cmd_listval.c \ + src/utils_cmd_listval.h \ + src/utils_cmd_putnotif.c \ + src/utils_cmd_putnotif.h \ + src/utils_cmd_putval.c \ + src/utils_cmd_putval.h \ + src/utils_parse_option.c \ + src/utils_parse_option.h +libcmds_la_LIBADD = \ + libcommon.la \ + libmetadata.la \ + -lm + +test_utils_cmds_SOURCES = \ + src/utils_cmds_test.c \ + src/testing.h +test_utils_cmds_LDADD = \ + libcmds.la \ + libplugin_mock.la + +liblookup_la_SOURCES = \ + src/utils_vl_lookup.c \ + src/utils_vl_lookup.h +liblookup_la_LIBADD = libavltree.la + +test_utils_vl_lookup_SOURCES = \ + src/utils_vl_lookup_test.c \ + src/testing.h +test_utils_vl_lookup_LDADD = \ + liblookup.la \ + libplugin_mock.la +if BUILD_WITH_LIBKSTAT +test_utils_vl_lookup_LDADD += -lkstat +endif + +libmount_la_SOURCES = \ + src/utils_mount.c \ + src/utils_mount.h + +test_utils_mount_SOURCES = \ + src/utils_mount_test.c \ + src/testing.h +test_utils_mount_LDADD = \ + libmount.la \ + libplugin_mock.la +if BUILD_WITH_LIBKSTAT +test_utils_mount_LDADD += -lkstat +endif + + +libcollectdclient_la_SOURCES = \ + src/libcollectdclient/client.c \ + src/libcollectdclient/network.c \ + src/libcollectdclient/network_buffer.c +libcollectdclient_la_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -I$(srcdir)/src/libcollectdclient/collectd \ + -I$(top_builddir)/src/libcollectdclient/collectd \ + -I$(srcdir)/src/daemon +libcollectdclient_la_LDFLAGS = -version-info 1:0:0 +libcollectdclient_la_LIBADD = +if BUILD_WITH_LIBGCRYPT +libcollectdclient_la_CPPFLAGS += $(GCRYPT_CPPFLAGS) +libcollectdclient_la_LDFLAGS += $(GCRYPT_LDFLAGS) +libcollectdclient_la_LIBADD += $(GCRYPT_LIBS) +endif + + +liboconfig_la_SOURCES = \ + src/liboconfig/oconfig.c \ + src/liboconfig/oconfig.h \ + src/liboconfig/aux_types.h \ + src/liboconfig/scanner.l \ + src/liboconfig/parser.y +liboconfig_la_LDFLAGS = -avoid-version $(LEXLIB) + + +if BUILD_PLUGIN_AGGREGATION +pkglib_LTLIBRARIES += aggregation.la +aggregation_la_SOURCES = \ + src/aggregation.c \ + src/utils_vl_lookup.c \ + src/utils_vl_lookup.h +aggregation_la_LDFLAGS = $(PLUGIN_LDFLAGS) +aggregation_la_LIBADD = -lm +endif + +if BUILD_PLUGIN_AMQP +pkglib_LTLIBRARIES += amqp.la +amqp_la_SOURCES = src/amqp.c +amqp_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBRABBITMQ_CPPFLAGS) +amqp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRABBITMQ_LDFLAGS) +amqp_la_LIBADD = \ + $(BUILD_WITH_LIBRABBITMQ_LIBS) \ + libcmds.la \ + libformat_graphite.la \ + libformat_json.la +endif + +if BUILD_PLUGIN_APACHE +pkglib_LTLIBRARIES += apache.la +apache_la_SOURCES = src/apache.c +apache_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) +apache_la_LDFLAGS = $(PLUGIN_LDFLAGS) +apache_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) +endif + + +if BUILD_PLUGIN_APCUPS +pkglib_LTLIBRARIES += apcups.la +apcups_la_SOURCES = src/apcups.c +apcups_la_LDFLAGS = $(PLUGIN_LDFLAGS) +apcups_la_LIBADD = +if BUILD_WITH_LIBSOCKET +apcups_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_APPLE_SENSORS +pkglib_LTLIBRARIES += apple_sensors.la +apple_sensors_la_SOURCES = src/apple_sensors.c +apple_sensors_la_LDFLAGS = $(PLUGIN_LDFLAGS) -framework IOKit +endif + +if BUILD_PLUGIN_AQUAERO +pkglib_LTLIBRARIES += aquaero.la +aquaero_la_SOURCES = src/aquaero.c +aquaero_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBAQUAERO5_CFLAGS) +aquaero_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBAQUAERO5_LDFLAGS) +aquaero_la_LIBADD = -laquaero5 +endif + +if BUILD_PLUGIN_ASCENT +pkglib_LTLIBRARIES += ascent.la +ascent_la_SOURCES = src/ascent.c +ascent_la_CFLAGS = \ + $(AM_CFLAGS) \ + $(BUILD_WITH_LIBCURL_CFLAGS) \ + $(BUILD_WITH_LIBXML2_CFLAGS) +ascent_la_LDFLAGS = $(PLUGIN_LDFLAGS) +ascent_la_LIBADD = \ + $(BUILD_WITH_LIBCURL_LIBS) \ + $(BUILD_WITH_LIBXML2_LIBS) +endif + +if BUILD_PLUGIN_BAROMETER +pkglib_LTLIBRARIES += barometer.la +barometer_la_SOURCES = src/barometer.c +barometer_la_LDFLAGS = $(PLUGIN_LDFLAGS) +barometer_la_LIBADD = -lm +endif + +if BUILD_PLUGIN_BATTERY +pkglib_LTLIBRARIES += battery.la +battery_la_SOURCES = \ + src/battery.c \ + src/battery_statefs.c +battery_la_LDFLAGS = $(PLUGIN_LDFLAGS) +if BUILD_WITH_LIBIOKIT +battery_la_LDFLAGS += -framework IOKit +endif endif -SUBDIRS += proto src bindings . +if BUILD_PLUGIN_BIND +pkglib_LTLIBRARIES += bind.la +bind_la_SOURCES = src/bind.c +bind_la_CFLAGS = $(AM_CFLAGS) \ + $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) +bind_la_LDFLAGS = $(PLUGIN_LDFLAGS) +bind_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) +endif + +if BUILD_PLUGIN_CEPH +pkglib_LTLIBRARIES += ceph.la +ceph_la_SOURCES = src/ceph.c +ceph_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +ceph_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +ceph_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) +endif + +if BUILD_PLUGIN_CGROUPS +pkglib_LTLIBRARIES += cgroups.la +cgroups_la_SOURCES = src/cgroups.c +cgroups_la_LDFLAGS = $(PLUGIN_LDFLAGS) +cgroups_la_LIBADD = libignorelist.la libmount.la +endif + +if BUILD_PLUGIN_CHRONY +pkglib_LTLIBRARIES += chrony.la +chrony_la_SOURCES = src/chrony.c +chrony_la_LDFLAGS = $(PLUGIN_LDFLAGS) +chrony_la_LIBADD = -lm +endif + +if BUILD_PLUGIN_CONNTRACK +pkglib_LTLIBRARIES += conntrack.la +conntrack_la_SOURCES = src/conntrack.c +conntrack_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_CONTEXTSWITCH +pkglib_LTLIBRARIES += contextswitch.la +contextswitch_la_SOURCES = src/contextswitch.c +contextswitch_la_LDFLAGS = $(PLUGIN_LDFLAGS) +contextswitch_la_LIBADD = +if BUILD_WITH_PERFSTAT +contextswitch_la_LIBADD += -lperfstat +endif +endif + +if BUILD_PLUGIN_CPU +pkglib_LTLIBRARIES += cpu.la +cpu_la_SOURCES = src/cpu.c +cpu_la_CFLAGS = $(AM_CFLAGS) +cpu_la_LDFLAGS = $(PLUGIN_LDFLAGS) +cpu_la_LIBADD = +if BUILD_WITH_LIBKSTAT +cpu_la_LIBADD += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +cpu_la_LIBADD += -ldevinfo +endif +if BUILD_WITH_LIBSTATGRAB +cpu_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +cpu_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif +if BUILD_WITH_PERFSTAT +cpu_la_LIBADD += -lperfstat +endif +endif + +if BUILD_PLUGIN_CPUFREQ +pkglib_LTLIBRARIES += cpufreq.la +cpufreq_la_SOURCES = src/cpufreq.c +cpufreq_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_CPUSLEEP +pkglib_LTLIBRARIES += cpusleep.la +cpusleep_la_SOURCES = src/cpusleep.c +cpusleep_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_CSV +pkglib_LTLIBRARIES += csv.la +csv_la_SOURCES = src/csv.c +csv_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_CURL +pkglib_LTLIBRARIES += curl.la +curl_la_SOURCES = \ + src/curl.c \ + src/utils_curl_stats.c \ + src/utils_curl_stats.h \ + src/utils_match.c \ + src/utils_match.h +curl_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) +curl_la_LDFLAGS = $(PLUGIN_LDFLAGS) +curl_la_LIBADD = liblatency.la $(BUILD_WITH_LIBCURL_LIBS) +endif + +if BUILD_PLUGIN_CURL_JSON +pkglib_LTLIBRARIES += curl_json.la +curl_json_la_SOURCES = \ + src/curl_json.c \ + src/utils_curl_stats.c \ + src/utils_curl_stats.h +curl_json_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) +curl_json_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +curl_json_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +curl_json_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBYAJL_LIBS) + +test_plugin_curl_json_SOURCES = src/curl_json_test.c \ + src/utils_curl_stats.c \ + src/daemon/configfile.c \ + src/daemon/types_list.c +test_plugin_curl_json_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +test_plugin_curl_json_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +test_plugin_curl_json_LDADD = libavltree.la liboconfig.la libplugin_mock.la $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBYAJL_LIBS) +check_PROGRAMS += test_plugin_curl_json +endif + +if BUILD_PLUGIN_CURL_XML +pkglib_LTLIBRARIES += curl_xml.la +curl_xml_la_SOURCES = \ + src/curl_xml.c \ + src/utils_curl_stats.c \ + src/utils_curl_stats.h +curl_xml_la_CFLAGS = $(AM_CFLAGS) \ + $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) +curl_xml_la_LDFLAGS = $(PLUGIN_LDFLAGS) +curl_xml_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) +endif + +if BUILD_PLUGIN_DBI +pkglib_LTLIBRARIES += dbi.la +dbi_la_SOURCES = \ + src/dbi.c \ + src/utils_db_query.c \ + src/utils_db_query.h +dbi_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBDBI_CPPFLAGS) +dbi_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBDBI_LDFLAGS) +dbi_la_LIBADD = $(BUILD_WITH_LIBDBI_LIBS) +endif + +if BUILD_PLUGIN_DF +pkglib_LTLIBRARIES += df.la +df_la_SOURCES = src/df.c +df_la_LDFLAGS = $(PLUGIN_LDFLAGS) +df_la_LIBADD = libignorelist.la libmount.la +endif + +if BUILD_PLUGIN_DISK +pkglib_LTLIBRARIES += disk.la +disk_la_SOURCES = src/disk.c +disk_la_CFLAGS = $(AM_CFLAGS) +disk_la_CPPFLAGS = $(AM_CPPFLAGS) +disk_la_LDFLAGS = $(PLUGIN_LDFLAGS) +disk_la_LIBADD = libignorelist.la +if BUILD_WITH_LIBKSTAT +disk_la_LIBADD += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +disk_la_LIBADD += -ldevinfo +endif +if BUILD_WITH_LIBIOKIT +disk_la_LDFLAGS += -framework IOKit +endif +if BUILD_WITH_LIBSTATGRAB +disk_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +disk_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif +if BUILD_WITH_LIBUDEV +disk_la_CPPFLAGS += $(BUILD_WITH_LIBUDEV_CPPFLAGS) +disk_la_LDFLAGS += $(BUILD_WITH_LIBUDEV_LDFLAGS) +disk_la_LIBADD += $(BUILD_WITH_LIBUDEV_LIBS) +endif +if BUILD_FREEBSD +disk_la_LIBADD += -ldevstat -lgeom +endif +if BUILD_WITH_PERFSTAT +disk_la_LIBADD += -lperfstat +endif +endif + +if BUILD_PLUGIN_DNS +pkglib_LTLIBRARIES += dns.la +dns_la_SOURCES = \ + src/dns.c \ + src/utils_dns.c \ + src/utils_dns.h +dns_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPCAP_CPPFLAGS) +dns_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPCAP_LDFLAGS) +dns_la_LIBADD = $(BUILD_WITH_LIBPCAP_LIBS) +endif + +if BUILD_PLUGIN_DPDKEVENTS +pkglib_LTLIBRARIES += dpdkevents.la +dpdkevents_la_SOURCES = src/dpdkevents.c src/utils_dpdk.c src/utils_dpdk.h +dpdkevents_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBDPDK_CPPFLAGS) +dpdkevents_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBDPDK_LDFLAGS) +dpdkevents_la_LIBADD = -ldpdk +endif + +if BUILD_PLUGIN_DPDKSTAT +pkglib_LTLIBRARIES += dpdkstat.la +dpdkstat_la_SOURCES = src/dpdkstat.c src/utils_dpdk.c src/utils_dpdk.h +dpdkstat_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBDPDK_CPPFLAGS) +dpdkstat_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBDPDK_LDFLAGS) +dpdkstat_la_LIBADD = -ldpdk +endif + +if BUILD_PLUGIN_DRBD +pkglib_LTLIBRARIES += drbd.la +drbd_la_SOURCES = src/drbd.c +drbd_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif -AM_CPPFLAGS = $(LTDLINCL) +if BUILD_PLUGIN_EMAIL +pkglib_LTLIBRARIES += email.la +email_la_SOURCES = src/email.c +email_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif -EXTRA_DIST = contrib version-gen.sh testwrapper.sh +if BUILD_PLUGIN_ENTROPY +pkglib_LTLIBRARIES += entropy.la +entropy_la_SOURCES = src/entropy.c +entropy_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_EXEC +pkglib_LTLIBRARIES += exec.la +exec_la_SOURCES = src/exec.c +exec_la_LDFLAGS = $(PLUGIN_LDFLAGS) +exec_la_LIBADD = libcmds.la +endif + +if BUILD_PLUGIN_ETHSTAT +pkglib_LTLIBRARIES += ethstat.la +ethstat_la_SOURCES = src/ethstat.c +ethstat_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_FHCOUNT +pkglib_LTLIBRARIES += fhcount.la +fhcount_la_SOURCES = src/fhcount.c +fhcount_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_FILECOUNT +pkglib_LTLIBRARIES += filecount.la +filecount_la_SOURCES = src/filecount.c +filecount_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_FSCACHE +pkglib_LTLIBRARIES += fscache.la +fscache_la_SOURCES = src/fscache.c +fscache_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_GMOND +pkglib_LTLIBRARIES += gmond.la +gmond_la_SOURCES = src/gmond.c +gmond_la_CPPFLAGS = $(AM_CPPFLAGS) $(GANGLIA_CPPFLAGS) +gmond_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(GANGLIA_LDFLAGS) +gmond_la_LIBADD = $(GANGLIA_LIBS) +endif + +if BUILD_PLUGIN_GPS +pkglib_LTLIBRARIES += gps.la +gps_la_SOURCES = src/gps.c +gps_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBGPS_CFLAGS) +gps_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBGPS_LDFLAGS) +gps_la_LIBADD = -lpthread $(BUILD_WITH_LIBGPS_LIBS) +endif + +if BUILD_PLUGIN_GRPC +pkglib_LTLIBRARIES += grpc.la +grpc_la_SOURCES = src/grpc.cc +nodist_grpc_la_SOURCES = \ + collectd.grpc.pb.cc \ + collectd.pb.cc \ + types.pb.cc +grpc_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBGRPCPP_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_CPPFLAGS) +grpc_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBGRPCPP_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_LDFLAGS) +grpc_la_LIBADD = $(BUILD_WITH_LIBGRPCPP_LIBS) $(BUILD_WITH_LIBPROTOBUF_LIBS) +endif + +if BUILD_PLUGIN_HDDTEMP +pkglib_LTLIBRARIES += hddtemp.la +hddtemp_la_SOURCES = src/hddtemp.c +hddtemp_la_LDFLAGS = $(PLUGIN_LDFLAGS) +hddtemp_la_LIBADD = +if BUILD_WITH_LIBSOCKET +hddtemp_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_HUGEPAGES +pkglib_LTLIBRARIES += hugepages.la +hugepages_la_SOURCES = src/hugepages.c +hugepages_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_INTEL_RDT +pkglib_LTLIBRARIES += intel_rdt.la +intel_rdt_la_SOURCES = src/intel_rdt.c +intel_rdt_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBPQOS_CPPFLAGS) +intel_rdt_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPQOS_LDFLAGS) +intel_rdt_la_LIBADD = $(BUILD_WITH_LIBPQOS_LIBS) +endif + +if BUILD_PLUGIN_INTERFACE +pkglib_LTLIBRARIES += interface.la +interface_la_SOURCES = src/interface.c +interface_la_CFLAGS = $(AM_CFLAGS) +interface_la_LDFLAGS = $(PLUGIN_LDFLAGS) +interface_la_LIBADD = libignorelist.la +if BUILD_WITH_LIBSTATGRAB +interface_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +interface_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +else +if BUILD_WITH_LIBKSTAT +interface_la_LIBADD += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +interface_la_LIBADD += -ldevinfo +endif # BUILD_WITH_LIBDEVINFO +endif # !BUILD_WITH_LIBSTATGRAB +if BUILD_WITH_PERFSTAT +interface_la_LIBADD += -lperfstat +endif +endif # BUILD_PLUGIN_INTERFACE + +if BUILD_PLUGIN_IPC +pkglib_LTLIBRARIES += ipc.la +ipc_la_SOURCES = src/ipc.c +ipc_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_IPTABLES +pkglib_LTLIBRARIES += iptables.la +iptables_la_SOURCES = src/iptables.c +iptables_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBIPTC_CPPFLAGS) +iptables_la_LDFLAGS = $(PLUGIN_LDFLAGS) +iptables_la_LIBADD = $(BUILD_WITH_LIBIPTC_LDFLAGS) +endif + +if BUILD_PLUGIN_IPMI +pkglib_LTLIBRARIES += ipmi.la +ipmi_la_SOURCES = src/ipmi.c +ipmi_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_OPENIPMI_CFLAGS) +ipmi_la_LDFLAGS = $(PLUGIN_LDFLAGS) +ipmi_la_LIBADD = libignorelist.la $(BUILD_WITH_OPENIPMI_LIBS) +endif + +if BUILD_PLUGIN_IPVS +pkglib_LTLIBRARIES += ipvs.la +ipvs_la_SOURCES = src/ipvs.c +ipvs_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_IRQ +pkglib_LTLIBRARIES += irq.la +irq_la_SOURCES = src/irq.c +irq_la_LDFLAGS = $(PLUGIN_LDFLAGS) +irq_la_LIBADD = libignorelist.la +endif + +if BUILD_PLUGIN_JAVA +pkglib_LTLIBRARIES += java.la +java_la_SOURCES = src/java.c +java_la_CPPFLAGS = $(AM_CPPFLAGS) $(JAVA_CPPFLAGS) +java_la_CFLAGS = $(AM_CFLAGS) $(JAVA_CFLAGS) +java_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(JAVA_LDFLAGS) +java_la_LIBADD = $(JAVA_LIBS) +endif + +if BUILD_PLUGIN_LOAD +pkglib_LTLIBRARIES += load.la +load_la_SOURCES = src/load.c +load_la_CFLAGS = $(AM_CFLAGS) +load_la_LDFLAGS = $(PLUGIN_LDFLAGS) +load_la_LIBADD = +if BUILD_WITH_LIBSTATGRAB +load_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +load_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif # BUILD_WITH_LIBSTATGRAB +if BUILD_WITH_PERFSTAT +load_la_LIBADD += -lperfstat +endif +endif # BUILD_PLUGIN_LOAD + +if BUILD_PLUGIN_LOGFILE +pkglib_LTLIBRARIES += logfile.la +logfile_la_SOURCES = src/logfile.c +logfile_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_LOG_LOGSTASH +pkglib_LTLIBRARIES += log_logstash.la +log_logstash_la_SOURCES = src/log_logstash.c +log_logstash_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +log_logstash_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +log_logstash_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) +endif + +if BUILD_PLUGIN_LPAR +pkglib_LTLIBRARIES += lpar.la +lpar_la_SOURCES = src/lpar.c +lpar_la_LDFLAGS = $(PLUGIN_LDFLAGS) +lpar_la_LIBADD = -lperfstat +endif + +if BUILD_PLUGIN_LUA +pkglib_LTLIBRARIES += lua.la +lua_la_SOURCES = \ + src/lua.c \ + src/utils_lua.c \ + src/utils_lua.h +lua_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBLUA_CFLAGS) +lua_la_LDFLAGS = $(PLUGIN_LDFLAGS) +lua_la_LIBADD = $(BUILD_WITH_LIBLUA_LIBS) +endif + +if BUILD_PLUGIN_LVM +pkglib_LTLIBRARIES += lvm.la +lvm_la_SOURCES = src/lvm.c +lvm_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBLVM2APP_CPPFLAGS) +lvm_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBLVM2APP_LDFLAGS) +lvm_la_LIBADD = $(BUILD_WITH_LIBLVM2APP_LIBS) +endif + +if BUILD_PLUGIN_MADWIFI +pkglib_LTLIBRARIES += madwifi.la +madwifi_la_SOURCES = \ + src/madwifi.c \ + src/madwifi.h +madwifi_la_LDFLAGS = $(PLUGIN_LDFLAGS) +madwifi_la_LIBADD = libignorelist.la +endif + +if BUILD_PLUGIN_MATCH_EMPTY_COUNTER +pkglib_LTLIBRARIES += match_empty_counter.la +match_empty_counter_la_SOURCES = src/match_empty_counter.c +match_empty_counter_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MATCH_HASHED +pkglib_LTLIBRARIES += match_hashed.la +match_hashed_la_SOURCES = src/match_hashed.c +match_hashed_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MATCH_REGEX +pkglib_LTLIBRARIES += match_regex.la +match_regex_la_SOURCES = src/match_regex.c +match_regex_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MATCH_TIMEDIFF +pkglib_LTLIBRARIES += match_timediff.la +match_timediff_la_SOURCES = src/match_timediff.c +match_timediff_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MATCH_VALUE +pkglib_LTLIBRARIES += match_value.la +match_value_la_SOURCES = src/match_value.c +match_value_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MBMON +pkglib_LTLIBRARIES += mbmon.la +mbmon_la_SOURCES = src/mbmon.c +mbmon_la_LDFLAGS = $(PLUGIN_LDFLAGS) +mbmon_la_LIBADD = +if BUILD_WITH_LIBSOCKET +mbmon_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_MCELOG +pkglib_LTLIBRARIES += mcelog.la +mcelog_la_SOURCES = src/mcelog.c +mcelog_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MD +pkglib_LTLIBRARIES += md.la +md_la_SOURCES = src/md.c +md_la_LDFLAGS = $(PLUGIN_LDFLAGS) +md_la_LIBADD = libignorelist.la +endif + +if BUILD_PLUGIN_MEMCACHEC +pkglib_LTLIBRARIES += memcachec.la +memcachec_la_SOURCES = \ + src/memcachec.c \ + src/utils_match.c \ + src/utils_match.h +memcachec_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBMEMCACHED_CPPFLAGS) +memcachec_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMEMCACHED_LDFLAGS) +memcachec_la_LIBADD = liblatency.la $(BUILD_WITH_LIBMEMCACHED_LIBS) +endif + +if BUILD_PLUGIN_MEMCACHED +pkglib_LTLIBRARIES += memcached.la +memcached_la_SOURCES = src/memcached.c +memcached_la_LDFLAGS = $(PLUGIN_LDFLAGS) +memcached_la_LIBADD = +if BUILD_WITH_LIBSOCKET +memcached_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_MEMORY +pkglib_LTLIBRARIES += memory.la +memory_la_SOURCES = src/memory.c +memory_la_CFLAGS = $(AM_CFLAGS) +memory_la_LDFLAGS = $(PLUGIN_LDFLAGS) +memory_la_LIBADD = +if BUILD_WITH_LIBKSTAT +memory_la_LIBADD += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +memory_la_LIBADD += -ldevinfo +endif +if BUILD_WITH_LIBSTATGRAB +memory_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +memory_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif +if BUILD_WITH_PERFSTAT +memory_la_LIBADD += -lperfstat +endif +endif + +if BUILD_PLUGIN_MIC +pkglib_LTLIBRARIES += mic.la +mic_la_SOURCES = src/mic.c +mic_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_MIC_CPPFLAGS) +mic_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_MIC_LDFLAGS) +mic_la_LIBADD = libignorelist.la $(BUILD_WITH_MIC_LIBS) +endif + +if BUILD_PLUGIN_MODBUS +pkglib_LTLIBRARIES += modbus.la +modbus_la_SOURCES = src/modbus.c +modbus_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMODBUS_CFLAGS) +modbus_la_LDFLAGS = $(PLUGIN_LDFLAGS) +modbus_la_LIBADD = $(BUILD_WITH_LIBMODBUS_LIBS) +endif + +if BUILD_PLUGIN_MQTT +pkglib_LTLIBRARIES += mqtt.la +mqtt_la_SOURCES = src/mqtt.c +mqtt_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBMOSQUITTO_CPPFLAGS) +mqtt_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMOSQUITTO_LDFLAGS) +mqtt_la_LIBADD = $(BUILD_WITH_LIBMOSQUITTO_LIBS) +endif + +if BUILD_PLUGIN_MULTIMETER +pkglib_LTLIBRARIES += multimeter.la +multimeter_la_SOURCES = src/multimeter.c +multimeter_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_MYSQL +pkglib_LTLIBRARIES += mysql.la +mysql_la_SOURCES = src/mysql.c +mysql_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMYSQL_CFLAGS) +mysql_la_LDFLAGS = $(PLUGIN_LDFLAGS) +mysql_la_LIBADD = $(BUILD_WITH_LIBMYSQL_LIBS) +endif + +if BUILD_PLUGIN_NETAPP +pkglib_LTLIBRARIES += netapp.la +netapp_la_SOURCES = src/netapp.c +netapp_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBNETAPP_CPPFLAGS) +netapp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBNETAPP_LDFLAGS) +netapp_la_LIBADD = libignorelist.la $(LIBNETAPP_LIBS) +endif + +if BUILD_PLUGIN_NETLINK +pkglib_LTLIBRARIES += netlink.la +netlink_la_SOURCES = src/netlink.c +netlink_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMNL_CFLAGS) +netlink_la_LDFLAGS = $(PLUGIN_LDFLAGS) +netlink_la_LIBADD = $(BUILD_WITH_LIBMNL_LIBS) +endif + +if BUILD_PLUGIN_NETWORK +pkglib_LTLIBRARIES += network.la +network_la_SOURCES = \ + src/network.c \ + src/network.h \ + src/utils_fbhash.c \ + src/utils_fbhash.h +network_la_CPPFLAGS = $(AM_CPPFLAGS) +network_la_LDFLAGS = $(PLUGIN_LDFLAGS) +network_la_LIBADD = +if BUILD_WITH_LIBSOCKET +network_la_LIBADD += -lsocket +endif +if BUILD_WITH_LIBGCRYPT +network_la_CPPFLAGS += $(GCRYPT_CPPFLAGS) +network_la_LDFLAGS += $(GCRYPT_LDFLAGS) +network_la_LIBADD += $(GCRYPT_LIBS) +endif +endif + +if BUILD_PLUGIN_NFS +pkglib_LTLIBRARIES += nfs.la +nfs_la_SOURCES = src/nfs.c +nfs_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_NGINX +pkglib_LTLIBRARIES += nginx.la +nginx_la_SOURCES = src/nginx.c +nginx_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) +nginx_la_LDFLAGS = $(PLUGIN_LDFLAGS) +nginx_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) +endif + +if BUILD_PLUGIN_NOTIFY_DESKTOP +pkglib_LTLIBRARIES += notify_desktop.la +notify_desktop_la_SOURCES = src/notify_desktop.c +notify_desktop_la_CFLAGS = $(AM_CFLAGS) $(LIBNOTIFY_CFLAGS) +notify_desktop_la_LDFLAGS = $(PLUGIN_LDFLAGS) +notify_desktop_la_LIBADD = $(LIBNOTIFY_LIBS) +endif + +if BUILD_PLUGIN_NOTIFY_EMAIL +pkglib_LTLIBRARIES += notify_email.la +notify_email_la_SOURCES = src/notify_email.c +notify_email_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBESMTP_CPPFLAGS) +notify_email_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBESMTP_LDFLAGS) +notify_email_la_LIBADD = $(BUILD_WITH_LIBESMTP_LIBS) +endif + +if BUILD_PLUGIN_NOTIFY_NAGIOS +pkglib_LTLIBRARIES += notify_nagios.la +notify_nagios_la_SOURCES = src/notify_nagios.c +notify_nagios_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_NTPD +pkglib_LTLIBRARIES += ntpd.la +ntpd_la_SOURCES = src/ntpd.c +ntpd_la_LDFLAGS = $(PLUGIN_LDFLAGS) +ntpd_la_LIBADD = +if BUILD_WITH_LIBSOCKET +ntpd_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_NUMA +pkglib_LTLIBRARIES += numa.la +numa_la_SOURCES = src/numa.c +numa_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_NUT +pkglib_LTLIBRARIES += nut.la +nut_la_SOURCES = src/nut.c +nut_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBUPSCLIENT_CFLAGS) +nut_la_LDFLAGS = $(PLUGIN_LDFLAGS) +nut_la_LIBADD = $(BUILD_WITH_LIBUPSCLIENT_LIBS) +endif + +if BUILD_PLUGIN_OLSRD +pkglib_LTLIBRARIES += olsrd.la +olsrd_la_SOURCES = src/olsrd.c +olsrd_la_LDFLAGS = $(PLUGIN_LDFLAGS) +olsrd_la_LIBADD = +if BUILD_WITH_LIBSOCKET +olsrd_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_ONEWIRE +pkglib_LTLIBRARIES += onewire.la +onewire_la_SOURCES = src/onewire.c +onewire_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBOWCAPI_CPPFLAGS) +onewire_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBOWCAPI_LDFLAGS) +onewire_la_LIBADD = libignorelist.la $(BUILD_WITH_LIBOWCAPI_LIBS) +endif + +if BUILD_PLUGIN_OPENLDAP +pkglib_LTLIBRARIES += openldap.la +openldap_la_SOURCES = src/openldap.c +openldap_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBLDAP_CPPFLAGS) +openldap_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBLDAP_LDFLAGS) +openldap_la_LIBADD = -lldap +endif + +if BUILD_PLUGIN_OPENVPN +pkglib_LTLIBRARIES += openvpn.la +openvpn_la_SOURCES = src/openvpn.c +openvpn_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_ORACLE +pkglib_LTLIBRARIES += oracle.la +oracle_la_SOURCES = \ + src/oracle.c \ + src/utils_db_query.c \ + src/utils_db_query.h +oracle_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_ORACLE_CPPFLAGS) +oracle_la_LIBADD = $(BUILD_WITH_ORACLE_LIBS) +oracle_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_OVS_EVENTS +pkglib_LTLIBRARIES += ovs_events.la +ovs_events_la_SOURCES = \ + src/ovs_events.c \ + src/utils_ovs.c \ + src/utils_ovs.h +ovs_events_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +ovs_events_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +ovs_events_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) +endif + +if BUILD_PLUGIN_OVS_STATS +pkglib_LTLIBRARIES += ovs_stats.la +ovs_stats_la_SOURCES = \ + src/ovs_stats.c \ + src/utils_ovs.c \ + src/utils_ovs.h +ovs_stats_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) +ovs_stats_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) +ovs_stats_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) +endif + +if BUILD_PLUGIN_PERL +pkglib_LTLIBRARIES += perl.la +perl_la_SOURCES = src/perl.c +# Despite C99 providing the "bool" type thru stdbool.h, Perl defines its own +# version of that type if HAS_BOOL is not defined... *sigh* +perl_la_CPPFLAGS = $(AM_CPPFLAGS) -DHAS_BOOL=1 +# Despite off_t being 64 bit wide on 64 bit platforms, Perl insist on using +# off64_t which is only exposed when _LARGEFILE64_SOURCE is defined... *sigh* +# On older platforms we also need _REENTRANT. _GNU_SOURCE sets both of these. +perl_la_CPPFLAGS += -D_GNU_SOURCE +perl_la_CFLAGS = $(AM_CFLAGS) \ + $(PERL_CFLAGS) \ + -DXS_VERSION=\"$(VERSION)\" -DVERSION=\"$(VERSION)\" +perl_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(PERL_LDFLAGS) +perl_la_LIBADD = $(PERL_LIBS) +endif + +if BUILD_PLUGIN_PF +pkglib_LTLIBRARIES += pf.la +pf_la_SOURCES = src/pf.c +pf_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_PINBA +pkglib_LTLIBRARIES += pinba.la +pinba_la_SOURCES = src/pinba.c +nodist_pinba_la_SOURCES = \ + src/pinba.pb-c.c \ + src/pinba.pb-c.h +pinba_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS) +pinba_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_LDFLAGS) +pinba_la_LIBADD = $(BUILD_WITH_LIBPROTOBUF_C_LIBS) +endif + +if BUILD_PLUGIN_PING +pkglib_LTLIBRARIES += ping.la +ping_la_SOURCES = src/ping.c +ping_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBOPING_CPPFLAGS) +ping_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBOPING_LDFLAGS) +ping_la_LIBADD = -loping -lm +endif + +if BUILD_PLUGIN_POSTGRESQL +pkglib_LTLIBRARIES += postgresql.la +postgresql_la_SOURCES = \ + src/postgresql.c \ + src/utils_db_query.c \ + src/utils_db_query.h +postgresql_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPQ_CPPFLAGS) +postgresql_la_LDFLAGS = $(PLUGIN_LDFLAGS) \ + $(BUILD_WITH_LIBPQ_LDFLAGS) +postgresql_la_LIBADD = $(BUILD_WITH_LIBPQ_LIBS) +endif + +if BUILD_PLUGIN_POWERDNS +pkglib_LTLIBRARIES += powerdns.la +powerdns_la_SOURCES = src/powerdns.c +powerdns_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_PYTHON +pkglib_LTLIBRARIES += python.la +python_la_SOURCES = \ + src/python.c \ + src/pyconfig.c \ + src/pyvalues.c \ + src/cpython.h +python_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBPYTHON_CPPFLAGS) +python_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBPYTHON_LDFLAGS) +endif + +if BUILD_PLUGIN_PROCESSES +pkglib_LTLIBRARIES += processes.la +processes_la_SOURCES = src/processes.c +processes_la_LDFLAGS = $(PLUGIN_LDFLAGS) +processes_la_LIBADD = +if BUILD_WITH_LIBKVM_GETPROCS +processes_la_LIBADD += -lkvm +endif +endif + +if BUILD_PLUGIN_PROTOCOLS +pkglib_LTLIBRARIES += protocols.la +protocols_la_SOURCES = src/protocols.c +protocols_la_LDFLAGS = $(PLUGIN_LDFLAGS) +protocols_la_LIBADD = libignorelist.la +endif + +if BUILD_PLUGIN_REDIS +pkglib_LTLIBRARIES += redis.la +redis_la_SOURCES = src/redis.c +redis_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBHIREDIS_CPPFLAGS) +redis_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBHIREDIS_LDFLAGS) +redis_la_LIBADD = -lhiredis +endif + +if BUILD_PLUGIN_ROUTEROS +pkglib_LTLIBRARIES += routeros.la +routeros_la_SOURCES = src/routeros.c +routeros_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBROUTEROS_CPPFLAGS) +routeros_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBROUTEROS_LDFLAGS) +routeros_la_LIBADD = -lrouteros +endif + +if BUILD_PLUGIN_RRDCACHED +pkglib_LTLIBRARIES += rrdcached.la +rrdcached_la_SOURCES = \ + src/rrdcached.c \ + src/utils_rrdcreate.c \ + src/utils_rrdcreate.h +rrdcached_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) +rrdcached_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRRD_LDFLAGS) +rrdcached_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) +endif + +if BUILD_PLUGIN_RRDTOOL +pkglib_LTLIBRARIES += rrdtool.la +rrdtool_la_SOURCES = \ + src/rrdtool.c \ + src/utils_rrdcreate.c \ + src/utils_rrdcreate.h +rrdtool_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) +rrdtool_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRRD_LDFLAGS) +rrdtool_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) +endif + +if BUILD_PLUGIN_SENSORS +pkglib_LTLIBRARIES += sensors.la +sensors_la_SOURCES = src/sensors.c +sensors_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBSENSORS_CPPFLAGS) +sensors_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBSENSORS_LDFLAGS) +sensors_la_LIBADD = libignorelist.la $(BUILD_WITH_LIBSENSORS_LIBS) +endif + +if BUILD_PLUGIN_SERIAL +pkglib_LTLIBRARIES += serial.la +serial_la_SOURCES = src/serial.c +serial_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_SIGROK +pkglib_LTLIBRARIES += sigrok.la +sigrok_la_SOURCES = src/sigrok.c +sigrok_la_CFLAGS = $(AM_CFLAGS) $(LIBSIGROK_CFLAGS) +sigrok_la_LDFLAGS = $(PLUGIN_LDFLAGS) +sigrok_la_LIBADD = $(LIBSIGROK_LIBS) +endif + +if BUILD_PLUGIN_SMART +if BUILD_WITH_LIBUDEV +pkglib_LTLIBRARIES += smart.la +smart_la_SOURCES = src/smart.c +smart_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBATASMART_CPPFLAGS) $(BUILD_WITH_LIBUDEV_CPPFLAGS) +smart_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBATASMART_LDFLAGS) $(BUILD_WITH_LIBUDEV_LDFLAGS) +smart_la_LIBADD = libignorelist.la $(BUILD_WITH_LIBATASMART_LIBS) $(BUILD_WITH_LIBUDEV_LIBS) +endif +endif + +if BUILD_PLUGIN_SNMP +pkglib_LTLIBRARIES += snmp.la +snmp_la_SOURCES = src/snmp.c +snmp_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBNETSNMP_CPPFLAGS) +snmp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBNETSNMP_LDFLAGS) +snmp_la_LIBADD = $(BUILD_WITH_LIBNETSNMP_LIBS) +endif + +if BUILD_PLUGIN_SNMP_AGENT +pkglib_LTLIBRARIES += snmp_agent.la +snmp_agent_la_SOURCES = src/snmp_agent.c +snmp_agent_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBNETSNMPAGENT_CPPFLAGS) +snmp_agent_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBNETSNMPAGENT_LDFLAGS) +snmp_agent_la_LIBADD = $(BUILD_WITH_LIBNETSNMPAGENT_LIBS) +endif + +if BUILD_PLUGIN_STATSD +pkglib_LTLIBRARIES += statsd.la +statsd_la_SOURCES = src/statsd.c +statsd_la_LDFLAGS = $(PLUGIN_LDFLAGS) +statsd_la_LIBADD = liblatency.la +endif + +if BUILD_PLUGIN_SWAP +pkglib_LTLIBRARIES += swap.la +swap_la_SOURCES = src/swap.c +swap_la_CFLAGS = $(AM_CFLAGS) +swap_la_LDFLAGS = $(PLUGIN_LDFLAGS) +swap_la_LIBADD = +if BUILD_WITH_LIBKSTAT +swap_la_LIBADD += -lkstat +endif +if BUILD_WITH_LIBDEVINFO +swap_la_LIBADD += -ldevinfo +endif +if BUILD_WITH_LIBKVM_GETSWAPINFO +swap_la_LIBADD += -lkvm +endif +if BUILD_WITH_LIBSTATGRAB +swap_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +swap_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif +if BUILD_WITH_PERFSTAT +swap_la_LIBADD += -lperfstat +endif + +endif + +if BUILD_PLUGIN_SYSLOG +pkglib_LTLIBRARIES += syslog.la +syslog_la_SOURCES = src/syslog.c +syslog_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TABLE +pkglib_LTLIBRARIES += table.la +table_la_SOURCES = src/table.c +table_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TAIL +pkglib_LTLIBRARIES += tail.la +tail_la_SOURCES = \ + src/tail.c \ + src/utils_match.c \ + src/utils_match.h \ + src/utils_tail.c \ + src/utils_tail.h \ + src/utils_tail_match.c \ + src/utils_tail_match.h +tail_la_LDFLAGS = $(PLUGIN_LDFLAGS) +tail_la_LIBADD = liblatency.la +endif + +if BUILD_PLUGIN_TAIL_CSV +pkglib_LTLIBRARIES += tail_csv.la +tail_csv_la_SOURCES = \ + src/tail_csv.c \ + src/utils_tail.c \ + src/utils_tail.h +tail_csv_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TAPE +pkglib_LTLIBRARIES += tape.la +tape_la_SOURCES = src/tape.c +tape_la_LDFLAGS = $(PLUGIN_LDFLAGS) +tape_la_LIBADD = -lkstat -ldevinfo +endif + +if BUILD_PLUGIN_TARGET_NOTIFICATION +pkglib_LTLIBRARIES += target_notification.la +target_notification_la_SOURCES = src/target_notification.c +target_notification_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TARGET_REPLACE +pkglib_LTLIBRARIES += target_replace.la +target_replace_la_SOURCES = src/target_replace.c +target_replace_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TARGET_SCALE +pkglib_LTLIBRARIES += target_scale.la +target_scale_la_SOURCES = src/target_scale.c +target_scale_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TARGET_SET +pkglib_LTLIBRARIES += target_set.la +target_set_la_SOURCES = src/target_set.c +target_set_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TARGET_V5UPGRADE +pkglib_LTLIBRARIES += target_v5upgrade.la +target_v5upgrade_la_SOURCES = src/target_v5upgrade.c +target_v5upgrade_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TCPCONNS +pkglib_LTLIBRARIES += tcpconns.la +tcpconns_la_SOURCES = src/tcpconns.c +tcpconns_la_LDFLAGS = $(PLUGIN_LDFLAGS) +tcpconns_la_LIBADD = +if BUILD_WITH_LIBKVM_NLIST +tcpconns_la_LIBADD += -lkvm +endif +endif + +if BUILD_PLUGIN_TEAMSPEAK2 +pkglib_LTLIBRARIES += teamspeak2.la +teamspeak2_la_SOURCES = src/teamspeak2.c +teamspeak2_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TED +pkglib_LTLIBRARIES += ted.la +ted_la_SOURCES = src/ted.c +ted_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_THERMAL +pkglib_LTLIBRARIES += thermal.la +thermal_la_SOURCES = src/thermal.c +thermal_la_LDFLAGS = $(PLUGIN_LDFLAGS) +thermal_la_LIBADD = libignorelist.la +endif + +if BUILD_PLUGIN_THRESHOLD +pkglib_LTLIBRARIES += threshold.la +threshold_la_SOURCES = src/threshold.c +threshold_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_TOKYOTYRANT +pkglib_LTLIBRARIES += tokyotyrant.la +tokyotyrant_la_SOURCES = src/tokyotyrant.c +tokyotyrant_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBTOKYOTYRANT_CPPFLAGS) +tokyotyrant_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBTOKYOTYRANT_LDFLAGS) +tokyotyrant_la_LIBADD = $(BUILD_WITH_LIBTOKYOTYRANT_LIBS) +if BUILD_WITH_LIBSOCKET +tokyotyrant_la_LIBADD += -lsocket +endif +endif + +if BUILD_PLUGIN_TURBOSTAT +pkglib_LTLIBRARIES += turbostat.la +turbostat_la_SOURCES = src/turbostat.c +turbostat_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_UNIXSOCK +pkglib_LTLIBRARIES += unixsock.la +unixsock_la_SOURCES = src/unixsock.c +unixsock_la_LDFLAGS = $(PLUGIN_LDFLAGS) +unixsock_la_LIBADD = libcmds.la +endif + +if BUILD_PLUGIN_UPTIME +pkglib_LTLIBRARIES += uptime.la +uptime_la_SOURCES = src/uptime.c +uptime_la_CFLAGS = $(AM_CFLAGS) +uptime_la_LDFLAGS = $(PLUGIN_LDFLAGS) +uptime_la_LIBADD = +if BUILD_WITH_LIBKSTAT +uptime_la_LIBADD += -lkstat +endif +if BUILD_WITH_PERFSTAT +uptime_la_LIBADD += -lperfstat +endif +endif + +if BUILD_PLUGIN_USERS +pkglib_LTLIBRARIES += users.la +users_la_SOURCES = src/users.c +users_la_CFLAGS = $(AM_CFLAGS) +users_la_LDFLAGS = $(PLUGIN_LDFLAGS) +users_la_LIBADD = +if BUILD_WITH_LIBSTATGRAB +users_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) +users_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) +endif +endif + +if BUILD_PLUGIN_UUID +pkglib_LTLIBRARIES += uuid.la +uuid_la_SOURCES = src/uuid.c +uuid_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_VARNISH +pkglib_LTLIBRARIES += varnish.la +varnish_la_SOURCES = src/varnish.c +varnish_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBVARNISH_CFLAGS) +varnish_la_LDFLAGS = $(PLUGIN_LDFLAGS) +varnish_la_LIBADD = $(BUILD_WITH_LIBVARNISH_LIBS) +endif + +if BUILD_PLUGIN_VIRT +pkglib_LTLIBRARIES += virt.la +virt_la_SOURCES = src/virt.c +virt_la_CFLAGS = $(AM_CFLAGS) \ + $(BUILD_WITH_LIBVIRT_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) +virt_la_LDFLAGS = $(PLUGIN_LDFLAGS) +virt_la_LIBADD = libignorelist.la $(BUILD_WITH_LIBVIRT_LIBS) $(BUILD_WITH_LIBXML2_LIBS) + +# TODO: enable once we support only modern libvirts which depends on libnl-3 +# the libvirt on wheezy is linked in libnl v1, and there is a small leak here, +# triggered by the library initialization. There are no means to avoid it, +# and libvirt switched to libnl3 anyway +#test_plugin_virt_SOURCES = src/virt_test.c +#test_plugin_virt_CPPFLAGS = $(AM_CPPFLAGS) \ +# $(BUILD_WITH_LIBVIRT_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) +#test_plugin_virt_LDFLAGS = $(PLUGIN_LDFLAGS) +#test_plugin_virt_LDADD = libplugin_mock.la \ +# $(BUILD_WITH_LIBVIRT_LIBS) $(BUILD_WITH_LIBXML2_LIBS) +#check_PROGRAMS += test_plugin_virt +#TESTS += test_plugin_virt +endif + +if BUILD_PLUGIN_VMEM +pkglib_LTLIBRARIES += vmem.la +vmem_la_SOURCES = src/vmem.c +vmem_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_VSERVER +pkglib_LTLIBRARIES += vserver.la +vserver_la_SOURCES = src/vserver.c +vserver_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_WIRELESS +pkglib_LTLIBRARIES += wireless.la +wireless_la_SOURCES = src/wireless.c +wireless_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_WRITE_GRAPHITE +pkglib_LTLIBRARIES += write_graphite.la +write_graphite_la_SOURCES = src/write_graphite.c +write_graphite_la_LDFLAGS = $(PLUGIN_LDFLAGS) +write_graphite_la_LIBADD = libformat_graphite.la +endif + +if BUILD_PLUGIN_WRITE_HTTP +pkglib_LTLIBRARIES += write_http.la +write_http_la_SOURCES = \ + src/write_http.c \ + src/utils_format_kairosdb.c \ + src/utils_format_kairosdb.h +write_http_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) +write_http_la_LDFLAGS = $(PLUGIN_LDFLAGS) +write_http_la_LIBADD = libformat_json.la $(BUILD_WITH_LIBCURL_LIBS) +endif + +if BUILD_PLUGIN_WRITE_KAFKA +pkglib_LTLIBRARIES += write_kafka.la +write_kafka_la_SOURCES = src/write_kafka.c +write_kafka_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBRDKAFKA_CPPFLAGS) +write_kafka_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRDKAFKA_LDFLAGS) +write_kafka_la_LIBADD = \ + libcmds.la \ + libformat_graphite.la \ + libformat_json.la \ + $(BUILD_WITH_LIBRDKAFKA_LIBS) +endif + +if BUILD_PLUGIN_WRITE_LOG +pkglib_LTLIBRARIES += write_log.la +write_log_la_SOURCES = src/write_log.c +write_log_la_LDFLAGS = $(PLUGIN_LDFLAGS) +write_log_la_LIBADD = libformat_graphite.la libformat_json.la +endif + +if BUILD_PLUGIN_WRITE_MONGODB +pkglib_LTLIBRARIES += write_mongodb.la +write_mongodb_la_SOURCES = src/write_mongodb.c +write_mongodb_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMONGOC_CFLAGS) +write_mongodb_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMONGOC_LDFLAGS) +endif + +if BUILD_PLUGIN_WRITE_PROMETHEUS +pkglib_LTLIBRARIES += write_prometheus.la +write_prometheus_la_SOURCES = src/write_prometheus.c +nodist_write_prometheus_la_SOURCES = \ + prometheus.pb-c.c \ + prometheus.pb-c.h +write_prometheus_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS) $(BUILD_WITH_LIBMICROHTTPD_CPPFLAGS) +write_prometheus_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_LDFLAGS) $(BUILD_WITH_LIBMICROHTTPD_LDFLAGS) +write_prometheus_la_LIBADD = $(BUILD_WITH_LIBPROTOBUF_C_LIBS) $(BUILD_WITH_LIBMICROHTTPD_LIBS) +endif + +if BUILD_PLUGIN_WRITE_REDIS +pkglib_LTLIBRARIES += write_redis.la +write_redis_la_SOURCES = src/write_redis.c +write_redis_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBHIREDIS_CPPFLAGS) +write_redis_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBHIREDIS_LDFLAGS) +write_redis_la_LIBADD = -lhiredis +endif + +if BUILD_PLUGIN_WRITE_RIEMANN +pkglib_LTLIBRARIES += write_riemann.la +write_riemann_la_SOURCES = \ + src/write_riemann.c \ + src/write_riemann_threshold.c \ + src/write_riemann_threshold.h +write_riemann_la_CFLAGS = $(AM_CFLAGS) $(LIBRIEMANN_CLIENT_CFLAGS) +write_riemann_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBRIEMANN_CLIENT_LIBS) +endif + +if BUILD_PLUGIN_WRITE_SENSU +pkglib_LTLIBRARIES += write_sensu.la +write_sensu_la_SOURCES = src/write_sensu.c +write_sensu_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_WRITE_TSDB +pkglib_LTLIBRARIES += write_tsdb.la +write_tsdb_la_SOURCES = src/write_tsdb.c +write_tsdb_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_XENCPU +pkglib_LTLIBRARIES += xencpu.la +xencpu_la_SOURCES = src/xencpu.c +xencpu_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBXENCTL_CPPFLAGS) +xencpu_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBXENCTL_LDFLAGS) +xencpu_la_LIBADD = -lxenctrl +endif + +if BUILD_PLUGIN_XMMS +pkglib_LTLIBRARIES += xmms.la +xmms_la_SOURCES = src/xmms.c +xmms_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBXMMS_CFLAGS) +xmms_la_LDFLAGS = $(PLUGIN_LDFLAGS) +xmms_la_LIBADD = $(BUILD_WITH_LIBXMMS_LIBS) +endif + +if BUILD_PLUGIN_ZFS_ARC +pkglib_LTLIBRARIES += zfs_arc.la +zfs_arc_la_SOURCES = src/zfs_arc.c +zfs_arc_la_LDFLAGS = $(PLUGIN_LDFLAGS) +if BUILD_FREEBSD +zfs_arc_la_LIBADD = -lm +endif +if BUILD_SOLARIS +zfs_arc_la_LIBADD = -lkstat +endif +endif + +if BUILD_PLUGIN_ZOOKEEPER +pkglib_LTLIBRARIES += zookeeper.la +zookeeper_la_SOURCES = src/zookeeper.c +zookeeper_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +if BUILD_PLUGIN_ZONE +pkglib_LTLIBRARIES += zone.la +zone_la_SOURCES = src/zone.c +zone_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + +AM_V_POD2MAN_C = $(am__v_POD2MAN_C_@AM_V@) +am__v_POD2MAN_C_ = $(am__v_POD2MAN_C_@AM_DEFAULT_V@) +am__v_POD2MAN_C_0 = @echo " POD2MAN " $@; +am__v_POD2MAN_C_1 = + +.pod.1: + $(AM_V_POD2MAN_C)pod2man --release=$(VERSION) --center=$(PACKAGE) $< \ + >.pod2man.tmp.$$$$ 2>/dev/null && mv -f .pod2man.tmp.$$$$ $@ || true + @if grep '\' $@ >/dev/null 2>&1; \ + then \ + echo "$@ has some POD errors!"; false; \ + fi + +.pod.5: + $(AM_V_POD2MAN_C)pod2man --section=5 --release=$(VERSION) --center=$(PACKAGE) $< \ + >.pod2man.tmp.$$$$ 2>/dev/null && mv -f .pod2man.tmp.$$$$ $@ || true + @if grep '\' $@ >/dev/null 2>&1; \ + then \ + echo "$@ has some POD errors!"; false; \ + fi + +V_PROTOC = $(v_protoc_@AM_V@) +v_protoc_ = $(v_protoc_@AM_DEFAULT_V@) +v_protoc_0 = @echo " PROTOC " $@; + +AM_V_PROTOC_C = $(am__v_PROTOC_C_@AM_V@) +am__v_PROTOC_C_ = $(am__v_PROTOC_C_@AM_DEFAULT_V@) +am__v_PROTOC_C_0 = @echo " PROTOC-C" $@; +am__v_PROTOC_C_1 = + +# Protocol buffer for the "pinba" plugin. +if BUILD_PLUGIN_PINBA +BUILT_SOURCES += src/pinba.pb-c.c src/pinba.pb-c.h + +src/pinba.pb-c.c src/pinba.pb-c.h: $(srcdir)/src/pinba.proto + $(AM_V_PROTOC_C)$(PROTOC_C) -I$(srcdir) --c_out . $(srcdir)/src/pinba.proto +endif + +# Protocol buffer for the "write_prometheus" plugin. +if BUILD_PLUGIN_WRITE_PROMETHEUS +BUILT_SOURCES += prometheus.pb-c.c prometheus.pb-c.h + +prometheus.pb-c.c prometheus.pb-c.h: $(srcdir)/proto/prometheus.proto + $(AM_V_PROTOC_C)$(PROTOC_C) -I$(srcdir)/proto --c_out=$(builddir) $(srcdir)/proto/prometheus.proto +endif + +if HAVE_PROTOC3 +if HAVE_GRPC_CPP +BUILT_SOURCES += collectd.grpc.pb.cc collectd.pb.cc types.pb.cc + +collectd.grpc.pb.cc: $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto + $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto \ + --grpc_out=$(builddir) --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN) $< + +collectd.pb.cc: $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto + $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto --cpp_out=$(builddir) $< + +types.pb.cc: $(srcdir)/proto/types.proto + $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto --cpp_out=$(builddir) $< +endif +endif install-exec-hook: $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run $(mkinstalldirs) $(DESTDIR)$(localstatedir)/lib/$(PACKAGE_NAME) $(mkinstalldirs) $(DESTDIR)$(localstatedir)/log + $(mkinstalldirs) $(DESTDIR)$(sysconfdir) + if test -e $(DESTDIR)$(sysconfdir)/collectd.conf; \ + then \ + $(INSTALL) -m 0640 $(srcdir)/src/collectd.conf $(DESTDIR)$(sysconfdir)/collectd.conf.pkg-orig; \ + else \ + $(INSTALL) -m 0640 $(srcdir)/src/collectd.conf $(DESTDIR)$(sysconfdir)/collectd.conf; \ + fi; \ + $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) + $(INSTALL) -m 0644 $(srcdir)/src/types.db $(DESTDIR)$(pkgdatadir)/types.db; + $(INSTALL) -m 0644 $(srcdir)/src/postgresql_default.conf \ + $(DESTDIR)$(pkgdatadir)/postgresql_default.conf; + +uninstall-hook: + rm -f $(DESTDIR)$(pkgdatadir)/types.db; + rm -f $(DESTDIR)$(sysconfdir)/collectd.conf + rm -f $(DESTDIR)$(pkgdatadir)/postgresql_default.conf; -maintainer-clean-local: - -rm -f -r libltdl - -rm -f INSTALL - -rm -f aclocal.m4 +all-local: @PERL_BINDINGS@ + +install-exec-local: + [ ! -f buildperl/Makefile ] || ( cd buildperl && $(MAKE) install ) + +# Perl 'make uninstall' does not work as well as wanted. +# So we do the work here. +uninstall-local: + @PERL@ -I$(DESTDIR)$(prefix) $(srcdir)/bindings/perl/uninstall_mod.pl Collectd + find $(DESTDIR)$(prefix) -name "perllocal.pod" -exec rm {} \; + +clean-local: + rm -rf buildperl + +perl: buildperl/Makefile + cd buildperl && $(MAKE) + +buildperl/Makefile: .perl-directory-stamp buildperl/Makefile.PL \ + $(top_builddir)/config.status + @# beautify the output a bit + @echo 'cd buildperl && @PERL@ Makefile.PL @PERL_BINDINGS_OPTIONS@' + @cd buildperl && ( if ! @PERL@ Makefile.PL @PERL_BINDINGS_OPTIONS@; then \ + echo ""; \ + echo 'Check whether you have set $$PERL_MM_OPT in your environment and try using ./configure --with-perl-bindings=""'; \ + echo ""; \ + fi ) + +buildperl/Makefile.PL: .perl-directory-stamp $(top_builddir)/config.status + +.perl-directory-stamp: + if test ! -d buildperl; then \ + mkdir -p buildperl/Collectd/Plugins; \ + cp $(srcdir)/bindings/perl/lib/Collectd.pm buildperl/; \ + cp $(srcdir)/bindings/perl/Makefile.PL buildperl/; \ + cp $(srcdir)/bindings/perl/lib/Collectd/Unixsock.pm buildperl/Collectd/; \ + cp $(srcdir)/bindings/perl/lib/Collectd/Plugins/OpenVZ.pm buildperl/Collectd/Plugins/; \ + fi + touch $@ + +.PHONY: perl + + +if BUILD_WITH_JAVA +dist_noinst_JAVA = \ + bindings/java/org/collectd/api/Collectd.java \ + bindings/java/org/collectd/api/CollectdConfigInterface.java \ + bindings/java/org/collectd/api/CollectdFlushInterface.java \ + bindings/java/org/collectd/api/CollectdInitInterface.java \ + bindings/java/org/collectd/api/CollectdLogInterface.java \ + bindings/java/org/collectd/api/CollectdMatchFactoryInterface.java \ + bindings/java/org/collectd/api/CollectdMatchInterface.java \ + bindings/java/org/collectd/api/CollectdNotificationInterface.java \ + bindings/java/org/collectd/api/CollectdReadInterface.java \ + bindings/java/org/collectd/api/CollectdShutdownInterface.java \ + bindings/java/org/collectd/api/CollectdTargetFactoryInterface.java \ + bindings/java/org/collectd/api/CollectdTargetInterface.java \ + bindings/java/org/collectd/api/CollectdWriteInterface.java \ + bindings/java/org/collectd/api/DataSet.java \ + bindings/java/org/collectd/api/DataSource.java \ + bindings/java/org/collectd/api/Notification.java \ + bindings/java/org/collectd/api/OConfigItem.java \ + bindings/java/org/collectd/api/OConfigValue.java \ + bindings/java/org/collectd/api/PluginData.java \ + bindings/java/org/collectd/api/ValueList.java \ + bindings/java/org/collectd/java/GenericJMX.java \ + bindings/java/org/collectd/java/GenericJMXConfConnection.java \ + bindings/java/org/collectd/java/GenericJMXConfMBean.java \ + bindings/java/org/collectd/java/GenericJMXConfValue.java \ + bindings/java/org/collectd/java/JMXMemory.java + +collectd-api.jar: $(JAVA_TIMESTAMP_FILE) + $(JAR) cf $(JARFLAGS) $@ org/collectd/api/*.class + +generic-jmx.jar: $(JAVA_TIMESTAMP_FILE) + $(JAR) cf $(JARFLAGS) $@ org/collectd/java/*.class + +jar_DATA = collectd-api.jar generic-jmx.jar +endif diff --git a/README b/README index 803fbaaf..b0b59214 100644 --- a/README +++ b/README @@ -198,14 +198,19 @@ Features Queries very detailed usage statistics from wireless LAN adapters and interfaces that use the Atheros chipset and the MadWifi driver. - - md - Linux software-RAID device information (number of active, failed, spare - and missing disks). - - mbmon Motherboard sensors: temperature, fan speed and voltage information, using mbmon(1). + - mcelog + Monitor machine check exceptions (hardware errors detected by hardware + and reported to software) reported by mcelog and generate appropriate + notifications when machine check exceptions are detected. + + - md + Linux software-RAID device information (number of active, failed, spare + and missing disks). + - memcachec Query and parse data from a memcache daemon (memcached). @@ -283,6 +288,22 @@ Features - oracle Query data from an Oracle database. + - ovs_events + The plugin monitors the link status of Open vSwitch (OVS) connected + interfaces, dispatches the values to collectd and sends the notification + whenever the link state change occurs in the OVS database. It requires + YAJL library to be installed. + Detailed instructions for installing and setting up Open vSwitch, see + OVS documentation. + + + - ovs_stats + The plugin collects the statistics of OVS connected bridges and + interfaces. It requires YAJL library to be installed. + Detailed instructions for installing and setting up Open vSwitch, see + OVS documentation. + + - perl The perl plugin implements a Perl-interpreter into collectd. You can write your own plugins in Perl and return arbitrary values using this @@ -476,6 +497,13 @@ Features updates to the files and write a bunch of updates at once, which lessens system load a lot. + - snmp_agent + Receives and handles queries from SNMP master agent and returns the data + collected by read plugins. Handles requests only for OIDs specified in + configuration file. To handle SNMP queries the plugin gets data from + collectd and translates requested values from collectd's internal format + to SNMP format. + - unixsock One can query the values from the unixsock plugin whenever they're needed. Please read collectd-unixsock(5) for a description on how that's @@ -750,10 +778,6 @@ Prerequisites Used by the `gps' plugin. - * libhal (optional) - If present, the `uuid' plugin will check for UUID from HAL. - - * libi2c-dev (optional) Used for the plugin `barometer', provides just the i2c-dev.h header file for user space i2c development. @@ -807,7 +831,11 @@ Prerequisites This library is part of the “Manage ONTAP SDK” published by NetApp. * libnetsnmp (optional) - For the `snmp' plugin. + For the `snmp' and 'snmp_agent' plugins. + + + * libnetsnmpagent (optional) + Required for the 'snmp_agent' plugin. * libnotify (optional) @@ -925,8 +953,8 @@ Prerequisites * libyajl (optional) - Parse JSON data. This is needed for the `ceph', `curl_json' and - `log_logstash' plugins. + Parse JSON data. This is needed for the `ceph', `curl_json', 'ovs_events', + 'ovs_stats' and `log_logstash' plugins. * libvarnish (optional) @@ -981,7 +1009,6 @@ To generate the `configure` script, you'll need the following dependencies: - flex - bison - libtool -- libtool-ltdl - pkg-config The `build.sh' script takes no arguments. diff --git a/bindings/Makefile.am b/bindings/Makefile.am deleted file mode 100644 index 07373e87..00000000 --- a/bindings/Makefile.am +++ /dev/null @@ -1,69 +0,0 @@ -SUBDIRS = - -if BUILD_WITH_JAVA -SUBDIRS += java -endif - -EXTRA_DIST = perl/Makefile.PL \ - perl/uninstall_mod.pl \ - perl/lib/Collectd.pm \ - perl/lib/Collectd/Unixsock.pm \ - perl/lib/Collectd/Plugins/Monitorus.pm \ - perl/lib/Collectd/Plugins/OpenVZ.pm - -CLEANFILES = \ - buildperl/Collectd.pm \ - buildperl/Collectd/Plugins/OpenVZ.pm \ - buildperl/Collectd/Unixsock.pm \ - buildperl/Makefile.PL \ - .perl-directory-stamp - -DISTCLEANFILES = \ - buildperl/Collectd.pm \ - buildperl/Collectd/Plugins/OpenVZ.pm \ - buildperl/Collectd/Unixsock.pm \ - buildperl/Makefile.PL \ - .perl-directory-stamp - -all-local: @PERL_BINDINGS@ - - -install-exec-local: - [ ! -f buildperl/Makefile ] || ( cd buildperl && $(MAKE) install ) - -# Perl 'make uninstall' does not work as well as wanted. -# So we do the work here. -uninstall-local: - @PERL@ -I$(DESTDIR)$(prefix) $(srcdir)/perl/uninstall_mod.pl Collectd - find $(DESTDIR)$(prefix) -name "perllocal.pod" -exec rm {} \; - -clean-local: - rm -rf buildperl - -perl: buildperl/Makefile - cd buildperl && $(MAKE) - -buildperl/Makefile: .perl-directory-stamp buildperl/Makefile.PL \ - $(top_builddir)/config.status - @# beautify the output a bit - @echo 'cd buildperl && @PERL@ Makefile.PL @PERL_BINDINGS_OPTIONS@' - @cd buildperl && ( if ! @PERL@ Makefile.PL @PERL_BINDINGS_OPTIONS@; then \ - echo ""; \ - echo 'Check whether you have set $$PERL_MM_OPT in your environment and try using ./configure --with-perl-bindings=""'; \ - echo ""; \ - fi ) - -buildperl/Makefile.PL: .perl-directory-stamp $(top_builddir)/config.status - -.perl-directory-stamp: - if test ! -d buildperl; then \ - mkdir -p buildperl/Collectd/Plugins; \ - cp $(srcdir)/perl/lib/Collectd.pm buildperl/; \ - cp $(srcdir)/perl/Makefile.PL buildperl/; \ - cp $(srcdir)/perl/lib/Collectd/Unixsock.pm buildperl/Collectd/; \ - cp $(srcdir)/perl/lib/Collectd/Plugins/OpenVZ.pm buildperl/Collectd/Plugins/; \ - fi - touch $@ - -.PHONY: perl - diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am deleted file mode 100644 index 8d2e49d7..00000000 --- a/bindings/java/Makefile.am +++ /dev/null @@ -1,53 +0,0 @@ -EXTRA_DIST = org/collectd/api/CollectdConfigInterface.java \ - org/collectd/api/CollectdFlushInterface.java \ - org/collectd/api/CollectdInitInterface.java \ - org/collectd/api/Collectd.java \ - org/collectd/api/CollectdLogInterface.java \ - org/collectd/api/CollectdMatchFactoryInterface.java \ - org/collectd/api/CollectdMatchInterface.java \ - org/collectd/api/CollectdNotificationInterface.java \ - org/collectd/api/CollectdReadInterface.java \ - org/collectd/api/CollectdShutdownInterface.java \ - org/collectd/api/CollectdTargetFactoryInterface.java \ - org/collectd/api/CollectdTargetInterface.java \ - org/collectd/api/CollectdWriteInterface.java \ - org/collectd/api/DataSet.java \ - org/collectd/api/DataSource.java \ - org/collectd/api/Notification.java \ - org/collectd/api/OConfigItem.java \ - org/collectd/api/OConfigValue.java \ - org/collectd/api/PluginData.java \ - org/collectd/api/ValueList.java \ - org/collectd/java/GenericJMXConfConnection.java \ - org/collectd/java/GenericJMXConfMBean.java \ - org/collectd/java/GenericJMXConfValue.java \ - org/collectd/java/GenericJMX.java \ - org/collectd/java/JMXMemory.java - -java-build-stamp: $(srcdir)/org/collectd/api/*.java $(srcdir)/org/collectd/java/*.java - $(JAVAC) -d "." "$(srcdir)/org/collectd/api"/*.java - $(JAVAC) -d "." "$(srcdir)/org/collectd/java"/*.java - mkdir -p .libs - $(JAR) cf .libs/collectd-api.jar "org/collectd/api"/*.class - $(JAR) cf .libs/generic-jmx.jar "org/collectd/java"/*.class - touch "$@" - -all-local: java-build-stamp - -install-exec-local: java-build-stamp - mkdir -p "$(DESTDIR)$(pkgdatadir)/java" - $(INSTALL) -m 644 .libs/collectd-api.jar \ - "$(DESTDIR)$(pkgdatadir)/java" - $(INSTALL) -m 644 .libs/generic-jmx.jar \ - "$(DESTDIR)$(pkgdatadir)/java" - -uninstall-local: - rm -f "$(DESTDIR)$(pkgdatadir)/java/collectd-api.jar" - rm -f "$(DESTDIR)$(pkgdatadir)/java/generic-jmx.jar" - rmdir "$(DESTDIR)$(pkgdatadir)/java" || true - -clean-local: - rm -f "org/collectd/api"/*.class - rm -f "org/collectd/java"/*.class - rm -f .libs - rm -f "java-build-stamp" diff --git a/bindings/java/org/collectd/java/GenericJMXConfValue.java b/bindings/java/org/collectd/java/GenericJMXConfValue.java index 63b76282..6d3d688e 100644 --- a/bindings/java/org/collectd/java/GenericJMXConfValue.java +++ b/bindings/java/org/collectd/java/GenericJMXConfValue.java @@ -30,6 +30,8 @@ import java.util.Arrays; import java.util.List; import java.util.Collection; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.Iterator; import java.util.ArrayList; @@ -128,6 +130,14 @@ class GenericJMXConfValue { return (BigInteger.ZERO.add ((BigInteger) obj)); } + else if (obj instanceof AtomicInteger) + { + return (new Integer(((AtomicInteger) obj).get())); + } + else if (obj instanceof AtomicLong) + { + return (new Long(((AtomicLong) obj).get())); + } return (null); } /* }}} Number genericObjectToNumber */ diff --git a/build.sh b/build.sh index 57f3d444..40f5361d 100755 --- a/build.sh +++ b/build.sh @@ -18,12 +18,7 @@ EOF done } -check_for_application lex bison autoheader aclocal automake autoconf - -# Actually we don't need the pkg-config executable, but we need the M4 macros. -# We check for `pkg-config' here and hope that M4 macros will then be -# available, too. -check_for_application pkg-config +check_for_application lex bison autoheader aclocal automake autoconf pkg-config libtoolize="" libtoolize --version >/dev/null 2>/dev/null @@ -54,6 +49,6 @@ set -x autoheader \ && aclocal \ -&& $libtoolize --ltdl --copy --force \ +&& $libtoolize --copy --force \ && automake --add-missing --copy \ && autoconf diff --git a/clean.sh b/clean.sh index 6780cdab..ac3c3105 100755 --- a/clean.sh +++ b/clean.sh @@ -15,7 +15,6 @@ true \ && rm -f configure \ && rm -f depcomp \ && rm -f install-sh \ -&& rm -f -r libltdl \ && rm -f libtool \ && rm -f ltmain.sh \ && rm -f Makefile \ diff --git a/configure.ac b/configure.ac index feed0853..3357375e 100644 --- a/configure.ac +++ b/configure.ac @@ -3,34 +3,15 @@ AC_PREREQ([2.60]) AC_INIT([collectd],[m4_esyscmd(./version-gen.sh)]) AC_CONFIG_SRCDIR(src/target_set.c) AC_CONFIG_HEADERS(src/config.h) -AC_CONFIG_AUX_DIR([libltdl/config]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) dnl older automake's default of ARFLAGS=cru is noisy on newer binutils; dnl we don't really need the 'u' even in older toolchains. Then there is dnl older libtool, which spelled it AR_FLAGS m4_divert_text([DEFAULTS], [: "${ARFLAGS=cr} ${AR_FLAGS=cr}"]) -m4_ifdef([LT_PACKAGE_VERSION], - # libtool >= 2.2 - [ - LT_CONFIG_LTDL_DIR([libltdl]) - LT_INIT([dlopen]) - LTDL_INIT([convenience]) - AC_DEFINE(LIBTOOL_VERSION, 2, [Define to used libtool version.]) - ] -, - # libtool <= 1.5 - [ - AC_LIBLTDL_CONVENIENCE - AC_SUBST(LTDLINCL) - AC_SUBST(LIBLTDL) - AC_LIBTOOL_DLOPEN - AC_CONFIG_SUBDIRS(libltdl) - AC_DEFINE(LIBTOOL_VERSION, 1, [Define to used libtool version.]) - ] -) - -AM_CONDITIONAL([BUILD_INCLUDED_LTDL], [test "x$LTDLDEPS" != "x"]) +LT_INIT([dlopen disable-static]) AM_INIT_AUTOMAKE([subdir-objects tar-pax dist-bzip2 no-dist-gzip foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -46,6 +27,9 @@ AC_SYS_LARGEFILE AC_PROG_CC_C99([], [AC_MSG_ERROR([No compiler found that supports C99])] ) + +AX_COMPILER_VENDOR + AC_PROG_CXX AC_PROG_CPP AC_PROG_EGREP @@ -53,10 +37,7 @@ AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AM_PROG_CC_C_O -AM_CONDITIONAL(COMPILER_IS_GCC, test "x$GCC" = "xyes") -AC_DISABLE_STATIC -AC_PROG_LIBTOOL AC_PROG_LEX AC_PROG_YACC @@ -67,78 +48,60 @@ m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-conf PKG_PROG_PKG_CONFIG -AC_CACHE_CHECK([if bison is the parser generator], - [collectd_cv_prog_bison], - [AS_IF([$YACC --version 2>/dev/null | $EGREP -q '^bison '], - [collectd_cv_prog_bison=yes], [collectd_cv_prog_bison=no] - )] +AC_CACHE_CHECK([if Bison is the parser generator], + [collectd_cv_prog_bison], + [ + AS_IF([$YACC --version 2>/dev/null | $EGREP -q '^bison '], + [collectd_cv_prog_bison=yes], + [collectd_cv_prog_bison=no] + ) + ] ) -if test "x$collectd_cv_prog_bison" = "xno" && test ! -f "${srcdir}/src/liboconfig/parser.c" -then - AC_MSG_ERROR([bison is missing and you do not have ${srcdir}/src/liboconfig/parser.c. Please install bison]) +if test "x$collectd_cv_prog_bison" = "xno" && test ! -f "${srcdir}/src/liboconfig/parser.c"; then + AC_MSG_ERROR([bison is missing and you do not have ${srcdir}/src/liboconfig/parser.c. Please install bison]) fi -AC_ARG_VAR([PROTOC], [path to the protoc binary]) -AC_PATH_PROG([PROTOC], [protoc]) -have_protoc3="no" -if test "x$PROTOC" != "x"; then - AC_MSG_CHECKING([for protoc 3.0.0+]) - if $PROTOC --version | $EGREP libprotoc.3 >/dev/null; then - protoc3="yes (`$PROTOC --version`)" - have_protoc3="yes" - else - protoc3="no (`$PROTOC --version`)" - fi - AC_MSG_RESULT([$protoc3]) +if test "x$lt_cv_dlopen" = "xno"; then + AC_MSG_ERROR([Your system does not support dlopen]) fi -AM_CONDITIONAL(HAVE_PROTOC3, test "x$have_protoc3" = "xyes") -AC_ARG_VAR([GRPC_CPP_PLUGIN], [path to the grpc_cpp_plugin binary]) -AC_PATH_PROG([GRPC_CPP_PLUGIN], [grpc_cpp_plugin]) -AM_CONDITIONAL(HAVE_GRPC_CPP, test "x$GRPC_CPP_PLUGIN" != "x") +AC_SUBST([DLOPEN_LIBS], [$lt_cv_dlopen_libs]) -AC_ARG_VAR([PROTOC_C], [path to the protoc-c binary]) -AC_PATH_PROG([PROTOC_C], [protoc-c]) -if test "x$PROTOC_C" = "x" -then - have_protoc_c="no (protoc-c compiler not found)" -else - have_protoc_c="yes" -fi AC_MSG_CHECKING([for kernel type ($host_os)]) case $host_os in - *linux*) - AC_DEFINE([KERNEL_LINUX], 1, [True if program is to be compiled for a Linux kernel]) - ac_system="Linux" - ;; - *solaris*) - AC_DEFINE([KERNEL_SOLARIS], 1, [True if program is to be compiled for a Solaris kernel]) - ac_system="Solaris" - ;; - *darwin*) - AC_DEFINE([KERNEL_DARWIN], 1, [True if program is to be compiled for a Darwin kernel]) - ac_system="Darwin" - ;; - *openbsd*) - AC_DEFINE([KERNEL_OPENBSD], 1, [True if program is to be compiled for an OpenBSD kernel]) - ac_system="OpenBSD" - ;; - *netbsd*) - AC_DEFINE([KERNEL_NETBSD], 1, [True if program is to be compiled for a NetBSD kernel]) - ac_system="NetBSD" - ;; - *aix*) - AC_DEFINE([KERNEL_AIX], 1, [True if program is to be compiled for a AIX kernel]) - ac_system="AIX" - ;; - *freebsd*) - AC_DEFINE([KERNEL_FREEBSD], 1, [True if program is to be compiled for a FreeBSD kernel]) - ac_system="FreeBSD" - ;; - *) - ac_system="unknown" + *aix*) + AC_DEFINE([KERNEL_AIX], [1], [True if program is to be compiled for a AIX kernel]) + ac_system="AIX" + ;; + *darwin*) + AC_DEFINE([KERNEL_DARWIN], [1], [True if program is to be compiled for a Darwin kernel]) + ac_system="Darwin" + ;; + *freebsd*) + AC_DEFINE([KERNEL_FREEBSD], [1], [True if program is to be compiled for a FreeBSD kernel]) + ac_system="FreeBSD" + ;; + *linux*) + AC_DEFINE([KERNEL_LINUX], [1], [True if program is to be compiled for a Linux kernel]) + ac_system="Linux" + ;; + *netbsd*) + AC_DEFINE([KERNEL_NETBSD], [1], [True if program is to be compiled for a NetBSD kernel]) + ac_system="NetBSD" + ;; + *openbsd*) + AC_DEFINE([KERNEL_OPENBSD], [1], [True if program is to be compiled for an OpenBSD kernel]) + ac_system="OpenBSD" + ;; + *solaris*) + AC_DEFINE([KERNEL_SOLARIS], [1], [True if program is to be compiled for a Solaris kernel]) + ac_system="Solaris" + ;; + *) + ac_system="unknown" + ;; esac AC_MSG_RESULT([$ac_system]) @@ -149,77 +112,46 @@ AM_CONDITIONAL([BUILD_LINUX], [test "x$ac_system" = "xLinux"]) AM_CONDITIONAL([BUILD_OPENBSD], [test "x$ac_system" = "xOpenBSD"]) AM_CONDITIONAL([BUILD_SOLARIS], [test "x$ac_system" = "xSolaris"]) -if test "x$ac_system" = "xLinux" -then - AC_ARG_VAR([KERNEL_DIR], [path to Linux kernel sources]) - if test -z "$KERNEL_DIR" - then - KERNEL_DIR="/lib/modules/`uname -r`/source" - fi +if test "x$ac_system" = "xSolaris"; then + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [1], [Define to enforce POSIX thread semantics under Solaris.]) + AC_DEFINE([_REENTRANT], [1], [Define to enable reentrancy interfaces.]) - KERNEL_CFLAGS="-I$KERNEL_DIR/include" - AC_SUBST(KERNEL_CFLAGS) + AC_MSG_CHECKING([whether compiler builds 64bit binaries]) + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #ifndef _LP64 + # error "Compiler not in 64bit mode." + #endif + ] + ) + ], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([Solaris detected. Please consider building a 64-bit binary.]) + ] + ) fi -if test "x$ac_system" = "xSolaris" -then - AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Define to enforce POSIX thread semantics under Solaris.]) - AC_DEFINE(_REENTRANT, 1, [Define to enable reentrancy interfaces.]) - - AC_MSG_CHECKING([whether compiler builds 64bit binaries]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ - #ifndef _LP64 - # error "Compiler not in 64bit mode." - #endif - ])], - [AC_MSG_RESULT([yes])], - [ - AC_MSG_RESULT([no]) - AC_MSG_NOTICE([Solaris detected. Please consider building a 64-bit binary.]) - ]) -fi - -if test "x$ac_system" = "xAIX" -then - AC_DEFINE(_THREAD_SAFE_ERRNO, 1, [Define to use the thread-safe version of errno under AIX.]) +if test "x$ac_system" = "xAIX"; then + AC_DEFINE([_THREAD_SAFE_ERRNO], [1], [Define to use the thread-safe version of errno under AIX.]) fi # Where to install .pc files. pkgconfigdir="${libdir}/pkgconfig" -AC_SUBST(pkgconfigdir) - -# Check for standards compliance mode -AC_ARG_ENABLE(standards, - AS_HELP_STRING([--enable-standards], [Enable standards compliance mode]), - [enable_standards="$enableval"], - [enable_standards="no"]) -if test "x$enable_standards" = "xyes" -then - AC_DEFINE(_ISOC99_SOURCE, 1, [Define to enforce ISO C99 compliance.]) - AC_DEFINE(_POSIX_C_SOURCE, 200809L, [Define to enforce POSIX.1-2008 compliance.]) - AC_DEFINE(_XOPEN_SOURCE, 700, [Define to enforce X/Open 7 (XSI) compliance.]) - AC_DEFINE(_REENTRANT, 1, [Define to enable reentrancy interfaces.]) - if test "x$GCC" = "xyes" - then - CFLAGS="$CFLAGS -std=c99" - fi -fi -AM_CONDITIONAL(BUILD_FEATURE_STANDARDS, test "x$enable_standards" = "xyes") +AC_SUBST([pkgconfigdir]) # # Checks for header files. # -AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_DIRENT -AC_HEADER_STDBOOL -AC_CHECK_HEADERS([ \ +AC_CHECK_HEADERS_ONCE([ \ arpa/inet.h \ - assert.h \ - ctype.h \ endian.h \ - errno.h \ fcntl.h \ fnmatch.h \ fs_info.h \ @@ -228,9 +160,6 @@ AC_CHECK_HEADERS([ \ kstat.h \ kvm.h \ libgen.h \ - limits.h \ - locale.h \ - math.h \ mntent.h \ mnttab.h \ netdb.h \ @@ -239,9 +168,6 @@ AC_CHECK_HEADERS([ \ pthread_np.h \ pwd.h \ regex.h \ - signal.h \ - stdarg.h \ - stdio.h \ sys/fs_types.h \ sys/fstyp.h \ sys/ioctl.h \ @@ -260,450 +186,447 @@ AC_CHECK_HEADERS([ \ sys/vfstab.h \ sys/vmmeter.h \ syslog.h \ - wordexp.h \ + wordexp.h ]) -# For entropy plugin on newer NetBSD -AC_CHECK_HEADERS(sys/rndio.h, [], [], -[#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_IOCTL_H -# include -#endif -#if HAVE_SYS_PARAM_H -# include -#endif -]) +if test "x$ac_system" = "xNetBSD"; then + # For entropy plugin on newer NetBSD + AC_CHECK_HEADERS([sys/rndio.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_IOCTL_H + # include + #endif + #if HAVE_SYS_PARAM_H + # include + #endif + ]] + ) +fi # For ping library -AC_CHECK_HEADERS(netinet/in_systm.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/in.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/ip.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/ip_icmp.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/ip_var.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/ip6.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/icmp6.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP6_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/tcp.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/udp.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -]) +AC_CHECK_HEADERS([netinet/in_systm.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + ]] +) -have_ip6_ext="no" -AC_CHECK_TYPES([struct ip6_ext], [have_ip6_ext="yes"], [have_ip6_ext="no"], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP6_H -# include -#endif -]) +AC_CHECK_HEADERS([netinet/in.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + ]] +) -if test "x$have_ip6_ext" = "xno"; then - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -DSOLARIS2=8" - - AC_CHECK_TYPES([struct ip6_ext], - [have_ip6_ext="yes, with -DSOLARIS2=8"], - [have_ip6_ext="no"], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP6_H -# include -#endif -]) +AC_CHECK_HEADERS([netinet/ip.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + ]] +) - if test "x$have_ip6_ext" = "xno"; then - CFLAGS="$SAVE_CFLAGS" - fi -fi +AC_CHECK_HEADERS([netinet/ip_icmp.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + ]] +) -# For cpu modules -AC_CHECK_HEADERS(sys/dkstat.h) -if test "x$ac_system" = "xDarwin" -then - AC_CHECK_HEADERS(mach/mach_init.h mach/host_priv.h mach/mach_error.h mach/mach_host.h mach/mach_port.h mach/mach_types.h mach/message.h mach/processor_set.h mach/processor.h mach/processor_info.h mach/task.h mach/thread_act.h mach/vm_region.h mach/vm_map.h mach/vm_prot.h mach/vm_statistics.h mach/kern_return.h) - AC_CHECK_HEADERS(CoreFoundation/CoreFoundation.h IOKit/IOKitLib.h IOKit/IOTypes.h IOKit/ps/IOPSKeys.h IOKit/IOBSD.h IOKit/storage/IOBlockStorageDriver.h) - # For the battery plugin - AC_CHECK_HEADERS(IOKit/ps/IOPowerSources.h, [], [], -[ -#if HAVE_IOKIT_IOKITLIB_H -# include -#endif -#if HAVE_IOKIT_IOTYPES_H -# include -#endif -]) +AC_CHECK_HEADERS([netinet/ip_var.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + ]] +) -fi +AC_CHECK_HEADERS([netinet/ip6.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + ]] +) -AC_CHECK_HEADERS(sys/sysctl.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_PARAM_H -# include -#endif -]) +AC_CHECK_HEADERS([netinet/icmp6.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP6_H + # include + #endif + ]] +) -AC_MSG_CHECKING([for sysctl kern.cp_times]) -if test -x /sbin/sysctl -then - /sbin/sysctl kern.cp_times >/dev/null 2>&1 - if test $? -eq 0 - then - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_SYSCTL_KERN_CP_TIMES, 1, - [Define if sysctl supports kern.cp_times]) - else - AC_MSG_RESULT([no]) - fi -else - AC_MSG_RESULT([no]) -fi +AC_CHECK_HEADERS([netinet/tcp.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + ]] +) -AC_MSG_CHECKING([for sysctl kern.cp_time]) -if test -x /sbin/sysctl -then - /sbin/sysctl kern.cp_time >/dev/null 2>&1 - if test $? -eq 0 - then - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_SYSCTL_KERN_CP_TIME, 1, - [Define if sysctl supports kern.cp_time]) - else - AC_MSG_RESULT([no]) - fi -else - AC_MSG_RESULT([no]) -fi +AC_CHECK_HEADERS([netinet/udp.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + ]] +) -# For hddtemp module -AC_CHECK_HEADERS(linux/major.h) +# For cpu modules +AC_CHECK_HEADERS([sys/dkstat.h]) +if test "x$ac_system" = "xDarwin"; then + AC_CHECK_HEADERS( + [ \ + mach/mach_init.h \ + mach/host_priv.h \ + mach/mach_error.h \ + mach/mach_host.h \ + mach/mach_port.h \ + mach/mach_types.h \ + mach/message.h \ + mach/processor_set.h \ + mach/processor.h \ + mach/processor_info.h \ + mach/task.h \ + mach/thread_act.h \ + mach/vm_region.h \ + mach/vm_map.h \ + mach/vm_prot.h \ + mach/vm_statistics.h \ + mach/kern_return.h \ + CoreFoundation/CoreFoundation.h \ + IOKit/IOKitLib.h \ + IOKit/IOTypes.h \ + IOKit/ps/IOPSKeys.h \ + IOKit/IOBSD.h \ + IOKit/storage/IOBlockStorageDriver.h + ] + ) -# For md module (Linux only) -if test "x$ac_system" = "xLinux" -then - AC_CHECK_HEADERS(linux/raid/md_u.h, - [have_linux_raid_md_u_h="yes"], - [have_linux_raid_md_u_h="no"], -[ -#include -#include -#include -]) - AC_CHECK_HEADERS([sys/sysmacros.h]) -else - have_linux_raid_md_u_h="no" + # For the battery plugin + AC_CHECK_HEADERS([IOKit/ps/IOPowerSources.h], [], [], + [[ + #if HAVE_IOKIT_IOKITLIB_H + # include + #endif + #if HAVE_IOKIT_IOTYPES_H + # include + #endif + ]] + ) fi -# For the wireless module -have_linux_wireless_h="no" -if test "x$ac_system" = "xLinux" -then - AC_CHECK_HEADERS(linux/wireless.h, - [have_linux_wireless_h="yes"], - [have_linux_wireless_h="no"], -[ -#include -#include -#include -]) -fi +AC_CHECK_HEADERS([sys/sysctl.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_PARAM_H + # include + #endif + ]] +) -# For the swap module -have_sys_swap_h="yes" -AC_CHECK_HEADERS(sys/swap.h vm/anon.h, [], [have_sys_swap_h="no"], -[ -#undef _FILE_OFFSET_BITS -#undef _LARGEFILE64_SOURCE -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_PARAM_H -# include -#endif -]) +# For interface plugin +AC_CHECK_HEADERS([ifaddrs.h]) +AC_CHECK_HEADERS([net/if.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + ]] +) -# For load module -# For the processes plugin -# For users module -AC_CHECK_HEADERS(sys/loadavg.h linux/config.h utmp.h utmpx.h) +if test "x$ac_system" = "xLinux"; then + # For hddtemp module + AC_CHECK_HEADERS([linux/major.h]) + + # For md module (Linux only) + AC_CHECK_HEADERS([linux/raid/md_u.h], + [have_linux_raid_md_u_h="yes"], + [have_linux_raid_md_u_h="no"], + [[ + #include + #include + #include + ]] + ) + AC_CHECK_HEADERS([sys/sysmacros.h]) + + AC_CHECK_HEADERS([linux/wireless.h], + [have_linux_wireless_h="yes"], + [have_linux_wireless_h="no"], + [[ + #include + #include + #include + ]] + ) -# For interface plugin -AC_CHECK_HEADERS(ifaddrs.h) -AC_CHECK_HEADERS(net/if.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -]) -AC_CHECK_HEADERS(linux/if.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -]) -AC_CHECK_HEADERS(linux/inet_diag.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -#if HAVE_LINUX_INET_DIAG_H -# include -#endif -]) -AC_CHECK_HEADERS(linux/netdevice.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -#if HAVE_LINUX_IF_H -# include -#endif -]) + AC_CHECK_HEADERS([linux/if.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + ]] + ) -# For ethstat module -AC_CHECK_HEADERS(linux/sockios.h, + AC_CHECK_HEADERS([linux/inet_diag.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + ]] + ) + + AC_CHECK_HEADERS([linux/netdevice.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + #if HAVE_LINUX_IF_H + # include + #endif + ]] + ) + + # For ethstat module + AC_CHECK_HEADERS([linux/sockios.h], [have_linux_sockios_h="yes"], [have_linux_sockios_h="no"], - [ -#if HAVE_SYS_IOCTL_H -# include -#endif -#if HAVE_NET_IF_H -# include -#endif - ]) -AC_CHECK_HEADERS(linux/ethtool.h, + [[ + #if HAVE_SYS_IOCTL_H + # include + #endif + #if HAVE_NET_IF_H + # include + #endif + ]] + ) + + AC_CHECK_HEADERS([linux/ethtool.h], [have_linux_ethtool_h="yes"], [have_linux_ethtool_h="no"], - [ -#if HAVE_SYS_IOCTL_H -# include -#endif -#if HAVE_NET_IF_H -# include -#endif -#if HAVE_LINUX_SOCKIOS_H -# include -#endif - ]) - -# For ipvs module -have_linux_ip_vs_h="no" -have_net_ip_vs_h="no" -have_ip_vs_h="no" -ip_vs_h_needs_kernel_cflags="no" -if test "x$ac_system" = "xLinux" -then - AC_CHECK_HEADERS(linux/ip_vs.h, [have_linux_ip_vs_h="yes"]) - AC_CHECK_HEADERS(net/ip_vs.h, [have_net_ip_vs_h="yes"]) - AC_CHECK_HEADERS(ip_vs.h, [have_ip_vs_h="yes"]) + [[ + #if HAVE_SYS_IOCTL_H + # include + #endif + #if HAVE_NET_IF_H + # include + #endif + #if HAVE_LINUX_SOCKIOS_H + # include + #endif + ]] + ) + + # For ipvs module + AC_CHECK_HEADERS_ONCE([linux/ip_vs.h]) - if test "x$have_linux_ip_vs_h$have_net_ip_vs_h$have_ip_vs_h" = "xnonono" && test -d "$KERNEL_DIR" - then - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $KERNEL_CFLAGS" + # For the email plugin + AC_CHECK_HEADERS([linux/un.h], [], [], + [[ + #if HAVE_SYS_SOCKET_H + # include + #endif + ]] + ) + # For the turbostat plugin + AC_CHECK_HEADERS([asm/msr-index.h], + [have_asm_msrindex_h="yes"], + [have_asm_msrindex_h="no"] + ) + + if test "x$have_asm_msrindex_h" = "xyes"; then + AC_CACHE_CHECK([whether asm/msr-index.h has MSR_PKG_C10_RESIDENCY], + [c_cv_have_usable_asm_msrindex_h], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include]], + [[ + int y = MSR_PKG_C10_RESIDENCY; + return(y); + ]] + ) + ], + [c_cv_have_usable_asm_msrindex_h="yes"], + [c_cv_have_usable_asm_msrindex_h="no"], + ) + ] + ) + fi + + AC_CHECK_HEADERS([cpuid.h], + [have_cpuid_h="yes"], + [have_cpuid_h="no (cpuid.h not found)"] + ) + + AC_CHECK_HEADERS([sys/capability.h], + [have_capability="yes"], + [have_capability="no ( not found)"] + ) - AC_MSG_NOTICE([Did not find ip_vs.h. Trying again using headers from $KERNEL_DIR.]) + if test "x$have_capability" = "xyes"; then + AC_CHECK_LIB([cap], [cap_get_proc], + [have_capability="yes"], + [have_capability="no (cap_get_proc() not found)"] + ) + fi - AC_CHECK_HEADERS(linux/ip_vs.h, [have_linux_ip_vs_h="yes"]) - AC_CHECK_HEADERS(net/ip_vs.h, [have_net_ip_vs_h="yes"]) - AC_CHECK_HEADERS(ip_vs.h, [have_ip_vs_h="yes"]) + if test "x$have_capability" = "xyes"; then + AC_CHECK_DECL([CAP_IS_SUPPORTED], + [have_capability="yes"], + [have_capability="no (CAP_IS_SUPPORTED not found)"], + [[#include ]] + ) + fi - if test "x$have_linux_ip_vs_h" = "xyes" || test "x$have_net_ip_vs_h" = "xyes" || test "x$have_ip_vs_h" = "xyes" - then - ip_vs_h_needs_kernel_cflags="yes" - fi + if test "x$have_capability" = "xyes"; then + AC_DEFINE([HAVE_CAPABILITY], [1], [Define to 1 if you have cap_get_proc() (-lcap).]) + fi - CFLAGS="$SAVE_CFLAGS" - fi +else + have_linux_raid_md_u_h="no" + have_linux_wireless_h="no" fi -AM_CONDITIONAL(IP_VS_H_NEEDS_KERNEL_CFLAGS, test "x$ip_vs_h_needs_kernel_cflags" = "xyes") + +AM_CONDITIONAL([BUILD_WITH_CAPABILITY], [test "x$have_capability" = "xyes"]) + +# For the swap module +have_sys_swap_h="yes" +AC_CHECK_HEADERS([sys/swap.h vm/anon.h], + [], + [have_sys_swap_h="no"], + [[ + #undef _FILE_OFFSET_BITS + #undef _LARGEFILE64_SOURCE + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_PARAM_H + # include + #endif + ]] +) + +# For load module +# For the processes plugin +# For users module +AC_CHECK_HEADERS([sys/loadavg.h linux/config.h utmp.h utmpx.h]) # For quota module -AC_CHECK_HEADERS(sys/ucred.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_PARAM_H -# include -#endif -]) +AC_CHECK_HEADERS([sys/ucred.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_PARAM_H + # include + #endif + ]] +) # For mount interface -AC_CHECK_HEADERS(sys/mount.h, [], [], -[ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_PARAM_H -# include -#endif -]) - -# For the email plugin -AC_CHECK_HEADERS(linux/un.h, [], [], -[ -#if HAVE_SYS_SOCKET_H -# include -#endif -]) +AC_CHECK_HEADERS([sys/mount.h], [], [], + [[ + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_PARAM_H + # include + #endif + ]] +) # --enable-xfs {{{ AC_ARG_ENABLE([xfs], @@ -727,128 +650,95 @@ fi # }}} # For the dns plugin -AC_CHECK_HEADERS(arpa/nameser.h) -AC_CHECK_HEADERS(arpa/nameser_compat.h, [], [], -[ -#if HAVE_ARPA_NAMESER_H -# include -#endif -]) +AC_CHECK_HEADERS([arpa/nameser.h]) +AC_CHECK_HEADERS([arpa/nameser_compat.h], [], [], + [[ + #if HAVE_ARPA_NAMESER_H + # include + #endif + ]] +) -AC_CHECK_HEADERS(net/if_arp.h, [], [], -[#if HAVE_SYS_SOCKET_H -# include -#endif -]) -AC_CHECK_HEADERS(net/ppp_defs.h) -AC_CHECK_HEADERS(net/if_ppp.h, [], [], -[#if HAVE_NET_PPP_DEFS_H -# include -#endif -]) -AC_CHECK_HEADERS(netinet/if_ether.h, [], [], -[#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -#if HAVE_NET_IF_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -]) +AC_CHECK_HEADERS([net/if_arp.h], [], [], + [[ + #if HAVE_SYS_SOCKET_H + # include + #endif + ]] +) -have_net_pfvar_h="no" -AC_CHECK_HEADERS(net/pfvar.h, - [have_net_pfvar_h="yes"], - [have_net_pfvar_h="no"], -[ -#if HAVE_SYS_IOCTL_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif -#if HAVE_NET_IF_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -]) +AC_CHECK_HEADERS([net/ppp_defs.h]) +AC_CHECK_HEADERS([net/if_ppp.h], [], [], + [[ + #if HAVE_NET_PPP_DEFS_H + # include + #endif + ]] +) -# For the multimeter plugin -have_termios_h="no" -AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"]) +AC_CHECK_HEADERS([netinet/if_ether.h], [], [], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + #if HAVE_NET_IF_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + ]] +) + +AC_CHECK_HEADERS([net/pfvar.h], + [have_net_pfvar_h="yes"], + [have_net_pfvar_h="no"], + [[ + #if HAVE_SYS_IOCTL_H + # include + #endif + #if HAVE_SYS_SOCKET_H + # include + #endif + #if HAVE_NET_IF_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + ]] +) + +# For the multimeter plugin +AC_CHECK_HEADERS([termios.h], + [have_termios_h="yes"], + [have_termios_h="no"] +) # For cpusleep plugin AC_CACHE_CHECK([whether clock_boottime and clock_monotonic are supported], - [c_cv_have_clock_boottime_monotonic], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[ -#include -]], -[[ - struct timespec b, m; - clock_gettime(CLOCK_BOOTTIME, &b ); - clock_gettime(CLOCK_MONOTONIC, &m ); -]] - )], - [c_cv_have_clock_boottime_monotonic="yes"], - [c_cv_have_clock_boottime_monotonic="no"])) - - -# For the turbostat plugin -have_asm_msrindex_h="no" -AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"]) - -if test "x$have_asm_msrindex_h" = "xyes" -then - AC_CACHE_CHECK([whether asm/msr-index.h has MSR_PKG_C10_RESIDENCY], - [c_cv_have_usable_asm_msrindex_h], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -]]], -[[[ -int y = MSR_PKG_C10_RESIDENCY; -return(y); -]]] - )], - [c_cv_have_usable_asm_msrindex_h="yes"], - [c_cv_have_usable_asm_msrindex_h="no"], - ) - ) -fi - -have_cpuid_h="no" -AC_CHECK_HEADERS(cpuid.h, [have_cpuid_h="yes"]) + [c_cv_have_clock_boottime_monotonic], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[ + struct timespec b, m; + clock_gettime(CLOCK_BOOTTIME, &b ); + clock_gettime(CLOCK_MONOTONIC, &m ); + ]] + ) + ], + [c_cv_have_clock_boottime_monotonic="yes"], + [c_cv_have_clock_boottime_monotonic="no"] + ) + ] +) -have_capability="yes" -AC_CHECK_HEADERS(sys/capability.h, - [have_capability="yes"], - [have_capability="no ( not found)"]) -if test "x$have_capability" = "xyes"; then -AC_CHECK_LIB(cap, cap_get_proc, - [have_capability="yes"], - [have_capability="no (cap_get_proc() not found)"]) -fi -if test "x$have_capability" = "xyes"; then -AC_CHECK_DECL([CAP_IS_SUPPORTED], - [have_capability="yes"], - [have_capability="no (CAP_IS_SUPPORTED not found)"], - [[#include ]]) -fi -if test "x$have_capability" = "xyes"; then - AC_DEFINE(HAVE_CAPABILITY, 1, [Define to 1 if you have cap_get_proc() (-lcap).]) -fi -AM_CONDITIONAL(BUILD_WITH_CAPABILITY, test "x$have_capability" = "xyes") # # Checks for typedefs, structures, and compiler characteristics. @@ -859,212 +749,264 @@ AC_TYPE_SIZE_T AC_TYPE_UID_T AC_HEADER_TIME +test_cxx_flags() { + AC_LANG_PUSH([C++]) + AC_LANG_CONFTEST( + [AC_LANG_SOURCE([[int main(void){}]]) ] + ) + $CXX -c conftest.cpp $CXXFLAGS $@ > /dev/null 2> /dev/null + ret=$? + rm -f conftest.o + AC_LANG_POP([C++]) + return $ret +} + # # Checks for library functions. # -AC_CHECK_FUNCS(gettimeofday select strdup strtol getaddrinfo getnameinfo strchr memcpy strstr strcmp strncmp strncpy strlen strncasecmp strcasecmp openlog closelog sysconf setenv if_indextoname setlocale asprintf) +AC_CHECK_FUNCS_ONCE([ \ + asprintf \ + closelog \ + getaddrinfo \ + getgrnam_r \ + getnameinfo \ + getpwnam_r \ + gettimeofday \ + if_indextoname \ + openlog \ + regcomp \ + regerror \ + regexec \ + regfree \ + select \ + setenv \ + setgroups \ + strcasecmp \ + strdup \ + strncasecmp \ + sysconf + ] +) AC_FUNC_STRERROR_R -test_cxx_flags() { - AC_LANG_PUSH([C++]) - AC_LANG_CONFTEST([ - AC_LANG_SOURCE([[int main(void){}]]) - ]) - $CXX -c conftest.cpp $CXXFLAGS $@ > /dev/null 2> /dev/null - ret=$? - rm -f conftest.o - AC_LANG_POP([C++]) - return $ret -} - SAVE_CFLAGS="$CFLAGS" # Emulate behavior of src/Makefile.am -if test "x$GCC" = "xyes" -then - CFLAGS="$CFLAGS -Wall -Werror" +if test "x$GCC" = "xyes"; then + CFLAGS="$CFLAGS -Wall -Werror" fi AC_CACHE_CHECK([for strtok_r], [c_cv_have_strtok_r_default], - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( -[[[ -#include -#include -#include -]]], -[[[ - char buffer[] = "foo,bar,baz"; - char *token; - char *dummy; - char *saveptr; - - dummy = buffer; - saveptr = NULL; - while ((token = strtok_r (dummy, ",", &saveptr)) != NULL) - { - dummy = NULL; - printf ("token = %s;\n", token); - } -]]] - )], - [c_cv_have_strtok_r_default="yes"], - [c_cv_have_strtok_r_default="no"] - ) + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + ]], + [[ + char buffer[] = "foo,bar,baz"; + char *token; + char *dummy; + char *saveptr; + + dummy = buffer; + saveptr = NULL; + while ((token = strtok_r (dummy, ",", &saveptr)) != NULL) + { + dummy = NULL; + printf ("token = %s;\n", token); + } + ]] + ) + ], + [c_cv_have_strtok_r_default="yes"], + [c_cv_have_strtok_r_default="no"] + ) + ] ) -if test "x$c_cv_have_strtok_r_default" = "xno" -then +if test "x$c_cv_have_strtok_r_default" = "xno"; then CFLAGS="$CFLAGS -D_REENTRANT=1" AC_CACHE_CHECK([if strtok_r needs _REENTRANT], [c_cv_have_strtok_r_reentrant], - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( -[[[ -#include -#include -#include -]]], -[[[ - char buffer[] = "foo,bar,baz"; - char *token; - char *dummy; - char *saveptr; - - dummy = buffer; - saveptr = NULL; - while ((token = strtok_r (dummy, ",", &saveptr)) != NULL) - { - dummy = NULL; - printf ("token = %s;\n", token); - } -]]] - )], - [c_cv_have_strtok_r_reentrant="yes"], - [AC_MSG_FAILURE([strtok_r isn't available. Please file a bugreport!])] - ) + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + ]], + [[ + char buffer[] = "foo,bar,baz"; + char *token; + char *dummy; + char *saveptr; + + dummy = buffer; + saveptr = NULL; + while ((token = strtok_r (dummy, ",", &saveptr)) != NULL) + { + dummy = NULL; + printf ("token = %s;\n", token); + } + ]] + ) + ], + [c_cv_have_strtok_r_reentrant="yes"], + [AC_MSG_FAILURE([strtok_r is not available. Please file a bugreport!])] + ) + ] ) fi CFLAGS="$SAVE_CFLAGS" -if test "x$c_cv_have_strtok_r_reentrant" = "xyes" -then - CFLAGS="$CFLAGS -D_REENTRANT=1" +if test "x$c_cv_have_strtok_r_reentrant" = "xyes"; then + CFLAGS="$CFLAGS -D_REENTRANT=1" fi -AC_CHECK_FUNCS(getpwnam_r getgrnam_r setgroups regcomp regerror regexec regfree) - -socket_needs_socket="no" -AC_CHECK_FUNCS(socket, [], AC_CHECK_LIB(socket, socket, [socket_needs_socket="yes"], AC_MSG_ERROR(cannot find socket))) -AM_CONDITIONAL(BUILD_WITH_LIBSOCKET, test "x$socket_needs_socket" = "xyes") +AC_CHECK_FUNCS([socket], + [], + [ + AC_CHECK_LIB([socket], [socket], + [socket_needs_socket="yes"], + [AC_MSG_ERROR([cannot find socket() in libsocket])] + ) + ] +) +AM_CONDITIONAL([BUILD_WITH_LIBSOCKET], [test "x$socket_needs_socket" = "xyes"]) -clock_gettime_needs_rt="no" clock_gettime_needs_posix4="no" -have_clock_gettime="no" -AC_CHECK_FUNCS(clock_gettime, [have_clock_gettime="yes"]) -if test "x$have_clock_gettime" = "xno" -then - AC_CHECK_LIB(rt, clock_gettime, [clock_gettime_needs_rt="yes" - have_clock_gettime="yes"]) +AC_CHECK_FUNCS([clock_gettime], + [have_clock_gettime="yes"], + [have_clock_gettime="no"] +) + +if test "x$have_clock_gettime" = "xno"; then + AC_CHECK_LIB([rt], [clock_gettime], + [ + clock_gettime_needs_rt="yes" + have_clock_gettime="yes" + ] + ) fi -if test "x$have_clock_gettime" = "xno" -then - AC_CHECK_LIB(posix4, clock_gettime, [clock_gettime_needs_posix4="yes" - have_clock_gettime="yes"]) + +if test "x$have_clock_gettime" = "xno"; then + AC_CHECK_LIB([posix4], [clock_gettime], + [ + clock_gettime_needs_posix4="yes" + have_clock_gettime="yes" + ] + ) fi -if test "x$have_clock_gettime" = "xyes" -then - AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define if the clock_gettime(2) function is available.]) + +if test "x$have_clock_gettime" = "xyes"; then + AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define if the clock_gettime(2) function is available.]) fi -nanosleep_needs_rt="no" -nanosleep_needs_posix4="no" -AC_CHECK_FUNCS(nanosleep, - [], - AC_CHECK_LIB(rt, nanosleep, - [nanosleep_needs_rt="yes"], - AC_CHECK_LIB(posix4, nanosleep, - [nanosleep_needs_posix4="yes"], - AC_MSG_ERROR(cannot find nanosleep)))) - -AM_CONDITIONAL(BUILD_WITH_LIBRT, test "x$clock_gettime_needs_rt" = "xyes" || test "x$nanosleep_needs_rt" = "xyes") -AM_CONDITIONAL(BUILD_WITH_LIBPOSIX4, test "x$clock_gettime_needs_posix4" = "xyes" || test "x$nanosleep_needs_posix4" = "xyes") - -AC_CHECK_FUNCS(sysctl, [have_sysctl="yes"], [have_sysctl="no"]) -AC_CHECK_FUNCS(sysctlbyname, [have_sysctlbyname="yes"], [have_sysctlbyname="no"]) -AC_CHECK_FUNCS(host_statistics, [have_host_statistics="yes"], [have_host_statistics="no"]) -AC_CHECK_FUNCS(processor_info, [have_processor_info="yes"], [have_processor_info="no"]) -AC_CHECK_FUNCS(thread_info, [have_thread_info="yes"], [have_thread_info="no"]) -AC_CHECK_FUNCS(statfs, [have_statfs="yes"], [have_statfs="no"]) -AC_CHECK_FUNCS(statvfs, [have_statvfs="yes"], [have_statvfs="no"]) -AC_CHECK_FUNCS(getifaddrs, [have_getifaddrs="yes"], [have_getifaddrs="no"]) -AC_CHECK_FUNCS(getloadavg, [have_getloadavg="yes"], [have_getloadavg="no"]) -AC_CHECK_FUNCS(syslog, [have_syslog="yes"], [have_syslog="no"]) -AC_CHECK_FUNCS(getutent, [have_getutent="yes"], [have_getutent="no"]) -AC_CHECK_FUNCS(getutxent, [have_getutxent="yes"], [have_getutxent="no"]) +AC_CHECK_FUNCS([nanosleep], [], + AC_CHECK_LIB([rt], [nanosleep], + [nanosleep_needs_rt="yes"], + [ + AC_CHECK_LIB([posix4], [nanosleep], + [nanosleep_needs_posix4="yes"], + [AC_MSG_ERROR([cannot find nanosleep])] + ) + ] + ) +) + +AM_CONDITIONAL([BUILD_WITH_LIBRT], [test "x$clock_gettime_needs_rt" = "xyes" || test "x$nanosleep_needs_rt" = "xyes"]) +AM_CONDITIONAL([BUILD_WITH_LIBPOSIX4], [test "x$clock_gettime_needs_posix4" = "xyes" || test "x$nanosleep_needs_posix4" = "xyes"]) + +AC_CHECK_FUNCS([getifaddrs], [have_getifaddrs="yes"], [have_getifaddrs="no"]) +AC_CHECK_FUNCS([getloadavg], [have_getloadavg="yes"], [have_getloadavg="no"]) +AC_CHECK_FUNCS([getutent], [have_getutent="yes"], [have_getutent="no"]) +AC_CHECK_FUNCS([getutxent], [have_getutxent="yes"], [have_getutxent="no"]) +AC_CHECK_FUNCS([host_statistics], [have_host_statistics="yes"], [have_host_statistics="no"]) +AC_CHECK_FUNCS([processor_info], [have_processor_info="yes"], [have_processor_info="no"]) +AC_CHECK_FUNCS([statfs], [have_statfs="yes"], [have_statfs="no"]) +AC_CHECK_FUNCS([statvfs], [have_statvfs="yes"], [have_statvfs="no"]) +AC_CHECK_FUNCS([sysctl], [have_sysctl="yes"], [have_sysctl="no"]) +AC_CHECK_FUNCS([sysctlbyname], [have_sysctlbyname="yes"], [have_sysctlbyname="no"]) +AC_CHECK_FUNCS([syslog], [have_syslog="yes"], [have_syslog="no"]) +AC_CHECK_FUNCS([thread_info], [have_thread_info="yes"], [have_thread_info="no"]) # Check for strptime {{{ -if test "x$GCC" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Wall -Wextra -Werror" +if test "x$GCC" = "xyes"; then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wall -Wextra -Werror" fi -AC_CHECK_FUNCS(strptime, [have_strptime="yes"], [have_strptime="no"]) -if test "x$have_strptime" = "xyes" -then - AC_CACHE_CHECK([whether strptime is exported by default], - [c_cv_have_strptime_default], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -]]], -[[[ - struct tm stm; - (void) strptime ("2010-12-30%13:42:42", "%Y-%m-%dT%T", &stm); -]]] - )], - [c_cv_have_strptime_default="yes"], - [c_cv_have_strptime_default="no"])) +AC_CHECK_FUNCS([strptime], [have_strptime="yes"], [have_strptime="no"]) +if test "x$have_strptime" = "xyes"; then + AC_CACHE_CHECK([whether strptime is exported by default], + [c_cv_have_strptime_default], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include ]], + [[ + struct tm stm; + (void)strptime ("2010-12-30%13:42:42", "%Y-%m-%dT%T", &stm); + ]] + ) + ], + [c_cv_have_strptime_default="yes"], + [c_cv_have_strptime_default="no"]) + ] + ) fi -if test "x$have_strptime" = "xyes" && test "x$c_cv_have_strptime_default" = "xno" -then - AC_CACHE_CHECK([whether strptime needs standards mode], - [c_cv_have_strptime_standards], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#ifndef _ISOC99_SOURCE -# define _ISOC99_SOURCE 1 -#endif -#ifndef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 200112L -#endif -#ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 500 -#endif -#include -]]], -[[[ - struct tm stm; - (void) strptime ("2010-12-30%13:42:42", "%Y-%m-%dT%T", &stm); -]]] - )], - [c_cv_have_strptime_standards="yes"], - [c_cv_have_strptime_standards="no"])) - if test "x$c_cv_have_strptime_standards" = "xyes" - then - AC_DEFINE([STRPTIME_NEEDS_STANDARDS], 1, [Set to true if strptime is only exported in X/Open mode (GNU libc).]) - else - have_strptime="no" - fi +if test "x$have_strptime" = "xyes" && test "x$c_cv_have_strptime_default" = "xno"; then + AC_CACHE_CHECK([whether strptime needs standards mode], + [c_cv_have_strptime_standards], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #ifndef _ISOC99_SOURCE + # define _ISOC99_SOURCE 1 + #endif + #ifndef _POSIX_C_SOURCE + # define _POSIX_C_SOURCE 200112L + #endif + #ifndef _XOPEN_SOURCE + # define _XOPEN_SOURCE 500 + #endif + #include + ]], + [[ + struct tm stm; + (void)strptime ("2010-12-30%13:42:42", "%Y-%m-%dT%T", &stm); + ]] + ) + ], + [c_cv_have_strptime_standards="yes"], + [c_cv_have_strptime_standards="no"] + ) + ] + ) + + if test "x$c_cv_have_strptime_standards" = "xyes"; then + AC_DEFINE([STRPTIME_NEEDS_STANDARDS], [1], + [Set to true if strptime is only exported in X/Open mode (GNU libc).] + ) + else + have_strptime="no" + fi fi -if test "x$GCC" = "xyes" -then - CFLAGS="$SAVE_CFLAGS" +if test "x$GCC" = "xyes"; then + CFLAGS="$SAVE_CFLAGS" fi # }}} Check for strptime @@ -1154,1203 +1096,1392 @@ fi CFLAGS="$SAVE_CFLAGS" # }}} Check for timegm -AC_CHECK_FUNCS(swapctl, [have_swapctl="yes"], [have_swapctl="no"]) +AC_MSG_CHECKING([for sysctl kern.cp_times]) +if test -x /sbin/sysctl; then + /sbin/sysctl kern.cp_times >/dev/null 2>&1 + if test $? -eq 0; then + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_SYSCTL_KERN_CP_TIMES], [1], [Define if sysctl supports kern.cp_times]) + else + AC_MSG_RESULT([no]) + fi +else + AC_MSG_RESULT([no]) +fi + +AC_MSG_CHECKING([for sysctl kern.cp_time]) +if test -x /sbin/sysctl; then + /sbin/sysctl kern.cp_time >/dev/null 2>&1 + if test $? -eq 0 + then + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_SYSCTL_KERN_CP_TIME], [1], [Define if sysctl supports kern.cp_time]) + else + AC_MSG_RESULT([no]) + fi +else + AC_MSG_RESULT([no]) +fi + +AC_CHECK_FUNCS([swapctl], [have_swapctl="yes"], [have_swapctl="no"]) if test "x$have_swapctl" = "xyes"; then - AC_CACHE_CHECK([whether swapctl takes two arguments], - [c_cv_have_swapctl_two_args], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#if HAVE_SYS_SWAP_H && !defined(_LP64) && _FILE_OFFSET_BITS == 64 -# undef _FILE_OFFSET_BITS -# undef _LARGEFILE64_SOURCE -#endif -#include -#include -#include -#include -]]], -[[[ -int num = swapctl(0, NULL); -]]] - )], - [c_cv_have_swapctl_two_args="yes"], - [c_cv_have_swapctl_two_args="no"] - ) - ) - AC_CACHE_CHECK([whether swapctl takes three arguments], - [c_cv_have_swapctl_three_args], - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( -[[[ -#if HAVE_SYS_SWAP_H && !defined(_LP64) && _FILE_OFFSET_BITS == 64 -# undef _FILE_OFFSET_BITS -# undef _LARGEFILE64_SOURCE -#endif -#include -#include -#include -#include -]]], -[[[ -int num = swapctl(0, NULL, 0); -]]] - )], - [c_cv_have_swapctl_three_args="yes"], - [c_cv_have_swapctl_three_args="no"] - ) - ) + AC_CACHE_CHECK([whether swapctl takes two arguments], + [c_cv_have_swapctl_two_args], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #if HAVE_SYS_SWAP_H && !defined(_LP64) && _FILE_OFFSET_BITS == 64 + # undef _FILE_OFFSET_BITS + # undef _LARGEFILE64_SOURCE + #endif + #include + #include + #include + #include + ]], + [[int num = swapctl(0, NULL);]] + ) + ], + [c_cv_have_swapctl_two_args="yes"], + [c_cv_have_swapctl_two_args="no"] + ) + ] + ) + + AC_CACHE_CHECK([whether swapctl takes three arguments], + [c_cv_have_swapctl_three_args], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #if HAVE_SYS_SWAP_H && !defined(_LP64) && _FILE_OFFSET_BITS == 64 + # undef _FILE_OFFSET_BITS + # undef _LARGEFILE64_SOURCE + #endif + #include + #include + #include + #include + ]], + [[int num = swapctl(0, NULL, 0);]] + ) + ], + [c_cv_have_swapctl_three_args="yes"], + [c_cv_have_swapctl_three_args="no"] + ) + ] + ) fi + # Check for different versions of `swapctl' here.. if test "x$have_swapctl" = "xyes"; then - if test "x$c_cv_have_swapctl_two_args" = "xyes"; then - AC_DEFINE(HAVE_SWAPCTL_TWO_ARGS, 1, - [Define if the function swapctl exists and takes two arguments.]) - fi - if test "x$c_cv_have_swapctl_three_args" = "xyes"; then - AC_DEFINE(HAVE_SWAPCTL_THREE_ARGS, 1, - [Define if the function swapctl exists and takes three arguments.]) - fi + if test "x$c_cv_have_swapctl_two_args" = "xyes"; then + AC_DEFINE([HAVE_SWAPCTL_TWO_ARGS], [1], [Define if the function swapctl exists and takes two arguments.]) + fi + + if test "x$c_cv_have_swapctl_three_args" = "xyes"; then + AC_DEFINE([HAVE_SWAPCTL_THREE_ARGS], [1], [Define if the function swapctl exists and takes three arguments.]) + fi fi # Check for NAN -AC_ARG_WITH(nan-emulation, [AS_HELP_STRING([--with-nan-emulation], [use emulated NAN. For crosscompiling only.])], -[ - if test "x$withval" = "xno"; then - nan_type="none" - else if test "x$withval" = "xyes"; then - nan_type="zero" - else - nan_type="$withval" - fi; fi -], -[nan_type="none"]) +AC_ARG_WITH([nan-emulation], + [AS_HELP_STRING([--with-nan-emulation], [use emulated NAN. For crosscompiling only.])], + [ + if test "x$withval" = "xno"; then + nan_type="none" + else if test "x$withval" = "xyes"; then + nan_type="zero" + else + nan_type="$withval" + fi; fi + ], + [nan_type="none"] +) + if test "x$nan_type" = "xnone"; then AC_CACHE_CHECK([whether NAN is defined by default], [c_cv_have_nan_default], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -static double foo = NAN; -]]], -[[[ - if (isnan (foo)) - return 0; - else - return 1; -]]] - )], - [c_cv_have_nan_default="yes"], - [c_cv_have_nan_default="no"] - ) + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + static double foo = NAN; + ]], + [[ + if (isnan (foo)) + return 0; + return 1; + ]] + ) + ], + [c_cv_have_nan_default="yes"], + [c_cv_have_nan_default="no"] + ) + ] ) - if test "x$c_cv_have_nan_default" = "xyes" - then - nan_type="default" - fi fi + +if test "x$c_cv_have_nan_default" = "xyes"; then + nan_type="default" +fi + if test "x$nan_type" = "xnone"; then AC_CACHE_CHECK([whether NAN is defined by __USE_ISOC99], [c_cv_have_nan_isoc], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#define __USE_ISOC99 1 -#include -static double foo = NAN; -]]], -[[[ - if (isnan (foo)) - return 0; - else - return 1; -]]] - )], - [c_cv_have_nan_isoc="yes"], - [c_cv_have_nan_isoc="no"] - ) + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #define __USE_ISOC99 1 + #include + static double foo = NAN; + ]], + [[ + if (isnan (foo)) + return 0; + return 1; + ]] + ) + ], + [c_cv_have_nan_isoc="yes"], + [c_cv_have_nan_isoc="no"] + ) + ] ) - if test "x$c_cv_have_nan_isoc" = "xyes" - then - nan_type="isoc99" - fi fi + +if test "x$c_cv_have_nan_isoc" = "xyes"; then + nan_type="isoc99" +fi + if test "x$nan_type" = "xnone"; then - SAVE_LDFLAGS=$LDFLAGS + SAVE_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -lm" AC_CACHE_CHECK([whether NAN can be defined by 0/0], [c_cv_have_nan_zero], - AC_RUN_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#ifdef NAN -# undef NAN -#endif -#define NAN (0.0 / 0.0) -#ifndef isnan -# define isnan(f) ((f) != (f)) -#endif -static double foo = NAN; -]]], -[[[ - if (isnan (foo)) - return 0; - else - return 1; -]]] - )], - [c_cv_have_nan_zero="yes"], - [c_cv_have_nan_zero="no"] - ) + [ + AC_RUN_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #ifdef NAN + # undef NAN + #endif + #define NAN (0.0 / 0.0) + #ifndef isnan + # define isnan(f) ((f) != (f)) + #endif + static double foo = NAN; + ]], + [[ + if (isnan (foo)) + return 0; + return 1; + ]] + ) + ], + [c_cv_have_nan_zero="yes"], + [c_cv_have_nan_zero="no"] + ) + ] ) LDFLAGS=$SAVE_LDFLAGS - if test "x$c_cv_have_nan_zero" = "xyes" - then - nan_type="zero" - fi +fi + +if test "x$c_cv_have_nan_zero" = "xyes"; then + nan_type="zero" fi if test "x$nan_type" = "xdefault"; then - AC_DEFINE(NAN_STATIC_DEFAULT, 1, - [Define if NAN is defined by default and can initialize static variables.]) + AC_DEFINE([NAN_STATIC_DEFAULT], [1], + [Define if NAN is defined by default and can initialize static variables.] + ) else if test "x$nan_type" = "xisoc99"; then - AC_DEFINE(NAN_STATIC_ISOC, 1, - [Define if NAN is defined by __USE_ISOC99 and can initialize static variables.]) + AC_DEFINE([NAN_STATIC_ISOC], [1], + [Define if NAN is defined by __USE_ISOC99 and can initialize static variables.] + ) else if test "x$nan_type" = "xzero"; then - AC_DEFINE(NAN_ZERO_ZERO, 1, - [Define if NAN can be defined as (0.0 / 0.0)]) + AC_DEFINE([NAN_ZERO_ZERO], [1], + [Define if NAN can be defined as (0.0 / 0.0)] + ) else AC_MSG_ERROR([Didn't find out how to statically initialize variables to NAN. Sorry.]) fi; fi; fi -AC_ARG_WITH(fp-layout, [AS_HELP_STRING([--with-fp-layout], [set the memory layout of doubles. For crosscompiling only.])], -[ - if test "x$withval" = "xnothing"; then - fp_layout_type="nothing" - else if test "x$withval" = "xendianflip"; then - fp_layout_type="endianflip" - else if test "x$withval" = "xintswap"; then - fp_layout_type="intswap" - else - AC_MSG_ERROR([Invalid argument for --with-fp-layout. Valid arguments are: nothing, endianflip, intswap]); -fi; fi; fi -], -[fp_layout_type="unknown"]) +AC_ARG_WITH([fp-layout], + [ + AS_HELP_STRING([--with-fp-layout], + [set the memory layout of doubles. For crosscompiling only.] + ) + ], + [ + if test "x$withval" = "xnothing"; then + fp_layout_type="nothing" + else if test "x$withval" = "xendianflip"; then + fp_layout_type="endianflip" + else if test "x$withval" = "xintswap"; then + fp_layout_type="intswap" + else + AC_MSG_ERROR([Invalid argument for --with-fp-layout. Valid arguments are: nothing, endianflip, intswap]); + fi; fi; fi + ], + [fp_layout_type="unknown"] +) if test "x$fp_layout_type" = "xunknown"; then AC_CACHE_CHECK([if doubles are stored in x86 representation], [c_cv_fp_layout_need_nothing], - AC_RUN_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#include -#if HAVE_STDINT_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif -#if HAVE_STDBOOL_H -# include -#endif -]]], -[[[ - uint64_t i0; - uint64_t i1; - uint8_t c[8]; - double d; - - d = 8.642135e130; - memcpy ((void *) &i0, (void *) &d, 8); - - i1 = i0; - memcpy ((void *) c, (void *) &i1, 8); - - if ((c[0] == 0x2f) && (c[1] == 0x25) - && (c[2] == 0xc0) && (c[3] == 0xc7) - && (c[4] == 0x43) && (c[5] == 0x2b) - && (c[6] == 0x1f) && (c[7] == 0x5b)) - return (0); - else - return (1); -]]] - )], - [c_cv_fp_layout_need_nothing="yes"], - [c_cv_fp_layout_need_nothing="no"] - ) + [ + AC_RUN_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + #include + #include + #include + ]], + [[ + uint64_t i0; + uint64_t i1; + uint8_t c[8]; + double d; + + d = 8.642135e130; + memcpy ((void *) &i0, (void *) &d, 8); + + i1 = i0; + memcpy ((void *) c, (void *) &i1, 8); + + if ((c[0] == 0x2f) && (c[1] == 0x25) + && (c[2] == 0xc0) && (c[3] == 0xc7) + && (c[4] == 0x43) && (c[5] == 0x2b) + && (c[6] == 0x1f) && (c[7] == 0x5b)) + return 0; + return 1; + ]] + ) + ], + [c_cv_fp_layout_need_nothing="yes"], + [c_cv_fp_layout_need_nothing="no"] + ) + ] ) - if test "x$c_cv_fp_layout_need_nothing" = "xyes"; then - fp_layout_type="nothing" - fi fi + +if test "x$c_cv_fp_layout_need_nothing" = "xyes"; then + fp_layout_type="nothing" +fi + if test "x$fp_layout_type" = "xunknown"; then AC_CACHE_CHECK([if endianflip converts to x86 representation], [c_cv_fp_layout_need_endianflip], - AC_RUN_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#include -#if HAVE_STDINT_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif -#if HAVE_STDBOOL_H -# include -#endif -#define endianflip(A) ((((uint64_t)(A) & 0xff00000000000000LL) >> 56) | \ - (((uint64_t)(A) & 0x00ff000000000000LL) >> 40) | \ - (((uint64_t)(A) & 0x0000ff0000000000LL) >> 24) | \ - (((uint64_t)(A) & 0x000000ff00000000LL) >> 8) | \ - (((uint64_t)(A) & 0x00000000ff000000LL) << 8) | \ - (((uint64_t)(A) & 0x0000000000ff0000LL) << 24) | \ - (((uint64_t)(A) & 0x000000000000ff00LL) << 40) | \ - (((uint64_t)(A) & 0x00000000000000ffLL) << 56)) -]]], -[[[ - uint64_t i0; - uint64_t i1; - uint8_t c[8]; - double d; - - d = 8.642135e130; - memcpy ((void *) &i0, (void *) &d, 8); - - i1 = endianflip (i0); - memcpy ((void *) c, (void *) &i1, 8); - - if ((c[0] == 0x2f) && (c[1] == 0x25) - && (c[2] == 0xc0) && (c[3] == 0xc7) - && (c[4] == 0x43) && (c[5] == 0x2b) - && (c[6] == 0x1f) && (c[7] == 0x5b)) - return (0); - else - return (1); -]]] - )], - [c_cv_fp_layout_need_endianflip="yes"], - [c_cv_fp_layout_need_endianflip="no"] + [ + AC_RUN_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + #include + #include + #include + #define endianflip(A) ((((uint64_t)(A) & 0xff00000000000000LL) >> 56) | \ + (((uint64_t)(A) & 0x00ff000000000000LL) >> 40) | \ + (((uint64_t)(A) & 0x0000ff0000000000LL) >> 24) | \ + (((uint64_t)(A) & 0x000000ff00000000LL) >> 8) | \ + (((uint64_t)(A) & 0x00000000ff000000LL) << 8) | \ + (((uint64_t)(A) & 0x0000000000ff0000LL) << 24) | \ + (((uint64_t)(A) & 0x000000000000ff00LL) << 40) | \ + (((uint64_t)(A) & 0x00000000000000ffLL) << 56)) + ]], + [[ + uint64_t i0; + uint64_t i1; + uint8_t c[8]; + double d; + + d = 8.642135e130; + memcpy ((void *) &i0, (void *) &d, 8); + + i1 = endianflip (i0); + memcpy ((void *) c, (void *) &i1, 8); + + if ((c[0] == 0x2f) && (c[1] == 0x25) + && (c[2] == 0xc0) && (c[3] == 0xc7) + && (c[4] == 0x43) && (c[5] == 0x2b) + && (c[6] == 0x1f) && (c[7] == 0x5b)) + return 0; + return 1; + ]] + ) + ], + [c_cv_fp_layout_need_endianflip="yes"], + [c_cv_fp_layout_need_endianflip="no"] + ] ) ) - if test "x$c_cv_fp_layout_need_endianflip" = "xyes"; then - fp_layout_type="endianflip" - fi fi + +if test "x$c_cv_fp_layout_need_endianflip" = "xyes"; then + fp_layout_type="endianflip" +fi + if test "x$fp_layout_type" = "xunknown"; then AC_CACHE_CHECK([if intswap converts to x86 representation], [c_cv_fp_layout_need_intswap], - AC_RUN_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#include -#if HAVE_STDINT_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif -#if HAVE_STDBOOL_H -# include -#endif -#define intswap(A) ((((uint64_t)(A) & 0xffffffff00000000LL) >> 32) | \ - (((uint64_t)(A) & 0x00000000ffffffffLL) << 32)) -]]], -[[[ - uint64_t i0; - uint64_t i1; - uint8_t c[8]; - double d; - - d = 8.642135e130; - memcpy ((void *) &i0, (void *) &d, 8); - - i1 = intswap (i0); - memcpy ((void *) c, (void *) &i1, 8); - - if ((c[0] == 0x2f) && (c[1] == 0x25) - && (c[2] == 0xc0) && (c[3] == 0xc7) - && (c[4] == 0x43) && (c[5] == 0x2b) - && (c[6] == 0x1f) && (c[7] == 0x5b)) - return (0); - else - return (1); -]]] - )], - [c_cv_fp_layout_need_intswap="yes"], - [c_cv_fp_layout_need_intswap="no"] - ) + [ + AC_RUN_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + #include + #include + #include + #define intswap(A) ((((uint64_t)(A) & 0xffffffff00000000LL) >> 32) | \ + (((uint64_t)(A) & 0x00000000ffffffffLL) << 32)) + ]], + [[ + uint64_t i0; + uint64_t i1; + uint8_t c[8]; + double d; + + d = 8.642135e130; + memcpy ((void *) &i0, (void *) &d, 8); + + i1 = intswap (i0); + memcpy ((void *) c, (void *) &i1, 8); + + if ((c[0] == 0x2f) && (c[1] == 0x25) + && (c[2] == 0xc0) && (c[3] == 0xc7) + && (c[4] == 0x43) && (c[5] == 0x2b) + && (c[6] == 0x1f) && (c[7] == 0x5b)) + return 0; + return 1; + ]] + ) + ], + [c_cv_fp_layout_need_intswap="yes"], + [c_cv_fp_layout_need_intswap="no"] + ) + ] ) - if test "x$c_cv_fp_layout_need_intswap" = "xyes"; then - fp_layout_type="intswap" - fi +fi + +if test "x$c_cv_fp_layout_need_intswap" = "xyes"; then + fp_layout_type="intswap" fi if test "x$fp_layout_type" = "xnothing"; then - AC_DEFINE(FP_LAYOUT_NEED_NOTHING, 1, - [Define if doubles are stored in x86 representation.]) + AC_DEFINE([FP_LAYOUT_NEED_NOTHING], [1], + [Define if doubles are stored in x86 representation.] + ) else if test "x$fp_layout_type" = "xendianflip"; then - AC_DEFINE(FP_LAYOUT_NEED_ENDIANFLIP, 1, - [Define if endianflip is needed to convert to x86 representation.]) + AC_DEFINE([FP_LAYOUT_NEED_ENDIANFLIP], [1], + [Define if endianflip is needed to convert to x86 representation.] + ) else if test "x$fp_layout_type" = "xintswap"; then - AC_DEFINE(FP_LAYOUT_NEED_INTSWAP, 1, - [Define if intswap is needed to convert to x86 representation.]) + AC_DEFINE([FP_LAYOUT_NEED_INTSWAP], [1], + [Define if intswap is needed to convert to x86 representation.] + ) else AC_MSG_ERROR([Didn't find out how doubles are stored in memory. Sorry.]) fi; fi; fi +# For cpusleep plugin +AC_CACHE_CHECK([whether clock_boottime and clock_monotonic are supported], + [c_cv_have_clock_boottime_monotonic], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[ + struct timespec b, m; + clock_gettime(CLOCK_BOOTTIME, &b ); + clock_gettime(CLOCK_MONOTONIC, &m ); + ]] + ) + ], + [c_cv_have_clock_boottime_monotonic="yes"], + [c_cv_have_clock_boottime_monotonic="no"] + ) + ] +) + # --with-useragent {{{ -AC_ARG_WITH(useragent, [AS_HELP_STRING([--with-useragent@<:@=AGENT@:>@], [User agent to use on http requests])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - AC_DEFINE_UNQUOTED(COLLECTD_USERAGENT, ["$withval"], [User agent for http requests]) +AC_ARG_WITH([useragent], + [AS_HELP_STRING([--with-useragent@<:@=AGENT@:>@], [User agent to use on http requests])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + AC_DEFINE_UNQUOTED([COLLECTD_USERAGENT], ["$withval"], [User agent for http requests]) fi -]) + ] +) # }}} # --with-data-max-name-len {{{ -AC_ARG_WITH(data-max-name-len, [AS_HELP_STRING([--with-data-max-name-len@<:@=VALUE@:>@], [Maximum length of data buffers])], -[ - if test "x$withval" != "x" && test $withval -gt 0 - then - AC_DEFINE_UNQUOTED(DATA_MAX_NAME_LEN, [$withval], [Maximum length of data buffers]) +AC_ARG_WITH([data-max-name-len], + [AS_HELP_STRING([--with-data-max-name-len@<:@=VALUE@:>@], [Maximum length of data buffers])], + [ + if test "x$withval" != "x" && test $withval -gt 0; then + AC_DEFINE_UNQUOTED([DATA_MAX_NAME_LEN], [$withval], [Maximum length of data buffers]) else - AC_MSG_ERROR([DATA_MAX_NAME_LEN must be a positive integer -- $withval given]) + AC_MSG_ERROR([DATA_MAX_NAME_LEN must be a positive integer -- $withval given]) fi -], -[ AC_DEFINE(DATA_MAX_NAME_LEN, 128, [Maximum length of data buffers])] + ], + [AC_DEFINE([DATA_MAX_NAME_LEN], [128], [Maximum length of data buffers])] ) # }}} -have_getfsstat="no" -AC_CHECK_FUNCS(getfsstat, [have_getfsstat="yes"]) -have_getvfsstat="no" -AC_CHECK_FUNCS(getvfsstat, [have_getvfsstat="yes"]) -have_listmntent="no" -AC_CHECK_FUNCS(listmntent, [have_listmntent="yes"]) -have_getmntent_r="no" -AC_CHECK_FUNCS(getmntent_r, [have_getmntent_r="yes"]) - -have_getmntent="no" -AC_CHECK_FUNCS(getmntent, [have_getmntent="c"]) +AC_CHECK_FUNCS([getfsstat], [have_getfsstat="yes"], [have_getfsstat="no"]) +AC_CHECK_FUNCS(getvfsstat, [have_getvfsstat="yes"], [have_getvfsstat="no"]) +AC_CHECK_FUNCS(listmntent, [have_listmntent="yes"], [have_listmntent="no"]) +AC_CHECK_FUNCS(getmntent_r, [have_getmntent_r="yes"], [have_getmntent_r="no"]) + +AC_CHECK_FUNCS(getmntent, [have_getmntent="libc"], [have_getmntent="no"]) if test "x$have_getmntent" = "xno"; then - AC_CHECK_LIB(sun, getmntent, [have_getmntent="sun"]) + AC_CHECK_LIB([sun], [getmntent], + [have_getmntent="sun"], + [have_gemntent="no"] + ) fi + if test "x$have_getmntent" = "xno"; then - AC_CHECK_LIB(seq, getmntent, [have_getmntent="seq"]) + AC_CHECK_LIB([seq], [getmntent], + [have_getmntent="seq"], + [have_getmntent="no"] + ) fi + if test "x$have_getmntent" = "xno"; then - AC_CHECK_LIB(gen, getmntent, [have_getmntent="gen"]) + AC_CHECK_LIB([gen], [getmntent], + [have_getmntent="gen"], + [have_getmntent="no"] + ) fi -if test "x$have_getmntent" = "xc"; then - AC_CACHE_CHECK([whether getmntent takes one argument], - [c_cv_have_one_getmntent], - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( -[[[ -#include "$srcdir/src/utils_mount.h" -]]], -[[[ -FILE *fh; -struct mntent *me; -fh = setmntent ("/etc/mtab", "r"); -me = getmntent (fh); -return(me->mnt_passno); -]]] - )], - [c_cv_have_one_getmntent="yes"], - [c_cv_have_one_getmntent="no"] - ) - ) - AC_CACHE_CHECK([whether getmntent takes two arguments], - [c_cv_have_two_getmntent], - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( -[[[ -#include "$srcdir/src/utils_mount.h" -]]], -[[[ - FILE *fh; - struct mnttab mt; - int status; - fh = fopen ("/etc/mnttab", "r"); - status = getmntent (fh, &mt); - return(status); -]]] - )], - [c_cv_have_two_getmntent="yes"], - [c_cv_have_two_getmntent="no"] - ) - ) +if test "x$have_getmntent" = "xlibc"; then + AC_CACHE_CHECK([whether getmntent takes one argument], + [c_cv_have_one_getmntent], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include "$srcdir/src/utils_mount.h"]], + [[ + FILE *fh; + struct mntent *me; + fh = setmntent ("/etc/mtab", "r"); + me = getmntent (fh); + return(me->mnt_passno); + ]] + ) + ], + [c_cv_have_one_getmntent="yes"], + [c_cv_have_one_getmntent="no"] + ) + ] + ) + + AC_CACHE_CHECK([whether getmntent takes two arguments], + [c_cv_have_two_getmntent], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include "$srcdir/src/utils_mount.h"]], + [[ + FILE *fh; + struct mnttab mt; + int status; + fh = fopen ("/etc/mnttab", "r"); + status = getmntent (fh, &mt); + return(status); + ]] + ) + ], + [c_cv_have_two_getmntent="yes"], + [c_cv_have_two_getmntent="no"] + ) + ] + ) fi # Check for different versions of `getmntent' here.. -if test "x$have_getmntent" = "xc"; then - if test "x$c_cv_have_one_getmntent" = "xyes"; then - AC_DEFINE(HAVE_ONE_GETMNTENT, 1, - [Define if the function getmntent exists and takes one argument.]) - fi - if test "x$c_cv_have_two_getmntent" = "xyes"; then - AC_DEFINE(HAVE_TWO_GETMNTENT, 1, - [Define if the function getmntent exists and takes two arguments.]) - fi +if test "x$have_getmntent" = "xlibc"; then + if test "x$c_cv_have_one_getmntent" = "xyes"; then + AC_DEFINE([HAVE_ONE_GETMNTENT], [1], + [Define if the function getmntent exists and takes one argument.] + ) + fi + + if test "x$c_cv_have_two_getmntent" = "xyes"; then + AC_DEFINE([HAVE_TWO_GETMNTENT], [1], + [Define if the function getmntent exists and takes two arguments.] + ) + fi fi + if test "x$have_getmntent" = "xsun"; then - AC_DEFINE(HAVE_SUN_GETMNTENT, 1, - [Define if the function getmntent exists. It is the version from libsun.]) -fi -if test "x$have_getmntent" = "xseq"; then - AC_DEFINE(HAVE_SEQ_GETMNTENT, 1, - [Define if the function getmntent exists. It is the version from libseq.]) + AC_DEFINE([HAVE_SUN_GETMNTENT], [1], + [Define if the function getmntent exists. It is the version from libsun.] + ) fi + if test "x$have_getmntent" = "xgen"; then - AC_DEFINE(HAVE_GEN_GETMNTENT, 1, - [Define if the function getmntent exists. It is the version from libgen.]) + AC_DEFINE([HAVE_GEN_GETMNTENT], [1], + [Define if the function getmntent exists. It is the version from libgen.] + ) fi # Check for htonll -AC_CACHE_CHECK([if have htonll defined], - [c_cv_have_htonll], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#if HAVE_INTTYPES_H -# include -#endif -]]], -[[[ - return htonll(0); -]]] - )], - [c_cv_have_htonll="yes"], - [c_cv_have_htonll="no"] - ) +AC_CACHE_CHECK([whether htonll is defined], + [c_cv_have_htonll], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + ]], + [[return htonll(0);]] + ) + ], + [c_cv_have_htonll="yes"], + [c_cv_have_htonll="no"] + ) + ] ) -if test "x$c_cv_have_htonll" = "xyes" -then - AC_DEFINE(HAVE_HTONLL, 1, [Define if the function htonll exists.]) + +if test "x$c_cv_have_htonll" = "xyes"; then + AC_DEFINE([HAVE_HTONLL], [1], [Define if the function htonll exists.]) fi # Check for structures AC_CHECK_MEMBERS([struct if_data.ifi_ibytes, struct if_data.ifi_opackets, struct if_data.ifi_ierrors], - [AC_DEFINE(HAVE_STRUCT_IF_DATA, 1, [Define if struct if_data exists and is usable.])], - [], - [ - #include - #include - #include - ]) + [AC_DEFINE([HAVE_STRUCT_IF_DATA], [1], [Define if struct if_data exists and is usable.])], + [], + [[ + #include + #include + #include + ]] +) + AC_CHECK_MEMBERS([struct net_device_stats.rx_bytes, struct net_device_stats.tx_packets, struct net_device_stats.rx_errors], - [AC_DEFINE(HAVE_STRUCT_NET_DEVICE_STATS, 1, [Define if struct net_device_stats exists and is usable.])], - [], - [ - #include - #include - #include - #include - ]) -AC_CHECK_MEMBERS([struct inet_diag_req.id, struct inet_diag_req.idiag_states], - [AC_DEFINE(HAVE_STRUCT_LINUX_INET_DIAG_REQ, 1, [Define if struct inet_diag_req exists and is usable.])], - [], - [ - #include - ]) + [AC_DEFINE([HAVE_STRUCT_NET_DEVICE_STATS], [1], [Define if struct net_device_stats exists and is usable.])], + [], + [[ + #include + #include + #include + #include + ]] +) +AC_CHECK_MEMBERS([struct inet_diag_req.id, struct inet_diag_req.idiag_states], + [AC_DEFINE([HAVE_STRUCT_LINUX_INET_DIAG_REQ], [1], [Define if struct inet_diag_req exists and is usable.])], + [], + [[#include ]] +) AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], - [], - [ - #include - #include - ]) + [], + [[ + #include + #include + ]] +) AC_CHECK_MEMBERS([struct kinfo_proc.ki_pid, struct kinfo_proc.ki_rssize, struct kinfo_proc.ki_rusage], - [ - AC_DEFINE(HAVE_STRUCT_KINFO_PROC_FREEBSD, 1, - [Define if struct kinfo_proc exists in the FreeBSD variant.]) - have_struct_kinfo_proc_freebsd="yes" - ], - [ - have_struct_kinfo_proc_freebsd="no" - ], - [ -#include -#include -#include -#include - ]) + [ + AC_DEFINE([HAVE_STRUCT_KINFO_PROC_FREEBSD], [1], [Define if struct kinfo_proc exists in the FreeBSD variant.]) + have_struct_kinfo_proc_freebsd="yes" + ], + [], + [[ + #include + #include + #include + #include + ]] +) AC_CHECK_MEMBERS([struct kinfo_proc.p_pid, struct kinfo_proc.p_vm_rssize], - [ - AC_DEFINE(HAVE_STRUCT_KINFO_PROC_OPENBSD, 1, - [Define if struct kinfo_proc exists in the OpenBSD variant.]) - have_struct_kinfo_proc_openbsd="yes" - ], - [ - have_struct_kinfo_proc_openbsd="no" - ], - [ -#include -#include -#include - ]) - + [ + AC_DEFINE([HAVE_STRUCT_KINFO_PROC_OPENBSD], [1], [Define if struct kinfo_proc exists in the OpenBSD variant.]) + have_struct_kinfo_proc_openbsd="yes" + ], + [], + [[ + #include + #include + #include + ]] +) AC_CHECK_MEMBERS([struct kinfo_proc2.p_pid, struct kinfo_proc2.p_uru_maxrss], - [ - AC_DEFINE(HAVE_STRUCT_KINFO_PROC2_NETBSD, 1, - [Define if struct kinfo_proc2 exists in the NetBSD variant.]) - have_struct_kinfo_proc2_netbsd="yes" - ], - [ - have_struct_kinfo_proc2_netbsd="no" - ], - [ -#include -#include -#include - ]) - - - -AC_CHECK_MEMBERS([struct udphdr.uh_dport, struct udphdr.uh_sport], [], [], -[#define _BSD_SOURCE -#define _DEFAULT_SOURCE -#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -#if HAVE_NETINET_UDP_H -# include -#endif -]) -AC_CHECK_MEMBERS([struct udphdr.dest, struct udphdr.source], [], [], -[#define _BSD_SOURCE -#define _DEFAULT_SOURCE -#if HAVE_STDINT_H -# include -#endif -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_NETINET_IN_SYSTM_H -# include -#endif -#if HAVE_NETINET_IN_H -# include -#endif -#if HAVE_NETINET_IP_H -# include -#endif -#if HAVE_NETINET_UDP_H -# include -#endif -]) + [ + AC_DEFINE([HAVE_STRUCT_KINFO_PROC2_NETBSD], [1], [Define if struct kinfo_proc2 exists in the NetBSD variant.]) + have_struct_kinfo_proc2_netbsd="yes" + ], + [], + [[ + #include + #include + #include + ]] +) + +AC_CHECK_MEMBERS([struct udphdr.uh_dport, struct udphdr.uh_sport], + [], + [], + [[ + #define _BSD_SOURCE + #define _DEFAULT_SOURCE + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + #if HAVE_NETINET_UDP_H + # include + #endif + ]] +) + +AC_CHECK_MEMBERS([struct udphdr.dest, struct udphdr.source], + [], + [], + [[ + #define _BSD_SOURCE + #define _DEFAULT_SOURCE + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP_H + # include + #endif + #if HAVE_NETINET_UDP_H + # include + #endif + ]] +) AC_CHECK_MEMBERS([kstat_io_t.nwritten, kstat_io_t.writes, kstat_io_t.nwrites, kstat_io_t.wtime], - [], - [], - [ -#if HAVE_KSTAT_H -# include -#endif - ]) + [], + [], + [[# include ]] +) # check for pthread_setname_np SAVE_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -lpthread" AC_MSG_CHECKING([for pthread_setname_np]) - have_pthread_setname_np="no" - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[ -#define _GNU_SOURCE -#include -]], -[[ - pthread_setname_np((pthread_t) {0}, "conftest"); -]] - )], [ - have_pthread_setname_np="yes" - AC_DEFINE(HAVE_PTHREAD_SETNAME_NP, 1, [pthread_setname_np() is available.]) - ]) +have_pthread_setname_np="no" +AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #define _GNU_SOURCE + #include + ]], + [[pthread_setname_np((pthread_t) {0}, "conftest");]] + ) + ], + [ + have_pthread_setname_np="yes" + AC_DEFINE(HAVE_PTHREAD_SETNAME_NP, 1, [pthread_setname_np() is available.]) + ] +) AC_MSG_RESULT([$have_pthread_setname_np]) # check for pthread_set_name_np(3) (FreeBSD) AC_MSG_CHECKING([for pthread_set_name_np]) - have_pthread_set_name_np="no" - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[ -#include -]], -[[ - pthread_set_name_np((pthread_t) {0}, "conftest"); -]] - )], [ - have_pthread_set_name_np="yes" - AC_DEFINE(HAVE_PTHREAD_SET_NAME_NP, 1, [pthread_set_name_np() is available.]) - ]) +have_pthread_set_name_np="no" +AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include ]], + [[pthread_set_name_np((pthread_t) {0}, "conftest");]] + ) + ], + [ + have_pthread_set_name_np="yes" + AC_DEFINE(HAVE_PTHREAD_SET_NAME_NP, 1, [pthread_set_name_np() is available.]) + ] +) AC_MSG_RESULT([$have_pthread_set_name_np]) LDFLAGS="$SAVE_LDFLAGS" -# -# Checks for libraries begin here -# +AC_CHECK_TYPES([struct ip6_ext], + [have_ip6_ext="yes"], + [have_ip6_ext="no"], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP6_H + # include + #endif + ]] +) -with_libresolv="yes" -AC_CHECK_LIB(resolv, res_search, -[ - AC_DEFINE(HAVE_LIBRESOLV, 1, [Define to 1 if you have the 'resolv' library (-lresolv).]) -], -[with_libresolv="no"]) -AM_CONDITIONAL(BUILD_WITH_LIBRESOLV, test "x$with_libresolv" = "xyes") +if test "x$have_ip6_ext" = "xno"; then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -DSOLARIS2=8" + AC_CHECK_TYPES([struct ip6_ext], + [have_ip6_ext="yes, with -DSOLARIS2=8"], + [have_ip6_ext="no"], + [[ + #include + #if HAVE_SYS_TYPES_H + # include + #endif + #if HAVE_NETINET_IN_SYSTM_H + # include + #endif + #if HAVE_NETINET_IN_H + # include + #endif + #if HAVE_NETINET_IP6_H + # include + #endif + ]] + ) + if test "x$have_ip6_ext" = "xno"; then + CFLAGS="$SAVE_CFLAGS" + fi +fi -dnl Check for HAL (hardware abstraction library) -with_libhal="no" -PKG_CHECK_MODULES([HAL], [hal], - [ - SAVE_LIBS="$LIBS" - LIBS="$HAL_LIBS $LIBS" - AC_CHECK_LIB([hal], [libhal_device_property_exists], - [ - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$HAL_CFLAGS $CPPFLAGS" - AC_CHECK_HEADERS([libhal.h], - [ - with_libhal="yes" - BUILD_WITH_LIBHAL_CFLAGS="$HAL_CFLAGS" - BUILD_WITH_LIBHAL_LIBS="$HAL_LIBS" - ]) - CPPFLAGS="$SAVE_CPPFLAGS" - ], - [ : ] - ) - LIBS="$SAVE_LIBS" - ], - [ : ] -) -AC_SUBST(BUILD_WITH_LIBHAL_CFLAGS) -AC_SUBST(BUILD_WITH_LIBHAL_LIBS) +# libi2c-dev +if test "x$ac_system" = "xLinux"; then + AC_CHECK_DECL([i2c_smbus_read_i2c_block_data], + [with_libi2c="yes"], + [with_libi2c="no (symbol i2c_smbus_read_i2c_block_data not found - have you installed libi2c-dev ?)"], + [[ + #include + #include + ]] + ) +else + with_libi2c="no (Linux only)" +fi +# +# Checks for libraries begin here +# +# Check for libpthread SAVE_LIBS="$LIBS" AC_CHECK_LIB([pthread], [pthread_create], [], - [AC_MSG_ERROR([Symbol 'pthread_create' not found in libpthread"])], + [AC_MSG_ERROR([Symbol 'pthread_create' not found in libpthread])], [] ) PTHREAD_LIBS="$LIBS" LIBS="$SAVE_LIBS" +AC_SUBST([PTHREAD_LIBS]) AC_CHECK_HEADERS([pthread.h], [], [AC_MSG_ERROR([pthread.h not found])] ) -AC_SUBST([PTHREAD_LIBS]) m4_divert_once([HELP_WITH], [ -collectd additional packages:]) +Collectd additional packages:]) -if test "x$ac_system" = "xAIX" -then - with_perfstat="yes" - with_procinfo="yes" +if test "x$ac_system" = "xAIX"; then + with_perfstat="yes" + with_procinfo="yes" else - with_perfstat="no (AIX only)" - with_procinfo="no (AIX only)" + with_perfstat="no (AIX only)" + with_procinfo="no (AIX only)" fi -if test "x$with_perfstat" = "xyes" -then - AC_CHECK_LIB(perfstat, perfstat_reset, [with_perfstat="yes"], [with_perfstat="no (perfstat not found)"], []) -# AC_CHECK_HEADERS(sys/protosw.h libperfstat.h,, [with_perfstat="no (perfstat not found)"]) +if test "x$with_perfstat" = "xyes"; then + AC_CHECK_LIB([perfstat], [perfstat_reset], + [with_perfstat="yes"], + [with_perfstat="no (perfstat not found)"] + ) fi -if test "x$with_perfstat" = "xyes" -then - AC_DEFINE(HAVE_PERFSTAT, 1, [Define to 1 if you have the 'perfstat' library (-lperfstat)]) - # struct members pertaining to donation have been added to libperfstat somewhere between AIX5.3ML5 and AIX5.3ML9 - AC_CHECK_MEMBER([perfstat_partition_type_t.b.donate_enabled], [], [], [[#include @], [Path to aquatools-ng source code.])], -[ - if test "x$withval" = "xyes" - then - with_libaquaero5="yes" - else if test "x$withval" = "xno" - then - with_libaquaero5="no" - else - with_libaquaero5="yes" - LIBAQUAERO5_CFLAGS="$LIBAQUAERO5_CFLAGS -I$withval/src" - LIBAQUAERO5_LDFLAGS="$LIBAQUAERO5_LDFLAGS -L$withval/obj" - fi; fi -], -[with_libaquaero5="yes"]) +AM_CONDITIONAL([BUILD_WITH_LIBKVM_GETSWAPINFO], [test "x$with_kvm_getswapinfo" = "xyes"]) + +AC_CHECK_LIB([kvm], [kvm_nlist], + [with_kvm_nlist="yes"], + [with_kvm_nlist="no"] +) + +if test "x$with_kvm_nlist" = "xyes"; then + AC_CHECK_HEADERS([bsd/nlist.h nlist.h]) + AC_DEFINE([HAVE_LIBKVM_NLIST], [1], + [Define to 1 if you have the 'kvm' library with the 'kvm_nlist' symbol (-lkvm)] + ) + with_libkvm="yes" +fi + +AM_CONDITIONAL([BUILD_WITH_LIBKVM_NLIST], [test "x$with_kvm_nlist" = "xyes"]) + +AC_CHECK_LIB([kvm], [kvm_openfiles], + [with_kvm_openfiles="yes"], + [with_kvm_openfiles="no"] +) + +if test "x$with_kvm_openfiles" = "xyes"; then + AC_DEFINE([HAVE_LIBKVM_NLIST], [1], + [Define to 1 if you have the 'kvm' library with the 'kvm_openfiles' symbol (-lkvm)] + ) + with_libkvm="yes" +fi + +# --with-libaquaero5 {{{ +AC_ARG_WITH([libaquaero5], + [AS_HELP_STRING([--with-libaquaero5@<:@=PREFIX@:>@], [Path to aquatools-ng source code.])], + [ + if test "x$withval" = "xyes"; then + with_libaquaero5="yes" + else if test "x$withval" = "xno"; then + with_libaquaero5="no" + else + with_libaquaero5="yes" + LIBAQUAERO5_CFLAGS="$LIBAQUAERO5_CFLAGS -I$withval/src" + LIBAQUAERO5_LDFLAGS="$LIBAQUAERO5_LDFLAGS -L$withval/obj" + fi; fi + ], + [with_libaquaero5="yes"] +) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $LIBAQUAERO5_CFLAGS" LDFLAGS="$LDFLAGS $LIBAQUAERO5_LDFLAGS" -if test "x$with_libaquaero5" = "xyes" -then - if test "x$LIBAQUAERO5_CFLAGS" != "x" - then - AC_MSG_NOTICE([libaquaero5 CPPFLAGS: $LIBAQUAERO5_CFLAGS]) - fi - AC_CHECK_HEADERS(libaquaero5.h, - [with_libaquaero5="yes"], - [with_libaquaero5="no (libaquaero5.h not found)"]) -fi -if test "x$with_libaquaero5" = "xyes" -then - if test "x$LIBAQUAERO5_LDFLAGS" != "x" - then - AC_MSG_NOTICE([libaquaero5 LDFLAGS: $LIBAQUAERO5_LDFLAGS]) - fi - AC_CHECK_LIB(aquaero5, libaquaero5_poll, - [with_libaquaero5="yes"], - [with_libaquaero5="no (symbol 'libaquaero5_poll' not found)"]) +if test "x$with_libaquaero5" = "xyes"; then + if test "x$LIBAQUAERO5_CFLAGS" != "x"; then + AC_MSG_NOTICE([libaquaero5 CPPFLAGS: $LIBAQUAERO5_CFLAGS]) + fi + AC_CHECK_HEADERS([libaquaero5.h], + [with_libaquaero5="yes"], + [with_libaquaero5="no (libaquaero5.h not found)"] + ) +fi + +if test "x$with_libaquaero5" = "xyes"; then + if test "x$LIBAQUAERO5_LDFLAGS" != "x"; then + AC_MSG_NOTICE([libaquaero5 LDFLAGS: $LIBAQUAERO5_LDFLAGS]) + fi + AC_CHECK_LIB([aquaero5], libaquaero5_poll, + [with_libaquaero5="yes"], + [with_libaquaero5="no (symbol 'libaquaero5_poll' not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" -if test "x$with_libaquaero5" = "xyes" -then - BUILD_WITH_LIBAQUAERO5_CFLAGS="$LIBAQUAERO5_CFLAGS" - BUILD_WITH_LIBAQUAERO5_LDFLAGS="$LIBAQUAERO5_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBAQUAERO5_CFLAGS) - AC_SUBST(BUILD_WITH_LIBAQUAERO5_LDFLAGS) +if test "x$with_libaquaero5" = "xyes"; then + BUILD_WITH_LIBAQUAERO5_CFLAGS="$LIBAQUAERO5_CFLAGS" + BUILD_WITH_LIBAQUAERO5_LDFLAGS="$LIBAQUAERO5_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBAQUAERO5, test "x$with_libaquaero5" = "xyes") +AC_SUBST([BUILD_WITH_LIBAQUAERO5_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBAQUAERO5_LDFLAGS]) # }}} # --with-libhiredis {{{ -AC_ARG_WITH(libhiredis, [AS_HELP_STRING([--with-libhiredis@<:@=PREFIX@:>@], - [Path to libhiredis.])], -[ - if test "x$withval" = "xyes" - then - with_libhiredis="yes" - else if test "x$withval" = "xno" - then - with_libhiredis="no" - else - with_libhiredis="yes" - LIBHIREDIS_CPPFLAGS="$LIBHIREDIS_CPPFLAGS -I$withval/include" - LIBHIREDIS_LDFLAGS="$LIBHIREDIS_LDFLAGS -L$withval/lib" - fi; fi -], -[with_libhiredis="yes"]) +AC_ARG_WITH([libhiredis], + [AS_HELP_STRING([--with-libhiredis@<:@=PREFIX@:>@], [Path to libhiredis.])], + [ + if test "x$withval" = "xyes"; then + with_libhiredis="yes" + else if test "x$withval" = "xno"; then + with_libhiredis="no" + else + with_libhiredis="yes" + LIBHIREDIS_CPPFLAGS="$LIBHIREDIS_CPPFLAGS -I$withval/include" + LIBHIREDIS_LDFLAGS="$LIBHIREDIS_LDFLAGS -L$withval/lib" + fi; fi + ], + [with_libhiredis="yes"] +) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $LIBHIREDIS_CPPFLAGS" LDFLAGS="$LDFLAGS $LIBHIREDIS_LDFLAGS" -if test "x$with_libhiredis" = "xyes" -then - if test "x$LIBHIREDIS_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([libhiredis CPPFLAGS: $LIBHIREDIS_CPPFLAGS]) - fi - AC_CHECK_HEADERS(hiredis/hiredis.h, - [with_libhiredis="yes"], - [with_libhiredis="no (hiredis.h not found)"]) -fi -if test "x$with_libhiredis" = "xyes" -then - if test "x$LIBHIREDIS_LDFLAGS" != "x" - then - AC_MSG_NOTICE([libhiredis LDFLAGS: $LIBHIREDIS_LDFLAGS]) - fi - AC_CHECK_LIB(hiredis, redisCommand, - [with_libhiredis="yes"], - [with_libhiredis="no (symbol 'redisCommand' not found)"]) +if test "x$with_libhiredis" = "xyes"; then + if test "x$LIBHIREDIS_CPPFLAGS" != "x"; then + AC_MSG_NOTICE([libhiredis CPPFLAGS: $LIBHIREDIS_CPPFLAGS]) + fi + AC_CHECK_HEADERS([hiredis/hiredis.h], + [with_libhiredis="yes"], + [with_libhiredis="no (hiredis.h not found)"] + ) +fi +if test "x$with_libhiredis" = "xyes"; then + if test "x$LIBHIREDIS_LDFLAGS" != "x"; then + AC_MSG_NOTICE([libhiredis LDFLAGS: $LIBHIREDIS_LDFLAGS]) + fi + AC_CHECK_LIB([hiredis], [redisCommand], + [with_libhiredis="yes"], + [with_libhiredis="no (symbol 'redisCommand' not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" -if test "x$with_libhiredis" = "xyes" -then - BUILD_WITH_LIBHIREDIS_CPPFLAGS="$LIBHIREDIS_CPPFLAGS" - BUILD_WITH_LIBHIREDIS_LDFLAGS="$LIBHIREDIS_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBHIREDIS_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBHIREDIS_LDFLAGS) +if test "x$with_libhiredis" = "xyes"; then + BUILD_WITH_LIBHIREDIS_CPPFLAGS="$LIBHIREDIS_CPPFLAGS" + BUILD_WITH_LIBHIREDIS_LDFLAGS="$LIBHIREDIS_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBHIREDIS, test "x$with_libhiredis" = "xyes") + +AC_SUBST([BUILD_WITH_LIBHIREDIS_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBHIREDIS_LDFLAGS]) # }}} # --with-libcurl {{{ with_curl_config="curl-config" with_curl_cflags="" with_curl_libs="" -AC_ARG_WITH(libcurl, [AS_HELP_STRING([--with-libcurl@<:@=PREFIX@:>@], [Path to libcurl.])], -[ - if test "x$withval" = "xno" - then - with_libcurl="no" - else if test "x$withval" = "xyes" - then - with_libcurl="yes" - else - if test -f "$withval" && test -x "$withval" - then - with_curl_config="$withval" - with_libcurl="yes" - else if test -x "$withval/bin/curl-config" - then - with_curl_config="$withval/bin/curl-config" - with_libcurl="yes" - fi; fi - with_libcurl="yes" - fi; fi -], -[ - with_libcurl="yes" -]) -if test "x$with_libcurl" = "xyes" -then - with_curl_cflags=`$with_curl_config --cflags 2>/dev/null` - curl_config_status=$? +AC_ARG_WITH(libcurl, + [AS_HELP_STRING([--with-libcurl@<:@=PREFIX@:>@], [Path to libcurl.])], + [ + if test "x$withval" = "xno"; then + with_libcurl="no" + else if test "x$withval" = "xyes"; then + with_libcurl="yes" + else + if test -f "$withval" && test -x "$withval"; then + with_curl_config="$withval" + with_libcurl="yes" + else if test -x "$withval/bin/curl-config"; then + with_curl_config="$withval/bin/curl-config" + with_libcurl="yes" + fi; fi + with_libcurl="yes" + fi; fi + ], + [with_libcurl="yes"] +) - if test $curl_config_status -ne 0 - then - with_libcurl="no ($with_curl_config failed)" - else - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_curl_cflags" +if test "x$with_libcurl" = "xyes"; then + with_curl_cflags=`$with_curl_config --cflags 2>/dev/null` + curl_config_status=$? + + if test $curl_config_status -ne 0; then + with_libcurl="no ($with_curl_config failed)" + else + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_curl_cflags" - AC_CHECK_HEADERS(curl/curl.h, [], [with_libcurl="no (curl/curl.h not found)"], []) + AC_CHECK_HEADERS([curl/curl.h], + [with_libcurl="yes"], + [with_libcurl="no (curl/curl.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - fi + CPPFLAGS="$SAVE_CPPFLAGS" + fi fi -if test "x$with_libcurl" = "xyes" -then - with_curl_libs=`$with_curl_config --libs 2>/dev/null` - curl_config_status=$? - - if test $curl_config_status -ne 0 - then - with_libcurl="no ($with_curl_config failed)" - else - AC_CHECK_LIB(curl, curl_easy_init, - [with_libcurl="yes"], - [with_libcurl="no (symbol 'curl_easy_init' not found)"], - [$with_curl_libs]) - AC_CHECK_DECL(CURLOPT_USERNAME, - [have_curlopt_username="yes"], - [have_curlopt_username="no"], - [[#include ]]) - AC_CHECK_DECL(CURLOPT_TIMEOUT_MS, - [have_curlopt_timeout="yes"], - [have_curlopt_timeout="no"], - [[#include ]]) - fi -fi -if test "x$with_libcurl" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_curl_cflags" - LDFLAGS="$LDFLAGS $with_curl_libs" - AC_CACHE_CHECK([for CURLINFO_APPCONNECT_TIME], - [c_cv_have_curlinfo_appconnect_time], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[ -#include -]], -[[ -int val = CURLINFO_APPCONNECT_TIME; -return val; -]] - )], - [c_cv_have_curlinfo_appconnect_time="yes"], - [c_cv_have_curlinfo_appconnect_time="no"] - ) - ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" -fi -AM_CONDITIONAL(BUILD_WITH_LIBCURL, test "x$with_libcurl" = "xyes") -if test "x$c_cv_have_curlinfo_appconnect_time" = "xyes" -then - AC_DEFINE(HAVE_CURLINFO_APPCONNECT_TIME, 1, [Define if curl.h defines CURLINFO_APPCONNECT_TIME.]) + +if test "x$with_libcurl" = "xyes"; then + with_curl_libs=`$with_curl_config --libs 2>/dev/null` + curl_config_status=$? + + if test $curl_config_status -ne 0; then + with_libcurl="no ($with_curl_config failed)" + else + AC_CHECK_LIB([curl], [curl_easy_init], + [with_libcurl="yes"], + [with_libcurl="no (symbol 'curl_easy_init' not found)"], + [$with_curl_libs] + ) + + AC_CHECK_DECL([CURLOPT_USERNAME], + [have_curlopt_username="yes"], + [have_curlopt_username="no"], + [[#include ]] + ) + + AC_CHECK_DECL(CURLOPT_TIMEOUT_MS, + [have_curlopt_timeout="yes"], + [have_curlopt_timeout="no"], + [[#include ]] + ) + fi fi -if test "x$with_libcurl" = "xyes" -then - BUILD_WITH_LIBCURL_CFLAGS="$with_curl_cflags" - BUILD_WITH_LIBCURL_LIBS="$with_curl_libs" - AC_SUBST(BUILD_WITH_LIBCURL_CFLAGS) - AC_SUBST(BUILD_WITH_LIBCURL_LIBS) +if test "x$with_libcurl" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $with_curl_cflags" + LDFLAGS="$LDFLAGS $with_curl_libs" + AC_CACHE_CHECK([for CURLINFO_APPCONNECT_TIME], + [c_cv_have_curlinfo_appconnect_time], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include ]], + [[ + int val = CURLINFO_APPCONNECT_TIME; + return val; + ]] + ) + ], + [c_cv_have_curlinfo_appconnect_time="yes"], + [c_cv_have_curlinfo_appconnect_time="no"] + ) + ] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" +fi + +if test "x$c_cv_have_curlinfo_appconnect_time" = "xyes"; then + AC_DEFINE([HAVE_CURLINFO_APPCONNECT_TIME], [1], + [Define if curl.h defines CURLINFO_APPCONNECT_TIME.] + ) +fi - if test "x$have_curlopt_username" = "xyes" - then - AC_DEFINE(HAVE_CURLOPT_USERNAME, 1, [Define if libcurl supports CURLOPT_USERNAME option.]) - fi +if test "x$with_libcurl" = "xyes"; then + BUILD_WITH_LIBCURL_CFLAGS="$with_curl_cflags" + BUILD_WITH_LIBCURL_LIBS="$with_curl_libs" + + if test "x$have_curlopt_username" = "xyes"; then + AC_DEFINE([HAVE_CURLOPT_USERNAME], [1], + [Define if libcurl supports CURLOPT_USERNAME option.] + ) + fi - if test "x$have_curlopt_timeout" = "xyes" - then - AC_DEFINE(HAVE_CURLOPT_TIMEOUT_MS, 1, [Define if libcurl supports CURLOPT_TIMEOUT_MS option.]) - fi + if test "x$have_curlopt_timeout" = "xyes"; then + AC_DEFINE([HAVE_CURLOPT_TIMEOUT_MS], [1], + [Define if libcurl supports CURLOPT_TIMEOUT_MS option.] + ) + fi fi + +AC_SUBST(BUILD_WITH_LIBCURL_CFLAGS) +AC_SUBST(BUILD_WITH_LIBCURL_LIBS) # }}} # --with-libdbi {{{ -with_libdbi_cppflags="" -with_libdbi_ldflags="" -AC_ARG_WITH(libdbi, [AS_HELP_STRING([--with-libdbi@<:@=PREFIX@:>@], [Path to libdbi.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libdbi_cppflags="-I$withval/include" - with_libdbi_ldflags="-L$withval/lib" - with_libdbi="yes" - else - with_libdbi="$withval" - fi -], -[ - with_libdbi="yes" -]) -if test "x$with_libdbi" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libdbi_cppflags" +AC_ARG_WITH([libdbi], + [AS_HELP_STRING([--with-libdbi@<:@=PREFIX@:>@], [Path to libdbi.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libdbi_cppflags="-I$withval/include" + with_libdbi_ldflags="-L$withval/lib" + with_libdbi="yes" + else + with_libdbi="$withval" + fi + ], + [with_libdbi="yes"] +) + +if test "x$with_libdbi" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libdbi_cppflags" - AC_CHECK_HEADERS(dbi/dbi.h, [with_libdbi="yes"], [with_libdbi="no (dbi/dbi.h not found)"]) + AC_CHECK_HEADERS([dbi/dbi.h], + [with_libdbi="yes"], + [with_libdbi="no (dbi/dbi.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libdbi" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libdbi_cppflags" - LDFLAGS="$LDFLAGS $with_libdbi_ldflags" - AC_CHECK_LIB(dbi, dbi_initialize, [with_libdbi="yes"], [with_libdbi="no (Symbol 'dbi_initialize' not found)"]) +if test "x$with_libdbi" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libdbi_ldflags" + + AC_CHECK_LIB([dbi], [dbi_initialize], + [with_libdbi="yes"], + [with_libdbi="no (Symbol 'dbi_initialize' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libdbi" = "xyes" -then - BUILD_WITH_LIBDBI_CPPFLAGS="$with_libdbi_cppflags" - BUILD_WITH_LIBDBI_LDFLAGS="$with_libdbi_ldflags" - BUILD_WITH_LIBDBI_LIBS="-ldbi" - AC_SUBST(BUILD_WITH_LIBDBI_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBDBI_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBDBI_LIBS) -fi -AM_CONDITIONAL(BUILD_WITH_LIBDBI, test "x$with_libdbi" = "xyes") + +BUILD_WITH_LIBDBI_CPPFLAGS="$with_libdbi_cppflags" +BUILD_WITH_LIBDBI_LDFLAGS="$with_libdbi_ldflags" +BUILD_WITH_LIBDBI_LIBS="-ldbi" +AC_SUBST(BUILD_WITH_LIBDBI_CPPFLAGS) +AC_SUBST(BUILD_WITH_LIBDBI_LDFLAGS) +AC_SUBST(BUILD_WITH_LIBDBI_LIBS) # }}} -# --with-libesmtp {{{ -AC_ARG_WITH(libesmtp, [AS_HELP_STRING([--with-libesmtp@<:@=PREFIX@:>@], [Path to libesmtp.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - LDFLAGS="$LDFLAGS -L$withval/lib" - CPPFLAGS="$CPPFLAGS -I$withval/include -D_THREAD_SAFE" - with_libesmtp="yes" - else - with_libesmtp="$withval" - fi -], -[ - with_libesmtp="yes" -]) -if test "x$with_libesmtp" = "xyes" -then - AC_CHECK_LIB(esmtp, smtp_create_session, - [ - AC_DEFINE(HAVE_LIBESMTP, 1, [Define to 1 if you have the esmtp library (-lesmtp).]) - ], [with_libesmtp="no (libesmtp not found)"]) +# --with-libdpdk {{{ +AC_ARG_VAR([LIBDPDK_CPPFLAGS], [Preprocessor flags for libdpdk]) +AC_ARG_VAR([LIBDPDK_LDFLAGS], [Linker flags for libdpdk]) + +AC_ARG_WITH([libdpdk], + [AS_HELP_STRING([--without-libdpdk], [Disable libdpdk.])], + [with_libdpdk="$withval"], + [with_libdpdk="yes"] +) + +if test "x$with_libdpdk" != "xno"; then + if test "x$LIBDPDK_CPPFLAGS" = "x"; then + LIBDPDK_CPPFLAGS="-I/usr/include/dpdk" + fi + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$LIBDPDK_CPPFLAGS $CPPFLAGS" + AC_CHECK_HEADERS([rte_config.h], + [ + with_libdpdk="yes" + AC_PREPROC_IFELSE( + [ + AC_LANG_SOURCE( + [[ + #include + #if RTE_VERSION < RTE_VERSION_NUM(16,7,0,0) + #error "required DPDK >= 16.07" + #endif + ]] + ) + ], + [dpdk_keepalive="yes"], + [dpdk_keepalive="no (DPDK version < 16.07)"] + ) + ], + [with_libdpdk="no (rte_config.h not found)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libesmtp" = "xyes" -then - AC_CHECK_HEADERS(libesmtp.h, - [ - AC_DEFINE(HAVE_LIBESMTP_H, 1, [Define to 1 if you have the header file.]) - ], [with_libesmtp="no (libesmtp.h not found)"]) + +if test "x$with_libdpdk" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LIBDPDK_LDFLAGS $LDFLAGS" + AC_CHECK_LIB([dpdk], [rte_eal_init], + [with_libdpdk="yes"], + [with_libdpdk="no (symbol 'rte_eal_init' not found)"] + ) + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libesmtp" = "xyes" -then - collect_libesmtp=1 -else - collect_libesmtp=0 + +# }}} + +# --with-libesmtp {{{ +AC_ARG_WITH([libesmtp], + [AS_HELP_STRING([--with-libesmtp@<:@=PREFIX@:>@], [Path to libesmtp.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libesmtp_cppflags="-I$withval/include" + with_libesmtp_ldflags="-L$withval/lib" + with_libesmtp="yes" + else + with_libesmtp="$withval" + fi + ], + [with_libesmtp="yes"] +) + +if test "x$with_libesmtp" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libesmtp_cppflags" + + AC_CHECK_HEADERS([libesmtp.h], + [with_libesmtp="yes"], + [with_libesmtp="no (libesmtp.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" +fi + +if test "x$with_libesmtp" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_esmtp_ldflags" + + AC_CHECK_LIB([esmtp], [smtp_create_session], + [with_libesmtp="yes"], + [with_libesmtp="no (Symbol 'smtp_create_session' not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -AC_DEFINE_UNQUOTED(COLLECT_LIBESMTP, [$collect_libesmtp], - [Wether or not to use the esmtp library]) -AM_CONDITIONAL(BUILD_WITH_LIBESMTP, test "x$with_libesmtp" = "xyes") + +BUILD_WITH_LIBESMTP_CPPFLAGS="$with_libesmtp_cppflags" +BUILD_WITH_LIBESMTP_LDFLAGS="$with_libesmtp_ldflags" +BUILD_WITH_LIBESMTP_LIBS="-lesmtp" +AC_SUBST(BUILD_WITH_LIBESMTP_CPPFLAGS) +AC_SUBST(BUILD_WITH_LIBESMTP_LDFLAGS) +AC_SUBST(BUILD_WITH_LIBESMTP_LIBS) # }}} # --with-libganglia {{{ -AC_ARG_WITH(libganglia, [AS_HELP_STRING([--with-libganglia@<:@=PREFIX@:>@], [Path to libganglia.])], -[ - if test -f "$withval" && test -x "$withval" - then - with_libganglia_config="$withval" - with_libganglia="yes" - else if test -f "$withval/bin/ganglia-config" && test -x "$withval/bin/ganglia-config" - then - with_libganglia_config="$withval/bin/ganglia-config" - with_libganglia="yes" - else if test -d "$withval" - then - GANGLIA_CPPFLAGS="-I$withval/include" - GANGLIA_LDFLAGS="-L$withval/lib" - with_libganglia="yes" - else - with_libganglia="$withval" - fi; fi; fi -], -[ - with_libganglia="yes" -]) +AC_ARG_WITH([libganglia], + [AS_HELP_STRING([--with-libganglia@<:@=PREFIX@:>@], [Path to libganglia.])], + [ + if test -f "$withval" && test -x "$withval"; then + with_libganglia_config="$withval" + with_libganglia="yes" + else if test -f "$withval/bin/ganglia-config" && test -x "$withval/bin/ganglia-config"; then + with_libganglia_config="$withval/bin/ganglia-config" + with_libganglia="yes" + else if test -d "$withval"; then + GANGLIA_CPPFLAGS="-I$withval/include" + GANGLIA_LDFLAGS="-L$withval/lib" + with_libganglia="yes" + else + with_libganglia="$withval" + fi; fi; fi + ], + [with_libganglia="yes"] +) -if test "x$with_libganglia" = "xyes" -then - if test "x$with_libganglia_config" != "x" - then - if test "x$GANGLIA_CPPFLAGS" = "x" - then - GANGLIA_CPPFLAGS=`"$with_libganglia_config" --cflags 2>/dev/null` - fi - - if test "x$GANGLIA_LDFLAGS" = "x" - then - GANGLIA_LDFLAGS=`"$with_libganglia_config" --ldflags 2>/dev/null` - fi - - if test "x$GANGLIA_LIBS" = "x" - then - GANGLIA_LIBS=`"$with_libganglia_config" --libs 2>/dev/null` - fi - else - GANGLIA_LIBS="-lganglia" - fi +if test "x$with_libganglia" = "xyes"; then + if test "x$with_libganglia_config" != "x"; then + if test "x$GANGLIA_CPPFLAGS" = "x"; then + GANGLIA_CPPFLAGS=`"$with_libganglia_config" --cflags 2>/dev/null` + fi + + if test "x$GANGLIA_LDFLAGS" = "x"; then + GANGLIA_LDFLAGS=`"$with_libganglia_config" --ldflags 2>/dev/null` + fi + + if test "x$GANGLIA_LIBS" = "x"; then + GANGLIA_LIBS=`"$with_libganglia_config" --libs 2>/dev/null` + fi + else + GANGLIA_LIBS="-lganglia" + fi fi SAVE_CPPFLAGS="$CPPFLAGS" @@ -2358,22 +2489,18 @@ SAVE_LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $GANGLIA_CPPFLAGS" LDFLAGS="$LDFLAGS $GANGLIA_LDFLAGS" -if test "x$with_libganglia" = "xyes" -then - AC_CHECK_HEADERS(gm_protocol.h, - [ - AC_DEFINE(HAVE_GM_PROTOCOL_H, 1, - [Define to 1 if you have the header file.]) - ], [with_libganglia="no (gm_protocol.h not found)"]) +if test "x$with_libganglia" = "xyes"; then + AC_CHECK_HEADERS([gm_protocol.h], + [with_libganglia="yes"], + [with_libganglia="no (gm_protocol.h not found)"] + ) fi -if test "x$with_libganglia" = "xyes" -then - AC_CHECK_LIB(ganglia, xdr_Ganglia_value_msg, - [ - AC_DEFINE(HAVE_LIBGANGLIA, 1, - [Define to 1 if you have the ganglia library (-lganglia).]) - ], [with_libganglia="no (symbol xdr_Ganglia_value_msg not found)"]) +if test "x$with_libganglia" = "xyes"; then + AC_CHECK_LIB([ganglia], [xdr_Ganglia_value_msg], + [with_libganglia="yes"], + [with_libganglia="no (symbol xdr_Ganglia_value_msg not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" @@ -2382,49 +2509,44 @@ LDFLAGS="$SAVE_LDFLAGS" AC_SUBST(GANGLIA_CPPFLAGS) AC_SUBST(GANGLIA_LDFLAGS) AC_SUBST(GANGLIA_LIBS) -AM_CONDITIONAL(BUILD_WITH_LIBGANGLIA, test "x$with_libganglia" = "xyes") # }}} # --with-libgcrypt {{{ GCRYPT_CPPFLAGS="$GCRYPT_CPPFLAGS" GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS" GCRYPT_LIBS="$GCRYPT_LIBS" -AC_ARG_WITH(libgcrypt, [AS_HELP_STRING([--with-libgcrypt@<:@=PREFIX@:>@], [Path to libgcrypt.])], -[ - if test -f "$withval" && test -x "$withval" - then - with_libgcrypt_config="$withval" - with_libgcrypt="yes" - else if test -f "$withval/bin/gcrypt-config" && test -x "$withval/bin/gcrypt-config" - then - with_libgcrypt_config="$withval/bin/gcrypt-config" - with_libgcrypt="yes" - else if test -d "$withval" - then - GCRYPT_CPPFLAGS="$GCRYPT_CPPFLAGS -I$withval/include" - GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS -L$withval/lib" - with_libgcrypt="yes" - else - with_libgcrypt_config="gcrypt-config" - with_libgcrypt="$withval" - fi; fi; fi -], -[ - with_libgcrypt_config="libgcrypt-config" - with_libgcrypt="yes" -]) +AC_ARG_WITH([libgcrypt], + [AS_HELP_STRING([--with-libgcrypt@<:@=PREFIX@:>@], [Path to libgcrypt.])], + [ + if test -f "$withval" && test -x "$withval"; then + with_libgcrypt_config="$withval" + with_libgcrypt="yes" + else if test -f "$withval/bin/gcrypt-config" && test -x "$withval/bin/gcrypt-config"; then + with_libgcrypt_config="$withval/bin/gcrypt-config" + with_libgcrypt="yes" + else if test -d "$withval"; then + GCRYPT_CPPFLAGS="$GCRYPT_CPPFLAGS -I$withval/include" + GCRYPT_LDFLAGS="$GCRYPT_LDFLAGS -L$withval/lib" + with_libgcrypt="yes" + else + with_libgcrypt_config="gcrypt-config" + with_libgcrypt="$withval" + fi; fi; fi + ], + [ + with_libgcrypt_config="libgcrypt-config" + with_libgcrypt="yes" + ] +) -if test "x$with_libgcrypt" = "xyes" && test "x$with_libgcrypt_config" != "x" -then - if test "x$GCRYPT_CPPFLAGS" = "x" - then - GCRYPT_CPPFLAGS=`"$with_libgcrypt_config" --cflags 2>/dev/null` - fi +if test "x$with_libgcrypt" = "xyes" && test "x$with_libgcrypt_config" != "x"; then + if test "x$GCRYPT_CPPFLAGS" = "x"; then + GCRYPT_CPPFLAGS=`"$with_libgcrypt_config" --cflags 2>/dev/null` + fi - if test "x$GCRYPT_LIBS" = "x" - then - GCRYPT_LIBS=`"$with_libgcrypt_config" --libs 2>/dev/null` - fi + if test "x$GCRYPT_LIBS" = "x"; then + GCRYPT_LIBS=`"$with_libgcrypt_config" --libs 2>/dev/null` + fi fi SAVE_CPPFLAGS="$CPPFLAGS" @@ -2434,118 +2556,108 @@ CPPFLAGS="$CPPFLAGS $GCRYPT_CPPFLAGS" LDFLAGS="$LDFLAGS $GCRYPT_LDFLAGS" LIBS="$LIBS $GCRYPT_LIBS" -if test "x$with_libgcrypt" = "xyes" -then - if test "x$GCRYPT_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([gcrypt CPPFLAGS: $GCRYPT_CPPFLAGS]) - fi - AC_CHECK_HEADERS(gcrypt.h, - [with_libgcrypt="yes"], - [with_libgcrypt="no (gcrypt.h not found)"]) +if test "x$with_libgcrypt" = "xyes"; then + if test "x$GCRYPT_CPPFLAGS" != "x"; then + AC_MSG_NOTICE([gcrypt CPPFLAGS: $GCRYPT_CPPFLAGS]) + fi + AC_CHECK_HEADERS([gcrypt.h], + [with_libgcrypt="yes"], + [with_libgcrypt="no (gcrypt.h not found)"] + ) fi -if test "x$with_libgcrypt" = "xyes" -then - AC_CHECK_LIB(gcrypt, gcry_md_hash_buffer, - [with_libgcrypt="yes"], - [with_libgcrypt="no (symbol gcry_md_hash_buffer not found)"]) +if test "x$with_libgcrypt" = "xyes"; then + AC_CHECK_LIB(gcrypt, gcry_md_hash_buffer, + [with_libgcrypt="yes"], + [with_libgcrypt="no (symbol gcry_md_hash_buffer not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" -if test "x$with_libgcrypt" = "xyes" -then - AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define to 1 if you have the gcrypt library (-lgcrypt).]) -fi - -AC_SUBST(GCRYPT_CPPFLAGS) -AC_SUBST(GCRYPT_LDFLAGS) -AC_SUBST(GCRYPT_LIBS) -AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, test "x$with_libgcrypt" = "xyes") +AC_SUBST([GCRYPT_CPPFLAGS]) +AC_SUBST([GCRYPT_LDFLAGS]) +AC_SUBST([GCRYPT_LIBS]) +AM_CONDITIONAL([BUILD_WITH_LIBGCRYPT], [test "x$with_libgcrypt" = "xyes"]) # }}} # --with-libgps {{{ -with_libgps_cflags="" -with_libgps_ldflags="" -AC_ARG_WITH(libgps, [AS_HELP_STRING([--with-libgps@<:@=PREFIX@:>@], [Path to libgps.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libgps_cflags="-I$withval/include" - with_libgps_ldflags="-L$withval/lib" - with_libgps="yes" - else - with_libgps="$withval" - fi -], -[ - with_libgps="yes" -]) -if test "x$with_libgps" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $with_libgps_cflags" +AC_ARG_WITH([libgps], + [AS_HELP_STRING([--with-libgps@<:@=PREFIX@:>@], [Path to libgps.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libgps_cflags="-I$withval/include" + with_libgps_ldflags="-L$withval/lib" + with_libgps="yes" + else + with_libgps="$withval" + fi + ], + [with_libgps="yes"] +) - AC_CHECK_HEADERS(gps.h, [with_libgps="yes"], [with_libgps="no (gps.h not found)"]) +if test "x$with_libgps" = "xyes"; then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $with_libgps_cflags" + + AC_CHECK_HEADERS([gps.h], + [with_libgps="yes"], + [with_libgps="no (gps.h not found)"] + ) - CFLAGS="$SAVE_CFLAGS" + CFLAGS="$SAVE_CFLAGS" fi -if test "x$with_libgps" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS $with_libgps_cflags" - LDFLAGS="$LDFLAGS $with_libgps_ldflags" - AC_CHECK_LIB(gps, gps_open, [with_libgps="yes"], [with_libgps="no (symbol gps_open not found)"]) +if test "x$with_libgps" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libgps_ldflags" + + AC_CHECK_LIB([gps], [gps_open], + [with_libgps="yes"], + [with_libgps="no (symbol gps_open not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" +fi - CFLAGS="$SAVE_CFLAGS" - LDFLAGS="$SAVE_LDFLAGS" +if test "x$with_libgps" = "xyes"; then + BUILD_WITH_LIBGPS_CFLAGS="$with_libgps_cflags" + BUILD_WITH_LIBGPS_LDFLAGS="$with_libgps_ldflags" + BUILD_WITH_LIBGPS_LIBS="-lgps" fi -if test "x$with_libgps" = "xyes" -then - BUILD_WITH_LIBGPS_CFLAGS="$with_libgps_cflags" - BUILD_WITH_LIBGPS_LDFLAGS="$with_libgps_ldflags" - BUILD_WITH_LIBGPS_LIBS="-lgps" - AC_SUBST(BUILD_WITH_LIBGPS_CFLAGS) - AC_SUBST(BUILD_WITH_LIBGPS_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBGPS_LIBS) -fi -AM_CONDITIONAL(BUILD_WITH_LIBGPS, test "x$with_libgps" = "xyes") + +AC_SUBST([BUILD_WITH_LIBGPS_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBGPS_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBGPS_LIBS]) + # }}} # --with-libgrpc++ {{{ -with_libgrpcpp_cppflags="" -with_libgrpcpp_ldflags="" -AC_ARG_WITH([libgrpc++], [AS_HELP_STRING([--with-libgrpc++@<:@=PREFIX@:>@], [Path to libgrpc++.])], +AC_ARG_WITH([libgrpc++], + [AS_HELP_STRING([--with-libgrpc++@<:@=PREFIX@:>@], [Path to libgrpc++.])], [ with_grpcpp="$withval" - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then with_libgrpcpp_cppflags="-I$withval/include" with_libgrpcpp_ldflags="-L$withval/lib" with_libgrpcpp="yes" fi - if test "x$withval" = "xno" - then + if test "x$withval" = "xno"; then with_libgrpcpp="no (disabled on command line)" fi ], [withval="yes"] ) -if test "x$withval" = "xyes" -then +if test "x$withval" = "xyes"; then PKG_CHECK_MODULES([GRPCPP], [grpc++], [with_libgrpcpp="yes"], [with_libgrpcpp="no (pkg-config could not find libgrpc++)"] ) fi -if test "x$withval" != "xno" -then +if test "x$withval" != "xno"; then AC_MSG_CHECKING([whether $CXX accepts -std=c++11]) if test_cxx_flags -std=c++11; then AC_MSG_RESULT([yes]) @@ -2555,40 +2667,40 @@ then fi fi -if test "x$with_libgrpcpp" = "xyes" -then +if test "x$with_libgrpcpp" = "xyes"; then AC_LANG_PUSH(C++) SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-std=c++11 $with_libgrpcpp_cppflags $GRPCPP_CFLAGS $CPPFLAGS" - AC_CHECK_HEADERS([grpc++/grpc++.h], [], + AC_CHECK_HEADERS([grpc++/grpc++.h], + [with_libgrpcpp="yes"], [with_libgrpcpp="no ( not found)"] ) CPPFLAGS="$SAVE_CPPFLAGS" AC_LANG_POP(C++) fi -if test "x$with_libgrpcpp" = "xyes" -then + +if test "x$with_libgrpcpp" = "xyes"; then AC_LANG_PUSH(C++) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" SAVE_LIBS="$LIBS" CPPFLAGS="-std=c++11 $with_libgrpcpp_cppflags $GRPCPP_CFLAGS $CPPFLAGS" LDFLAGS="$with_libgrpcpp_ldflags" - if test "x$GRPCPP_LIBS" = "x" - then + if test "x$GRPCPP_LIBS" = "x"; then LIBS="-lgrpc++" else LIBS="$GRPCPP_LIBS" fi AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[grpc::ServerBuilder sb;]] - )], + [ + AC_LANG_PROGRAM( + [[#include ]], + [[grpc::ServerBuilder sb;]] + ) + ], [ with_libgrpcpp="yes" - if test "x$GRPCPP_LIBS" = "x" - then + if test "x$GRPCPP_LIBS" = "x"; then GRPCPP_LIBS="-lgrpc++" fi ], @@ -2599,6 +2711,7 @@ then LIBS="$SAVE_LIBS" AC_LANG_POP(C++) fi + BUILD_WITH_LIBGRPCPP_CPPFLAGS="-std=c++11 $with_libgrpcpp_cppflags $GRPCPP_CFLAGS" BUILD_WITH_LIBGRPCPP_LDFLAGS="$with_libgrpcpp_ldflags" BUILD_WITH_LIBGRPCPP_LIBS="$GRPCPP_LIBS" @@ -2607,267 +2720,219 @@ AC_SUBST([BUILD_WITH_LIBGRPCPP_LDFLAGS]) AC_SUBST([BUILD_WITH_LIBGRPCPP_LIBS]) # }}} -# --with-libiptc {{{ -AC_ARG_WITH(libiptc, [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to libiptc.])], -[ - if test "x$withval" = "xyes" - then - with_libiptc="pkgconfig" - else if test "x$withval" = "xno" - then - with_libiptc="no" - else - with_libiptc="yes" - with_libiptc_cflags="-I$withval/include" - with_libiptc_libs="-L$withval/lib" - fi; fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_libiptc="pkgconfig" - else - with_libiptc="no (Linux only)" - fi -]) - -if test "x$with_libiptc" = "xpkgconfig" -then - $PKG_CONFIG --exists 'libiptc' 2>/dev/null - if test $? -ne 0 - then - with_libiptc="no (pkg-config doesn't know libiptc)" - fi -fi -if test "x$with_libiptc" = "xpkgconfig" -then - with_libiptc_cflags="`$PKG_CONFIG --cflags 'libiptc'`" - if test $? -ne 0 - then - with_libiptc="no ($PKG_CONFIG failed)" - fi - with_libiptc_libs="`$PKG_CONFIG --libs 'libiptc'`" - if test $? -ne 0 - then - with_libiptc="no ($PKG_CONFIG failed)" - fi -fi +AC_ARG_VAR([GRPC_CPP_PLUGIN], [path to the grpc_cpp_plugin binary]) +AC_PATH_PROG([GRPC_CPP_PLUGIN], [grpc_cpp_plugin]) +AM_CONDITIONAL([HAVE_GRPC_CPP], [test "x$GRPC_CPP_PLUGIN" != "x"]) -SAVE_CPPFLAGS="$CPPFLAGS" +# --with-libiptc {{{ +AC_ARG_WITH([libiptc], + [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to libiptc.])], + [ + if test "x$withval" = "xyes"; then + with_libiptc="pkgconfig" + else if test "x$withval" = "xno"; then + with_libiptc="no" + else + with_libiptc="yes" + with_libiptc_cflags="-I$withval/include" + with_libiptc_libs="-L$withval/lib" + fi; fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_libiptc="pkgconfig" + else + with_libiptc="no (Linux only)" + fi + ] +) + +if test "x$with_libiptc" = "xpkgconfig"; then + $PKG_CONFIG --exists 'libiptc' 2>/dev/null + if test $? -ne 0; then + with_libiptc="no (pkg-config doesn't know libiptc)" + fi +fi + +if test "x$with_libiptc" = "xpkgconfig"; then + with_libiptc_cflags="`$PKG_CONFIG --cflags 'libiptc'`" + if test $? -ne 0; then + with_libiptc="no ($PKG_CONFIG failed)" + fi + + with_libiptc_libs="`$PKG_CONFIG --libs 'libiptc'`" + if test $? -ne 0; then + with_libiptc="no ($PKG_CONFIG failed)" + fi +fi + +SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $with_libiptc_cflags" # check whether the header file for libiptc is available. -if test "x$with_libiptc" = "xpkgconfig" -then - AC_CHECK_HEADERS(libiptc/libiptc.h libiptc/libip6tc.h, , - [with_libiptc="no (header file missing)"]) +if test "x$with_libiptc" = "xpkgconfig"; then + AC_CHECK_HEADERS([libiptc/libiptc.h libiptc/libip6tc.h], + [], + [with_libiptc="no (header file missing)"] + ) fi + # If the header file is available, check for the required type declaractions. # They may be missing in old versions of libiptc. In that case, they will be # declared in the iptables plugin. -if test "x$with_libiptc" = "xpkgconfig" -then - AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], []) +if test "x$with_libiptc" = "xpkgconfig"; then + AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], []) fi + # Check for the iptc_init symbol in the library. # This could be in iptc or ip4tc -if test "x$with_libiptc" = "xpkgconfig" -then - SAVE_LIBS="$LIBS" - AC_SEARCH_LIBS(iptc_init, [iptc ip4tc], - [with_libiptc="pkgconfig"], - [with_libiptc="no"], - [$with_libiptc_libs]) - LIBS="$SAVE_LIBS" -fi -if test "x$with_libiptc" = "xpkgconfig" -then - with_libiptc="yes" +if test "x$with_libiptc" = "xpkgconfig"; then + SAVE_LIBS="$LIBS" + AC_SEARCH_LIBS([iptc_init], [iptc ip4tc], + [with_libiptc="pkgconfig"], + [with_libiptc="no"], + [$with_libiptc_libs] + ) + LIBS="$SAVE_LIBS" fi -CPPFLAGS="$SAVE_CPPFLAGS" - -AM_CONDITIONAL(BUILD_WITH_LIBIPTC, test "x$with_libiptc" = "xyes") -if test "x$with_libiptc" = "xyes" -then - BUILD_WITH_LIBIPTC_CPPFLAGS="$with_libiptc_cflags" - BUILD_WITH_LIBIPTC_LDFLAGS="$with_libiptc_libs" - AC_SUBST(BUILD_WITH_LIBIPTC_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBIPTC_LDFLAGS) +if test "x$with_libiptc" = "xpkgconfig"; then + with_libiptc="yes" fi -# }}} - -# --with-libdpdk {{{ -AC_ARG_VAR([LIBDPDK_CPPFLAGS], [Preprocessor flags for libdpdk]) -AC_ARG_VAR([LIBDPDK_LDFLAGS], [Linker flags for libdpdk]) - -AC_ARG_WITH([libdpdk], [AS_HELP_STRING([--without-libdpdk], [Disable libdpdk.])]) -if test "x$with_libdpdk" != "xno" -then - if test "x$LIBDPDK_CPPFLAGS" = "x" - then - LIBDPDK_CPPFLAGS="-I/usr/include/dpdk" - fi - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$LIBDPDK_CPPFLAGS $CPPFLAGS" - AC_CHECK_HEADERS([rte_config.h], - [with_libdpdk="yes"], - [with_libdpdk="no (rte_config.h not found)"] - ) - CPPFLAGS="$SAVE_CPPFLAGS" -fi +CPPFLAGS="$SAVE_CPPFLAGS" -if test "x$with_libdpdk" = "xyes" -then - SAVE_LDFLAGS="$LDFLAGS" - LDFLAGS="$LIBDPDK_LDFLAGS $LDFLAGS" - AC_CHECK_LIB([dpdk], [rte_eal_init], - [with_libdpdk="yes"], - [with_libdpdk="no (symbol 'rte_eal_init' not found)"] - ) - LDFLAGS="$SAVE_LDFLAGS" +if test "x$with_libiptc" = "xyes"; then + BUILD_WITH_LIBIPTC_CPPFLAGS="$with_libiptc_cflags" + BUILD_WITH_LIBIPTC_LDFLAGS="$with_libiptc_libs" fi - +AC_SUBST([BUILD_WITH_LIBIPTC_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBIPTC_LDFLAGS]) # }}} # --with-java {{{ with_java_home="$JAVA_HOME" -if test "x$with_java_home" = "x" -then - with_java_home="/usr/lib/jvm" +if test "x$with_java_home" = "x"; then + with_java_home="/usr/lib/jvm" fi + JAVAC="$JAVAC" JAR="$JAR" -AC_ARG_WITH(java, [AS_HELP_STRING([--with-java@<:@=PREFIX@:>@], [Path to Java home.])], -[ - if test "x$withval" = "xno" - then - with_java="no" - else if test "x$withval" = "xyes" - then - with_java="yes" - else - with_java_home="$withval" - with_java="yes" - fi; fi -], -[with_java="yes"]) -if test "x$with_java" = "xyes" -then - if test -d "$with_java_home" - then - AC_MSG_CHECKING([for jni.h]) - TMPVAR=`find -L "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` - if test "x$TMPVAR" != "x" - then - AC_MSG_RESULT([found in $TMPVAR]) - JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPVAR" - else - AC_MSG_RESULT([not found]) - fi - - AC_MSG_CHECKING([for jni_md.h]) - TMPVAR=`find -L "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` - if test "x$TMPVAR" != "x" - then - AC_MSG_RESULT([found in $TMPVAR]) - JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPVAR" - else - AC_MSG_RESULT([not found]) - fi - - AC_MSG_CHECKING([for libjvm.so]) - TMPVAR=`find -L "$with_java_home" -type f \( -name libjvm.so -o -name libjvm.dylib \) -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` - if test "x$TMPVAR" != "x" - then - AC_MSG_RESULT([found in $TMPVAR]) - JAVA_LDFLAGS="$JAVA_LDFLAGS -L$TMPVAR -Wl,-rpath -Wl,$TMPVAR" - else - AC_MSG_RESULT([not found]) - fi - - if test "x$JAVAC" = "x" - then - AC_MSG_CHECKING([for javac]) - TMPVAR=`find -L "$with_java_home" -name javac -type f 2>/dev/null | LC_ALL=C sort | head -n 1` - if test "x$TMPVAR" != "x" - then - JAVAC="$TMPVAR" - AC_MSG_RESULT([$JAVAC]) - else - AC_MSG_RESULT([not found]) - fi - fi - if test "x$JAR" = "x" - then - AC_MSG_CHECKING([for jar]) - TMPVAR=`find -L "$with_java_home" -name jar -type f 2>/dev/null | LC_ALL=C sort | head -n 1` - if test "x$TMPVAR" != "x" - then - JAR="$TMPVAR" - AC_MSG_RESULT([$JAR]) - else - AC_MSG_RESULT([not found]) - fi - fi - else if test "x$with_java_home" != "x" - then - AC_MSG_WARN([JAVA_HOME: No such directory: $with_java_home]) - fi; fi -fi - -if test "x$JAVA_CPPFLAGS" != "x" -then - AC_MSG_NOTICE([Building with JAVA_CPPFLAGS set to: $JAVA_CPPFLAGS]) +AC_ARG_WITH([java], + [AS_HELP_STRING([--with-java@<:@=PREFIX@:>@], [Path to Java home.])], + [ + if test "x$withval" = "xno"; then + with_java="no" + else if test "x$withval" = "xyes"; then + with_java="yes" + else + with_java_home="$withval" + with_java="yes" + fi; fi + ], + [with_java="yes"] +) + +AX_COMPARE_VERSION([$am__api_version],[lt],[1.12], + [JAVA_TIMESTAMP_FILE="classdist_noinst.stamp"], + [JAVA_TIMESTAMP_FILE="classnoinst.stamp"]) +if test "x$with_java" = "xyes"; then + if test -d "$with_java_home"; then + AC_MSG_CHECKING([for jni.h]) + TMPVAR=`find -L "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` + if test "x$TMPVAR" != "x"; then + AC_MSG_RESULT([found in $TMPVAR]) + JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPVAR" + else + AC_MSG_RESULT([not found]) + fi + + AC_MSG_CHECKING([for jni_md.h]) + TMPVAR=`find -L "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` + if test "x$TMPVAR" != "x"; then + AC_MSG_RESULT([found in $TMPVAR]) + JAVA_CPPFLAGS="$JAVA_CPPFLAGS -I$TMPVAR" + else + AC_MSG_RESULT([not found]) + fi + + AC_MSG_CHECKING([for libjvm.so]) + TMPVAR=`find -L "$with_java_home" -type f \( -name libjvm.so -o -name libjvm.dylib \) -exec 'dirname' '{}' ';' 2>/dev/null | LC_ALL=C sort | head -n 1` + if test "x$TMPVAR" != "x"; then + AC_MSG_RESULT([found in $TMPVAR]) + JAVA_LDFLAGS="$JAVA_LDFLAGS -L$TMPVAR -Wl,-rpath -Wl,$TMPVAR" + else + AC_MSG_RESULT([not found]) + fi + + if test "x$JAVAC" = "x"; then + AC_MSG_CHECKING([for javac]) + TMPVAR=`find -L "$with_java_home" -name javac -type f 2>/dev/null | LC_ALL=C sort | head -n 1` + if test "x$TMPVAR" != "x"; then + JAVAC="$TMPVAR" + AC_MSG_RESULT([$JAVAC]) + else + AC_MSG_RESULT([not found]) + fi + fi + + if test "x$JAR" = "x"; then + AC_MSG_CHECKING([for jar]) + TMPVAR=`find -L "$with_java_home" -name jar -type f 2>/dev/null | LC_ALL=C sort | head -n 1` + if test "x$TMPVAR" != "x"; then + JAR="$TMPVAR" + AC_MSG_RESULT([$JAR]) + else + AC_MSG_RESULT([not found]) + fi + fi + else if test "x$with_java_home" != "x"; then + AC_MSG_WARN([JAVA_HOME: No such directory: $with_java_home]) + fi; fi fi -if test "x$JAVA_CFLAGS" != "x" -then - AC_MSG_NOTICE([Building with JAVA_CFLAGS set to: $JAVA_CFLAGS]) + +if test "x$JAVA_CPPFLAGS" != "x"; then + AC_MSG_NOTICE([Building with JAVA_CPPFLAGS set to: $JAVA_CPPFLAGS]) fi -if test "x$JAVA_LDFLAGS" != "x" -then - AC_MSG_NOTICE([Building with JAVA_LDFLAGS set to: $JAVA_LDFLAGS]) +if test "x$JAVA_CFLAGS" != "x"; then + AC_MSG_NOTICE([Building with JAVA_CFLAGS set to: $JAVA_CFLAGS]) fi -if test "x$JAVA_LIBS" != "x" -then - AC_MSG_NOTICE([Building with JAVA_LIBS set to: $JAVA_LIBS]) +if test "x$JAVA_LDFLAGS" != "x"; then + AC_MSG_NOTICE([Building with JAVA_LDFLAGS set to: $JAVA_LDFLAGS]) fi -if test "x$JAVAC" = "x" -then - with_javac_path="$PATH" - if test "x$with_java_home" != "x" - then - with_javac_path="$with_java_home:with_javac_path" - if test -d "$with_java_home/bin" - then - with_javac_path="$with_java_home/bin:with_javac_path" - fi - fi - - AC_PATH_PROG(JAVAC, javac, [], "$with_javac_path") -fi -if test "x$JAVAC" = "x" -then - with_java="no (javac not found)" +if test "x$JAVA_LIBS" != "x"; then + AC_MSG_NOTICE([Building with JAVA_LIBS set to: $JAVA_LIBS]) fi -if test "x$JAR" = "x" -then - with_jar_path="$PATH" - if test "x$with_java_home" != "x" - then - with_jar_path="$with_java_home:$with_jar_path" - if test -d "$with_java_home/bin" - then - with_jar_path="$with_java_home/bin:$with_jar_path" - fi - fi - - AC_PATH_PROG(JAR, jar, [], "$with_jar_path") -fi -if test "x$JAR" = "x" -then - with_java="no (jar not found)" +if test "x$JAVAC" = "x"; then + with_javac_path="$PATH" + if test "x$with_java_home" != "x"; then + with_javac_path="$with_java_home:with_javac_path" + if test -d "$with_java_home/bin"; then + with_javac_path="$with_java_home/bin:with_javac_path" + fi + fi + + AC_PATH_PROG([JAVAC], [javac], [], "$with_javac_path") +fi + +if test "x$JAVAC" = "x"; then + with_java="no (javac not found)" +fi + +if test "x$JAR" = "x"; then + with_jar_path="$PATH" + if test "x$with_java_home" != "x"; then + with_jar_path="$with_java_home:$with_jar_path" + if test -d "$with_java_home/bin"; then + with_jar_path="$with_java_home/bin:$with_jar_path" + fi + fi + + AC_PATH_PROG([JAR], [jar], [], "$with_jar_path") +fi + +if test "x$JAR" = "x"; then + with_java="no (jar not found)" fi SAVE_CPPFLAGS="$CPPFLAGS" @@ -2879,21 +2944,23 @@ CFLAGS="$CFLAGS $JAVA_CFLAGS" LDFLAGS="$LDFLAGS $JAVA_LDFLAGS" LIBS="$LIBS $JAVA_LIBS" -if test "x$with_java" = "xyes" -then - AC_CHECK_HEADERS(jni.h, [], [with_java="no (jni.h not found)"]) +if test "x$with_java" = "xyes"; then + AC_CHECK_HEADERS([jni.h], + [with_jave="yes"], + [with_java="no (jni.h not found)"]) fi -if test "x$with_java" = "xyes" -then - AC_CHECK_LIB(jvm, JNI_CreateJavaVM, - [with_java="yes"], - [with_java="no (Symbol 'JNI_CreateJavaVM' not found)"], - [$JAVA_LIBS $PTHREAD_LIBS]) + +if test "x$with_java" = "xyes"; then + AC_CHECK_LIB([jvm], [JNI_CreateJavaVM], + [with_java="yes"], + [with_java="no (Symbol 'JNI_CreateJavaVM' not found)"], + [$JAVA_LIBS $PTHREAD_LIBS] + ) fi -if test "x$with_java" = "xyes" -then - JAVA_LIBS="$JAVA_LIBS -ljvm" - AC_MSG_NOTICE([Building with JAVA_LIBS set to: $JAVA_LIBS]) + +if test "x$with_java" = "xyes"; then + JAVA_LIBS="$JAVA_LIBS -ljvm" + AC_MSG_NOTICE([Building with JAVA_LIBS set to: $JAVA_LIBS]) fi CPPFLAGS="$SAVE_CPPFLAGS" @@ -2901,29 +2968,30 @@ CFLAGS="$SAVE_CFLAGS" LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" -AC_SUBST(JAVA_CPPFLAGS) -AC_SUBST(JAVA_CFLAGS) -AC_SUBST(JAVA_LDFLAGS) -AC_SUBST(JAVA_LIBS) -AM_CONDITIONAL(BUILD_WITH_JAVA, test "x$with_java" = "xyes") +AC_SUBST([JAVA_CPPFLAGS]) +AC_SUBST([JAVA_CFLAGS]) +AC_SUBST([JAVA_LDFLAGS]) +AC_SUBST([JAVA_LIBS]) +AC_SUBST([JAVA_TIMESTAMP_FILE]) +AM_CONDITIONAL([BUILD_WITH_JAVA], [test "x$with_java" = "xyes"]) # }}} # --with-libldap {{{ -AC_ARG_WITH(libldap, [AS_HELP_STRING([--with-libldap@<:@=PREFIX@:>@], [Path to libldap.])], -[ - if test "x$withval" = "xyes" - then - with_libldap="yes" - else if test "x$withval" = "xno" - then - with_libldap="no" - else - with_libldap="yes" - LIBLDAP_CPPFLAGS="$LIBLDAP_CPPFLAGS -I$withval/include" - LIBLDAP_LDFLAGS="$LIBLDAP_LDFLAGS -L$withval/lib" - fi; fi -], -[with_libldap="yes"]) +AC_ARG_WITH([libldap], + [AS_HELP_STRING([--with-libldap@<:@=PREFIX@:>@], [Path to libldap.])], + [ + if test "x$withval" = "xyes"; then + with_libldap="yes" + else if test "x$withval" = "xno"; then + with_libldap="no" + else + with_libldap="yes" + LIBLDAP_CPPFLAGS="$LIBLDAP_CPPFLAGS -I$withval/include" + LIBLDAP_LDFLAGS="$LIBLDAP_LDFLAGS -L$withval/lib" + fi; fi + ], + [with_libldap="yes"] +) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" @@ -2931,26 +2999,26 @@ SAVE_LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $LIBLDAP_CPPFLAGS" LDFLAGS="$LDFLAGS $LIBLDAP_LDFLAGS" -if test "x$with_libldap" = "xyes" -then - if test "x$LIBLDAP_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([libldap CPPFLAGS: $LIBLDAP_CPPFLAGS]) - fi - AC_CHECK_HEADERS(ldap.h, - [with_libldap="yes"], - [with_libldap="no ('ldap.h' not found)"]) +if test "x$with_libldap" = "xyes"; then + if test "x$LIBLDAP_CPPFLAGS" != "x"; then + AC_MSG_NOTICE([libldap CPPFLAGS: $LIBLDAP_CPPFLAGS]) + fi + + AC_CHECK_HEADERS([ldap.h], + [with_libldap="yes"], + [with_libldap="no ('ldap.h' not found)"] + ) fi -if test "x$with_libldap" = "xyes" -then - if test "x$LIBLDAP_LDFLAGS" != "x" - then - AC_MSG_NOTICE([libldap LDFLAGS: $LIBLDAP_LDFLAGS]) - fi - AC_CHECK_LIB(ldap, ldap_initialize, - [with_libldap="yes"], - [with_libldap="no (symbol 'ldap_initialize' not found)"]) +if test "x$with_libldap" = "xyes"; then + if test "x$LIBLDAP_LDFLAGS" != "x"; then + AC_MSG_NOTICE([libldap LDFLAGS: $LIBLDAP_LDFLAGS]) + fi + + AC_CHECK_LIB([ldap], [ldap_initialize], + [with_libldap="yes"], + [with_libldap="no (symbol 'ldap_initialize' not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" @@ -2958,12 +3026,11 @@ LDFLAGS="$SAVE_LDFLAGS" if test "x$with_libldap" = "xyes" then - BUILD_WITH_LIBLDAP_CPPFLAGS="$LIBLDAP_CPPFLAGS" - BUILD_WITH_LIBLDAP_LDFLAGS="$LIBLDAP_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBLDAP_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBLDAP_LDFLAGS) + BUILD_WITH_LIBLDAP_CPPFLAGS="$LIBLDAP_CPPFLAGS" + BUILD_WITH_LIBLDAP_LDFLAGS="$LIBLDAP_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBLDAP, test "x$with_libldap" = "xyes") +AC_SUBST([BUILD_WITH_LIBLDAP_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBLDAP_LDFLAGS]) # }}} # --with-liblua {{{ @@ -2981,7 +3048,7 @@ else PKG_CHECK_MODULES([LUA], [lua-5.3], [with_liblua="yes"], [ - PKG_CHECK_MODULES([LUA], [lua5.3], + PKG_CHECK_MODULES([LUA], [lua5.3], [with_liblua="yes"], [ PKG_CHECK_MODULES([LUA], [lua-5.2], @@ -3047,114 +3114,117 @@ AC_SUBST(BUILD_WITH_LIBLUA_LIBS) # }}} # --with-liblvm2app {{{ -with_liblvm2app_cppflags="" -with_liblvm2app_ldflags="" -AC_ARG_WITH(liblvm2app, [AS_HELP_STRING([--with-liblvm2app@<:@=PREFIX@:>@], [Path to liblvm2app.])], -[ - if test "x$withval" = "xno" - then - with_liblvm2app="no" - else - with_liblvm2app="yes" - if test "x$withval" != "xyes" - then - with_liblvm2app_cppflags="-I$withval/include" - with_liblvm2app_ldflags="-L$withval/lib" - fi - fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_liblvm2app="yes" - else - with_liblvm2app="no (Linux only library)" - fi -]) -if test "x$with_liblvm2app" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_liblvm2app_cppflags" +AC_ARG_WITH([liblvm2app], + [AS_HELP_STRING([--with-liblvm2app@<:@=PREFIX@:>@], [Path to liblvm2app.])], + [ + if test "x$withval" = "xno"; then + with_liblvm2app="no" + else + with_liblvm2app="yes" + if test "x$withval" != "xyes"; then + with_liblvm2app_cppflags="-I$withval/include" + with_liblvm2app_ldflags="-L$withval/lib" + fi + fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_liblvm2app="yes" + else + with_liblvm2app="no (Linux only library)" + fi + ] +) - AC_CHECK_HEADERS(lvm2app.h, [with_liblvm2app="yes"], [with_liblvm2app="no (lvm2app.h not found)"]) +if test "x$with_liblvm2app" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_liblvm2app_cppflags" + + AC_CHECK_HEADERS([lvm2app.h], + [with_liblvm2app="yes"], + [with_liblvm2app="no (lvm2app.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_liblvm2app" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_liblvm2app_cppflags" - LDFLAGS="$LDFLAGS $with_liblvm2app_ldflags" +if test "x$with_liblvm2app" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $with_liblvm2app_cppflags" + LDFLAGS="$LDFLAGS $with_liblvm2app_ldflags" - AC_CHECK_LIB(lvm2app, lvm_lv_get_property, [with_liblvm2app="yes"], [with_liblvm2app="no (Symbol 'lvm_lv_get_property' not found)"]) + AC_CHECK_LIB([lvm2app], [lvm_lv_get_property], + [with_liblvm2app="yes"], + [with_liblvm2app="no (Symbol 'lvm_lv_get_property' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_liblvm2app" = "xyes" -then - BUILD_WITH_LIBLVM2APP_CPPFLAGS="$with_liblvm2app_cppflags" - BUILD_WITH_LIBLVM2APP_LDFLAGS="$with_liblvm2app_ldflags" - BUILD_WITH_LIBLVM2APP_LIBS="-llvm2app" - AC_SUBST(BUILD_WITH_LIBLVM2APP_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBLVM2APP_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBLVM2APP_LIBS) - AC_DEFINE(HAVE_LIBLVM2APP, 1, [Define if liblvm2app is present and usable.]) -fi -AM_CONDITIONAL(BUILD_WITH_LIBLVM2APP, test "x$with_liblvm2app" = "xyes") + +if test "x$with_liblvm2app" = "xyes"; then + BUILD_WITH_LIBLVM2APP_CPPFLAGS="$with_liblvm2app_cppflags" + BUILD_WITH_LIBLVM2APP_LDFLAGS="$with_liblvm2app_ldflags" + BUILD_WITH_LIBLVM2APP_LIBS="-llvm2app" +fi + +AC_SUBST([BUILD_WITH_LIBLVM2APP_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBLVM2APP_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBLVM2APP_LIBS]) # }}} # --with-libmemcached {{{ -with_libmemcached_cppflags="" -with_libmemcached_ldflags="" -AC_ARG_WITH(libmemcached, [AS_HELP_STRING([--with-libmemcached@<:@=PREFIX@:>@], [Path to libmemcached.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libmemcached_cppflags="-I$withval/include" - with_libmemcached_ldflags="-L$withval/lib" - with_libmemcached="yes" - else - with_libmemcached="$withval" - fi -], -[ - with_libmemcached="yes" -]) -if test "x$with_libmemcached" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags" +AC_ARG_WITH([libmemcached], + [AS_HELP_STRING([--with-libmemcached@<:@=PREFIX@:>@], [Path to libmemcached.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libmemcached_cppflags="-I$withval/include" + with_libmemcached_ldflags="-L$withval/lib" + with_libmemcached="yes" + else + with_libmemcached="$withval" + fi + ], + [with_libmemcached="yes"] +) - AC_CHECK_HEADERS(libmemcached/memcached.h, [with_libmemcached="yes"], [with_libmemcached="no (libmemcached/memcached.h not found)"]) +if test "x$with_libmemcached" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags" + + AC_CHECK_HEADERS([libmemcached/memcached.h], + [with_libmemcached="yes"], + [with_libmemcached="no (libmemcached/memcached.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libmemcached" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags" - LDFLAGS="$LDFLAGS $with_libmemcached_ldflags" - AC_CHECK_LIB(memcached, memcached_create, [with_libmemcached="yes"], [with_libmemcached="no (Symbol 'memcached_create' not found)"]) +if test "x$with_libmemcached" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $with_libmemcached_cppflags" + LDFLAGS="$LDFLAGS $with_libmemcached_ldflags" + + AC_CHECK_LIB([memcached], [memcached_create], + [with_libmemcached="yes"], + [with_libmemcached="no (Symbol 'memcached_create' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libmemcached" = "xyes" -then - BUILD_WITH_LIBMEMCACHED_CPPFLAGS="$with_libmemcached_cppflags" - BUILD_WITH_LIBMEMCACHED_LDFLAGS="$with_libmemcached_ldflags" - BUILD_WITH_LIBMEMCACHED_LIBS="-lmemcached" - AC_SUBST(BUILD_WITH_LIBMEMCACHED_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBMEMCACHED_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBMEMCACHED_LIBS) - AC_DEFINE(HAVE_LIBMEMCACHED, 1, [Define if libmemcached is present and usable.]) -fi -AM_CONDITIONAL(BUILD_WITH_LIBMEMCACHED, test "x$with_libmemcached" = "xyes") + +if test "x$with_libmemcached" = "xyes"; then + BUILD_WITH_LIBMEMCACHED_CPPFLAGS="$with_libmemcached_cppflags" + BUILD_WITH_LIBMEMCACHED_LDFLAGS="$with_libmemcached_ldflags" + BUILD_WITH_LIBMEMCACHED_LIBS="-lmemcached" +fi + +AC_SUBST([BUILD_WITH_LIBMEMCACHED_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBMEMCACHED_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBMEMCACHED_LIBS]) # }}} # --with-libmicrohttpd {{{ @@ -3162,29 +3232,25 @@ with_libmicrohttpd_cppflags="" with_libmicrohttpd_ldflags="" AC_ARG_WITH([libmicrohttpd], [AS_HELP_STRING([--with-libmicrohttpd@<:@=PREFIX@:>@], [Path to libmicrohttpd.])], [ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then with_libmicrohttpd_cppflags="-I$withval/include" with_libmicrohttpd_ldflags="-L$withval/lib" with_libmicrohttpd="yes" fi - if test "x$withval" = "xno" - then + if test "x$withval" = "xno"; then with_libmicrohttpd="no (disabled on command line)" fi ], [withval="yes"] ) -if test "x$withval" = "xyes" -then -PKG_CHECK_MODULES([MICROHTTPD], [libmicrohttpd], - [with_libmicrohttpd="yes"], - [with_libmicrohttpd="no (pkg-config could not find libmicrohttpd)"] -) +if test "x$withval" = "xyes"; then + PKG_CHECK_MODULES([MICROHTTPD], [libmicrohttpd], + [with_libmicrohttpd="yes"], + [with_libmicrohttpd="no (pkg-config could not find libmicrohttpd)"] + ) fi -if test "x$MICROHTTPD_LIBS" = "x" -then +if test "x$MICROHTTPD_LIBS" = "x"; then MICROHTTPD_LIBS="-lmicrohttpd" fi @@ -3195,18 +3261,18 @@ CPPFLAGS="$with_libmicrohttpd_cppflags $MICROHTTPD_CFLAGS" LDFLAGS="$with_libmicrohttpd_ldflags $LDFLAGS" LIBS="$LIBS $MICROHTTPD_LIBS" -if test "x$with_libmicrohttpd" = "xyes" -then +if test "x$with_libmicrohttpd" = "xyes"; then AC_CHECK_HEADERS([microhttpd.h], - [with_libmicrohttpd="yes"], - [with_libmicrohttpd="no ( not found)"]) + [with_libmicrohttpd="yes"], + [with_libmicrohttpd="no ( not found)"] + ) fi -if test "x$with_libmicrohttpd" = "xyes" -then +if test "x$with_libmicrohttpd" = "xyes"; then AC_CHECK_LIB([microhttpd], [MHD_start_daemon], - [with_libmicrohttpd="yes"], - [with_libmicrohttpd="no (libmicrohttpd not found)"]) + [with_libmicrohttpd="yes"], + [with_libmicrohttpd="no (libmicrohttpd not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" @@ -3222,1158 +3288,1173 @@ AC_SUBST([BUILD_WITH_LIBMICROHTTPD_LIBS]) # }}} # --with-libmodbus {{{ -with_libmodbus_config="" -with_libmodbus_cflags="" -with_libmodbus_libs="" -AC_ARG_WITH(libmodbus, [AS_HELP_STRING([--with-libmodbus@<:@=PREFIX@:>@], [Path to the modbus library.])], -[ - if test "x$withval" = "xno" - then - with_libmodbus="no" - else if test "x$withval" = "xyes" - then - with_libmodbus="use_pkgconfig" - else if test -d "$with_libmodbus/lib" - then - AC_MSG_NOTICE([Not checking for libmodbus: Manually configured]) - with_libmodbus_cflags="-I$withval/include" - with_libmodbus_libs="-L$withval/lib -lmodbus" - with_libmodbus="yes" - fi; fi; fi -], -[with_libmodbus="use_pkgconfig"]) +AC_ARG_WITH([libmodbus], + [AS_HELP_STRING([--with-libmodbus@<:@=PREFIX@:>@], [Path to the modbus library.])], + [ + if test "x$withval" = "xno"; then + with_libmodbus="no" + else if test "x$withval" = "xyes"; then + with_libmodbus="use_pkgconfig" + else if test -d "$with_libmodbus/lib"; then + AC_MSG_NOTICE([Not checking for libmodbus: Manually configured]) + with_libmodbus_cflags="-I$withval/include" + with_libmodbus_libs="-L$withval/lib -lmodbus" + with_libmodbus="yes" + fi; fi; fi + ], + [with_libmodbus="use_pkgconfig"] +) # configure using pkg-config -if test "x$with_libmodbus" = "xuse_pkgconfig" -then - AC_MSG_NOTICE([Checking for libmodbus using $PKG_CONFIG]) - $PKG_CONFIG --exists 'libmodbus' 2>/dev/null - if test $? -ne 0 - then - with_libmodbus="no (pkg-config doesn't know libmodbus)" - fi -fi -if test "x$with_libmodbus" = "xuse_pkgconfig" -then - with_libmodbus_cflags="`$PKG_CONFIG --cflags 'libmodbus'`" - if test $? -ne 0 - then - with_libmodbus="no ($PKG_CONFIG failed)" - fi - with_libmodbus_libs="`$PKG_CONFIG --libs 'libmodbus'`" - if test $? -ne 0 - then - with_libmodbus="no ($PKG_CONFIG failed)" - fi -fi -if test "x$with_libmodbus" = "xuse_pkgconfig" -then - with_libmodbus="yes" +if test "x$with_libmodbus" = "xuse_pkgconfig"; then + AC_MSG_NOTICE([Checking for libmodbus using $PKG_CONFIG]) + $PKG_CONFIG --exists 'libmodbus' 2>/dev/null + if test $? -ne 0; then + with_libmodbus="no (pkg-config doesn't know libmodbus)" + fi fi -# with_libmodbus_cflags and with_libmodbus_libs are set up now, let's do -# the actual checks. -if test "x$with_libmodbus" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags" +if test "x$with_libmodbus" = "xuse_pkgconfig"; then + with_libmodbus_cflags="`$PKG_CONFIG --cflags 'libmodbus'`" + if test $? -ne 0; then + with_libmodbus="no ($PKG_CONFIG failed)" + fi - AC_CHECK_HEADERS(modbus.h, [], [with_libmodbus="no (modbus.h not found)"]) + with_libmodbus_libs="`$PKG_CONFIG --libs 'libmodbus'`" + if test $? -ne 0; then + with_libmodbus="no ($PKG_CONFIG failed)" + fi +fi - CPPFLAGS="$SAVE_CPPFLAGS" +if test "x$with_libmodbus" = "xuse_pkgconfig"; then + with_libmodbus="yes" fi -if test "x$with_libmodbus" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags" - LDFLAGS="$LDFLAGS $with_libmodbus_libs" +if test "x$with_libmodbus" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags" - AC_CHECK_LIB(modbus, modbus_connect, - [with_libmodbus="yes"], - [with_libmodbus="no (symbol modbus_connect not found)"]) + AC_CHECK_HEADERS([modbus.h], + [with_libmodbus="yes"], + [with_libmodbus="no (modbus.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libmodbus" = "xyes" -then - BUILD_WITH_LIBMODBUS_CFLAGS="$with_libmodbus_cflags" - BUILD_WITH_LIBMODBUS_LIBS="$with_libmodbus_libs" - AC_SUBST(BUILD_WITH_LIBMODBUS_CFLAGS) - AC_SUBST(BUILD_WITH_LIBMODBUS_LIBS) + +if test "x$with_libmodbus" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libmodbus_libs" + + AC_CHECK_LIB([modbus], [modbus_connect], + [with_libmodbus="yes"], + [with_libmodbus="no (symbol modbus_connect not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" +fi + +if test "x$with_libmodbus" = "xyes"; then + BUILD_WITH_LIBMODBUS_CFLAGS="$with_libmodbus_cflags" + BUILD_WITH_LIBMODBUS_LIBS="$with_libmodbus_libs" fi + +AC_SUBST([BUILD_WITH_LIBMODBUS_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBMODBUS_LIBS]) # }}} # --with-libmongoc {{{ -AC_ARG_WITH(libmongoc, [AS_HELP_STRING([--with-libmongoc@<:@=PREFIX@:>@], [Path to libmongoc.])], -[ - if test "x$withval" = "xyes" - then - with_libmongoc="yes" - else if test "x$withval" = "xno" - then - with_libmongoc="no" - else - with_libmongoc="yes" - LIBMONGOC_CPPFLAGS="$LIBMONGOC_CPPFLAGS -I$withval/include" - LIBMONGOC_LDFLAGS="$LIBMONGOC_LDFLAGS -L$withval/lib" - fi; fi -], -[with_libmongoc="yes"]) +AC_ARG_WITH([libmongoc], + [AS_HELP_STRING([--with-libmongoc@<:@=PREFIX@:>@], [Path to libmongoc.])], + [ + if test "x$withval" = "xyes"; then + with_libmongoc="yes" + else if test "x$withval" = "xno"; then + with_libmongoc="no" + else + with_libmongoc="no" + fi; fi + ], + [with_libmongoc="yes"] +) -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" +if test "x$with_libmongoc" = "xyes"; then + PKG_CHECK_MODULES([LIBMONGOC], [libmongoc-1.0], + [with_libmongoc="yes"], + [with_libmongoc="no (pkg-config could not find libmongoc)"] + ) +fi -CPPFLAGS="$CPPFLAGS $LIBMONGOC_CPPFLAGS" -LDFLAGS="$LDFLAGS $LIBMONGOC_LDFLAGS" +if test "x$with_libmongoc" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" -if test "x$with_libmongoc" = "xyes" -then - if test "x$LIBMONGOC_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([libmongoc CPPFLAGS: $LIBMONGOC_CPPFLAGS]) - fi - AC_CHECK_HEADERS(mongo.h, - [with_libmongoc="yes"], - [with_libmongoc="no ('mongo.h' not found)"], -[#if HAVE_STDINT_H -# define MONGO_HAVE_STDINT 1 -#else -# define MONGO_USE_LONG_LONG_INT 1 -#endif -]) -fi -if test "x$with_libmongoc" = "xyes" -then - if test "x$LIBMONGOC_LDFLAGS" != "x" - then - AC_MSG_NOTICE([libmongoc LDFLAGS: $LIBMONGOC_LDFLAGS]) - fi - AC_CHECK_LIB(mongoc, mongo_run_command, - [with_libmongoc="yes"], - [with_libmongoc="no (symbol 'mongo_run_command' not found)"]) -fi + CPPFLAGS="$CPPFLAGS $LIBMONGOC_CFLAGS" -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" + if test "x$CPPFLAGS" != "x"; then + AC_MSG_NOTICE([libmongoc CPPFLAGS: $LIBMONGOC_CFLAGS]) + fi -if test "x$with_libmongoc" = "xyes" -then - BUILD_WITH_LIBMONGOC_CPPFLAGS="$LIBMONGOC_CPPFLAGS" - BUILD_WITH_LIBMONGOC_LDFLAGS="$LIBMONGOC_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBMONGOC_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBMONGOC_LDFLAGS) + AC_CHECK_HEADERS([mongoc.h], + [with_libmongoc="yes"], + [with_libmongoc="no ('mongoc.h' not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBMONGOC, test "x$with_libmongoc" = "xyes") -# }}} -# --with-libmosquitto {{{ -with_libmosquitto_cppflags="" -with_libmosquitto_ldflags="" -AC_ARG_WITH(libmosquitto, [AS_HELP_STRING([--with-libmosquitto@<:@=PREFIX@:>@], [Path to libmosquitto.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libmosquitto_cppflags="-I$withval/include" - with_libmosquitto_ldflags="-L$withval/lib" - with_libmosquitto="yes" - else - with_libmosquitto="$withval" - fi -], -[ - with_libmosquitto="yes" -]) -if test "x$with_libmosquitto" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libmosquitto_cppflags" +if test "x$with_libmongoc" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" - AC_CHECK_HEADERS(mosquitto.h, [with_libmosquitto="yes"], [with_libmosquitto="no (mosquitto.h not found)"]) + CPPFLAGS="$CPPFLAGS $LIBMONGOC_CFLAGS" + LDFLAGS="$LDFLAGS $LIBMONGOC_LDFLAGS" - CPPFLAGS="$SAVE_CPPFLAGS" -fi -if test "x$with_libmosquitto" = "xyes" -then - SAVE_LDFLAGS="$LDFLAGS" - SAVE_CPPFLAGS="$CPPFLAGS" - LDFLAGS="$LDFLAGS $with_libmosquitto_ldflags" - CPPFLAGS="$CPPFLAGS $with_libmosquitto_cppflags" + if test "x$LIBMONGOC_LDFLAGS" != "x"; then + AC_MSG_NOTICE([libmongoc LDFLAGS: $LIBMONGOC_LDFLAGS]) + fi - AC_CHECK_LIB(mosquitto, mosquitto_connect, [with_libmosquitto="yes"], [with_libmosquitto="no (libmosquitto not found)"]) + AC_CHECK_LIB([mongoc-1.0], [mongoc_init], + [with_libmongoc="yes"], + [with_libmongoc="no (symbol 'mongoc_init' not found)"] + ) - LDFLAGS="$SAVE_LDFLAGS" - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libmosquitto" = "xyes" -then - BUILD_WITH_LIBMOSQUITTO_CPPFLAGS="$with_libmosquitto_cppflags" - BUILD_WITH_LIBMOSQUITTO_LDFLAGS="$with_libmosquitto_ldflags" - BUILD_WITH_LIBMOSQUITTO_LIBS="-lmosquitto" - AC_SUBST(BUILD_WITH_LIBMOSQUITTO_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBMOSQUITTO_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBMOSQUITTO_LIBS) + +if test "x$with_libmongoc" = "xyes"; then + BUILD_WITH_LIBMONGOC_CFLAGS="$LIBMONGOC_CFLAGS" + BUILD_WITH_LIBMONGOC_LDFLAGS="$LIBMONGOC_LDFLAGS" fi + +AC_SUBST([BUILD_WITH_LIBMONGOC_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBMONGOC_LDFLAGS]) # }}} -# --with-libmysql {{{ -with_mysql_config="mysql_config" -with_mysql_cflags="" -with_mysql_libs="" -AC_ARG_WITH(libmysql, [AS_HELP_STRING([--with-libmysql@<:@=PREFIX@:>@], [Path to libmysql.])], -[ - if test "x$withval" = "xno" - then - with_libmysql="no" - else if test "x$withval" = "xyes" - then - with_libmysql="yes" - else - if test -f "$withval" && test -x "$withval"; - then - with_mysql_config="$withval" - else if test -x "$withval/bin/mysql_config" - then - with_mysql_config="$withval/bin/mysql_config" - fi; fi - with_libmysql="yes" - fi; fi -], -[ - with_libmysql="yes" -]) -if test "x$with_libmysql" = "xyes" -then - with_mysql_cflags=`$with_mysql_config --include 2>/dev/null` - mysql_config_status=$? - - if test $mysql_config_status -ne 0 - then - with_libmysql="no ($with_mysql_config failed)" - else - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_mysql_cflags" - - have_mysql_h="no" - have_mysql_mysql_h="no" - AC_CHECK_HEADERS(mysql.h, [have_mysql_h="yes"]) - - if test "x$have_mysql_h" = "xno" - then - AC_CHECK_HEADERS(mysql/mysql.h, [have_mysql_mysql_h="yes"]) - fi - - if test "x$have_mysql_h$have_mysql_mysql_h" = "xnono" - then - with_libmysql="no (mysql.h not found)" - fi - - CPPFLAGS="$SAVE_CPPFLAGS" - fi -fi -if test "x$with_libmysql" = "xyes" -then - with_mysql_libs=`$with_mysql_config --libs_r 2>/dev/null` - mysql_config_status=$? - - if test $mysql_config_status -ne 0 - then - with_libmysql="no ($with_mysql_config failed)" - else - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_mysql_cflags" - SAVE_LIBS="$LIBS" - LIBS="$with_mysql_libs" - AC_SEARCH_LIBS([mysql_get_server_version], - [], - [with_libmysql="yes"], - [with_libmysql="no (symbol 'mysql_get_server_version' not found)"], - []) - CPPFLAGS="$SAVE_CPPFLAGS" - LIBS="$SAVE_LIBS" - fi -fi -if test "x$with_libmysql" = "xyes" -then - BUILD_WITH_LIBMYSQL_CFLAGS="$with_mysql_cflags" - BUILD_WITH_LIBMYSQL_LIBS="$with_mysql_libs" - AC_SUBST(BUILD_WITH_LIBMYSQL_CFLAGS) - AC_SUBST(BUILD_WITH_LIBMYSQL_LIBS) +# --with-libmosquitto {{{ +AC_ARG_WITH([libmosquitto], + [AS_HELP_STRING([--with-libmosquitto@<:@=PREFIX@:>@], [Path to libmosquitto.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libmosquitto_cppflags="-I$withval/include" + with_libmosquitto_ldflags="-L$withval/lib" + with_libmosquitto="yes" + else + with_libmosquitto="$withval" + fi + ], + [with_libmosquitto="yes"] +) + +if test "x$with_libmosquitto" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libmosquitto_cppflags" + + AC_CHECK_HEADERS([mosquitto.h], + [with_libmosquitto="yes"], + [with_libmosquitto="no (mosquitto.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" +fi + +if test "x$with_libmosquitto" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libmosquitto_ldflags" + + AC_CHECK_LIB([mosquitto], [mosquitto_connect], + [with_libmosquitto="yes"], + [with_libmosquitto="no (libmosquitto not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBMYSQL, test "x$with_libmysql" = "xyes") + +if test "x$with_libmosquitto" = "xyes"; then + BUILD_WITH_LIBMOSQUITTO_CPPFLAGS="$with_libmosquitto_cppflags" + BUILD_WITH_LIBMOSQUITTO_LDFLAGS="$with_libmosquitto_ldflags" + BUILD_WITH_LIBMOSQUITTO_LIBS="-lmosquitto" +fi + +AC_SUBST([BUILD_WITH_LIBMOSQUITTO_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBMOSQUITTO_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBMOSQUITTO_LIBS]) +# }}} + +# --with-libmysql {{{ +with_mysql_config="mysql_config" +AC_ARG_WITH([libmysql], + [AS_HELP_STRING([--with-libmysql@<:@=PREFIX@:>@], [Path to libmysql.])], + [ + if test "x$withval" = "xno"; then + with_libmysql="no" + else if test "x$withval" = "xyes"; then + with_libmysql="yes" + else + if test -f "$withval" && test -x "$withval"; then + with_mysql_config="$withval" + else if test -x "$withval/bin/mysql_config"; then + with_mysql_config="$withval/bin/mysql_config" + fi; fi + with_libmysql="yes" + fi; fi + ], + [with_libmysql="yes"] +) + +if test "x$with_libmysql" = "xyes"; then + with_mysql_cflags=`$with_mysql_config --include 2>/dev/null` + if test $? -ne 0; then + with_libmysql="no ($with_mysql_config failed)" + else + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_mysql_cflags" + + AC_CHECK_HEADERS([mysql.h], + [have_mysql_h="yes"], + [have_mysql_h="no"] + ) + + if test "x$have_mysql_h" != "xyes"; then + AC_CHECK_HEADERS([mysql/mysql.h], + [have_mysql_mysql_h="yes"], + [], + ) + fi + + if test "x$have_mysql_h" != "xyes" && test "x$have_mysql_mysql_h" != "xyes"; then + with_libmysql="no (mysql.h not found)" + fi + + CPPFLAGS="$SAVE_CPPFLAGS" + fi +fi + +if test "x$with_libmysql" = "xyes"; then + with_mysql_libs=`$with_mysql_config --libs_r 2>/dev/null` + if test $? -ne 0; then + with_libmysql="no ($with_mysql_config failed)" + else + SAVE_LIBS="$LIBS" + LIBS="$with_mysql_libs" + + AC_SEARCH_LIBS([mysql_get_server_version], + [], + [with_libmysql="yes"], + [with_libmysql="no (symbol 'mysql_get_server_version' not found in ${LIBS})"], + [] + ) + LIBS="$SAVE_LIBS" + fi +fi + +if test "x$with_libmysql" = "xyes"; then + BUILD_WITH_LIBMYSQL_CFLAGS="$with_mysql_cflags" + BUILD_WITH_LIBMYSQL_LIBS="$with_mysql_libs" +fi + +AC_SUBST([BUILD_WITH_LIBMYSQL_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBMYSQL_LIBS]) # }}} # --with-libmnl {{{ -with_libmnl_cflags="" -with_libmnl_libs="" -AC_ARG_WITH(libmnl, [AS_HELP_STRING([--with-libmnl@<:@=PREFIX@:>@], [Path to libmnl.])], -[ - echo "libmnl: withval = $withval" - if test "x$withval" = "xyes" - then - with_libmnl="yes" - else if test "x$withval" = "xno" - then - with_libmnl="no" - else - if test -d "$withval/include" - then - with_libmnl_cflags="-I$withval/include" - with_libmnl_libs="-L$withval/lib -lmnl" - with_libmnl="yes" - else - AC_MSG_ERROR("no such directory: $withval/include") - fi - fi; fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_libmnl="yes" - else - with_libmnl="no (Linux only library)" - fi -]) -if test "x$with_libmnl" = "xyes" -then - if $PKG_CONFIG --exists libmnl 2>/dev/null; then - with_libmnl_cflags="$with_libmnl_ldflags `$PKG_CONFIG --cflags libmnl`" - with_libmnl_libs="$with_libmnl_libs `$PKG_CONFIG --libs libmnl`" - fi - - AC_CHECK_HEADERS(libmnl.h libmnl/libmnl.h, - [ - with_libmnl="yes" - break - ], [], -[#include -#include -#include -#include -#include -#include ]) - AC_CHECK_HEADERS(linux/gen_stats.h linux/pkt_sched.h, [], [], -[#include -#include -#include -#include ]) - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[ -#include -#include -#include -#include -#include -#include -]], -[[ -int retval = TCA_STATS2; -return (retval); -]] - )], - [AC_DEFINE([HAVE_TCA_STATS2], [1], [True if the enum-member TCA_STATS2 exists])]) - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[ -#include -#include -#include -#include -#include -#include -]], -[[ -int retval = TCA_STATS; -return (retval); -]] - )], - [AC_DEFINE([HAVE_TCA_STATS], 1, [True if the enum-member TCA_STATS exists])]) -fi -if test "x$with_libmnl" = "xyes" -then - AC_CHECK_MEMBERS([struct rtnl_link_stats64.tx_window_errors], - [AC_DEFINE(HAVE_RTNL_LINK_STATS64, 1, [Define if struct rtnl_link_stats64 exists and is usable.])], - [], - [ - #include - ]) -fi -if test "x$with_libmnl" = "xyes" -then - AC_CHECK_LIB(mnl, mnl_nlmsg_get_payload, - [with_libmnl="yes"], - [with_libmnl="no (symbol 'mnl_nlmsg_get_payload' not found)"], - [$with_libmnl_libs]) +AC_ARG_WITH([libmnl], + [AS_HELP_STRING([--with-libmnl@<:@=PREFIX@:>@], [Path to libmnl.])], + [ + if test "x$withval" = "xyes"; then + with_libmnl="yes" + else if test "x$withval" = "xno"; then + with_libmnl="no" + else + if test -d "$withval/include"; then + with_libmnl_cflags="-I$withval/include" + with_libmnl_libs="-L$withval/lib -lmnl" + with_libmnl="yes" + else + AC_MSG_ERROR("no such directory: $withval/include") + fi + fi; fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_libmnl="yes" + else + with_libmnl="no (Linux only library)" + fi + ] +) + +if test "x$with_libmnl" = "xyes"; then + if $PKG_CONFIG --exists libmnl 2>/dev/null; then + with_libmnl_cflags="$with_libmnl_ldflags `$PKG_CONFIG --cflags libmnl`" + with_libmnl_libs="$with_libmnl_libs `$PKG_CONFIG --libs libmnl`" + fi + + AC_CHECK_HEADERS([libmnl.h libmnl/libmnl.h], + [ + with_libmnl="yes" + break + ], + [], + [[ + #include + #include + #include + #include + #include + #include ]] + ) + + AC_CHECK_HEADERS([linux/gen_stats.h linux/pkt_sched.h], + [], + [], + [[ + #include + #include + #include + #include + ]] + ) + + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + #include + #include + #include + ]], + [[ + int retval = TCA_STATS2; + return retval; + ]] + ) + ], + [AC_DEFINE([HAVE_TCA_STATS2], [1], [True if the enum-member TCA_STATS2 exists])] + ) + + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + #include + #include + #include + ]], + [[ + int retval = TCA_STATS; + return retval; + ]] + ) + ], + [AC_DEFINE([HAVE_TCA_STATS], 1, [True if the enum-member TCA_STATS exists])] + ) + + AC_CHECK_MEMBERS([struct rtnl_link_stats64.tx_window_errors], + [AC_DEFINE(HAVE_RTNL_LINK_STATS64, 1, [Define if struct rtnl_link_stats64 exists and is usable.])], + [], + [[#include ]] + ) + + AC_CHECK_LIB([mnl], [mnl_nlmsg_get_payload], + [with_libmnl="yes"], + [with_libmnl="no (symbol 'mnl_nlmsg_get_payload' not found)"], + [$with_libmnl_libs] + ) fi -if test "x$with_libmnl" = "xyes" -then - AC_DEFINE(HAVE_LIBMNL, 1, [Define if libmnl is present and usable.]) - BUILD_WITH_LIBMNL_CFLAGS="$with_libmnl_cflags" - BUILD_WITH_LIBMNL_LIBS="$with_libmnl_libs" - AC_SUBST(BUILD_WITH_LIBMNL_CFLAGS) - AC_SUBST(BUILD_WITH_LIBMNL_LIBS) + +if test "x$with_libmnl" = "xyes"; then + BUILD_WITH_LIBMNL_CFLAGS="$with_libmnl_cflags" + BUILD_WITH_LIBMNL_LIBS="$with_libmnl_libs" fi -AM_CONDITIONAL(BUILD_WITH_LIBMNL, test "x$with_libmnl" = "xyes") +AC_SUBST([BUILD_WITH_LIBMNL_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBMNL_LIBS]) # }}} # --with-libnetapp {{{ AC_ARG_VAR([LIBNETAPP_CPPFLAGS], [C preprocessor flags required to build with libnetapp]) AC_ARG_VAR([LIBNETAPP_LDFLAGS], [Linker flags required to build with libnetapp]) AC_ARG_VAR([LIBNETAPP_LIBS], [Other libraries required to link against libnetapp]) -LIBNETAPP_CPPFLAGS="$LIBNETAPP_CPPFLAGS" -LIBNETAPP_LDFLAGS="$LIBNETAPP_LDFLAGS" -LIBNETAPP_LIBS="$LIBNETAPP_LIBS" -AC_ARG_WITH(libnetapp, [AS_HELP_STRING([--with-libnetapp@<:@=PREFIX@:>@], [Path to libnetapp.])], -[ - if test -d "$withval" - then - LIBNETAPP_CPPFLAGS="$LIBNETAPP_CPPFLAGS -I$withval/include" - LIBNETAPP_LDFLAGS="$LIBNETAPP_LDFLAGS -L$withval/lib" - with_libnetapp="yes" - else - with_libnetapp="$withval" - fi -], -[ - with_libnetapp="yes" -]) +AC_ARG_WITH([libnetapp], + [AS_HELP_STRING([--with-libnetapp@<:@=PREFIX@:>@], [Path to libnetapp.])], + [ + if test -d "$withval"; then + LIBNETAPP_CPPFLAGS="$LIBNETAPP_CPPFLAGS -I$withval/include" + LIBNETAPP_LDFLAGS="$LIBNETAPP_LDFLAGS -L$withval/lib" + with_libnetapp="yes" + else + with_libnetapp="$withval" + fi + ], + [with_libnetapp="yes"] +) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $LIBNETAPP_CPPFLAGS" LDFLAGS="$LDFLAGS $LIBNETAPP_LDFLAGS" -if test "x$with_libnetapp" = "xyes" -then - if test "x$LIBNETAPP_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([netapp CPPFLAGS: $LIBNETAPP_CPPFLAGS]) - fi - AC_CHECK_HEADERS(netapp_api.h, - [with_libnetapp="yes"], - [with_libnetapp="no (netapp_api.h not found)"]) +if test "x$with_libnetapp" = "xyes"; then + if test "x$LIBNETAPP_CPPFLAGS" != "x"; then + AC_MSG_NOTICE([netapp CPPFLAGS: $LIBNETAPP_CPPFLAGS]) + fi + AC_CHECK_HEADERS([netapp_api.h], + [with_libnetapp="yes"], + [with_libnetapp="no (netapp_api.h not found)"] + ) fi -if test "x$with_libnetapp" = "xyes" -then - if test "x$LIBNETAPP_LDFLAGS" != "x" - then - AC_MSG_NOTICE([netapp LDFLAGS: $LIBNETAPP_LDFLAGS]) - fi +if test "x$with_libnetapp" = "xyes"; then + if test "x$LIBNETAPP_LDFLAGS" != "x"; then + AC_MSG_NOTICE([netapp LDFLAGS: $LIBNETAPP_LDFLAGS]) + fi - if test "x$LIBNETAPP_LIBS" = "x" - then - LIBNETAPP_LIBS="$PTHREAD_LIBS -lxml -ladt -lssl -lm -lcrypto -lz" - fi - AC_MSG_NOTICE([netapp LIBS: $LIBNETAPP_LIBS]) + if test "x$LIBNETAPP_LIBS" = "x"; then + LIBNETAPP_LIBS="$PTHREAD_LIBS -lxml -ladt -lssl -lm -lcrypto -lz" + fi + + AC_MSG_NOTICE([netapp LIBS: $LIBNETAPP_LIBS]) + + AC_CHECK_LIB([netapp], [na_server_invoke_elem], + [with_libnetapp="yes"], + [with_libnetapp="no (symbol na_server_invoke_elem not found)"], + [$LIBNETAPP_LIBS] + ) - AC_CHECK_LIB(netapp, na_server_invoke_elem, - [with_libnetapp="yes"], - [with_libnetapp="no (symbol na_server_invoke_elem not found)"], - [$LIBNETAPP_LIBS]) - LIBNETAPP_LIBS="-lnetapp $LIBNETAPP_LIBS" + LIBNETAPP_LIBS="-lnetapp $LIBNETAPP_LIBS" fi CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" -if test "x$with_libnetapp" = "xyes" -then - AC_DEFINE(HAVE_LIBNETAPP, 1, [Define to 1 if you have the netapp library (-lnetapp).]) -fi - -AC_SUBST(LIBNETAPP_CPPFLAGS) -AC_SUBST(LIBNETAPP_LDFLAGS) -AC_SUBST(LIBNETAPP_LIBS) -AM_CONDITIONAL(BUILD_WITH_LIBNETAPP, test "x$with_libnetapp" = "xyes") +AC_SUBST([LIBNETAPP_CPPFLAGS]) +AC_SUBST([LIBNETAPP_LDFLAGS]) +AC_SUBST([LIBNETAPP_LIBS]) # }}} # --with-libnetsnmp {{{ -AC_ARG_WITH(libnetsnmp, [AS_HELP_STRING([--with-libnetsnmp@<:@=PREFIX@:>@], [Path to the Net-SNMPD library.])], -[ - if test "x$withval" = "xno" - then - with_libnetsnmp="no" - else if test "x$withval" = "xyes" - then - with_libnetsnmp="yes" - else - with_libnetsnmp_cppflags="-I$withval/include" - with_libnetsnmp_ldflags="-I$withval/lib" - with_libnetsnmp="yes" - fi; fi -], -[with_libnetsnmp="yes"]) -if test "x$with_libnetsnmp" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libnetsnmp_cppflags" +AC_ARG_WITH([libnetsnmp], + [AS_HELP_STRING([--with-libnetsnmp@<:@=PREFIX@:>@], [Path to libnetsnmp.])], + [ + if test "x$withval" = "xno"; then + with_libnetsnmp="no" + else if test "x$withval" = "xyes"; then + with_libnetsnmp="yes" + else + with_libnetsnmp_cppflags="-I$withval/include" + with_libnetsnmp_ldflags="-I$withval/lib" + with_libnetsnmp="yes" + fi; fi + ], + [with_libnetsnmp="yes"] +) + +if test "x$with_libnetsnmp" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libnetsnmp_cppflags" - AC_CHECK_HEADERS(net-snmp/net-snmp-config.h, [], [with_libnetsnmp="no (net-snmp/net-snmp-config.h not found)"]) + AC_CHECK_HEADERS([net-snmp/net-snmp-config.h], + [with_libnetsnmp="yes"], + [with_libnetsnmp="no (net-snmp/net-snmp-config.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + AC_CHECK_HEADERS([net-snmp/net-snmp-includes.h], + [with_libnetsnmp="yes"], + [with_libnetsnmp="no (net-snmp/net-snmp-includes.h not found)"], + [[ + #if HAVE_NET_SNMP_NET_SNMP_CONFIG_H + # include + #endif + ]] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libnetsnmp" = "xyes" -then - SAVE_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $with_libnetsnmp_ldflags" - AC_CHECK_LIB(netsnmp, init_snmp, - [with_libnetsnmp="yes"], - [with_libnetsnmp="no (libnetsnmp not found)"], - [$with_snmp_libs]) +if test "x$with_libnetsnmp" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libnetsnmp_ldflags" + + AC_CHECK_LIB([netsnmp], [init_snmp], + [with_libnetsmp="yes"], + [with_libnetsnmp="no (libnetsnmp not found)"] + ) - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libnetsnmp" = "xyes" -then - BUILD_WITH_LIBNETSNMP_CPPFLAGS="$with_libnetsnmp_cppflags" - BUILD_WITH_LIBNETSNMP_LDFLAGS="$with_libnetsnmp_ldflags" - BUILD_WITH_LIBNETSNMP_LIBS="-lnetsnmp" + +if test "x$with_libnetsnmp" = "xyes"; then + BUILD_WITH_LIBNETSNMP_CPPFLAGS="$with_libnetsnmp_cppflags" + BUILD_WITH_LIBNETSNMP_LDFLAGS="$with_libnetsnmp_ldflags" + BUILD_WITH_LIBNETSNMP_LIBS="-lnetsnmp" fi -AC_SUBST(BUILD_WITH_LIBNETSNMP_CPPFLAGS) -AC_SUBST(BUILD_WITH_LIBNETSNMP_LDFLAGS) -AC_SUBST(BUILD_WITH_LIBNETSNMP_LIBS) + +AC_SUBST([BUILD_WITH_LIBNETSNMP_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBNETSNMP_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBNETSNMP_LIBS]) # }}} -# --with-liboconfig {{{ -with_own_liboconfig="no" -liboconfig_LDFLAGS="$LDFLAGS" -liboconfig_CPPFLAGS="$CPPFLAGS" -AC_ARG_WITH(liboconfig, [AS_HELP_STRING([--with-liboconfig@<:@=PREFIX@:>@], [Path to liboconfig.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - if test -d "$withval/lib" - then - liboconfig_LDFLAGS="$LDFLAGS -L$withval/lib" - fi - if test -d "$withval/include" - then - liboconfig_CPPFLAGS="$CPPFLAGS -I$withval/include" - fi - fi - if test "x$withval" = "xno" - then - AC_MSG_ERROR("liboconfig is required") - fi -], -[ - with_liboconfig="yes" -]) +# --with-libnetsmpagent {{{ +AC_ARG_WITH([libnetsnmpagent], + [AS_HELP_STRING([--with-libnetsnmpagent@<:@=PREFIX@:>@], [Path to libnetsnmpagent.])], + [ + if test "x$withval" = "xno"; then + with_libnetsnmpagent="no" + else if test "x$withval" = "xyes"; then + with_libnetsnmpagent="yes" + else + with_libnetsnmpagent_cppflags="-I$withval/include" + with_libnetsnmpagent_ldflags="-I$withval/lib" + with_libnetsnmpagent="yes" + fi; fi + ], + [with_libnetsnmpagent="yes"] +) -save_LDFLAGS="$LDFLAGS" -save_CPPFLAGS="$CPPFLAGS" -LDFLAGS="$liboconfig_LDFLAGS" -CPPFLAGS="$liboconfig_CPPFLAGS" -AC_CHECK_LIB(oconfig, oconfig_parse_file, -[ - with_liboconfig="yes" - with_own_liboconfig="no" -], -[ - with_liboconfig="yes" - with_own_liboconfig="yes" - LDFLAGS="$save_LDFLAGS" - CPPFLAGS="$save_CPPFLAGS" -]) +if test "x$with_libnetsnmpagent" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libnetsnmpagent_cppflags" -AM_CONDITIONAL(BUILD_WITH_OWN_LIBOCONFIG, test "x$with_own_liboconfig" = "xyes") -if test "x$with_own_liboconfig" = "xyes" -then - with_liboconfig="yes (shipped version)" + AC_CHECK_HEADERS([net-snmp/agent/net-snmp-agent-includes.h], + [], + [with_libnetsnmpagent="no (net-snmp/agent/net-snmp-agent-includes.h not found)"], + [[ + #if HAVE_NET_SNMP_NET_SNMP_CONFIG_H + # include + #endif + #if HAVE_NET_SNMP_NET_SNMP_INCLUDES_H + # include + #endif + ]] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi + +if test "x$with_libnetsnmpagent" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libnetsnmpagent_ldflags" + + # older versions of libnetsnmpagent fail to link + # against the helpers library, so do that explicitly + AC_CHECK_LIB([netsnmphelpers], [netsnmp_init_helpers], + [libnetsnmphelpers="-lnetsnmphelpers"], + [libnetsnmphelpers=""] + ) + + AC_CHECK_LIB([netsnmpagent], [init_agent], + [with_libnetsnmpagent="yes"], + [with_libnetsnmpagent="no (libnetsnmpagent not found)"], + [$libnetsnmphelpers] + ) + + LDFLAGS="$SAVE_LDFLAGS" +fi + +if test "x$with_libnetsnmpagent" = "xyes"; then + BUILD_WITH_LIBNETSNMPAGENT_LIBS="-lnetsnmpagent $libnetsnmphelpers" +fi + +AC_SUBST([BUILD_WITH_LIBNETSNMPAGENT_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBNETSNMPAGENT_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBNETSNMPAGENT_LIBS]) # }}} # --with-liboping {{{ -AC_ARG_WITH(liboping, [AS_HELP_STRING([--with-liboping@<:@=PREFIX@:>@], [Path to liboping.])], -[ - if test "x$withval" = "xyes" - then - with_liboping="yes" - else if test "x$withval" = "xno" - then - with_liboping="no" - else - with_liboping="yes" - LIBOPING_CPPFLAGS="$LIBOPING_CPPFLAGS -I$withval/include" - LIBOPING_LDFLAGS="$LIBOPING_LDFLAGS -L$withval/lib" - fi; fi -], -[with_liboping="yes"]) +AC_ARG_WITH([liboping], + [AS_HELP_STRING([--with-liboping@<:@=PREFIX@:>@], [Path to liboping.])], + [ + if test "x$withval" = "xyes"; then + with_liboping="yes" + else if test "x$withval" = "xno"; then + with_liboping="no" + else + with_liboping="yes" + LIBOPING_CPPFLAGS="-I$withval/include" + LIBOPING_LDFLAGS="-L$withval/lib" + fi; fi + ], + [with_liboping="yes"] +) SAVE_CPPFLAGS="$CPPFLAGS" SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $LIBOPING_CPPFLAGS" LDFLAGS="$LDFLAGS $LIBOPING_LDFLAGS" -if test "x$with_liboping" = "xyes" -then - if test "x$LIBOPING_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([liboping CPPFLAGS: $LIBOPING_CPPFLAGS]) - fi - AC_CHECK_HEADERS(oping.h, - [with_liboping="yes"], - [with_liboping="no (oping.h not found)"]) -fi -if test "x$with_liboping" = "xyes" -then - if test "x$LIBOPING_LDFLAGS" != "x" - then - AC_MSG_NOTICE([liboping LDFLAGS: $LIBOPING_LDFLAGS]) - fi - AC_CHECK_LIB(oping, ping_construct, - [with_liboping="yes"], - [with_liboping="no (symbol 'ping_construct' not found)"]) +if test "x$with_liboping" = "xyes"; then + AC_CHECK_HEADERS([oping.h], + [with_liboping="yes"], + [with_liboping="no (oping.h not found)"] + ) +fi + +if test "x$with_liboping" = "xyes"; then + AC_CHECK_LIB([oping], [ping_construct], + [with_liboping="yes"], + [with_liboping="no (symbol 'ping_construct' not found)"] + ) fi CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" -if test "x$with_liboping" = "xyes" -then - BUILD_WITH_LIBOPING_CPPFLAGS="$LIBOPING_CPPFLAGS" - BUILD_WITH_LIBOPING_LDFLAGS="$LIBOPING_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBOPING_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBOPING_LDFLAGS) +if test "x$with_liboping" = "xyes"; then + BUILD_WITH_LIBOPING_CPPFLAGS="$LIBOPING_CPPFLAGS" + BUILD_WITH_LIBOPING_LDFLAGS="$LIBOPING_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBOPING, test "x$with_liboping" = "xyes") + +AC_SUBST([BUILD_WITH_LIBOPING_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBOPING_LDFLAGS]) # }}} # --with-oracle {{{ -with_oracle_cppflags="" -with_oracle_libs="" -AC_ARG_WITH(oracle, [AS_HELP_STRING([--with-oracle@<:@=ORACLE_HOME@:>@], [Path to Oracle.])], -[ - if test "x$withval" = "xyes" - then - if test "x$ORACLE_HOME" = "x" - then - AC_MSG_WARN([Use of the Oracle library has been forced, but the environment variable ORACLE_HOME is not set.]) - fi - with_oracle="yes" - else if test "x$withval" = "xno" - then - with_oracle="no" - else - with_oracle="yes" - ORACLE_HOME="$withval" - fi; fi -], -[ - if test "x$ORACLE_HOME" = "x" - then - with_oracle="no (ORACLE_HOME is not set)" - else - with_oracle="yes" - fi -]) -if test "x$ORACLE_HOME" != "x" -then - with_oracle_cppflags="-I$ORACLE_HOME/rdbms/public" +AC_ARG_WITH([oracle], + [AS_HELP_STRING([--with-oracle@<:@=ORACLE_HOME@:>@], [Path to Oracle.])], + [ + if test "x$withval" = "xyes"; then + if test "x$ORACLE_HOME" = "x"; then + AC_MSG_WARN([Use of the Oracle library has been forced, but the environment variable ORACLE_HOME is not set.]) + fi + with_oracle="yes" + else if test "x$withval" = "xno"; then + with_oracle="no" + else + with_oracle="yes" + ORACLE_HOME="$withval" + fi; fi + ], + [ + if test "x$ORACLE_HOME" = "x"; then + with_oracle="no (ORACLE_HOME is not set)" + else + with_oracle="yes" + fi + ] +) - if test -e "$ORACLE_HOME/lib/ldflags" - then - with_oracle_libs=`cat "$ORACLE_HOME/lib/ldflags"` - fi - #with_oracle_libs="-L$ORACLE_HOME/lib $with_oracle_libs -lclntsh" - with_oracle_libs="-L$ORACLE_HOME/lib -lclntsh" +if test "x$ORACLE_HOME" != "x"; then + with_oracle_cppflags="-I$ORACLE_HOME/rdbms/public" + if test -e "$ORACLE_HOME/lib/ldflags"; then + with_oracle_libs=`cat "$ORACLE_HOME/lib/ldflags"` + fi + with_oracle_libs="-L$ORACLE_HOME/lib -lclntsh" fi -if test "x$with_oracle" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_oracle_cppflags" - AC_CHECK_HEADERS(oci.h, [with_oracle="yes"], [with_oracle="no (oci.h not found)"]) +if test "x$with_oracle" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_oracle_cppflags" + + AC_CHECK_HEADERS([oci.h], + [with_oracle="yes"], + [with_oracle="no (oci.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_oracle" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LIBS="$LIBS" - CPPFLAGS="$CPPFLAGS $with_oracle_cppflags" - LIBS="$LIBS $with_oracle_libs" - AC_CHECK_FUNC(OCIEnvCreate, [with_oracle="yes"], [with_oracle="no (Symbol 'OCIEnvCreate' not found)"]) +if test "x$with_oracle" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $with_oracle_cppflags" + LIBS="$LIBS $with_oracle_libs" + + AC_CHECK_FUNC([OCIEnvCreate], + [with_oracle="yes"], + [with_oracle="no (Symbol 'OCIEnvCreate' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LIBS="$SAVE_LIBS" + CPPFLAGS="$SAVE_CPPFLAGS" + LIBS="$SAVE_LIBS" fi -if test "x$with_oracle" = "xyes" -then - BUILD_WITH_ORACLE_CPPFLAGS="$with_oracle_cppflags" - BUILD_WITH_ORACLE_LIBS="$with_oracle_libs" - AC_SUBST(BUILD_WITH_ORACLE_CPPFLAGS) - AC_SUBST(BUILD_WITH_ORACLE_LIBS) + +if test "x$with_oracle" = "xyes"; then + BUILD_WITH_ORACLE_CPPFLAGS="$with_oracle_cppflags" + BUILD_WITH_ORACLE_LIBS="$with_oracle_libs" fi + +AC_SUBST([BUILD_WITH_ORACLE_CPPFLAGS]) +AC_SUBST([BUILD_WITH_ORACLE_LIBS]) # }}} # --with-libowcapi {{{ -with_libowcapi_cppflags="" -with_libowcapi_ldflags="" -AC_ARG_WITH(libowcapi, [AS_HELP_STRING([--with-libowcapi@<:@=PREFIX@:>@], [Path to libowcapi.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libowcapi_cppflags="-I$withval/include" - with_libowcapi_ldflags="-L$withval/lib" - with_libowcapi="yes" - else - with_libowcapi="$withval" - fi -], -[ - with_libowcapi="yes" -]) -if test "x$with_libowcapi" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libowcapi_cppflags" +AC_ARG_WITH([libowcapi], + [AS_HELP_STRING([--with-libowcapi@<:@=PREFIX@:>@], [Path to libowcapi.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libowcapi_cppflags="-I$withval/include" + with_libowcapi_ldflags="-L$withval/lib" + with_libowcapi="yes" + else + with_libowcapi="$withval" + fi + ], + [with_libowcapi="yes"] +) - AC_CHECK_HEADERS(owcapi.h, [with_libowcapi="yes"], [with_libowcapi="no (owcapi.h not found)"]) +if test "x$with_libowcapi" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libowcapi_cppflags" + + AC_CHECK_HEADERS([owcapi.h], + [with_libowcapi="yes"], + [with_libowcapi="no (owcapi.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libowcapi" = "xyes" -then - SAVE_LDFLAGS="$LDFLAGS" - SAVE_CPPFLAGS="$CPPFLAGS" - LDFLAGS="$LDFLAGS $with_libowcapi_ldflags" - CPPFLAGS="$with_libowcapi_cppflags" - AC_CHECK_LIB(owcapi, OW_get, [with_libowcapi="yes"], [with_libowcapi="no (libowcapi not found)"]) +if test "x$with_libowcapi" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libowcapi_ldflags" + + AC_CHECK_LIB([owcapi], [OW_get], + [with_libowcapi="yes"], + [with_libowcapi="no (libowcapi not found)"] + ) - LDFLAGS="$SAVE_LDFLAGS" - CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libowcapi" = "xyes" -then - BUILD_WITH_LIBOWCAPI_CPPFLAGS="$with_libowcapi_cppflags" - BUILD_WITH_LIBOWCAPI_LDFLAGS="$with_libowcapi_ldflags" - BUILD_WITH_LIBOWCAPI_LIBS="-lowcapi" - AC_SUBST(BUILD_WITH_LIBOWCAPI_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBOWCAPI_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBOWCAPI_LIBS) + +if test "x$with_libowcapi" = "xyes"; then + BUILD_WITH_LIBOWCAPI_CPPFLAGS="$with_libowcapi_cppflags" + BUILD_WITH_LIBOWCAPI_LDFLAGS="$with_libowcapi_ldflags" + BUILD_WITH_LIBOWCAPI_LIBS="-lowcapi" fi + +AC_SUBST([BUILD_WITH_LIBOWCAPI_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBOWCAPI_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBOWCAPI_LIBS]) # }}} # --with-libpcap {{{ -AC_ARG_WITH(libpcap, [AS_HELP_STRING([--with-libpcap@<:@=PREFIX@:>@], [Path to libpcap.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - LDFLAGS="$LDFLAGS -L$withval/lib" - CPPFLAGS="$CPPFLAGS -I$withval/include" - with_libpcap="yes" - else - with_libpcap="$withval" - fi -], -[ - with_libpcap="yes" -]) -if test "x$with_libpcap" = "xyes" -then - AC_CHECK_LIB(pcap, pcap_open_live, - [ - AC_DEFINE(HAVE_LIBPCAP, 1, [Define to 1 if you have the pcap library (-lpcap).]) - ], [with_libpcap="no (libpcap not found)"]) +AC_ARG_WITH([libpcap], + [AS_HELP_STRING([--with-libpcap@<:@=PREFIX@:>@], [Path to libpcap.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libpcap_cppflags="-I$withval/include" + with_libpcap_ldflags="$LDFLAGS -L$withval/lib" + with_libpcap="yes" + else + with_libpcap="$withval" + fi + ], + [with_libpcap="yes"] +) + +if test "x$with_libpcap" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libpcap_cppflags" + + AC_CHECK_HEADERS([pcap.h], + [with_libpcap="yes"], + [with_libpcap="no (pcap.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libpcap" = "xyes" -then - AC_CHECK_HEADERS(pcap.h,, - [with_libpcap="no (pcap.h not found)"]) + +if test "x$with_libpcap" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libpcap_ldflags" + + AC_CHECK_LIB([pcap], [pcap_open_live], + [with_libpcap="yes"], + [with_libpcap="no (libpcap not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libpcap" = "xyes" -then - AC_CACHE_CHECK([whether libpcap has PCAP_ERROR_IFACE_NOT_UP], - [c_cv_libpcap_have_pcap_error_iface_not_up], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -]]], -[[[ - int val = PCAP_ERROR_IFACE_NOT_UP; - return(val); -]]] - )], - [c_cv_libpcap_have_pcap_error_iface_not_up="yes"], - [c_cv_libpcap_have_pcap_error_iface_not_up="no"])) + +if test "x$with_libpcap" = "xyes"; then + AC_CACHE_CHECK([whether libpcap has PCAP_ERROR_IFACE_NOT_UP], + [c_cv_libpcap_have_pcap_error_iface_not_up], + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [[#include ]], + [[ + int val = PCAP_ERROR_IFACE_NOT_UP; + return(val); + ]] + ) + ], + [c_cv_libpcap_have_pcap_error_iface_not_up="yes"], + [c_cv_libpcap_have_pcap_error_iface_not_up="no"] + ) + ] + ) fi -if test "x$c_cv_libpcap_have_pcap_error_iface_not_up" != "xyes" -then - with_libpcap="no (pcap.h misses PCAP_ERROR_IFACE_NOT_UP)" + +if test "x$c_cv_libpcap_have_pcap_error_iface_not_up" != "xyes"; then + with_libpcap="no (pcap.h misses PCAP_ERROR_IFACE_NOT_UP)" +fi + +if test "x$with_libpcap" = "xyes"; then + BUILD_WITH_LIBPCAP_CPPFLAGS="$with_libpcap_cppflags" + BUILD_WITH_LIBPCAP_LDFLAGS="$with_libpcap_ldflags" + BUILD_WITH_LIBPCAP_LIBS="-lpcap" fi -AM_CONDITIONAL(BUILD_WITH_LIBPCAP, test "x$with_libpcap" = "xyes") + +AC_SUBST([BUILD_WITH_LIBPCAP_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBPCAP_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBPCAP_LIBS]) # }}} # --with-libperl {{{ -perl_interpreter="perl" -AC_ARG_WITH(libperl, [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to libperl.])], -[ - if test -f "$withval" && test -x "$withval" - then - perl_interpreter="$withval" - with_libperl="yes" - else if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - LDFLAGS="$LDFLAGS -L$withval/lib" - CPPFLAGS="$CPPFLAGS -I$withval/include" - perl_interpreter="$withval/bin/perl" - with_libperl="yes" - else - with_libperl="$withval" - fi; fi -], -[ - with_libperl="yes" -]) +AC_ARG_WITH([libperl], + [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to libperl.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + LDFLAGS="$LDFLAGS -L$withval/lib" + CPPFLAGS="$CPPFLAGS -I$withval/include" + with_libperl="yes" + else + with_libperl="$withval" + fi + ], + [with_libperl="yes"] +) -AC_MSG_CHECKING([for perl]) -perl_interpreter=`which "$perl_interpreter" 2> /dev/null` -if test -x "$perl_interpreter" -then - AC_MSG_RESULT([yes ($perl_interpreter)]) -else - perl_interpreter="" - AC_MSG_RESULT([no]) -fi +AC_ARG_VAR([PERL], [path to Perl interpreter]) +AC_PATH_PROG([PERL], [perl]) -AC_SUBST(PERL, "$perl_interpreter") +if test "x$PERL" = "x"; then + with_libperl="no (no Perl interpreter found)" +fi -if test "x$with_libperl" = "xyes" \ - && test -n "$perl_interpreter" -then +if test "x$with_libperl" = "xyes"; then SAVE_CFLAGS="$CFLAGS" SAVE_LIBS="$LIBS" -dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string) - PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e perl_inc` - PERL_LIBS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts` + dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string) + PERL_CFLAGS=`ARCHFLAGS="" $PERL -MExtUtils::Embed -e perl_inc` + PERL_LIBS=`ARCHFLAGS="" $PERL -MExtUtils::Embed -e ldopts` CFLAGS="$CFLAGS $PERL_CFLAGS" LIBS="$LIBS $PERL_LIBS" AC_CACHE_CHECK([for libperl], [c_cv_have_libperl], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[[ -#define PERL_NO_GET_CONTEXT -#include -#include -#include -]]], -[[[ - dTHX; - load_module (PERL_LOADMOD_NOIMPORT, - newSVpv ("Collectd::Plugin::FooBar", 24), - Nullsv); -]]] - )], - [c_cv_have_libperl="yes"], - [c_cv_have_libperl="no"] - ) + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #define PERL_NO_GET_CONTEXT + #include + #include + #include + ]], + [[ + dTHX; + load_module (PERL_LOADMOD_NOIMPORT, + newSVpv ("Collectd::Plugin::FooBar", 24), + Nullsv); + ]] + ) + ], + [c_cv_have_libperl="yes"], + [c_cv_have_libperl="no"] + ) + ] ) - if test "x$c_cv_have_libperl" = "xyes" - then - AC_DEFINE(HAVE_LIBPERL, 1, [Define if libperl is present and usable.]) - AC_SUBST(PERL_CFLAGS) - AC_SUBST(PERL_LIBS) - else - with_libperl="no" + CFLAGS="$SAVE_CFLAGS" + LIBS="$SAVE_LIBS" + + if test "x$c_cv_have_libperl" = "xno"; then + with_libperl="no" fi +fi + +if test "x$with_libperl" = "xyes"; then + SAVE_CFLAGS="$CFLAGS" + SAVE_LIBS="$LIBS" + CFLAGS="$CFLAGS $PERL_CFLAGS" + LIBS="$LIBS $PERL_LIBS" + + AC_CACHE_CHECK([if Perl supports ithreads], + [c_cv_have_perl_ithreads], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + #include + + #if !defined(USE_ITHREADS) + # error "Perl does not support ithreads!" + #endif /* !defined(USE_ITHREADS) */ + ]], + [] + ) + ], + [c_cv_have_perl_ithreads="yes"], + [c_cv_have_perl_ithreads="no"] + ) + ] + ) CFLAGS="$SAVE_CFLAGS" LIBS="$SAVE_LIBS" -else if test -z "$perl_interpreter"; then - with_libperl="no (no perl interpreter found)" - c_cv_have_libperl="no" -fi; fi -AM_CONDITIONAL(BUILD_WITH_LIBPERL, test "x$with_libperl" = "xyes") +fi -if test "x$with_libperl" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LIBS="$LIBS" - CFLAGS="$CFLAGS $PERL_CFLAGS" - LIBS="$LIBS $PERL_LIBS" - - AC_CACHE_CHECK([if perl supports ithreads], - [c_cv_have_perl_ithreads], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -#include +if test "x$with_libperl" = "xyes"; then + # trigger an error if Perl_load_module*() uses __attribute__nonnull__(3) + # (see issues #41 and #42) + SAVE_CFLAGS="$CFLAGS" + SAVE_LIBS="$LIBS" + CFLAGS="$CFLAGS $PERL_CFLAGS -Wall -Werror" + LIBS="$LIBS $PERL_LIBS" -#if !defined(USE_ITHREADS) -# error "Perl does not support ithreads!" -#endif /* !defined(USE_ITHREADS) */ -]]], -[[[ ]]] - )], - [c_cv_have_perl_ithreads="yes"], - [c_cv_have_perl_ithreads="no"] - ) - ) + AC_CACHE_CHECK([for broken Perl_load_module()], + [c_cv_have_broken_perl_load_module], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #define PERL_NO_GET_CONTEXT + #include + #include + #include + ]], + [[ + dTHX; + load_module (PERL_LOADMOD_NOIMPORT, + newSVpv ("Collectd::Plugin::FooBar", 24), + Nullsv); + ]] + ) + ], + [c_cv_have_broken_perl_load_module="no"], + [c_cv_have_broken_perl_load_module="yes"] + ) + ] + ) + + CFLAGS="$SAVE_CFLAGS" + LIBS="$SAVE_LIBS" +fi + +if test "x$c_cv_have_broken_perl_load_module" = "xyes"; then + PERL_CFLAGS="$PERL_CFLAGS -Wno-nonnull" +fi - if test "x$c_cv_have_perl_ithreads" = "xyes" - then - AC_DEFINE(HAVE_PERL_ITHREADS, 1, [Define if Perl supports ithreads.]) - fi +if test "x$with_libperl" = "xyes"; then + SAVE_CFLAGS="$CFLAGS" + SAVE_LIBS="$LIBS" + CFLAGS="$CFLAGS $PERL_CFLAGS" + LIBS="$LIBS $PERL_LIBS" + + AC_CHECK_MEMBER( + [struct mgvtbl.svt_local], + [have_struct_mgvtbl_svt_local="yes"], + [have_struct_mgvtbl_svt_local="no"], + [[ + #include + #include + #include + ]] + ) - CFLAGS="$SAVE_CFLAGS" - LIBS="$SAVE_LIBS" + if test "x$have_struct_mgvtbl_svt_local" = "xyes"; then + AC_DEFINE([HAVE_PERL_STRUCT_MGVTBL_SVT_LOCAL], [1], [Define if Perls struct mgvtbl has member svt_local.]) + fi + + CFLAGS="$SAVE_CFLAGS" + LIBS="$SAVE_LIBS" fi +AC_SUBST([PERL_CFLAGS]) +AC_SUBST([PERL_LIBS]) + +# }}} + +# --with-libpq {{{ +with_pg_config="pg_config" +AC_ARG_WITH([libpq], + [AS_HELP_STRING([--with-libpq@<:@=PREFIX@:>@], [Path to libpq.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_libpq="$withval" + else + if test -f "$withval" && test -x "$withval"; then + with_pg_config="$withval" + else if test -x "$withval/bin/pg_config"; then + with_pg_config="$withval/bin/pg_config" + fi; fi + with_libpq="yes" + fi + ], + [with_libpq="yes"] +) + +if test "x$with_libpq" = "xyes"; then + with_libpq_includedir=`$with_pg_config --includedir 2> /dev/null` + pg_config_status=$? + + if test $pg_config_status -eq 0; then + if test -n "$with_libpq_includedir"; then + for dir in $with_libpq_includedir; do + with_libpq_cppflags="$with_libpq_cppflags -I$dir" + done + fi + else + AC_MSG_WARN([$with_pg_config returned with status $pg_config_status]) + fi -if test "x$with_libperl" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LIBS="$LIBS" - # trigger an error if Perl_load_module*() uses __attribute__nonnull__(3) - # (see issues #41 and #42) - CFLAGS="$CFLAGS $PERL_CFLAGS -Wall -Werror" - LIBS="$LIBS $PERL_LIBS" - - AC_CACHE_CHECK([for broken Perl_load_module()], - [c_cv_have_broken_perl_load_module], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[[ -#define PERL_NO_GET_CONTEXT -#include -#include -#include -]]], -[[[ - dTHX; - load_module (PERL_LOADMOD_NOIMPORT, - newSVpv ("Collectd::Plugin::FooBar", 24), - Nullsv); -]]] - )], - [c_cv_have_broken_perl_load_module="no"], - [c_cv_have_broken_perl_load_module="yes"] - ) - ) + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libpq_cppflags" - CFLAGS="$SAVE_CFLAGS" - LIBS="$SAVE_LIBS" -fi -AM_CONDITIONAL(HAVE_BROKEN_PERL_LOAD_MODULE, - test "x$c_cv_have_broken_perl_load_module" = "xyes") + AC_CHECK_HEADERS([libpq-fe.h], + [with_libpq="yes"], + [with_libpq="no (libpq-fe.h not found)"] + ) -if test "x$with_libperl" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LIBS="$LIBS" - CFLAGS="$CFLAGS $PERL_CFLAGS" - LIBS="$LIBS $PERL_LIBS" - - AC_CHECK_MEMBER( - [struct mgvtbl.svt_local], - [have_struct_mgvtbl_svt_local="yes"], - [have_struct_mgvtbl_svt_local="no"], - [ -#include -#include -#include - ]) - - if test "x$have_struct_mgvtbl_svt_local" = "xyes" - then - AC_DEFINE(HAVE_PERL_STRUCT_MGVTBL_SVT_LOCAL, 1, - [Define if Perl's struct mgvtbl has member svt_local.]) - fi - - CFLAGS="$SAVE_CFLAGS" - LIBS="$SAVE_LIBS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -# }}} -# --with-libpq {{{ -with_pg_config="pg_config" -with_libpq_includedir="" -with_libpq_libdir="" -with_libpq_cppflags="" -with_libpq_ldflags="" -AC_ARG_WITH(libpq, [AS_HELP_STRING([--with-libpq@<:@=PREFIX@:>@], - [Path to libpq.])], -[ - if test "x$withval" = "xno" - then - with_libpq="no" - else if test "x$withval" = "xyes" - then - with_libpq="yes" - else - if test -f "$withval" && test -x "$withval"; - then - with_pg_config="$withval" - else if test -x "$withval/bin/pg_config" - then - with_pg_config="$withval/bin/pg_config" - fi; fi - with_libpq="yes" - fi; fi -], -[ - with_libpq="yes" -]) -if test "x$with_libpq" = "xyes" -then - with_libpq_includedir=`$with_pg_config --includedir 2> /dev/null` - pg_config_status=$? +if test "x$with_libpq" = "xyes"; then + with_libpq_libdir=`$with_pg_config --libdir 2> /dev/null` + pg_config_status=$? - if test $pg_config_status -eq 0 - then - if test -n "$with_libpq_includedir"; then - for dir in $with_libpq_includedir; do - with_libpq_cppflags="$with_libpq_cppflags -I$dir" - done - fi - else - AC_MSG_WARN([$with_pg_config returned with status $pg_config_status]) - fi + if test $pg_config_status -eq 0 + then + if test -n "$with_libpq_libdir"; then + for dir in $with_libpq_libdir; do + with_libpq_ldflags="$with_libpq_ldflags -L$dir" + done + fi + else + AC_MSG_WARN([$with_pg_config returned with status $pg_config_status]) + fi - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libpq_cppflags" + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libpq_ldflags" - AC_CHECK_HEADERS(libpq-fe.h, [], - [with_libpq="no (libpq-fe.h not found)"], []) + AC_CHECK_LIB([pq], [PQserverVersion], + [with_libpq="yes"], + [with_libpq="no (symbol 'PQserverVersion' not found)"]) - CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libpq" = "xyes" -then - with_libpq_libdir=`$with_pg_config --libdir 2> /dev/null` - pg_config_status=$? - - if test $pg_config_status -eq 0 - then - if test -n "$with_libpq_libdir"; then - for dir in $with_libpq_libdir; do - with_libpq_ldflags="$with_libpq_ldflags -L$dir" - done - fi - else - AC_MSG_WARN([$with_pg_config returned with status $pg_config_status]) - fi - - SAVE_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $with_libpq_ldflags" - - AC_CHECK_LIB(pq, PQconnectdb, - [with_libpq="yes"], - [with_libpq="no (symbol 'PQconnectdb' not found)"]) - - AC_CHECK_LIB(pq, PQserverVersion, - [with_libpq="yes"], - [with_libpq="no (symbol 'PQserverVersion' not found)"]) - - LDFLAGS="$SAVE_LDFLAGS" -fi -if test "x$with_libpq" = "xyes" -then - BUILD_WITH_LIBPQ_CPPFLAGS="$with_libpq_cppflags" - BUILD_WITH_LIBPQ_LDFLAGS="$with_libpq_ldflags" - AC_SUBST(BUILD_WITH_LIBPQ_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBPQ_LDFLAGS) + +if test "x$with_libpq" = "xyes"; then + BUILD_WITH_LIBPQ_CPPFLAGS="$with_libpq_cppflags" + BUILD_WITH_LIBPQ_LDFLAGS="$with_libpq_ldflags" + BUILD_WITH_LIBPQ_LIBS="-lpq" fi -AM_CONDITIONAL(BUILD_WITH_LIBPQ, test "x$with_libpq" = "xyes") + +AC_SUBST([BUILD_WITH_LIBPQ_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBPQ_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBPQ_LIBS]) # }}} # --with-libpqos {{{ -with_libpqos_cppflags="" -with_libpqos_ldflags="" -AC_ARG_WITH(libpqos, [AS_HELP_STRING([--with-libpqos@<:@=PREFIX@:>@], [Path to libpqos.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libpqos_cppflags="-I$withval/include" - with_libpqos_ldflags="-L$withval/lib" - with_libpqos="yes" - else - with_libpqos="$withval" - fi -], -[ - with_libpqos="yes" -]) -if test "x$with_libpqos" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libpqos_cppflags" +AC_ARG_WITH([libpqos], + [AS_HELP_STRING([--with-libpqos@<:@=PREFIX@:>@], [Path to libpqos.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libpqos_cppflags="-I$withval/include" + with_libpqos_ldflags="-L$withval/lib" + with_libpqos="yes" + else + with_libpqos="$withval" + fi + ], + [with_libpqos="yes"] +) - AC_CHECK_HEADERS(pqos.h, [with_libpqos="yes"], [with_libpqos="no (pqos.h not found)"]) +if test "x$with_libpqos" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libpqos_cppflags" + + AC_CHECK_HEADERS([pqos.h], + [with_libpqos="yes"], + [with_libpqos="no (pqos.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libpqos" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libpqos_cppflags" - LDFLAGS="$LDFLAGS $with_libpqos_ldflags" - AC_CHECK_LIB(pqos, pqos_init, [with_libpqos="yes"], [with_libpqos="no (Can't find libpqos)"]) +if test "x$with_libpqos" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libpqos_ldflags" + + AC_CHECK_LIB([pqos], [pqos_init], + [with_libpqos="yes"], + [with_libpqos="no (Can't find libpqos)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libpqos" = "xyes" -then + +if test "x$with_libpqos" = "xyes"; then SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $with_libpqos_cppflags" - AC_RUN_IFELSE([AC_LANG_PROGRAM( - [[#include ]], - [[return !(PQOS_VERSION >= 106)]])], - [with_libpqos="yes"], [with_libpqos="no (pqos library version 1.06 or higher is required)"]) + AC_PREPROC_IFELSE( + [ + AC_LANG_SOURCE( + [[ + #include + #if PQOS_VERSION < 106 + #error "required PQOS version >= 1.06" + #endif + ]] + ) + ], + [with_libpqos="yes"], + [with_libpqos="no (pqos library version 1.06 or higher is required)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libpqos" = "xyes" -then - BUILD_WITH_LIBPQOS_CPPFLAGS="$with_libpqos_cppflags" - BUILD_WITH_LIBPQOS_LDFLAGS="$with_libpqos_ldflags" - BUILD_WITH_LIBPQOS_LIBS="-lpqos" - AC_SUBST(BUILD_WITH_LIBPQOS_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBPQOS_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBPQOS_LIBS) + +if test "x$with_libpqos" = "xyes"; then + BUILD_WITH_LIBPQOS_CPPFLAGS="$with_libpqos_cppflags" + BUILD_WITH_LIBPQOS_LDFLAGS="$with_libpqos_ldflags" + BUILD_WITH_LIBPQOS_LIBS="-lpqos" fi + +AC_SUBST([BUILD_WITH_LIBPQOS_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBPQOS_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBPQOS_LIBS]) # }}} # --with-libprotobuf {{{ with_libprotobuf_cppflags="" with_libprotobuf_ldflags="" -AC_ARG_WITH([libprotobuf], [AS_HELP_STRING([--with-libprotobuf@<:@=PREFIX@:>@], [Path to libprotobuf.])], +AC_ARG_WITH([libprotobuf], + [AS_HELP_STRING([--with-libprotobuf@<:@=PREFIX@:>@], [Path to libprotobuf.])], [ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then with_libprotobuf_cppflags="-I$withval/include" with_libprotobuf_ldflags="-L$withval/lib" with_libprotobuf="yes" fi - if test "x$withval" = "xno" - then + if test "x$withval" = "xno"; then with_libprotobuf="no (disabled on command line)" fi ], [withval="yes"] ) -if test "x$withval" = "xyes" -then -PKG_CHECK_MODULES([PROTOBUF], [protobuf], - [with_libprotobuf="yes"], - [with_libprotobuf="no (pkg-config could not find libprotobuf)"] -) + +if test "x$withval" = "xyes"; then + PKG_CHECK_MODULES([PROTOBUF], [protobuf], + [with_libprotobuf="yes"], + [with_libprotobuf="no (pkg-config could not find libprotobuf)"] + ) fi -if test "x$withval" != "xno" -then +if test "x$withval" != "xno"; then SAVE_LDFLAGS="$LDFLAGS" SAVE_LIBS="$LIBS" LDFLAGS="$with_libprotobuf_ldflags" @@ -4399,6 +4480,7 @@ then LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" fi + BUILD_WITH_LIBPROTOBUF_CPPFLAGS="$with_libprotobuf_cppflags $PROTOBUF_CFLAGS" BUILD_WITH_LIBPROTOBUF_LDFLAGS="$with_libprotobuf_ldflags" BUILD_WITH_LIBPROTOBUF_LIBS="$PROTOBUF_LIBS" @@ -4407,34 +4489,46 @@ AC_SUBST([BUILD_WITH_LIBPROTOBUF_LDFLAGS]) AC_SUBST([BUILD_WITH_LIBPROTOBUF_LIBS]) # }}} +AC_ARG_VAR([PROTOC], [path to the protoc binary]) +AC_PATH_PROG([PROTOC], [protoc]) +have_protoc3="no" +if test "x$PROTOC" != "x"; then + AC_MSG_CHECKING([for protoc 3.0.0+]) + if $PROTOC --version | $EGREP libprotoc.3 >/dev/null; then + protoc3="yes (`$PROTOC --version`)" + have_protoc3="yes" + else + protoc3="no (`$PROTOC --version`)" + fi + AC_MSG_RESULT([$protoc3]) +fi +AM_CONDITIONAL([HAVE_PROTOC3], [test "x$have_protoc3" = "xyes"]) + # --with-libprotobuf-c {{{ -with_libprotobuf_c_cppflags="" -with_libprotobuf_c_ldflags="" -AC_ARG_WITH([libprotobuf-c], [AS_HELP_STRING([--with-libprotobuf-c@<:@=PREFIX@:>@], [Path to libprotobuf-c.])], +AC_ARG_WITH([libprotobuf-c], + [AS_HELP_STRING([--with-libprotobuf-c@<:@=PREFIX@:>@], [Path to libprotobuf-c.])], [ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then with_libprotobuf_c_cppflags="-I$withval/include" with_libprotobuf_c_ldflags="-L$withval/lib" with_libprotobuf_c="yes" fi - if test "x$withval" = "xno" - then + + if test "x$withval" = "xno"; then with_libprotobuf_c="no (disabled on command line)" fi ], [withval="yes"] ) -if test "x$withval" = "xyes" -then -PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c], - [with_libprotobuf_c="yes"], - [with_libprotobuf_c="no (pkg-config could not find libprotobuf-c)"] -) + +if test "x$withval" = "xyes"; then + PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c], + [with_libprotobuf_c="yes"], + [with_libprotobuf_c="no (pkg-config could not find libprotobuf-c)"] + ) fi -if test "x$withval" != "xno" -then +if test "x$withval" != "xno"; then SAVE_LDFLAGS="$LDFLAGS" SAVE_LIBS="$LIBS" LDFLAGS="$with_libprotobuf_c_ldflags" @@ -4443,10 +4537,10 @@ then [ SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$with_libprotobuf_c_cppflags $PROTOBUF_C_CFLAGS" - if test "x$PROTOBUF_C_LIBS" = "x" - then + if test "x$PROTOBUF_C_LIBS" = "x"; then PROTOBUF_C_LIBS="-lprotobuf-c" fi + AC_CHECK_HEADERS([protobuf-c/protobuf-c.h google/protobuf-c/protobuf-c.h], [ with_libprotobuf_c="yes" @@ -4454,6 +4548,7 @@ then ], [with_libprotobuf_c="no ( not found)"] ) + CPPFLAGS="$SAVE_CPPFLAGS" ], [with_libprotobuf_c="no (libprotobuf-c not found)"] @@ -4461,6 +4556,7 @@ then LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" fi + BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS="$with_libprotobuf_c_cppflags $PROTOBUF_C_CFLAGS" BUILD_WITH_LIBPROTOBUF_C_LDFLAGS="$with_libprotobuf_c_ldflags" BUILD_WITH_LIBPROTOBUF_C_LIBS="$PROTOBUF_C_LIBS" @@ -4469,18 +4565,26 @@ AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LDFLAGS]) AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LIBS]) # }}} +AC_ARG_VAR([PROTOC_C], [path to the protoc-c binary]) +AC_PATH_PROG([PROTOC_C], [protoc-c]) +if test "x$PROTOC_C" = "x" +then + have_protoc_c="no (protoc-c compiler not found)" +else + have_protoc_c="yes" +fi + # --with-libpython {{{ AC_ARG_VAR([LIBPYTHON_CPPFLAGS], [Preprocessor flags for libpython]) AC_ARG_VAR([LIBPYTHON_LDFLAGS], [Linker flags for libpython]) AC_ARG_VAR([LIBPYTHON_LIBS], [Libraries for libpython]) AC_ARG_WITH([libpython], - [AS_HELP_STRING([--with-libpython], - [if we should build with libpython @<:@default=yes@:>@]) - ], + [AS_HELP_STRING([--with-libpython], [if we should build with libpython @<:@default=yes@:>@])], [with_libpython="$withval"], [with_libpython="check"] ) + if test "$with_libpython" != "no"; then if test "$LIBPYTHON_CPPFLAGS" = "" && test "$LIBPYTHON_LDFLAGS" = ""; then AC_ARG_VAR([PYTHON_CONFIG], [path to python-config]) @@ -4518,6 +4622,7 @@ if test "$with_libpython" != "xno"; then CPPFLAGS="$LIBPYTHON_CPPFLAGS $CPPFLAGS" LDFLAGS="$LIBPYTHON_LDFLAGS $LDFLAGS" LIBS="$LIBPYTHON_LIBS $LIBS" + AC_CHECK_HEADERS([Python.h], [ AC_MSG_CHECKING([for libpython]) @@ -4532,6 +4637,7 @@ if test "$with_libpython" != "xno"; then ], [with_libpython="no"] ) + CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" @@ -4539,234 +4645,236 @@ fi # }}} --with-libpython # --with-librabbitmq {{{ -with_librabbitmq_cppflags="" -with_librabbitmq_ldflags="" -AC_ARG_WITH(librabbitmq, [AS_HELP_STRING([--with-librabbitmq@<:@=PREFIX@:>@], [Path to librabbitmq.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_librabbitmq_cppflags="-I$withval/include" - with_librabbitmq_ldflags="-L$withval/lib" - with_librabbitmq="yes" - else - with_librabbitmq="$withval" - fi -], -[ - with_librabbitmq="yes" -]) -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" -CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" -LDFLAGS="$LDFLAGS $with_librabbitmq_ldflags" -if test "x$with_librabbitmq" = "xyes" -then - AC_CHECK_HEADERS(amqp.h, [with_librabbitmq="yes"], [with_librabbitmq="no (amqp.h not found)"]) +AC_ARG_WITH([librabbitmq], + [AS_HELP_STRING([--with-librabbitmq@<:@=PREFIX@:>@], [Path to librabbitmq.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_librabbitmq_cppflags="-I$withval/include" + with_librabbitmq_ldflags="-L$withval/lib" + with_librabbitmq="yes" + else + with_librabbitmq="$withval" + fi + ], + [with_librabbitmq="yes"] +) + +if test "x$with_librabbitmq" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" + + AC_CHECK_HEADERS([amqp.h], + [with_librabbitmq="yes"], + [with_librabbitmq="no (amqp.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_librabbitmq" = "xyes" -then - # librabbitmq up to version 0.9.1 provides "library_errno", later - # versions use "library_error". The library does not provide a version - # macro :( Use "AC_CHECK_MEMBERS" (plural) for automatic defines. - AC_CHECK_MEMBERS([amqp_rpc_reply_t.library_errno],,, - [ -#if HAVE_STDLIB_H -# include -#endif -#if HAVE_STDIO_H -# include -#endif -#if HAVE_STDINT_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif -#include - ]) + +if test "x$with_librabbitmq" = "xyes"; then + # librabbitmq up to version 0.9.1 provides "library_errno", later + # versions use "library_error". The library does not provide a version + # macro :(. + + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" + + AC_CHECK_MEMBERS([amqp_rpc_reply_t.library_errno], + [], + [], + [[ + #include + #include + #include + #include + #include + ]] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_librabbitmq_ldflags" + + AC_CHECK_LIB([rabbitmq], [amqp_basic_publish], + [with_librabbitmq="yes"], + [with_librabbitmq="no (Symbol 'amqp_basic_publish' not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_librabbitmq" = "xyes" -then - AC_CHECK_LIB(rabbitmq, amqp_basic_publish, [with_librabbitmq="yes"], [with_librabbitmq="no (Symbol 'amqp_basic_publish' not found)"]) + +if test "x$with_librabbitmq" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + SAVE_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" + LDFLAGS="$LDFLAGS $with_librabbitmq_ldflags" + LIBS="-lrabbitmq" + + AC_CHECK_HEADERS([amqp_tcp_socket.h amqp_socket.h]) + AC_CHECK_FUNC([amqp_tcp_socket_new], + [ + AC_DEFINE([HAVE_AMQP_TCP_SOCKET], [1], + [Define if librabbitmq provides the new TCP socket interface.]) + ] + ) + + AC_CHECK_DECLS([amqp_socket_close], + [], + [], + [[ + #include + #ifdef HAVE_AMQP_TCP_SOCKET_H + # include + #endif + #ifdef HAVE_AMQP_SOCKET_H + # include + #endif + ]] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" + LIBS="$SAVE_LIBS" fi -if test "x$with_librabbitmq" = "xyes" -then - BUILD_WITH_LIBRABBITMQ_CPPFLAGS="$with_librabbitmq_cppflags" - BUILD_WITH_LIBRABBITMQ_LDFLAGS="$with_librabbitmq_ldflags" - BUILD_WITH_LIBRABBITMQ_LIBS="-lrabbitmq" - AC_SUBST(BUILD_WITH_LIBRABBITMQ_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBRABBITMQ_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBRABBITMQ_LIBS) - AC_DEFINE(HAVE_LIBRABBITMQ, 1, [Define if librabbitmq is present and usable.]) + +if test "x$with_librabbitmq" = "xyes"; then + BUILD_WITH_LIBRABBITMQ_CPPFLAGS="$with_librabbitmq_cppflags" + BUILD_WITH_LIBRABBITMQ_LDFLAGS="$with_librabbitmq_ldflags" + BUILD_WITH_LIBRABBITMQ_LIBS="-lrabbitmq" fi -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" -AM_CONDITIONAL(BUILD_WITH_LIBRABBITMQ, test "x$with_librabbitmq" = "xyes") -with_amqp_tcp_socket="no" -if test "x$with_librabbitmq" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - SAVE_LIBS="$LIBS" - CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" - LDFLAGS="$LDFLAGS $with_librabbitmq_ldflags" - LIBS="-lrabbitmq" - - AC_CHECK_HEADERS(amqp_tcp_socket.h amqp_socket.h) - AC_CHECK_FUNC(amqp_tcp_socket_new, [with_amqp_tcp_socket="yes"], [with_amqp_tcp_socket="no"]) - if test "x$with_amqp_tcp_socket" = "xyes" - then - AC_DEFINE(HAVE_AMQP_TCP_SOCKET, 1, - [Define if librabbitmq provides the new TCP socket interface.]) - fi - - AC_CHECK_DECLS(amqp_socket_close, - [amqp_socket_close_decl="yes"], [amqp_socket_close_decl="no"], - [[ -#include -#ifdef HAVE_AMQP_TCP_SOCKET_H -# include -#endif -#ifdef HAVE_AMQP_SOCKET_H -# include -#endif - ]]) +AC_SUBST(BUILD_WITH_LIBRABBITMQ_CPPFLAGS) +AC_SUBST(BUILD_WITH_LIBRABBITMQ_LDFLAGS) +AC_SUBST(BUILD_WITH_LIBRABBITMQ_LIBS) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - LIBS="$SAVE_LIBS" -fi # }}} # --with-librdkafka {{{ -AC_ARG_WITH(librdkafka, [AS_HELP_STRING([--with-librdkafka@<:@=PREFIX@:>@], [Path to librdkafka.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_librdkafka_cppflags="-I$withval/include" - with_librdkafka_ldflags="-L$withval/lib" - with_librdkafka_rpath="$withval/lib" - with_librdkafka="yes" - else - with_librdkafka="$withval" - fi -], -[ - with_librdkafka="yes" -]) -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" +AC_ARG_WITH([librdkafka], + [AS_HELP_STRING([--with-librdkafka@<:@=PREFIX@:>@], [Path to librdkafka.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_librdkafka_cppflags="-I$withval/include" + with_librdkafka_ldflags="-L$withval/lib" + with_librdkafka_rpath="$withval/lib" + with_librdkafka="yes" + else + with_librdkafka="$withval" + fi + ], + [with_librdkafka="yes"] +) -CPPFLAGS="$CPPFLAGS $with_librdkafka_cppflags" -LDFLAGS="$LDFLAGS $with_librdkafka_ldflags" +if test "x$with_librdkafka" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_librdkafka_cppflags" -if test "x$with_librdkafka" = "xyes" -then - AC_CHECK_HEADERS(librdkafka/rdkafka.h, [with_librdkafka="yes"], [with_librdkafka="no (librdkafka/rdkafka.h not found)"]) + AC_CHECK_HEADERS([librdkafka/rdkafka.h], + [with_librdkafka="yes"], + [with_librdkafka="no (librdkafka/rdkafka.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_librdkafka" = "xyes" -then - AC_CHECK_LIB(rdkafka, rd_kafka_new, [with_librdkafka="yes"], [with_librdkafka="no (Symbol 'rd_kafka_new' not found)"]) - AC_CHECK_LIB(rdkafka, rd_kafka_conf_set_log_cb, [with_librdkafka_log_cb="yes"], [with_librdkafka_log_cb="no"]) - AC_CHECK_LIB(rdkafka, rd_kafka_set_logger, [with_librdkafka_logger="yes"], [with_librdkafka_logger="no"]) +if test "x$with_librdkafka" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_librdkafka_ldflags" + + AC_CHECK_LIB([rdkafka], [rd_kafka_new], + [with_librdkafka="yes"], + [with_librdkafka="no (Symbol 'rd_kafka_new' not found)"]) + + AC_CHECK_LIB([rdkafka], [rd_kafka_conf_set_log_cb], + [with_librdkafka_log_cb="yes"], + [with_librdkafka_log_cb="no"]) + + AC_CHECK_LIB([rdkafka], [rd_kafka_set_logger], + [with_librdkafka_logger="yes"], + [with_librdkafka_logger="no"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_librdkafka" = "xyes" -then - BUILD_WITH_LIBRDKAFKA_CPPFLAGS="$with_librdkafka_cppflags" - BUILD_WITH_LIBRDKAFKA_LDFLAGS="$with_librdkafka_ldflags" - if test "x$with_librdkafka_rpath" != "x" - then - BUILD_WITH_LIBRDKAFKA_LIBS="-Wl,-rpath,$with_librdkafka_rpath -lrdkafka" - else - BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka" - fi - AC_SUBST(BUILD_WITH_LIBRDKAFKA_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBRDKAFKA_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBRDKAFKA_LIBS) - AC_DEFINE(HAVE_LIBRDKAFKA, 1, [Define if librdkafka is present and usable.]) - if test "x$with_librdkafka_log_cb" = "xyes" - then - AC_DEFINE(HAVE_LIBRDKAFKA_LOG_CB, 1, [Define if librdkafka log facility is present and usable.]) - else if test "x$with_librdkafka_logger" = "xyes" - then - AC_DEFINE(HAVE_LIBRDKAFKA_LOGGER, 1, [Define if librdkafka log facility is present and usable.]) + +if test "x$with_librdkafka" = "xyes"; then + BUILD_WITH_LIBRDKAFKA_CPPFLAGS="$with_librdkafka_cppflags" + BUILD_WITH_LIBRDKAFKA_LDFLAGS="$with_librdkafka_ldflags" + + if test "x$with_librdkafka_rpath" != "x"; then + BUILD_WITH_LIBRDKAFKA_LIBS="-Wl,-rpath,$with_librdkafka_rpath -lrdkafka" + else + BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka" + fi + + if test "x$with_librdkafka_log_cb" = "xyes"; then + AC_DEFINE(HAVE_LIBRDKAFKA_LOG_CB, 1, [Define if librdkafka log facility is present and usable.]) + else if test "x$with_librdkafka_logger" = "xyes"; then + AC_DEFINE(HAVE_LIBRDKAFKA_LOGGER, 1, [Define if librdkafka log facility is present and usable.]) fi; fi fi -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" -AM_CONDITIONAL(BUILD_WITH_LIBRDKAFKA, test "x$with_librdkafka" = "xyes") +AC_SUBST([BUILD_WITH_LIBRDKAFKA_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBRDKAFKA_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBRDKAFKA_LIBS]) # }}} # --with-librouteros {{{ -AC_ARG_WITH(librouteros, [AS_HELP_STRING([--with-librouteros@<:@=PREFIX@:>@], [Path to librouteros.])], -[ - if test "x$withval" = "xyes" - then - with_librouteros="yes" - else if test "x$withval" = "xno" - then - with_librouteros="no" - else - with_librouteros="yes" - LIBROUTEROS_CPPFLAGS="$LIBROUTEROS_CPPFLAGS -I$withval/include" - LIBROUTEROS_LDFLAGS="$LIBROUTEROS_LDFLAGS -L$withval/lib" - fi; fi -], -[with_librouteros="yes"]) +AC_ARG_WITH([librouteros], + [AS_HELP_STRING([--with-librouteros@<:@=PREFIX@:>@], [Path to librouteros.])], + [ + if test "x$withval" = "xyes" || test "x$withval" = "xno"; then + with_librouteros="$witval" + else + with_librouteros_cppflags="-I$withval/include" + with_librouteros_ldflags="-L$withval/lib" + with_librouteros="yes" + fi + ], + [with_librouteros="yes"] +) -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" +if test "x$with_librouteros" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_librouteros_cppflags" -CPPFLAGS="$CPPFLAGS $LIBROUTEROS_CPPFLAGS" -LDFLAGS="$LDFLAGS $LIBROUTEROS_LDFLAGS" + AC_CHECK_HEADERS([routeros_api.h], + [with_librouteros="yes"], + [with_librouteros="no (routeros_api.h not found)"] + ) -if test "x$with_librouteros" = "xyes" -then - if test "x$LIBROUTEROS_CPPFLAGS" != "x" - then - AC_MSG_NOTICE([librouteros CPPFLAGS: $LIBROUTEROS_CPPFLAGS]) - fi - AC_CHECK_HEADERS(routeros_api.h, - [with_librouteros="yes"], - [with_librouteros="no (routeros_api.h not found)"]) -fi -if test "x$with_librouteros" = "xyes" -then - if test "x$LIBROUTEROS_LDFLAGS" != "x" - then - AC_MSG_NOTICE([librouteros LDFLAGS: $LIBROUTEROS_LDFLAGS]) - fi - AC_CHECK_LIB(routeros, ros_interface, - [with_librouteros="yes"], - [with_librouteros="no (symbol 'ros_interface' not found)"]) + CPPFLAGS="$SAVE_CPPFLAGS" fi -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" +if test "x$with_librouteros" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_librouteros_ldflags" -if test "x$with_librouteros" = "xyes" -then - BUILD_WITH_LIBROUTEROS_CPPFLAGS="$LIBROUTEROS_CPPFLAGS" - BUILD_WITH_LIBROUTEROS_LDFLAGS="$LIBROUTEROS_LDFLAGS" - AC_SUBST(BUILD_WITH_LIBROUTEROS_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBROUTEROS_LDFLAGS) + AC_CHECK_LIB([routeros], [ros_interface], + [with_librouteros="yes"], + [with_librouteros="no (symbol 'ros_interface' not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" fi -AM_CONDITIONAL(BUILD_WITH_LIBROUTEROS, test "x$with_librouteros" = "xyes") + +if test "x$with_librouteros" = "xyes"; then + BUILD_WITH_LIBROUTEROS_CPPFLAGS="$with_librouteros_cppflags" + BUILD_WITH_LIBROUTEROS_LDFLAGS="$with_librouteros_ldflags" +fi + +AC_SUBST([BUILD_WITH_LIBROUTEROS_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBROUTEROS_LDFLAGS]) # }}} # --with-librrd {{{ -librrd_cflags="" -librrd_ldflags="" librrd_threadsafe="no" librrd_rrdc_update="no" -AC_ARG_WITH(librrd, +AC_ARG_WITH([librrd], [AS_HELP_STRING([--with-librrd@<:@=PREFIX@:>@], [Path to rrdtool.])], [ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then librrd_cflags="-I$withval/include" librrd_ldflags="-L$withval/lib" with_librrd="yes" @@ -4777,8 +4885,7 @@ AC_ARG_WITH(librrd, [with_librrd="yes"] ) -if test "x$with_librrd" = "xyes" -then +if test "x$with_librrd" = "xyes"; then SAVE_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $librrd_ldflags" PKG_CHECK_MODULES([RRD], [librrd >= 1.6.0], @@ -4803,8 +4910,7 @@ then CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno" -then +if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno"; then SAVE_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $librrd_ldflags" @@ -4822,8 +4928,7 @@ then LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno" -then +if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" = "xno"; then SAVE_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $librrd_ldflags" @@ -4840,82 +4945,78 @@ then LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_librrd" = "xyes" -then +if test "x$with_librrd" = "xyes"; then BUILD_WITH_LIBRRD_CFLAGS="$RRD_CFLAGS $librrd_cflags" BUILD_WITH_LIBRRD_LDFLAGS="$librrd_ldflags" BUILD_WITH_LIBRRD_LIBS="$RRD_LIBS" - AC_SUBST(BUILD_WITH_LIBRRD_CFLAGS) - AC_SUBST(BUILD_WITH_LIBRRD_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBRRD_LIBS) fi -if test "x$librrd_threadsafe" = "xyes" -then + +if test "x$librrd_threadsafe" = "xyes"; then AC_DEFINE([HAVE_THREADSAFE_LIBRRD], [1], [Define to 1 if the rrd library is thread-safe] ) fi + +AC_SUBST([BUILD_WITH_LIBRRD_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBRRD_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBRRD_LIBS]) # }}} # --with-libsensors {{{ -with_sensors_cflags="" -with_sensors_ldflags="" -AC_ARG_WITH(libsensors, [AS_HELP_STRING([--with-libsensors@<:@=PREFIX@:>@], [Path to lm_sensors.])], -[ - if test "x$withval" = "xno" - then - with_libsensors="no" - else - with_libsensors="yes" - if test "x$withval" != "xyes" - then - with_sensors_cflags="-I$withval/include" - with_sensors_ldflags="-L$withval/lib" - with_libsensors="yes" - fi - fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_libsensors="yes" - else - with_libsensors="no (Linux only library)" - fi -]) -if test "x$with_libsensors" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_sensors_cflags" +AC_ARG_WITH([libsensors], + [AS_HELP_STRING([--with-libsensors@<:@=PREFIX@:>@], [Path to lm_sensors.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_libsensors="$withval" + else + with_sensors_cppflags="-I$withval/include" + with_sensors_ldflags="-L$withval/lib" + with_libsensors="yes" + fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_libsensors="yes" + else + with_libsensors="no (Linux only library)" + fi + ] +) - AC_CHECK_HEADERS(sensors/sensors.h, [], [with_libsensors="no (sensors/sensors.h not found)"]) +if test "x$with_libsensors" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_sensors_cppflags" + + AC_CHECK_HEADERS([sensors/sensors.h], + [with_libsensors="yes"], + [with_libsensors="no (sensors/sensors.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libsensors" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_sensors_cflags" - LDFLAGS="$LDFLAGS $with_sensors_ldflags" - AC_CHECK_LIB(sensors, sensors_init, - [ - AC_DEFINE(HAVE_LIBSENSORS, 1, [Define to 1 if you have the sensors library (-lsensors).]) - ], - [with_libsensors="no (libsensors not found)"]) +if test "x$with_libsensors" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_sensors_ldflags" + + AC_CHECK_LIB([sensors], [sensors_init], + [with_libsensors="yes"], + [with_libsensors="no (libsensors not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libsensors" = "xyes" -then - BUILD_WITH_LIBSENSORS_CFLAGS="$with_sensors_cflags" - BUILD_WITH_LIBSENSORS_LDFLAGS="$with_sensors_ldflags" - AC_SUBST(BUILD_WITH_LIBSENSORS_CFLAGS) - AC_SUBST(BUILD_WITH_LIBSENSORS_LDFLAGS) + +if test "x$with_libsensors" = "xyes"; then + BUILD_WITH_LIBSENSORS_CPPFLAGS="$with_sensors_cppflags" + BUILD_WITH_LIBSENSORS_LDFLAGS="$with_sensors_ldflags" + BUILD_WITH_LIBSENSORS_LIBS="-lsensors" fi -AM_CONDITIONAL(BUILD_WITH_LM_SENSORS, test "x$with_libsensors" = "xyes") + +AC_SUBST([BUILD_WITH_LIBSENSORS_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBSENSORS_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBSENSORS_LIBS]) + # }}} # libsigrok {{{ @@ -4928,35 +5029,29 @@ PKG_CHECK_MODULES([LIBSIGROK], [libsigrok < 0.4], # }}} # --with-libstatgrab {{{ -with_libstatgrab_cflags="" -with_libstatgrab_ldflags="" -AC_ARG_WITH(libstatgrab, [AS_HELP_STRING([--with-libstatgrab@<:@=PREFIX@:>@], [Path to libstatgrab.])], -[ - if test "x$withval" != "xno" \ - && test "x$withval" != "xyes" - then - with_libstatgrab_cflags="-I$withval/include" - with_libstatgrab_ldflags="-L$withval/lib -lstatgrab" - with_libstatgrab="yes" - with_libstatgrab_pkg_config="no" - else - with_libstatgrab="$withval" - with_libstatgrab_pkg_config="yes" - fi - ], -[ - with_libstatgrab="yes" - with_libstatgrab_pkg_config="yes" -]) +AC_ARG_WITH([libstatgrab], + [AS_HELP_STRING([--with-libstatgrab@<:@=PREFIX@:>@], [Path to libstatgrab.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libstatgrab_cflags="-I$withval/include" + with_libstatgrab_ldflags="-L$withval/lib -lstatgrab" + with_libstatgrab="yes" + with_libstatgrab_pkg_config="no" + else + with_libstatgrab="$withval" + with_libstatgrab_pkg_config="yes" + fi + ], + [ + with_libstatgrab="yes" + with_libstatgrab_pkg_config="yes" + ]) -if test "x$with_libstatgrab" = "xyes" \ - && test "x$with_libstatgrab_pkg_config" = "xyes" -then +if test "x$with_libstatgrab" = "xyes" && test "x$with_libstatgrab_pkg_config" = "xyes"; then AC_MSG_CHECKING([pkg-config for libstatgrab]) temp_result="found" $PKG_CONFIG --exists libstatgrab 2>/dev/null - if test "$?" != "0" - then + if test "$?" != "0"; then with_libstatgrab_pkg_config="no" with_libstatgrab="no (pkg-config doesn't know libstatgrab)" temp_result="not found" @@ -4964,14 +5059,10 @@ then AC_MSG_RESULT([$temp_result]) fi -if test "x$with_libstatgrab" = "xyes" \ - && test "x$with_libstatgrab_pkg_config" = "xyes" \ - && test "x$with_libstatgrab_cflags" = "x" -then +if test "x$with_libstatgrab" = "xyes" && test "x$with_libstatgrab_pkg_config" = "xyes" && test "x$with_libstatgrab_cflags" = "x"; then AC_MSG_CHECKING([for libstatgrab CFLAGS]) temp_result="`$PKG_CONFIG --cflags libstatgrab`" - if test "$?" = "0" - then + if test "$?" = "0"; then with_libstatgrab_cflags="$temp_result" else with_libstatgrab="no ($PKG_CONFIG --cflags libstatgrab failed)" @@ -4980,10 +5071,7 @@ then AC_MSG_RESULT([$temp_result]) fi -if test "x$with_libstatgrab" = "xyes" \ - && test "x$with_libstatgrab_pkg_config" = "xyes" \ - && test "x$with_libstatgrab_ldflags" = "x" -then +if test "x$with_libstatgrab" = "xyes" && test "x$with_libstatgrab_pkg_config" = "xyes" && test "x$with_libstatgrab_ldflags" = "x"; then AC_MSG_CHECKING([for libstatgrab LDFLAGS]) temp_result="`$PKG_CONFIG --libs libstatgrab`" if test "$?" = "0" @@ -4996,36 +5084,31 @@ then AC_MSG_RESULT([$temp_result]) fi -if test "x$with_libstatgrab" = "xyes" -then +if test "x$with_libstatgrab" = "xyes"; then SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $with_libstatgrab_cflags" - AC_CHECK_HEADERS(statgrab.h, - [with_libstatgrab="yes"], - [with_libstatgrab="no (statgrab.h not found)"]) + AC_CHECK_HEADERS([statgrab.h], + [with_libstatgrab="yes"], + [with_libstatgrab="no (statgrab.h not found)"] + ) CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libstatgrab" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" +if test "x$with_libstatgrab" = "xyes"; then SAVE_LDFLAGS="$LDFLAGS" - - CFLAGS="$CFLAGS $with_libstatgrab_cflags" LDFLAGS="$LDFLAGS $with_libstatgrab_ldflags" - AC_CHECK_LIB(statgrab, sg_init, - [with_libstatgrab="yes"], - [with_libstatgrab="no (symbol sg_init not found)"]) + AC_CHECK_LIB([statgrab], [sg_init], + [with_libstatgrab="yes"], + [with_libstatgrab="no (symbol sg_init not found)"] + ) - CFLAGS="$SAVE_CFLAGS" LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libstatgrab" = "xyes" -then +if test "x$with_libstatgrab" = "xyes"; then SAVE_CFLAGS="$CFLAGS" SAVE_LDFLAGS="$LDFLAGS" SAVE_LIBS="$LIBS" @@ -5035,19 +5118,24 @@ then LIBS="-lstatgrab $LIBS" AC_CACHE_CHECK([if libstatgrab >= 0.90], - [c_cv_have_libstatgrab_0_90], - AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[[ -#include -#include -]]], -[[[ - if (sg_init()) return 0; -]]] - )], - [c_cv_have_libstatgrab_0_90="no"], - [c_cv_have_libstatgrab_0_90="yes"] + [c_cv_have_libstatgrab_0_90], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [[ + #include + #include + ]], + [[ + if (sg_init()) return 0; + ]] ) + ], + [c_cv_have_libstatgrab_0_90="no"], + [c_cv_have_libstatgrab_0_90="yes"] + ) + ] ) CFLAGS="$SAVE_CFLAGS" @@ -5055,832 +5143,796 @@ then LIBS="$SAVE_LIBS" fi -AM_CONDITIONAL(BUILD_WITH_LIBSTATGRAB, test "x$with_libstatgrab" = "xyes") -if test "x$with_libstatgrab" = "xyes" -then - AC_DEFINE(HAVE_LIBSTATGRAB, 1, [Define to 1 if you have the 'statgrab' library (-lstatgrab)]) +AM_CONDITIONAL([BUILD_WITH_LIBSTATGRAB], [test "x$with_libstatgrab" = "xyes"]) + +if test "x$with_libstatgrab" = "xyes"; then + AC_DEFINE([HAVE_LIBSTATGRAB], [1], + [Define to 1 if you have the 'statgrab' library (-lstatgrab)] + ) + + if test "x$c_cv_have_libstatgrab_0_90" = "xyes"; then + AC_DEFINE([HAVE_LIBSTATGRAB_0_90], [1], + [Define to 1 if libstatgrab version >= 0.90] + ) + fi + BUILD_WITH_LIBSTATGRAB_CFLAGS="$with_libstatgrab_cflags" BUILD_WITH_LIBSTATGRAB_LDFLAGS="$with_libstatgrab_ldflags" - AC_SUBST(BUILD_WITH_LIBSTATGRAB_CFLAGS) - AC_SUBST(BUILD_WITH_LIBSTATGRAB_LDFLAGS) - if test "x$c_cv_have_libstatgrab_0_90" = "xyes" - then - AC_DEFINE(HAVE_LIBSTATGRAB_0_90, 1, [Define to 1 if libstatgrab version >= 0.90]) - fi + fi + +AC_SUBST([BUILD_WITH_LIBSTATGRAB_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBSTATGRAB_LDFLAGS]) # }}} # --with-libtokyotyrant {{{ -with_libtokyotyrant_cppflags="" -with_libtokyotyrant_ldflags="" -with_libtokyotyrant_libs="" -AC_ARG_WITH(libtokyotyrant, [AS_HELP_STRING([--with-libtokyotyrant@<:@=PREFIX@:>@], [Path to libtokyotyrant.])], -[ - if test "x$withval" = "xno" - then - with_libtokyotyrant="no" - else if test "x$withval" = "xyes" - then - with_libtokyotyrant="yes" - else - with_libtokyotyrant_cppflags="-I$withval/include" - with_libtokyotyrant_ldflags="-L$withval/include" - with_libtokyotyrant_libs="-ltokyotyrant" - with_libtokyotyrant="yes" - fi; fi -], -[ - with_libtokyotyrant="yes" -]) +AC_ARG_WITH([libtokyotyrant], + [AS_HELP_STRING([--with-libtokyotyrant@<:@=PREFIX@:>@], [Path to libtokyotyrant.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_libtokyotyrant="$withval" + else + with_libtokyotyrant_cppflags="-I$withval/include" + with_libtokyotyrant_ldflags="-L$withval/include" + with_libtokyotyrant_libs="-ltokyotyrant" + with_libtokyotyrant="yes" + fi + ], + [with_libtokyotyrant="yes"] +) -if test "x$with_libtokyotyrant" = "xyes" -then - if $PKG_CONFIG --exists tokyotyrant - then +if test "x$with_libtokyotyrant" = "xyes"; then + if $PKG_CONFIG --exists tokyotyrant; then with_libtokyotyrant_cppflags="$with_libtokyotyrant_cppflags `$PKG_CONFIG --cflags tokyotyrant`" with_libtokyotyrant_ldflags="$with_libtokyotyrant_ldflags `$PKG_CONFIG --libs-only-L tokyotyrant`" with_libtokyotyrant_libs="$with_libtokyotyrant_libs `$PKG_CONFIG --libs-only-l tokyotyrant`" fi fi -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" -CPPFLAGS="$CPPFLAGS $with_libtokyotyrant_cppflags" -LDFLAGS="$LDFLAGS $with_libtokyotyrant_ldflags" +if test "x$with_libtokyotyrant" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libtokyotyrant_cppflags" -if test "x$with_libtokyotyrant" = "xyes" -then - AC_CHECK_HEADERS(tcrdb.h, - [ - AC_DEFINE(HAVE_TCRDB_H, 1, - [Define to 1 if you have the header file.]) - ], [with_libtokyotyrant="no (tcrdb.h not found)"]) -fi + AC_CHECK_HEADERS([tcrdb.h], + [with_libtokyotyrant="yes"], + [with_libtokyotyrant="no (tcrdb.h not found)"] + ) -if test "x$with_libtokyotyrant" = "xyes" -then - AC_CHECK_LIB(tokyotyrant, tcrdbrnum, - [ - AC_DEFINE(HAVE_LIBTOKYOTYRANT, 1, - [Define to 1 if you have the tokyotyrant library (-ltokyotyrant).]) - ], - [with_libtokyotyrant="no (symbol tcrdbrnum not found)"], - [$with_libtokyotyrant_libs]) + CPPFLAGS="$SAVE_CPPFLAGS" fi -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" +if test "x$with_libtokyotyrant" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libtokyotyrant_ldflags" -if test "x$with_libtokyotyrant" = "xyes" -then + AC_CHECK_LIB([tokyotyrant], [tcrdbrnum], + [with_libtokyotyrant="yes"], + [with_libtokyotyrant="no (symbol tcrdbrnum not found)"], + [$with_libtokyotyrant_libs] + ) + + LDFLAGS="$SAVE_LDFLAGS" +fi + +if test "x$with_libtokyotyrant" = "xyes"; then BUILD_WITH_LIBTOKYOTYRANT_CPPFLAGS="$with_libtokyotyrant_cppflags" BUILD_WITH_LIBTOKYOTYRANT_LDFLAGS="$with_libtokyotyrant_ldflags" BUILD_WITH_LIBTOKYOTYRANT_LIBS="$with_libtokyotyrant_libs" - AC_SUBST(BUILD_WITH_LIBTOKYOTYRANT_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBTOKYOTYRANT_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBTOKYOTYRANT_LIBS) fi -AM_CONDITIONAL(BUILD_WITH_LIBTOKYOTYRANT, test "x$with_libtokyotyrant" = "xyes") +AC_SUBST([BUILD_WITH_LIBTOKYOTYRANT_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBTOKYOTYRANT_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBTOKYOTYRANT_LIBS]) # }}} # --with-libudev {{{ -with_libudev_cflags="" -with_libudev_ldflags="" -AC_ARG_WITH(libudev, [AS_HELP_STRING([--with-libudev@<:@=PREFIX@:>@], [Path to libudev.])], -[ - if test "x$withval" = "xno" - then - with_libudev="no" - else - with_libudev="yes" - if test "x$withval" != "xyes" - then - with_libudev_cflags="-I$withval/include" - with_libudev_ldflags="-L$withval/lib" - with_libudev="yes" - fi - fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_libudev="yes" - else - with_libudev="no (Linux only library)" - fi -]) -if test "x$with_libudev" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libudev_cflags" +AC_ARG_WITH([libudev], + [AS_HELP_STRING([--with-libudev@<:@=PREFIX@:>@], [Path to libudev.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_libudev="$withval" + else + with_libudev_cppflags="-I$withval/include" + with_libudev_ldflags="-L$withval/lib" + with_libudev="yes" + fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_libudev="yes" + else + with_libudev="no (Linux only library)" + fi + ] +) + +if test "x$with_libudev" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libudev_cppflags" - AC_CHECK_HEADERS(libudev.h, [], [with_libudev="no (libudev.h not found)"]) + AC_CHECK_HEADERS([libudev.h], + [with_libudev="yes"], + [with_libudev="no (libudev.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libudev" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libudev_cflags" - LDFLAGS="$LDFLAGS $with_libudev_ldflags" - AC_CHECK_LIB(udev, udev_new, - [ - AC_DEFINE(HAVE_LIBUDEV, 1, [Define to 1 if you have the udev library (-ludev).]) - ], - [with_libudev="no (libudev not found)"]) +if test "x$with_libudev" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libudev_ldflags" + + AC_CHECK_LIB([udev], [udev_new], + [with_libudev="yes"], + [with_libudev="no (libudev not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libudev" = "xyes" -then - BUILD_WITH_LIBUDEV_CFLAGS="$with_libudev_cflags" - BUILD_WITH_LIBUDEV_LDFLAGS="$with_libudev_ldflags" - BUILD_WITH_LIBUDEV_LIBS="-ludev" - AC_SUBST(BUILD_WITH_LIBUDEV_CFLAGS) - AC_SUBST(BUILD_WITH_LIBUDEV_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBUDEV_LIBS) -fi -AM_CONDITIONAL(BUILD_WITH_LIBUDEV, test "x$with_libudev" = "xyes") + +if test "x$with_libudev" = "xyes"; then + BUILD_WITH_LIBUDEV_CPPFLAGS="$with_libudev_cppflags" + BUILD_WITH_LIBUDEV_LDFLAGS="$with_libudev_ldflags" + BUILD_WITH_LIBUDEV_LIBS="-ludev" +fi + +AC_SUBST([BUILD_WITH_LIBUDEV_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBUDEV_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBUDEV_LIBS]) + +AM_CONDITIONAL([BUILD_WITH_LIBUDEV], [test "x$with_libudev" = "xyes"]) # }}} # --with-libupsclient {{{ with_libupsclient_config="" -with_libupsclient_cflags="" -with_libupsclient_libs="" -AC_ARG_WITH(libupsclient, [AS_HELP_STRING([--with-libupsclient@<:@=PREFIX@:>@], [Path to the upsclient library.])], -[ - if test "x$withval" = "xno" - then - with_libupsclient="no" - else if test "x$withval" = "xyes" - then - with_libupsclient="use_pkgconfig" - else - if test -x "$withval" - then - with_libupsclient_config="$withval" - with_libupsclient="use_libupsclient_config" - else if test -x "$withval/bin/libupsclient-config" - then - with_libupsclient_config="$withval/bin/libupsclient-config" - with_libupsclient="use_libupsclient_config" - else - AC_MSG_NOTICE([Not checking for libupsclient: Manually configured]) - with_libupsclient_cflags="-I$withval/include" - with_libupsclient_libs="-L$withval/lib -lupsclient" - with_libupsclient="yes" - fi; fi - fi; fi -], -[with_libupsclient="use_pkgconfig"]) +AC_ARG_WITH([libupsclient], + [AS_HELP_STRING([--with-libupsclient@<:@=PREFIX@:>@], [Path to the upsclient library.])], + [ + if test "x$withval" = "xno"; then + with_libupsclient="no" + else if test "x$withval" = "xyes"; then + with_libupsclient="use_pkgconfig" + else + if test -x "$withval"; then + with_libupsclient_config="$withval" + with_libupsclient="use_libupsclient_config" + else if test -x "$withval/bin/libupsclient-config"; then + with_libupsclient_config="$withval/bin/libupsclient-config" + with_libupsclient="use_libupsclient_config" + else + AC_MSG_NOTICE([Not checking for libupsclient: Manually configured]) + with_libupsclient_cflags="-I$withval/include" + with_libupsclient_libs="-L$withval/lib -lupsclient" + with_libupsclient="yes" + fi; fi + fi; fi + ], + [with_libupsclient="use_pkgconfig"] +) # configure using libupsclient-config -if test "x$with_libupsclient" = "xuse_libupsclient_config" -then - AC_MSG_NOTICE([Checking for libupsclient using $with_libupsclient_config]) - with_libupsclient_cflags="`$with_libupsclient_config --cflags`" - if test $? -ne 0 - then - with_libupsclient="no ($with_libupsclient_config failed)" - fi - with_libupsclient_libs="`$with_libupsclient_config --libs`" - if test $? -ne 0 - then - with_libupsclient="no ($with_libupsclient_config failed)" - fi -fi -if test "x$with_libupsclient" = "xuse_libupsclient_config" -then - with_libupsclient="yes" +if test "x$with_libupsclient" = "xuse_libupsclient_config"; then + with_libupsclient_cflags="`$with_libupsclient_config --cflags`" + if test $? -ne 0; then + with_libupsclient="no ($with_libupsclient_config failed)" + fi + with_libupsclient_libs="`$with_libupsclient_config --libs`" + if test $? -ne 0; then + with_libupsclient="no ($with_libupsclient_config failed)" + fi +fi + +if test "x$with_libupsclient" = "xuse_libupsclient_config"; then + with_libupsclient="yes" fi # configure using pkg-config -if test "x$with_libupsclient" = "xuse_pkgconfig" -then - AC_MSG_NOTICE([Checking for libupsclient using $PKG_CONFIG]) - $PKG_CONFIG --exists 'libupsclient' 2>/dev/null - if test $? -ne 0 - then - with_libupsclient="no (pkg-config doesn't know libupsclient)" - fi -fi -if test "x$with_libupsclient" = "xuse_pkgconfig" -then - with_libupsclient_cflags="`$PKG_CONFIG --cflags 'libupsclient'`" - if test $? -ne 0 - then - with_libupsclient="no ($PKG_CONFIG failed)" - fi - with_libupsclient_libs="`$PKG_CONFIG --libs 'libupsclient'`" - if test $? -ne 0 - then - with_libupsclient="no ($PKG_CONFIG failed)" - fi -fi -if test "x$with_libupsclient" = "xuse_pkgconfig" -then - with_libupsclient="yes" +if test "x$with_libupsclient" = "xuse_pkgconfig"; then + AC_MSG_NOTICE([Checking for libupsclient using $PKG_CONFIG]) + $PKG_CONFIG --exists 'libupsclient' 2>/dev/null + if test $? -ne 0; then + with_libupsclient="no (pkg-config doesn't know libupsclient)" + fi fi -# with_libupsclient_cflags and with_libupsclient_libs are set up now, let's do -# the actual checks. -if test "x$with_libupsclient" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" +if test "x$with_libupsclient" = "xuse_pkgconfig"; then + with_libupsclient_cflags="`$PKG_CONFIG --cflags 'libupsclient'`" + if test $? -ne 0; then + with_libupsclient="no ($PKG_CONFIG failed)" + fi + + with_libupsclient_libs="`$PKG_CONFIG --libs 'libupsclient'`" + if test $? -ne 0; then + with_libupsclient="no ($PKG_CONFIG failed)" + fi +fi + +if test "x$with_libupsclient" = "xuse_pkgconfig"; then + with_libupsclient="yes" +fi - AC_CHECK_HEADERS(upsclient.h, [], [with_libupsclient="no (upsclient.h not found)"]) +if test "x$with_libupsclient" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" + + AC_CHECK_HEADERS([upsclient.h], + [with_libupsclient="yes"], + [with_libupsclient="no (upsclient.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libupsclient" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" - LDFLAGS="$LDFLAGS $with_libupsclient_libs" +if test "x$with_libupsclient" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libupsclient_libs" + + AC_CHECK_LIB([upsclient], [upscli_connect], + [with_libupsclient="yes"], + [with_libupsclient="no (symbol upscli_connect not found)"] + ) - AC_CHECK_LIB(upsclient, upscli_connect, - [with_libupsclient="yes"], - [with_libupsclient="no (symbol upscli_connect not found)"]) + AC_CHECK_LIB([upsclient], [upscli_init], + [AC_DEFINE([HAVE_UPSCLI_INIT], [1], [Define when upscli_init() (since version 2-7) is available.])] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libupsclient" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" - AC_CHECK_TYPES([UPSCONN_t, UPSCONN], [], [], -[#include -#include -#include ]) +if test "x$with_libupsclient" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" + + AC_CHECK_TYPES([UPSCONN_t, UPSCONN], + [], + [], + [[ + #include + #include + #include + ]] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libupsclient" = "xyes" -then - BUILD_WITH_LIBUPSCLIENT_CFLAGS="$with_libupsclient_cflags" - BUILD_WITH_LIBUPSCLIENT_LIBS="$with_libupsclient_libs" - AC_SUBST(BUILD_WITH_LIBUPSCLIENT_CFLAGS) - AC_SUBST(BUILD_WITH_LIBUPSCLIENT_LIBS) + +if test "x$with_libupsclient" = "xyes"; then + BUILD_WITH_LIBUPSCLIENT_CFLAGS="$with_libupsclient_cflags" + BUILD_WITH_LIBUPSCLIENT_LIBS="$with_libupsclient_libs" fi + +AC_SUBST([BUILD_WITH_LIBUPSCLIENT_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBUPSCLIENT_LIBS]) # }}} # --with-libxenctrl {{{ -with_libxenctrl_cppflags="" -with_libxenctrl_ldflags="" -AC_ARG_WITH(libxenctrl, [AS_HELP_STRING([--with-libxenctrl@<:@=PREFIX@:>@], [Path to libxenctrl.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libxenctrl_cppflags="-I$withval/include" - with_libxenctrl_ldflags="-L$withval/lib" - with_libxenctrl="yes" - else - with_libxenctrl="$withval" - fi -], -[ - with_libxenctrl="yes" -]) -if test "x$with_libxenctrl" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libxenctrl_cppflags" +AC_ARG_WITH([libxenctrl], + [AS_HELP_STRING([--with-libxenctrl@<:@=PREFIX@:>@], [Path to libxenctrl.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libxenctrl_cppflags="-I$withval/include" + with_libxenctrl_ldflags="-L$withval/lib" + with_libxenctrl="yes" + else + with_libxenctrl="$withval" + fi + ], + [with_libxenctrl="yes"] +) + +if test "x$with_libxenctrl" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libxenctrl_cppflags" - AC_CHECK_HEADERS(xenctrl.h, [with_libxenctrl="yes"], [with_libxenctrl="no (xenctrl.h not found)"]) + AC_CHECK_HEADERS([xenctrl.h], + [with_libxenctrl="yes"], + [with_libxenctrl="no (xenctrl.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libxenctrl" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libxenctrl_cppflags" - LDFLAGS="$LDFLAGS $with_libxenctrl_ldflags" - #Xen versions older than 3.4 has no xc_getcpuinfo() - AC_CHECK_LIB(xenctrl, xc_getcpuinfo, [with_libxenctrl="yes"], [with_libxenctrl="no (symbol 'xc_getcpuinfo' not found)"], []) +if test "x$with_libxenctrl" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libxenctrl_ldflags" + + #Xen versions older than 3.4 has no xc_getcpuinfo() + AC_CHECK_LIB([xenctrl], [xc_getcpuinfo], + [with_libxenctrl="yes"], + [with_libxenctrl="no (symbol 'xc_getcpuinfo' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - LIBXENCTL_CPPFLAGS="$with_libxenctl_cppflags" - LIBXENCTL_LDFLAGS="$with_libxenctl_ldflags" - AC_SUBST(LIBXENCTL_CPPFLAGS) - AC_SUBST(LIBXENCTL_LDFLAGS) + LDFLAGS="$SAVE_LDFLAGS" fi + +LIBXENCTL_CPPFLAGS="$with_libxenctl_cppflags" +LIBXENCTL_LDFLAGS="$with_libxenctl_ldflags" +AC_SUBST([LIBXENCTL_CPPFLAGS]) +AC_SUBST([LIBXENCTL_LDFLAGS]) # }}} # --with-libxmms {{{ with_xmms_config="xmms-config" -with_xmms_cflags="" -with_xmms_libs="" -AC_ARG_WITH(libxmms, [AS_HELP_STRING([--with-libxmms@<:@=PREFIX@:>@], [Path to libxmms.])], -[ - if test "x$withval" != "xno" \ - && test "x$withval" != "xyes" - then - if test -f "$withval" && test -x "$withval"; - then - with_xmms_config="$withval" - else if test -x "$withval/bin/xmms-config" - then - with_xmms_config="$withval/bin/xmms-config" - fi; fi - with_libxmms="yes" - else if test "x$withval" = "xno" - then - with_libxmms="no" - else - with_libxmms="yes" - fi; fi -], -[ - with_libxmms="yes" -]) -if test "x$with_libxmms" = "xyes" -then - with_xmms_cflags=`$with_xmms_config --cflags 2>/dev/null` - xmms_config_status=$? +AC_ARG_WITH([libxmms], + [AS_HELP_STRING([--with-libxmms@<:@=PREFIX@:>@], [Path to libxmms.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_libxmms="$withval" + else + if test -f "$withval" && test -x "$withval"; then + with_xmms_config="$withval" + else if test -x "$withval/bin/xmms-config"; then + with_xmms_config="$withval/bin/xmms-config" + fi; fi + with_libxmms="yes" + fi + ], + [with_libxmms="yes"] +) - if test $xmms_config_status -ne 0 - then - with_libxmms="no" - fi +if test "x$with_libxmms" = "xyes"; then + with_xmms_cflags=`$with_xmms_config --cflags 2>/dev/null` + if test $? -ne 0; then + with_libxmms="no" + fi fi -if test "x$with_libxmms" = "xyes" -then - with_xmms_libs=`$with_xmms_config --libs 2>/dev/null` - xmms_config_status=$? - if test $xmms_config_status -ne 0 - then - with_libxmms="no" - fi +if test "x$with_libxmms" = "xyes"; then + with_xmms_libs=`$with_xmms_config --libs 2>/dev/null` + if test $? -ne 0; then + with_libxmms="no" + fi fi -if test "x$with_libxmms" = "xyes" -then - AC_CHECK_LIB(xmms, xmms_remote_get_info, - [ - BUILD_WITH_LIBXMMS_CFLAGS="$with_xmms_cflags" - BUILD_WITH_LIBXMMS_LIBS="$with_xmms_libs" - AC_SUBST(BUILD_WITH_LIBXMMS_CFLAGS) - AC_SUBST(BUILD_WITH_LIBXMMS_LIBS) - ], - [ - with_libxmms="no" - ], - [$with_xmms_libs]) -fi -with_libxmms_numeric=0 -if test "x$with_libxmms" = "xyes" -then - with_libxmms_numeric=1 + +if test "x$with_libxmms" = "xyes"; then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$with_xmms_cflags" + + AC_CHECK_HEADER([xmmsctrl.h], + [with_libxmms="yes"], + [with_libxmms="no"], + ) + + CFLAGS="$SAVE_CFLAGS" +fi + +if test "x$with_libxmms" = "xyes"; then + SAVE_LIBS="$LIBS" + LIBS="$with_xmms_libs" + + AC_CHECK_LIB([xmms], [xmms_remote_get_info], + [with_libxmss="yes"], + [with_libxmms="no"], + [$with_xmms_libs] + + ) + + LIBS="$SAVE_LIBS" fi -AC_DEFINE_UNQUOTED(HAVE_LIBXMMS, [$with_libxmms_numeric], [Define to 1 if you have the 'xmms' library (-lxmms).]) -AM_CONDITIONAL(BUILD_WITH_LIBXMMS, test "x$with_libxmms" = "xyes") + +BUILD_WITH_LIBXMMS_CFLAGS="$with_xmms_cflags" +BUILD_WITH_LIBXMMS_LIBS="$with_xmms_libs" + +AC_SUBST([BUILD_WITH_LIBXMMS_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBXMMS_LIBS]) # }}} # --with-libyajl {{{ -with_libyajl_cppflags="" -with_libyajl_ldflags="" -AC_ARG_WITH(libyajl, [AS_HELP_STRING([--with-libyajl@<:@=PREFIX@:>@], [Path to libyajl.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libyajl_cppflags="-I$withval/include" - with_libyajl_ldflags="-L$withval/lib" - with_libyajl="yes" - else - with_libyajl="$withval" - fi -], -[ - with_libyajl="yes" -]) -if test "x$with_libyajl" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libyajl_cppflags" +AC_ARG_WITH([libyajl], + [AS_HELP_STRING([--with-libyajl@<:@=PREFIX@:>@], [Path to libyajl.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libyajl_cppflags="-I$withval/include" + with_libyajl_ldflags="-L$withval/lib" + with_libyajl="yes" + else + with_libyajl="$withval" + fi + ], + [with_libyajl="yes"] +) + +if test "x$with_libyajl" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libyajl_cppflags" + + AC_CHECK_HEADERS([yajl/yajl_parse.h], + [with_libyajl="yes"], + [with_libyajl="no (yajl/yajl_parse.h not found)"] + ) + + AC_CHECK_HEADERS([yajl/yajl_tree.h], + [with_libyajl2="yes"], + [with_libyajl2="no (yajl/yajl_tree.h not found)"] + ) - AC_CHECK_HEADERS(yajl/yajl_parse.h, [with_libyajl="yes"], [with_libyajl="no (yajl/yajl_parse.h not found)"]) - AC_CHECK_HEADERS(yajl/yajl_version.h) + AC_CHECK_HEADERS([yajl/yajl_version.h]) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libyajl" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libyajl_cppflags" - LDFLAGS="$LDFLAGS $with_libyajl_ldflags" - AC_CHECK_LIB(yajl, yajl_alloc, [with_libyajl="yes"], [with_libyajl="no (Symbol 'yajl_alloc' not found)"]) +if test "x$with_libyajl" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libyajl_ldflags" + + AC_CHECK_LIB([yajl], [yajl_alloc], + [with_libyajl="yes"], + [with_libyajl="no (Symbol 'yajl_alloc' not found)"] + ) + + AC_CHECK_LIB([yajl], [yajl_tree_parse], + [with_libyajl2="yes"], + [with_libyajl2="no (Symbol 'yajl_tree_parse' not found)"] + ) + + LDFLAGS="$SAVE_LDFLAGS" +fi - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" +if test "x$with_libyajl" = "xyes"; then + BUILD_WITH_LIBYAJL_CPPFLAGS="$with_libyajl_cppflags" + BUILD_WITH_LIBYAJL_LDFLAGS="$with_libyajl_ldflags" + BUILD_WITH_LIBYAJL_LIBS="-lyajl" + AC_DEFINE([HAVE_LIBYAJL], [1], [Define if libyajl is present and usable.]) fi -if test "x$with_libyajl" = "xyes" -then - BUILD_WITH_LIBYAJL_CPPFLAGS="$with_libyajl_cppflags" - BUILD_WITH_LIBYAJL_LDFLAGS="$with_libyajl_ldflags" - BUILD_WITH_LIBYAJL_LIBS="-lyajl" - AC_SUBST(BUILD_WITH_LIBYAJL_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBYAJL_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBYAJL_LIBS) - AC_DEFINE(HAVE_LIBYAJL, 1, [Define if libyajl is present and usable.]) -fi -AM_CONDITIONAL(BUILD_WITH_LIBYAJL, test "x$with_libyajl" = "xyes") + +AC_SUBST([BUILD_WITH_LIBYAJL_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBYAJL_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBYAJL_LIBS]) + +AM_CONDITIONAL([BUILD_WITH_LIBYAJL], [test "x$with_libyajl" = "xyes"]) # }}} # --with-mic {{{ -with_mic_cflags="-I/opt/intel/mic/sysmgmt/sdk/include" -with_mic_ldpath="-L/opt/intel/mic/sysmgmt/sdk/lib/Linux" -with_mic_libs="" -AC_ARG_WITH(mic,[AS_HELP_STRING([--with-mic@<:@=PREFIX@:>@], [Path to Intel MIC Access API.])], -[ - if test "x$withval" = "xno" - then - with_mic="no" - else if test "x$withval" = "xyes" - then - with_mic="yes" - else if test -d "$with_mic/lib" - then - AC_MSG_NOTICE([Not checking for Intel Mic: Manually configured]) - with_mic_cflags="-I$withval/include" - with_mic_ldpath="-L$withval/lib/Linux" - with_mic_libs="$PTHREAD_LIBS -lMicAccessSDK -lscif" - with_mic="yes" - fi; fi; fi -], -[with_mic="yes"]) -if test "x$with_mic" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_mic_cflags" - AC_CHECK_HEADERS(MicAccessApi.h,[],[with_mic="no (MicAccessApi not found)"]) - CPPFLAGS="$SAVE_CPPFLAGS" +with_mic_cppflags="-I/opt/intel/mic/sysmgmt/sdk/include" +with_mic_ldflags="-L/opt/intel/mic/sysmgmt/sdk/lib/Linux" +with_mic_libs="-lMicAccessSDK -scif" +AC_ARG_WITH([mic], + [AS_HELP_STRING([--with-mic@<:@=PREFIX@:>@], [Path to Intel MIC Access API.])], + [ + if test "x$withval" = "xno" || test "x$withval" = "xyes"; then + with_mic="$withval" + else if test -d "$with_mic/lib"; then + with_mic_cppflags="-I$withval/include" + with_mic_ldflags="-L$withval/lib/Linux" + with_mic="yes" + fi; fi + ], + [with_mic="yes"] +) + +if test "x$with_mic" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_mic_cppflags" + + AC_CHECK_HEADERS([MicAccessApi.h], + [with_mic="yes"], + [with_mic="no (MicAccessApi not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_mic" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_mic_cflags" - LDFLAGS="$LDFLAGS $with_mic_ldpath" +if test "x$with_mic" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_mic_ldflags" - AC_CHECK_LIB(MicAccessSDK, MicInitAPI, - [with_mic_ldpath="$with_mic_ldpath" - with_mic_libs="$PTHREAD_LIBS -lMicAccessSDK -lscif"], - [with_mic="no (symbol MicInitAPI not found)"],[$PTHREAD_LIBS -lscif]) + AC_CHECK_LIB([MicAccessSDK], [MicInitAPI], + [with_mic="yes"], + [with_mic="no (symbol MicInitAPI not found)"], + [$PTHREAD_LIBS -lscif] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_mic" = "xyes" -then - BUILD_WITH_MIC_CPPFLAGS="$with_mic_cflags" - BUILD_WITH_MIC_LIBPATH="$with_mic_ldpath" - BUILD_WITH_MIC_LDADD="$with_mic_libs" - AC_SUBST(BUILD_WITH_MIC_CPPFLAGS) - AC_SUBST(BUILD_WITH_MIC_LIBPATH) - AC_SUBST(BUILD_WITH_MIC_LDADD) +if test "x$with_mic" = "xyes"; then + BUILD_WITH_MIC_CPPFLAGS="$with_mic_cppflags" + BUILD_WITH_MIC_LDFLAGS="$with_mic_ldflags" + BUILD_WITH_MIC_LIBS="$with_mic_libs" fi +AC_SUBST([BUILD_WITH_MIC_CPPFLAGS]) +AC_SUBST([BUILD_WITH_MIC_LDFLAGS]) +AC_SUBST([BUILD_WITH_MIC_LIBS]) #}}} # --with-libvarnish {{{ -with_libvarnish_cppflags="" -with_libvarnish_cflags="" -with_libvarnish_libs="" -AC_ARG_WITH(libvarnish, [AS_HELP_STRING([--with-libvarnish@<:@=PREFIX@:>@], [Path to libvarnish.])], -[ - if test "x$withval" = "xno" - then - with_libvarnish="no" - else if test "x$withval" = "xyes" - then - with_libvarnish="use_pkgconfig" - else if test -d "$with_libvarnish/lib" - then - AC_MSG_NOTICE([Not checking for libvarnish: Manually configured]) - with_libvarnish_cflags="-I$withval/include" - with_libvarnish_libs="-L$withval/lib -lvarnishapi" - with_libvarnish="yes" - fi; fi; fi -], -[with_libvarnish="use_pkgconfig"]) +AC_ARG_WITH([libvarnish], + [AS_HELP_STRING([--with-libvarnish@<:@=PREFIX@:>@], [Path to libvarnish.])], + [ + if test "x$withval" = "xno"; then + with_libvarnish="no" + else if test "x$withval" = "xyes"; then + with_libvarnish="use_pkgconfig" + else if test -d "$with_libvarnish/lib"; then + with_libvarnish_cflags="-I$withval/include" + with_libvarnish_libs="-L$withval/lib -lvarnishapi" + with_libvarnish="yes" + fi; fi; fi + ], + [with_libvarnish="use_pkgconfig"] +) # configure using pkg-config -if test "x$with_libvarnish" = "xuse_pkgconfig" -then - AC_MSG_NOTICE([Checking for varnishapi using $PKG_CONFIG]) - $PKG_CONFIG --exists 'varnishapi' 2>/dev/null - if test $? -ne 0 - then - with_libvarnish="no (pkg-config doesn't know varnishapi)" - fi -fi -if test "x$with_libvarnish" = "xuse_pkgconfig" -then - with_libvarnish_cflags="`$PKG_CONFIG --cflags 'varnishapi'`" - if test $? -ne 0 - then - with_libvarnish="no ($PKG_CONFIG failed)" - fi - with_libvarnish_libs="`$PKG_CONFIG --libs 'varnishapi'`" - if test $? -ne 0 - then - with_libvarnish="no ($PKG_CONFIG failed)" - fi -fi -if test "x$with_libvarnish" = "xuse_pkgconfig" -then - with_libvarnish="yes" +if test "x$with_libvarnish" = "xuse_pkgconfig"; then + $PKG_CONFIG --exists 'varnishapi' 2>/dev/null + if test $? -ne 0; then + with_libvarnish="no (pkg-config doesn't know varnishapi)" + fi fi -# with_libvarnish_cflags and with_libvarnish_libs are set up now, let's do -# the actual checks. -if test "x$with_libvarnish" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" +if test "x$with_libvarnish" = "xuse_pkgconfig"; then + with_libvarnish_cflags="`$PKG_CONFIG --cflags 'varnishapi'`" + if test $? -ne 0; then + with_libvarnish="no ($PKG_CONFIG failed)" + fi - CPPFLAGS="$CPPFLAGS $with_libvarnish_cflags" + with_libvarnish_libs="`$PKG_CONFIG --libs 'varnishapi'`" + if test $? -ne 0; then + with_libvarnish="no ($PKG_CONFIG failed)" + fi +fi +if test "x$with_libvarnish" = "xuse_pkgconfig"; then + with_libvarnish="yes" +fi - AC_CHECK_HEADERS(vapi/vsc.h, - [AC_DEFINE([HAVE_VARNISH_V4], [1], [Varnish 4 API support])], - [AC_CHECK_HEADERS(vsc.h, - [AC_DEFINE([HAVE_VARNISH_V3], [1], [Varnish 3 API support])], - [AC_CHECK_HEADERS(varnishapi.h, - [AC_DEFINE([HAVE_VARNISH_V2], [1], [Varnish 2 API support])], - [with_libvarnish="no (found none of the varnish header files)"])])]) +if test "x$with_libvarnish" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libvarnish_cflags" + + AC_CHECK_HEADERS([vapi/vsc.h], + [AC_DEFINE([HAVE_VARNISH_V4], [1], [Varnish 4 API support])], + [ + AC_CHECK_HEADERS([vsc.h], + [AC_DEFINE([HAVE_VARNISH_V3], [1], [Varnish 3 API support]) ], + [ + AC_CHECK_HEADERS([varnishapi.h], + [AC_DEFINE([HAVE_VARNISH_V2], [1], [Varnish 2 API support])], + [with_libvarnish="no (found none of the varnish header files)"] + ) + ] + ) + ] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libvarnish" = "xyes" -then - BUILD_WITH_LIBVARNISH_CFLAGS="$with_libvarnish_cflags" - BUILD_WITH_LIBVARNISH_LIBS="$with_libvarnish_libs" - AC_SUBST(BUILD_WITH_LIBVARNISH_CFLAGS) - AC_SUBST(BUILD_WITH_LIBVARNISH_LIBS) + +if test "x$with_libvarnish" = "xyes"; then + BUILD_WITH_LIBVARNISH_CFLAGS="$with_libvarnish_cflags" + BUILD_WITH_LIBVARNISH_LIBS="$with_libvarnish_libs" fi + +AC_SUBST([BUILD_WITH_LIBVARNISH_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBVARNISH_LIBS]) # }}} # pkg-config --exists 'libxml-2.0'; pkg-config --exists libvirt {{{ -with_libxml2="no (pkg-config isn't available)" -with_libxml2_cflags="" -with_libxml2_ldflags="" -with_libvirt="no (pkg-config isn't available)" -with_libvirt_cflags="" -with_libvirt_ldflags="" $PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null -if test "$?" = "0" -then - with_libxml2="yes" +if test $? -eq 0; then + with_libxml2="yes" else - with_libxml2="no (pkg-config doesn't know libxml-2.0)" + with_libxml2="no (pkg-config doesn't know libxml-2.0)" fi $PKG_CONFIG --exists libvirt 2>/dev/null -if test "$?" = "0" -then - with_libvirt="yes" +if test $? = 0; then + with_libvirt="yes" else - with_libvirt="no (pkg-config doesn't know libvirt)" + with_libvirt="no (pkg-config doesn't know libvirt)" fi -if test "x$with_libxml2" = "xyes" -then - with_libxml2_cflags="`$PKG_CONFIG --cflags libxml-2.0`" - if test $? -ne 0 - then - with_libxml2="no" - fi - with_libxml2_ldflags="`$PKG_CONFIG --libs libxml-2.0`" - if test $? -ne 0 - then - with_libxml2="no" - fi -fi -if test "x$with_libxml2" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libxml2_cflags" - AC_CHECK_HEADERS(libxml/parser.h, [], - [with_libxml2="no (libxml/parser.h not found)"]) +if test "x$with_libxml2" = "xyes"; then + with_libxml2_cflags="`$PKG_CONFIG --cflags libxml-2.0`" + if test $? -ne 0; then + with_libxml2="no" + fi + + with_libxml2_ldflags="`$PKG_CONFIG --libs libxml-2.0`" + if test $? -ne 0; then + with_libxml2="no" + fi +fi + +if test "x$with_libxml2" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libxml2_cflags" + + AC_CHECK_HEADERS([libxml/parser.h], + [with_libxml2="yes"], + [with_libxml2="no (libxml/parser.h not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libxml2" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS $with_libxml2_cflags" - LDFLAGS="$LDFLAGS $with_libxml2_ldflags" +if test "x$with_libxml2" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libxml2_ldflags" - AC_CHECK_LIB(xml2, xmlXPathEval, - [with_libxml2="yes"], - [with_libxml2="no (symbol xmlXPathEval not found)"]) + AC_CHECK_LIB([xml2], [xmlXPathEval], + [with_libxml2="yes"], + [with_libxml2="no (symbol xmlXPathEval not found)"] + ) - CFLAGS="$SAVE_CFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -dnl Add the right compiler flags and libraries. + if test "x$with_libxml2" = "xyes"; then - BUILD_WITH_LIBXML2_CFLAGS="$with_libxml2_cflags" - BUILD_WITH_LIBXML2_LIBS="$with_libxml2_ldflags" - AC_SUBST(BUILD_WITH_LIBXML2_CFLAGS) - AC_SUBST(BUILD_WITH_LIBXML2_LIBS) + BUILD_WITH_LIBXML2_CFLAGS="$with_libxml2_cflags" + BUILD_WITH_LIBXML2_LIBS="$with_libxml2_ldflags" fi -if test "x$with_libvirt" = "xyes" -then - with_libvirt_cflags="`$PKG_CONFIG --cflags libvirt`" - if test $? -ne 0 - then - with_libvirt="no" - fi - with_libvirt_ldflags="`$PKG_CONFIG --libs libvirt`" - if test $? -ne 0 - then - with_libvirt="no" - fi -fi -if test "x$with_libvirt" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libvirt_cflags" - AC_CHECK_HEADERS(libvirt/libvirt.h, [], - [with_libvirt="no (libvirt/libvirt.h not found)"]) +AC_SUBST([BUILD_WITH_LIBXML2_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBXML2_LIBS]) + +if test "x$with_libvirt" = "xyes"; then + with_libvirt_cflags="`$PKG_CONFIG --cflags libvirt`" + if test $? -ne 0; then + with_libvirt="no" + fi - CPPFLAGS="$SAVE_CPPFLAGS" + with_libvirt_ldflags="`$PKG_CONFIG --libs libvirt`" + if test $? -ne 0; then + with_libvirt="no" + fi +fi + +if test "x$with_libvirt" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libvirt_cflags" + + AC_CHECK_HEADERS([libvirt/libvirt.h], + [with_libvirt="yes"], + [with_libvirt="no (libvirt/libvirt.h not found)"] + ) + + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libvirt" = "xyes" -then - SAVE_CFLAGS="$CFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS $with_libvirt_cflags" - LDFLAGS="$LDFLAGS $with_libvirt_ldflags" +if test "x$with_libvirt" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libvirt_ldflags" - AC_CHECK_LIB(virt, virDomainBlockStats, - [with_libvirt="yes"], - [with_libvirt="no (symbol virDomainBlockStats not found)"]) + AC_CHECK_LIB([virt], [virDomainBlockStats], + [with_libvirt="yes"], + [with_libvirt="no (symbol virDomainBlockStats not found)"] + ) - CFLAGS="$SAVE_CFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -dnl Add the right compiler flags and libraries. + if test "x$with_libvirt" = "xyes"; then - BUILD_WITH_LIBVIRT_CFLAGS="$with_libvirt_cflags" - BUILD_WITH_LIBVIRT_LIBS="$with_libvirt_ldflags" - AC_SUBST(BUILD_WITH_LIBVIRT_CFLAGS) - AC_SUBST(BUILD_WITH_LIBVIRT_LIBS) + BUILD_WITH_LIBVIRT_CFLAGS="$with_libvirt_cflags" + BUILD_WITH_LIBVIRT_LIBS="$with_libvirt_ldflags" fi + +AC_SUBST([BUILD_WITH_LIBVIRT_CFLAGS]) +AC_SUBST([BUILD_WITH_LIBVIRT_LIBS]) # }}} # $PKG_CONFIG --exists OpenIPMIpthread {{{ with_libopenipmipthread="yes" -with_libopenipmipthread_cflags="" -with_libopenipmipthread_libs="" +AC_MSG_CHECKING([for libOpenIPMIpthread]) +$PKG_CONFIG --exists OpenIPMIpthread 2>/dev/null +if test $? -ne 0; then + with_libopenipmipthread="no (pkg-config doesn't know OpenIPMIpthread)" +fi +AC_MSG_RESULT([$with_libopenipmipthread]) + +if test "x$with_libopenipmipthread" = "xyes"; then + AC_MSG_CHECKING([for libOpenIPMIpthread CFLAGS]) + temp_result="`$PKG_CONFIG --cflags OpenIPMIpthread`" + if test $? -eq 0; then + with_libopenipmipthread_cflags="$temp_result" + else + with_libopenipmipthread="no ($PKG_CONFIG --cflags OpenIPMIpthread failed)" + temp_result="$PKG_CONFIG --cflags OpenIPMIpthread failed" + fi + AC_MSG_RESULT([$temp_result]) +fi -if test "x$with_libopenipmipthread" = "xyes" -then - AC_MSG_CHECKING([for libOpenIPMIpthread]) - $PKG_CONFIG --exists OpenIPMIpthread 2>/dev/null - if test "$?" != "0" - then - with_libopenipmipthread="no (pkg-config doesn't know OpenIPMIpthread)" - fi - AC_MSG_RESULT([$with_libopenipmipthread]) +if test "x$with_libopenipmipthread" = "xyes"; then + AC_MSG_CHECKING([for libOpenIPMIpthread LDFLAGS]) + temp_result="`$PKG_CONFIG --libs OpenIPMIpthread`" + if test $? -eq 0; then + with_libopenipmipthread_ldflags="$temp_result" + else + with_libopenipmipthread="no ($PKG_CONFIG --libs OpenIPMIpthread failed)" + temp_result="$PKG_CONFIG --libs OpenIPMIpthread failed" + fi + AC_MSG_RESULT([$temp_result]) fi -if test "x$with_libopenipmipthread" = "xyes" -then - AC_MSG_CHECKING([for libOpenIPMIpthread CFLAGS]) - temp_result="`$PKG_CONFIG --cflags OpenIPMIpthread`" - if test "$?" = "0" - then - with_libopenipmipthread_cflags="$temp_result" - else - with_libopenipmipthread="no ($PKG_CONFIG --cflags OpenIPMIpthread failed)" - temp_result="$PKG_CONFIG --cflags OpenIPMIpthread failed" - fi - AC_MSG_RESULT([$temp_result]) -fi - -if test "x$with_libopenipmipthread" = "xyes" -then - AC_MSG_CHECKING([for libOpenIPMIpthread LDFLAGS]) - temp_result="`$PKG_CONFIG --libs OpenIPMIpthread`" - if test "$?" = "0" - then - with_libopenipmipthread_ldflags="$temp_result" - else - with_libopenipmipthread="no ($PKG_CONFIG --libs OpenIPMIpthread failed)" - temp_result="$PKG_CONFIG --libs OpenIPMIpthread failed" - fi - AC_MSG_RESULT([$temp_result]) -fi - -if test "x$with_libopenipmipthread" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libopenipmipthread_cflags" - - AC_CHECK_HEADERS(OpenIPMI/ipmi_smi.h, - [with_libopenipmipthread="yes"], - [with_libopenipmipthread="no (OpenIPMI/ipmi_smi.h not found)"], -[#include -#include -#include -#include -]) +if test "x$with_libopenipmipthread" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libopenipmipthread_cflags" + + AC_CHECK_HEADERS([OpenIPMI/ipmi_smi.h], + [with_libopenipmipthread="yes"], + [with_libopenipmipthread="no (OpenIPMI/ipmi_smi.h not found)"], + [[ + #include + #include + #include + #include + ]] + ) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libopenipmipthread" = "xyes" -then - BUILD_WITH_OPENIPMI_CFLAGS="$with_libopenipmipthread_cflags" - BUILD_WITH_OPENIPMI_LIBS="$with_libopenipmipthread_ldflags" - AC_SUBST(BUILD_WITH_OPENIPMI_CFLAGS) - AC_SUBST(BUILD_WITH_OPENIPMI_LIBS) +if test "x$with_libopenipmipthread" = "xyes"; then + BUILD_WITH_OPENIPMI_CFLAGS="$with_libopenipmipthread_cflags" + BUILD_WITH_OPENIPMI_LIBS="$with_libopenipmipthread_ldflags" fi + +AC_SUBST([BUILD_WITH_OPENIPMI_CFLAGS]) +AC_SUBST([BUILD_WITH_OPENIPMI_LIBS]) # }}} # --with-libatasmart {{{ -with_libatasmart_cppflags="" -with_libatasmart_ldflags="" -AC_ARG_WITH(libatasmart, [AS_HELP_STRING([--with-libatasmart@<:@=PREFIX@:>@], [Path to libatasmart.])], -[ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - with_libatasmart_cppflags="-I$withval/include" - with_libatasmart_ldflags="-L$withval/lib" - with_libatasmart="yes" - else - with_libatasmart="$withval" - fi -], -[ - if test "x$ac_system" = "xLinux" - then - with_libatasmart="yes" - else - with_libatasmart="no (Linux only library)" - fi -]) -if test "x$with_libatasmart" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libatasmart_cppflags" +AC_ARG_WITH([libatasmart], + [AS_HELP_STRING([--with-libatasmart@<:@=PREFIX@:>@], [Path to libatasmart.])], + [ + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + with_libatasmart_cppflags="-I$withval/include" + with_libatasmart_ldflags="-L$withval/lib" + with_libatasmart="yes" + else + with_libatasmart="$withval" + fi + ], + [ + if test "x$ac_system" = "xLinux"; then + with_libatasmart="yes" + else + with_libatasmart="no (Linux only library)" + fi + ] +) + +if test "x$with_libatasmart" = "xyes"; then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libatasmart_cppflags" - AC_CHECK_HEADERS(atasmart.h, [with_libatasmart="yes"], [with_libatasmart="no (atasmart.h not found)"]) + AC_CHECK_HEADERS([atasmart.h], + [with_libatasmart="yes"], + [with_libatasmart="no (atasmart.h not found)"]) - CPPFLAGS="$SAVE_CPPFLAGS" + CPPFLAGS="$SAVE_CPPFLAGS" fi -if test "x$with_libatasmart" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libatasmart_cppflags" - LDFLAGS="$LDFLAGS $with_libatasmart_ldflags" - AC_CHECK_LIB(atasmart, sk_disk_open, [with_libatasmart="yes"], [with_libatasmart="no (Symbol 'sk_disk_open' not found)"]) +if test "x$with_libatasmart" = "xyes"; then + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libatasmart_ldflags" + + AC_CHECK_LIB([atasmart], [sk_disk_open], + [with_libatasmart="yes"], + [with_libatasmart="no (Symbol 'sk_disk_open' not found)"] + ) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" + LDFLAGS="$SAVE_LDFLAGS" fi -if test "x$with_libatasmart" = "xyes" -then - BUILD_WITH_LIBATASMART_CPPFLAGS="$with_libatasmart_cppflags" - BUILD_WITH_LIBATASMART_LDFLAGS="$with_libatasmart_ldflags" - BUILD_WITH_LIBATASMART_LIBS="-latasmart" - AC_SUBST(BUILD_WITH_LIBATASMART_CPPFLAGS) - AC_SUBST(BUILD_WITH_LIBATASMART_LDFLAGS) - AC_SUBST(BUILD_WITH_LIBATASMART_LIBS) - AC_DEFINE(HAVE_LIBATASMART, 1, [Define if libatasmart is present and usable.]) -fi -AM_CONDITIONAL(BUILD_WITH_LIBATASMART, test "x$with_libatasmart" = "xyes") + +if test "x$with_libatasmart" = "xyes"; then + BUILD_WITH_LIBATASMART_CPPFLAGS="$with_libatasmart_cppflags" + BUILD_WITH_LIBATASMART_LDFLAGS="$with_libatasmart_ldflags" + BUILD_WITH_LIBATASMART_LIBS="-latasmart" +fi + +AC_SUBST([BUILD_WITH_LIBATASMART_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBATASMART_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBATASMART_LIBS]) # }}} PKG_CHECK_MODULES([LIBNOTIFY], [libnotify], - [with_libnotify="yes"], - [with_libnotify="no (pkg-config doesn't know libnotify)"] + [with_libnotify="yes"], + [with_libnotify="no (pkg-config doesn't know libnotify)"] ) PKG_CHECK_MODULES([LIBRIEMANN_CLIENT], [riemann-client >= 1.6.0], [with_libriemann_client="yes"], - [with_libriemann_client="no (pkg-config doesn't know libriemann-client)"]) + [with_libriemann_client="no (pkg-config doesn't know libriemann-client)"] +) # Check for enabled/disabled features # @@ -5888,61 +5940,59 @@ PKG_CHECK_MODULES([LIBRIEMANN_CLIENT], [riemann-client >= 1.6.0], # AC_COLLECTD(name, enable/disable, info-text, feature/module) # ------------------------------------------------------------ dnl -m4_define([my_toupper], [m4_translit([$1], m4_defn([m4_cr_letters]), m4_defn([m4_cr_LETTERS]))]) +m4_define([my_toupper],[m4_translit([$1], m4_defn([m4_cr_letters]), m4_defn([m4_cr_LETTERS]))]) dnl AC_DEFUN( - [AC_COLLECTD], - [ - m4_if([$1], [], [AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 1st argument must not be empty])])dnl - m4_if( - [$2], - [enable], - [dnl - m4_define([EnDis],[disabled])dnl - m4_define([YesNo],[no])dnl - ],dnl - [m4_if( - [$2], - [disable], - [dnl - m4_define([EnDis],[enabled])dnl - m4_define([YesNo],[yes])dnl - ], - [dnl - AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 2nd argument must be either enable or disable])dnl - ]dnl - )]dnl - )dnl - m4_if([$3], [feature], [], - [m4_if( - [$3], [module], [], - [dnl - AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 3rd argument must be either feature or disable])dnl - ]dnl - )]dnl - )dnl - AC_ARG_ENABLE( - [$1], - AS_HELP_STRING([--$2-$1], [$2 $4 (EnDis by def)]), - [], - enable_$1='[YesNo]'dnl - )# AC_ARG_ENABLE -if test "x$enable_$1" = "xno" -then - collectd_$1=0 -else - if test "x$enable_$1" = "xyes" - then - collectd_$1=1 - else - AC_MSG_NOTICE([please specify either --enable-$1 or --disable-$1; enabling $1.]) - collectd_$1=1 - enable_$1='yes' - fi -fi - AC_DEFINE_UNQUOTED([COLLECT_]my_toupper([$1]), [$collectd_$1], [wether or not to enable $3 $4]) - AM_CONDITIONAL([BUILD_]my_toupper([$3])[_]my_toupper([$1]), [test "x$enable_$1" = "xyes"])dnl - ]dnl + [AC_COLLECTD], + [ + m4_if([$1], [], [AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 1st argument must not be empty])])dnl + m4_if( + [$2], + [enable], + [dnl + m4_define([EnDis],[disabled])dnl + m4_define([YesNo],[no])dnl + ],dnl + [m4_if( + [$2], + [disable], + [dnl + m4_define([EnDis],[enabled])dnl + m4_define([YesNo],[yes])dnl + ], + [dnl + AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 2nd argument must be either enable or disable])dnl + ]dnl + )]dnl + )dnl + m4_if([$3], [feature], [], + [m4_if( + [$3], [module], [], + [dnl + AC_FATAL([AC_COLLECTD([$1], [$2], [$3], [$4]): 3rd argument must be either feature or disable])dnl + ]dnl + )]dnl + )dnl + AC_ARG_ENABLE( + [$1], + AS_HELP_STRING([--$2-$1], [$2 $4 (EnDis by def)]), + [], + enable_$1='[YesNo]'dnl + )# AC_ARG_ENABLE + if test "x$enable_$1" = "xno"; then + collectd_$1=0 + else + if test "x$enable_$1" = "xyes"; then + collectd_$1=1 + else + AC_MSG_NOTICE([please specify either --enable-$1 or --disable-$1; enabling $1.]) + collectd_$1=1 + enable_$1='yes' + fi + fi + AC_DEFINE_UNQUOTED([COLLECT_]my_toupper([$1]), [$collectd_$1], [whether or not to enable $3 $4]) + AM_CONDITIONAL([BUILD_]my_toupper([$3])[_]my_toupper([$1]), [test "x$enable_$1" = "xyes"])dnl + ]dnl )# AC_COLLECTD(name, enable/disable, info-text, feature/module) # AC_PLUGIN(name, default, info) @@ -5953,47 +6003,42 @@ AC_DEFUN( [ enable_plugin="no" force="no" - AC_ARG_ENABLE([$1], AS_HELP_STRING([--enable-$1],[$3]), - [ - if test "x$enableval" = "xyes" - then - enable_plugin="yes" - else if test "x$enableval" = "xforce" - then - enable_plugin="yes" - force="yes" - else - enable_plugin="no (disabled on command line)" - fi; fi - ], - [ - if test "x$enable_all_plugins" = "xauto" - then - if test "x$2" = "xyes" - then - enable_plugin="yes" - else - enable_plugin="$2" - fi - else - enable_plugin="$enable_all_plugins" - fi - ]) - if test "x$enable_plugin" = "xyes" - then - if test "x$2" = "xyes" || test "x$force" = "xyes" - then - AC_DEFINE([HAVE_PLUGIN_]my_toupper([$1]), 1, [Define to 1 if the $1 plugin is enabled.]) - if test "x$2" != "xyes" - then - dependency_warning="yes" - fi - else # User passed "yes" but dependency checking yielded "no" => Dependency problem. - dependency_error="yes" - enable_plugin="$2 (dependency error)" - fi + AC_ARG_ENABLE([$1], + [AS_HELP_STRING([--enable-$1],[$3])], + [ + if test "x$enableval" = "xyes"; then + enable_plugin="yes" + else if test "x$enableval" = "xforce"; then + enable_plugin="yes" + force="yes" + else + enable_plugin="no (disabled on command line)" + fi; fi + ], + [ + if test "x$enable_all_plugins" = "xauto"; then + if test "x$2" = "xyes"; then + enable_plugin="yes" + else + enable_plugin="$2" + fi + else + enable_plugin="$enable_all_plugins" + fi + ] + ) + if test "x$enable_plugin" = "xyes"; then + if test "x$2" = "xyes" || test "x$force" = "xyes"; then + AC_DEFINE([HAVE_PLUGIN_]my_toupper([$1]), 1, [Define to 1 if the $1 plugin is enabled.]) + if test "x$2" != "xyes"; then + dependency_warning="yes" + fi + else # User passed "yes" but dependency checking yielded "no" => Dependency problem. + dependency_error="yes" + enable_plugin="$2 (dependency error)" + fi fi - AM_CONDITIONAL([BUILD_PLUGIN_]my_toupper([$1]), test "x$enable_plugin" = "xyes") + AM_CONDITIONAL([BUILD_PLUGIN_]my_toupper([$1]), [test "x$enable_plugin" = "xyes"]) enable_$1="$enable_plugin" ] )# AC_PLUGIN(name, default, info) @@ -6025,6 +6070,7 @@ plugin_curl_xml="no" plugin_df="no" plugin_disk="no" plugin_drbd="no" +plugin_dpdkevents="no" plugin_dpdkstat="no" plugin_entropy="no" plugin_ethstat="no" @@ -6035,15 +6081,19 @@ plugin_grpc="no" plugin_hugepages="no" plugin_intel_rdt="no" plugin_interface="no" +plugin_ipc="no" plugin_ipmi="no" plugin_ipvs="no" plugin_irq="no" plugin_load="no" plugin_log_logstash="no" +plugin_mcelog="no" plugin_memory="no" plugin_multimeter="no" plugin_nfs="no" plugin_numa="no" +plugin_ovs_events="no" +plugin_ovs_stats="no" plugin_perl="no" plugin_pinba="no" plugin_processes="no" @@ -6070,374 +6120,310 @@ plugin_zone="no" plugin_zookeeper="no" # Linux -if test "x$ac_system" = "xLinux" -then - plugin_battery="yes" - plugin_cgroups="yes" - plugin_conntrack="yes" - plugin_contextswitch="yes" - plugin_cpu="yes" - plugin_cpufreq="yes" - plugin_disk="yes" - plugin_drbd="yes" - plugin_entropy="yes" - plugin_fhcount="yes" - plugin_fscache="yes" - plugin_hugepages="yes" - plugin_interface="yes" - plugin_ipc="yes" - plugin_irq="yes" - plugin_load="yes" - plugin_lvm="yes" - plugin_memory="yes" - plugin_nfs="yes" - plugin_numa="yes" - plugin_processes="yes" - plugin_protocols="yes" - plugin_serial="yes" - plugin_swap="yes" - plugin_tcpconns="yes" - plugin_thermal="yes" - plugin_uptime="yes" - plugin_vmem="yes" - plugin_vserver="yes" - plugin_wireless="yes" - plugin_zfs_arc="yes" - - if test "x$have_linux_ip_vs_h" = "xyes" || test "x$have_net_ip_vs_h" = "xyes" || test "x$have_ip_vs_h" = "xyes" - then - plugin_ipvs="yes" - fi - if test "x$c_cv_have_usable_asm_msrindex_h" = "xyes" && test "x$have_cpuid_h" = "xyes" - then - plugin_turbostat="yes" - fi - - if test "x$c_cv_have_clock_boottime_monotonic" = "xyes" - then - plugin_cpusleep="yes" - fi -fi - -if test "x$ac_system" = "xOpenBSD" -then - plugin_tcpconns="yes" +if test "x$ac_system" = "xLinux"; then + plugin_battery="yes" + plugin_cgroups="yes" + plugin_conntrack="yes" + plugin_contextswitch="yes" + plugin_cpu="yes" + plugin_cpufreq="yes" + plugin_disk="yes" + plugin_drbd="yes" + plugin_entropy="yes" + plugin_fhcount="yes" + plugin_fscache="yes" + plugin_hugepages="yes" + plugin_interface="yes" + plugin_ipc="yes" + plugin_irq="yes" + plugin_load="yes" + plugin_lvm="yes" + plugin_mcelog="yes" + plugin_memory="yes" + plugin_nfs="yes" + plugin_numa="yes" + plugin_processes="yes" + plugin_protocols="yes" + plugin_serial="yes" + plugin_swap="yes" + plugin_tcpconns="yes" + plugin_thermal="yes" + plugin_uptime="yes" + plugin_vmem="yes" + plugin_vserver="yes" + plugin_wireless="yes" + plugin_zfs_arc="yes" + + if test "x$ac_cv_header_linux_ip_vs_h" = "xyes"; then + plugin_ipvs="yes" + fi + + if test "x$c_cv_have_usable_asm_msrindex_h" = "xyes" && test "x$have_cpuid_h" = "xyes"; then + plugin_turbostat="yes" + fi + + if test "x$c_cv_have_clock_boottime_monotonic" = "xyes"; then + plugin_cpusleep="yes" + fi + + if test "x$with_libyajl" = "xyes" && test "x$with_libyajl2" = "xyes"; then + plugin_ovs_events="yes" + plugin_ovs_stats="yes" + fi fi -if test "x$ac_system" = "xNetBSD" -then - plugin_disk="yes" - plugin_entropy="yes" - plugin_irq="yes" - plugin_processes="yes" +if test "x$ac_system" = "xOpenBSD"; then + plugin_tcpconns="yes" +fi + +if test "x$ac_system" = "xNetBSD"; then + plugin_disk="yes" + plugin_entropy="yes" + plugin_irq="yes" + plugin_processes="yes" fi # Mac OS X devices -if test "x$with_libiokit" = "xyes" -then - plugin_battery="yes" - plugin_disk="yes" +if test "x$with_libiokit" = "xyes"; then + plugin_battery="yes" + plugin_disk="yes" fi # AIX -if test "x$ac_system" = "xAIX" -then - plugin_ipc="yes" - plugin_tcpconns="yes" +if test "x$ac_system" = "xAIX"; then + plugin_ipc="yes" + plugin_tcpconns="yes" fi # FreeBSD -if test "x$ac_system" = "xFreeBSD" -then - plugin_disk="yes" - plugin_zfs_arc="yes" +if test "x$ac_system" = "xFreeBSD"; then + plugin_disk="yes" + plugin_zfs_arc="yes" fi -if test "x$with_perfstat" = "xyes" -then - plugin_contextswitch="yes" - plugin_cpu="yes" - plugin_disk="yes" - plugin_interface="yes" - plugin_load="yes" - plugin_memory="yes" - plugin_swap="yes" - plugin_uptime="yes" +if test "x$with_perfstat" = "xyes"; then + plugin_contextswitch="yes" + plugin_cpu="yes" + plugin_disk="yes" + plugin_interface="yes" + plugin_load="yes" + plugin_memory="yes" + plugin_swap="yes" + plugin_uptime="yes" fi -if test "x$with_procinfo" = "xyes" -then - plugin_processes="yes" +if test "x$with_procinfo" = "xyes"; then + plugin_processes="yes" fi # Solaris -if test "x$with_kstat" = "xyes" -then - plugin_nfs="yes" - plugin_processes="yes" - plugin_uptime="yes" - plugin_zfs_arc="yes" - plugin_zone="yes" -fi - -if test "x$with_devinfo$with_kstat" = "xyesyes" -then - plugin_cpu="yes" - plugin_disk="yes" - plugin_interface="yes" - plugin_memory="yes" - plugin_tape="yes" +if test "x$with_kstat" = "xyes"; then + plugin_nfs="yes" + plugin_processes="yes" + plugin_uptime="yes" + plugin_zfs_arc="yes" + plugin_zone="yes" fi -# libi2c-dev -if test "x$ac_system" = "xLinux" -then -AC_CHECK_DECL(i2c_smbus_read_i2c_block_data, - [with_libi2c="yes"], - [with_libi2c="no (symbol i2c_smbus_read_i2c_block_data not found - have you installed libi2c-dev ?)"], - [[#include - #include ]]) -else - with_libi2c="no (Linux only)" +if test "x$with_devinfo" = "xyes" && test "x$with_kstat" = "xyes"; then + plugin_cpu="yes" + plugin_disk="yes" + plugin_interface="yes" + plugin_memory="yes" + plugin_tape="yes" fi -if test "x$with_libi2c" = "xyes" -then - plugin_barometer="yes" +if test "x$with_libi2c" = "xyes"; then + plugin_barometer="yes" fi # libstatgrab -if test "x$with_libstatgrab" = "xyes" -then - plugin_cpu="yes" - plugin_disk="yes" - plugin_interface="yes" - plugin_load="yes" - plugin_memory="yes" - plugin_swap="yes" - plugin_users="yes" +if test "x$with_libstatgrab" = "xyes"; then + plugin_cpu="yes" + plugin_disk="yes" + plugin_interface="yes" + plugin_load="yes" + plugin_memory="yes" + plugin_swap="yes" + plugin_users="yes" +fi + +if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes"; then + plugin_ascent="yes" + if test "x$have_strptime" = "xyes"; then + plugin_bind="yes" + fi fi -if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes" -then - plugin_ascent="yes" - if test "x$have_strptime" = "xyes" - then - plugin_bind="yes" - fi +if test "x$with_libopenipmipthread" = "xyes"; then + plugin_ipmi="yes" fi -if test "x$with_libopenipmipthread" = "xyes" -then - plugin_ipmi="yes" +if test "x$with_libcurl" = "xyes" && test "x$with_libyajl" = "xyes"; then + plugin_curl_json="yes" fi -if test "x$with_libcurl" = "xyes" && test "x$with_libyajl" = "xyes" -then - plugin_curl_json="yes" +if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes"; then + plugin_curl_xml="yes" fi -if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes" -then - plugin_curl_xml="yes" +if test "x$with_libyajl" = "xyes"; then + plugin_ceph="yes" fi -if test "x$with_libyajl" = "xyes" -then - plugin_ceph="yes" +if test "x$have_processor_info" = "xyes"; then + plugin_cpu="yes" fi -if test "x$have_processor_info" = "xyes" -then - plugin_cpu="yes" +if test "x$have_sysctl" = "xyes"; then + plugin_cpu="yes" + plugin_memory="yes" + plugin_uptime="yes" + if test "x$ac_system" = "xDarwin"; then + plugin_swap="yes" + fi fi -if test "x$have_sysctl" = "xyes" -then - plugin_cpu="yes" - plugin_memory="yes" - plugin_uptime="yes" - if test "x$ac_system" = "xDarwin" - then - plugin_swap="yes" - fi -fi -if test "x$have_sysctlbyname" = "xyes" -then - plugin_contextswitch="yes" - plugin_cpu="yes" - plugin_memory="yes" - plugin_tcpconns="yes" + +if test "x$have_sysctlbyname" = "xyes"; then + plugin_contextswitch="yes" + plugin_cpu="yes" + plugin_memory="yes" + plugin_tcpconns="yes" fi -# Df plugin: Check if we know how to determine mount points first. -#if test "x$have_listmntent" = "xyes"; then -# plugin_df="yes" -#fi -if test "x$have_getvfsstat" = "xyes" || test "x$have_getfsstat" = "xyes" -then - plugin_df="yes" +if test "x$have_getvfsstat" = "xyes" || test "x$have_getfsstat" = "xyes"; then + plugin_df="yes" fi -if test "x$c_cv_have_two_getmntent" = "xyes" || test "x$have_getmntent" = "xgen" || test "x$have_getmntent" = "xsun" -then - plugin_df="yes" + +if test "x$c_cv_have_two_getmntent" = "xyes" || test "x$have_getmntent" = "xgen" || test "x$have_getmntent" = "xsun"; then + plugin_df="yes" fi -#if test "x$have_getmntent" = "xseq" -#then -# plugin_df="yes" -#fi -if test "x$c_cv_have_one_getmntent" = "xyes" -then - plugin_df="yes" + +if test "x$c_cv_have_one_getmntent" = "xyes"; then + plugin_df="yes" fi -if test "x$c_cv_have_getmntent_r" = "xyes" -then - plugin_df="yes" +if test "x$c_cv_have_getmntent_r" = "xyes"; then + plugin_df="yes" fi -# Df plugin: Check if we have either `statfs' or `statvfs' second. -if test "x$plugin_df" = "xyes" -then - plugin_df="no" - if test "x$have_statfs" = "xyes" - then - plugin_df="yes" - fi - if test "x$have_statvfs" = "xyes" - then - plugin_df="yes" - fi -fi - -if test "x$have_linux_sockios_h$have_linux_ethtool_h" = "xyesyes" -then - plugin_ethstat="yes" +if test "x$plugin_df" = "xyes"; then + plugin_df="no" + if test "x$have_statfs" = "xyes"; then + plugin_df="yes" + fi + + if test "x$have_statvfs" = "xyes"; then + plugin_df="yes" + fi fi -if test "x$with_libgrpcpp" = "xyes" && test "x$with_libprotobuf" = "xyes" && test "x$have_protoc3" = "xyes" && test "x$GRPC_CPP_PLUGIN" != "x" -then - plugin_grpc="yes" +if test "x$have_linux_sockios_h" = "xyes" && test "x$have_linux_ethtool_h" = "xyes"; then + plugin_ethstat="yes" fi -if test "x$have_getifaddrs" = "xyes" -then - plugin_interface="yes" +if test "x$with_libgps" = "xyes"; then + plugin_gps="yes" fi -if test "x$with_libgps" = "xyes" -then - plugin_gps="yes" +if test "x$with_libgrpcpp" = "xyes" && test "x$with_libprotobuf" = "xyes" && test "x$have_protoc3" = "xyes" && test "x$GRPC_CPP_PLUGIN" != "x"; then + plugin_grpc="yes" fi -if test "x$have_getloadavg" = "xyes" -then - plugin_load="yes" +if test "x$have_getifaddrs" = "xyes"; then + plugin_interface="yes" fi -if test "x$with_libyajl" = "xyes" -then - plugin_log_logstash="yes" +if test "x$have_getloadavg" = "xyes"; then + plugin_load="yes" fi -if test "x$c_cv_have_libperl$c_cv_have_perl_ithreads" = "xyesyes" -then - plugin_perl="yes" +if test "x$with_libyajl" = "xyes"; then + plugin_log_logstash="yes" fi -if test "x$have_protoc_c" = "xyes" && test "x$with_libprotobuf_c" = "xyes" -then - plugin_pinba="yes" - if test "x$with_libmicrohttpd" = "xyes" - then - plugin_write_prometheus="yes" - fi +if test "x$with_libperl" = "xyes" && test "x$c_cv_have_perl_ithreads" = "xyes"; then + plugin_perl="yes" +fi + +if test "x$have_protoc_c" = "xyes" && test "x$with_libprotobuf_c" = "xyes"; then + plugin_pinba="yes" + if test "x$with_libmicrohttpd" = "xyes"; then + plugin_write_prometheus="yes" + fi fi # Mac OS X memory interface -if test "x$have_host_statistics" = "xyes" -then - plugin_memory="yes" +if test "x$have_host_statistics" = "xyes"; then + plugin_memory="yes" fi -if test "x$have_termios_h" = "xyes" -then - if test "x$ac_system" != "xAIX" - then - plugin_multimeter="yes" - fi - plugin_ted="yes" +if test "x$have_termios_h" = "xyes"; then + if test "x$ac_system" != "xAIX"; then + plugin_multimeter="yes" + fi + plugin_ted="yes" fi -if test "x$have_thread_info" = "xyes" -then - plugin_processes="yes" +if test "x$have_thread_info" = "xyes"; then + plugin_processes="yes" fi -if test "x$with_kvm_getprocs" = "xyes" && test "x$have_struct_kinfo_proc_freebsd" = "xyes" -then - plugin_processes="yes" +if test "x$with_kvm_getprocs" = "xyes" && test "x$have_struct_kinfo_proc_freebsd" = "xyes"; then + plugin_processes="yes" fi -if test "x$with_kvm_getprocs" = "xyes" && test "x$have_struct_kinfo_proc_openbsd" = "xyes" -then - plugin_processes="yes" +if test "x$with_kvm_getprocs" = "xyes" && test "x$have_struct_kinfo_proc_openbsd" = "xyes"; then + plugin_processes="yes" fi -if test "x$with_libpython" != "xno" -then - plugin_python="yes" +if test "x$with_libpython" != "xno"; then + plugin_python="yes" fi -if test "x$with_libatasmart" = "xyes" && test "x$with_libudev" = "xyes" -then - plugin_smart="yes" +if test "x$with_libatasmart" = "xyes" && test "x$with_libudev" = "xyes"; then + plugin_smart="yes" fi -if test "x$with_kvm_getswapinfo" = "xyes" -then - plugin_swap="yes" +if test "x$with_kvm_getswapinfo" = "xyes"; then + plugin_swap="yes" fi -if test "x$have_swapctl" = "xyes" && test "x$c_cv_have_swapctl_two_args" = "xyes" -then - plugin_swap="yes" +if test "x$have_swapctl" = "xyes" && test "x$c_cv_have_swapctl_two_args" = "xyes"; then + plugin_swap="yes" fi -if test "x$have_swapctl" = "xyes" && test "x$c_cv_have_swapctl_three_args" = "xyes" -then - plugin_swap="yes" +if test "x$have_swapctl" = "xyes" && test "x$c_cv_have_swapctl_three_args" = "xyes"; then + plugin_swap="yes" fi -if test "x$with_kvm_openfiles$with_kvm_nlist" = "xyesyes" -then - plugin_tcpconns="yes" +if test "x$with_kvm_openfiles = "xyes" && $with_kvm_nlist" = "xyes"; then + plugin_tcpconns="yes" fi -if test "x$have_getutent" = "xyes" -then - plugin_users="yes" +if test "x$have_getutent" = "xyes"; then + plugin_users="yes" fi -if test "x$have_getutxent" = "xyes" -then - plugin_users="yes" + +if test "x$have_getutxent" = "xyes"; then + plugin_users="yes" fi -if test "x$with_libxml2" = "xyes" && test "x$with_libvirt" = "xyes" -then - plugin_virt="yes" +if test "x$with_libxml2" = "xyes" && test "x$with_libvirt" = "xyes"; then + plugin_virt="yes" fi -if test "x$with_libxenctrl" = "xyes" -then +if test "x$with_libxenctrl" = "xyes"; then plugin_xencpu="yes" fi if test "x$with_libdpdk" = "xyes" then + plugin_dpdkevents="$dpdk_keepalive" plugin_dpdkstat="yes" fi @@ -6445,19 +6431,18 @@ m4_divert_once([HELP_ENABLE], [ collectd plugins:]) AC_ARG_ENABLE([all-plugins], - AS_HELP_STRING([--enable-all-plugins],[enable all plugins (auto by def)]), - [ - if test "x$enableval" = "xyes" - then - enable_all_plugins="yes" - else if test "x$enableval" = "xauto" - then - enable_all_plugins="auto" - else - enable_all_plugins="no" - fi; fi - ], - [enable_all_plugins="auto"]) + [AS_HELP_STRING([--enable-all-plugins], [enable all plugins @<:@default=yes@:>@])], + [ + if test "x$enableval" = "xyes"; then + enable_all_plugins="yes" + else if test "x$enableval" = "xauto"; then + enable_all_plugins="auto" + else + enable_all_plugins="no" + fi; fi + ], + [enable_all_plugins="auto"] +) m4_divert_once([HELP_ENABLE], []) @@ -6487,7 +6472,8 @@ AC_PLUGIN([dbi], [$with_libdbi], [General database st AC_PLUGIN([df], [$plugin_df], [Filesystem usage statistics]) AC_PLUGIN([disk], [$plugin_disk], [Disk usage statistics]) AC_PLUGIN([dns], [$with_libpcap], [DNS traffic analysis]) -AC_PLUGIN([dpdkstat], [$plugin_dpdkstat], [Stats & Status from DPDK]) +AC_PLUGIN([dpdkevents], [$plugin_dpdkevents], [Events from DPDK]) +AC_PLUGIN([dpdkstat], [$plugin_dpdkstat], [Stats from DPDK]) AC_PLUGIN([drbd], [$plugin_drbd], [DRBD statistics]) AC_PLUGIN([email], [yes], [EMail statistics]) AC_PLUGIN([entropy], [$plugin_entropy], [Entropy statistics]) @@ -6522,6 +6508,7 @@ AC_PLUGIN([match_regex], [yes], [The regex match]) AC_PLUGIN([match_timediff], [yes], [The timediff match]) AC_PLUGIN([match_value], [yes], [The value match]) AC_PLUGIN([mbmon], [yes], [Query mbmond]) +AC_PLUGIN([mcelog], [$plugin_mcelog], [Machine Check Exceptions notifications]) AC_PLUGIN([md], [$have_linux_raid_md_u_h], [md (Linux software RAID) devices]) AC_PLUGIN([memcachec], [$with_libmemcached], [memcachec statistics]) AC_PLUGIN([memcached], [yes], [memcached statistics]) @@ -6547,6 +6534,8 @@ AC_PLUGIN([onewire], [$with_libowcapi], [OneWire sensor stat AC_PLUGIN([openldap], [$with_libldap], [OpenLDAP statistics]) AC_PLUGIN([openvpn], [yes], [OpenVPN client statistics]) AC_PLUGIN([oracle], [$with_oracle], [Oracle plugin]) +AC_PLUGIN([ovs_events], [$plugin_ovs_events], [OVS events plugin]) +AC_PLUGIN([ovs_stats], [$plugin_ovs_stats], [OVS statistics plugin]) AC_PLUGIN([perl], [$plugin_perl], [Embed a Perl interpreter]) AC_PLUGIN([pf], [$have_net_pfvar_h], [BSD packet filter (PF) statistics]) # FIXME: Check for libevent, too. @@ -6566,6 +6555,7 @@ AC_PLUGIN([serial], [$plugin_serial], [serial port traffic AC_PLUGIN([sigrok], [$with_libsigrok], [sigrok acquisition sources]) AC_PLUGIN([smart], [$plugin_smart], [SMART statistics]) AC_PLUGIN([snmp], [$with_libnetsnmp], [SNMP querying plugin]) +AC_PLUGIN([snmp_agent], [$with_libnetsnmpagent], [SNMP agent plugin]) AC_PLUGIN([statsd], [yes], [StatsD plugin]) AC_PLUGIN([swap], [$plugin_swap], [Swap usage statistics]) AC_PLUGIN([syslog], [$have_syslog], [Syslog logging plugin]) @@ -6618,45 +6608,40 @@ LOAD_PLUGIN_LOG_LOGSTASH="" AC_MSG_CHECKING([which default log plugin to load]) default_log_plugin="none" -if test "x$enable_syslog" = "xyes" -then - default_log_plugin="syslog" +if test "x$enable_syslog" = "xyes"; then + default_log_plugin="syslog" else - LOAD_PLUGIN_SYSLOG="##" + LOAD_PLUGIN_SYSLOG="##" fi -if test "x$enable_logfile" = "xyes" -then - if test "x$default_log_plugin" = "xnone" - then - default_log_plugin="logfile" - else - LOAD_PLUGIN_LOGFILE="#" - fi +if test "x$enable_logfile" = "xyes"; then + if test "x$default_log_plugin" = "xnone"; then + default_log_plugin="logfile" + else + LOAD_PLUGIN_LOGFILE="#" + fi else - LOAD_PLUGIN_LOGFILE="##" + LOAD_PLUGIN_LOGFILE="##" fi -if test "x$enable_log_logstash" = "xyes" -then +if test "x$enable_log_logstash" = "xyes"; then LOAD_PLUGIN_LOG_LOGSTASH="#" else LOAD_PLUGIN_LOG_LOGSTASH="##" fi - AC_MSG_RESULT([$default_log_plugin]) -AC_SUBST(LOAD_PLUGIN_SYSLOG) -AC_SUBST(LOAD_PLUGIN_LOGFILE) -AC_SUBST(LOAD_PLUGIN_LOG_LOGSTASH) +AC_SUBST([LOAD_PLUGIN_SYSLOG]) +AC_SUBST([LOAD_PLUGIN_LOGFILE]) +AC_SUBST([LOAD_PLUGIN_LOG_LOGSTASH]) -DEFAULT_LOG_LEVEL="info" -if test "x$enable_debug" = "xyes" -then - DEFAULT_LOG_LEVEL="debug" +if test "x$enable_debug" = "xyes"; then + DEFAULT_LOG_LEVEL="debug" +else + DEFAULT_LOG_LEVEL="info" fi -AC_SUBST(DEFAULT_LOG_LEVEL) +AC_SUBST([DEFAULT_LOG_LEVEL]) # Load only one of rrdtool, network, csv in the default config. LOAD_PLUGIN_RRDTOOL="" @@ -6665,94 +6650,74 @@ LOAD_PLUGIN_CSV="" AC_MSG_CHECKING([which default write plugin to load]) default_write_plugin="none" -if test "x$enable_rrdtool" = "xyes" -then - default_write_plugin="rrdtool" +if test "x$enable_rrdtool" = "xyes"; then + default_write_plugin="rrdtool" else - LOAD_PLUGIN_RRDTOOL="##" + LOAD_PLUGIN_RRDTOOL="##" fi -if test "x$enable_network" = "xyes" -then - if test "x$default_write_plugin" = "xnone" - then - default_write_plugin="network" - else - LOAD_PLUGIN_NETWORK="#" - fi +if test "x$enable_network" = "xyes"; then + if test "x$default_write_plugin" = "xnone"; then + default_write_plugin="network" + else + LOAD_PLUGIN_NETWORK="#" + fi else - LOAD_PLUGIN_NETWORK="##" + LOAD_PLUGIN_NETWORK="##" fi -if test "x$enable_csv" = "xyes" -then - if test "x$default_write_plugin" = "xnone" - then - default_write_plugin="csv" - else - LOAD_PLUGIN_CSV="#" - fi +if test "x$enable_csv" = "xyes"; then + if test "x$default_write_plugin" = "xnone"; then + default_write_plugin="csv" + else + LOAD_PLUGIN_CSV="#" + fi else - LOAD_PLUGIN_CSV="##" + LOAD_PLUGIN_CSV="##" fi AC_MSG_RESULT([$default_write_plugin]) -AC_SUBST(LOAD_PLUGIN_RRDTOOL) -AC_SUBST(LOAD_PLUGIN_NETWORK) -AC_SUBST(LOAD_PLUGIN_CSV) - -dnl ip_vs.h -if test "x$ac_system" = "xLinux" \ - && test "x$have_linux_ip_vs_h$have_net_ip_vs_h$have_ip_vs_h" = "xnonono" -then - enable_ipvs="$enable_ipvs (ip_vs.h not found)" -fi - -if test "x$ip_vs_h_needs_kernel_cflags" = "xyes" -then - enable_ipvs="$enable_ipvs (needs $KERNEL_CFLAGS)" -fi +AC_SUBST([LOAD_PLUGIN_RRDTOOL]) +AC_SUBST([LOAD_PLUGIN_NETWORK]) +AC_SUBST([LOAD_PLUGIN_CSV]) dnl Perl bindings PERL_BINDINGS_OPTIONS="PREFIX=${prefix}" AC_ARG_WITH(perl-bindings, [AS_HELP_STRING([--with-perl-bindings@<:@=OPTIONS@:>@], [Options passed to "perl Makefile.PL".])], [ - if test "x$withval" != "xno" && test "x$withval" != "xyes" - then - PERL_BINDINGS_OPTIONS="$withval" - with_perl_bindings="yes" - else - with_perl_bindings="$withval" - fi + if test "x$withval" != "xno" && test "x$withval" != "xyes"; then + PERL_BINDINGS_OPTIONS="$withval" + with_perl_bindings="yes" + else + with_perl_bindings="$withval" + fi ], [ - if test -n "$perl_interpreter" - then - with_perl_bindings="yes" - else - with_perl_bindings="no (no perl interpreter found)" - fi + if test "x$PERL" != "x"; then + with_perl_bindings="yes" + else + with_perl_bindings="no (no perl interpreter found)" + fi ]) -if test "x$with_perl_bindings" = "xyes" -then - AC_MSG_CHECKING([for the ExtUtils::MakeMaker module]) - if $PERL -MExtUtils::MakeMaker -e '' 2>/dev/null; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - with_perl_bindings="no (ExtUtils::MakeMaker not found)" - fi +if test "x$with_perl_bindings" = "xyes"; then + AC_MSG_CHECKING([for the ExtUtils::MakeMaker module]) + if $PERL -MExtUtils::MakeMaker -e '' 2>/dev/null; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + with_perl_bindings="no (ExtUtils::MakeMaker not found)" + fi fi -if test "x$with_perl_bindings" = "xyes" -then - PERL_BINDINGS="perl" +if test "x$with_perl_bindings" = "xyes"; then + PERL_BINDINGS="perl" else - PERL_BINDINGS="" + PERL_BINDINGS="" fi -AC_SUBST(PERL_BINDINGS) -AC_SUBST(PERL_BINDINGS_OPTIONS) + +AC_SUBST([PERL_BINDINGS]) +AC_SUBST([PERL_BINDINGS_OPTIONS]) dnl libcollectdclient LCC_VERSION_MAJOR=`echo $PACKAGE_VERSION | cut -d'.' -f1` @@ -6763,55 +6728,55 @@ LCC_VERSION_EXTRA=`echo $PACKAGE_VERSION | cut -d'.' -f4-` LCC_VERSION_STRING="$LCC_VERSION_MAJOR.$LCC_VERSION_MINOR.$LCC_VERSION_PATCH" -AC_SUBST(LCC_VERSION_MAJOR) -AC_SUBST(LCC_VERSION_MINOR) -AC_SUBST(LCC_VERSION_PATCH) -AC_SUBST(LCC_VERSION_EXTRA) -AC_SUBST(LCC_VERSION_STRING) +AC_SUBST([LCC_VERSION_MAJOR]) +AC_SUBST([LCC_VERSION_MINOR]) +AC_SUBST([LCC_VERSION_PATCH]) +AC_SUBST([LCC_VERSION_EXTRA]) +AC_SUBST([LCC_VERSION_STRING]) -AC_CONFIG_FILES(src/libcollectdclient/collectd/lcc_features.h) +AC_CONFIG_FILES([src/libcollectdclient/collectd/lcc_features.h]) AM_CFLAGS="-Wall" AM_CXXFLAGS="-Wall" -if test "x$enable_werror" != "xno" -then - AM_CFLAGS="$AM_CFLAGS -Werror" - AM_CXXFLAGS="$AM_CXXFLAGS -Werror" +if test "x$enable_werror" != "xno"; then + AM_CFLAGS="$AM_CFLAGS -Werror" + AM_CXXFLAGS="$AM_CXXFLAGS -Werror" fi + AC_SUBST([AM_CFLAGS]) AC_SUBST([AM_CXXFLAGS]) -AC_CONFIG_FILES([Makefile proto/Makefile src/Makefile src/daemon/Makefile src/collectd.conf src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile]) +AC_CONFIG_FILES([ \ + Makefile \ + src/collectd.conf \ + src/libcollectdclient/libcollectdclient.pc \ +]) + AC_OUTPUT -if test "x$with_librrd" = "xyes" \ - && test "x$librrd_threadsafe" != "xyes" -then - with_librrd="yes (warning: librrd is not thread-safe)" +if test "x$with_librrd" = "xyes" && test "x$librrd_threadsafe" != "xyes"; then + with_librrd="yes (warning: librrd is not thread-safe)" fi -if test "x$with_libperl" = "xyes" -then - with_libperl="yes (version `$perl_interpreter -MConfig -e 'print $Config{version};'`)" +if test "x$with_libperl" = "xyes"; then + with_libperl="yes (version `$PERL -MConfig -e 'print $Config{version};'`)" else - enable_perl="no (needs libperl)" + enable_perl="no (needs libperl)" fi -if test "x$enable_perl" = "xno" && test "x$c_cv_have_perl_ithreads" = "xno" -then - enable_perl="no (libperl doesn't support ithreads)" +if test "x$enable_perl" = "xno" && test "x$c_cv_have_perl_ithreads" = "xno"; then + enable_perl="no (libperl doesn't support ithreads)" fi -if test "x$with_perl_bindings" = "xyes" \ - && test "x$PERL_BINDINGS_OPTIONS" != "x" -then - with_perl_bindings="yes ($PERL_BINDINGS_OPTIONS)" +if test "x$with_perl_bindings" = "xyes" && test "x$PERL_BINDINGS_OPTIONS" != "x"; then + with_perl_bindings="yes ($PERL_BINDINGS_OPTIONS)" fi AC_MSG_RESULT() AC_MSG_RESULT([Configuration:]) AC_MSG_RESULT([ Build:]) AC_MSG_RESULT([ Platform . . . . . . $ac_system]) +AC_MSG_RESULT([ Compiler vendor . . . $ax_cv_c_compiler_vendor]) AC_MSG_RESULT([ CC . . . . . . . . . $CC]) AC_MSG_RESULT([ CFLAGS . . . . . . . $AM_CFLAGS $CFLAGS]) AC_MSG_RESULT([ CXXFLAGS . . . . . . $AM_CXXFLAGS $CXXFLAGS]) @@ -6836,7 +6801,6 @@ AC_MSG_RESULT([ libganglia . . . . . $with_libganglia]) AC_MSG_RESULT([ libgcrypt . . . . . . $with_libgcrypt]) AC_MSG_RESULT([ libgps . . . . . . . $with_libgps]) AC_MSG_RESULT([ libgrpc++ . . . . . . $with_libgrpcpp]) -AC_MSG_RESULT([ libhal . . . . . . . $with_libhal]) AC_MSG_RESULT([ libhiredis . . . . . $with_libhiredis]) AC_MSG_RESULT([ libi2c-dev . . . . . $with_libi2c]) AC_MSG_RESULT([ libiokit . . . . . . $with_libiokit]) @@ -6856,8 +6820,8 @@ AC_MSG_RESULT([ libmosquitto . . . . $with_libmosquitto]) AC_MSG_RESULT([ libmysql . . . . . . $with_libmysql]) AC_MSG_RESULT([ libnetapp . . . . . . $with_libnetapp]) AC_MSG_RESULT([ libnetsnmp . . . . . $with_libnetsnmp]) +AC_MSG_RESULT([ libnetsnmpagent . . . $with_libnetsnmpagent]) AC_MSG_RESULT([ libnotify . . . . . . $with_libnotify]) -AC_MSG_RESULT([ liboconfig . . . . . $with_liboconfig]) AC_MSG_RESULT([ libopenipmi . . . . . $with_libopenipmipthread]) AC_MSG_RESULT([ liboping . . . . . . $with_liboping]) AC_MSG_RESULT([ libowcapi . . . . . . $with_libowcapi]) @@ -6924,6 +6888,7 @@ AC_MSG_RESULT([ dbi . . . . . . . . . $enable_dbi]) AC_MSG_RESULT([ df . . . . . . . . . $enable_df]) AC_MSG_RESULT([ disk . . . . . . . . $enable_disk]) AC_MSG_RESULT([ dns . . . . . . . . . $enable_dns]) +AC_MSG_RESULT([ dpdkevents. . . . . . $enable_dpdkevents]) AC_MSG_RESULT([ dpdkstat . . . . . . $enable_dpdkstat]) AC_MSG_RESULT([ drbd . . . . . . . . $enable_drbd]) AC_MSG_RESULT([ email . . . . . . . . $enable_email]) @@ -6938,7 +6903,7 @@ AC_MSG_RESULT([ gps . . . . . . . . . $enable_gps]) AC_MSG_RESULT([ grpc . . . . . . . . $enable_grpc]) AC_MSG_RESULT([ hddtemp . . . . . . . $enable_hddtemp]) AC_MSG_RESULT([ hugepages . . . . . . $enable_hugepages]) -AC_MSG_RESULT([ intel_rdt. . . . . . $enable_intel_rdt]) +AC_MSG_RESULT([ intel_rdt . . . . . . $enable_intel_rdt]) AC_MSG_RESULT([ interface . . . . . . $enable_interface]) AC_MSG_RESULT([ ipc . . . . . . . . . $enable_ipc]) AC_MSG_RESULT([ ipmi . . . . . . . . $enable_ipmi]) @@ -6959,6 +6924,7 @@ AC_MSG_RESULT([ match_regex . . . . . $enable_match_regex]) AC_MSG_RESULT([ match_timediff . . . $enable_match_timediff]) AC_MSG_RESULT([ match_value . . . . . $enable_match_value]) AC_MSG_RESULT([ mbmon . . . . . . . . $enable_mbmon]) +AC_MSG_RESULT([ mcelog . . . . . . . $enable_mcelog]) AC_MSG_RESULT([ md . . . . . . . . . $enable_md]) AC_MSG_RESULT([ memcachec . . . . . . $enable_memcachec]) AC_MSG_RESULT([ memcached . . . . . . $enable_memcached]) @@ -6984,6 +6950,8 @@ AC_MSG_RESULT([ onewire . . . . . . . $enable_onewire]) AC_MSG_RESULT([ openldap . . . . . . $enable_openldap]) AC_MSG_RESULT([ openvpn . . . . . . . $enable_openvpn]) AC_MSG_RESULT([ oracle . . . . . . . $enable_oracle]) +AC_MSG_RESULT([ ovs_events . . . . . $enable_ovs_events]) +AC_MSG_RESULT([ ovs_stats . . . . . . $enable_ovs_stats]) AC_MSG_RESULT([ perl . . . . . . . . $enable_perl]) AC_MSG_RESULT([ pf . . . . . . . . . $enable_pf]) AC_MSG_RESULT([ pinba . . . . . . . . $enable_pinba]) @@ -7002,6 +6970,7 @@ AC_MSG_RESULT([ serial . . . . . . . $enable_serial]) AC_MSG_RESULT([ sigrok . . . . . . . $enable_sigrok]) AC_MSG_RESULT([ smart . . . . . . . . $enable_smart]) AC_MSG_RESULT([ snmp . . . . . . . . $enable_snmp]) +AC_MSG_RESULT([ snmp_agent . . . . . $enable_snmp_agent]) AC_MSG_RESULT([ statsd . . . . . . . $enable_statsd]) AC_MSG_RESULT([ swap . . . . . . . . $enable_swap]) AC_MSG_RESULT([ syslog . . . . . . . $enable_syslog]) @@ -7048,11 +7017,11 @@ AC_MSG_RESULT([ zookeeper . . . . . . $enable_zookeeper]) AC_MSG_RESULT() if test "x$dependency_error" = "xyes"; then - AC_MSG_ERROR("Some plugins are missing dependencies - see the summary above for details") + AC_MSG_ERROR("Some plugins are missing dependencies - see the summary above for details") fi if test "x$dependency_warning" = "xyes"; then - AC_MSG_WARN("Some plugins seem to have missing dependencies but have been enabled forcibly - see the summary above for details") + AC_MSG_WARN("Some plugins seem to have missing dependencies but have been enabled forcibly - see the summary above for details") fi -# vim: set fdm=marker : +# vim: set fdm=marker sw=2 sts=2 ts=2 et : diff --git a/contrib/README b/contrib/README index 5f401f09..6e2ea19e 100644 --- a/contrib/README +++ b/contrib/README @@ -49,6 +49,21 @@ should look something like this: datadir: "/var/lib/collectd/rrd/" libdir: "/usr/lib/collectd/" +docker/ +------- +Sample docker setup using an LD_PRELOAD wrapper to redirect system calls +accessing /proc and /sys to prefixed bind-mounts inside the container. + +Drop your collectd configuration snippets in the +contrib/docker/collectd.conf.d/ directory, and build an image including them: + $ docker build -t my_collectd ./contrib/docker/ + +Then run it with the required bind-mounts: + $ docker run -it --rm \ + -v /proc:/rootfs/proc:ro -v /sys:/rootfs/sys:ro \ + --name collectd my_collectd + $ docker exec -it collectd collectdctl listval + exec-munin.px ------------- Script to be used with the exec-plugin (see collectd-exec(5) for details) diff --git a/contrib/docker/50docker-apt-conf b/contrib/docker/50docker-apt-conf new file mode 100644 index 00000000..3f898b3b --- /dev/null +++ b/contrib/docker/50docker-apt-conf @@ -0,0 +1,4 @@ +APT::Install-Recommends "0"; +APT::Install-Suggests "0"; +APT::Get::Assume-Yes "1"; +APT::Get::AutomaticRemove "1"; diff --git a/contrib/docker/Dockerfile b/contrib/docker/Dockerfile new file mode 100644 index 00000000..a691f2e6 --- /dev/null +++ b/contrib/docker/Dockerfile @@ -0,0 +1,24 @@ +FROM debian:stable + +ENV DEBIAN_FRONTEND noninteractive +COPY 50docker-apt-conf /etc/apt/apt.conf.d/ + +COPY rootfs_prefix/ /usr/src/rootfs_prefix/ + +RUN apt-get update \ + && apt-get upgrade \ + && apt-get install \ + collectd-core \ + collectd-utils \ + build-essential \ + && make -C /usr/src/rootfs_prefix/ \ + && apt-get --purge remove build-essential \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY collectd.conf /etc/collectd/collectd.conf +COPY collectd.conf.d /etc/collectd/collectd.conf.d + +ENV LD_PRELOAD /usr/src/rootfs_prefix/rootfs_prefix.so + +CMD [ "/usr/sbin/collectd", "-f"] diff --git a/contrib/docker/collectd.conf b/contrib/docker/collectd.conf new file mode 100644 index 00000000..bbcd0791 --- /dev/null +++ b/contrib/docker/collectd.conf @@ -0,0 +1,16 @@ +LoadPlugin logfile + + LogLevel "info" + File STDOUT + Timestamp true + PrintSeverity true + + +LoadPlugin unixsock + + SocketGroup "nogroup" + + + + Filter "*.conf" + diff --git a/contrib/docker/collectd.conf.d/sample.conf b/contrib/docker/collectd.conf.d/sample.conf new file mode 100644 index 00000000..cbd7ce15 --- /dev/null +++ b/contrib/docker/collectd.conf.d/sample.conf @@ -0,0 +1,4 @@ +LoadPlugin cpu +LoadPlugin memory +LoadPlugin disk +LoadPlugin df diff --git a/contrib/docker/rootfs_prefix/.gitignore b/contrib/docker/rootfs_prefix/.gitignore new file mode 100644 index 00000000..c95ccf81 --- /dev/null +++ b/contrib/docker/rootfs_prefix/.gitignore @@ -0,0 +1 @@ +rootprefix.so diff --git a/contrib/docker/rootfs_prefix/Makefile b/contrib/docker/rootfs_prefix/Makefile new file mode 100644 index 00000000..f26bebd0 --- /dev/null +++ b/contrib/docker/rootfs_prefix/Makefile @@ -0,0 +1,2 @@ +rootfs_prefix.so: rootfs_prefix.c + $(CC) -Wall -Werror -fPIC -shared -o rootfs_prefix.so rootfs_prefix.c -ldl diff --git a/contrib/docker/rootfs_prefix/rootfs_prefix.c b/contrib/docker/rootfs_prefix/rootfs_prefix.c new file mode 100644 index 00000000..2b831518 --- /dev/null +++ b/contrib/docker/rootfs_prefix/rootfs_prefix.c @@ -0,0 +1,58 @@ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include + +#define PREFIX "/rootfs" +#define BUFSIZE 256 + +const char *add_prefix(const char *orig, char *prefixed) { + if ((strncmp(orig, "/proc", strlen("/proc")) != 0) && + (strncmp(orig, "/sys", strlen("/sys")) != 0)) + return orig; + + int status = snprintf(prefixed, BUFSIZE, "%s%s", PREFIX, orig); + if (status < 1) { + error(status, errno, "adding '%s' prefix to file path failed: '%s' -> '%s'", + PREFIX, orig, prefixed); + return orig; + } else if ((unsigned int)status >= BUFSIZE) { + error(status, ENAMETOOLONG, + "'%s' got truncated when adding '%s' prefix: '%s'", orig, PREFIX, + prefixed); + return orig; + } else { + return (const char *)prefixed; + } +} + +FILE *fopen(const char *path, const char *mode) { + char filename[BUFSIZE] = "\0"; + + FILE *(*original_fopen)(const char *, const char *); + original_fopen = dlsym(RTLD_NEXT, "fopen"); + + return (*original_fopen)(add_prefix(path, filename), mode); +} + +DIR *opendir(const char *name) { + char filename[BUFSIZE] = "\0"; + + DIR *(*original_opendir)(const char *); + original_opendir = dlsym(RTLD_NEXT, "opendir"); + + return (*original_opendir)(add_prefix(name, filename)); +} + +int *open(const char *pathname, int flags) { + char filename[BUFSIZE] = "\0"; + + int *(*original_open)(const char *, int); + original_open = dlsym(RTLD_NEXT, "open"); + + return (*original_open)(add_prefix(pathname, filename), flags); +} diff --git a/contrib/redhat/collectd.spec b/contrib/redhat/collectd.spec index 1cf2e31c..b36e2a27 100644 --- a/contrib/redhat/collectd.spec +++ b/contrib/redhat/collectd.spec @@ -88,6 +88,7 @@ %define with_lvm 0%{!?_without_lvm:1} %define with_madwifi 0%{!?_without_madwifi:1} %define with_mbmon 0%{!?_without_mbmon:1} +%define with_mcelog 0%{!?_without_mcelog:1} %define with_md 0%{!?_without_md:1} %define with_memcachec 0%{!?_without_memcachec:1} %define with_memcached 0%{!?_without_memcached:1} @@ -109,6 +110,8 @@ %define with_olsrd 0%{!?_without_olsrd:1} %define with_openldap 0%{!?_without_openldap:1} %define with_openvpn 0%{!?_without_openvpn:1} +%define with_ovs_events 0%{!?_without_ovs_events:1} +%define with_ovs_stats 0%{!?_without_ovs_stats:1} %define with_perl 0%{!?_without_perl:1} %define with_pinba 0%{!?_without_pinba:1} %define with_ping 0%{!?_without_ping:1} @@ -124,6 +127,7 @@ %define with_serial 0%{!?_without_serial:1} %define with_smart 0%{!?_without_smart:1} %define with_snmp 0%{!?_without_snmp:1} +%define with_snmp_agent 0%{!?_without_snmp_agent:1} %define with_statsd 0%{!?_without_statsd:1} %define with_swap 0%{!?_without_swap:1} %define with_syslog 0%{!?_without_syslog:1} @@ -166,10 +170,12 @@ %define with_aquaero 0%{!?_without_aquaero:0} # plugin barometer disabled, requires a libi2c %define with_barometer 0%{!?_without_barometer:0} -# plugin grpc disabled, requires protobuf-compiler >= 3.0 -%define with_grpc 0%{!?_without_grpc:0} +# plugin dpdkevents disabled, requires libdpdk +%define with_dpdkevents 0%{!?_without_dpdkevents:0} # plugin dpdkstat disabled, requires libdpdk %define with_dpdkstat 0%{!?_without_dpdkstat:0} +# plugin grpc disabled, requires protobuf-compiler >= 3.0 +%define with_grpc 0%{!?_without_grpc:0} # plugin lpar disabled, requires AIX %define with_lpar 0%{!?_without_lpar:0} # plugin intel_rdt disabled, requires intel-cmt-cat @@ -227,6 +233,8 @@ %define with_cpusleep 0 %define with_gps 0 %define with_mqtt 0 +%define with_ovs_events 0 +%define with_ovs_stats 0 %define with_redis 0 %define with_rrdcached 0 %define with_write_redis 0 @@ -237,13 +245,13 @@ Summary: Statistics collection and monitoring daemon Name: collectd Version: 5.7.1 -Release: 3%{?dist} +Release: 6%{?dist} URL: https://collectd.org Source: https://collectd.org/files/%{name}-%{version}.tar.bz2 License: GPLv2 Group: System Environment/Daemons BuildRoot: %{_tmppath}/%{name}-%{version}-root -BuildRequires: libgcrypt-devel, kernel-headers, libtool-ltdl-devel, libcap-devel, which +BuildRequires: libgcrypt-devel, kernel-headers, libcap-devel, which Vendor: collectd development team %if 0%{?fedora} || 0%{?rhel} >= 7 @@ -540,6 +548,16 @@ This plugin collects size of “Logical Volumes” (LV) and “Volume Groups” of Linux' “Logical Volume Manager” (LVM). %endif +%if %{with_mcelog} +%package mcelog +Summary: Mcelog plugin for collectd +Group: System Environment/Daemons +Requires: %{name}%{?_isa} = %{version}-%{release} +%description mcelog +This plugin monitors machine check exceptions reported by mcelog and generates +appropriate notifications when machine check exceptions are detected. +%endif + %if %{with_memcachec} %package memcachec Summary: Memcachec plugin for collectd @@ -655,6 +673,29 @@ BuildRequires: openldap-devel This plugin reads monitoring information from OpenLDAP's cn=Monitor subtree. %endif +%if %{with_ovs_events} +%package ovs_events +Summary: Open vSwitch events plugin for collectd +Group: System Environment/Daemons +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: yajl-devel +%description ovs_events +This plugin monitors the link status of Open vSwitch (OVS) connected +interfaces, dispatches the values to collectd and sends notifications +whenever a link state change occurs in the OVS database. +%endif + +%if %{with_ovs_stats} +%package ovs_stats +Summary: Open vSwitch statistics plugin for collectd +Group: System Environment/Daemons +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: yajl-devel +%description ovs_stats +This plugin collects statictics of OVS connected bridges and +interfaces. +%endif + %if %{with_perl} %package perl Summary: Perl plugin for collectd @@ -793,6 +834,16 @@ BuildRequires: net-snmp-devel This plugin for collectd allows querying of network equipment using SNMP. %endif +%if %{with_snmp_agent} +%package snmp_agent +Summary: SNMP AgentX plugin for collectd +Group: System Environment/Daemons +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: net-snmp-devel +%description snmp_agent +This plugin for collectd to support AgentX integration. +%endif + %if %{with_varnish} %package varnish Summary: Varnish plugin for collectd @@ -1101,6 +1152,12 @@ Collectd utilities %define _with_drbd --disable-drbd %endif +%if %{with_dpdkevents} +%define _with_dpdkevents --enable-dpdkevents +%else +%define _with_dpdkevents --disable-dpdkevents +%endif + %if %{with_dpdkstat} %define _with_dpdkstat --enable-dpdkstat %else @@ -1281,6 +1338,12 @@ Collectd utilities %define _with_mbmon --disable-mbmon %endif +%if %{with_mcelog} +%define _with_mcelog --enable-mcelog +%else +%define _with_mbmon --disable-mcelog +%endif + %if %{with_md} %define _with_md --enable-md %else @@ -1431,6 +1494,18 @@ Collectd utilities %define _with_oracle --disable-oracle %endif +%if %{with_ovs_events} +%define _with_ovs_events --enable-ovs_events +%else +%define _with_ovs_events --disable-ovs_events +%endif + +%if %{with_ovs_stats} +%define _with_ovs_stats --enable-ovs_stats +%else +%define _with_ovs_stats --disable-ovs_stats +%endif + %if %{with_perl} %define _with_perl --enable-perl --with-perl-bindings="INSTALLDIRS=vendor" %else @@ -1544,6 +1619,12 @@ Collectd utilities %define _with_snmp --disable-snmp %endif +%if %{with_snmp_agent} +%define _with_snmp_agent --enable-snmp_agent +%else +%define _with_snmp_agent --disable-snmp_agent +%endif + %if %{with_statsd} %define _with_statsd --enable-statsd %else @@ -1769,7 +1850,6 @@ Collectd utilities %configure CFLAGS="%{optflags} -DLT_LAZY_OR_NOW=\"RTLD_LAZY|RTLD_GLOBAL\"" \ %{?_python_config} \ --disable-static \ - --without-included-ltdl \ --enable-all-plugins=yes \ --enable-match_empty_counter \ --enable-match_hashed \ @@ -1808,6 +1888,7 @@ Collectd utilities %{?_with_disk} \ %{?_with_dns} \ %{?_with_drbd} \ + %{?_with_dpdkevents} \ %{?_with_dpdkstat} \ %{?_with_email} \ %{?_with_entropy} \ @@ -1837,6 +1918,7 @@ Collectd utilities %{?_with_lvm} \ %{?_with_madwifi} \ %{?_with_mbmon} \ + %{?_with_mcelog} \ %{?_with_md} \ %{?_with_memcachec} \ %{?_with_memcached} \ @@ -1862,6 +1944,8 @@ Collectd utilities %{?_with_openldap} \ %{?_with_openvpn} \ %{?_with_oracle} \ + %{?_with_ovs_events} \ + %{?_with_ovs_stats} \ %{?_with_perl} \ %{?_with_pf} \ %{?_with_pinba} \ @@ -1880,6 +1964,7 @@ Collectd utilities %{?_with_sigrok} \ %{?_with_smart} \ %{?_with_snmp} \ + %{?_with_snmp_agent} \ %{?_with_statsd} \ %{?_with_swap} \ %{?_with_syslog} \ @@ -2088,9 +2173,6 @@ fi %if %{with_drbd} %{_libdir}/%{name}/drbd.so %endif -%if %{with_dpdkstat} -%{_libdir}/%{name}/dpdkstat.so -%endif %if %{with_ethstat} %{_libdir}/%{name}/ethstat.so %endif @@ -2136,6 +2218,9 @@ fi %if %{with_mbmon} %{_libdir}/%{name}/mbmon.so %endif +%if %{with_mcelog} +%{_libdir}/%{name}/mcelog.so +%endif %if %{with_md} %{_libdir}/%{name}/md.so %endif @@ -2346,6 +2431,16 @@ fi %{_libdir}/%{name}/dbi.so %endif +%if %{with_dpdkevents} +%files dpdkevents +%{_libdir}/%{name}/dpdkevents.so +%endif + +%if %{with_dpdkstat} +%files dpdkstat +%{_libdir}/%{name}/dpdkstat.so +%endif + %if %{with_email} %files email %{_libdir}/%{name}/email.so @@ -2470,6 +2565,16 @@ fi %{_libdir}/%{name}/openldap.so %endif +%if %{with_ovs_events} +%files ovs_events +%{_libdir}/%{name}/ovs_events.so +%endif + +%if %{with_ovs_stats} +%files ovs_stats +%{_libdir}/%{name}/ovs_stats.so +%endif + %if %{with_perl} %files perl %{perl_vendorlib}/Collectd.pm @@ -2537,6 +2642,11 @@ fi %{_libdir}/%{name}/snmp.so %endif +%if %{with_snmp_agent} +%files snmp_agent +%{_libdir}/%{name}/snmp_agent.so +%endif + %if %{with_varnish} %files varnish %{_libdir}/%{name}/varnish.so @@ -2589,9 +2699,18 @@ fi %doc contrib/ %changelog -* Sun Mar 05 2017 Ruben Kerkhof - 5.7.1-2 +* Sun Mar 05 2017 Ruben Kerkhof - 5.7.1-6 +- Move recently added plugins to subpackages + +* Sun Mar 05 2017 Ruben Kerkhof - 5.7.1-5 +- Add new ovs_stats plugin + +* Sun Mar 05 2017 Ruben Kerkhof - 5.7.1-4 - Don't enable XFS support on RHEL6, it is missing for i386 +* Sun Mar 05 2017 Ruben Kerkhof - 5.7.1-3 +- Add dpdkevents plugin, disabled by default + * Wed Feb 22 2017 Ruben Kerkhof - 5.7.1-2 - Enable XFS support in df plugin - Fix bogus date in changelog @@ -2599,6 +2718,12 @@ fi * Sun Jan 01 2017 Marc Fournier - 5.7.1-1 - New upstream version +* Sat Dec 31 2016 Ruben Kerkhof - 5.7.0-4 +- Add new ovs_events plugin + +* Sat Dec 31 2016 Ruben Kerkhof - 5.7.0-3 +- Add new mcelog plugin + * Tue Nov 29 2016 Ruben Kerkhof - 5.7.0-2 - Disable redis plugin on RHEL 6, hiredis has been retired from EPEL6 diff --git a/contrib/systemd.collectd.service b/contrib/systemd.collectd.service index 7bc15d7c..853363d7 100644 --- a/contrib/systemd.collectd.service +++ b/contrib/systemd.collectd.service @@ -18,6 +18,7 @@ ProtectHome=true # ceph CAP_DAC_OVERRIDE # dns CAP_NET_RAW # exec CAP_SETUID CAP_SETGID +# intel_rdt CAP_SYS_RAWIO # iptables CAP_NET_ADMIN # ping CAP_NET_RAW # smart CAP_SYS_RAWIO @@ -31,7 +32,7 @@ CapabilityBoundingSet= NoNewPrivileges=true -# Tell systemd it will receive a notification from collectd over it's control +# Tell systemd it will receive a notification from collectd over its control # socket once the daemon is ready. See systemd.service(5) for more details. Type=notify diff --git a/docs/BUILD.dpdkstat.md b/docs/BUILD.dpdkstat.md index 8991a615..96f1eb95 100644 --- a/docs/BUILD.dpdkstat.md +++ b/docs/BUILD.dpdkstat.md @@ -148,34 +148,6 @@ instruction set manually: * Run `ldconfig` to update the shared library cache. -### Static library - -To build static DPDK library for use with collectd: - - * To configure DPDK to build the combined static library `libdpdk.a` ensure - that `CONFIG_RTE_BUILD_SHARED_LIB` is set to “n” in `config/common_base` in - your DPDK as follows: - - # - # Compile to share library - # - CONFIG_RTE_BUILD_SHARED_LIB=n - - * Prepare the configuration for the appropriate target as specified at: - http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html. - - For example: - - make config T=x86_64-native-linuxapp-gcc - - * Build the target using `-fPIC`: - - make EXTRA_CFLAGS=-fPIC -j - - * Install DPDK to `/usr`: - - sudo make install prefix=/usr - ## Build collectd with DPDK **Note:** DPDK 16.04 is the minimum version and currently supported version of @@ -199,33 +171,32 @@ implications. See also: http://dpdk.org/doc/guides/prog_guide/multi_proc_support.html * Generate the build script as specified below. (i.e. run `build.sh`). - * Configure collectd with the DPDK shared library: - - ./configure --with-libdpdk=/usr + * Configure collectd with the DPDK shared library. If DPDK is installed in + custom installation path you can specify headers include path using + LIBDPDK_CPPFLAGS variable and libraries path with LIBDPDK_LDFLAGS. + Example: -### Build with the static DPDK library + ./configure -To configure collectd with the DPDK static library: + or for custom DPKD installation: - * Run *configure* with the following CFLAGS: + ./configure LIBDPDK_CPPFLAGS="-I/home/joe/include/dpdk" LIBDPDK_LDFLAGS="-L/home/joe/usr/lib" - ./configure --with-libdpdk=/usr CFLAGS=" -lpthread -Wl,--whole-archive -Wl,-ldpdk -Wl,-lm -Wl,-lrt -Wl,-lpcap -Wl,-ldl -Wl,--no-whole-archive" - - * Make sure that dpdk and dpdkstat are enabled in the *configure* output. + * Make sure that libdpdk and dpdkstat are enabled in the *configure* output. Expected output: Libraries: ... libdpdk . . . . . . . . yes - + Modules: ... dpdkstat . . . . . . .yes * Build collectd: - make -j && make -j install. + make -j && make -j install **Note:** As mentioned above, if you are building on Ubuntu 14.04 with GCC <= 4.8.X, you need to use: @@ -237,6 +208,12 @@ To configure collectd with the DPDK static library: * The same PCI device configuration should be passed to the primary process as the secondary process uses the same port indexes as the primary. * A blacklist / whitelist of NICs isn't supported yet. + * Plugin initialization time depends on read interval. It requires 5 read + cycles to set up internal buffers and states. During that time no statistics + are submitted. + * If number of DPDK ports is increased while plugin is running, internal + buffers are resized. That requires 3 read cycles and no port statistics + are submitted in that time. ## License diff --git a/docs/README.virt.md b/docs/README.virt.md new file mode 100644 index 00000000..a80e9eac --- /dev/null +++ b/docs/README.virt.md @@ -0,0 +1,240 @@ +Inside the virt plugin +====================== + +Originally written: 20161111 + +Last updated: 20161124 + +This document will explain the new domain tag support introduced +in the virt plugin, and will provide one important use case for this feature. +In the reminder of this document, we consider + +* libvirt <= 2.0.0 +* QEMU <= 2.6.0 + + +Domain tags and domains partitioning across virt reader instances +----------------------------------------------------------------- + +The virt plugin gained the `Instances` option. It allows to start +more than one reader instance, so the the libvirt domains could be queried +by more than one reader thread. +The default value for `Instances` is `1`. +With default settings, the plugin will behave in a fully transparent, +backward compatible way. +It is recommended to set this value to one multiple of the +daemon `ReadThreads` value. + +Each reader instance will query only a subset of the libvirt domain. +The subset is identified as follows: + +1. Each virt reader instance is named `virt-$NUM`, where `NUM` is + the progressive order of instances. If you configure `Instances 3` + you will have `virt-0`, `virt-1`, `virt-2`. Please note: the `virt-0` + instance is special, and will always be available. +2. Each virt reader instance will iterate over all the libvirt active domains, + and will look for one `tag` attribute (see below) in the domain metadata section. +3. Each virt reader instance will take care *only* of the libvirt domains whose + tag matches with its own +4. The special `virt-0` instance will take care of all the libvirt domains with + no tags, or with tags which are not in the set \[virt-0 ... virt-$NUM\] + +Collectd will just use the domain tags, but never enforces or requires them. +It is up to an external entity, like a software management system, +to attach and manage the tags to the domain. + +Please note that unless you have such tag-aware management sofware, +it most likely make no sense to enable more than one reader instance on your +setup. + + +Libvirt tag metadata format +---------------------------- + +This is the snipped to be added to libvirt domains: + + + $TAG + + +it must be included in the section. + +Check the `src/virt_test.c` file for really minimal example of libvirt domains. + + +Examples +-------- + +### Example one: 10 libvirt domains named "domain-A" ... "domain-J", virt plugin with instances=5, using 5 different tags + + + libvirt domain name - tag - read instance - reason + domain-A virt-0 0 tag match + domain-B virt-1 1 tag match + domain-C virt-2 2 tag match + domain-D virt-3 3 tag match + domain-E virt-4 4 tag match + domain-F virt-0 0 tag match + domain-G virt-1 1 tag match + domain-H virt-2 2 tag match + domain-I virt-3 3 tag match + domain-J virt-4 4 tag match + + + Because the domain where properly tagged, all the read instances have even load. Please note that the the virt plugin + knows nothing, and should know nothing, about *how* the libvirt domain are tagged. This is entirely up to the + management system. + + +Example two: 10 libvirt domains named "domain-A" ... "domain-J", virt plugin with instances=3, using 5 different tags + + + libvirt domain name - tag - read instance - reason + domain-A virt-0 0 tag match + domain-B virt-1 1 tag match + domain-C virt-2 2 tag match + domain-D virt-3 0 adopted by instance #0 + domain-E virt-4 0 adopted by instance #0 + domain-F virt-0 0 rag match + domain-G virt-1 1 tag match + domain-H virt-2 2 tag match + domain-I virt-3 0 adopted by instance #0 + domain-J virt-4 0 adopted by instance #0 + + + In this case we have uneven load, but no domain is ignored. + + +### Example three: 10 libvirt domains named "domain-A" ... "domain-J", virt plugin with instances=5, using 3 different tags + + + libvirt domain name - tag - read instance - reason + domain-A virt-0 0 tag match + domain-B virt-1 1 tag match + domain-C virt-2 2 tag match + domain-D virt-0 0 tag match + domain-E virt-1 1 tag match + domain-F virt-2 2 tag match + domain-G virt-0 0 tag match + domain-H virt-1 1 tag match + domain-I virt-2 2 tag match + domain-J virt-0 0 tag match + + + Once again we have uneven load and two idle read instances, but besides that no domain is left unmonitored + + +### Example four: 10 libvirt domains named "domain-A" ... "domain-J", virt plugin with instances=5, partial tagging + + + libvirt domain name - tag - read instance - reason + domain-A virt-0 0 tag match + domain-B virt-1 1 tag match + domain-C virt-2 2 tag match + domain-D virt-0 0 tag match + domain-E 0 adopted by instance #0 + domain-F 0 adopted by instance #0 + domain-G 0 adopted by instance #0 + domain-H 0 adopted by instance #0 + domain-I 0 adopted by instance #0 + domain-J 0 adopted by instance #0 + + +The lack of tags causes uneven load, but no domain are unmonitored. + + +Possible extensions - custom tag format +--------------------------------------- + +The aformentioned approach relies on fixed tag format, `virt-$N`. The algorithm works fine with any tag, which +is just one string, compared for equality. However, using custom strings for tags creates the need for a mapping +between tags and the read instances. +This mapping needs to be updated as long as domain are created or destroyed, and the virt plugin needs to be +notified of the changes. + +This adds a significant amount of complexity, with little gain with respect to the fixed schema adopted initially. +For this reason, the introdution of dynamic, custom mapping was not implemented. + + +Dealing with datacenters: libvirt, qemu, shared storage +------------------------------------------------------- + +When used in a datacenter, QEMU is most often configured to use shared storage. This is +the default configuration of datacenter management solutions like [oVirt](http://www.ovirt.org). +The actual shared storage could be implemented on top of NFS for small installations, or most likely +ISCSI or Fiber Channel. The key takeaway is that the storage is accessed over the network, +not using e.g. the SATA or PCI bus of any given host, so any network issue could cause +one or more storage operations to delay, or to be lost entirely. + +In that case, the userspace process that requested the operation can end up in the D state, +and become unresponsive, and unkillable. + + +Dealing with unresponsive domains +--------------------------------- + +All the above considered, one robust management or monitoring application must deal with the fact that +the libvirt API can block for a long time, or forever. This is not an issue or a bug of one specific +API, but it is rather a byproduct of how libvirt and QEMU interact. + +Whenever we query more than one VM, we should take care to avoid that one blocked VM prevent other, +well behaving VMs to be queried. We don't want one rogue VM to disrupt well-behaving VMs. +Unfortunately, any way we enumerate VMs, either implicitely, using the libvirt bulk stats API, +or explicitely, listing all libvirt domains and query each one in turn, we may unpredictably encounter +one unresponsive VM. + +There are many possible approaches to deal with this issue. The virt plugin supports +a simple but effective approach partitioning the domains, as follows. + +1. The virt plugin always register one or more `read` callbacks. The `zero` read callback is guaranteed to + be always present, so it performs special duties (more details later) + Each callback will be named 'virt-$N', where `N` ranges from 0 (zero) to M-1, where M is the number of instances configured. + `M` equals to `5` by default, because this is the same default number of threads in the libvirt worker pool. +2. Each of the read callbacks queries libvirt for the list of all the active domains, and retrieves the libvirt domain metadata. + Both of those operations are safe wrt domain blocked in I/O (they affect only the libvirtd daemon). +3. Each of the read callbacks extracts the `tag` from the domain metadata using a well-known format (see below). + Each of the read callbacks discards any domain which has no tag, or whose tag doesn't match with the read callback tag. +3.a. The read callback tag equals to the read callback name, thus `virt-$N`. Remember that `virt-0` is guaranteed to be + always present. +3.b. Since the `virt-0` reader is always present, it will take care of domains with no tag, or with unrecognized tag. + One unrecognized tag is any tag which has not the scheme `virt-$N`. +4. Each read callback only samples the subset of domains with matching tag. The `virt-0` reader will possibly do more, + but worst case the load will be unbalanced, no domain will be left unsampled. + +To make this approach work, some entity must attach the tags to the libvirt domains, in such a way that all +the domains which run on a given host and insist on the same network-based storage share the same tag. +This minimizes the disruption, because when using the shared storage, if one domain becomes unresponsive because +of unavailable storage, the most likely thing to happen is that others domain using the same storage will soon become +unavailable; should the box run other libvirt domains using other network-based storage, they could be monitored +safely. + +In case of [oVirt](http://www.ovirt.org), the aforementioned tagging is performed by the host agent. + +Please note that this approach is ineffective if the host completely lose network access to the storage network. +In this case, however, no recovery is possible and no damage limitation is possible. + +Lastly, please note that if the virt plugin is configured with instances=1, it behaves exactly like before. + + +Addendum: high level overview: libvirt client, libvirt daemon, qemu +-------------------------------------------------------------------- + +Let's review how the client application (collectd + virt plugin), the libvirtd daemon and the +QEMU processes interact with each other. + +The libvirt daemon talks to QEMU using the JSON QMP protcol over one unix domain socket. +The details of the protocol are not important now, but the key part is that the protocol +is a simple request/response, meaning that libvirtd must serialize all the interactions +with the QEMU monitor, and must protects its endpoint with a lock. +No out of order request/responses are possible (e.g. no pipelining or async replies). +This means that if for any reason one QMP request could not be completed, any other caller +trying to access the QEMU monitor will block until the blocked caller returns. + +To retrieve some key informations, most notably about the block device state or the balloon +device state, the libvirtd daemon *must* use the QMP protocol. + +The QEMU core, including the handling of the QMP protocol, is single-threaded. +All the above combined make it possible for a client to block forever waiting for one QMP +request, if QEMU itself is blocked. The most likely cause of block is I/O, and this is especially +true considering how QEMU is used in a datacenter. + diff --git a/m4/.gitignore b/m4/.gitignore new file mode 100644 index 00000000..f935021a --- /dev/null +++ b/m4/.gitignore @@ -0,0 +1 @@ +!.gitignore diff --git a/m4/ax_compare_version.m4 b/m4/ax_compare_version.m4 new file mode 100644 index 00000000..9c8e208a --- /dev/null +++ b/m4/ax_compare_version.m4 @@ -0,0 +1,177 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 12 + +dnl ######################################################################### +AC_DEFUN([AX_COMPARE_VERSION], [ + AC_REQUIRE([AC_PROG_AWK]) + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + AS_VAR_PUSHDEF([A],[ax_compare_version_A]) + A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + AS_VAR_PUSHDEF([B],[ax_compare_version_B]) + B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary + dnl # then the first line is used to determine if the condition is true. + dnl # The sed right after the echo is to remove any indented white space. + m4_case(m4_tolower($2), + [lt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [gt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [le],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ], + [ge],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ],[ + dnl Split the operator from the subversion count if present. + m4_bmatch(m4_substr($2,2), + [0],[ + # A count of zero means use the length of the shorter version. + # Determine the number of characters in A and B. + ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` + ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` + + # Set A to no more than B's length and B to no more than A's length. + A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` + B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` + ], + [[0-9]+],[ + # A count greater than zero means use only that many subversions + A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + ], + [.+],[ + AC_WARNING( + [illegal OP numeric parameter: $2]) + ],[]) + + # Pad zeros at end of numbers to make same length. + ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" + B="$B`echo $A | sed 's/./0/g'`" + A="$ax_compare_version_tmp_A" + + # Check for equality or inequality as necessary. + m4_case(m4_tolower(m4_substr($2,0,2)), + [eq],[ + test "x$A" = "x$B" && ax_compare_version=true + ], + [ne],[ + test "x$A" != "x$B" && ax_compare_version=true + ],[ + AC_WARNING([illegal OP parameter: $2]) + ]) + ]) + + AS_VAR_POPDEF([A])dnl + AS_VAR_POPDEF([B])dnl + + dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. + if test "$ax_compare_version" = "true" ; then + m4_ifvaln([$4],[$4],[:])dnl + m4_ifvaln([$5],[else $5])dnl + fi +]) dnl AX_COMPARE_VERSION diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4 new file mode 100644 index 00000000..ee24c12f --- /dev/null +++ b/m4/ax_compiler_vendor.m4 @@ -0,0 +1,87 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPILER_VENDOR +# +# DESCRIPTION +# +# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, +# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, +# watcom, etc. The vendor is returned in the cache variable +# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2008 Matteo Frigo +# +# 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, either version 3 of the License, or (at your +# option) any later version. +# +# 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, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 15 + +AC_DEFUN([AX_COMPILER_VENDOR], +[AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, + dnl Please add if possible support to ax_compiler_version.m4 + [# note: don't check for gcc first since some other compilers define __GNUC__ + vendors="intel: __ICC,__ECC,__INTEL_COMPILER + ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ + pathscale: __PATHCC__,__PATHSCALE__ + clang: __clang__ + cray: _CRAYC + fujitsu: __FUJITSU + gnu: __GNUC__ + sun: __SUNPRO_C,__SUNPRO_CC + hp: __HP_cc,__HP_aCC + dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER + borland: __BORLANDC__,__CODEGEARC__,__TURBOC__ + comeau: __COMO__ + kai: __KCC + lcc: __LCC__ + sgi: __sgi,sgi + microsoft: _MSC_VER + metrowerks: __MWERKS__ + watcom: __WATCOMC__ + portland: __PGI + tcc: __TINYC__ + unknown: UNKNOWN" + for ventest in $vendors; do + case $ventest in + *:) vendor=$ventest; continue ;; + *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; + esac + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ + #if !($vencpp) + thisisanerror; + #endif + ])], [break]) + done + ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=`echo $vendor | cut -d: -f1` + ]) +]) diff --git a/proto/Makefile.am b/proto/Makefile.am deleted file mode 100644 index 62d3bed5..00000000 --- a/proto/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = collectd.proto types.proto prometheus.proto diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 11bc17d9..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,1521 +0,0 @@ -SUBDIRS = libcollectdclient -if BUILD_WITH_OWN_LIBOCONFIG -SUBDIRS += liboconfig -endif -SUBDIRS += daemon - -PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '\' - -AM_CPPFLAGS = -I$(srcdir)/daemon -AM_CPPFLAGS += -DPREFIX='"${prefix}"' -AM_CPPFLAGS += -DCONFIGFILE='"${sysconfdir}/${PACKAGE_NAME}.conf"' -AM_CPPFLAGS += -DLOCALSTATEDIR='"${localstatedir}"' -AM_CPPFLAGS += -DPKGLOCALSTATEDIR='"${localstatedir}/lib/${PACKAGE_NAME}"' -if BUILD_FEATURE_DAEMON -AM_CPPFLAGS += -DPIDFILE='"${localstatedir}/run/${PACKAGE_NAME}.pid"' -endif -AM_CPPFLAGS += -DPLUGINDIR='"${pkglibdir}"' -AM_CPPFLAGS += -DPKGDATADIR='"${pkgdatadir}"' - -LOG_COMPILER = env VALGRIND="@VALGRIND@" $(abs_top_srcdir)/testwrapper.sh - -V_PROTOC = $(v_protoc_@AM_V@) -v_protoc_ = $(v_protoc_@AM_DEFAULT_V@) -v_protoc_0 = @echo " PROTOC " $@; - -noinst_LTLIBRARIES = -check_PROGRAMS = -TESTS = - -noinst_LTLIBRARIES += libformat_graphite.la -libformat_graphite_la_SOURCES = utils_format_graphite.c utils_format_graphite.h -libformat_graphite_la_CPPFLAGS = $(AM_CPPFLAGS) -libformat_graphite_la_LDFLAGS = $(AM_LDFLAGS) -check_PROGRAMS += test_format_graphite -TESTS += test_format_graphite -test_format_graphite_SOURCES = utils_format_graphite_test.c testing.h -test_format_graphite_LDADD = libformat_graphite.la daemon/libmetadata.la daemon/libplugin_mock.la -lm - -noinst_LTLIBRARIES += libformat_json.la -libformat_json_la_SOURCES = utils_format_json.c utils_format_json.h -libformat_json_la_CPPFLAGS = $(AM_CPPFLAGS) -libformat_json_la_LDFLAGS = $(AM_LDFLAGS) -libformat_json_la_LIBADD = -if BUILD_WITH_LIBYAJL -libformat_json_la_CPPFLAGS += $(BUILD_WITH_LIBYAJL_CPPFLAGS) -libformat_json_la_LDFLAGS += $(BUILD_WITH_LIBYAJL_LDFLAGS) -libformat_json_la_LIBADD += $(BUILD_WITH_LIBYAJL_LIBS) -check_PROGRAMS += test_format_json -TESTS += test_format_json -test_format_json_SOURCES = utils_format_json_test.c testing.h -test_format_json_LDADD = libformat_json.la daemon/libmetadata.la daemon/libplugin_mock.la -lm -endif - -noinst_LTLIBRARIES += liblatency.la -liblatency_la_SOURCES = utils_latency.c utils_latency.h utils_latency_config.c utils_latency_config.h -liblatency_la_LIBADD = daemon/libcommon.la -lm -check_PROGRAMS += test_utils_latency -TESTS += test_utils_latency -test_utils_latency_SOURCES = utils_latency_test.c testing.h -test_utils_latency_LDADD = liblatency.la daemon/libplugin_mock.la -lm - -noinst_LTLIBRARIES += libcmds.la -libcmds_la_SOURCES = utils_cmds.c utils_cmds.h \ - utils_cmd_flush.c utils_cmd_flush.h \ - utils_cmd_getthreshold.c utils_cmd_getthreshold.h \ - utils_cmd_getval.c utils_cmd_getval.h \ - utils_cmd_listval.c utils_cmd_listval.h \ - utils_cmd_putnotif.c utils_cmd_putnotif.h \ - utils_cmd_putval.c utils_cmd_putval.h \ - utils_parse_option.c utils_parse_option.h -libcmds_la_LIBADD = daemon/libcommon.la daemon/libmetadata.la -lm -check_PROGRAMS += test_utils_cmds -TESTS += test_utils_cmds -test_utils_cmds_SOURCES = utils_cmds_test.c testing.h -test_utils_cmds_LDADD = libcmds.la \ - daemon/libplugin_mock.la - -noinst_LTLIBRARIES += liblookup.la -liblookup_la_SOURCES = utils_vl_lookup.c utils_vl_lookup.h -liblookup_la_LIBADD = daemon/libavltree.la -check_PROGRAMS += test_utils_vl_lookup -TESTS += test_utils_vl_lookup -test_utils_vl_lookup_SOURCES = utils_vl_lookup_test.c testing.h -test_utils_vl_lookup_LDADD = liblookup.la daemon/libplugin_mock.la -if BUILD_WITH_LIBKSTAT -test_utils_vl_lookup_LDADD += -lkstat -endif - -noinst_LTLIBRARIES += libmount.la -libmount_la_SOURCES = utils_mount.c utils_mount.h -check_PROGRAMS += test_utils_mount -TESTS += test_utils_mount -test_utils_mount_SOURCES = utils_mount_test.c testing.h -test_utils_mount_LDADD = libmount.la daemon/libplugin_mock.la -if BUILD_WITH_LIBKSTAT -test_utils_mount_LDADD += -lkstat -endif - -sbin_PROGRAMS = collectdmon -bin_PROGRAMS = collectd-nagios collectdctl collectd-tg - -collectdmon_SOURCES = collectdmon.c - -collectd_nagios_SOURCES = collectd-nagios.c -collectd_nagios_CPPFLAGS = $(AM_CPPFLAGS) \ - -I$(top_srcdir)/src/libcollectdclient/collectd \ - -I$(top_builddir)/src/libcollectdclient/collectd -collectd_nagios_LDADD = libcollectdclient/libcollectdclient.la -if BUILD_WITH_LIBSOCKET -collectd_nagios_LDADD += -lsocket -endif -if BUILD_AIX -collectd_nagios_LDADD += -lm -endif - - -collectdctl_SOURCES = collectdctl.c -collectdctl_CPPFLAGS = $(AM_CPPFLAGS) \ - -I$(top_srcdir)/src/libcollectdclient/collectd \ - -I$(top_builddir)/src/libcollectdclient/collectd -collectdctl_LDADD = libcollectdclient/libcollectdclient.la -if BUILD_WITH_LIBSOCKET -collectdctl_LDADD += -lsocket -endif -if BUILD_AIX -collectdctl_LDADD += -lm -endif - - -collectd_tg_SOURCES = collectd-tg.c -collectd_tg_CPPFLAGS = $(AM_CPPFLAGS) \ - -I$(top_srcdir)/src/libcollectdclient/collectd \ - -I$(top_builddir)/src/libcollectdclient/collectd -collectd_tg_LDADD = \ - $(PTHREAD_LIBS) \ - daemon/libheap.la \ - libcollectdclient/libcollectdclient.la -if BUILD_WITH_LIBSOCKET -collectd_tg_LDADD += -lsocket -endif -if BUILD_WITH_LIBRT -collectd_tg_LDADD += -lrt -endif -if BUILD_AIX -collectd_tg_LDADD += -lm -endif - - -pkglib_LTLIBRARIES = - -BUILT_SOURCES = -CLEANFILES = - -if HAVE_PROTOC3 -if HAVE_GRPC_CPP -BUILT_SOURCES += collectd.grpc.pb.cc collectd.pb.cc types.pb.cc -CLEANFILES += collectd.grpc.pb.cc collectd.pb.cc types.pb.cc \ - collectd.grpc.pb.h collectd.pb.h types.pb.h - -collectd.grpc.pb.cc: $(top_srcdir)/proto/collectd.proto $(top_srcdir)/proto/types.proto - $(V_PROTOC)@PROTOC@ -I$(top_srcdir)/proto \ - --grpc_out=$(builddir) --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN) $< - -collectd.pb.cc: $(top_srcdir)/proto/collectd.proto $(top_srcdir)/proto/types.proto - $(V_PROTOC)@PROTOC@ -I$(top_srcdir)/proto --cpp_out=$(builddir) $< - -types.pb.cc: $(top_srcdir)/proto/types.proto - $(V_PROTOC)@PROTOC@ -I$(top_srcdir)/proto --cpp_out=$(builddir) $< -endif -endif - -if BUILD_PLUGIN_AGGREGATION -pkglib_LTLIBRARIES += aggregation.la -aggregation_la_SOURCES = aggregation.c \ - utils_vl_lookup.c utils_vl_lookup.h -aggregation_la_LDFLAGS = $(PLUGIN_LDFLAGS) -aggregation_la_LIBADD = -lm -endif - -if BUILD_PLUGIN_AMQP -pkglib_LTLIBRARIES += amqp.la -amqp_la_SOURCES = amqp.c -amqp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRABBITMQ_LDFLAGS) -amqp_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBRABBITMQ_CPPFLAGS) -amqp_la_LIBADD = $(BUILD_WITH_LIBRABBITMQ_LIBS) \ - libcmds.la libformat_graphite.la libformat_json.la -endif - -if BUILD_PLUGIN_APACHE -pkglib_LTLIBRARIES += apache.la -apache_la_SOURCES = apache.c -apache_la_LDFLAGS = $(PLUGIN_LDFLAGS) -apache_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) -apache_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) -endif - - -if BUILD_PLUGIN_APCUPS -pkglib_LTLIBRARIES += apcups.la -apcups_la_SOURCES = apcups.c -apcups_la_LDFLAGS = $(PLUGIN_LDFLAGS) -apcups_la_LIBADD = -if BUILD_WITH_LIBSOCKET -apcups_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_APPLE_SENSORS -pkglib_LTLIBRARIES += apple_sensors.la -apple_sensors_la_SOURCES = apple_sensors.c -apple_sensors_la_LDFLAGS = $(PLUGIN_LDFLAGS) -framework IOKit -endif - -if BUILD_PLUGIN_AQUAERO -pkglib_LTLIBRARIES += aquaero.la -aquaero_la_SOURCES = aquaero.c -aquaero_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBAQUAERO5_CFLAGS) -aquaero_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBAQUAERO5_LDFLAGS) -aquaero_la_LIBADD = -laquaero5 -endif - -if BUILD_PLUGIN_ASCENT -pkglib_LTLIBRARIES += ascent.la -ascent_la_SOURCES = ascent.c -ascent_la_LDFLAGS = $(PLUGIN_LDFLAGS) -ascent_la_CFLAGS = $(AM_CFLAGS) \ - $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) -ascent_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) -endif - -if BUILD_PLUGIN_BAROMETER -pkglib_LTLIBRARIES += barometer.la -barometer_la_SOURCES = barometer.c -barometer_la_LDFLAGS = $(PLUGIN_LDFLAGS) -barometer_la_LIBADD = -lm -endif - -if BUILD_PLUGIN_BATTERY -pkglib_LTLIBRARIES += battery.la -battery_la_SOURCES = battery.c battery_statefs.c -battery_la_LDFLAGS = $(PLUGIN_LDFLAGS) -if BUILD_WITH_LIBIOKIT -battery_la_LDFLAGS += -framework IOKit -endif -endif - -if BUILD_PLUGIN_BIND -pkglib_LTLIBRARIES += bind.la -bind_la_SOURCES = bind.c -bind_la_LDFLAGS = $(PLUGIN_LDFLAGS) -bind_la_CFLAGS = $(AM_CFLAGS) \ - $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) -bind_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) -endif - -if BUILD_PLUGIN_CEPH -pkglib_LTLIBRARIES += ceph.la -ceph_la_SOURCES = ceph.c -ceph_la_CFLAGS = $(AM_CFLAGS) -ceph_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) -ceph_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) -ceph_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) -endif - -if BUILD_PLUGIN_CGROUPS -pkglib_LTLIBRARIES += cgroups.la -cgroups_la_SOURCES = cgroups.c -cgroups_la_LDFLAGS = $(PLUGIN_LDFLAGS) -cgroups_la_LIBADD = libmount.la -endif - -if BUILD_PLUGIN_CHRONY -pkglib_LTLIBRARIES += chrony.la -chrony_la_SOURCES = chrony.c -chrony_la_LDFLAGS = $(PLUGIN_LDFLAGS) -chrony_la_LIBADD = -lm -endif - -if BUILD_PLUGIN_CONNTRACK -pkglib_LTLIBRARIES += conntrack.la -conntrack_la_SOURCES = conntrack.c -conntrack_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_CONTEXTSWITCH -pkglib_LTLIBRARIES += contextswitch.la -contextswitch_la_SOURCES = contextswitch.c -contextswitch_la_LDFLAGS = $(PLUGIN_LDFLAGS) -contextswitch_la_LIBADD = -if BUILD_WITH_PERFSTAT -contextswitch_la_LIBADD += -lperfstat -endif -endif - -if BUILD_PLUGIN_CPU -pkglib_LTLIBRARIES += cpu.la -cpu_la_SOURCES = cpu.c -cpu_la_CFLAGS = $(AM_CFLAGS) -cpu_la_LDFLAGS = $(PLUGIN_LDFLAGS) -cpu_la_LIBADD = -if BUILD_WITH_LIBKSTAT -cpu_la_LIBADD += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -cpu_la_LIBADD += -ldevinfo -endif -if BUILD_WITH_LIBSTATGRAB -cpu_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -cpu_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif -if BUILD_WITH_PERFSTAT -cpu_la_LIBADD += -lperfstat -endif -endif - -if BUILD_PLUGIN_CPUFREQ -pkglib_LTLIBRARIES += cpufreq.la -cpufreq_la_SOURCES = cpufreq.c -cpufreq_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_CPUSLEEP -pkglib_LTLIBRARIES += cpusleep.la -cpusleep_la_SOURCES = cpusleep.c -cpusleep_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_CSV -pkglib_LTLIBRARIES += csv.la -csv_la_SOURCES = csv.c -csv_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_CURL -pkglib_LTLIBRARIES += curl.la -curl_la_SOURCES = curl.c \ - utils_curl_stats.c utils_curl_stats.h \ - utils_match.c utils_match.h -curl_la_LDFLAGS = $(PLUGIN_LDFLAGS) -curl_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) -curl_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) liblatency.la -endif - -if BUILD_PLUGIN_CURL_JSON -pkglib_LTLIBRARIES += curl_json.la -curl_json_la_SOURCES = curl_json.c \ - utils_curl_stats.c utils_curl_stats.h -curl_json_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) -curl_json_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) -curl_json_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) -curl_json_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBYAJL_LIBS) -endif - -if BUILD_PLUGIN_CURL_XML -pkglib_LTLIBRARIES += curl_xml.la -curl_xml_la_SOURCES = curl_xml.c \ - utils_curl_stats.c utils_curl_stats.h -curl_xml_la_LDFLAGS = $(PLUGIN_LDFLAGS) -curl_xml_la_CFLAGS = $(AM_CFLAGS) \ - $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) -curl_xml_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) -endif - -if BUILD_PLUGIN_DBI -pkglib_LTLIBRARIES += dbi.la -dbi_la_SOURCES = dbi.c \ - utils_db_query.c utils_db_query.h -dbi_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBDBI_CPPFLAGS) -dbi_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBDBI_LDFLAGS) -dbi_la_LIBADD = $(BUILD_WITH_LIBDBI_LIBS) -endif - -if BUILD_PLUGIN_DF -pkglib_LTLIBRARIES += df.la -df_la_SOURCES = df.c -df_la_LDFLAGS = $(PLUGIN_LDFLAGS) -df_la_LIBADD = libmount.la -endif - -if BUILD_PLUGIN_DISK -pkglib_LTLIBRARIES += disk.la -disk_la_SOURCES = disk.c -disk_la_CFLAGS = $(AM_CFLAGS) -disk_la_LDFLAGS = $(PLUGIN_LDFLAGS) -disk_la_LIBADD = -if BUILD_WITH_LIBKSTAT -disk_la_LIBADD += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -disk_la_LIBADD += -ldevinfo -endif -if BUILD_WITH_LIBIOKIT -disk_la_LDFLAGS += -framework IOKit -endif -if BUILD_WITH_LIBSTATGRAB -disk_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -disk_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif -if BUILD_WITH_LIBUDEV -disk_la_CFLAGS += $(BUILD_WITH_LIBUDEV_CFLAGS) -disk_la_LDFLAGS += $(BUILD_WITH_LIBUDEV_LDFLAGS) -disk_la_LIBADD += $(BUILD_WITH_LIBUDEV_LIBS) -endif -if BUILD_FREEBSD -disk_la_LIBADD += -ldevstat -lgeom -endif -if BUILD_WITH_PERFSTAT -disk_la_LIBADD += -lperfstat -endif -endif - -if BUILD_PLUGIN_DNS -pkglib_LTLIBRARIES += dns.la -dns_la_SOURCES = dns.c utils_dns.c utils_dns.h -dns_la_LDFLAGS = $(PLUGIN_LDFLAGS) -dns_la_LIBADD = -lpcap -endif - -if BUILD_PLUGIN_DPDKSTAT -pkglib_LTLIBRARIES += dpdkstat.la -dpdkstat_la_SOURCES = dpdkstat.c -dpdkstat_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBDPDK_CPPFLAGS) -dpdkstat_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBDPDK_LDFLAGS) -dpdkstat_la_LIBADD = -ldpdk -endif - -if BUILD_PLUGIN_DRBD -pkglib_LTLIBRARIES += drbd.la -drbd_la_SOURCES = drbd.c -drbd_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_EMAIL -pkglib_LTLIBRARIES += email.la -email_la_SOURCES = email.c -email_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_ENTROPY -pkglib_LTLIBRARIES += entropy.la -entropy_la_SOURCES = entropy.c -entropy_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_EXEC -pkglib_LTLIBRARIES += exec.la -exec_la_SOURCES = exec.c -exec_la_LDFLAGS = $(PLUGIN_LDFLAGS) -exec_la_LIBADD = libcmds.la -endif - -if BUILD_PLUGIN_ETHSTAT -pkglib_LTLIBRARIES += ethstat.la -ethstat_la_SOURCES = ethstat.c -ethstat_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_FHCOUNT -pkglib_LTLIBRARIES += fhcount.la -fhcount_la_SOURCES = fhcount.c -fhcount_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_FILECOUNT -pkglib_LTLIBRARIES += filecount.la -filecount_la_SOURCES = filecount.c -filecount_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_GMOND -pkglib_LTLIBRARIES += gmond.la -gmond_la_SOURCES = gmond.c -gmond_la_CPPFLAGS = $(AM_CPPFLAGS) $(GANGLIA_CPPFLAGS) -gmond_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(GANGLIA_LDFLAGS) -gmond_la_LIBADD = $(GANGLIA_LIBS) -endif - -if BUILD_PLUGIN_GPS -pkglib_LTLIBRARIES += gps.la -gps_la_SOURCES = gps.c -gps_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBGPS_CFLAGS) -gps_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBGPS_LDFLAGS) -gps_la_LIBADD = -lpthread $(BUILD_WITH_LIBGPS_LIBS) -endif - -if BUILD_PLUGIN_GRPC -pkglib_LTLIBRARIES += grpc.la -grpc_la_SOURCES = grpc.cc -nodist_grpc_la_SOURCES = collectd.grpc.pb.cc collectd.pb.cc types.pb.cc -grpc_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBGRPCPP_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_CPPFLAGS) -grpc_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBGRPCPP_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_LDFLAGS) -grpc_la_LIBADD = $(BUILD_WITH_LIBGRPCPP_LIBS) $(BUILD_WITH_LIBPROTOBUF_LIBS) -endif - -if BUILD_PLUGIN_HDDTEMP -pkglib_LTLIBRARIES += hddtemp.la -hddtemp_la_SOURCES = hddtemp.c -hddtemp_la_LDFLAGS = $(PLUGIN_LDFLAGS) -hddtemp_la_LIBADD = -if BUILD_WITH_LIBSOCKET -hddtemp_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_HUGEPAGES -pkglib_LTLIBRARIES += hugepages.la -hugepages_la_SOURCES = hugepages.c -hugepages_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_INTERFACE -pkglib_LTLIBRARIES += interface.la -interface_la_SOURCES = interface.c -interface_la_CFLAGS = $(AM_CFLAGS) -interface_la_LDFLAGS = $(PLUGIN_LDFLAGS) -interface_la_LIBADD = -if BUILD_WITH_LIBSTATGRAB -interface_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -interface_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -else -if BUILD_WITH_LIBKSTAT -interface_la_LIBADD += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -interface_la_LIBADD += -ldevinfo -endif # BUILD_WITH_LIBDEVINFO -endif # !BUILD_WITH_LIBSTATGRAB -if BUILD_WITH_PERFSTAT -interface_la_LIBADD += -lperfstat -endif -endif # BUILD_PLUGIN_INTERFACE - -if BUILD_PLUGIN_IPC -pkglib_LTLIBRARIES += ipc.la -ipc_la_SOURCES = ipc.c -ipc_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_IPTABLES -pkglib_LTLIBRARIES += iptables.la -iptables_la_SOURCES = iptables.c -iptables_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBIPTC_CPPFLAGS) -iptables_la_LDFLAGS = $(PLUGIN_LDFLAGS) -iptables_la_LIBADD = $(BUILD_WITH_LIBIPTC_LDFLAGS) -endif - -if BUILD_PLUGIN_IPMI -pkglib_LTLIBRARIES += ipmi.la -ipmi_la_SOURCES = ipmi.c -ipmi_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_OPENIPMI_CFLAGS) -ipmi_la_LDFLAGS = $(PLUGIN_LDFLAGS) -ipmi_la_LIBADD = $(BUILD_WITH_OPENIPMI_LIBS) -endif - -if BUILD_PLUGIN_IPVS -pkglib_LTLIBRARIES += ipvs.la -ipvs_la_SOURCES = ipvs.c -ipvs_la_CFLAGS = $(AM_CFLAGS) -if IP_VS_H_NEEDS_KERNEL_CFLAGS -ipvs_la_CFLAGS += $(KERNEL_CFLAGS) -endif -ipvs_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_IRQ -pkglib_LTLIBRARIES += irq.la -irq_la_SOURCES = irq.c -irq_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_JAVA -pkglib_LTLIBRARIES += java.la -java_la_SOURCES = java.c -java_la_CPPFLAGS = $(AM_CPPFLAGS) $(JAVA_CPPFLAGS) -java_la_CFLAGS = $(AM_CFLAGS) $(JAVA_CFLAGS) -java_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(JAVA_LDFLAGS) -java_la_LIBADD = $(JAVA_LIBS) -endif - -if BUILD_PLUGIN_LOAD -pkglib_LTLIBRARIES += load.la -load_la_SOURCES = load.c -load_la_CFLAGS = $(AM_CFLAGS) -load_la_LDFLAGS = $(PLUGIN_LDFLAGS) -load_la_LIBADD = -if BUILD_WITH_LIBSTATGRAB -load_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -load_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif # BUILD_WITH_LIBSTATGRAB -if BUILD_WITH_PERFSTAT -load_la_LIBADD += -lperfstat -endif -endif # BUILD_PLUGIN_LOAD - -if BUILD_PLUGIN_LOGFILE -pkglib_LTLIBRARIES += logfile.la -logfile_la_SOURCES = logfile.c -logfile_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_LOG_LOGSTASH -pkglib_LTLIBRARIES += log_logstash.la -log_logstash_la_SOURCES = log_logstash.c -log_logstash_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) -log_logstash_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) -log_logstash_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS) -endif - -if BUILD_PLUGIN_LPAR -pkglib_LTLIBRARIES += lpar.la -lpar_la_SOURCES = lpar.c -lpar_la_LDFLAGS = $(PLUGIN_LDFLAGS) -lpar_la_LIBADD = -lperfstat -endif - -if BUILD_PLUGIN_LUA -pkglib_LTLIBRARIES += lua.la -lua_la_SOURCES = lua.c \ - utils_lua.c utils_lua.h -lua_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBLUA_CFLAGS) -lua_la_LDFLAGS = $(PLUGIN_LDFLAGS) -lua_la_LIBADD = $(BUILD_WITH_LIBLUA_LIBS) -endif - -if BUILD_PLUGIN_LVM -pkglib_LTLIBRARIES += lvm.la -lvm_la_SOURCES = lvm.c -lvm_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBLVM2APP_CPPFLAGS) -lvm_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBLVM2APP_LDFLAGS) -lvm_la_LIBADD = $(BUILD_WITH_LIBLVM2APP_LIBS) -endif - -if BUILD_PLUGIN_MADWIFI -pkglib_LTLIBRARIES += madwifi.la -madwifi_la_SOURCES = madwifi.c madwifi.h -madwifi_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MATCH_EMPTY_COUNTER -pkglib_LTLIBRARIES += match_empty_counter.la -match_empty_counter_la_SOURCES = match_empty_counter.c -match_empty_counter_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MATCH_HASHED -pkglib_LTLIBRARIES += match_hashed.la -match_hashed_la_SOURCES = match_hashed.c -match_hashed_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MATCH_REGEX -pkglib_LTLIBRARIES += match_regex.la -match_regex_la_SOURCES = match_regex.c -match_regex_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MATCH_TIMEDIFF -pkglib_LTLIBRARIES += match_timediff.la -match_timediff_la_SOURCES = match_timediff.c -match_timediff_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MATCH_VALUE -pkglib_LTLIBRARIES += match_value.la -match_value_la_SOURCES = match_value.c -match_value_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MBMON -pkglib_LTLIBRARIES += mbmon.la -mbmon_la_SOURCES = mbmon.c -mbmon_la_LDFLAGS = $(PLUGIN_LDFLAGS) -mbmon_la_LIBADD = -if BUILD_WITH_LIBSOCKET -mbmon_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_MD -pkglib_LTLIBRARIES += md.la -md_la_SOURCES = md.c -md_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MEMCACHEC -pkglib_LTLIBRARIES += memcachec.la -memcachec_la_SOURCES = memcachec.c \ - utils_match.c utils_match.h -memcachec_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMEMCACHED_LDFLAGS) -memcachec_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBMEMCACHED_CPPFLAGS) -memcachec_la_LIBADD = $(BUILD_WITH_LIBMEMCACHED_LIBS) liblatency.la -endif - -if BUILD_PLUGIN_MEMCACHED -pkglib_LTLIBRARIES += memcached.la -memcached_la_SOURCES = memcached.c -memcached_la_LDFLAGS = $(PLUGIN_LDFLAGS) -memcached_la_LIBADD = -if BUILD_WITH_LIBSOCKET -memcached_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_MEMORY -pkglib_LTLIBRARIES += memory.la -memory_la_SOURCES = memory.c -memory_la_CFLAGS = $(AM_CFLAGS) -memory_la_LDFLAGS = $(PLUGIN_LDFLAGS) -memory_la_LIBADD = -if BUILD_WITH_LIBKSTAT -memory_la_LIBADD += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -memory_la_LIBADD += -ldevinfo -endif -if BUILD_WITH_LIBSTATGRAB -memory_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -memory_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif -if BUILD_WITH_PERFSTAT -memory_la_LIBADD += -lperfstat -endif -endif - -if BUILD_PLUGIN_MIC -pkglib_LTLIBRARIES += mic.la -mic_la_SOURCES = mic.c -mic_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_MIC_LIBPATH) -mic_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_MIC_CPPFLAGS) -mic_la_LIBADD = $(BUILD_WITH_MIC_LDADD) -endif - -if BUILD_PLUGIN_MODBUS -pkglib_LTLIBRARIES += modbus.la -modbus_la_SOURCES = modbus.c -modbus_la_LDFLAGS = $(PLUGIN_LDFLAGS) -modbus_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMODBUS_CFLAGS) -modbus_la_LIBADD = $(BUILD_WITH_LIBMODBUS_LIBS) -endif - -if BUILD_PLUGIN_MQTT -pkglib_LTLIBRARIES += mqtt.la -mqtt_la_SOURCES = mqtt.c -mqtt_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBMOSQUITTO_CPPFLAGS) -mqtt_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMOSQUITTO_LDFLAGS) -mqtt_la_LIBADD = $(BUILD_WITH_LIBMOSQUITTO_LIBS) -endif - -if BUILD_PLUGIN_MULTIMETER -pkglib_LTLIBRARIES += multimeter.la -multimeter_la_SOURCES = multimeter.c -multimeter_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_MYSQL -pkglib_LTLIBRARIES += mysql.la -mysql_la_SOURCES = mysql.c -mysql_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMYSQL_CFLAGS) -mysql_la_LDFLAGS = $(PLUGIN_LDFLAGS) -mysql_la_LIBADD = $(BUILD_WITH_LIBMYSQL_LIBS) -endif - -if BUILD_PLUGIN_NETAPP -pkglib_LTLIBRARIES += netapp.la -netapp_la_SOURCES = netapp.c -netapp_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBNETAPP_CPPFLAGS) -netapp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBNETAPP_LDFLAGS) -netapp_la_LIBADD = $(LIBNETAPP_LIBS) -endif - -if BUILD_PLUGIN_NETLINK -pkglib_LTLIBRARIES += netlink.la -netlink_la_SOURCES = netlink.c -netlink_la_LDFLAGS = $(PLUGIN_LDFLAGS) -netlink_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBMNL_CFLAGS) -netlink_la_LIBADD = $(BUILD_WITH_LIBMNL_LIBS) -endif - -if BUILD_PLUGIN_NETWORK -pkglib_LTLIBRARIES += network.la -network_la_SOURCES = network.c network.h \ - utils_fbhash.c utils_fbhash.h -network_la_CPPFLAGS = $(AM_CPPFLAGS) -network_la_LDFLAGS = $(PLUGIN_LDFLAGS) -network_la_LIBADD = -if BUILD_WITH_LIBSOCKET -network_la_LIBADD += -lsocket -endif -if BUILD_WITH_LIBGCRYPT -network_la_CPPFLAGS += $(GCRYPT_CPPFLAGS) -network_la_LDFLAGS += $(GCRYPT_LDFLAGS) -network_la_LIBADD += $(GCRYPT_LIBS) -endif -endif - -if BUILD_PLUGIN_NFS -pkglib_LTLIBRARIES += nfs.la -nfs_la_SOURCES = nfs.c -nfs_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_FSCACHE -pkglib_LTLIBRARIES += fscache.la -fscache_la_SOURCES = fscache.c -fscache_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_NGINX -pkglib_LTLIBRARIES += nginx.la -nginx_la_SOURCES = nginx.c -nginx_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) -nginx_la_LDFLAGS = $(PLUGIN_LDFLAGS) -nginx_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) -endif - -if BUILD_PLUGIN_NOTIFY_DESKTOP -pkglib_LTLIBRARIES += notify_desktop.la -notify_desktop_la_SOURCES = notify_desktop.c -notify_desktop_la_CFLAGS = $(AM_CFLAGS) $(LIBNOTIFY_CFLAGS) -notify_desktop_la_LDFLAGS = $(PLUGIN_LDFLAGS) -notify_desktop_la_LIBADD = $(LIBNOTIFY_LIBS) -endif - -if BUILD_PLUGIN_NOTIFY_EMAIL -pkglib_LTLIBRARIES += notify_email.la -notify_email_la_SOURCES = notify_email.c -notify_email_la_LDFLAGS = $(PLUGIN_LDFLAGS) -notify_email_la_LIBADD = -lesmtp -endif - -if BUILD_PLUGIN_NOTIFY_NAGIOS -pkglib_LTLIBRARIES += notify_nagios.la -notify_nagios_la_SOURCES = notify_nagios.c -notify_nagios_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_NTPD -pkglib_LTLIBRARIES += ntpd.la -ntpd_la_SOURCES = ntpd.c -ntpd_la_LDFLAGS = $(PLUGIN_LDFLAGS) -ntpd_la_LIBADD = -if BUILD_WITH_LIBSOCKET -ntpd_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_NUMA -pkglib_LTLIBRARIES += numa.la -numa_la_SOURCES = numa.c -numa_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_NUT -pkglib_LTLIBRARIES += nut.la -nut_la_SOURCES = nut.c -nut_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBUPSCLIENT_CFLAGS) -nut_la_LDFLAGS = $(PLUGIN_LDFLAGS) -nut_la_LIBADD = $(BUILD_WITH_LIBUPSCLIENT_LIBS) -endif - -if BUILD_PLUGIN_OLSRD -pkglib_LTLIBRARIES += olsrd.la -olsrd_la_SOURCES = olsrd.c -olsrd_la_LDFLAGS = $(PLUGIN_LDFLAGS) -olsrd_la_LIBADD = -if BUILD_WITH_LIBSOCKET -olsrd_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_ONEWIRE -pkglib_LTLIBRARIES += onewire.la -onewire_la_SOURCES = onewire.c -onewire_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBOWCAPI_CPPFLAGS) -onewire_la_LIBADD = $(BUILD_WITH_LIBOWCAPI_LIBS) -onewire_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBOWCAPI_LDFLAGS) -endif - -if BUILD_PLUGIN_OPENLDAP -pkglib_LTLIBRARIES += openldap.la -openldap_la_SOURCES = openldap.c -openldap_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBLDAP_CPPFLAGS) -openldap_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBLDAP_LDFLAGS) -openldap_la_LIBADD = -lldap -endif - -if BUILD_PLUGIN_OPENVPN -pkglib_LTLIBRARIES += openvpn.la -openvpn_la_SOURCES = openvpn.c -openvpn_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_ORACLE -pkglib_LTLIBRARIES += oracle.la -oracle_la_SOURCES = oracle.c \ - utils_db_query.c utils_db_query.h -oracle_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_ORACLE_CPPFLAGS) -oracle_la_LIBADD = $(BUILD_WITH_ORACLE_LIBS) -oracle_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_PERL -pkglib_LTLIBRARIES += perl.la -perl_la_SOURCES = perl.c -# Despite C99 providing the "bool" type thru stdbool.h, Perl defines its own -# version of that type if HAS_BOOL is not defined... *sigh* -perl_la_CPPFLAGS = $(AM_CPPFLAGS) -DHAS_BOOL=1 -# Despite off_t being 64 bit wide on 64 bit platforms, Perl insist on using -# off64_t which is only exposed when _LARGEFILE64_SOURCE is defined... *sigh* -# On older platforms we also need _REENTRANT. _GNU_SOURCE sets both of these. -perl_la_CPPFLAGS += -D_GNU_SOURCE -perl_la_CFLAGS = $(AM_CFLAGS) \ - $(PERL_CFLAGS) \ - -DXS_VERSION=\"$(VERSION)\" -DVERSION=\"$(VERSION)\" -# Work-around for issues #41 and #42 - Perl 5.10 incorrectly introduced -# __attribute__nonnull__(3) for Perl_load_module(). -if HAVE_BROKEN_PERL_LOAD_MODULE -perl_la_CFLAGS += -Wno-nonnull -endif -perl_la_LDFLAGS = $(PLUGIN_LDFLAGS) \ - $(PERL_LDFLAGS) -perl_la_LIBADD = $(PERL_LIBS) -endif - -if BUILD_PLUGIN_PF -pkglib_LTLIBRARIES += pf.la -pf_la_SOURCES = pf.c -pf_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_PINBA -pkglib_LTLIBRARIES += pinba.la -pinba_la_SOURCES = pinba.c -nodist_pinba_la_SOURCES = pinba.pb-c.c pinba.pb-c.h -pinba_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS) -pinba_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_LDFLAGS) -pinba_la_LIBADD = $(BUILD_WITH_LIBPROTOBUF_C_LIBS) -endif - -if BUILD_PLUGIN_PING -pkglib_LTLIBRARIES += ping.la -ping_la_SOURCES = ping.c -ping_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBOPING_CPPFLAGS) -ping_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBOPING_LDFLAGS) -ping_la_LIBADD = -loping -lm -endif - -if BUILD_PLUGIN_POSTGRESQL -pkglib_LTLIBRARIES += postgresql.la -postgresql_la_SOURCES = postgresql.c \ - utils_db_query.c utils_db_query.h -postgresql_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPQ_CPPFLAGS) -postgresql_la_LDFLAGS = $(PLUGIN_LDFLAGS) \ - $(BUILD_WITH_LIBPQ_LDFLAGS) -postgresql_la_LIBADD = -lpq -endif - -if BUILD_PLUGIN_POWERDNS -pkglib_LTLIBRARIES += powerdns.la -powerdns_la_SOURCES = powerdns.c -powerdns_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_PYTHON -pkglib_LTLIBRARIES += python.la -python_la_SOURCES = python.c pyconfig.c pyvalues.c cpython.h -python_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBPYTHON_CPPFLAGS) -if COMPILER_IS_GCC -python_la_CPPFLAGS += -fno-strict-aliasing -Wno-strict-aliasing -endif -python_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBPYTHON_LDFLAGS) -endif - -if BUILD_PLUGIN_PROCESSES -pkglib_LTLIBRARIES += processes.la -processes_la_SOURCES = processes.c -processes_la_LDFLAGS = $(PLUGIN_LDFLAGS) -processes_la_LIBADD = -if BUILD_WITH_LIBKVM_GETPROCS -processes_la_LIBADD += -lkvm -endif -endif - -if BUILD_PLUGIN_PROTOCOLS -pkglib_LTLIBRARIES += protocols.la -protocols_la_SOURCES = protocols.c -protocols_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_INTEL_RDT -pkglib_LTLIBRARIES += intel_rdt.la -intel_rdt_la_SOURCES = intel_rdt.c -intel_rdt_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPQOS_LDFLAGS) -intel_rdt_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBPQOS_CPPFLAGS) -intel_rdt_la_LIBADD = $(BUILD_WITH_LIBPQOS_LIBS) -endif - -if BUILD_PLUGIN_REDIS -pkglib_LTLIBRARIES += redis.la -redis_la_SOURCES = redis.c -redis_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBHIREDIS_LDFLAGS) -redis_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBHIREDIS_CPPFLAGS) -redis_la_LIBADD = -lhiredis -endif - -if BUILD_PLUGIN_ROUTEROS -pkglib_LTLIBRARIES += routeros.la -routeros_la_SOURCES = routeros.c -routeros_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBROUTEROS_CPPFLAGS) -routeros_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBROUTEROS_LDFLAGS) -routeros_la_LIBADD = -lrouteros -endif - -if BUILD_PLUGIN_RRDCACHED -pkglib_LTLIBRARIES += rrdcached.la -rrdcached_la_SOURCES = rrdcached.c utils_rrdcreate.c utils_rrdcreate.h -rrdcached_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRRD_LDFLAGS) -rrdcached_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) -rrdcached_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) -endif - -if BUILD_PLUGIN_RRDTOOL -pkglib_LTLIBRARIES += rrdtool.la -rrdtool_la_SOURCES = rrdtool.c utils_rrdcreate.c utils_rrdcreate.h -rrdtool_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRRD_LDFLAGS) -rrdtool_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBRRD_CFLAGS) -rrdtool_la_LIBADD = $(BUILD_WITH_LIBRRD_LIBS) -endif - -if BUILD_PLUGIN_SENSORS -pkglib_LTLIBRARIES += sensors.la -sensors_la_SOURCES = sensors.c -sensors_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBSENSORS_CFLAGS) -sensors_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBSENSORS_LDFLAGS) -sensors_la_LIBADD = -lsensors -endif - -if BUILD_PLUGIN_SERIAL -pkglib_LTLIBRARIES += serial.la -serial_la_SOURCES = serial.c -serial_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_SIGROK -pkglib_LTLIBRARIES += sigrok.la -sigrok_la_SOURCES = sigrok.c -sigrok_la_CFLAGS = $(AM_CFLAGS) $(LIBSIGROK_CFLAGS) -sigrok_la_LDFLAGS = $(PLUGIN_LDFLAGS) -sigrok_la_LIBADD = $(LIBSIGROK_LIBS) -endif - -if BUILD_PLUGIN_SMART -if BUILD_WITH_LIBUDEV -pkglib_LTLIBRARIES += smart.la -smart_la_SOURCES = smart.c -smart_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBATASMART_CPPFLAGS) $(BUILD_WITH_LIBUDEV_CFLAGS) -smart_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBATASMART_LDFLAGS) $(BUILD_WITH_LIBUDEV_LDFLAGS) -smart_la_LIBADD = $(BUILD_WITH_LIBATASMART_LIBS) $(BUILD_WITH_LIBUDEV_LIBS) -endif -endif - -if BUILD_PLUGIN_SNMP -pkglib_LTLIBRARIES += snmp.la -snmp_la_SOURCES = snmp.c -snmp_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBNETSNMP_CPPFLAGS) -snmp_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBNETSNMP_LDFLAGS) -snmp_la_LIBADD = $(BUILD_WITH_LIBNETSNMP_LIBS) -endif - -if BUILD_PLUGIN_STATSD -pkglib_LTLIBRARIES += statsd.la -statsd_la_SOURCES = statsd.c -statsd_la_LDFLAGS = $(PLUGIN_LDFLAGS) -statsd_la_LIBADD = liblatency.la -endif - -if BUILD_PLUGIN_SWAP -pkglib_LTLIBRARIES += swap.la -swap_la_SOURCES = swap.c -swap_la_CFLAGS = $(AM_CFLAGS) -swap_la_LDFLAGS = $(PLUGIN_LDFLAGS) -swap_la_LIBADD = -if BUILD_WITH_LIBKSTAT -swap_la_LIBADD += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -swap_la_LIBADD += -ldevinfo -endif -if BUILD_WITH_LIBKVM_GETSWAPINFO -swap_la_LIBADD += -lkvm -endif -if BUILD_WITH_LIBSTATGRAB -swap_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -swap_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif -if BUILD_WITH_PERFSTAT -swap_la_LIBADD += -lperfstat -endif - -endif - -if BUILD_PLUGIN_SYSLOG -pkglib_LTLIBRARIES += syslog.la -syslog_la_SOURCES = syslog.c -syslog_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TABLE -pkglib_LTLIBRARIES += table.la -table_la_SOURCES = table.c -table_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TAIL -pkglib_LTLIBRARIES += tail.la -tail_la_SOURCES = tail.c \ - utils_match.c utils_match.h \ - utils_tail.c utils_tail.h \ - utils_tail_match.c utils_tail_match.h -tail_la_LDFLAGS = $(PLUGIN_LDFLAGS) -tail_la_LIBADD = liblatency.la -endif - -if BUILD_PLUGIN_TAIL_CSV -pkglib_LTLIBRARIES += tail_csv.la -tail_csv_la_SOURCES = tail_csv.c \ - utils_tail.c utils_tail.h -tail_csv_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TAPE -pkglib_LTLIBRARIES += tape.la -tape_la_SOURCES = tape.c -tape_la_LDFLAGS = $(PLUGIN_LDFLAGS) -tape_la_LIBADD = -lkstat -ldevinfo -endif - -if BUILD_PLUGIN_TARGET_NOTIFICATION -pkglib_LTLIBRARIES += target_notification.la -target_notification_la_SOURCES = target_notification.c -target_notification_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TARGET_REPLACE -pkglib_LTLIBRARIES += target_replace.la -target_replace_la_SOURCES = target_replace.c -target_replace_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TARGET_SCALE -pkglib_LTLIBRARIES += target_scale.la -target_scale_la_SOURCES = target_scale.c -target_scale_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TARGET_SET -pkglib_LTLIBRARIES += target_set.la -target_set_la_SOURCES = target_set.c -target_set_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TARGET_V5UPGRADE -pkglib_LTLIBRARIES += target_v5upgrade.la -target_v5upgrade_la_SOURCES = target_v5upgrade.c -target_v5upgrade_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TCPCONNS -pkglib_LTLIBRARIES += tcpconns.la -tcpconns_la_SOURCES = tcpconns.c -tcpconns_la_LDFLAGS = $(PLUGIN_LDFLAGS) -tcpconns_la_LIBADD = -if BUILD_WITH_LIBKVM_NLIST -tcpconns_la_LIBADD += -lkvm -endif -endif - -if BUILD_PLUGIN_TEAMSPEAK2 -pkglib_LTLIBRARIES += teamspeak2.la -teamspeak2_la_SOURCES = teamspeak2.c -teamspeak2_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TED -pkglib_LTLIBRARIES += ted.la -ted_la_SOURCES = ted.c -ted_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_THERMAL -pkglib_LTLIBRARIES += thermal.la -thermal_la_SOURCES = thermal.c -thermal_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_THRESHOLD -pkglib_LTLIBRARIES += threshold.la -threshold_la_SOURCES = threshold.c -threshold_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_TOKYOTYRANT -pkglib_LTLIBRARIES += tokyotyrant.la -tokyotyrant_la_SOURCES = tokyotyrant.c -tokyotyrant_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBTOKYOTYRANT_CPPFLAGS) -tokyotyrant_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBTOKYOTYRANT_LDFLAGS) -tokyotyrant_la_LIBADD = $(BUILD_WITH_LIBTOKYOTYRANT_LIBS) -if BUILD_WITH_LIBSOCKET -tokyotyrant_la_LIBADD += -lsocket -endif -endif - -if BUILD_PLUGIN_TURBOSTAT -pkglib_LTLIBRARIES += turbostat.la -turbostat_la_SOURCES = turbostat.c -turbostat_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_UNIXSOCK -pkglib_LTLIBRARIES += unixsock.la -unixsock_la_SOURCES = unixsock.c -unixsock_la_LDFLAGS = $(PLUGIN_LDFLAGS) -unixsock_la_LIBADD = libcmds.la -endif - -if BUILD_PLUGIN_UPTIME -pkglib_LTLIBRARIES += uptime.la -uptime_la_SOURCES = uptime.c -uptime_la_CFLAGS = $(AM_CFLAGS) -uptime_la_LDFLAGS = $(PLUGIN_LDFLAGS) -uptime_la_LIBADD = -if BUILD_WITH_LIBKSTAT -uptime_la_LIBADD += -lkstat -endif -if BUILD_WITH_PERFSTAT -uptime_la_LIBADD += -lperfstat -endif -endif - -if BUILD_PLUGIN_USERS -pkglib_LTLIBRARIES += users.la -users_la_SOURCES = users.c -users_la_CFLAGS = $(AM_CFLAGS) -users_la_LDFLAGS = $(PLUGIN_LDFLAGS) -users_la_LIBADD = -if BUILD_WITH_LIBSTATGRAB -users_la_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -users_la_LIBADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif -endif - -if BUILD_PLUGIN_UUID -pkglib_LTLIBRARIES += uuid.la -uuid_la_SOURCES = uuid.c -uuid_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBHAL_CFLAGS) -uuid_la_LIBADD = $(BUILD_WITH_LIBHAL_LIBS) -uuid_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_VARNISH -pkglib_LTLIBRARIES += varnish.la -varnish_la_SOURCES = varnish.c -varnish_la_LDFLAGS = $(PLUGIN_LDFLAGS) -varnish_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBVARNISH_CFLAGS) -varnish_la_LIBADD = $(BUILD_WITH_LIBVARNISH_LIBS) -endif - -if BUILD_PLUGIN_VIRT -pkglib_LTLIBRARIES += virt.la -virt_la_SOURCES = virt.c -virt_la_CFLAGS = $(AM_CFLAGS) \ - $(BUILD_WITH_LIBVIRT_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) -virt_la_LIBADD = $(BUILD_WITH_LIBVIRT_LIBS) $(BUILD_WITH_LIBXML2_LIBS) -virt_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_VMEM -pkglib_LTLIBRARIES += vmem.la -vmem_la_SOURCES = vmem.c -vmem_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_VSERVER -pkglib_LTLIBRARIES += vserver.la -vserver_la_SOURCES = vserver.c -vserver_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_WIRELESS -pkglib_LTLIBRARIES += wireless.la -wireless_la_SOURCES = wireless.c -wireless_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_WRITE_GRAPHITE -pkglib_LTLIBRARIES += write_graphite.la -write_graphite_la_SOURCES = write_graphite.c -write_graphite_la_LDFLAGS = $(PLUGIN_LDFLAGS) -write_graphite_la_LIBADD = libformat_graphite.la -endif - -if BUILD_PLUGIN_WRITE_HTTP -pkglib_LTLIBRARIES += write_http.la -write_http_la_SOURCES = write_http.c \ - utils_format_kairosdb.c utils_format_kairosdb.h -write_http_la_LDFLAGS = $(PLUGIN_LDFLAGS) -write_http_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) -write_http_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) libformat_json.la -endif - -if BUILD_PLUGIN_WRITE_KAFKA -pkglib_LTLIBRARIES += write_kafka.la -write_kafka_la_SOURCES = write_kafka.c \ - utils_crc32.c utils_crc32.h -write_kafka_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBRDKAFKA_CPPFLAGS) -write_kafka_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBRDKAFKA_LDFLAGS) -write_kafka_la_LIBADD = $(BUILD_WITH_LIBRDKAFKA_LIBS) \ - libcmds.la libformat_graphite.la libformat_json.la -endif - -if BUILD_PLUGIN_WRITE_LOG -pkglib_LTLIBRARIES += write_log.la -write_log_la_SOURCES = write_log.c -write_log_la_LDFLAGS = $(PLUGIN_LDFLAGS) -write_log_la_LIBADD = libformat_graphite.la libformat_json.la -endif - -if BUILD_PLUGIN_WRITE_MONGODB -pkglib_LTLIBRARIES += write_mongodb.la -write_mongodb_la_SOURCES = write_mongodb.c -write_mongodb_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBMONGOC_CPPFLAGS) -write_mongodb_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBMONGOC_LDFLAGS) -write_mongodb_la_LIBADD = -lmongoc -endif - -if BUILD_PLUGIN_WRITE_PROMETHEUS -pkglib_LTLIBRARIES += write_prometheus.la -write_prometheus_la_SOURCES = write_prometheus.c -nodist_write_prometheus_la_SOURCES = prometheus.pb-c.c prometheus.pb-c.h -write_prometheus_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS) $(BUILD_WITH_LIBMICROHTTPD_CPPFLAGS) -write_prometheus_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPROTOBUF_C_LDFLAGS) $(BUILD_WITH_LIBMICROHTTPD_LDFLAGS) -write_prometheus_la_LIBADD = $(BUILD_WITH_LIBPROTOBUF_C_LIBS) $(BUILD_WITH_LIBMICROHTTPD_LIBS) -endif - -if BUILD_PLUGIN_WRITE_REDIS -pkglib_LTLIBRARIES += write_redis.la -write_redis_la_SOURCES = write_redis.c -write_redis_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBHIREDIS_LDFLAGS) -write_redis_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBHIREDIS_CPPFLAGS) -write_redis_la_LIBADD = -lhiredis -endif - -if BUILD_PLUGIN_WRITE_RIEMANN -pkglib_LTLIBRARIES += write_riemann.la -write_riemann_la_SOURCES = write_riemann.c write_riemann_threshold.c write_riemann_threshold.h -write_riemann_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBRIEMANN_CLIENT_LIBS) -write_riemann_la_CFLAGS = $(AM_CFLAGS) $(LIBRIEMANN_CLIENT_CFLAGS) -endif - -if BUILD_PLUGIN_WRITE_SENSU -pkglib_LTLIBRARIES += write_sensu.la -write_sensu_la_SOURCES = write_sensu.c -write_sensu_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_WRITE_TSDB -pkglib_LTLIBRARIES += write_tsdb.la -write_tsdb_la_SOURCES = write_tsdb.c -write_tsdb_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -if BUILD_PLUGIN_XENCPU -pkglib_LTLIBRARIES += xencpu.la -xencpu_la_SOURCES = xencpu.c -xencpu_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBXENCTL_CPPFLAGS) -xencpu_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBXENCTL_LDFLAGS) -xencpu_la_LIBADD = -lxenctrl -endif - -if BUILD_PLUGIN_XMMS -pkglib_LTLIBRARIES += xmms.la -xmms_la_SOURCES = xmms.c -xmms_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBXMMS_CFLAGS) -xmms_la_LDFLAGS = $(PLUGIN_LDFLAGS) -xmms_la_LIBADD = $(BUILD_WITH_LIBXMMS_LIBS) -endif - -if BUILD_PLUGIN_ZFS_ARC -pkglib_LTLIBRARIES += zfs_arc.la -zfs_arc_la_SOURCES = zfs_arc.c -zfs_arc_la_LDFLAGS = $(PLUGIN_LDFLAGS) -if BUILD_FREEBSD -zfs_arc_la_LIBADD = -lm -endif -if BUILD_SOLARIS -zfs_arc_la_LIBADD = -lkstat -endif -endif - -if BUILD_PLUGIN_ZOOKEEPER -pkglib_LTLIBRARIES += zookeeper.la -zookeeper_la_SOURCES = zookeeper.c -zookeeper_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -BUILT_SOURCES += $(dist_man_MANS) - -if BUILD_PLUGIN_ZONE -pkglib_LTLIBRARIES += zone.la -zone_la_SOURCES = zone.c -zone_la_LDFLAGS = $(PLUGIN_LDFLAGS) -endif - -dist_man_MANS = collectd.1 \ - collectd.conf.5 \ - collectd-email.5 \ - collectd-exec.5 \ - collectdctl.1 \ - collectd-java.5 \ - collectd-lua.5 \ - collectdmon.1 \ - collectd-nagios.1 \ - collectd-perl.5 \ - collectd-python.5 \ - collectd-snmp.5 \ - collectd-tg.1 \ - collectd-threshold.5 \ - collectd-unixsock.5 \ - types.db.5 - -EXTRA_DIST = collectd.conf.pod \ - collectd-email.pod \ - collectd-exec.pod \ - collectdctl.pod \ - collectd-java.pod \ - collectd-lua.pod \ - collectdmon.pod \ - collectd-nagios.pod \ - collectd-perl.pod \ - collectd-python.pod \ - collectd.pod \ - collectd-snmp.pod \ - collectd-tg.pod \ - collectd-threshold.pod \ - collectd-unixsock.pod \ - postgresql_default.conf \ - types.db \ - types.db.pod \ - valgrind.FreeBSD.suppress - -AM_V_POD2MAN_C = $(am__v_POD2MAN_C_@AM_V@) -am__v_POD2MAN_C_ = $(am__v_POD2MAN_C_@AM_DEFAULT_V@) -am__v_POD2MAN_C_0 = @echo " POD2MAN " $@; -am__v_POD2MAN_C_1 = - -.pod.1: - $(AM_V_POD2MAN_C)pod2man --release=$(VERSION) --center=$(PACKAGE) $< \ - >.pod2man.tmp.$$$$ 2>/dev/null && mv -f .pod2man.tmp.$$$$ $@ || true - @if grep '\' $@ >/dev/null 2>&1; \ - then \ - echo "$@ has some POD errors!"; false; \ - fi - -.pod.5: - $(AM_V_POD2MAN_C)pod2man --section=5 --release=$(VERSION) --center=$(PACKAGE) $< \ - >.pod2man.tmp.$$$$ 2>/dev/null && mv -f .pod2man.tmp.$$$$ $@ || true - @if grep '\' $@ >/dev/null 2>&1; \ - then \ - echo "$@ has some POD errors!"; false; \ - fi - -AM_V_PROTOC_C = $(am__v_PROTOC_C_@AM_V@) -am__v_PROTOC_C_ = $(am__v_PROTOC_C_@AM_DEFAULT_V@) -am__v_PROTOC_C_0 = @echo " PROTOC-C" $@; -am__v_PROTOC_C_1 = - -# Protocol buffer for the "pinba" plugin. -EXTRA_DIST += pinba.proto -if BUILD_PLUGIN_PINBA -CLEANFILES += pinba.pb-c.c pinba.pb-c.h -BUILT_SOURCES += pinba.pb-c.c pinba.pb-c.h - -pinba.pb-c.c pinba.pb-c.h: pinba.proto - $(AM_V_PROTOC_C)$(PROTOC_C) -I$(srcdir) --c_out . $(srcdir)/pinba.proto -endif - -# Protocol buffer for the "write_prometheus" plugin. -if BUILD_PLUGIN_WRITE_PROMETHEUS -CLEANFILES += prometheus.pb-c.c prometheus.pb-c.h -BUILT_SOURCES += prometheus.pb-c.c prometheus.pb-c.h - -prometheus.pb-c.c prometheus.pb-c.h: $(top_srcdir)/proto/prometheus.proto - $(AM_V_PROTOC_C)$(PROTOC_C) -I$(top_srcdir)/proto --c_out=$(builddir) $(top_srcdir)/proto/prometheus.proto -endif - -install-exec-hook: - $(mkinstalldirs) $(DESTDIR)$(sysconfdir) - if test -e $(DESTDIR)$(sysconfdir)/collectd.conf; \ - then \ - $(INSTALL) -m 0640 collectd.conf $(DESTDIR)$(sysconfdir)/collectd.conf.pkg-orig; \ - else \ - $(INSTALL) -m 0640 collectd.conf $(DESTDIR)$(sysconfdir)/collectd.conf; \ - fi; \ - $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) - $(INSTALL) -m 0644 $(srcdir)/types.db $(DESTDIR)$(pkgdatadir)/types.db; - $(INSTALL) -m 0644 $(srcdir)/postgresql_default.conf \ - $(DESTDIR)$(pkgdatadir)/postgresql_default.conf; - -uninstall-hook: - rm -f $(DESTDIR)$(pkgdatadir)/types.db; - rm -f $(DESTDIR)$(sysconfdir)/collectd.conf - rm -f $(DESTDIR)$(pkgdatadir)/postgresql_default.conf; - -if BUILD_PLUGIN_CEPH -test_plugin_ceph_SOURCES = ceph_test.c -test_plugin_ceph_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS) -test_plugin_ceph_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS) -test_plugin_ceph_LDADD = daemon/libplugin_mock.la $(BUILD_WITH_LIBYAJL_LIBS) -check_PROGRAMS += test_plugin_ceph -TESTS += test_plugin_ceph -endif diff --git a/src/aggregation.c b/src/aggregation.c index 4e20d0cf..ffee1cd4 100644 --- a/src/aggregation.c +++ b/src/aggregation.c @@ -93,16 +93,16 @@ static _Bool agg_is_regex(char const *str) /* {{{ */ size_t len; if (str == NULL) - return (0); + return 0; len = strlen(str); if (len < 3) - return (0); + return 0; if ((str[0] == '/') && (str[len - 1] == '/')) - return (1); + return 1; else - return (0); + return 0; } /* }}} _Bool agg_is_regex */ static void agg_destroy(aggregation_t *agg) /* {{{ */ @@ -222,7 +222,7 @@ static int agg_instance_create_name(agg_instance_t *inst, /* {{{ */ #undef COPY_FIELD - return (0); + return 0; } /* }}} int agg_instance_create_name */ /* Create a new aggregation instance. */ @@ -236,7 +236,7 @@ static agg_instance_t *agg_instance_create(data_set_t const *ds, /* {{{ */ inst = calloc(1, sizeof(*inst)); if (inst == NULL) { ERROR("aggregation plugin: calloc() failed."); - return (NULL); + return NULL; } pthread_mutex_init(&inst->lock, /* attr = */ NULL); @@ -256,7 +256,7 @@ static agg_instance_t *agg_instance_create(data_set_t const *ds, /* {{{ */ agg_instance_destroy(inst); \ free(inst); \ ERROR("aggregation plugin: calloc() failed."); \ - return (NULL); \ + return NULL; \ } \ } \ } while (0) @@ -275,7 +275,7 @@ static agg_instance_t *agg_instance_create(data_set_t const *ds, /* {{{ */ agg_instance_list_head = inst; pthread_mutex_unlock(&agg_instance_list_lock); - return (inst); + return inst; } /* }}} agg_instance_t *agg_instance_create */ /* Update the num, sum, min, max, ... fields of the aggregation instance, if @@ -291,7 +291,7 @@ static int agg_instance_update(agg_instance_t *inst, /* {{{ */ "data source. This is currently not supported by this plugin. " "Sorry.", ds->type); - return (EINVAL); + return EINVAL; } rate = uc_get_rate(ds, vl); @@ -300,12 +300,12 @@ static int agg_instance_update(agg_instance_t *inst, /* {{{ */ FORMAT_VL(ident, sizeof(ident), vl); ERROR("aggregation plugin: Unable to read the current rate of \"%s\".", ident); - return (ENOENT); + return ENOENT; } if (isnan(rate[0])) { sfree(rate); - return (0); + return 0; } pthread_mutex_lock(&inst->lock); @@ -322,7 +322,7 @@ static int agg_instance_update(agg_instance_t *inst, /* {{{ */ pthread_mutex_unlock(&inst->lock); sfree(rate); - return (0); + return 0; } /* }}} int agg_instance_update */ static int agg_instance_read_func(agg_instance_t *inst, /* {{{ */ @@ -345,10 +345,10 @@ static int agg_instance_read_func(agg_instance_t *inst, /* {{{ */ * COUNTER or a DERIVE, it will return EAGAIN. Catch this and handle * gracefully. */ if (status == EAGAIN) - return (0); + return 0; WARNING("aggregation plugin: rate_to_value failed with status %i.", status); - return (-1); + return -1; } vl->values = &v; @@ -359,7 +359,7 @@ static int agg_instance_read_func(agg_instance_t *inst, /* {{{ */ vl->values = NULL; vl->values_len = 0; - return (0); + return 0; } /* }}} int agg_instance_read_func */ static int agg_instance_read(agg_instance_t *inst, cdtime_t t) /* {{{ */ @@ -376,7 +376,7 @@ static int agg_instance_read(agg_instance_t *inst, cdtime_t t) /* {{{ */ vl.meta = meta_data_create(); if (vl.meta == NULL) { ERROR("aggregation plugin: meta_data_create failed."); - return (-1); + return -1; } meta_data_add_boolean(vl.meta, "aggregation:created", 1); @@ -422,7 +422,7 @@ static int agg_instance_read(agg_instance_t *inst, cdtime_t t) /* {{{ */ meta_data_destroy(vl.meta); vl.meta = NULL; - return (0); + return 0; } /* }}} int agg_instance_read */ /* lookup_class_callback_t for utils_vl_lookup */ @@ -430,7 +430,7 @@ static void *agg_lookup_class_callback(/* {{{ */ data_set_t const *ds, value_list_t const *vl, void *user_class) { - return (agg_instance_create(ds, vl, (aggregation_t *)user_class)); + return agg_instance_create(ds, vl, (aggregation_t *)user_class); } /* }}} void *agg_class_callback */ /* lookup_obj_callback_t for utils_vl_lookup */ @@ -438,7 +438,7 @@ static int agg_lookup_obj_callback(data_set_t const *ds, /* {{{ */ value_list_t const *vl, __attribute__((unused)) void *user_class, void *user_obj) { - return (agg_instance_update((agg_instance_t *)user_obj, ds, vl)); + return agg_instance_update((agg_instance_t *)user_obj, ds, vl); } /* }}} int agg_lookup_obj_callback */ /* lookup_free_class_callback_t for utils_vl_lookup */ @@ -501,7 +501,7 @@ static int agg_config_handle_group_by(oconfig_item_t const *ci, /* {{{ */ value); } /* for (ci->values) */ - return (0); + return 0; } /* }}} int agg_config_handle_group_by */ static int agg_config_aggregation(oconfig_item_t *ci) /* {{{ */ @@ -513,7 +513,7 @@ static int agg_config_aggregation(oconfig_item_t *ci) /* {{{ */ agg = calloc(1, sizeof(*agg)); if (agg == NULL) { ERROR("aggregation plugin: calloc failed."); - return (-1); + return -1; } sstrncpy(agg->ident.host, "/.*/", sizeof(agg->ident.host)); @@ -636,14 +636,14 @@ static int agg_config_aggregation(oconfig_item_t *ci) /* {{{ */ if (!is_valid) /* {{{ */ { sfree(agg); - return (-1); + return -1; } /* }}} */ status = lookup_add(lookup, &agg->ident, agg->group_by, agg); if (status != 0) { ERROR("aggregation plugin: lookup_add failed with status %i.", status); sfree(agg); - return (-1); + return -1; } DEBUG("aggregation plugin: Successfully added aggregation: " @@ -651,7 +651,7 @@ static int agg_config_aggregation(oconfig_item_t *ci) /* {{{ */ "Type \"%s\", TypeInstance \"%s\")", agg->ident.host, agg->ident.plugin, agg->ident.plugin_instance, agg->ident.type, agg->ident.type_instance); - return (0); + return 0; } /* }}} int agg_config_aggregation */ static int agg_config(oconfig_item_t *ci) /* {{{ */ @@ -665,7 +665,7 @@ static int agg_config(oconfig_item_t *ci) /* {{{ */ if (lookup == NULL) { pthread_mutex_unlock(&agg_instance_list_lock); ERROR("aggregation plugin: lookup_create failed."); - return (-1); + return -1; } } @@ -682,7 +682,7 @@ static int agg_config(oconfig_item_t *ci) /* {{{ */ pthread_mutex_unlock(&agg_instance_list_lock); - return (0); + return 0; } /* }}} int agg_config */ static int agg_read(void) /* {{{ */ @@ -703,7 +703,7 @@ static int agg_read(void) /* {{{ */ * Therefore we need to handle this case separately. */ if (agg_instance_list_head == NULL) { pthread_mutex_unlock(&agg_instance_list_lock); - return (0); + return 0; } for (agg_instance_t *this = agg_instance_list_head; this != NULL; @@ -721,7 +721,7 @@ static int agg_read(void) /* {{{ */ pthread_mutex_unlock(&agg_instance_list_lock); - return ((success > 0) ? 0 : -1); + return (success > 0) ? 0 : -1; } /* }}} int agg_read */ static int agg_write(data_set_t const *ds, value_list_t const *vl, /* {{{ */ @@ -734,7 +734,7 @@ static int agg_write(data_set_t const *ds, value_list_t const *vl, /* {{{ */ (void)meta_data_get_boolean(vl->meta, "aggregation:created", &created_by_aggregation); if (created_by_aggregation) - return (0); + return 0; if (lookup == NULL) status = ENOENT; @@ -744,7 +744,7 @@ static int agg_write(data_set_t const *ds, value_list_t const *vl, /* {{{ */ status = 0; } - return (status); + return status; } /* }}} int agg_write */ void module_register(void) { @@ -752,5 +752,3 @@ void module_register(void) { plugin_register_read("aggregation", agg_read); plugin_register_write("aggregation", agg_write, /* user_data = */ NULL); } - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/amqp.c b/src/amqp.c index c54a1e09..1adc6271 100644 --- a/src/amqp.c +++ b/src/amqp.c @@ -164,16 +164,16 @@ static char *camqp_bytes_cstring(amqp_bytes_t *in) /* {{{ */ char *ret; if ((in == NULL) || (in->bytes == NULL)) - return (NULL); + return NULL; ret = malloc(in->len + 1); if (ret == NULL) - return (NULL); + return NULL; memcpy(ret, in->bytes, in->len); ret[in->len] = 0; - return (ret); + return ret; } /* }}} char *camqp_bytes_cstring */ static _Bool camqp_is_error(camqp_config_t *conf) /* {{{ */ @@ -182,9 +182,9 @@ static _Bool camqp_is_error(camqp_config_t *conf) /* {{{ */ r = amqp_get_rpc_reply(conf->connection); if (r.reply_type == AMQP_RESPONSE_NORMAL) - return (0); + return 0; - return (1); + return 1; } /* }}} _Bool camqp_is_error */ static char *camqp_strerror(camqp_config_t *conf, /* {{{ */ @@ -204,10 +204,10 @@ static char *camqp_strerror(camqp_config_t *conf, /* {{{ */ case AMQP_RESPONSE_LIBRARY_EXCEPTION: #if HAVE_AMQP_RPC_REPLY_T_LIBRARY_ERRNO if (r.library_errno) - return (sstrerror(r.library_errno, buffer, buffer_size)); + return sstrerror(r.library_errno, buffer, buffer_size); #else if (r.library_error) - return (sstrerror(r.library_error, buffer, buffer_size)); + return sstrerror(r.library_error, buffer, buffer_size); #endif else sstrncpy(buffer, "End of stream", buffer_size); @@ -236,7 +236,7 @@ static char *camqp_strerror(camqp_config_t *conf, /* {{{ */ ssnprintf(buffer, buffer_size, "Unknown reply type %i", (int)r.reply_type); } - return (buffer); + return buffer; } /* }}} char *camqp_strerror */ #if HAVE_AMQP_RPC_REPLY_T_LIBRARY_ERRNO @@ -245,7 +245,7 @@ static int camqp_create_exchange(camqp_config_t *conf) /* {{{ */ amqp_exchange_declare_ok_t *ed_ret; if (conf->exchange_type == NULL) - return (0); + return 0; ed_ret = amqp_exchange_declare( conf->connection, @@ -261,14 +261,14 @@ static int camqp_create_exchange(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_exchange_declare failed: %s", camqp_strerror(conf, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (-1); + return -1; } INFO("amqp plugin: Successfully created exchange \"%s\" " "with type \"%s\".", conf->exchange, conf->exchange_type); - return (0); + return 0; } /* }}} int camqp_create_exchange */ #else static int camqp_create_exchange(camqp_config_t *conf) /* {{{ */ @@ -278,7 +278,7 @@ static int camqp_create_exchange(camqp_config_t *conf) /* {{{ */ struct amqp_table_entry_t_ argument_table_entries[1]; if (conf->exchange_type == NULL) - return (0); + return 0; /* Valid arguments: "auto_delete", "internal" */ argument_table.num_entries = STATIC_ARRAY_SIZE(argument_table_entries); @@ -304,14 +304,14 @@ static int camqp_create_exchange(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_exchange_declare failed: %s", camqp_strerror(conf, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (-1); + return -1; } INFO("amqp plugin: Successfully created exchange \"%s\" " "with type \"%s\".", conf->exchange, conf->exchange_type); - return (0); + return 0; } /* }}} int camqp_create_exchange */ #endif @@ -333,7 +333,7 @@ static int camqp_setup_queue(camqp_config_t *conf) /* {{{ */ if (qd_ret == NULL) { ERROR("amqp plugin: amqp_queue_declare failed."); camqp_close_connection(conf); - return (-1); + return -1; } if (conf->queue == NULL) { @@ -341,7 +341,7 @@ static int camqp_setup_queue(camqp_config_t *conf) /* {{{ */ if (conf->queue == NULL) { ERROR("amqp plugin: camqp_bytes_cstring failed."); camqp_close_connection(conf); - return (-1); + return -1; } INFO("amqp plugin: Created queue \"%s\".", conf->queue); @@ -367,7 +367,7 @@ static int camqp_setup_queue(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_queue_bind failed: %s", camqp_strerror(conf, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (-1); + return -1; } DEBUG("amqp plugin: Successfully bound queue \"%s\" to exchange \"%s\".", @@ -388,10 +388,10 @@ static int camqp_setup_queue(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_basic_consume failed: %s", camqp_strerror(conf, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int camqp_setup_queue */ static int camqp_connect(camqp_config_t *conf) /* {{{ */ @@ -407,14 +407,14 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ #endif if (conf->connection != NULL) - return (0); + return 0; time_t now = time(NULL); if (now < (last_connect_time + conf->connection_retry_delay)) { DEBUG("amqp plugin: skipping connection retry, " "ConnectionRetryDelay: %d", conf->connection_retry_delay); - return (1); + return 1; } else { DEBUG("amqp plugin: retrying connection"); last_connect_time = now; @@ -423,7 +423,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ conf->connection = amqp_new_connection(); if (conf->connection == NULL) { ERROR("amqp plugin: amqp_new_connection failed."); - return (ENOMEM); + return ENOMEM; } #ifdef HAVE_AMQP_TCP_SOCKET @@ -436,7 +436,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_tcp_socket_new failed."); amqp_destroy_connection(conf->connection); conf->connection = NULL; - return (ENOMEM); + return ENOMEM; } status = amqp_socket_open(socket, CONF(conf, host), conf->port); @@ -447,7 +447,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); amqp_destroy_connection(conf->connection); conf->connection = NULL; - return (status); + return status; } #else /* HAVE_AMQP_TCP_SOCKET */ #define CLOSE_SOCKET() close(sockfd) @@ -460,7 +460,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); amqp_destroy_connection(conf->connection); conf->connection = NULL; - return (status); + return status; } amqp_set_sockfd(conf->connection, sockfd); #endif @@ -477,7 +477,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ amqp_destroy_connection(conf->connection); CLOSE_SOCKET(); conf->connection = NULL; - return (1); + return 1; } amqp_channel_open(conf->connection, /* channel = */ 1); @@ -489,7 +489,7 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ amqp_destroy_connection(conf->connection); CLOSE_SOCKET(); conf->connection = NULL; - return (1); + return 1; } INFO("amqp plugin: Successfully opened connection to vhost \"%s\" " @@ -498,11 +498,11 @@ static int camqp_connect(camqp_config_t *conf) /* {{{ */ status = camqp_create_exchange(conf); if (status != 0) - return (status); + return status; if (!conf->publish) - return (camqp_setup_queue(conf)); - return (0); + return camqp_setup_queue(conf); + return 0; } /* }}} int camqp_connect */ static int camqp_shutdown(void) /* {{{ */ @@ -524,7 +524,7 @@ static int camqp_shutdown(void) /* {{{ */ DEBUG("amqp plugin: All subscriber threads exited."); - return (0); + return 0; } /* }}} int camqp_shutdown */ /* @@ -550,17 +550,17 @@ static int camqp_read_body(camqp_config_t *conf, /* {{{ */ ERROR("amqp plugin: amqp_simple_wait_frame failed: %s", sstrerror(status, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (status); + return status; } if (frame.frame_type != AMQP_FRAME_BODY) { NOTICE("amqp plugin: Unexpected frame type: %#" PRIx8, frame.frame_type); - return (-1); + return -1; } if ((body_size - received) < frame.payload.body_fragment.len) { WARNING("amqp plugin: Body is larger than indicated by header."); - return (-1); + return -1; } memcpy(body_ptr, frame.payload.body_fragment.bytes, @@ -573,19 +573,19 @@ static int camqp_read_body(camqp_config_t *conf, /* {{{ */ status = cmd_handle_putval(stderr, body); if (status != 0) ERROR("amqp plugin: cmd_handle_putval failed with status %i.", status); - return (status); + return status; } else if (strcasecmp("application/json", content_type) == 0) { ERROR("amqp plugin: camqp_read_body: Parsing JSON data has not " "been implemented yet. FIXME!"); - return (0); + return 0; } else { ERROR("amqp plugin: camqp_read_body: Unknown content type \"%s\".", content_type); - return (EINVAL); + return EINVAL; } /* not reached */ - return (0); + return 0; } /* }}} int camqp_read_body */ static int camqp_read_header(camqp_config_t *conf) /* {{{ */ @@ -602,26 +602,26 @@ static int camqp_read_header(camqp_config_t *conf) /* {{{ */ ERROR("amqp plugin: amqp_simple_wait_frame failed: %s", sstrerror(status, errbuf, sizeof(errbuf))); camqp_close_connection(conf); - return (status); + return status; } if (frame.frame_type != AMQP_FRAME_HEADER) { NOTICE("amqp plugin: Unexpected frame type: %#" PRIx8, frame.frame_type); - return (-1); + return -1; } properties = frame.payload.properties.decoded; content_type = camqp_bytes_cstring(&properties->content_type); if (content_type == NULL) { ERROR("amqp plugin: Unable to determine content type."); - return (-1); + return -1; } status = camqp_read_body(conf, (size_t)frame.payload.properties.body_size, content_type); sfree(content_type); - return (status); + return status; } /* }}} int camqp_read_header */ static void *camqp_subscribe_thread(void *user_data) /* {{{ */ @@ -671,7 +671,7 @@ static void *camqp_subscribe_thread(void *user_data) /* {{{ */ camqp_config_free(conf); pthread_exit(NULL); - return (NULL); + return NULL; } /* }}} void *camqp_subscribe_thread */ static int camqp_subscribe_init(camqp_config_t *conf) /* {{{ */ @@ -684,7 +684,7 @@ static int camqp_subscribe_init(camqp_config_t *conf) /* {{{ */ if (tmp == NULL) { ERROR("amqp plugin: realloc failed."); sfree(subscriber_threads); - return (ENOMEM); + return ENOMEM; } subscriber_threads = tmp; tmp = subscriber_threads + subscriber_threads_num; @@ -696,12 +696,12 @@ static int camqp_subscribe_init(camqp_config_t *conf) /* {{{ */ char errbuf[1024]; ERROR("amqp plugin: pthread_create failed: %s", sstrerror(status, errbuf, sizeof(errbuf))); - return (status); + return status; } subscriber_threads_num++; - return (0); + return 0; } /* }}} int camqp_subscribe_init */ /* @@ -714,7 +714,7 @@ static int camqp_write_locked(camqp_config_t *conf, /* {{{ */ status = camqp_connect(conf); if (status != 0) - return (status); + return status; amqp_basic_properties_t props = {._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG | @@ -742,7 +742,7 @@ static int camqp_write_locked(camqp_config_t *conf, /* {{{ */ camqp_close_connection(conf); } - return (status); + return status; } /* }}} int camqp_write_locked */ static int camqp_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -753,7 +753,7 @@ static int camqp_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ int status; if ((ds == NULL) || (vl == NULL) || (conf == NULL)) - return (EINVAL); + return EINVAL; if (conf->routing_key != NULL) { sstrncpy(routing_key, conf->routing_key, sizeof(routing_key)); @@ -776,7 +776,7 @@ static int camqp_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ status = cmd_create_putval(buffer, sizeof(buffer), ds, vl); if (status != 0) { ERROR("amqp plugin: cmd_create_putval failed with status %i.", status); - return (status); + return status; } } else if (conf->format == CAMQP_FORMAT_JSON) { size_t bfree = sizeof(buffer); @@ -791,18 +791,18 @@ static int camqp_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ conf->postfix, conf->escape_char, conf->graphite_flags); if (status != 0) { ERROR("amqp plugin: format_graphite failed with status %i.", status); - return (status); + return status; } } else { ERROR("amqp plugin: Invalid format (%i).", conf->format); - return (-1); + return -1; } pthread_mutex_lock(&conf->lock); status = camqp_write_locked(conf, buffer, routing_key); pthread_mutex_unlock(&conf->lock); - return (status); + return status; } /* }}} int camqp_write */ /* @@ -816,7 +816,7 @@ static int camqp_config_set_format(oconfig_item_t *ci, /* {{{ */ string = NULL; status = cf_util_get_string(ci, &string); if (status != 0) - return (status); + return status; assert(string != NULL); if (strcasecmp("Command", string) == 0) @@ -831,7 +831,7 @@ static int camqp_config_set_format(oconfig_item_t *ci, /* {{{ */ free(string); - return (0); + return 0; } /* }}} int config_set_string */ static int camqp_config_connection(oconfig_item_t *ci, /* {{{ */ @@ -842,7 +842,7 @@ static int camqp_config_connection(oconfig_item_t *ci, /* {{{ */ conf = calloc(1, sizeof(*conf)); if (conf == NULL) { ERROR("amqp plugin: calloc failed."); - return (ENOMEM); + return ENOMEM; } /* Initialize "conf" {{{ */ @@ -879,7 +879,7 @@ static int camqp_config_connection(oconfig_item_t *ci, /* {{{ */ status = cf_util_get_string(ci, &conf->name); if (status != 0) { sfree(conf); - return (status); + return status; } for (int i = 0; i < ci->children_num; i++) { @@ -970,7 +970,7 @@ static int camqp_config_connection(oconfig_item_t *ci, /* {{{ */ if (status != 0) { camqp_config_free(conf); - return (status); + return status; } if (conf->exchange != NULL) { @@ -988,17 +988,17 @@ static int camqp_config_connection(oconfig_item_t *ci, /* {{{ */ }); if (status != 0) { camqp_config_free(conf); - return (status); + return status; } } else { status = camqp_subscribe_init(conf); if (status != 0) { camqp_config_free(conf); - return (status); + return status; } } - return (0); + return 0; } /* }}} int camqp_config_connection */ static int camqp_config(oconfig_item_t *ci) /* {{{ */ @@ -1015,12 +1015,10 @@ static int camqp_config(oconfig_item_t *ci) /* {{{ */ child->key); } /* for (ci->children_num) */ - return (0); + return 0; } /* }}} int camqp_config */ void module_register(void) { plugin_register_complex_config("amqp", camqp_config); plugin_register_shutdown("amqp", camqp_shutdown); } /* void module_register */ - -/* vim: set sw=4 sts=4 et fdm=marker : */ diff --git a/src/apache.c b/src/apache.c index eaef61b1..e2f75c18 100644 --- a/src/apache.c +++ b/src/apache.c @@ -89,11 +89,11 @@ static size_t apache_curl_callback(void *buf, size_t size, size_t nmemb, if (st == NULL) { ERROR("apache plugin: apache_curl_callback: " "user_data pointer is NULL."); - return (0); + return 0; } if (len == 0) - return (len); + return len; if ((st->apache_buffer_fill + len) >= st->apache_buffer_size) { char *temp; @@ -101,7 +101,7 @@ static size_t apache_curl_callback(void *buf, size_t size, size_t nmemb, temp = realloc(st->apache_buffer, st->apache_buffer_fill + len + 1); if (temp == NULL) { ERROR("apache plugin: realloc failed."); - return (0); + return 0; } st->apache_buffer = temp; st->apache_buffer_size = st->apache_buffer_fill + len + 1; @@ -111,7 +111,7 @@ static size_t apache_curl_callback(void *buf, size_t size, size_t nmemb, st->apache_buffer_fill += len; st->apache_buffer[st->apache_buffer_fill] = 0; - return (len); + return len; } /* int apache_curl_callback */ static size_t apache_header_callback(void *buf, size_t size, size_t nmemb, @@ -123,15 +123,15 @@ static size_t apache_header_callback(void *buf, size_t size, size_t nmemb, if (st == NULL) { ERROR("apache plugin: apache_header_callback: " "user_data pointer is NULL."); - return (0); + return 0; } if (len == 0) - return (len); + return len; /* look for the Server header */ if (strncasecmp(buf, "Server: ", strlen("Server: ")) != 0) - return (len); + return len; if (strstr(buf, "Apache") != NULL) st->server_type = APACHE; @@ -146,7 +146,7 @@ static size_t apache_header_callback(void *buf, size_t size, size_t nmemb, NOTICE("apache plugin: Unknown server software: %s", hdr); } - return (len); + return len; } /* apache_header_callback */ /* Configuration handling functiions @@ -164,7 +164,7 @@ static int config_add(oconfig_item_t *ci) { st = calloc(1, sizeof(*st)); if (st == NULL) { ERROR("apache plugin: calloc failed."); - return (-1); + return -1; } st->timeout = -1; @@ -172,7 +172,7 @@ static int config_add(oconfig_item_t *ci) { status = cf_util_get_string(ci, &st->name); if (status != 0) { sfree(st); - return (status); + return status; } assert(st->name != NULL); @@ -234,10 +234,10 @@ static int config_add(oconfig_item_t *ci) { if (status != 0) { apache_free(st); - return (-1); + return -1; } - return (0); + return 0; } /* int config_add */ static int config(oconfig_item_t *ci) { @@ -256,7 +256,7 @@ static int config(oconfig_item_t *ci) { child->key); } /* for (ci->children) */ - return (status); + return status; } /* int config */ /* initialize curl for each host */ @@ -272,7 +272,7 @@ static int init_host(apache_t *st) /* {{{ */ if ((st->curl = curl_easy_init()) == NULL) { ERROR("apache plugin: init_host: `curl_easy_init' failed."); - return (-1); + return -1; } curl_easy_setopt(st->curl, CURLOPT_NOSIGNAL, 1L); @@ -321,7 +321,7 @@ static int init_host(apache_t *st) /* {{{ */ "truncated."); curl_easy_cleanup(st->curl); st->curl = NULL; - return (-1); + return -1; } curl_easy_setopt(st->curl, CURLOPT_USERPWD, credentials); @@ -347,7 +347,7 @@ static int init_host(apache_t *st) /* {{{ */ (long)CDTIME_T_TO_MS(plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int init_host */ static void submit_value(const char *type, const char *type_instance, @@ -505,14 +505,14 @@ static int apache_read_host(user_data_t *user_data) /* {{{ */ if (st->curl == NULL) { status = init_host(st); if (status != 0) - return (-1); + return -1; } assert(st->curl != NULL); st->apache_buffer_fill = 0; if (curl_easy_perform(st->curl) != CURLE_OK) { ERROR("apache: curl_easy_perform failed: %s", st->apache_curl_error); - return (-1); + return -1; } /* fallback - server_type to apache if not set at this time */ @@ -558,7 +558,7 @@ static int apache_read_host(user_data_t *user_data) /* {{{ */ st->apache_buffer_fill = 0; - return (0); + return 0; } /* }}} int apache_read_host */ static int apache_init(void) /* {{{ */ @@ -566,12 +566,10 @@ static int apache_init(void) /* {{{ */ /* Call this while collectd is still single-threaded to avoid * initialization issues in libgcrypt. */ curl_global_init(CURL_GLOBAL_SSL); - return (0); + return 0; } /* }}} int apache_init */ void module_register(void) { plugin_register_complex_config("apache", config); plugin_register_init("apache", apache_init); } /* void module_register */ - -/* vim: set sw=8 noet fdm=marker : */ diff --git a/src/apcups.c b/src/apcups.c index 3b8b03c2..7c6a47c1 100644 --- a/src/apcups.c +++ b/src/apcups.c @@ -85,22 +85,22 @@ static int net_shutdown(int *fd) { uint16_t packet_size = 0; if ((fd == NULL) || (*fd < 0)) - return (EINVAL); + return EINVAL; (void)swrite(*fd, (void *)&packet_size, sizeof(packet_size)); close(*fd); *fd = -1; - return (0); + return 0; } /* int net_shutdown */ /* Close the network connection */ static int apcups_shutdown(void) { if (global_sockfd < 0) - return (0); + return 0; net_shutdown(&global_sockfd); - return (0); + return 0; } /* int apcups_shutdown */ /* @@ -123,7 +123,7 @@ static int net_open(char const *node, char const *service) { INFO("apcups plugin: getaddrinfo failed: %s", (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (-1); + return -1; } /* Create socket */ @@ -138,7 +138,7 @@ static int net_open(char const *node, char const *service) { if (sd < 0) { DEBUG("apcups plugin: Unable to open a socket"); freeaddrinfo(ai_return); - return (-1); + return -1; } status = connect(sd, ai_list->ai_addr, ai_list->ai_addrlen); @@ -151,12 +151,12 @@ static int net_open(char const *node, char const *service) { INFO("apcups plugin: connect failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(sd); - return (-1); + return -1; } DEBUG("apcups plugin: Done opening a socket %i", sd); - return (sd); + return sd; } /* int net_open */ /* @@ -175,7 +175,7 @@ static int net_recv(int *sockfd, char *buf, int buflen) { if (sread(*sockfd, (void *)&packet_size, sizeof(packet_size)) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } packet_size = ntohs(packet_size); @@ -185,20 +185,20 @@ static int net_recv(int *sockfd, char *buf, int buflen) { packet_size, buflen); close(*sockfd); *sockfd = -1; - return (-2); + return -2; } if (packet_size == 0) - return (0); + return 0; /* now read the actual data */ if (sread(*sockfd, (void *)buf, packet_size) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } - return ((int)packet_size); + return (int)packet_size; } /* static int net_recv (int *sockfd, char *buf, int buflen) */ /* @@ -220,17 +220,17 @@ static int net_send(int *sockfd, const char *buff, int len) { if (swrite(*sockfd, (void *)&packet_size, sizeof(packet_size)) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } /* send data packet */ if (swrite(*sockfd, (void *)buff, len) != 0) { close(*sockfd); *sockfd = -1; - return (-2); + return -2; } - return (0); + return 0; } /* Get and print status from apcupsd NIS server */ @@ -240,7 +240,7 @@ static int apc_query_server(char const *node, char const *service, char recvline[1024]; char *tokptr; char *toksaveptr; - _Bool retry = 1; + int try = 0; int status; #if APCMAIN @@ -250,32 +250,32 @@ static int apc_query_server(char const *node, char const *service, #define PRINT_VALUE(name, val) /**/ #endif - while (retry) { + while (1) { if (global_sockfd < 0) { global_sockfd = net_open(node, service); if (global_sockfd < 0) { ERROR("apcups plugin: Connecting to the " "apcupsd failed."); - return (-1); + return -1; } } status = net_send(&global_sockfd, "status", strlen("status")); if (status != 0) { - /* net_send is closing the socket on error. */ + /* net_send closes the socket on error. */ assert(global_sockfd < 0); - if (retry) { - retry = 0; + if (try == 0) { + try++; count_retries++; continue; } ERROR("apcups plugin: Writing to the socket failed."); - return (-1); + return -1; } break; - } /* while (retry) */ + } /* while (1) */ /* When collectd's collection interval is larger than apcupsd's * timeout, we would have to retry / re-connect each iteration. Try to @@ -344,10 +344,10 @@ static int apc_query_server(char const *node, char const *service, char errbuf[1024]; ERROR("apcups plugin: Reading from socket failed: %s", sstrerror(status, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } static int apcups_config(oconfig_item_t *ci) { @@ -380,7 +380,7 @@ static int apcups_config(oconfig_item_t *ci) { } } - return (0); + return 0; } /* int apcups_config */ static void apc_submit_generic(const char *type, const char *type_inst, @@ -428,12 +428,12 @@ static int apcups_read(void) { DEBUG("apcups plugin: apc_query_server (\"%s\", \"%s\") = %d", conf_node == NULL ? APCUPS_DEFAULT_NODE : conf_node, conf_service, status); - return (status); + return status; } apc_submit(&apcups_detail); - return (0); + return 0; } /* apcups_read */ void module_register(void) { diff --git a/src/apple_sensors.c b/src/apple_sensors.c index 2f8cccd8..f78c3da2 100644 --- a/src/apple_sensors.c +++ b/src/apple_sensors.c @@ -29,10 +29,6 @@ #include "common.h" #include "plugin.h" -#if HAVE_CTYPE_H -#include -#endif - #if HAVE_MACH_MACH_TYPES_H #include #endif @@ -69,10 +65,10 @@ static int as_init(void) { if (status != kIOReturnSuccess) { ERROR("IOMasterPort failed: %s", mach_error_string(status)); io_master_port = MACH_PORT_NULL; - return (-1); + return -1; } - return (0); + return 0; } static void as_submit(const char *type, const char *type_instance, double val) { @@ -99,13 +95,13 @@ static int as_read(void) { int value_int; double value_double; if (!io_master_port || (io_master_port == MACH_PORT_NULL)) - return (-1); + return -1; status = IOServiceGetMatchingServices( io_master_port, IOServiceNameMatching("IOHWSensor"), &iterator); if (status != kIOReturnSuccess) { ERROR("IOServiceGetMatchingServices failed: %s", mach_error_string(status)); - return (-1); + return -1; } while ((io_obj = IOIteratorNext(iterator))) { @@ -188,7 +184,7 @@ static int as_read(void) { IOObjectRelease(iterator); - return (0); + return 0; } /* int as_read */ void module_register(void) { diff --git a/src/aquaero.c b/src/aquaero.c index 4a78f685..77835619 100644 --- a/src/aquaero.c +++ b/src/aquaero.c @@ -43,12 +43,12 @@ static int aquaero_config(oconfig_item_t *ci) { } } - return (0); + return 0; } static int aquaero_shutdown(void) { libaquaero5_exit(); - return (0); + return 0; } /* int aquaero_shutdown */ static void aquaero_submit(const char *type, const char *type_instance, @@ -98,7 +98,7 @@ static int aquaero_read(void) { ERROR("aquaero plugin: Failed to poll device \"%s\": %s (%s)", conf_device ? conf_device : "default", err_msg, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (libaquaero5_getsettings(conf_device, &aq_sett, &err_msg) < 0) { @@ -107,7 +107,7 @@ static int aquaero_read(void) { "for device \"%s\": %s (%s)", conf_device ? conf_device : "default", err_msg, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* CPU Temperature sensor */ @@ -153,7 +153,7 @@ static int aquaero_read(void) { /* Liquid level */ aquaero_submit_array("percent", "waterlevel", aq_data.level, AQ5_NUM_LEVEL); - return (0); + return 0; } void module_register(void) { @@ -161,5 +161,3 @@ void module_register(void) { plugin_register_read("aquaero", aquaero_read); plugin_register_shutdown("aquaero", aquaero_shutdown); } /* void module_register */ - -/* vim: set sw=8 sts=8 noet : */ diff --git a/src/ascent.c b/src/ascent.c index 840fe8b8..16f91046 100644 --- a/src/ascent.c +++ b/src/ascent.c @@ -125,7 +125,7 @@ static int ascent_submit_gauge(const char *plugin_instance, /* {{{ */ sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); plugin_dispatch_values(&vl); - return (0); + return 0; } /* }}} int ascent_submit_gauge */ static size_t ascent_curl_callback(void *buf, size_t size, @@ -134,7 +134,7 @@ static size_t ascent_curl_callback(void *buf, size_t size, size_t len = size * nmemb; if (len == 0) - return (len); + return len; if ((ascent_buffer_fill + len) >= ascent_buffer_size) { char *temp; @@ -142,7 +142,7 @@ static size_t ascent_curl_callback(void *buf, size_t size, temp = realloc(ascent_buffer, ascent_buffer_fill + len + 1); if (temp == NULL) { ERROR("ascent plugin: realloc failed."); - return (0); + return 0; } ascent_buffer = temp; ascent_buffer_size = ascent_buffer_fill + len + 1; @@ -152,7 +152,7 @@ static size_t ascent_curl_callback(void *buf, size_t size, ascent_buffer_fill += len; ascent_buffer[ascent_buffer_fill] = 0; - return (len); + return len; } /* }}} size_t ascent_curl_callback */ static int ascent_submit_players(player_stats_t *ps) /* {{{ */ @@ -187,7 +187,7 @@ static int ascent_submit_players(player_stats_t *ps) /* {{{ */ value = ((double)ps->latency_sum) / (1000.0 * ((double)ps->latency_num)); ascent_submit_gauge(NULL, "latency", "average", value); - return (0); + return 0; } /* }}} int ascent_submit_players */ static int ascent_account_player(player_stats_t *ps, /* {{{ */ @@ -226,7 +226,7 @@ static int ascent_account_player(player_stats_t *ps, /* {{{ */ ps->latency_num++; } - return (0); + return 0; } /* }}} int ascent_account_player */ static int ascent_xml_submit_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ @@ -240,7 +240,7 @@ static int ascent_xml_submit_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ if (str_ptr == NULL) { ERROR( "ascent plugin: ascent_xml_submit_gauge: xmlNodeListGetString failed."); - return (-1); + return -1; } if (strcasecmp("N/A", str_ptr) == 0) @@ -251,12 +251,12 @@ static int ascent_xml_submit_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ if (str_ptr == end_ptr) { xmlFree(str_ptr); ERROR("ascent plugin: ascent_xml_submit_gauge: strtod failed."); - return (-1); + return -1; } } xmlFree(str_ptr); - return (ascent_submit_gauge(plugin_instance, type, type_instance, value)); + return ascent_submit_gauge(plugin_instance, type, type_instance, value); } /* }}} int ascent_xml_submit_gauge */ static int ascent_xml_read_int(xmlDoc *doc, xmlNode *node, /* {{{ */ @@ -267,7 +267,7 @@ static int ascent_xml_read_int(xmlDoc *doc, xmlNode *node, /* {{{ */ str_ptr = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); if (str_ptr == NULL) { ERROR("ascent plugin: ascent_xml_read_int: xmlNodeListGetString failed."); - return (-1); + return -1; } if (strcasecmp("N/A", str_ptr) == 0) @@ -278,13 +278,13 @@ static int ascent_xml_read_int(xmlDoc *doc, xmlNode *node, /* {{{ */ if (str_ptr == end_ptr) { xmlFree(str_ptr); ERROR("ascent plugin: ascent_xml_read_int: strtol failed."); - return (-1); + return -1; } } xmlFree(str_ptr); *ret_value = value; - return (0); + return 0; } /* }}} int ascent_xml_read_int */ static int ascent_xml_sessions_plr(xmlDoc *doc, xmlNode *node, /* {{{ */ @@ -317,7 +317,7 @@ static int ascent_xml_sessions_plr(xmlDoc *doc, xmlNode *node, /* {{{ */ } } /* for (child) */ - return (0); + return 0; } /* }}} int ascent_xml_sessions_plr */ static int ascent_xml_sessions(xmlDoc *doc, xmlNode *node) /* {{{ */ @@ -343,7 +343,7 @@ static int ascent_xml_sessions(xmlDoc *doc, xmlNode *node) /* {{{ */ ascent_submit_players(&ps); - return (0); + return 0; } /* }}} int ascent_xml_sessions */ static int ascent_xml_status(xmlDoc *doc, xmlNode *node) /* {{{ */ @@ -380,7 +380,7 @@ static int ascent_xml_status(xmlDoc *doc, xmlNode *node) /* {{{ */ } } /* for (child) */ - return (0); + return 0; } /* }}} int ascent_xml_status */ static int ascent_xml(const char *data) /* {{{ */ @@ -398,20 +398,20 @@ static int ascent_xml(const char *data) /* {{{ */ #endif if (doc == NULL) { ERROR("ascent plugin: xmlParseMemory failed."); - return (-1); + return -1; } cur = xmlDocGetRootElement(doc); if (cur == NULL) { ERROR("ascent plugin: XML document is empty."); xmlFreeDoc(doc); - return (-1); + return -1; } if (xmlStrcmp((const xmlChar *)"serverpage", cur->name) != 0) { ERROR("ascent plugin: XML root element is not \"serverpage\"."); xmlFreeDoc(doc); - return (-1); + return -1; } for (xmlNode *child = cur->xmlChildrenNode; child != NULL; @@ -433,7 +433,7 @@ static int ascent_xml(const char *data) /* {{{ */ } /* for (child) */ xmlFreeDoc(doc); - return (0); + return 0; } /* }}} int ascent_xml */ static int config_set(char **var, const char *value) /* {{{ */ @@ -444,29 +444,29 @@ static int config_set(char **var, const char *value) /* {{{ */ } if ((*var = strdup(value)) == NULL) - return (1); + return 1; else - return (0); + return 0; } /* }}} int config_set */ static int ascent_config(const char *key, const char *value) /* {{{ */ { if (strcasecmp(key, "URL") == 0) - return (config_set(&url, value)); + return config_set(&url, value); else if (strcasecmp(key, "User") == 0) - return (config_set(&user, value)); + return config_set(&user, value); else if (strcasecmp(key, "Password") == 0) - return (config_set(&pass, value)); + return config_set(&pass, value); else if (strcasecmp(key, "VerifyPeer") == 0) - return (config_set(&verify_peer, value)); + return config_set(&verify_peer, value); else if (strcasecmp(key, "VerifyHost") == 0) - return (config_set(&verify_host, value)); + return config_set(&verify_host, value); else if (strcasecmp(key, "CACert") == 0) - return (config_set(&cacert, value)); + return config_set(&cacert, value); else if (strcasecmp(key, "Timeout") == 0) - return (config_set(&timeout, value)); + return config_set(&timeout, value); else - return (-1); + return -1; } /* }}} int ascent_config */ static int ascent_init(void) /* {{{ */ @@ -474,7 +474,7 @@ static int ascent_init(void) /* {{{ */ if (url == NULL) { WARNING("ascent plugin: ascent_init: No URL configured, " "returning an error."); - return (-1); + return -1; } if (curl != NULL) { @@ -483,7 +483,7 @@ static int ascent_init(void) /* {{{ */ if ((curl = curl_easy_init()) == NULL) { ERROR("ascent plugin: ascent_init: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); @@ -504,7 +504,7 @@ static int ascent_init(void) /* {{{ */ if ((status < 0) || ((size_t)status >= sizeof(credentials))) { ERROR("ascent plugin: ascent_init: Returning an error because the " "credentials have been truncated."); - return (-1); + return -1; } curl_easy_setopt(curl, CURLOPT_USERPWD, credentials); @@ -536,7 +536,7 @@ static int ascent_init(void) /* {{{ */ (long)CDTIME_T_TO_MS(plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int ascent_init */ static int ascent_read(void) /* {{{ */ @@ -545,25 +545,25 @@ static int ascent_read(void) /* {{{ */ if (curl == NULL) { ERROR("ascent plugin: I don't have a CURL object."); - return (-1); + return -1; } if (url == NULL) { ERROR("ascent plugin: No URL has been configured."); - return (-1); + return -1; } ascent_buffer_fill = 0; if (curl_easy_perform(curl) != CURLE_OK) { ERROR("ascent plugin: curl_easy_perform failed: %s", ascent_curl_error); - return (-1); + return -1; } status = ascent_xml(ascent_buffer); if (status != 0) - return (-1); + return -1; else - return (0); + return 0; } /* }}} int ascent_read */ void module_register(void) { @@ -571,5 +571,3 @@ void module_register(void) { plugin_register_init("ascent", ascent_init); plugin_register_read("ascent", ascent_read); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 et fdm=marker : */ diff --git a/src/battery.c b/src/battery.c index 78e96b25..5a0b089f 100644 --- a/src/battery.c +++ b/src/battery.c @@ -147,13 +147,13 @@ static double dict_get_double(CFDictionaryRef dict, kCFStringEncodingASCII); if (key_obj == NULL) { DEBUG("CFStringCreateWithCString (%s) failed.\n", key_string); - return (NAN); + return NAN; } if ((val_obj = CFDictionaryGetValue(dict, key_obj)) == NULL) { DEBUG("CFDictionaryGetValue (%s) failed.", key_string); CFRelease(key_obj); - return (NAN); + return NAN; } CFRelease(key_obj); @@ -166,10 +166,10 @@ static double dict_get_double(CFDictionaryRef dict, } } else { DEBUG("CFGetTypeID (val_obj) = %i", (int)CFGetTypeID(val_obj)); - return (NAN); + return NAN; } - return (val_double); + return val_double; } /* }}} double dict_get_double */ #if HAVE_IOKIT_PS_IOPOWERSOURCES_H @@ -334,7 +334,7 @@ static int battery_read(void) /* {{{ */ if (!isnan(voltage)) battery_submit("0", "voltage", voltage); - return (0); + return 0; } /* }}} int battery_read */ /* #endif HAVE_IOKIT_IOKITLIB_H || HAVE_IOKIT_PS_IOPOWERSOURCES_H */ @@ -371,9 +371,9 @@ static int sysfs_file_to_gauge(char const *dir, /* {{{ */ status = sysfs_file_to_buffer(dir, power_supply, basename, buffer, sizeof(buffer)); if (status != 0) - return (status); + return status; - return (strtogauge(buffer, ret_value)); + return strtogauge(buffer, ret_value); } /* }}} sysfs_file_to_gauge */ static int read_sysfs_capacity(char const *dir, /* {{{ */ @@ -387,21 +387,21 @@ static int read_sysfs_capacity(char const *dir, /* {{{ */ status = sysfs_file_to_gauge(dir, power_supply, "energy_now", &capacity_charged); if (status != 0) - return (status); + return status; status = sysfs_file_to_gauge(dir, power_supply, "energy_full", &capacity_full); if (status != 0) - return (status); + return status; status = sysfs_file_to_gauge(dir, power_supply, "energy_full_design", &capacity_design); if (status != 0) - return (status); + return status; submit_capacity(plugin_instance, capacity_charged * SYSFS_FACTOR, capacity_full * SYSFS_FACTOR, capacity_design * SYSFS_FACTOR); - return (0); + return 0; } /* }}} int read_sysfs_capacity */ static int read_sysfs_callback(char const *dir, /* {{{ */ @@ -418,9 +418,9 @@ static int read_sysfs_callback(char const *dir, /* {{{ */ status = sysfs_file_to_buffer(dir, power_supply, "type", buffer, sizeof(buffer)); if (status != 0) - return (0); + return 0; if (strcasecmp("Battery", buffer) != 0) - return (0); + return 0; (void)sysfs_file_to_buffer(dir, power_supply, "status", buffer, sizeof(buffer)); @@ -451,7 +451,7 @@ static int read_sysfs_callback(char const *dir, /* {{{ */ if (sysfs_file_to_gauge(dir, power_supply, "voltage_now", &v) == 0) battery_submit(plugin_instance, "voltage", v * SYSFS_FACTOR); - return (0); + return 0; } /* }}} int read_sysfs_callback */ static int read_sysfs(void) /* {{{ */ @@ -460,12 +460,12 @@ static int read_sysfs(void) /* {{{ */ int battery_counter = 0; if (access(SYSFS_PATH, R_OK) != 0) - return (ENOENT); + return ENOENT; status = walk_directory(SYSFS_PATH, read_sysfs_callback, /* user_data = */ &battery_counter, /* include hidden */ 0); - return (status); + return status; } /* }}} int read_sysfs */ static int read_acpi_full_capacity(char const *dir, /* {{{ */ @@ -482,7 +482,7 @@ static int read_acpi_full_capacity(char const *dir, /* {{{ */ ssnprintf(filename, sizeof(filename), "%s/%s/info", dir, power_supply); fh = fopen(filename, "r"); if (fh == NULL) - return (errno); + return errno; /* last full capacity: 40090 mWh */ while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -511,7 +511,7 @@ static int read_acpi_full_capacity(char const *dir, /* {{{ */ } fclose(fh); - return (0); + return 0; } /* }}} int read_acpi_full_capacity */ static int read_acpi_callback(char const *dir, /* {{{ */ @@ -536,9 +536,9 @@ static int read_acpi_callback(char const *dir, /* {{{ */ fh = fopen(filename, "r"); if (fh == NULL) { if ((errno == EAGAIN) || (errno == EINTR) || (errno == ENOENT)) - return (0); + return 0; else - return (errno); + return errno; } /* @@ -617,12 +617,12 @@ static int read_acpi(void) /* {{{ */ int battery_counter = 0; if (access(PROC_ACPI_PATH, R_OK) != 0) - return (ENOENT); + return ENOENT; status = walk_directory(PROC_ACPI_PATH, read_acpi_callback, /* user_data = */ &battery_counter, /* include hidden */ 0); - return (status); + return status; } /* }}} int read_acpi */ static int read_pmu(void) /* {{{ */ @@ -654,7 +654,7 @@ static int read_pmu(void) /* {{{ */ else if ((errno == EAGAIN) || (errno == EINTR)) continue; else - return (errno); + return errno; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -682,8 +682,8 @@ static int read_pmu(void) /* {{{ */ } if (i == 0) - return (ENOENT); - return (0); + return ENOENT; + return 0; } /* }}} int read_pmu */ static int battery_read(void) /* {{{ */ @@ -696,20 +696,20 @@ static int battery_read(void) /* {{{ */ DEBUG("battery plugin: Trying sysfs ..."); status = read_sysfs(); if (status == 0) - return (0); + return 0; DEBUG("battery plugin: Trying acpi ..."); status = read_acpi(); if (status == 0) - return (0); + return 0; DEBUG("battery plugin: Trying pmu ..."); status = read_pmu(); if (status == 0) - return (0); + return 0; ERROR("battery plugin: All available input methods failed."); - return (-1); + return -1; } /* }}} int battery_read */ #endif /* KERNEL_LINUX */ @@ -729,7 +729,7 @@ static int battery_config(oconfig_item_t *ci) { child->key); } - return (0); + return 0; } /* }}} int battery_config */ void module_register(void) { diff --git a/src/battery_statefs.c b/src/battery_statefs.c index 4b9baf42..149512b9 100644 --- a/src/battery_statefs.c +++ b/src/battery_statefs.c @@ -87,9 +87,9 @@ int battery_read_statefs(void) { } struct { - char *path; - char *type; - char *type_instance; + const char *path; + const char *type; + const char *type_instance; gauge_t factor; } metrics[] = { {STATEFS_ROOT "Current", "current", NULL, 1e-6}, // from uA to A @@ -115,8 +115,8 @@ int battery_read_statefs(void) { if (success == 0) { ERROR("battery plugin: statefs backend: none of the statistics are " "available"); - return (-1); + return -1; } - return (0); + return 0; } diff --git a/src/bind.c b/src/bind.c index 2e7c49dc..b7308ad8 100644 --- a/src/bind.c +++ b/src/bind.c @@ -271,7 +271,7 @@ static size_t bind_curl_callback(void *buf, size_t size, /* {{{ */ size_t len = size * nmemb; if (len == 0) - return (len); + return len; if ((bind_buffer_fill + len) >= bind_buffer_size) { char *temp; @@ -279,7 +279,7 @@ static size_t bind_curl_callback(void *buf, size_t size, /* {{{ */ temp = realloc(bind_buffer, bind_buffer_fill + len + 1); if (temp == NULL) { ERROR("bind plugin: realloc failed."); - return (0); + return 0; } bind_buffer = temp; bind_buffer_size = bind_buffer_fill + len + 1; @@ -289,7 +289,7 @@ static size_t bind_curl_callback(void *buf, size_t size, /* {{{ */ bind_buffer_fill += len; bind_buffer[bind_buffer_fill] = 0; - return (len); + return len; } /* }}} size_t bind_curl_callback */ /* @@ -301,7 +301,7 @@ static int bind_xml_table_callback(const char *name, value_t value, /* {{{ */ translation_table_ptr_t *table = (translation_table_ptr_t *)user_data; if (table == NULL) - return (-1); + return -1; for (size_t i = 0; i < table->table_length; i++) { if (strcmp(table->table[i].xml_name, name) != 0) @@ -312,7 +312,7 @@ static int bind_xml_table_callback(const char *name, value_t value, /* {{{ */ break; } - return (0); + return 0; } /* }}} int bind_xml_table_callback */ /* @@ -325,12 +325,12 @@ static int bind_xml_list_callback(const char *name, /* {{{ */ list_info_ptr_t *list_info = (list_info_ptr_t *)user_data; if (list_info == NULL) - return (-1); + return -1; submit(current_time, list_info->plugin_instance, list_info->type, /* type instance = */ name, value); - return (0); + return 0; } /* }}} int bind_xml_list_callback */ static int bind_xml_read_derive(xmlDoc *doc, xmlNode *node, /* {{{ */ @@ -342,7 +342,7 @@ static int bind_xml_read_derive(xmlDoc *doc, xmlNode *node, /* {{{ */ str_ptr = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); if (str_ptr == NULL) { ERROR("bind plugin: bind_xml_read_derive: xmlNodeListGetString failed."); - return (-1); + return -1; } status = parse_value(str_ptr, &value, DS_TYPE_DERIVE); @@ -350,12 +350,12 @@ static int bind_xml_read_derive(xmlDoc *doc, xmlNode *node, /* {{{ */ ERROR("bind plugin: Parsing string \"%s\" to derive value failed.", str_ptr); xmlFree(str_ptr); - return (-1); + return -1; } xmlFree(str_ptr); *ret_value = value.derive; - return (0); + return 0; } /* }}} int bind_xml_read_derive */ static int bind_xml_read_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ @@ -366,7 +366,7 @@ static int bind_xml_read_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ str_ptr = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); if (str_ptr == NULL) { ERROR("bind plugin: bind_xml_read_gauge: xmlNodeListGetString failed."); - return (-1); + return -1; } errno = 0; @@ -379,11 +379,11 @@ static int bind_xml_read_gauge(xmlDoc *doc, xmlNode *node, /* {{{ */ ERROR("bind plugin: bind_xml_read_gauge: strtod failed with overflow."); else ERROR("bind plugin: bind_xml_read_gauge: strtod failed."); - return (-1); + return -1; } *ret_value = (gauge_t)value; - return (0); + return 0; } /* }}} int bind_xml_read_gauge */ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ @@ -399,12 +399,12 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ if (xpathObj == NULL) { ERROR("bind plugin: Unable to evaluate XPath expression `%s'.", xpath_expression); - return (-1); + return -1; } if ((xpathObj->nodesetval == NULL) || (xpathObj->nodesetval->nodeNr < 1)) { xmlXPathFreeObject(xpathObj); - return (-1); + return -1; } if (xpathObj->nodesetval->nodeNr != 1) { @@ -419,14 +419,14 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ ERROR("bind plugin: bind_xml_read_timestamp: " "node->xmlChildrenNode == NULL"); xmlXPathFreeObject(xpathObj); - return (-1); + return -1; } str_ptr = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); if (str_ptr == NULL) { ERROR("bind plugin: bind_xml_read_timestamp: xmlNodeListGetString failed."); xmlXPathFreeObject(xpathObj); - return (-1); + return -1; } tmp = strptime(str_ptr, "%Y-%m-%dT%T", &tm); @@ -434,7 +434,7 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ if (tmp == NULL) { ERROR("bind plugin: bind_xml_read_timestamp: strptime failed."); xmlXPathFreeObject(xpathObj); - return (-1); + return -1; } #if HAVE_TIMEGM @@ -443,7 +443,7 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ char errbuf[1024]; ERROR("bind plugin: timegm() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } *ret_value = t; #else @@ -452,7 +452,7 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ char errbuf[1024]; ERROR("bind plugin: mktime() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* mktime assumes that tm is local time. Luckily, it also sets timezone to * the offset used for the conversion, and we undo the conversion to convert @@ -461,7 +461,7 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ #endif xmlXPathFreeObject(xpathObj); - return (0); + return 0; } /* }}} int bind_xml_read_timestamp */ /* @@ -485,7 +485,7 @@ static int bind_parse_generic_name_value(const char *xpath_expression, /* {{{ */ if (xpathObj == NULL) { ERROR("bind plugin: Unable to evaluate XPath expression `%s'.", xpath_expression); - return (-1); + return -1; } num_entries = 0; @@ -540,7 +540,7 @@ static int bind_parse_generic_name_value(const char *xpath_expression, /* {{{ */ xmlXPathFreeObject(xpathObj); - return (0); + return 0; } /* }}} int bind_parse_generic_name_value */ /* @@ -566,7 +566,7 @@ static int bind_parse_generic_value_list(const char *xpath_expression, /* {{{ */ if (xpathObj == NULL) { ERROR("bind plugin: Unable to evaluate XPath expression `%s'.", xpath_expression); - return (-1); + return -1; } num_entries = 0; @@ -603,7 +603,7 @@ static int bind_parse_generic_value_list(const char *xpath_expression, /* {{{ */ xmlXPathFreeObject(xpathObj); - return (0); + return 0; } /* }}} int bind_parse_generic_value_list */ /* @@ -628,7 +628,7 @@ static int bind_parse_generic_name_attr_value_list( if (xpathObj == NULL) { ERROR("bind plugin: Unable to evaluate XPath expression `%s'.", xpath_expression); - return (-1); + return -1; } num_entries = 0; @@ -675,7 +675,7 @@ static int bind_parse_generic_name_attr_value_list( xmlXPathFreeObject(xpathObj); - return (0); + return 0; } /* }}} int bind_parse_generic_name_attr_value_list */ static int bind_xml_stats_handle_zone(int version, xmlDoc *doc, /* {{{ */ @@ -698,7 +698,7 @@ static int bind_xml_stats_handle_zone(int version, xmlDoc *doc, /* {{{ */ path_obj = xmlXPathEvalExpression(BAD_CAST "name", path_ctx); if (path_obj == NULL) { ERROR("bind plugin: xmlXPathEvalExpression failed."); - return (-1); + return -1; } for (int i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); @@ -713,7 +713,7 @@ static int bind_xml_stats_handle_zone(int version, xmlDoc *doc, /* {{{ */ if (zone_name == NULL) { ERROR("bind plugin: Could not determine zone name."); - return (-1); + return -1; } for (j = 0; j < view->zones_num; j++) { @@ -725,7 +725,7 @@ static int bind_xml_stats_handle_zone(int version, xmlDoc *doc, /* {{{ */ zone_name = NULL; if (j >= view->zones_num) - return (0); + return 0; zone_name = view->zones[j]; @@ -761,7 +761,7 @@ static int bind_xml_stats_handle_zone(int version, xmlDoc *doc, /* {{{ */ } } /* }}} */ - return (0); + return 0; } /* }}} int bind_xml_stats_handle_zone */ static int bind_xml_stats_search_zones(int version, xmlDoc *doc, /* {{{ */ @@ -773,14 +773,14 @@ static int bind_xml_stats_search_zones(int version, xmlDoc *doc, /* {{{ */ zone_path_context = xmlXPathNewContext(doc); if (zone_path_context == NULL) { ERROR("bind plugin: xmlXPathNewContext failed."); - return (-1); + return -1; } zone_nodes = xmlXPathEvalExpression(BAD_CAST "zones/zone", path_ctx); if (zone_nodes == NULL) { ERROR("bind plugin: Cannot find any tags."); xmlXPathFreeContext(zone_path_context); - return (-1); + return -1; } for (int i = 0; i < zone_nodes->nodesetval->nodeNr; i++) { @@ -795,7 +795,7 @@ static int bind_xml_stats_search_zones(int version, xmlDoc *doc, /* {{{ */ xmlXPathFreeObject(zone_nodes); xmlXPathFreeContext(zone_path_context); - return (0); + return 0; } /* }}} int bind_xml_stats_search_zones */ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ @@ -810,7 +810,7 @@ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ if (view_name == NULL) { ERROR("bind plugin: Could not determine view name."); - return (-1); + return -1; } for (j = 0; j < views_num; j++) { @@ -825,7 +825,7 @@ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ path_obj = xmlXPathEvalExpression(BAD_CAST "name", path_ctx); if (path_obj == NULL) { ERROR("bind plugin: xmlXPathEvalExpression failed."); - return (-1); + return -1; } for (int i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); @@ -839,7 +839,7 @@ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ if (view_name == NULL) { ERROR("bind plugin: Could not determine view name."); xmlXPathFreeObject(path_obj); - return (-1); + return -1; } for (j = 0; j < views_num; j++) { @@ -855,7 +855,7 @@ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ } if (j >= views_num) - return (0); + return 0; view = views + j; @@ -927,7 +927,7 @@ static int bind_xml_stats_handle_view(int version, xmlDoc *doc, /* {{{ */ bind_xml_stats_search_zones(version, doc, path_ctx, node, view, current_time); - return (0); + return 0; } /* }}} int bind_xml_stats_handle_view */ static int bind_xml_stats_search_views(int version, xmlDoc *doc, /* {{{ */ @@ -940,14 +940,14 @@ static int bind_xml_stats_search_views(int version, xmlDoc *doc, /* {{{ */ view_path_context = xmlXPathNewContext(doc); if (view_path_context == NULL) { ERROR("bind plugin: xmlXPathNewContext failed."); - return (-1); + return -1; } view_nodes = xmlXPathEvalExpression(BAD_CAST "views/view", xpathCtx); if (view_nodes == NULL) { ERROR("bind plugin: Cannot find any tags."); xmlXPathFreeContext(view_path_context); - return (-1); + return -1; } for (int i = 0; i < view_nodes->nodesetval->nodeNr; i++) { @@ -964,7 +964,7 @@ static int bind_xml_stats_search_views(int version, xmlDoc *doc, /* {{{ */ xmlXPathFreeObject(view_nodes); xmlXPathFreeContext(view_path_context); - return (0); + return 0; } /* }}} int bind_xml_stats_search_views */ static void bind_xml_stats_v3(xmlDoc *doc, /* {{{ */ @@ -1267,7 +1267,7 @@ static int bind_xml_stats(int version, xmlDoc *doc, /* {{{ */ ¤t_time); if (status != 0) { ERROR("bind plugin: Reading `server/current-time' failed."); - return (-1); + return -1; } DEBUG("bind plugin: Current server time is %i.", (int)current_time); @@ -1316,14 +1316,14 @@ static int bind_xml(const char *data) /* {{{ */ doc = xmlParseMemory(data, strlen(data)); if (doc == NULL) { ERROR("bind plugin: xmlParseMemory failed."); - return (-1); + return -1; } xpathCtx = xmlXPathNewContext(doc); if (xpathCtx == NULL) { ERROR("bind plugin: xmlXPathNewContext failed."); xmlFreeDoc(doc); - return (-1); + return -1; } // @@ -1375,7 +1375,7 @@ static int bind_xml(const char *data) /* {{{ */ xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); - return (ret); + return ret; } // @@ -1387,13 +1387,13 @@ static int bind_xml(const char *data) /* {{{ */ ERROR("bind plugin: Cannot find the tag."); xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); - return (-1); + return -1; } else if (xpathObj->nodesetval == NULL) { ERROR("bind plugin: xmlXPathEvalExpression failed."); xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); - return (-1); + return -1; } for (int i = 0; i < xpathObj->nodesetval->nodeNr; i++) { @@ -1441,7 +1441,7 @@ static int bind_xml(const char *data) /* {{{ */ xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); - return (ret); + return ret; } /* }}} int bind_xml */ static int bind_config_set_bool(const char *name, int *var, /* {{{ */ @@ -1450,7 +1450,7 @@ static int bind_config_set_bool(const char *name, int *var, /* {{{ */ WARNING("bind plugin: The `%s' option needs " "exactly one boolean argument.", name); - return (-1); + return -1; } if (ci->values[0].value.boolean) @@ -1467,24 +1467,24 @@ static int bind_config_add_view_zone(cb_view_t *view, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("bind plugin: The `Zone' option needs " "exactly one string argument."); - return (-1); + return -1; } tmp = realloc(view->zones, sizeof(char *) * (view->zones_num + 1)); if (tmp == NULL) { ERROR("bind plugin: realloc failed."); - return (-1); + return -1; } view->zones = tmp; view->zones[view->zones_num] = strdup(ci->values[0].value.string); if (view->zones[view->zones_num] == NULL) { ERROR("bind plugin: strdup failed."); - return (-1); + return -1; } view->zones_num++; - return (0); + return 0; } /* }}} int bind_config_add_view_zone */ static int bind_config_add_view(oconfig_item_t *ci) /* {{{ */ @@ -1493,13 +1493,13 @@ static int bind_config_add_view(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("bind plugin: `View' blocks need exactly one string argument."); - return (-1); + return -1; } tmp = realloc(views, sizeof(*views) * (views_num + 1)); if (tmp == NULL) { ERROR("bind plugin: realloc failed."); - return (-1); + return -1; } views = tmp; tmp = views + views_num; @@ -1515,7 +1515,7 @@ static int bind_config_add_view(oconfig_item_t *ci) /* {{{ */ if (tmp->name == NULL) { ERROR("bind plugin: strdup failed."); sfree(views); - return (-1); + return -1; } for (int i = 0; i < ci->children_num; i++) { @@ -1537,7 +1537,7 @@ static int bind_config_add_view(oconfig_item_t *ci) /* {{{ */ } /* for (i = 0; i < ci->children_num; i++) */ views_num++; - return (0); + return 0; } /* }}} int bind_config_add_view */ static int bind_config(oconfig_item_t *ci) /* {{{ */ @@ -1550,7 +1550,7 @@ static int bind_config(oconfig_item_t *ci) /* {{{ */ (child->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("bind plugin: The `Url' option needs " "exactly one string argument."); - return (-1); + return -1; } sfree(url); @@ -1580,18 +1580,18 @@ static int bind_config(oconfig_item_t *ci) /* {{{ */ } } - return (0); + return 0; } /* }}} int bind_config */ static int bind_init(void) /* {{{ */ { if (curl != NULL) - return (0); + return 0; curl = curl_easy_init(); if (curl == NULL) { ERROR("bind plugin: bind_init: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); @@ -1607,7 +1607,7 @@ static int bind_init(void) /* {{{ */ plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int bind_init */ static int bind_read(void) /* {{{ */ @@ -1616,20 +1616,20 @@ static int bind_read(void) /* {{{ */ if (curl == NULL) { ERROR("bind plugin: I don't have a CURL object."); - return (-1); + return -1; } bind_buffer_fill = 0; if (curl_easy_perform(curl) != CURLE_OK) { ERROR("bind plugin: curl_easy_perform failed: %s", bind_curl_error); - return (-1); + return -1; } status = bind_xml(bind_buffer); if (status != 0) - return (-1); + return -1; else - return (0); + return 0; } /* }}} int bind_read */ static int bind_shutdown(void) /* {{{ */ @@ -1639,7 +1639,7 @@ static int bind_shutdown(void) /* {{{ */ curl = NULL; } - return (0); + return 0; } /* }}} int bind_shutdown */ void module_register(void) { @@ -1648,5 +1648,3 @@ void module_register(void) { plugin_register_read("bind", bind_read); plugin_register_shutdown("bind", bind_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 et fdm=marker : */ diff --git a/src/ceph.c b/src/ceph.c index 4e435b3e..c2284cb3 100644 --- a/src/ceph.c +++ b/src/ceph.c @@ -634,7 +634,7 @@ static int cc_add_daemon_config(oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("ceph plugin: `Daemon' blocks need exactly one string " "argument."); - return (-1); + return -1; } ret = cc_handle_str(ci, cd.name, DATA_MAX_NAME_LEN); @@ -1446,4 +1446,3 @@ void module_register(void) { plugin_register_read("ceph", ceph_read); plugin_register_shutdown("ceph", ceph_shutdown); } -/* vim: set sw=4 sts=4 et : */ diff --git a/src/ceph_test.c b/src/ceph_test.c index 3da4098c..2f65b509 100644 --- a/src/ceph_test.c +++ b/src/ceph_test.c @@ -187,5 +187,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/cgroups.c b/src/cgroups.c index 3f7d4f41..9cb7cf95 100644 --- a/src/cgroups.c +++ b/src/cgroups.c @@ -61,19 +61,19 @@ static int read_cpuacct_procs(const char *dirname, char const *cgroup_name, FILE *fh; if (ignorelist_match(il_cgroup, cgroup_name)) - return (0); + return 0; ssnprintf(abs_path, sizeof(abs_path), "%s/%s", dirname, cgroup_name); status = lstat(abs_path, &statbuf); if (status != 0) { ERROR("cgroups plugin: stat (\"%s\") failed.", abs_path); - return (-1); + return -1; } /* We are only interested in directories, so skip everything else. */ if (!S_ISDIR(statbuf.st_mode)) - return (0); + return 0; ssnprintf(abs_path, sizeof(abs_path), "%s/%s/cpuacct.stat", dirname, cgroup_name); @@ -82,7 +82,7 @@ static int read_cpuacct_procs(const char *dirname, char const *cgroup_name, char errbuf[1024]; ERROR("cgroups plugin: fopen (\"%s\") failed: %s", abs_path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buf, sizeof(buf), fh) != NULL) { @@ -124,7 +124,7 @@ static int read_cpuacct_procs(const char *dirname, char const *cgroup_name, } fclose(fh); - return (0); + return 0; } /* int read_cpuacct_procs */ /* @@ -143,24 +143,24 @@ static int read_cpuacct_root(const char *dirname, const char *filename, status = lstat(abs_path, &statbuf); if (status != 0) { ERROR("cgroups plugin: stat (%s) failed.", abs_path); - return (-1); + return -1; } if (S_ISDIR(statbuf.st_mode)) { status = walk_directory(abs_path, read_cpuacct_procs, /* user_data = */ NULL, /* include_hidden = */ 0); - return (status); + return status; } - return (0); + return 0; } static int cgroups_init(void) { if (il_cgroup == NULL) il_cgroup = ignorelist_create(1); - return (0); + return 0; } static int cgroups_config(const char *key, const char *value) { @@ -168,17 +168,17 @@ static int cgroups_config(const char *key, const char *value) { if (strcasecmp(key, "CGroup") == 0) { if (ignorelist_add(il_cgroup, value)) - return (1); - return (0); + return 1; + return 0; } else if (strcasecmp(key, "IgnoreSelected") == 0) { if (IS_TRUE(value)) ignorelist_set_invert(il_cgroup, 0); else ignorelist_set_invert(il_cgroup, 1); - return (0); + return 0; } - return (-1); + return -1; } static int cgroups_read(void) { @@ -187,7 +187,7 @@ static int cgroups_read(void) { if (cu_mount_getlist(&mnt_list) == NULL) { ERROR("cgroups plugin: cu_mount_getlist failed."); - return (-1); + return -1; } for (cu_mount_t *mnt_ptr = mnt_list; mnt_ptr != NULL; @@ -212,10 +212,10 @@ static int cgroups_read(void) { if (!cgroup_found) { WARNING("cgroups plugin: Unable to find cgroup " "mount-point with the \"cpuacct\" option."); - return (-1); + return -1; } - return (0); + return 0; } /* int cgroup_read */ void module_register(void) { diff --git a/src/chrony.c b/src/chrony.c index 11310b19..a5e85a8a 100644 --- a/src/chrony.c +++ b/src/chrony.c @@ -77,6 +77,7 @@ static uint32_t g_chrony_seq_is_initialized; #define IPADDR_INET4 1 #define IPADDR_INET6 2 #define IPV6_STR_MAX_SIZE (8 * 4 + 7 + 1) +#define MODE_REFCLOCK 2 typedef enum { PKT_TYPE_CMD_REQUEST = 1, PKT_TYPE_CMD_REPLY = 2 } ePacketType; @@ -185,13 +186,11 @@ typedef struct ATTRIB_PACKED { uint8_t ip6[16]; } addr; uint16_t f_family; + uint16_t padding; } tChrony_IPAddr; typedef struct ATTRIB_PACKED { tChrony_IPAddr addr; - uint16_t - dummy; /* FIXME: Strange dummy space. Needed on gcc 4.8.3/clang 3.4.1 on - x86_64 */ int16_t f_poll; /* 2^f_poll = Time between polls (s) */ uint16_t f_stratum; /* Remote clock stratum */ uint16_t f_state; /* 0 = RPY_SD_ST_SYNC, 1 = RPY_SD_ST_UNREACH, 2 = @@ -212,9 +211,6 @@ typedef struct ATTRIB_PACKED { typedef struct ATTRIB_PACKED { uint32_t f_ref_id; tChrony_IPAddr addr; - uint16_t - dummy; /* FIXME: Strange dummy space. Needed on gcc 4.8.3/clang 3.4.1 on - x86_64 */ uint32_t f_n_samples; /* Number of measurements done */ uint32_t f_n_runs; /* How many measurements to come */ uint32_t f_span_seconds; /* For how long we're measuring */ @@ -229,9 +225,6 @@ typedef struct ATTRIB_PACKED { typedef struct ATTRIB_PACKED { uint32_t f_ref_id; tChrony_IPAddr addr; - uint16_t - dummy; /* FIXME: Strange dummy space. Needed on gcc 4.8.3/clang 3.4.1 on - x86_64 */ uint16_t f_stratum; uint16_t f_leap_status; tTimeval f_ref_time; @@ -354,6 +347,19 @@ static char *niptoha(const tChrony_IPAddr *addr, char *p_buf, return p_buf; } +static void nreftostr(uint32_t nrefid, char *p_buf, size_t p_buf_size) { + int i, j, c; + + for (i = j = 0; i < 4; i++) { + c = ntohl(nrefid) << i * 8 >> 24; + if (!isalnum(c) || j + 1 >= p_buf_size) + continue; + p_buf[j++] = c; + } + if (j < p_buf_size) + p_buf[j] = '\0'; +} + static int chrony_set_timeout(void) { /* Set the socket's timeout to g_chrony_timeout; a value of 0 signals * infinite timeout */ @@ -584,9 +590,10 @@ static double ntohf(tFloat p_float) { uint32_t uval; uval = ntohl(p_float.value); - exp = (uval >> FLOAT_COEF_BITS) - FLOAT_COEF_BITS; + exp = (uval >> FLOAT_COEF_BITS); if (exp >= 1 << (FLOAT_EXP_BITS - 1)) exp -= 1 << FLOAT_EXP_BITS; + exp -= FLOAT_COEF_BITS; /* coef = (x << FLOAT_EXP_BITS) >> FLOAT_EXP_BITS; */ coef = uval % (1U << FLOAT_COEF_BITS); @@ -832,15 +839,14 @@ static int chrony_request_sources_count(unsigned int *p_count) { return CHRONY_RC_OK; } -static int chrony_request_source_data(int p_src_idx, int *p_is_reachable) { +static int chrony_request_source_data(int p_src_idx, char *src_addr, + size_t addr_size, int *p_is_reachable) { /* Perform Source data request for source #p_src_idx */ int rc; size_t chrony_resp_size; tChrony_Request chrony_req; tChrony_Response chrony_resp; - char src_addr[IPV6_STR_MAX_SIZE] = {0}; - chrony_init_req(&chrony_req); chrony_req.body.source_data.f_index = htonl(p_src_idx); rc = chrony_query(REQ_SOURCE_DATA, &chrony_req, &chrony_resp, @@ -851,7 +857,11 @@ static int chrony_request_source_data(int p_src_idx, int *p_is_reachable) { return rc; } - niptoha(&chrony_resp.body.source_data.addr, src_addr, sizeof(src_addr)); + if (ntohs(chrony_resp.body.source_data.f_mode) == MODE_REFCLOCK) + nreftostr(chrony_resp.body.source_data.addr.addr.ip4, src_addr, addr_size); + else + niptoha(&chrony_resp.body.source_data.addr, src_addr, addr_size); + DEBUG(PLUGIN_NAME ": Source[%d] data: .addr = %s, .poll = %u, .stratum = %u, " ".state = %u, .mode = %u, .flags = %u, .reach = %u, " ".latest_meas_ago = %u, .orig_latest_meas = %f, " @@ -881,26 +891,26 @@ static int chrony_request_source_data(int p_src_idx, int *p_is_reachable) { chrony_push_data_valid("clock_reachability", src_addr, is_reachable, ntohs(chrony_resp.body.source_data.f_reachability)); chrony_push_data_valid("clock_last_meas", src_addr, is_reachable, - ntohs(chrony_resp.body.source_data.f_since_sample)); + ntohl(chrony_resp.body.source_data.f_since_sample)); + chrony_push_data_valid( + "time_offset", src_addr, is_reachable, + ntohf(chrony_resp.body.source_data.f_origin_latest_meas)); return CHRONY_RC_OK; } -static int chrony_request_source_stats(int p_src_idx, +static int chrony_request_source_stats(int p_src_idx, const char *src_addr, const int *p_is_reachable) { /* Perform Source stats request for source #p_src_idx */ int rc; size_t chrony_resp_size; tChrony_Request chrony_req; tChrony_Response chrony_resp; - double skew_ppm, frequency_error, time_offset; - - char src_addr[IPV6_STR_MAX_SIZE] = {0}; + double skew_ppm, frequency_error; if (*p_is_reachable == 0) { skew_ppm = 0; frequency_error = 0; - time_offset = 0; } else { chrony_init_req(&chrony_req); chrony_req.body.source_stats.f_index = htonl(p_src_idx); @@ -915,9 +925,7 @@ static int chrony_request_source_stats(int p_src_idx, skew_ppm = ntohf(chrony_resp.body.source_stats.f_skew_ppm); frequency_error = ntohf(chrony_resp.body.source_stats.f_rtc_gain_rate_ppm); - time_offset = ntohf(chrony_resp.body.source_stats.f_est_offset); - niptoha(&chrony_resp.body.source_stats.addr, src_addr, sizeof(src_addr)); DEBUG(PLUGIN_NAME ": Source[%d] stat: .addr = %s, .ref_id= %u, .n_samples = %u, " ".n_runs = %u, .span_seconds = %u, .rtc_seconds_fast = %f, " @@ -928,7 +936,8 @@ static int chrony_request_source_stats(int p_src_idx, ntohl(chrony_resp.body.source_stats.f_n_runs), ntohl(chrony_resp.body.source_stats.f_span_seconds), ntohf(chrony_resp.body.source_stats.f_rtc_seconds_fast), - frequency_error, skew_ppm, time_offset, + frequency_error, skew_ppm, + ntohf(chrony_resp.body.source_stats.f_est_offset), ntohf(chrony_resp.body.source_stats.f_est_offset_err)); } /* if (*is_reachable) */ @@ -937,8 +946,6 @@ static int chrony_request_source_stats(int p_src_idx, chrony_push_data_valid("clock_skew_ppm", src_addr, *p_is_reachable, skew_ppm); chrony_push_data_valid("frequency_error", src_addr, *p_is_reachable, frequency_error); /* unit: ppm */ - chrony_push_data_valid("time_offset", src_addr, *p_is_reachable, - time_offset); /* unit: s */ return CHRONY_RC_OK; } @@ -968,12 +975,14 @@ static int chrony_read(void) { return rc; for (unsigned int now_src = 0; now_src < n_sources; ++now_src) { + char src_addr[IPV6_STR_MAX_SIZE] = {0}; int is_reachable; - rc = chrony_request_source_data(now_src, &is_reachable); + rc = chrony_request_source_data(now_src, src_addr, sizeof(src_addr), + &is_reachable); if (rc != CHRONY_RC_OK) return rc; - rc = chrony_request_source_stats(now_src, &is_reachable); + rc = chrony_request_source_stats(now_src, src_addr, &is_reachable); if (rc != CHRONY_RC_OK) return rc; } diff --git a/src/collectd-nagios.c b/src/collectd-nagios.c index 993541d8..4c54dad4 100644 --- a/src/collectd-nagios.c +++ b/src/collectd-nagios.c @@ -118,7 +118,7 @@ cn_strdup(const char *str) /* {{{ */ ret = (char *)malloc(strsize); if (ret != NULL) memcpy(ret, str, strsize); - return (ret); + return ret; } /* }}} char *cn_strdup */ static int filter_ds(size_t *values_num, double **values, @@ -127,19 +127,19 @@ static int filter_ds(size_t *values_num, double **values, char **new_names; if (match_ds_g == NULL) - return (RET_OKAY); + return RET_OKAY; new_values = (gauge_t *)calloc(match_ds_num_g, sizeof(*new_values)); if (new_values == NULL) { fprintf(stderr, "calloc failed: %s\n", strerror(errno)); - return (RET_UNKNOWN); + return RET_UNKNOWN; } new_names = (char **)calloc(match_ds_num_g, sizeof(*new_names)); if (new_names == NULL) { fprintf(stderr, "calloc failed: %s\n", strerror(errno)); free(new_values); - return (RET_UNKNOWN); + return RET_UNKNOWN; } for (size_t i = 0; i < match_ds_num_g; i++) { @@ -153,7 +153,7 @@ static int filter_ds(size_t *values_num, double **values, for (j = 0; j < i; j++) free(new_names[j]); free(new_names); - return (RET_UNKNOWN); + return RET_UNKNOWN; } for (j = 0; j < *values_num; j++) @@ -166,7 +166,7 @@ static int filter_ds(size_t *values_num, double **values, for (j = 0; j <= i; j++) free(new_names[j]); free(new_names); - return (RET_CRITICAL); + return RET_CRITICAL; } new_values[i] = (*values)[j]; @@ -180,7 +180,7 @@ static int filter_ds(size_t *values_num, double **values, *values = new_values; *values_names = new_names; *values_num = match_ds_num_g; - return (RET_OKAY); + return RET_OKAY; } /* int filter_ds */ static void parse_range(char *string, range_t *range) { @@ -227,7 +227,7 @@ static int match_range(range_t *range, double value) { if (!isnan(range->max) && (range->max < value)) ret = 1; - return (((ret - range->invert) == 0) ? 0 : 1); + return ((ret - range->invert) == 0) ? 0 : 1; } /* int match_range */ __attribute__((noreturn)) static void usage(const char *name) { @@ -279,7 +279,7 @@ static int do_listval(lcc_connection_t *connection) { printf("UNKNOWN: %s\n", lcc_strerror(connection)); if (ret_ident != NULL) free(ret_ident); - return (RET_UNKNOWN); + return RET_UNKNOWN; } status = lcc_sort_identifiers(connection, ret_ident, ret_ident_num); @@ -287,7 +287,7 @@ static int do_listval(lcc_connection_t *connection) { printf("UNKNOWN: %s\n", lcc_strerror(connection)); if (ret_ident != NULL) free(ret_ident); - return (RET_UNKNOWN); + return RET_UNKNOWN; } for (size_t i = 0; i < ret_ident_num; ++i) { @@ -322,7 +322,7 @@ static int do_listval(lcc_connection_t *connection) { free(ret_ident); free(hostname); - return (RET_OKAY); + return RET_OKAY; } /* int do_listval */ static int do_check_con_none(size_t values_num, double *values, @@ -349,7 +349,7 @@ static int do_check_con_none(size_t values_num, double *values, if ((num_critical == 0) && (num_warning == 0) && (num_okay == 0)) { printf("WARNING: No defined values found\n"); - return (RET_WARNING); + return RET_WARNING; } else if ((num_critical == 0) && (num_warning == 0)) { status_str = "OKAY"; status_code = RET_OKAY; @@ -370,7 +370,7 @@ static int do_check_con_none(size_t values_num, double *values, } printf("\n"); - return (status_code); + return status_code; } /* int do_check_con_none */ static int do_check_con_average(size_t values_num, double *values, @@ -389,7 +389,7 @@ static int do_check_con_average(size_t values_num, double *values, continue; printf("CRITICAL: Data source \"%s\" is NaN\n", values_names[i]); - return (RET_CRITICAL); + return RET_CRITICAL; } total += values[i]; @@ -398,7 +398,7 @@ static int do_check_con_average(size_t values_num, double *values, if (total_num == 0) { printf("WARNING: No defined values found\n"); - return (RET_WARNING); + return RET_WARNING; } average = total / total_num; @@ -419,7 +419,7 @@ static int do_check_con_average(size_t values_num, double *values, printf(" %s=%f;;;;", values_names[i], values[i]); printf("\n"); - return (status_code); + return status_code; } /* int do_check_con_average */ static int do_check_con_sum(size_t values_num, double *values, @@ -437,7 +437,7 @@ static int do_check_con_sum(size_t values_num, double *values, continue; printf("CRITICAL: Data source \"%s\" is NaN\n", values_names[i]); - return (RET_CRITICAL); + return RET_CRITICAL; } total += values[i]; @@ -446,7 +446,7 @@ static int do_check_con_sum(size_t values_num, double *values, if (total_num == 0) { printf("WARNING: No defined values found\n"); - return (RET_WARNING); + return RET_WARNING; } if (match_range(&range_critical_g, total) != 0) { @@ -465,7 +465,7 @@ static int do_check_con_sum(size_t values_num, double *values, printf(" %s=%f;;;;", values_names[i], values[i]); printf("\n"); - return (status_code); + return status_code; } /* int do_check_con_sum */ static int do_check_con_percentage(size_t values_num, double *values, @@ -478,7 +478,7 @@ static int do_check_con_percentage(size_t values_num, double *values, if ((values_num < 1) || (isnan(values[0]))) { printf("WARNING: The first value is not defined\n"); - return (RET_WARNING); + return RET_WARNING; } for (size_t i = 0; i < values_num; i++) { @@ -487,7 +487,7 @@ static int do_check_con_percentage(size_t values_num, double *values, continue; printf("CRITICAL: Data source \"%s\" is NaN\n", values_names[i]); - return (RET_CRITICAL); + return RET_CRITICAL; } sum += values[i]; @@ -495,7 +495,7 @@ static int do_check_con_percentage(size_t values_num, double *values, if (sum == 0.0) { printf("WARNING: Values sum up to zero\n"); - return (RET_WARNING); + return RET_WARNING; } percentage = 100.0 * values[0] / sum; @@ -514,7 +514,7 @@ static int do_check_con_percentage(size_t values_num, double *values, printf("%s: %lf percent |", status_str, percentage); for (size_t i = 0; i < values_num; i++) printf(" %s=%lf;;;;", values_names[i], values[i]); - return (status_code); + return status_code; } /* int do_check_con_percentage */ static int do_check(lcc_connection_t *connection) { @@ -533,7 +533,7 @@ static int do_check(lcc_connection_t *connection) { printf("ERROR: Creating an identifier failed: %s.\n", lcc_strerror(connection)); LCC_DESTROY(connection); - return (RET_CRITICAL); + return RET_CRITICAL; } status = lcc_getval(connection, &ident, &values_num, &values, &values_names); @@ -541,14 +541,14 @@ static int do_check(lcc_connection_t *connection) { printf("ERROR: Retrieving values from the daemon failed: %s.\n", lcc_strerror(connection)); LCC_DESTROY(connection); - return (RET_CRITICAL); + return RET_CRITICAL; } LCC_DESTROY(connection); status = filter_ds(&values_num, &values, &values_names); if (status != RET_OKAY) - return (status); + return status; status = RET_UNKNOWN; if (consolitation_g == CON_NONE) @@ -566,7 +566,7 @@ static int do_check(lcc_connection_t *connection) { free(values_names[i]); free(values_names); - return (status); + return status; } /* int do_check */ int main(int argc, char **argv) { @@ -625,13 +625,13 @@ int main(int argc, char **argv) { tmp = realloc(match_ds_g, (match_ds_num_g + 1) * sizeof(char *)); if (tmp == NULL) { fprintf(stderr, "realloc failed: %s\n", strerror(errno)); - return (RET_UNKNOWN); + return RET_UNKNOWN; } match_ds_g = tmp; match_ds_g[match_ds_num_g] = cn_strdup(optarg); if (match_ds_g[match_ds_num_g] == NULL) { fprintf(stderr, "cn_strdup failed: %s\n", strerror(errno)); - return (RET_UNKNOWN); + return RET_UNKNOWN; } match_ds_num_g++; break; @@ -657,11 +657,11 @@ int main(int argc, char **argv) { status = lcc_connect(address, &connection); if (status != 0) { printf("ERROR: Connecting to daemon at %s failed.\n", socket_file_g); - return (RET_CRITICAL); + return RET_CRITICAL; } if (0 == strcasecmp(value_string_g, "LIST")) - return (do_listval(connection)); + return do_listval(connection); - return (do_check(connection)); + return do_check(connection); } /* int main */ diff --git a/src/collectd-python.pod b/src/collectd-python.pod index 16b26afa..6a83b97f 100644 --- a/src/collectd-python.pod +++ b/src/collectd-python.pod @@ -717,7 +717,7 @@ dispatched by the python plugin after upgrades. =item * Not all aspects of the collectd API are accessible from Python. This includes -but is not limited to filters and data sets. +but is not limited to filters. =back diff --git a/src/collectd-snmp.pod b/src/collectd-snmp.pod index c246f1da..edb95060 100644 --- a/src/collectd-snmp.pod +++ b/src/collectd-snmp.pod @@ -44,7 +44,7 @@ collectd-snmp - Documentation of collectd's C Collect "std_traffic" "hr_users" - Address "192.168.0.7" + Address "192.168.0.7:165" Version 3 SecurityLevel "authPriv" Username "cosmo" @@ -55,7 +55,7 @@ collectd-snmp - Documentation of collectd's C Collect "std_traffic" - Address "192.168.0.3" + Address "tcp:192.168.0.3" Version 1 Community "more_communities" Collect "powerplus_voltge_input" @@ -228,7 +228,8 @@ stored by collectd. =item B
I|I -Set the address to connect to. +Set the address to connect to. Address may include transport specifier and/or +port number. =item B B<1>|B<2>|B<3> diff --git a/src/collectd-tg.c b/src/collectd-tg.c index 7ded64dd..d8b2ea19 100644 --- a/src/collectd-tg.c +++ b/src/collectd-tg.c @@ -107,7 +107,7 @@ static double dtime(void) /* {{{ */ if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) perror("clock_gettime"); - return ((double)ts.tv_sec) + (((double)ts.tv_nsec) / 1e9); + return (double)ts.tv_sec + (double)ts.tv_nsec / 1e9; } /* }}} double dtime */ #else /* Work around for Mac OS X which doesn't have clock_gettime(2). *sigh* */ @@ -118,7 +118,7 @@ static double dtime(void) /* {{{ */ if (gettimeofday(&tv, /* timezone = */ NULL) != 0) perror("gettimeofday"); - return ((double)tv.tv_sec) + (((double)tv.tv_usec) / 1e6); + return (double)tv.tv_sec + ((double)tv.tv_usec) / 1e6; } /* }}} double dtime */ #endif @@ -128,11 +128,11 @@ static int compare_time(const void *v0, const void *v1) /* {{{ */ const lcc_value_list_t *vl1 = v1; if (vl0->time < vl1->time) - return (-1); + return -1; else if (vl0->time > vl1->time) - return (1); + return 1; else - return (0); + return 0; } /* }}} int compare_time */ static int get_boundet_random(int min, int max) /* {{{ */ @@ -140,14 +140,13 @@ static int get_boundet_random(int min, int max) /* {{{ */ int range; if (min >= max) - return (-1); + return -1; if (min == (max - 1)) - return (min); + return min; range = max - min; - return (min + ((int)(((double)range) * ((double)random()) / - (((double)RAND_MAX) + 1.0)))); + return min + ((int)(((double)range) * ((double)random()) / (((double)RAND_MAX) + 1.0))); } /* }}} int get_boundet_random */ static lcc_value_list_t *create_value_list(void) /* {{{ */ @@ -158,14 +157,14 @@ static lcc_value_list_t *create_value_list(void) /* {{{ */ vl = calloc(1, sizeof(*vl)); if (vl == NULL) { fprintf(stderr, "calloc failed.\n"); - return (NULL); + return NULL; } vl->values = calloc(/* nmemb = */ 1, sizeof(*vl->values)); if (vl->values == NULL) { fprintf(stderr, "calloc failed.\n"); free(vl); - return (NULL); + return NULL; } vl->values_types = calloc(/* nmemb = */ 1, sizeof(*vl->values_types)); @@ -173,7 +172,7 @@ static lcc_value_list_t *create_value_list(void) /* {{{ */ fprintf(stderr, "calloc failed.\n"); free(vl->values); free(vl); - return (NULL); + return NULL; } vl->values_len = 1; @@ -199,7 +198,7 @@ static lcc_value_list_t *create_value_list(void) /* {{{ */ snprintf(vl->identifier.type_instance, sizeof(vl->identifier.type_instance), "ti%li", random()); - return (vl); + return vl; } /* }}} int create_value_list */ static void destroy_value_list(lcc_value_list_t *vl) /* {{{ */ @@ -228,7 +227,7 @@ static int send_value(lcc_value_list_t *vl) /* {{{ */ vl->time += vl->interval; - return (0); + return 0; } /* }}} int send_value */ static int get_integer_opt(const char *str, int *ret_value) /* {{{ */ @@ -252,7 +251,7 @@ static int get_integer_opt(const char *str, int *ret_value) /* {{{ */ } *ret_value = tmp; - return (0); + return 0; } /* }}} int get_integer_opt */ static int get_double_opt(const char *str, double *ret_value) /* {{{ */ @@ -276,7 +275,7 @@ static int get_double_opt(const char *str, double *ret_value) /* {{{ */ } *ret_value = tmp; - return (0); + return 0; } /* }}} int get_double_opt */ static int read_options(int argc, char **argv) /* {{{ */ @@ -317,7 +316,7 @@ static int read_options(int argc, char **argv) /* {{{ */ } /* switch (opt) */ } /* while (getopt) */ - return (0); + return 0; } /* }}} int read_options */ int main(int argc, char **argv) /* {{{ */ @@ -423,5 +422,3 @@ int main(int argc, char **argv) /* {{{ */ lcc_network_destroy(net); exit(EXIT_SUCCESS); } /* }}} int main */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/collectd.conf.in b/src/collectd.conf.in index e5b96435..fb161afd 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -114,6 +114,7 @@ #@BUILD_PLUGIN_DF_TRUE@LoadPlugin df #@BUILD_PLUGIN_DISK_TRUE@LoadPlugin disk #@BUILD_PLUGIN_DNS_TRUE@LoadPlugin dns +#@BUILD_PLUGIN_DPDKEVENTS_TRUE@LoadPlugin dpdkevents #@BUILD_PLUGIN_DPDKSTAT_TRUE@LoadPlugin dpdkstat #@BUILD_PLUGIN_DRBD_TRUE@LoadPlugin drbd #@BUILD_PLUGIN_EMAIL_TRUE@LoadPlugin email @@ -142,6 +143,7 @@ #@BUILD_PLUGIN_LVM_TRUE@LoadPlugin lvm #@BUILD_PLUGIN_MADWIFI_TRUE@LoadPlugin madwifi #@BUILD_PLUGIN_MBMON_TRUE@LoadPlugin mbmon +#@BUILD_PLUGIN_MCELOG_TRUE@LoadPlugin mcelog #@BUILD_PLUGIN_MD_TRUE@LoadPlugin md #@BUILD_PLUGIN_MEMCACHEC_TRUE@LoadPlugin memcachec #@BUILD_PLUGIN_MEMCACHED_TRUE@LoadPlugin memcached @@ -167,6 +169,8 @@ #@BUILD_PLUGIN_OPENLDAP_TRUE@LoadPlugin openldap #@BUILD_PLUGIN_OPENVPN_TRUE@LoadPlugin openvpn #@BUILD_PLUGIN_ORACLE_TRUE@LoadPlugin oracle +#@BUILD_PLUGIN_OVS_EVENTS_TRUE@LoadPlugin ovs_events +#@BUILD_PLUGIN_OVS_STATS_TRUE@LoadPlugin ovs_stats #@BUILD_PLUGIN_PERL_TRUE@LoadPlugin perl #@BUILD_PLUGIN_PINBA_TRUE@LoadPlugin pinba #@BUILD_PLUGIN_PING_TRUE@LoadPlugin ping @@ -184,6 +188,7 @@ #@BUILD_PLUGIN_SIGROK_TRUE@LoadPlugin sigrok #@BUILD_PLUGIN_SMART_TRUE@LoadPlugin smart #@BUILD_PLUGIN_SNMP_TRUE@LoadPlugin snmp +#@BUILD_PLUGIN_SNMP_AGENT_TRUE@LoadPlugin snmp_agent #@BUILD_PLUGIN_STATSD_TRUE@LoadPlugin statsd #@BUILD_PLUGIN_SWAP_TRUE@LoadPlugin swap #@BUILD_PLUGIN_TABLE_TRUE@LoadPlugin table @@ -523,14 +528,39 @@ # SelectNumericQueryTypes true # +# +# +# Coremask "0x1" +# MemoryChannels "4" +# ProcessType "secondary" +# FilePrefix "rte" +# +# +# SendEventsOnUpdate true +# EnabledPortMask 0xffff +# PortName "interface1" +# PortName "interface2" +# SendNotification false +# +# +# SendEventsOnUpdate true +# LCoreMask "0xf" +# KeepAliveShmName "/dpdk_keepalive_shm_name" +# SendNotification false +# +# + # -# Interval 1 -# Coremask "0xf" -# ProcessType "secondary" -# FilePrefix "rte" -# EnabledPortMask 0xffff -# PortName "interface1" -# PortName "interface2" +# +# Coremask "0x2" +# MemoryChannels "4" +# ProcessType "secondary" +# FilePrefix "rte" +# +# SharedMemObj "dpdk_collectd_stats_0" +# EnabledPortMask 0xffff +# PortName "interface1" +# PortName "interface2" # # @@ -690,6 +720,11 @@ # Port "411" # +# +# McelogClientSocket "/var/run/mcelog-client" +# McelogLogfile "/var/log/mcelog" +# + # # Device "/dev/md0" # IgnoreSelected false @@ -933,6 +968,9 @@ # # UPS "upsname@hostname:port" +# ForceSSL true +# VerifyPeer true +# CAPath "/path/to/folder" # # @@ -985,6 +1023,22 @@ # # +# +# Port "6640" +# Address "127.0.0.1" +# Socket "/var/run/openvswitch/db.sock" +# Interfaces "br0" "veth0" +# SendNotification true +# DispatchValues false +# + +# +# Port "6640" +# Address "127.0.0.1" +# Socket "/var/run/openvswitch/db.sock" +# Bridges "br0" "br_ext" +# + # # IncludeDir "/my/include/path" # BaseName "Collectd::Plugins" @@ -1085,7 +1139,18 @@ # # +# CollectFileDescriptor true +# CollectContextSwitch true # Process "name" +# ProcessMatch "name" "regex" +# +# CollectFileDescriptor false +# CollectContextSwitch false +# +# +# CollectFileDescriptor false +# CollectContextSwitch true +# # # @@ -1211,6 +1276,30 @@ # # +# +# +# Plugin "memory" +# Type "memory" +# TypeInstance "free" +# OIDs "1.3.6.1.4.1.2021.4.6.0" +# +# +# IndexOID "IF-MIB::ifIndex" +# SizeOID "IF-MIB::ifNumber" +# +# Instance true +# Plugin "interface" +# OIDs "IF-MIB::ifDescr" +# +# +# Plugin "interface" +# Type "if_octets" +# TypeInstance "" +# OIDs "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets" +# +#
+#
+ # # Host "::" # Port "8125" @@ -1441,6 +1530,8 @@ # HostnameFormat name # InterfaceFormat name # PluginInstanceFormat name +# Instances 1 +# ExtraStats "cpu_util disk disk_err domain_state fs_info job_stats_background pcpu perf vcpupin" # # @@ -1480,6 +1571,8 @@ # Header "X-Custom-Header: custom_value" # SSLVersion "TLSv1" # Format "Command" +# Attribute "key" "value" # only available for KAIROSDB format +# TTL 0 # data ttl, only available for KAIROSDB format # Metrics true # Notifications false # StoreRates false diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 881ae201..ceb6a130 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -2393,6 +2393,128 @@ Enabled by default, collects unknown (and thus presented as numeric only) query =back +=head2 Plugin C + +The I collects events from DPDK such as link status of +network ports and Keep Alive status of DPDK logical cores. +In order to get Keep Alive events following requirements must be met: +- DPDK >= 16.07 +- support for Keep Alive implemented in DPDK application. More details can +be found here: http://dpdk.org/doc/guides/sample_app_ug/keep_alive.html + +B + + + + Coremask "0x1" + MemoryChannels "4" + ProcessType "secondary" + FilePrefix "rte" + + + SendEventsOnUpdate true + EnabledPortMask 0xffff + PortName "interface1" + PortName "interface2" + SendNotification false + + + SendEventsOnUpdate true + LCoreMask "0xf" + KeepAliveShmName "/dpdk_keepalive_shm_name" + SendNotification false + + + +B + + +=head3 The EAL block + +=over 5 + +=item B I + +=item B I + +Number of memory channels per processor socket. + +=item B I + +The type of DPDK process instance. + +=item B I + +The prefix text used for hugepage filenames. The filename will be set to +/var/run/._config where prefix is what is passed in by the user. + +=back + +=head3 The Event block + +The B block defines configuration for specific event. It accepts a +single argument which specifies the name of the event. + +=head4 Link Status event + +=over 5 + +=item B I + +If set to true link status value will be dispatched only when it is +different from previously read value. This is an optional argument - default +value is true. + +=item B I + +A hexidecimal bit mask of the DPDK ports which should be enabled. A mask +of 0x0 means that all ports will be disabled. A bitmask of all F's means +that all ports will be enabled. This is an optional argument - by default +all ports are enabled. + +=item B I + +A string containing an optional name for the enabled DPDK ports. Each PortName +option should contain only one port name; specify as many PortName options as +desired. Default naming convention will be used if PortName is blank. If there +are less PortName options than there are enabled ports, the default naming +convention will be used for the additional ports. + +=item B I + +If set to true, link status notifications are sent, instead of link status +being collected as a statistic. This is an optional argument - default +value is false. + +=back + +=head4 Keep Alive event + +=over 5 + +=item B I + +If set to true keep alive value will be dispatched only when it is +different from previously read value. This is an optional argument - default +value is true. + +=item B I + +An hexadecimal bit mask of the logical cores to monitor keep alive state. + +=item B I + +Shared memory name identifier that is used by secondary process to monitor +the keep alive cores state. + +=item B I + +If set to true, keep alive notifications are sent, instead of keep alive +information being collected as a statistic. This is an optional +argument - default value is false. + +=back + =head2 Plugin C The I collects information about DPDK interfaces using the @@ -2401,18 +2523,24 @@ extended NIC stats API in DPDK. B - Coremask "0x4" - MemoryChannels "4" - ProcessType "secondary" - FilePrefix "rte" - EnabledPortMask 0xffff - PortName "interface1" - PortName "interface2" + + Coremask "0x4" + MemoryChannels "4" + ProcessType "secondary" + FilePrefix "rte" + SocketMemory "1024" + + SharedMemObj "dpdk_collectd_stats_0" + EnabledPortMask 0xffff + PortName "interface1" + PortName "interface2" B -=over 4 +=head3 The EAL block + +=over 5 =item B I @@ -2435,7 +2563,16 @@ The prefix text used for hugepage filenames. The filename will be set to =item B I A string containing amount of Memory to allocate from hugepages on specific -sockets in MB +sockets in MB. This is an optional value. + +=back + +=over 3 + +=item B I +A string containing the name of the shared memory object that should be used to +share stats from the DPDK secondary process to the collectd dpdkstat plugin. +Defaults to dpdk_collectd_stats if no other value is configured. =item B I @@ -2959,6 +3096,10 @@ allows to monitor instructions per clock (IPC). Monitor events are hardware dependant. Monitoring capabilities are detected on plugin initialization and only supported events are monitored. +B I plugin is using model-specific registers (MSRs), which +require an additional capability to be enabled if collectd is run as a service. +Please refer to I file for more details. + B @@ -3012,7 +3153,7 @@ See F for details. =item B I|I -If no configuration if given, the B-plugin will collect data from +If no configuration is given, the B-plugin will collect data from all interfaces. This may not be practical, especially for loopback- and similar interfaces. Thus, you can use the B-option to pick the interfaces you're interested in. Sometimes, however, it's easier/preferred @@ -3338,6 +3479,28 @@ TCP-Port to connect to. Defaults to B<411>. =back +=head2 Plugin C + +The C uses mcelog to retrieve machine check exceptions. + +By default the plugin connects to B<"/var/run/mcelog-client"> to check if the +mcelog server is running. When the server is running, the plugin will tail the +specified logfile to retrieve machine check exception information and send a +notification with the details from the logfile. The plugin will use the mcelog +client protocol to retrieve memory related machine check exceptions. + +=over 4 + +=item B I +Connect to the mcelog client socket using the UNIX domain socket at I. +Defaults to B<"/var/run/mcelog-client">. + +=item B I + +The mcelog file to parse. Defaults to B<"/var/log/mcelog">. + +=back + =head2 Plugin C The C collects information from Linux Software-RAID devices (md). @@ -5108,6 +5271,35 @@ making it through. Add a UPS to collect data from. The format is identical to the one accepted by L. +=item B B|B + +Stops connections from falling back to unsecured if an SSL connection +cannot be established. Defaults to false if undeclared. + +=item B I|I + +If set to true, requires a CAPath be provided. Will use the CAPath to find +certificates to use as Trusted Certificates to validate a upsd server certificate. +If validation of the upsd server certificate fails, the connection will not be +established. If ForceSSL is undeclared or set to false, setting VerifyPeer to true +will override and set ForceSSL to true. + +=item B I/path/to/certs/folder + +If VerifyPeer is set to true, this is required. Otherwise this is ignored. +The folder pointed at must contain certificate(s) named according to their hash. +Ex: XXXXXXXX.Y where X is the hash value of a cert and Y is 0. If name collisions +occur because two different certs have the same hash value, Y can be incremented +in order to avoid conflict. To create a symbolic link to a certificate the following +command can be used from within the directory where the cert resides: + +C + +Alternatively, the package openssl-perl provides a command C that will +generate links like the one described above for ALL certs in a given folder. +Example usage: +C + =back =head2 Plugin C @@ -5455,6 +5647,123 @@ refer to them from. =back +=head2 Plugin C + +The I plugin monitors the link status of I (OVS) +connected interfaces, dispatches the values to collectd and sends the +notification whenever the link state change occurs. This plugin uses OVS +database to get a link state change notification. + +B + + + Port 6640 + Address "127.0.0.1" + Socket "/var/run/openvswitch/db.sock" + Interfaces "br0" "veth0" + SendNotification true + DispatchValues false + + +The plugin provides the following configuration options: + +=over 4 + +=item B
I + +The address of the OVS DB server JSON-RPC interface used by the plugin. To +enable the interface, OVS DB daemon should be running with C<--remote=ptcp:> +option. See L for more details. The option may be either +network hostname, IPv4 numbers-and-dots notation or IPv6 hexadecimal string +format. Defaults to B<'localhost'>. + +=item B I + +TCP-port to connect to. Either a service name or a port number may be given. +Defaults to B<6640>. + +=item B I + +The UNIX domain socket path of OVS DB server JSON-RPC interface used by the +plugin. To enable the interface, the OVS DB daemon should be running with +C<--remote=punix:> option. See L for more details. If this +option is set, B
and B options are ignored. + +=item B [I ...] + +List of interface names to be monitored by this plugin. If this option is not +specified or is empty then all OVS connected interfaces on all bridges are +monitored. + +Default: empty (all interfaces on all bridges are monitored) + +=item B I + +If set to true, OVS link notifications (interface status and OVS DB connection +terminate) are sent to collectd. Default value is true. + +=item B I + +Dispatch the OVS DB interface link status value with configured plugin interval. +Defaults to false. Please note, if B and B +options are false, no OVS information will be provided by the plugin. + +=back + +B By default, the global interval setting is used within which to +retrieve the OVS link status. To configure a plugin-specific interval, please +use B option of the OVS B block settings. For milliseconds +simple divide the time by 1000 for example if the desired interval is 50ms, set +interval to 0.05. + +=head2 Plugin C + +The I plugin collects statistics of OVS connected interfaces. +This plugin uses OVSDB management protocol (RFC7047) monitor mechanism to get +statistics from OVSDB + +B + + + Port 6640 + Address "127.0.0.1" + Socket "/var/run/openvswitch/db.sock" + Bridges "br0" "br_ext" + + +The plugin provides the following configuration options: + +=over 4 + +=item B
I + +The address of the OVS DB server JSON-RPC interface used by the plugin. To +enable the interface, OVS DB daemon should be running with C<--remote=ptcp:> +option. See L for more details. The option may be either +network hostname, IPv4 numbers-and-dots notation or IPv6 hexadecimal string +format. Defaults to B<'localhost'>. + +=item B I + +TCP-port to connect to. Either a service name or a port number may be given. +Defaults to B<6640>. + +=item B I + +The UNIX domain socket path of OVS DB server JSON-RPC interface used by the +plugin. To enable the interface, the OVS DB daemon should be running with +C<--remote=punix:> option. See L for more details. If this +option is set, B
and B options are ignored. + +=item B [I ...] + +List of OVS bridge names to be monitored by this plugin. If this option is +omitted or is empty then all OVS bridges will be monitored. + +Default: empty (monitor all bridges) + +=back + =head2 Plugin C This plugin embeds a Perl-interpreter into collectd and provides an interface @@ -6243,9 +6552,15 @@ C/var/run/collectd-powerdns>. =item B I Select more detailed statistics of processes matching this name. The statistics -collected for these selected processes are size of the resident segment size -(RSS), user- and system-time used, number of processes and number of threads, -io data (where available) and minor and major pagefaults. +collected for these selected processes are: + - size of the resident segment size (RSS) + - user- and system-time used + - number of processes + - number of threads + - number of open files (under Linux) + - io data (where available) + - context switches (under Linux) + - minor and major pagefaults. Some platforms have a limit on the length of process names. I must stay below this limit. @@ -6867,6 +7182,115 @@ Since the configuration of the C is a little more complicated than other plugins, its documentation has been moved to an own manpage, L. Please see there for details. +=head2 Plugin C + +The I plugin is an AgentX subagent that receives and handles queries +from SNMP master agent and returns the data collected by read plugins. +The I plugin handles requests only for OIDs specified in +configuration file. To handle SNMP queries the plugin gets data from collectd +and translates requested values from collectd's internal format to SNMP format. +This plugin is a generic plugin and cannot work without configuration. +For more details on AgentX subagent see + + +B + + + + Plugin "memory" + Type "memory" + TypeInstance "free" + OIDs "1.3.6.1.4.1.2021.4.6.0" + + + IndexOID "IF-MIB::ifIndex" + SizeOID "IF-MIB::ifNumber" + + Instance true + Plugin "interface" + OIDs "IF-MIB::ifDescr" + + + Plugin "interface" + Type "if_octets" + TypeInstance "" + OIDs "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets" + +
+
+ +There are two types of blocks that can be contained in the +CPluginE snmp_agentE> block: B and B: + +=head3 The B block + +The B block defines a list OIDs that are to be handled. This block can +define scalar or table OIDs. If B block is defined inside of B
+block it reperesents table OIDs. +The following options can be set: + +=over 4 + +=item B I + +When B is set to B, the value for requested OID is copied from +plugin instance field of corresponding collectd value. If B block defines +scalar data type B has no effect and can be omitted. + +=item B I + +Read plugin name whose collected data will be mapped to specified OIDs. + +=item B I + +Collectd's type that is to be used for specified OID, e.Eg. "if_octets" +for example. The types are read from the B (see L). + +=item B I + +Collectd's type-instance that is to be used for specified OID. + +=item B I [I ...] + +Configures the OIDs to be handled by I plugin. Values for these OIDs +are taken from collectd data type specified by B, B, +B fields of this B block. Number of the OIDs configured +should correspond to number of values in specified B. +For example two OIDs "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets" can be mapped to +"rx" and "tx" values of "if_octets" type. + +=item B I + +The values taken from collectd are multiplied by I. The field is optional +and the default is B<1.0>. + +=item B I + +I is added to values from collectd after they have been multiplied by +B value. The field is optional and the default value is B<0.0>. + +=back + +=head3 The B
block + +The B
block defines a collection of B blocks that belong to one +snmp table. In addition to multiple B blocks the following options can be +set: + +=over 4 + +=item B I + +OID that is handled by the plugin and is mapped to numerical index value that is +generated by the plugin for each table record. + +=item B I + +OID that is handled by the plugin. Returned value is the number of records in +the table. The field is optional. + +=back + =head2 Plugin C The I listens to a UDP socket, reads "events" in the statsd @@ -7863,11 +8287,11 @@ Collect statistics about worker threads. False by default. =head2 Plugin C -This plugin allows CPU, disk and network load to be collected for virtualized -guests on the machine. This means that these metrics can be collected for guest -systems without installing any software on them - I only runs on the -host system. The statistics are collected through libvirt -(L). +This plugin allows CPU, disk, network load and other metrics to be collected for +virtualized guests on the machine. The statistics are collected through libvirt +API (L). Majority of metrics can be gathered without +installing any additional software on guests, especially I, which runs +only on the host system. Only I is required. @@ -8005,6 +8429,61 @@ You can also specify combinations of the B and B fields. For example B means to concatenate the guest name and UUID (with a literal colon character between, thus I<"foo:1234-1234-1234-1234">). +=item B B + +How many read instances you want to use for this plugin. The default is one, +and the sensible setting is a multiple of the B value. +If you are not sure, just use the default setting. + +=item B B + +Report additional extra statistics. The default is no extra statistics, preserving +the previous behaviour of the plugin. If unsure, leave the default. If enabled, +allows the plugin to reported more detailed statistics about the behaviour of +Virtual Machines. The argument is a space-separated list of selectors. + +Currently supported selectors are: + +=over 4 + +=item B: report CPU utilization per domain in percentage. + +=item B: report extra statistics like number of flush operations and total +service time for read, write and flush operations. Requires libvirt API version +I<0.9.5> or later. + +=item B: report disk errors if any occured. Requires libvirt API version +I<0.9.10> or later. + +=item B: report domain state and reason in human-readable format as +a notification. If libvirt API version I<0.9.2> or later is available, domain +reason will be included in notification. + +=item B: report file system information as a notification. Requires +libvirt API version I<1.2.11> or later. Can be collected only if I +is installed and configured inside VM. Make sure that installed I +version supports retrieving file system information. + +=item B: report statistics about progress of a background +job on a domain. Only one type of job statistics can be collected at the same time. +Requires libvirt API version I<1.2.9> or later. + +=item B: report statistics about a recently completed job on +a domain. Only one type of job statistics can be collected at the same time. +Requires libvirt API version I<1.2.9> or later. + +=item B: report the physical user/system cpu time consumed by the hypervisor, per-vm. +Requires libvirt API version I<0.9.11> or later. + +=item B: report performance monitoring events. To collect performance +metrics they must be enabled for domain and supported by the platform. Requires +libvirt API version I<1.3.3> or later. +B: I metrics can't be collected if I plugin is enabled. + +=item B: report pinning of domain VCPUs to host physical CPUs. + +=back + =back =head2 Plugin C @@ -8175,6 +8654,8 @@ packets. Synopsis: + ResolveInterval 60 + ResolveJitter 60 Host "tsd-1.my.domain" Port "4242" @@ -8183,7 +8664,36 @@ Synopsis: The configuration consists of one or more EBEIE -blocks. Inside the B blocks, the following options are recognized: +blocks and global directives. + +Global directives are: + +=over 4 + +=item B I + +=item B I + +When I connects to a TSDB node, it will request the hostname from +DNS. This can become a problem if the TSDB node is unavailable or badly +configured because collectd will request DNS in order to reconnect for every +metric, which can flood your DNS. So you can cache the last value for +I seconds. +Defaults to the I of the I, e.g. 10Eseconds. + +You can also define a jitter, a random interval to wait in addition to +I. This prevents all your collectd servers to resolve the +hostname at the same time when the connection fails. +Defaults to the I of the I, e.g. 10Eseconds. + +B If the DNS resolution has already been successful when the socket +closes, the plugin will try to reconnect immediately with the cached +information. DNS is queried only when the socket is closed for a longer than +I + I seconds. + +=back + +Inside the B blocks, the following options are recognized: =over 4 @@ -8400,6 +8910,23 @@ create output in the I (JSON). When set to KAIROSDB Defaults to B. +=item B I I + +Only available for the KAIROSDB output format. + +Consider the two given strings to be the key and value of an additional tag for +each metric being sent out. + +You can add multiple B. + +=item B I + +Only available for the KAIROSDB output format. + +Sets the Cassandra ttl for the data points. + +Please refer to L + =item B B|B Controls whether I are POSTed to this location. Defaults to B. diff --git a/src/collectdctl.c b/src/collectdctl.c index 30d1cdc0..4b0db2a7 100644 --- a/src/collectdctl.c +++ b/src/collectdctl.c @@ -138,12 +138,12 @@ static int array_grow(void **array, size_t *array_len, size_t elem_size) { tmp = realloc(*array, (*array_len + 1) * elem_size); if (tmp == NULL) { fprintf(stderr, "ERROR: Failed to allocate memory.\n"); - return (-1); + return -1; } *array = tmp; ++(*array_len); - return (0); + return 0; } /* array_grow */ static int parse_identifier(lcc_connection_t *c, const char *value, @@ -162,7 +162,7 @@ static int parse_identifier(lcc_connection_t *c, const char *value, if (gethostname(hostname, sizeof(hostname)) != 0) { fprintf(stderr, "ERROR: Failed to get local hostname: %s", strerror(errno)); - return (-1); + return -1; } hostname[sizeof(hostname) - 1] = '\0'; @@ -177,9 +177,9 @@ static int parse_identifier(lcc_connection_t *c, const char *value, if (status != 0) { fprintf(stderr, "ERROR: Failed to parse identifier ``%s'': %s.\n", ident_str, lcc_strerror(c)); - return (-1); + return -1; } - return (0); + return 0; } /* parse_identifier */ static int getval(lcc_connection_t *c, int argc, char **argv) { @@ -195,12 +195,12 @@ static int getval(lcc_connection_t *c, int argc, char **argv) { if (argc != 2) { fprintf(stderr, "ERROR: getval: Missing identifier.\n"); - return (-1); + return -1; } status = parse_identifier(c, argv[1], &ident); if (status != 0) - return (status); + return status; #define BAIL_OUT(s) \ do { \ @@ -212,7 +212,7 @@ static int getval(lcc_connection_t *c, int argc, char **argv) { free(ret_values_names); \ } \ ret_values_num = 0; \ - return (s); \ + return s; \ } while (0) status = @@ -249,7 +249,7 @@ static int flush(lcc_connection_t *c, int argc, char **argv) { if (plugins != NULL) \ free(plugins); \ plugins_num = 0; \ - return (s); \ + return s; \ } while (0) for (int i = 1; i < argc; ++i) { @@ -347,7 +347,7 @@ static int listval(lcc_connection_t *c, int argc, char **argv) { if (argc != 1) { fprintf(stderr, "ERROR: listval: Does not accept any arguments.\n"); - return (-1); + return -1; } #define BAIL_OUT(s) \ @@ -355,7 +355,7 @@ static int listval(lcc_connection_t *c, int argc, char **argv) { if (ret_ident != NULL) \ free(ret_ident); \ ret_ident_num = 0; \ - return (s); \ + return s; \ } while (0) status = lcc_listval(c, &ret_ident, &ret_ident_num); @@ -396,7 +396,7 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { if (argc < 3) { fprintf(stderr, "ERROR: putval: Missing identifier " "and/or value list.\n"); - return (-1); + return -1; } vl.values = values; @@ -404,7 +404,7 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { status = parse_identifier(c, argv[1], &vl.identifier); if (status != 0) - return (status); + return status; for (int i = 2; i < argc; ++i) { char *tmp; @@ -426,7 +426,7 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { if (endptr == value) { fprintf(stderr, "ERROR: Failed to parse interval as number: %s.\n", value); - return (-1); + return -1; } else if ((endptr != NULL) && (*endptr != '\0')) { fprintf(stderr, "WARNING: Ignoring trailing garbage after " "interval: %s.\n", @@ -434,7 +434,7 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { } } else { fprintf(stderr, "ERROR: putval: Unknown option `%s'.\n", key); - return (-1); + return -1; } } else { /* value list */ char *value; @@ -443,7 +443,7 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { if (tmp == NULL) { fprintf(stderr, "ERROR: putval: Invalid value list: %s.\n", argv[i]); - return (-1); + return -1; } *tmp = '\0'; @@ -459,10 +459,10 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { if (endptr == argv[i]) { fprintf(stderr, "ERROR: Failed to parse time as number: %s.\n", argv[i]); - return (-1); + return -1; } else if ((endptr != NULL) && (*endptr != '\0')) { fprintf(stderr, "ERROR: Garbage after time: %s.\n", endptr); - return (-1); + return -1; } } @@ -499,10 +499,10 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { if (endptr == value) { fprintf(stderr, "ERROR: Failed to parse value as number: %s.\n", argv[i]); - return (-1); + return -1; } else if ((endptr != NULL) && (*endptr != '\0')) { fprintf(stderr, "ERROR: Garbage after value: %s.\n", endptr); - return (-1); + return -1; } value = tmp; @@ -514,16 +514,16 @@ static int putval(lcc_connection_t *c, int argc, char **argv) { status = lcc_putval(c, &vl); if (status != 0) { fprintf(stderr, "ERROR: %s\n", lcc_strerror(c)); - return (-1); + return -1; } } } if (values_len == 0) { fprintf(stderr, "ERROR: putval: Missing value list(s).\n"); - return (-1); + return -1; } - return (0); + return 0; } /* putval */ int main(int argc, char **argv) { @@ -563,7 +563,7 @@ int main(int argc, char **argv) { if (status != 0) { fprintf(stderr, "ERROR: Failed to connect to daemon at %s: %s.\n", address, strerror(errno)); - return (1); + return 1; } if (strcasecmp(argv[optind], "getval") == 0) @@ -576,14 +576,12 @@ int main(int argc, char **argv) { status = putval(c, argc - optind, argv + optind); else { fprintf(stderr, "%s: invalid command: %s\n", argv[0], argv[optind]); - return (1); + return 1; } LCC_DESTROY(c); if (status != 0) - return (status); - return (0); + return status; + return 0; } /* main */ - -/* vim: set sw=2 ts=2 tw=78 expandtab : */ diff --git a/src/collectdmon.c b/src/collectdmon.c index 9040f8d9..4a7d1a6b 100644 --- a/src/collectdmon.c +++ b/src/collectdmon.c @@ -386,5 +386,3 @@ int main(int argc, char **argv) { free(collectd_argv); return 0; } /* main */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/conntrack.c b/src/conntrack.c index 8a9200dd..3cd2deee 100644 --- a/src/conntrack.c +++ b/src/conntrack.c @@ -70,13 +70,13 @@ static int conntrack_read(void) { char const *path = old_files ? CONNTRACK_FILE_OLD : CONNTRACK_FILE; if (parse_value_file(path, &conntrack, DS_TYPE_GAUGE) != 0) { ERROR("conntrack plugin: Reading \"%s\" failed.", path); - return (-1); + return -1; } path = old_files ? CONNTRACK_MAX_FILE_OLD : CONNTRACK_MAX_FILE; if (parse_value_file(path, &conntrack_max, DS_TYPE_GAUGE) != 0) { ERROR("conntrack plugin: Reading \"%s\" failed.", path); - return (-1); + return -1; } conntrack_pct.gauge = (conntrack.gauge / conntrack_max.gauge) * 100; @@ -85,7 +85,7 @@ static int conntrack_read(void) { conntrack_submit("conntrack", "max", conntrack_max); conntrack_submit("percent", "used", conntrack_pct); - return (0); + return 0; } /* static int conntrack_read */ void module_register(void) { diff --git a/src/contextswitch.c b/src/contextswitch.c index 1d73f041..461fb0a9 100644 --- a/src/contextswitch.c +++ b/src/contextswitch.c @@ -69,7 +69,7 @@ static int cs_read(void) { if (status != 0) { ERROR("contextswitch plugin: sysctlbyname " "(vm.stats.sys.v_swtch) failed"); - return (-1); + return -1; } cs_submit(value); @@ -87,7 +87,7 @@ static int cs_read(void) { if (fh == NULL) { ERROR("contextswitch plugin: unable to open /proc/stat: %s", sstrerror(errno, buffer, sizeof(buffer))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -129,7 +129,7 @@ static int cs_read(void) { char errbuf[1024]; ERROR("contextswitch plugin: perfstat_cpu_total: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } cs_submit(perfcputotal.pswitch); diff --git a/src/cpu.c b/src/cpu.c index 9091fef9..a5a136ec 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -209,9 +209,9 @@ static int cpu_config(char const *key, char const *value) /* {{{ */ else if (strcasecmp(key, "ReportNumCpu") == 0) report_num_cpu = IS_TRUE(value) ? 1 : 0; else - return (-1); + return -1; - return (0); + return 0; } /* }}} int cpu_config */ static int init(void) { @@ -229,12 +229,12 @@ static int init(void) { "load information. " ""); cpu_list_len = 0; - return (-1); + return -1; } if (status != KERN_SUCCESS) { ERROR("cpu plugin: host_processors() failed with status %d.", (int)status); cpu_list_len = 0; - return (-1); + return -1; } INFO("cpu plugin: Found %i processor%s.", (int)cpu_list_len, @@ -247,7 +247,7 @@ static int init(void) { numcpu = 0; if (kc == NULL) - return (-1); + return -1; /* Solaris doesn't count linear.. *sigh* */ for (numcpu = 0, ksp_chain = kc->kc_chain; @@ -269,7 +269,7 @@ static int init(void) { if (status == -1) { char errbuf[1024]; WARNING("cpu plugin: sysctl: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* #endif CAN_USE_SYSCTL */ @@ -282,7 +282,7 @@ static int init(void) { char errbuf[1024]; WARNING("cpu plugin: sysctlbyname(hw.ncpu): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } #ifdef HAVE_SYSCTL_KERN_CP_TIMES @@ -292,7 +292,7 @@ static int init(void) { char errbuf[1024]; WARNING("cpu plugin: sysctlbyname(kern.smp.maxcpus): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } #else if (numcpu != 1) @@ -310,7 +310,7 @@ static int init(void) { /* nothing to initialize */ #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* int init */ static void submit_value(int cpu_num, int cpu_state, const char *type, @@ -362,7 +362,7 @@ static int cpu_states_alloc(size_t cpu_num) /* {{{ */ tmp = realloc(cpu_states, sz * sizeof(*cpu_states)); if (tmp == NULL) { ERROR("cpu plugin: realloc failed."); - return (ENOMEM); + return ENOMEM; } cpu_states = tmp; tmp = cpu_states + cpu_states_num; @@ -377,9 +377,9 @@ static cpu_state_t *get_cpu_state(size_t cpu_num, size_t state) /* {{{ */ size_t index = ((cpu_num * COLLECTD_CPU_STATE_MAX) + state); if (index >= cpu_states_num) - return (NULL); + return NULL; - return (&cpu_states[index]); + return &cpu_states[index]; } /* }}} cpu_state_t *get_cpu_state */ #if defined(HAVE_PERFSTAT) /* {{{ */ @@ -390,13 +390,13 @@ static int total_rate(gauge_t *sum_by_state, size_t state, derive_t d, int status = value_to_rate(&rate, (value_t){.derive = d}, DS_TYPE_DERIVE, now, conv); if (status != 0) - return (status); + return status; sum_by_state[state] = rate; if (state != COLLECTD_CPU_STATE_IDLE) RATE_ADD(sum_by_state[COLLECTD_CPU_STATE_ACTIVE], sum_by_state[state]); - return (0); + return 0; } #endif /* }}} HAVE_PERFSTAT */ @@ -567,11 +567,11 @@ static int cpu_stage(size_t cpu_num, size_t state, derive_t d, value_t val = {.derive = d}; if (state >= COLLECTD_CPU_STATE_ACTIVE) - return (EINVAL); + return EINVAL; status = cpu_states_alloc(cpu_num); if (status != 0) - return (status); + return status; if (global_cpu_num <= cpu_num) global_cpu_num = cpu_num + 1; @@ -580,11 +580,11 @@ static int cpu_stage(size_t cpu_num, size_t state, derive_t d, status = value_to_rate(&rate, val, DS_TYPE_DERIVE, now, &s->conv); if (status != 0) - return (status); + return status; s->rate = rate; s->has_value = 1; - return (0); + return 0; } /* }}} int cpu_stage */ static int cpu_read(void) { @@ -639,7 +639,7 @@ static int cpu_read(void) { char errbuf[1024]; ERROR("cpu plugin: fopen (/proc/stat) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buf, 1024, fh) != NULL) { @@ -678,7 +678,7 @@ static int cpu_read(void) { static cpu_stat_t cs; if (kc == NULL) - return (-1); + return -1; for (int cpu = 0; cpu < numcpu; cpu++) { if (kstat_read(kc, ksp[cpu], &cs) == -1) @@ -703,7 +703,7 @@ static int cpu_read(void) { if (numcpu < 1) { ERROR("cpu plugin: Could not determine number of " "installed CPUs using sysctl(3)."); - return (-1); + return -1; } memset(cpuinfo, 0, sizeof(cpuinfo)); @@ -721,7 +721,7 @@ static int cpu_read(void) { char errbuf[1024]; ERROR("cpu plugin: sysctl failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } } else @@ -738,7 +738,7 @@ static int cpu_read(void) { char errbuf[1024]; ERROR("cpu plugin: sysctl failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (int i = 0; i < CPUSTATES; i++) { @@ -768,7 +768,7 @@ static int cpu_read(void) { char errbuf[1024]; ERROR("cpu plugin: sysctlbyname failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (int i = 0; i < numcpu; i++) { @@ -791,7 +791,7 @@ static int cpu_read(void) { char errbuf[1024]; ERROR("cpu plugin: sysctlbyname failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } cpu_stage(0, COLLECTD_CPU_STATE_USER, (derive_t)cpuinfo[CP_USER], now); @@ -807,7 +807,7 @@ static int cpu_read(void) { if (cs == NULL) { ERROR("cpu plugin: sg_get_cpu_stats failed."); - return (-1); + return -1; } cpu_state(0, COLLECTD_CPU_STATE_IDLE, (derive_t)cs->idle); @@ -827,7 +827,7 @@ static int cpu_read(void) { char errbuf[1024]; WARNING("cpu plugin: perfstat_cpu: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (pnumcpu != numcpu || perfcpu == NULL) { @@ -841,7 +841,7 @@ static int cpu_read(void) { char errbuf[1024]; WARNING("cpu plugin: perfstat_cpu: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (int i = 0; i < cpus; i++) { @@ -854,7 +854,7 @@ static int cpu_read(void) { cpu_commit(); cpu_reset(); - return (0); + return 0; } void module_register(void) { @@ -862,5 +862,3 @@ void module_register(void) { plugin_register_config("cpu", cpu_config, config_keys, config_keys_num); plugin_register_read("cpu", cpu_read); } /* void module_register */ - -/* vim: set sw=8 sts=8 noet fdm=marker : */ diff --git a/src/cpufreq.c b/src/cpufreq.c index c3080cbf..608e60e3 100644 --- a/src/cpufreq.c +++ b/src/cpufreq.c @@ -52,7 +52,7 @@ static int cpufreq_init(void) { if (num_cpu == 0) plugin_unregister_read("cpufreq"); - return (0); + return 0; } /* int cpufreq_init */ static void cpufreq_submit(int cpu_num, value_t value) { @@ -85,7 +85,7 @@ static int cpufreq_read(void) { cpufreq_submit(i, v); } - return (0); + return 0; } /* int cpufreq_read */ void module_register(void) { diff --git a/src/cpusleep.c b/src/cpusleep.c index 62988fb0..aa14cc12 100644 --- a/src/cpusleep.c +++ b/src/cpusleep.c @@ -51,12 +51,12 @@ static int cpusleep_read(void) { struct timespec b, m; if (clock_gettime(CLOCK_BOOTTIME, &b) < 0) { ERROR("cpusleep plugin: clock_boottime failed"); - return (-1); + return -1; } if (clock_gettime(CLOCK_MONOTONIC, &m) < 0) { ERROR("cpusleep plugin: clock_monotonic failed"); - return (-1); + return -1; } // to avoid false positives in counter overflow due to reboot, @@ -67,7 +67,7 @@ static int cpusleep_read(void) { cpusleep_submit(sleep); - return (0); + return 0; } void module_register(void) { diff --git a/src/csv.c b/src/csv.c index c1759f5a..e4c84f7f 100644 --- a/src/csv.c +++ b/src/csv.c @@ -49,7 +49,7 @@ static int value_list_to_string(char *buffer, int buffer_len, status = ssnprintf(buffer, buffer_len, "%.3f", CDTIME_T_TO_DOUBLE(vl->time)); if ((status < 1) || (status >= buffer_len)) - return (-1); + return -1; offset = status; for (size_t i = 0; i < ds->ds_num; i++) { @@ -58,7 +58,7 @@ static int value_list_to_string(char *buffer, int buffer_len, (ds->ds[i].type != DS_TYPE_DERIVE) && (ds->ds[i].type != DS_TYPE_ABSOLUTE)) { sfree(rates); - return (-1); + return -1; } if (ds->ds[i].type == DS_TYPE_GAUGE) { @@ -70,7 +70,7 @@ static int value_list_to_string(char *buffer, int buffer_len, if (rates == NULL) { WARNING("csv plugin: " "uc_get_rate failed."); - return (-1); + return -1; } status = ssnprintf(buffer + offset, buffer_len - offset, ",%lf", rates[i]); @@ -87,14 +87,14 @@ static int value_list_to_string(char *buffer, int buffer_len, if ((status < 1) || (status >= (buffer_len - offset))) { sfree(rates); - return (-1); + return -1; } offset += status; } /* for ds->ds_num */ sfree(rates); - return (0); + return 0; } /* int value_list_to_string */ static int value_list_to_filename(char *buffer, size_t buffer_size, @@ -110,7 +110,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, size_t len = strlen(datadir) + 1; if (len >= ptr_size) - return (ENOBUFS); + return ENOBUFS; memcpy(ptr, datadir, len); ptr[len - 1] = '/'; @@ -120,12 +120,12 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, status = FORMAT_VL(ptr, ptr_size, vl); if (status != 0) - return (status); + return status; /* Skip all the time formatting stuff when printing to STDOUT or * STDERR. */ if (use_stdio) - return (0); + return 0; ptr_size -= strlen(ptr); ptr += strlen(ptr); @@ -133,7 +133,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, /* "-2013-07-12" => 11 bytes */ if (ptr_size < 12) { ERROR("csv plugin: Buffer too small."); - return (ENOMEM); + return ENOMEM; } /* TODO: Find a way to minimize the calls to `localtime_r', @@ -141,31 +141,31 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, now = time(NULL); if (localtime_r(&now, &struct_tm) == NULL) { ERROR("csv plugin: localtime_r failed"); - return (-1); + return -1; } status = strftime(ptr, ptr_size, "-%Y-%m-%d", &struct_tm); if (status == 0) /* yep, it returns zero on error. */ { ERROR("csv plugin: strftime failed"); - return (-1); + return -1; } - return (0); + return 0; } /* int value_list_to_filename */ static int csv_create_file(const char *filename, const data_set_t *ds) { FILE *csv; if (check_create_dir(filename)) - return (-1); + return -1; csv = fopen(filename, "w"); if (csv == NULL) { char errbuf[1024]; ERROR("csv plugin: fopen (%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } fprintf(csv, "epoch"); @@ -186,10 +186,10 @@ static int csv_config(const char *key, const char *value) { } if (strcasecmp("stdout", value) == 0) { use_stdio = 1; - return (0); + return 0; } else if (strcasecmp("stderr", value) == 0) { use_stdio = 2; - return (0); + return 0; } datadir = strdup(value); if (datadir != NULL) { @@ -209,9 +209,9 @@ static int csv_config(const char *key, const char *value) { else store_rates = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int csv_config */ static int csv_write(const data_set_t *ds, const value_list_t *vl, @@ -231,12 +231,12 @@ static int csv_write(const data_set_t *ds, const value_list_t *vl, status = value_list_to_filename(filename, sizeof(filename), vl); if (status != 0) - return (-1); + return -1; DEBUG("csv plugin: csv_write: filename = %s;", filename); if (value_list_to_string(values, sizeof(values), ds, vl) != 0) - return (-1); + return -1; if (use_stdio) { escape_string(filename, sizeof(filename)); @@ -251,22 +251,22 @@ static int csv_write(const data_set_t *ds, const value_list_t *vl, fprintf(use_stdio == 1 ? stdout : stderr, "PUTVAL %s interval=%.3f %s\n", filename, CDTIME_T_TO_DOUBLE(vl->interval), values); - return (0); + return 0; } if (stat(filename, &statbuf) == -1) { if (errno == ENOENT) { if (csv_create_file(filename, ds)) - return (-1); + return -1; } else { char errbuf[1024]; ERROR("stat(%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } else if (!S_ISREG(statbuf.st_mode)) { ERROR("stat(%s): Not a regular file!", filename); - return (-1); + return -1; } csv = fopen(filename, "a"); @@ -274,7 +274,7 @@ static int csv_write(const data_set_t *ds, const value_list_t *vl, char errbuf[1024]; ERROR("csv plugin: fopen (%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } csv_fd = fileno(csv); @@ -288,7 +288,7 @@ static int csv_write(const data_set_t *ds, const value_list_t *vl, ERROR("csv plugin: flock (%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); fclose(csv); - return (-1); + return -1; } fprintf(csv, "%s\n", values); @@ -297,7 +297,7 @@ static int csv_write(const data_set_t *ds, const value_list_t *vl, * because the `FILE *' may need to flush a cache first */ fclose(csv); - return (0); + return 0; } /* int csv_write */ void module_register(void) { diff --git a/src/curl.c b/src/curl.c index c6f0b607..808f2429 100644 --- a/src/curl.c +++ b/src/curl.c @@ -97,11 +97,11 @@ static size_t cc_curl_callback(void *buf, /* {{{ */ len = size * nmemb; if (len == 0) - return (len); + return len; wp = user_data; if (wp == NULL) - return (0); + return 0; if ((wp->buffer_fill + len) >= wp->buffer_size) { char *temp; @@ -111,7 +111,7 @@ static size_t cc_curl_callback(void *buf, /* {{{ */ temp = realloc(wp->buffer, temp_size); if (temp == NULL) { ERROR("curl plugin: realloc failed."); - return (0); + return 0; } wp->buffer = temp; wp->buffer_size = temp_size; @@ -121,7 +121,7 @@ static size_t cc_curl_callback(void *buf, /* {{{ */ wp->buffer_fill += len; wp->buffer[wp->buffer_fill] = 0; - return (len); + return len; } /* }}} size_t cc_curl_callback */ static void cc_web_match_free(web_match_t *wm) /* {{{ */ @@ -170,16 +170,16 @@ static int cc_config_append_string(const char *name, struct curl_slist *temp = NULL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl plugin: `%s' needs exactly one string argument.", name); - return (-1); + return -1; } temp = curl_slist_append(*dest, ci->values[0].value.string); if (temp == NULL) - return (-1); + return -1; *dest = temp; - return (0); + return 0; } /* }}} int cc_config_append_string */ static int cc_config_add_match_dstype(int *dstype_ret, /* {{{ */ @@ -188,7 +188,7 @@ static int cc_config_add_match_dstype(int *dstype_ret, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl plugin: `DSType' needs exactly one string argument."); - return (-1); + return -1; } if (strncasecmp("Gauge", ci->values[0].value.string, strlen("Gauge")) == 0) { @@ -243,11 +243,11 @@ static int cc_config_add_match_dstype(int *dstype_ret, /* {{{ */ if (dstype == 0) { WARNING("curl plugin: `%s' is not a valid argument to `DSType'.", ci->values[0].value.string); - return (-1); + return -1; } *dstype_ret = dstype; - return (0); + return 0; } /* }}} int cc_config_add_match_dstype */ static int cc_config_add_match(web_page_t *page, /* {{{ */ @@ -262,7 +262,7 @@ static int cc_config_add_match(web_page_t *page, /* {{{ */ match = calloc(1, sizeof(*match)); if (match == NULL) { ERROR("curl plugin: calloc failed."); - return (-1); + return -1; } status = 0; @@ -309,7 +309,7 @@ static int cc_config_add_match(web_page_t *page, /* {{{ */ if (status != 0) { cc_web_match_free(match); - return (status); + return status; } match->match = @@ -317,7 +317,7 @@ static int cc_config_add_match(web_page_t *page, /* {{{ */ if (match->match == NULL) { ERROR("curl plugin: match_create_simple failed."); cc_web_match_free(match); - return (-1); + return -1; } else { web_match_t *prev; @@ -331,7 +331,7 @@ static int cc_config_add_match(web_page_t *page, /* {{{ */ prev->next = match; } - return (0); + return 0; } /* }}} int cc_config_add_match */ static int cc_page_init_curl(web_page_t *wp) /* {{{ */ @@ -339,7 +339,7 @@ static int cc_page_init_curl(web_page_t *wp) /* {{{ */ wp->curl = curl_easy_init(); if (wp->curl == NULL) { ERROR("curl plugin: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(wp->curl, CURLOPT_NOSIGNAL, 1L); @@ -366,7 +366,7 @@ static int cc_page_init_curl(web_page_t *wp) /* {{{ */ wp->credentials = malloc(credentials_size); if (wp->credentials == NULL) { ERROR("curl plugin: malloc failed."); - return (-1); + return -1; } ssnprintf(wp->credentials, credentials_size, "%s:%s", wp->user, @@ -395,7 +395,7 @@ static int cc_page_init_curl(web_page_t *wp) /* {{{ */ (long)CDTIME_T_TO_MS(plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int cc_page_init_curl */ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */ @@ -405,13 +405,13 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl plugin: `Page' blocks need exactly one string argument."); - return (-1); + return -1; } page = calloc(1, sizeof(*page)); if (page == NULL) { ERROR("curl plugin: calloc failed."); - return (-1); + return -1; } page->url = NULL; page->user = NULL; @@ -428,7 +428,7 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */ if (page->instance == NULL) { ERROR("curl plugin: strdup failed."); sfree(page); - return (-1); + return -1; } /* Process all children */ @@ -501,7 +501,7 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */ if (status != 0) { cc_web_page_free(page); - return (status); + return status; } /* Add the new page to the linked list */ @@ -516,7 +516,7 @@ static int cc_config_add_page(oconfig_item_t *ci) /* {{{ */ prev->next = page; } - return (0); + return 0; } /* }}} int cc_config_add_page */ static int cc_config(oconfig_item_t *ci) /* {{{ */ @@ -545,20 +545,20 @@ static int cc_config(oconfig_item_t *ci) /* {{{ */ if ((success == 0) && (errors > 0)) { ERROR("curl plugin: All statements failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cc_config */ static int cc_init(void) /* {{{ */ { if (pages_g == NULL) { INFO("curl plugin: No pages have been defined."); - return (-1); + return -1; } curl_global_init(CURL_GLOBAL_SSL); - return (0); + return 0; } /* }}} int cc_init */ static void cc_submit(const web_page_t *wp, const web_match_t *wm, /* {{{ */ @@ -615,7 +615,7 @@ static int cc_read_page(web_page_t *wp) /* {{{ */ if (status != CURLE_OK) { ERROR("curl plugin: curl_easy_perform failed with status %i: %s", status, wp->curl_errbuf); - return (-1); + return -1; } if (wp->response_time) @@ -654,7 +654,7 @@ static int cc_read_page(web_page_t *wp) /* {{{ */ match_value_reset(mv); } /* for (wm = wp->matches; wm != NULL; wm = wm->next) */ - return (0); + return 0; } /* }}} int cc_read_page */ static int cc_read(void) /* {{{ */ @@ -662,7 +662,7 @@ static int cc_read(void) /* {{{ */ for (web_page_t *wp = pages_g; wp != NULL; wp = wp->next) cc_read_page(wp); - return (0); + return 0; } /* }}} int cc_read */ static int cc_shutdown(void) /* {{{ */ @@ -670,7 +670,7 @@ static int cc_shutdown(void) /* {{{ */ cc_web_page_free(pages_g); pages_g = NULL; - return (0); + return 0; } /* }}} int cc_shutdown */ void module_register(void) { @@ -679,5 +679,3 @@ void module_register(void) { plugin_register_read("curl", cc_read); plugin_register_shutdown("curl", cc_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/curl_json.c b/src/curl_json.c index 6f31145c..8037742a 100644 --- a/src/curl_json.c +++ b/src/curl_json.c @@ -44,8 +44,6 @@ #endif #define CJ_DEFAULT_HOST "localhost" -#define CJ_KEY_MAGIC 0x43484b59UL /* CHKY */ -#define CJ_IS_KEY(key) ((key)->magic == CJ_KEY_MAGIC) #define CJ_ANY "*" #define COUCH_MIN(x, y) ((x) < (y) ? (x) : (y)) @@ -53,13 +51,34 @@ struct cj_key_s; typedef struct cj_key_s cj_key_t; struct cj_key_s /* {{{ */ { - unsigned long magic; char *path; char *type; char *instance; }; /* }}} */ +/* cj_tree_entry_t is a union of either a metric configuration ("key") or a tree + * mapping array indexes / map keys to a descendant cj_tree_entry_t*. */ +typedef struct { + enum { KEY, TREE } type; + union { + c_avl_tree_t *tree; + cj_key_t *key; + }; +} cj_tree_entry_t; + +/* cj_state_t is a stack providing the configuration relevant for the context + * that is currently being parsed. If entry->type == KEY, the parser should + * expect a metric (a numeric value). If entry->type == TREE, the parser should + * expect an array of map to descent into. If entry == NULL, no configuration + * exists for this part of the JSON structure. */ +typedef struct { + cj_tree_entry_t *entry; + _Bool in_array; + int index; + char name[DATA_MAX_NAME_LEN]; +} cj_state_t; + struct cj_s /* {{{ */ { char *instance; @@ -86,17 +105,8 @@ struct cj_s /* {{{ */ yajl_handle yajl; c_avl_tree_t *tree; - cj_key_t *key; int depth; - struct { - union { - c_avl_tree_t *tree; - cj_key_t *key; - }; - _Bool in_array; - int index; - char name[DATA_MAX_NAME_LEN]; - } state[YAJL_MAX_DEPTH]; + cj_state_t state[YAJL_MAX_DEPTH]; }; typedef struct cj_s cj_t; /* }}} */ @@ -107,7 +117,11 @@ typedef unsigned int yajl_len_t; #endif static int cj_read(user_data_t *ud); -static void cj_submit(cj_t *db, cj_key_t *key, value_t *value); +static void cj_submit_impl(cj_t *db, cj_key_t *key, value_t *value); + +/* cj_submit is a function pointer to cj_submit_impl, allowing the unit-test to + * overwrite which function is called. */ +static void (*cj_submit)(cj_t *, cj_key_t *, value_t *) = cj_submit_impl; static size_t cj_curl_callback(void *buf, /* {{{ */ size_t size, size_t nmemb, void *user_data) { @@ -118,18 +132,18 @@ static size_t cj_curl_callback(void *buf, /* {{{ */ len = size * nmemb; if (len == 0) - return (len); + return len; db = user_data; if (db == NULL) - return (0); + return 0; status = yajl_parse(db->yajl, (unsigned char *)buf, len); if (status == yajl_status_ok) - return (len); + return len; #if !HAVE_YAJL_V2 else if (status == yajl_status_insufficient_data) - return (len); + return len; #endif unsigned char *msg = @@ -137,16 +151,14 @@ static size_t cj_curl_callback(void *buf, /* {{{ */ /* jsonText = */ (unsigned char *)buf, (unsigned int)len); ERROR("curl_json plugin: yajl_parse failed: %s", msg); yajl_free_error(db->yajl, msg); - return (0); /* abort write callback */ + return 0; /* abort write callback */ } /* }}} size_t cj_curl_callback */ static int cj_get_type(cj_key_t *key) { - const data_set_t *ds; - - if ((key == NULL) || !CJ_IS_KEY(key)) + if (key == NULL) return -EINVAL; - ds = plugin_get_ds(key->type); + const data_set_t *ds = plugin_get_ds(key->type); if (ds == NULL) { static char type[DATA_MAX_NAME_LEN] = "!!!invalid!!!"; @@ -179,31 +191,20 @@ static int cj_load_key(cj_t *db, char const *key) { sstrncpy(db->state[db->depth].name, key, sizeof(db->state[db->depth].name)); - c_avl_tree_t *tree = db->state[db->depth - 1].tree; - if (tree == NULL) { + if (db->state[db->depth - 1].entry == NULL || + db->state[db->depth - 1].entry->type != TREE) { return 0; } - /* the parent has a key, so the tree pointer is invalid. */ - if (CJ_IS_KEY(db->state[db->depth - 1].key)) { - return 0; - } + c_avl_tree_t *tree = db->state[db->depth - 1].entry->tree; + cj_tree_entry_t *e = NULL; - void *value = NULL; - if (c_avl_get(tree, key, (void *)&value) == 0) { - if (CJ_IS_KEY((cj_key_t *)value)) { - db->state[db->depth].key = value; - } else { - db->state[db->depth].tree = value; - } - } else if (c_avl_get(tree, CJ_ANY, (void *)&value) == 0) { - if (CJ_IS_KEY((cj_key_t *)value)) { - db->state[db->depth].key = value; - } else { - db->state[db->depth].tree = value; - } + if (c_avl_get(tree, key, (void *)&e) == 0) { + db->state[db->depth].entry = e; + } else if (c_avl_get(tree, CJ_ANY, (void *)&e) == 0) { + db->state[db->depth].entry = e; } else { - db->state[db->depth].key = NULL; + db->state[db->depth].entry = NULL; } return 0; @@ -226,51 +227,47 @@ static void cj_advance_array(cj_t *db) { static int cj_cb_boolean(void *ctx, int boolVal) { cj_advance_array(ctx); - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } static int cj_cb_null(void *ctx) { cj_advance_array(ctx); - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } static int cj_cb_number(void *ctx, const char *number, yajl_len_t number_len) { - char buffer[number_len + 1]; - cj_t *db = (cj_t *)ctx; - cj_key_t *key = db->state[db->depth].key; /* Create a null-terminated version of the string. */ + char buffer[number_len + 1]; memcpy(buffer, number, number_len); buffer[sizeof(buffer) - 1] = 0; - - - if (key == NULL) { - /* no config for this element. */ - cj_advance_array(ctx); - return CJ_CB_CONTINUE; - } else if (!CJ_IS_KEY(key)) { - /* the config expects a map or an array. */ - NOTICE( - "curl_json plugin: Found \"%s\", but the configuration expects a map.", - buffer); + if (db->state[db->depth].entry == NULL || + db->state[db->depth].entry->type != KEY) { + if (db->state[db->depth].entry != NULL) { + NOTICE("curl_json plugin: Found \"%s\", but the configuration expects a " + "map.", + buffer); + } cj_advance_array(ctx); return CJ_CB_CONTINUE; } + cj_key_t *key = db->state[db->depth].entry->key; + int type = cj_get_type(key); value_t vt; int status = parse_value(buffer, &vt, type); if (status != 0) { NOTICE("curl_json plugin: Unable to parse number: \"%s\"", buffer); cj_advance_array(ctx); - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } cj_submit(db, key, &vt); cj_advance_array(ctx); - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } /* int cj_cb_number */ /* Queries the key-tree of the parent context for "in_name" and, if found, @@ -291,15 +288,15 @@ static int cj_cb_map_key(void *ctx, unsigned char const *in_name, static int cj_cb_string(void *ctx, const unsigned char *val, yajl_len_t len) { /* Handle the string as if it was a number. */ - return (cj_cb_number(ctx, (const char *)val, len)); + return cj_cb_number(ctx, (const char *)val, len); } /* int cj_cb_string */ static int cj_cb_end(void *ctx) { cj_t *db = (cj_t *)ctx; - db->state[db->depth].tree = NULL; + memset(&db->state[db->depth], 0, sizeof(db->state[db->depth])); db->depth--; cj_advance_array(ctx); - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } static int cj_cb_start_map(void *ctx) { @@ -308,10 +305,10 @@ static int cj_cb_start_map(void *ctx) { if ((db->depth + 1) >= YAJL_MAX_DEPTH) { ERROR("curl_json plugin: %s depth exceeds max, aborting.", db->url ? db->url : db->sock); - return (CJ_CB_ABORT); + return CJ_CB_ABORT; } db->depth++; - return (CJ_CB_CONTINUE); + return CJ_CB_CONTINUE; } static int cj_cb_end_map(void *ctx) { return cj_cb_end(ctx); } @@ -364,17 +361,16 @@ static void cj_key_free(cj_key_t *key) /* {{{ */ static void cj_tree_free(c_avl_tree_t *tree) /* {{{ */ { char *name; - void *value; + cj_tree_entry_t *e; - while (c_avl_pick(tree, (void *)&name, (void *)&value) == 0) { - cj_key_t *key = (cj_key_t *)value; + while (c_avl_pick(tree, (void *)&name, (void *)&e) == 0) { + sfree(name); - if (CJ_IS_KEY(key)) - cj_key_free(key); + if (e->type == KEY) + cj_key_free(e->key); else - cj_tree_free((c_avl_tree_t *)value); - - sfree(name); + cj_tree_free(e->tree); + sfree(e); } c_avl_destroy(tree); @@ -428,18 +424,79 @@ static int cj_config_append_string(const char *name, struct curl_slist *temp = NULL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl_json plugin: `%s' needs exactly one string argument.", name); - return (-1); + return -1; } temp = curl_slist_append(*dest, ci->values[0].value.string); if (temp == NULL) - return (-1); + return -1; *dest = temp; - return (0); + return 0; } /* }}} int cj_config_append_string */ +/* cj_append_key adds key to the configuration stored in db. + * + * For example: + * "httpd/requests/count", + * "httpd/requests/current" -> + * { "httpd": { "requests": { "count": $key, "current": $key } } } + */ +static int cj_append_key(cj_t *db, cj_key_t *key) { /* {{{ */ + if (db->tree == NULL) + db->tree = cj_avl_create(); + + c_avl_tree_t *tree = db->tree; + + char const *start = key->path; + if (*start == '/') + ++start; + + char const *end; + while ((end = strchr(start, '/')) != NULL) { + char name[PATH_MAX]; + + size_t len = end - start; + if (len == 0) + break; + + len = COUCH_MIN(len, sizeof(name) - 1); + sstrncpy(name, start, len + 1); + + cj_tree_entry_t *e; + if (c_avl_get(tree, name, (void *)&e) != 0) { + e = calloc(1, sizeof(*e)); + if (e == NULL) + return ENOMEM; + e->type = TREE; + e->tree = cj_avl_create(); + + c_avl_insert(tree, strdup(name), e); + } + + if (e->type != TREE) + return EINVAL; + + tree = e->tree; + start = end + 1; + } + + if (strlen(start) == 0) { + ERROR("curl_json plugin: invalid key: %s", key->path); + return -1; + } + + cj_tree_entry_t *e = calloc(1, sizeof(*e)); + if (e == NULL) + return ENOMEM; + e->type = KEY; + e->key = key; + + c_avl_insert(tree, strdup(start), e); + return 0; +} /* }}} int cj_append_key */ + static int cj_config_add_key(cj_t *db, /* {{{ */ oconfig_item_t *ci) { cj_key_t *key; @@ -448,28 +505,27 @@ static int cj_config_add_key(cj_t *db, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl_json plugin: The `Key' block " "needs exactly one string argument."); - return (-1); + return -1; } key = calloc(1, sizeof(*key)); if (key == NULL) { ERROR("curl_json plugin: calloc failed."); - return (-1); + return -1; } - key->magic = CJ_KEY_MAGIC; if (strcasecmp("Key", ci->key) == 0) { status = cf_util_get_string(ci, &key->path); if (status != 0) { sfree(key); - return (status); + return status; } } else { ERROR("curl_json plugin: cj_config: " "Invalid key: %s", ci->key); cj_key_free(key); - return (-1); + return -1; } status = 0; @@ -491,62 +547,22 @@ static int cj_config_add_key(cj_t *db, /* {{{ */ if (status != 0) { cj_key_free(key); - return (-1); + return -1; } if (key->type == NULL) { WARNING("curl_json plugin: `Type' missing in `Key' block."); cj_key_free(key); - return (-1); - } - - /* store path in a tree that will match the json map structure, example: - * "httpd/requests/count", - * "httpd/requests/current" -> - * { "httpd": { "requests": { "count": $key, "current": $key } } } - */ - char *ptr; - char *name; - c_avl_tree_t *tree; - - if (db->tree == NULL) - db->tree = cj_avl_create(); - - tree = db->tree; - ptr = key->path; - if (*ptr == '/') - ++ptr; - - name = ptr; - while ((ptr = strchr(name, '/')) != NULL) { - char ent[PATH_MAX]; - c_avl_tree_t *value; - size_t len; - - len = ptr - name; - if (len == 0) - break; - - len = COUCH_MIN(len, sizeof(ent) - 1); - sstrncpy(ent, name, len + 1); - - if (c_avl_get(tree, ent, (void *)&value) != 0) { - value = cj_avl_create(); - c_avl_insert(tree, strdup(ent), value); - } - - tree = value; - name = ptr + 1; + return -1; } - if (strlen(name) == 0) { - ERROR("curl_json plugin: invalid key: %s", key->path); + status = cj_append_key(db, key); + if (status != 0) { cj_key_free(key); - return (-1); + return -1; } - c_avl_insert(tree, strdup(name), key); - return (status); + return 0; } /* }}} int cj_config_add_key */ static int cj_init_curl(cj_t *db) /* {{{ */ @@ -554,7 +570,7 @@ static int cj_init_curl(cj_t *db) /* {{{ */ db->curl = curl_easy_init(); if (db->curl == NULL) { ERROR("curl_json plugin: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(db->curl, CURLOPT_NOSIGNAL, 1L); @@ -581,7 +597,7 @@ static int cj_init_curl(cj_t *db) /* {{{ */ db->credentials = malloc(credentials_size); if (db->credentials == NULL) { ERROR("curl_json plugin: malloc failed."); - return (-1); + return -1; } ssnprintf(db->credentials, credentials_size, "%s:%s", db->user, @@ -613,7 +629,7 @@ static int cj_init_curl(cj_t *db) /* {{{ */ (long)CDTIME_T_TO_MS(plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int cj_init_curl */ static int cj_config_add_url(oconfig_item_t *ci) /* {{{ */ @@ -624,13 +640,13 @@ static int cj_config_add_url(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl_json plugin: The `URL' block " "needs exactly one string argument."); - return (-1); + return -1; } db = calloc(1, sizeof(*db)); if (db == NULL) { ERROR("curl_json plugin: calloc failed."); - return (-1); + return -1; } db->timeout = -1; @@ -644,11 +660,11 @@ static int cj_config_add_url(oconfig_item_t *ci) /* {{{ */ "Invalid key: %s", ci->key); cj_free(db); - return (-1); + return -1; } if (status != 0) { sfree(db); - return (status); + return status; } /* Fill the `cj_t' structure.. */ @@ -724,10 +740,10 @@ static int cj_config_add_url(oconfig_item_t *ci) /* {{{ */ sfree(cb_name); } else { cj_free(db); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cj_config_add_database */ @@ -758,10 +774,10 @@ static int cj_config(oconfig_item_t *ci) /* {{{ */ if ((success == 0) && (errors > 0)) { ERROR("curl_json plugin: All statements failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cj_config */ /* }}} End of configuration handling functions */ @@ -774,7 +790,7 @@ static const char *cj_host(cj_t *db) /* {{{ */ return db->host; } /* }}} cj_host */ -static void cj_submit(cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ +static void cj_submit_impl(cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ { value_list_t vl = VALUE_LIST_INIT; @@ -798,24 +814,25 @@ static void cj_submit(cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ vl.interval = db->interval; plugin_dispatch_values(&vl); -} /* }}} int cj_submit */ +} /* }}} int cj_submit_impl */ static int cj_sock_perform(cj_t *db) /* {{{ */ { char errbuf[1024]; - struct sockaddr_un sa_unix = {0}; - sa_unix.sun_family = AF_UNIX; + struct sockaddr_un sa_unix = { + .sun_family = AF_UNIX, + }; sstrncpy(sa_unix.sun_path, db->sock, sizeof(sa_unix.sun_path)); int fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) - return (-1); + return -1; if (connect(fd, (struct sockaddr *)&sa_unix, sizeof(sa_unix)) < 0) { ERROR("curl_json plugin: connect(%s) failed: %s", (db->sock != NULL) ? db->sock : "", sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (-1); + return -1; } ssize_t red; @@ -827,13 +844,13 @@ static int cj_sock_perform(cj_t *db) /* {{{ */ (db->sock != NULL) ? db->sock : "", sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (-1); + return -1; } if (!cj_curl_callback(buffer, red, 1, db)) break; } while (red > 0); close(fd); - return (0); + return 0; } /* }}} int cj_sock_perform */ static int cj_curl_perform(cj_t *db) /* {{{ */ @@ -847,7 +864,7 @@ static int cj_curl_perform(cj_t *db) /* {{{ */ if (status != CURLE_OK) { ERROR("curl_json plugin: curl_easy_perform failed with status %i: %s (%s)", status, db->curl_errbuf, url); - return (-1); + return -1; } if (db->stats != NULL) curl_stats_dispatch(db->stats, db->curl, cj_host(db), "curl_json", @@ -861,9 +878,9 @@ static int cj_curl_perform(cj_t *db) /* {{{ */ ERROR("curl_json plugin: curl_easy_perform failed with " "response code %ld (%s)", rc, url); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cj_curl_perform */ static int cj_perform(cj_t *db) /* {{{ */ @@ -881,7 +898,7 @@ static int cj_perform(cj_t *db) /* {{{ */ if (db->yajl == NULL) { ERROR("curl_json plugin: yajl_alloc failed."); db->yajl = yprev; - return (-1); + return -1; } if (db->url) @@ -891,7 +908,7 @@ static int cj_perform(cj_t *db) /* {{{ */ if (status < 0) { yajl_free(db->yajl); db->yajl = yprev; - return (-1); + return -1; } #if HAVE_YAJL_V2 @@ -908,12 +925,12 @@ static int cj_perform(cj_t *db) /* {{{ */ yajl_free_error(db->yajl, errmsg); yajl_free(db->yajl); db->yajl = yprev; - return (-1); + return -1; } yajl_free(db->yajl); db->yajl = yprev; - return (0); + return 0; } /* }}} int cj_perform */ static int cj_read(user_data_t *ud) /* {{{ */ @@ -922,17 +939,26 @@ static int cj_read(user_data_t *ud) /* {{{ */ if ((ud == NULL) || (ud->data == NULL)) { ERROR("curl_json plugin: cj_read: Invalid user data."); - return (-1); + return -1; } db = (cj_t *)ud->data; db->depth = 0; memset(&db->state, 0, sizeof(db->state)); - db->state[db->depth].tree = db->tree; - db->key = NULL; - return cj_perform(db); + /* This is not a compound literal because EPEL6's GCC is not cool enough to + * handle anonymous unions within compound literals. */ + cj_tree_entry_t root = {0}; + root.type = TREE; + root.tree = db->tree; + db->state[0].entry = &root; + + int status = cj_perform(db); + + db->state[0].entry = NULL; + + return status; } /* }}} int cj_read */ static int cj_init(void) /* {{{ */ @@ -940,12 +966,10 @@ static int cj_init(void) /* {{{ */ /* Call this while collectd is still single-threaded to avoid * initialization issues in libgcrypt. */ curl_global_init(CURL_GLOBAL_SSL); - return (0); + return 0; } /* }}} int cj_init */ void module_register(void) { plugin_register_complex_config("curl_json", cj_config); plugin_register_init("curl_json", cj_init); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/curl_json_test.c b/src/curl_json_test.c new file mode 100644 index 00000000..e8f8f6bb --- /dev/null +++ b/src/curl_json_test.c @@ -0,0 +1,148 @@ +/** + * collectd - src/curl_json.c + * Copyright (C) 2017 Florian octo Forster + * + * Licensed under the same terms and conditions as src/curl_json.c. + * + * Authors: + * Florian octo Forster + **/ + +#include "curl_json.c" + +#include "testing.h" + +static void test_submit(cj_t *db, cj_key_t *key, value_t *value) { + /* hack: we repurpose db->curl to store received values. */ + c_avl_tree_t *values = (void *)db->curl; + + value_t *value_copy = calloc(1, sizeof(*value_copy)); + memmove(value_copy, value, sizeof(*value_copy)); + + assert(c_avl_insert(values, key->path, value_copy) == 0); +} + +static derive_t test_metric(cj_t *db, char const *path) { + c_avl_tree_t *values = (void *)db->curl; + + value_t *ret = NULL; + if (c_avl_get(values, path, (void *)&ret) == 0) { + return ret->derive; + } + + return -1; +} + +static cj_t *test_setup(char *json, char *key_path) { + cj_t *db = calloc(1, sizeof(*db)); + db->yajl = yajl_alloc(&ycallbacks, +#if HAVE_YAJL_V2 + /* alloc funcs = */ NULL, +#else + /* alloc funcs = */ NULL, NULL, +#endif + /* context = */ (void *)db); + + /* hack; see above. */ + db->curl = (void *)cj_avl_create(); + + cj_key_t *key = calloc(1, sizeof(*key)); + key->path = strdup(key_path); + key->type = strdup("MAGIC"); + + assert(cj_append_key(db, key) == 0); + + cj_tree_entry_t root = {0}; + root.type = TREE; + root.tree = db->tree; + db->state[0].entry = &root; + + cj_curl_callback(json, strlen(json), 1, db); +#if HAVE_YAJL_V2 + yajl_complete_parse(db->yajl); +#else + yajl_parse_complete(db->yajl); +#endif + + db->state[0].entry = NULL; + + return db; +} + +static void test_teardown(cj_t *db) { + c_avl_tree_t *values = (void *)db->curl; + db->curl = NULL; + + void *key; + void *value; + while (c_avl_pick(values, &key, &value) == 0) { + /* key will be freed by cj_free. */ + free(value); + } + c_avl_destroy(values); + + yajl_free(db->yajl); + db->yajl = NULL; + + cj_free(db); +} + +DEF_TEST(parse) { + struct { + char *json; + char *key_path; + derive_t want; + } cases[] = { + /* simple map */ + {"{\"foo\":42,\"bar\":23}", "foo", 42}, + {"{\"foo\":42,\"bar\":23}", "bar", 23}, + /* nested map */ + {"{\"a\":{\"b\":{\"c\":123}}", "a/b/c", 123}, + {"{\"x\":{\"y\":{\"z\":789}}", "x/*/z", 789}, + /* simple array */ + {"[10,11,12,13]", "0", 10}, + {"[10,11,12,13]", "1", 11}, + {"[10,11,12,13]", "2", 12}, + {"[10,11,12,13]", "3", 13}, + /* array index after non-numeric entry */ + {"[true,11]", "1", 11}, + {"[null,11]", "1", 11}, + {"[\"s\",11]", "1", 11}, + {"[{\"k\":\"v\"},11]", "1", 11}, + {"[[0,1,2],11]", "1", 11}, + /* nested array */ + {"[[0,1,2],[3,4,5],[6,7,8]]", "0/0", 0}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "0/1", 1}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "0/2", 2}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "1/0", 3}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "1/1", 4}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "1/2", 5}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "2/0", 6}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "2/1", 7}, + {"[[0,1,2],[3,4,5],[6,7,8]]", "2/2", 8}, + /* testcase from #2266 */ + {"{\"a\":[[10,11,12,13,14]]}", "a/0/0", 10}, + {"{\"a\":[[10,11,12,13,14]]}", "a/0/1", 11}, + {"{\"a\":[[10,11,12,13,14]]}", "a/0/2", 12}, + {"{\"a\":[[10,11,12,13,14]]}", "a/0/3", 13}, + {"{\"a\":[[10,11,12,13,14]]}", "a/0/4", 14}, + }; + + for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) { + cj_t *db = test_setup(cases[i].json, cases[i].key_path); + + EXPECT_EQ_INT(cases[i].want, test_metric(db, cases[i].key_path)); + + test_teardown(db); + } + + return 0; +} + +int main(int argc, char **argv) { + cj_submit = test_submit; + + RUN_TEST(parse); + + END_TEST; +} diff --git a/src/curl_xml.c b/src/curl_xml.c index 4e4c6f99..a0dca05e 100644 --- a/src/curl_xml.c +++ b/src/curl_xml.c @@ -111,11 +111,11 @@ static size_t cx_curl_callback(void *buf, /* {{{ */ if (db == NULL) { ERROR("curl_xml plugin: cx_curl_callback: " "user_data pointer is NULL."); - return (0); + return 0; } if (len == 0) - return (len); + return len; if ((db->buffer_fill + len) >= db->buffer_size) { char *temp; @@ -123,7 +123,7 @@ static size_t cx_curl_callback(void *buf, /* {{{ */ temp = realloc(db->buffer, db->buffer_fill + len + 1); if (temp == NULL) { ERROR("curl_xml plugin: realloc failed."); - return (0); + return 0; } db->buffer = temp; db->buffer_size = db->buffer_fill + len + 1; @@ -133,7 +133,7 @@ static size_t cx_curl_callback(void *buf, /* {{{ */ db->buffer_fill += len; db->buffer[db->buffer_fill] = 0; - return (len); + return len; } /* }}} size_t cx_curl_callback */ static void cx_xpath_free(cx_xpath_t *xpath) /* {{{ */ @@ -221,33 +221,33 @@ static int cx_config_append_string(const char *name, struct curl_slist *temp = NULL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl_xml plugin: `%s' needs exactly one string argument.", name); - return (-1); + return -1; } temp = curl_slist_append(*dest, ci->values[0].value.string); if (temp == NULL) - return (-1); + return -1; *dest = temp; - return (0); + return 0; } /* }}} int cx_config_append_string */ static int cx_check_type(const data_set_t *ds, cx_xpath_t *xpath) /* {{{ */ { if (!ds) { WARNING("curl_xml plugin: DataSet `%s' not defined.", xpath->type); - return (-1); + return -1; } if (ds->ds_num != xpath->values_len) { WARNING("curl_xml plugin: DataSet `%s' requires %zu values, but config " "talks about %zu", xpath->type, ds->ds_num, xpath->values_len); - return (-1); + return -1; } - return (0); + return 0; } /* }}} cx_check_type */ static xmlXPathObjectPtr @@ -271,7 +271,7 @@ static int cx_if_not_text_node(xmlNodePtr node) /* {{{ */ { if (node->type == XML_TEXT_NODE || node->type == XML_ATTRIBUTE_NODE || node->type == XML_ELEMENT_NODE) - return (0); + return 0; WARNING("curl_xml plugin: " "Node \"%s\" doesn't seem to be a text node. Skipping...", @@ -290,7 +290,7 @@ static int cx_handle_single_value_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ values_node_obj = cx_evaluate_xpath(xpath_ctx, BAD_CAST xpath->values[index].path); if (values_node_obj == NULL) - return (-1); /* Error already logged. */ + return -1; /* Error already logged. */ values_node = values_node_obj->nodesetval; tmp_size = (values_node) ? values_node->nodeNr : 0; @@ -301,7 +301,7 @@ static int cx_handle_single_value_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "Skipping...", xpath->values[index].path); xmlXPathFreeObject(values_node_obj); - return (-1); + return -1; } if (tmp_size > 1) { @@ -310,7 +310,7 @@ static int cx_handle_single_value_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "only one node. Skipping...", xpath->values[index].path); xmlXPathFreeObject(values_node_obj); - return (-1); + return -1; } /* ignoring the element if other than textnode/attribute*/ @@ -320,7 +320,7 @@ static int cx_handle_single_value_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "only text/attribute node which is not the case. Skipping...", xpath->values[index].path); xmlXPathFreeObject(values_node_obj); - return (-1); + return -1; } node_value = (char *)xmlNodeGetContent(values_node->nodeTab[0]); @@ -351,7 +351,7 @@ static int cx_handle_single_value_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ /* We have reached here which means that * we have got something to work */ - return (0); + return 0; } /* }}} int cx_handle_single_value_xpath */ static int cx_handle_all_value_xpaths(xmlXPathContextPtr xpath_ctx, /* {{{ */ @@ -368,13 +368,13 @@ static int cx_handle_all_value_xpaths(xmlXPathContextPtr xpath_ctx, /* {{{ */ for (size_t i = 0; i < xpath->values_len; i++) { status = cx_handle_single_value_xpath(xpath_ctx, xpath, ds, vl, i); if (status != 0) - return (-1); /* An error has been printed. */ + return -1; /* An error has been printed. */ } /* for (i = 0; i < xpath->values_len; i++) */ plugin_dispatch_values(vl); vl->values = NULL; - return (0); + return 0; } /* }}} int cx_handle_all_value_xpaths */ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ @@ -393,7 +393,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "Base-XPath %s is a table (more than one result was returned), " "but no instance-XPath has been defined.", xpath->path); - return (-1); + return -1; } /* instance has to be an xpath expression */ @@ -402,7 +402,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ instance_node_obj = cx_evaluate_xpath(xpath_ctx, BAD_CAST xpath->instance); if (instance_node_obj == NULL) - return (-1); /* error is logged already */ + return -1; /* error is logged already */ instance_node = instance_node_obj->nodesetval; tmp_size = (instance_node) ? instance_node->nodeNr : 0; @@ -414,7 +414,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "any of the nodes. Skipping the node.", xpath->instance); xmlXPathFreeObject(instance_node_obj); - return (-1); + return -1; } if (tmp_size > 1) { @@ -423,7 +423,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "to return only one text node. Skipping the node.", xpath->instance); xmlXPathFreeObject(instance_node_obj); - return (-1); + return -1; } /* ignoring the element if other than textnode/attribute */ @@ -434,7 +434,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ "which is not the case. Skipping the node.", xpath->instance); xmlXPathFreeObject(instance_node_obj); - return (-1); + return -1; } } /* if (xpath->instance != NULL) */ @@ -461,7 +461,7 @@ static int cx_handle_instance_xpath(xmlXPathContextPtr xpath_ctx, /* {{{ */ * somewhere inside this structure. */ xmlXPathFreeObject(instance_node_obj); - return (0); + return 0; } /* }}} int cx_handle_instance_xpath */ static int cx_handle_base_xpath(char const *plugin_instance, /* {{{ */ @@ -528,7 +528,7 @@ static int cx_handle_base_xpath(char const *plugin_instance, /* {{{ */ /* free up the allocated memory */ xmlXPathFreeObject(base_node_obj); - return (0); + return 0; } /* }}} cx_handle_base_xpath */ static int cx_handle_parsed_xml(xmlDocPtr doc, /* {{{ */ @@ -565,14 +565,14 @@ static int cx_parse_stats_xml(xmlChar *xml, cx_t *db) /* {{{ */ doc = xmlParseDoc(xml); if (doc == NULL) { ERROR("curl_xml plugin: Failed to parse the xml document - %s", xml); - return (-1); + return -1; } xpath_ctx = xmlXPathNewContext(doc); if (xpath_ctx == NULL) { ERROR("curl_xml plugin: Failed to create the xml context"); xmlFreeDoc(doc); - return (-1); + return -1; } for (size_t i = 0; i < db->namespaces_num; i++) { @@ -585,7 +585,7 @@ static int cx_parse_stats_xml(xmlChar *xml, cx_t *db) /* {{{ */ ns->prefix, ns->url); xmlXPathFreeContext(xpath_ctx); xmlFreeDoc(doc); - return (status); + return status; } } @@ -609,7 +609,7 @@ static int cx_curl_perform(cx_t *db, CURL *curl) /* {{{ */ if (status != CURLE_OK) { ERROR("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)", status, db->curl_errbuf, url); - return (-1); + return -1; } if (db->stats != NULL) curl_stats_dispatch(db->stats, db->curl, cx_host(db), "curl_xml", @@ -623,7 +623,7 @@ static int cx_curl_perform(cx_t *db, CURL *curl) /* {{{ */ ERROR( "curl_xml plugin: curl_easy_perform failed with response code %ld (%s)", rc, url); - return (-1); + return -1; } ptr = db->buffer; @@ -640,7 +640,7 @@ static int cx_read(user_data_t *ud) /* {{{ */ if ((ud == NULL) || (ud->data == NULL)) { ERROR("curl_xml plugin: cx_read: Invalid user data."); - return (-1); + return -1; } db = (cx_t *)ud->data; @@ -654,13 +654,13 @@ static int cx_config_add_values(const char *name, cx_xpath_t *xpath, /* {{{ */ oconfig_item_t *ci) { if (ci->values_num < 1) { WARNING("curl_xml plugin: `ValuesFrom' needs at least one argument."); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING("curl_xml plugin: `ValuesFrom' needs only string argument."); - return (-1); + return -1; } sfree(xpath->values); @@ -668,7 +668,7 @@ static int cx_config_add_values(const char *name, cx_xpath_t *xpath, /* {{{ */ xpath->values_len = 0; xpath->values = malloc(sizeof(cx_values_t) * ci->values_num); if (xpath->values == NULL) - return (-1); + return -1; xpath->values_len = (size_t)ci->values_num; /* populate cx_values_t structure */ @@ -678,7 +678,7 @@ static int cx_config_add_values(const char *name, cx_xpath_t *xpath, /* {{{ */ sizeof(xpath->values[i].path)); } - return (0); + return 0; } /* }}} cx_config_add_values */ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ @@ -691,13 +691,13 @@ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ xpath = calloc(1, sizeof(*xpath)); if (xpath == NULL) { ERROR("curl_xml plugin: calloc failed."); - return (-1); + return -1; } status = cf_util_get_string(ci, &xpath->path); if (status != 0) { cx_xpath_free(xpath); - return (status); + return status; } /* error out if xpath->path is an empty string */ @@ -705,7 +705,7 @@ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ ERROR("curl_xml plugin: invalid xpath. " "xpath value can't be an empty string"); cx_xpath_free(xpath); - return (-1); + return -1; } status = 0; @@ -745,7 +745,7 @@ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ if (db->list == NULL) { ERROR("curl_xml plugin: list creation failed."); cx_xpath_free(xpath); - return (-1); + return -1; } } @@ -753,7 +753,7 @@ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ if (name == NULL) { ERROR("curl_xml plugin: strdup failed."); cx_xpath_free(xpath); - return (-1); + return -1; } le = llentry_create(name, xpath); @@ -761,11 +761,11 @@ static int cx_config_add_xpath(cx_t *db, oconfig_item_t *ci) /* {{{ */ ERROR("curl_xml plugin: llentry_create failed."); cx_xpath_free(xpath); sfree(name); - return (-1); + return -1; } llist_append(db->list, le); - return (0); + return 0; } /* }}} int cx_config_add_xpath */ static int cx_config_add_namespace(cx_t *db, /* {{{ */ @@ -776,14 +776,14 @@ static int cx_config_add_namespace(cx_t *db, /* {{{ */ (ci->values[1].type != OCONFIG_TYPE_STRING)) { WARNING("curl_xml plugin: The `Namespace' option " "needs exactly two string arguments."); - return (EINVAL); + return EINVAL; } ns = realloc(db->namespaces, sizeof(*db->namespaces) * (db->namespaces_num + 1)); if (ns == NULL) { ERROR("curl_xml plugin: realloc failed."); - return (ENOMEM); + return ENOMEM; } db->namespaces = ns; ns = db->namespaces + db->namespaces_num; @@ -796,11 +796,11 @@ static int cx_config_add_namespace(cx_t *db, /* {{{ */ sfree(ns->prefix); sfree(ns->url); ERROR("curl_xml plugin: strdup failed."); - return (ENOMEM); + return ENOMEM; } db->namespaces_num++; - return (0); + return 0; } /* }}} int cx_config_add_namespace */ /* Initialize db->curl */ @@ -809,7 +809,7 @@ static int cx_init_curl(cx_t *db) /* {{{ */ db->curl = curl_easy_init(); if (db->curl == NULL) { ERROR("curl_xml plugin: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(db->curl, CURLOPT_NOSIGNAL, 1L); @@ -836,7 +836,7 @@ static int cx_init_curl(cx_t *db) /* {{{ */ db->credentials = malloc(credentials_size); if (db->credentials == NULL) { ERROR("curl_xml plugin: malloc failed."); - return (-1); + return -1; } ssnprintf(db->credentials, credentials_size, "%s:%s", db->user, @@ -865,7 +865,7 @@ static int cx_init_curl(cx_t *db) /* {{{ */ (long)CDTIME_T_TO_MS(plugin_get_interval())); #endif - return (0); + return 0; } /* }}} int cx_init_curl */ static int cx_config_add_url(oconfig_item_t *ci) /* {{{ */ @@ -876,13 +876,13 @@ static int cx_config_add_url(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("curl_xml plugin: The `URL' block " "needs exactly one string argument."); - return (-1); + return -1; } db = calloc(1, sizeof(*db)); if (db == NULL) { ERROR("curl_xml plugin: calloc failed."); - return (-1); + return -1; } db->timeout = -1; @@ -891,14 +891,14 @@ static int cx_config_add_url(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &db->url); if (status != 0) { sfree(db); - return (status); + return status; } } else { ERROR("curl_xml plugin: cx_config: " "Invalid key: %s", ci->key); cx_free(db); - return (-1); + return -1; } /* Fill the `cx_t' structure.. */ @@ -974,10 +974,10 @@ static int cx_config_add_url(oconfig_item_t *ci) /* {{{ */ sfree(cb_name); } else { cx_free(db); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cx_config_add_url */ /* }}} End of configuration handling functions */ @@ -1008,10 +1008,10 @@ static int cx_config(oconfig_item_t *ci) /* {{{ */ if ((success == 0) && (errors > 0)) { ERROR("curl_xml plugin: All statements failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cx_config */ static int cx_init(void) /* {{{ */ @@ -1019,12 +1019,10 @@ static int cx_init(void) /* {{{ */ /* Call this while collectd is still single-threaded to avoid * initialization issues in libgcrypt. */ curl_global_init(CURL_GLOBAL_SSL); - return (0); + return 0; } /* }}} int cx_init */ void module_register(void) { plugin_register_complex_config("curl_xml", cx_config); plugin_register_init("curl_xml", cx_init); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am deleted file mode 100644 index 52079438..00000000 --- a/src/daemon/Makefile.am +++ /dev/null @@ -1,111 +0,0 @@ -AM_CPPFLAGS = -I$(top_srcdir)/src -AM_CPPFLAGS += -DPREFIX='"${prefix}"' -AM_CPPFLAGS += -DCONFIGFILE='"${sysconfdir}/${PACKAGE_NAME}.conf"' -AM_CPPFLAGS += -DLOCALSTATEDIR='"${localstatedir}"' -AM_CPPFLAGS += -DPKGLOCALSTATEDIR='"${localstatedir}/lib/${PACKAGE_NAME}"' -if BUILD_FEATURE_DAEMON -AM_CPPFLAGS += -DPIDFILE='"${localstatedir}/run/${PACKAGE_NAME}.pid"' -endif -AM_CPPFLAGS += -DPLUGINDIR='"${pkglibdir}"' -AM_CPPFLAGS += -DPKGDATADIR='"${pkgdatadir}"' - -# Link to these libraries.. -COMMON_LIBS = $(PTHREAD_LIBS) -if BUILD_WITH_CAPABILITY -COMMON_LIBS += -lcap -endif -if BUILD_WITH_LIBRT -COMMON_LIBS += -lrt -endif -if BUILD_WITH_LIBPOSIX4 -COMMON_LIBS += -lposix4 -endif -if BUILD_WITH_LIBSOCKET -COMMON_LIBS += -lsocket -endif -if BUILD_WITH_LIBRESOLV -COMMON_LIBS += -lresolv -endif -if BUILD_WITH_LIBKSTAT -COMMON_LIBS += -lkstat -endif -if BUILD_WITH_LIBDEVINFO -COMMON_LIBS += -ldevinfo -endif - -sbin_PROGRAMS = collectd - -noinst_LTLIBRARIES = libavltree.la libcommon.la libheap.la libmetadata.la libplugin_mock.la - -libavltree_la_SOURCES = utils_avltree.c utils_avltree.h - -libcommon_la_SOURCES = common.c common.h -libcommon_la_LIBADD = $(COMMON_LIBS) - -libheap_la_SOURCES = utils_heap.c utils_heap.h - -libmetadata_la_SOURCES = meta_data.c meta_data.h - -libplugin_mock_la_SOURCES = plugin_mock.c utils_cache_mock.c \ - utils_time.c utils_time.h -libplugin_mock_la_CPPFLAGS = $(AM_CPPFLAGS) -DMOCK_TIME -libplugin_mock_la_LIBADD = $(COMMON_LIBS) libcommon.la - -collectd_SOURCES = collectd.c collectd.h \ - configfile.c configfile.h \ - filter_chain.c filter_chain.h \ - meta_data.c meta_data.h \ - plugin.c plugin.h \ - utils_cache.c utils_cache.h \ - utils_complain.c utils_complain.h \ - utils_ignorelist.c utils_ignorelist.h \ - utils_llist.c utils_llist.h \ - utils_random.c utils_random.h \ - utils_subst.c utils_subst.h \ - utils_time.c utils_time.h \ - types_list.c types_list.h \ - utils_threshold.c utils_threshold.h - - -collectd_CPPFLAGS = $(AM_CPPFLAGS) $(LTDLINCL) -collectd_CFLAGS = $(AM_CFLAGS) -collectd_LDFLAGS = -export-dynamic -collectd_LDADD = libavltree.la libcommon.la libheap.la -lm $(COMMON_LIBS) -collectd_DEPENDENCIES = libavltree.la libcommon.la libheap.la libmetadata.la - -# The daemon needs to call sg_init, so we need to link it against libstatgrab, -# too. -octo -if BUILD_WITH_LIBSTATGRAB -collectd_CFLAGS += $(BUILD_WITH_LIBSTATGRAB_CFLAGS) -collectd_LDADD += $(BUILD_WITH_LIBSTATGRAB_LDFLAGS) -endif - -if BUILD_WITH_OWN_LIBOCONFIG -collectd_LDADD += $(LIBLTDL) $(top_builddir)/src/liboconfig/liboconfig.la -collectd_DEPENDENCIES += $(top_builddir)/src/liboconfig/liboconfig.la -else -collectd_LDADD += -loconfig -endif - -LOG_COMPILER = env VALGRIND="@VALGRIND@" $(abs_top_srcdir)/testwrapper.sh - -check_PROGRAMS = test_common test_meta_data test_utils_avltree test_utils_heap test_utils_time test_utils_subst -TESTS = test_common test_meta_data test_utils_avltree test_utils_heap test_utils_time test_utils_subst - -test_common_SOURCES = common_test.c ../testing.h -test_common_LDADD = libplugin_mock.la - -test_meta_data_SOURCES = meta_data_test.c ../testing.h -test_meta_data_LDADD = libmetadata.la libplugin_mock.la - -test_utils_avltree_SOURCES = utils_avltree_test.c ../testing.h -test_utils_avltree_LDADD = libavltree.la $(COMMON_LIBS) - -test_utils_heap_SOURCES = utils_heap_test.c ../testing.h -test_utils_heap_LDADD = libheap.la $(COMMON_LIBS) - -test_utils_time_SOURCES = utils_time_test.c ../testing.h - -test_utils_subst_SOURCES = utils_subst_test.c ../testing.h \ - utils_subst.c utils_subst.h -test_utils_subst_LDADD = libplugin_mock.la diff --git a/src/daemon/collectd.c b/src/daemon/collectd.c index 6b7c4136..2edfa377 100644 --- a/src/daemon/collectd.c +++ b/src/daemon/collectd.c @@ -94,18 +94,18 @@ static int init_hostname(void) { str = global_option_get("Hostname"); if ((str != NULL) && (str[0] != 0)) { sstrncpy(hostname_g, str, sizeof(hostname_g)); - return (0); + return 0; } if (gethostname(hostname_g, sizeof(hostname_g)) != 0) { fprintf(stderr, "`gethostname' failed and no " "hostname was configured.\n"); - return (-1); + return -1; } str = global_option_get("FQDNLookup"); if (IS_FALSE(str)) - return (0); + return 0; struct addrinfo ai_hints = {.ai_flags = AI_CANONNAME}; @@ -117,7 +117,7 @@ static int init_hostname(void) { "name. Please fix the network " "configuration.", hostname_g); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -130,7 +130,7 @@ static int init_hostname(void) { } freeaddrinfo(ai_list); - return (0); + return 0; } /* int init_hostname */ static int init_global_variables(void) { @@ -147,15 +147,15 @@ static int init_global_variables(void) { if (timeout_g <= 1) { fprintf(stderr, "Cannot set the timeout to a correct value.\n" "Please check your settings.\n"); - return (-1); + return -1; } DEBUG("timeout_g = %i;", timeout_g); if (init_hostname() != 0) - return (-1); + return -1; DEBUG("hostname_g = %s;", hostname_g); - return (0); + return 0; } /* int init_global_variables */ static int change_basedir(const char *orig_dir) { @@ -167,7 +167,7 @@ static int change_basedir(const char *orig_dir) { if (dir == NULL) { char errbuf[1024]; ERROR("strdup failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } dirlen = strlen(dir); @@ -176,19 +176,19 @@ static int change_basedir(const char *orig_dir) { if (dirlen == 0) { free(dir); - return (-1); + return -1; } status = chdir(dir); if (status == 0) { free(dir); - return (0); + return 0; } else if (errno != ENOENT) { char errbuf[1024]; ERROR("change_basedir: chdir (%s): %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); free(dir); - return (-1); + return -1; } status = mkdir(dir, S_IRWXU | S_IRWXG | S_IRWXO); @@ -197,7 +197,7 @@ static int change_basedir(const char *orig_dir) { ERROR("change_basedir: mkdir (%s): %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); free(dir); - return (-1); + return -1; } status = chdir(dir); @@ -206,11 +206,11 @@ static int change_basedir(const char *orig_dir) { ERROR("change_basedir: chdir (%s): %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); free(dir); - return (-1); + return -1; } free(dir); - return (0); + return 0; } /* static int change_basedir (char *dir) */ #if HAVE_LIBKSTAT @@ -285,12 +285,12 @@ static int do_init(void) { #endif )) { ERROR("sg_init: %s", sg_str_error(sg_get_error())); - return (-1); + return -1; } if (sg_drop_privileges()) { ERROR("sg_drop_privileges: %s", sg_str_error(sg_get_error())); - return (-1); + return -1; } #endif @@ -329,12 +329,12 @@ static int do_loop(void) { if (errno != EINTR) { char errbuf[1024]; ERROR("nanosleep failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } } /* while (loop == 0) */ - return (0); + return 0; } /* int do_loop */ static int do_shutdown(void) { @@ -349,13 +349,13 @@ static int pidfile_create(void) { if ((fh = fopen(file, "w")) == NULL) { char errbuf[1024]; ERROR("fopen (%s): %s", file, sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } fprintf(fh, "%i\n", (int)getpid()); fclose(fh); - return (0); + return 0; } /* static int pidfile_create (const char *file) */ static int pidfile_remove(void) { @@ -363,7 +363,7 @@ static int pidfile_remove(void) { if (file == NULL) return 0; - return (unlink(file)); + return unlink(file); } /* static int pidfile_remove (const char *file) */ #endif /* COLLECT_DAEMON */ @@ -522,7 +522,7 @@ int main(int argc, char **argv) { if (cf_read(configfile)) { fprintf(stderr, "Error: Reading the config file failed!\n" "Read the logs for details.\n"); - return (1); + return 1; } /* @@ -532,10 +532,10 @@ int main(int argc, char **argv) { if ((basedir = global_option_get("BaseDir")) == NULL) { fprintf(stderr, "Don't have a basedir to use. This should not happen. Ever."); - return (1); + return 1; } else if (change_basedir(basedir)) { fprintf(stderr, "Error: Unable to change to directory `%s'.\n", basedir); - return (1); + return 1; } /* @@ -548,7 +548,7 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); if (test_config) - return (0); + return 0; #if COLLECT_DAEMON /* @@ -573,11 +573,11 @@ int main(int argc, char **argv) { /* error */ char errbuf[1024]; fprintf(stderr, "fork: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } else if (pid != 0) { /* parent */ /* printf ("Running (PID %i)\n", pid); */ - return (0); + return 0; } /* Detach from session */ @@ -596,21 +596,21 @@ int main(int argc, char **argv) { if (status != 0) { ERROR("Error: Could not connect `STDIN' to `/dev/null' (status %d)", status); - return (1); + return 1; } status = dup(0); if (status != 1) { ERROR("Error: Could not connect `STDOUT' to `/dev/null' (status %d)", status); - return (1); + return 1; } status = dup(0); if (status != 2) { ERROR("Error: Could not connect `STDERR' to `/dev/null', (status %d)", status); - return (1); + return 1; } } /* if (daemonize) */ #endif /* COLLECT_DAEMON */ @@ -628,7 +628,7 @@ int main(int argc, char **argv) { char errbuf[1024]; ERROR("Error: Failed to install a signal handler for signal INT: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } struct sigaction sig_term_action = {.sa_handler = sig_term_handler}; @@ -637,7 +637,7 @@ int main(int argc, char **argv) { char errbuf[1024]; ERROR("Error: Failed to install a signal handler for signal TERM: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } struct sigaction sig_usr1_action = {.sa_handler = sig_usr1_handler}; @@ -646,7 +646,7 @@ int main(int argc, char **argv) { char errbuf[1024]; ERROR("Error: Failed to install a signal handler for signal USR1: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } /* @@ -680,5 +680,5 @@ int main(int argc, char **argv) { pidfile_remove(); #endif /* COLLECT_DAEMON */ - return (exit_status); + return exit_status; } /* int main */ diff --git a/src/daemon/collectd.h b/src/daemon/collectd.h index 4ec002de..01d484ee 100644 --- a/src/daemon/collectd.h +++ b/src/daemon/collectd.h @@ -31,36 +31,27 @@ #include "config.h" #endif +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif -#if STDC_HEADERS -#include -#include -#else -#if HAVE_STDLIB_H -#include -#endif -#endif -#if HAVE_STRING_H -#if !STDC_HEADERS && HAVE_MEMORY_H -#include -#endif -#include -#endif #if HAVE_STRINGS_H #include #endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif #if HAVE_UNISTD_H #include #endif @@ -73,18 +64,9 @@ #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val)&255) == 0) #endif -#if HAVE_SIGNAL_H -#include -#endif #if HAVE_FCNTL_H #include #endif -#if HAVE_ERRNO_H -#include -#endif -#if HAVE_LIMITS_H -#include -#endif #if TIME_WITH_SYS_TIME #include #include @@ -99,18 +81,6 @@ #include #endif -#if HAVE_ASSERT_H -#include -#else -#define assert(...) /* nop */ -#endif - -#if !defined(HAVE__BOOL) || !HAVE__BOOL -typedef int _Bool; -#undef HAVE__BOOL -#define HAVE__BOOL 1 -#endif - #if NAN_STATIC_DEFAULT #include /* #endif NAN_STATIC_DEFAULT*/ @@ -212,12 +182,6 @@ typedef int _Bool; #endif #endif -#if HAVE_STDARG_H -#include -#endif -#if HAVE_CTYPE_H -#include -#endif #if HAVE_SYS_PARAM_H #include #endif @@ -276,10 +240,8 @@ typedef int _Bool; /* Only enable __attribute__() for compilers known to support it. */ #if !defined(__clang__) && !defined(__GNUC__) -#if !defined(__attribute__) #define __attribute__(x) /**/ #endif -#endif #if defined(COLLECT_DEBUG) && COLLECT_DEBUG && defined(__GNUC__) && __GNUC__ #undef strcpy diff --git a/src/daemon/common.c b/src/daemon/common.c index ec5c7aba..d9c83483 100644 --- a/src/daemon/common.c +++ b/src/daemon/common.c @@ -37,10 +37,6 @@ #include "plugin.h" #include "utils_cache.h" -#ifdef HAVE_MATH_H -#include -#endif - /* for getaddrinfo */ #include #include @@ -85,7 +81,7 @@ char *sstrncpy(char *dest, const char *src, size_t n) { strncpy(dest, src, n); dest[n - 1] = '\0'; - return (dest); + return dest; } /* char *sstrncpy */ int ssnprintf(char *dest, size_t n, const char *format, ...) { @@ -97,7 +93,7 @@ int ssnprintf(char *dest, size_t n, const char *format, ...) { dest[n - 1] = '\0'; va_end(ap); - return (ret); + return ret; } /* int ssnprintf */ char *ssnprintf_alloc(char const *format, ...) /* {{{ */ @@ -115,17 +111,17 @@ char *ssnprintf_alloc(char const *format, ...) /* {{{ */ status = vsnprintf(static_buffer, sizeof(static_buffer), format, ap); va_end(ap); if (status < 0) - return (NULL); + return NULL; /* "status" does not include the null byte. */ alloc_buffer_size = (size_t)(status + 1); if (alloc_buffer_size <= sizeof(static_buffer)) - return (strdup(static_buffer)); + return strdup(static_buffer); /* Allocate a buffer large enough to hold the string. */ alloc_buffer = calloc(1, alloc_buffer_size); if (alloc_buffer == NULL) - return (NULL); + return NULL; /* Print again into this new buffer. */ va_start(ap, format); @@ -133,10 +129,10 @@ char *ssnprintf_alloc(char const *format, ...) /* {{{ */ va_end(ap); if (status < 0) { sfree(alloc_buffer); - return (NULL); + return NULL; } - return (alloc_buffer); + return alloc_buffer; } /* }}} char *ssnprintf_alloc */ char *sstrdup(const char *s) { @@ -144,7 +140,7 @@ char *sstrdup(const char *s) { size_t sz; if (s == NULL) - return (NULL); + return NULL; /* Do not use `strdup' here, because it's not specified in POSIX. It's * ``only'' an XSI extension. */ @@ -154,9 +150,9 @@ char *sstrdup(const char *s) { ERROR("sstrdup: Out of memory."); exit(3); } - memcpy(r, s, sizeof(char) * sz); + memcpy(r, s, sz); - return (r); + return r; } /* char *sstrdup */ /* Even though Posix requires "strerror_r" to return an "int", @@ -201,7 +197,7 @@ char *sstrerror(int errnum, char *buf, size_t buflen) { } #endif /* STRERROR_R_CHAR_P */ - return (buf); + return buf; } /* char *sstrerror */ void *smalloc(size_t size) { @@ -212,7 +208,7 @@ void *smalloc(size_t size) { exit(3); } - return (r); + return r; } /* void *smalloc */ #if 0 @@ -243,14 +239,14 @@ ssize_t sread(int fd, void *buf, size_t count) { continue; if (status < 0) - return (status); + return status; if (status == 0) { DEBUG("Received EOF from fd %i. " "Closing fd and returning error.", fd); close(fd); - return (-1); + return -1; } assert((0 > status) || (nleft >= (size_t)status)); @@ -259,7 +255,7 @@ ssize_t sread(int fd, void *buf, size_t count) { ptr = ptr + ((size_t)status); } - return (0); + return 0; } ssize_t swrite(int fd, const void *buf, size_t count) { @@ -302,7 +298,7 @@ ssize_t swrite(int fd, const void *buf, size_t count) { ptr = ptr + ((size_t)status); } - return (0); + return 0; } int strsplit(char *string, char **fields, size_t size) { @@ -321,7 +317,7 @@ int strsplit(char *string, char **fields, size_t size) { break; } - return ((int)i); + return (int)i; } int strjoin(char *buffer, size_t buffer_size, char **fields, size_t fields_num, @@ -334,7 +330,7 @@ int strjoin(char *buffer, size_t buffer_size, char **fields, size_t fields_num, if (((fields_num != 0) && (fields == NULL)) || ((buffer_size != 0) && (buffer == NULL))) - return (-EINVAL); + return -EINVAL; if (buffer != NULL) buffer[0] = 0; @@ -387,14 +383,14 @@ int escape_string(char *buffer, size_t buffer_size) { /* Check if we need to escape at all first */ temp = strpbrk(buffer, " \t\"\\"); if (temp == NULL) - return (0); + return 0; if (buffer_size < 3) - return (EINVAL); + return EINVAL; temp = calloc(1, buffer_size); if (temp == NULL) - return (ENOMEM); + return ENOMEM; temp[0] = '"'; j = 1; @@ -422,7 +418,7 @@ int escape_string(char *buffer, size_t buffer_size) { sstrncpy(buffer, temp, buffer_size); sfree(temp); - return (0); + return 0; } /* int escape_string */ int strunescape(char *buf, size_t buf_len) { @@ -434,7 +430,7 @@ int strunescape(char *buf, size_t buf_len) { ERROR("string unescape: backslash found at end of string."); /* Ensure null-byte at the end of the buffer. */ buf[i] = 0; - return (-1); + return -1; } switch (buf[i + 1]) { @@ -457,7 +453,7 @@ int strunescape(char *buf, size_t buf_len) { memmove(buf + i + 1, buf + i + 2, buf_len - i - 2); buf[buf_len - 1] = 0; } - return (0); + return 0; } /* int strunescape */ size_t strstripnewline(char *buffer) { @@ -470,7 +466,7 @@ size_t strstripnewline(char *buffer) { buffer[buffer_len] = 0; } - return (buffer_len); + return buffer_len; } /* size_t strstripnewline */ int escape_slashes(char *buffer, size_t buffer_size) { @@ -481,10 +477,10 @@ int escape_slashes(char *buffer, size_t buffer_size) { if (buffer_len <= 1) { if (strcmp("/", buffer) == 0) { if (buffer_size < 5) - return (-1); + return -1; sstrncpy(buffer, "root", buffer_size); } - return (0); + return 0; } /* Move one to the left */ @@ -498,7 +494,7 @@ int escape_slashes(char *buffer, size_t buffer_size) { buffer[i] = '_'; } - return (0); + return 0; } /* int escape_slashes */ void replace_special(char *buffer, size_t buffer_size) { @@ -524,7 +520,7 @@ int timeval_cmp(struct timeval tv0, struct timeval tv1, struct timeval *delta) { delta->tv_sec = 0; delta->tv_usec = 0; } - return (0); + return 0; } if ((tv0.tv_sec < tv1.tv_sec) || @@ -552,7 +548,7 @@ int timeval_cmp(struct timeval tv0, struct timeval tv1, struct timeval *delta) { assert((delta == NULL) || ((0 <= delta->tv_usec) && (delta->tv_usec < 1000000))); - return (status); + return status; } /* int timeval_cmp */ int check_create_dir(const char *file_orig) { @@ -573,12 +569,12 @@ int check_create_dir(const char *file_orig) { * Sanity checks first */ if (file_orig == NULL) - return (-1); + return -1; if ((len = strlen(file_orig)) < 1) - return (-1); + return -1; else if (len >= sizeof(file_copy)) - return (-1); + return -1; /* * If `file_orig' ends in a slash the last component is a directory, @@ -622,7 +618,7 @@ int check_create_dir(const char *file_orig) { ERROR("Cowardly refusing to create a directory that " "begins with a `.' (dot): `%s'", file_orig); - return (-2); + return -2; } /* @@ -632,7 +628,7 @@ int check_create_dir(const char *file_orig) { if (strjoin(dir + path_is_absolute, (size_t)(dir_len - path_is_absolute), fields, (size_t)(i + 1), "/") < 0) { ERROR("strjoin failed: `%s', component #%i", file_orig, i); - return (-1); + return -1; } while (42) { @@ -650,24 +646,24 @@ int check_create_dir(const char *file_orig) { char errbuf[1024]; ERROR("check_create_dir: mkdir (%s): %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } else { char errbuf[1024]; ERROR("check_create_dir: stat (%s): %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } else if (!S_ISDIR(statbuf.st_mode)) { ERROR("check_create_dir: `%s' exists but is not " "a directory!", dir); - return (-1); + return -1; } break; } } - return (0); + return 0; } /* check_create_dir */ #ifdef HAVE_LIBKSTAT @@ -677,20 +673,20 @@ int get_kstat(kstat_t **ksp_ptr, char *module, int instance, char *name) { *ksp_ptr = NULL; if (kc == NULL) - return (-1); + return -1; ssnprintf(ident, sizeof(ident), "%s,%i,%s", module, instance, name); *ksp_ptr = kstat_lookup(kc, module, instance, name); if (*ksp_ptr == NULL) { ERROR("get_kstat: Cound not find kstat %s", ident); - return (-1); + return -1; } if ((*ksp_ptr)->ks_type != KSTAT_TYPE_NAMED) { ERROR("get_kstat: kstat %s has wrong type", ident); *ksp_ptr = NULL; - return (-1); + return -1; } #ifdef assert @@ -700,15 +696,15 @@ int get_kstat(kstat_t **ksp_ptr, char *module, int instance, char *name) { if (kstat_read(kc, *ksp_ptr, NULL) == -1) { ERROR("get_kstat: kstat %s could not be read", ident); - return (-1); + return -1; } if ((*ksp_ptr)->ks_type != KSTAT_TYPE_NAMED) { ERROR("get_kstat: kstat %s has wrong type", ident); - return (-1); + return -1; } - return (0); + return 0; } long long get_kstat_value(kstat_t *ksp, char *name) { @@ -717,16 +713,16 @@ long long get_kstat_value(kstat_t *ksp, char *name) { if (ksp == NULL) { ERROR("get_kstat_value (\"%s\"): ksp is NULL.", name); - return (-1LL); + return -1LL; } else if (ksp->ks_type != KSTAT_TYPE_NAMED) { ERROR("get_kstat_value (\"%s\"): ksp->ks_type (%#x) " "is not KSTAT_TYPE_NAMED (%#x).", name, (unsigned int)ksp->ks_type, (unsigned int)KSTAT_TYPE_NAMED); - return (-1LL); + return -1LL; } if ((kn = (kstat_named_t *)kstat_data_lookup(ksp, name)) == NULL) - return (-1LL); + return -1LL; if (kn->data_type == KSTAT_DATA_INT32) retval = (long long)kn->value.i32; @@ -741,14 +737,14 @@ long long get_kstat_value(kstat_t *ksp, char *name) { else WARNING("get_kstat_value: Not a numeric value: %s", name); - return (retval); + return retval; } #endif /* HAVE_LIBKSTAT */ #ifndef HAVE_HTONLL unsigned long long ntohll(unsigned long long n) { #if BYTE_ORDER == BIG_ENDIAN - return (n); + return n; #else return (((unsigned long long)ntohl(n)) << 32) + ntohl(n >> 32); #endif @@ -756,7 +752,7 @@ unsigned long long ntohll(unsigned long long n) { unsigned long long htonll(unsigned long long n) { #if BYTE_ORDER == BIG_ENDIAN - return (n); + return n; #else return (((unsigned long long)htonl(n)) << 32) + htonl(n >> 32); #endif @@ -797,13 +793,13 @@ double ntohd(double d) { if ((ret.byte[0] == 0x00) && (ret.byte[1] == 0x00) && (ret.byte[2] == 0x00) && (ret.byte[3] == 0x00) && (ret.byte[4] == 0x00) && (ret.byte[5] == 0x00) && (ret.byte[6] == 0xf8) && (ret.byte[7] == 0x7f)) { - return (NAN); + return NAN; } else { uint64_t tmp; tmp = ret.integer; ret.integer = FP_CONVERT(tmp); - return (ret.floating); + return ret.floating; } } /* double ntohd */ @@ -819,14 +815,14 @@ double htond(double d) { ret.byte[4] = ret.byte[5] = 0x00; ret.byte[6] = 0xf8; ret.byte[7] = 0x7f; - return (ret.floating); + return ret.floating; } else { uint64_t tmp; ret.floating = d; tmp = FP_CONVERT(ret.integer); ret.integer = tmp; - return (ret.floating); + return ret.floating; } } /* double htond */ #endif /* FP_LAYOUT_NEED_ENDIANFLIP || FP_LAYOUT_NEED_INTSWAP */ @@ -844,7 +840,7 @@ int format_name(char *ret, int ret_len, const char *hostname, do { \ size_t l = strlen(str); \ if (l >= buffer_size) \ - return (ENOBUFS); \ + return ENOBUFS; \ memcpy(buffer, (str), l); \ buffer += l; \ buffer_size -= l; \ @@ -870,7 +866,7 @@ int format_name(char *ret, int ret_len, const char *hostname, buffer[0] = 0; #undef APPEND - return (0); + return 0; } /* int format_name */ int format_values(char *ret, size_t ret_len, /* {{{ */ @@ -889,10 +885,10 @@ int format_values(char *ret, size_t ret_len, /* {{{ */ status = ssnprintf(ret + offset, ret_len - offset, __VA_ARGS__); \ if (status < 1) { \ sfree(rates); \ - return (-1); \ + return -1; \ } else if (((size_t)status) >= (ret_len - offset)) { \ sfree(rates); \ - return (-1); \ + return -1; \ } else \ offset += ((size_t)status); \ } while (0) @@ -907,7 +903,7 @@ int format_values(char *ret, size_t ret_len, /* {{{ */ rates = uc_get_rate(ds, vl); if (rates == NULL) { WARNING("format_values: uc_get_rate failed."); - return (-1); + return -1; } BUFFER_ADD(":" GAUGE_FORMAT, rates[i]); } else if (ds->ds[i].type == DS_TYPE_COUNTER) @@ -919,14 +915,14 @@ int format_values(char *ret, size_t ret_len, /* {{{ */ else { ERROR("format_values: Unknown data source type: %i", ds->ds[i].type); sfree(rates); - return (-1); + return -1; } } /* for ds->ds_num */ #undef BUFFER_ADD sfree(rates); - return (0); + return 0; } /* }}} int format_values */ int parse_identifier(char *str, char **ret_host, char **ret_plugin, @@ -940,18 +936,18 @@ int parse_identifier(char *str, char **ret_host, char **ret_plugin, hostname = str; if (hostname == NULL) - return (-1); + return -1; plugin = strchr(hostname, '/'); if (plugin == NULL) - return (-1); + return -1; *plugin = '\0'; plugin++; type = strchr(plugin, '/'); if (type == NULL) { if (default_host == NULL) - return (-1); + return -1; /* else: no host specified; use default */ type = plugin; plugin = hostname; @@ -978,7 +974,7 @@ int parse_identifier(char *str, char **ret_host, char **ret_plugin, *ret_plugin_instance = plugin_instance; *ret_type = type; *ret_type_instance = type_instance; - return (0); + return 0; } /* int parse_identifier */ int parse_identifier_vl(const char *str, value_list_t *vl) /* {{{ */ @@ -992,7 +988,7 @@ int parse_identifier_vl(const char *str, value_list_t *vl) /* {{{ */ int status; if ((str == NULL) || (vl == NULL)) - return (EINVAL); + return EINVAL; sstrncpy(str_copy, str, sizeof(str_copy)); @@ -1000,7 +996,7 @@ int parse_identifier_vl(const char *str, value_list_t *vl) /* {{{ */ &type_instance, /* default_host = */ NULL); if (status != 0) - return (status); + return status; sstrncpy(vl->host, host, sizeof(vl->host)); sstrncpy(vl->plugin, plugin, sizeof(vl->plugin)); @@ -1011,7 +1007,7 @@ int parse_identifier_vl(const char *str, value_list_t *vl) /* {{{ */ sstrncpy(vl->type_instance, (type_instance != NULL) ? type_instance : "", sizeof(vl->type_instance)); - return (0); + return 0; } /* }}} int parse_identifier_vl */ int parse_value(const char *value_orig, value_t *ret_value, int ds_type) { @@ -1020,11 +1016,11 @@ int parse_value(const char *value_orig, value_t *ret_value, int ds_type) { size_t value_len; if (value_orig == NULL) - return (EINVAL); + return EINVAL; value = strdup(value_orig); if (value == NULL) - return (ENOMEM); + return ENOMEM; value_len = strlen(value); while ((value_len > 0) && isspace((int)value[value_len - 1])) { @@ -1104,7 +1100,7 @@ int parse_values(char *buffer, value_list_t *vl, const data_set_t *ds) { || (endptr == ptr) /* Invalid string */ || (endptr == NULL) /* This should not happen */ || (*endptr != 0)) /* Trailing chars */ - return (-1); + return -1; vl->time = DOUBLE_TO_CDTIME_T(tmp); } @@ -1121,8 +1117,8 @@ int parse_values(char *buffer, value_list_t *vl, const data_set_t *ds) { } /* while (strtok_r) */ if ((ptr != NULL) || (i == 0)) - return (-1); - return (0); + return -1; + return 0; } /* int parse_values */ int parse_value_file(char const *path, value_t *ret_value, int ds_type) { @@ -1131,11 +1127,11 @@ int parse_value_file(char const *path, value_t *ret_value, int ds_type) { fh = fopen(path, "r"); if (fh == NULL) - return (-1); + return -1; if (fgets(buffer, sizeof(buffer), fh) == NULL) { fclose(fh); - return (-1); + return -1; } fclose(fh); @@ -1189,7 +1185,7 @@ int getpwnam_r(const char *name, struct passwd *pwbuf, char *buf, size_t buflen, pthread_mutex_unlock(&getpwnam_r_lock); - return (status); + return status; } /* int getpwnam_r */ #endif /* !HAVE_GETPWNAM_R */ @@ -1214,7 +1210,7 @@ int notification_init(notification_t *n, int severity, const char *message, if (type_instance != NULL) sstrncpy(n->type_instance, type_instance, sizeof(n->type_instance)); - return (0); + return 0; } /* int notification_init */ int walk_directory(const char *dir, dirwalk_callback_f callback, @@ -1256,8 +1252,8 @@ int walk_directory(const char *dir, dirwalk_callback_f callback, closedir(dh); if ((success == 0) && (failure > 0)) - return (-1); - return (0); + return -1; + return 0; } ssize_t read_file_contents(const char *filename, char *buf, size_t bufsize) { @@ -1266,7 +1262,7 @@ ssize_t read_file_contents(const char *filename, char *buf, size_t bufsize) { fh = fopen(filename, "r"); if (fh == NULL) - return (-1); + return -1; ret = (ssize_t)fread(buf, 1, bufsize, fh); if ((ret == 0) && (ferror(fh) != 0)) { @@ -1275,7 +1271,7 @@ ssize_t read_file_contents(const char *filename, char *buf, size_t bufsize) { } fclose(fh); - return (ret); + return ret; } counter_t counter_diff(counter_t old_value, counter_t new_value) { @@ -1290,7 +1286,7 @@ counter_t counter_diff(counter_t old_value, counter_t new_value) { diff = new_value - old_value; } - return (diff); + return diff; } /* counter_t counter_diff */ int rate_to_value(value_t *ret_value, gauge_t rate, /* {{{ */ @@ -1303,7 +1299,7 @@ int rate_to_value(value_t *ret_value, gauge_t rate, /* {{{ */ state->last_time = t; *ret_value = state->last_value; - return (0); + return 0; } /* Counter and absolute can't handle negative rates. Reset "last time" @@ -1312,13 +1308,13 @@ int rate_to_value(value_t *ret_value, gauge_t rate, /* {{{ */ if ((rate < 0.0) && ((ds_type == DS_TYPE_COUNTER) || (ds_type == DS_TYPE_ABSOLUTE))) { memset(state, 0, sizeof(*state)); - return (EINVAL); + return EINVAL; } /* Another invalid state: The time is not increasing. */ if (t <= state->last_time) { memset(state, 0, sizeof(*state)); - return (EINVAL); + return EINVAL; } delta_t = t - state->last_time; @@ -1341,7 +1337,7 @@ int rate_to_value(value_t *ret_value, gauge_t rate, /* {{{ */ } state->last_time = t; - return (EAGAIN); + return EAGAIN; } /* }}} */ if (ds_type == DS_TYPE_DERIVE) { @@ -1365,7 +1361,7 @@ int rate_to_value(value_t *ret_value, gauge_t rate, /* {{{ */ state->last_time = t; *ret_value = state->last_value; - return (0); + return 0; } /* }}} value_t rate_to_value */ int value_to_rate(gauge_t *ret_rate, /* {{{ */ @@ -1376,7 +1372,7 @@ int value_to_rate(gauge_t *ret_rate, /* {{{ */ /* Another invalid state: The time is not increasing. */ if (t <= state->last_time) { memset(state, 0, sizeof(*state)); - return (EINVAL); + return EINVAL; } interval = CDTIME_T_TO_DOUBLE(t - state->last_time); @@ -1385,7 +1381,7 @@ int value_to_rate(gauge_t *ret_rate, /* {{{ */ if (state->last_time == 0) { state->last_value = value; state->last_time = t; - return (EAGAIN); + return EAGAIN; } switch (ds_type) { @@ -1414,7 +1410,7 @@ int value_to_rate(gauge_t *ret_rate, /* {{{ */ state->last_value = value; state->last_time = t; - return (0); + return 0; } /* }}} value_t rate_to_value */ int service_name_to_port_number(const char *service_name) { @@ -1423,7 +1419,7 @@ int service_name_to_port_number(const char *service_name) { int service_number; if (service_name == NULL) - return (-1); + return -1; struct addrinfo ai_hints = {.ai_family = AF_UNSPEC}; @@ -1431,7 +1427,7 @@ int service_name_to_port_number(const char *service_name) { if (status != 0) { ERROR("service_name_to_port_number: getaddrinfo failed: %s", gai_strerror(status)); - return (-1); + return -1; } service_number = -1; @@ -1456,8 +1452,8 @@ int service_name_to_port_number(const char *service_name) { freeaddrinfo(ai_list); if ((service_number > 0) && (service_number <= 65535)) - return (service_number); - return (-1); + return service_number; + return -1; } /* int service_name_to_port_number */ void set_sock_opts(int sockfd) /* {{{ */ @@ -1503,16 +1499,16 @@ int strtoderive(const char *string, derive_t *ret_value) /* {{{ */ char *endptr; if ((string == NULL) || (ret_value == NULL)) - return (EINVAL); + return EINVAL; errno = 0; endptr = NULL; tmp = (derive_t)strtoll(string, &endptr, /* base = */ 0); if ((endptr == string) || (errno != 0)) - return (-1); + return -1; *ret_value = tmp; - return (0); + return 0; } /* }}} int strtoderive */ int strtogauge(const char *string, gauge_t *ret_value) /* {{{ */ @@ -1521,18 +1517,18 @@ int strtogauge(const char *string, gauge_t *ret_value) /* {{{ */ char *endptr = NULL; if ((string == NULL) || (ret_value == NULL)) - return (EINVAL); + return EINVAL; errno = 0; endptr = NULL; tmp = (gauge_t)strtod(string, &endptr); if (errno != 0) - return (errno); + return errno; else if ((endptr == NULL) || (*endptr != 0)) - return (EINVAL); + return EINVAL; *ret_value = tmp; - return (0); + return 0; } /* }}} int strtogauge */ int strarray_add(char ***ret_array, size_t *ret_array_len, @@ -1542,20 +1538,20 @@ int strarray_add(char ***ret_array, size_t *ret_array_len, size_t array_len = *ret_array_len; if (str == NULL) - return (EINVAL); + return EINVAL; array = realloc(*ret_array, (array_len + 1) * sizeof(*array)); if (array == NULL) - return (ENOMEM); + return ENOMEM; *ret_array = array; array[array_len] = strdup(str); if (array[array_len] == NULL) - return (ENOMEM); + return ENOMEM; array_len++; *ret_array_len = array_len; - return (0); + return 0; } /* }}} int strarray_add */ void strarray_free(char **array, size_t array_len) /* {{{ */ @@ -1573,27 +1569,27 @@ int check_capability(int arg) /* {{{ */ cap_flag_value_t cap_flag_value; if (!CAP_IS_SUPPORTED(cap_value)) - return (-1); + return -1; if (!(cap = cap_get_proc())) { ERROR("check_capability: cap_get_proc failed."); - return (-1); + return -1; } if (cap_get_flag(cap, cap_value, CAP_EFFECTIVE, &cap_flag_value) < 0) { ERROR("check_capability: cap_get_flag failed."); cap_free(cap); - return (-1); + return -1; } cap_free(cap); - return (cap_flag_value != CAP_SET); + return cap_flag_value != CAP_SET; } /* }}} int check_capability */ #else int check_capability(__attribute__((unused)) int arg) /* {{{ */ { WARNING("check_capability: unsupported capability implementation. " "Some plugin(s) may require elevated privileges to work properly."); - return (0); + return 0; } /* }}} int check_capability */ #endif /* HAVE_CAPABILITY */ diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index 0c96945f..5b577d45 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -55,7 +55,7 @@ DEF_TEST(sstrncpy) { EXPECT_EQ_STR("collect", ptr); OK(buffer[3] == buffer[12]); - return (0); + return 0; } DEF_TEST(ssnprintf) { @@ -76,7 +76,7 @@ DEF_TEST(ssnprintf) { EXPECT_EQ_STR("collect", ptr); OK(buffer[3] == buffer[12]); - return (0); + return 0; } DEF_TEST(sstrdup) { @@ -91,7 +91,7 @@ DEF_TEST(sstrdup) { ptr = sstrdup(NULL); OK(ptr == NULL); - return (0); + return 0; } DEF_TEST(strsplit) { @@ -141,7 +141,7 @@ DEF_TEST(strsplit) { status = strsplit(buffer, fields, 8); OK(status == 0); - return (0); + return 0; } DEF_TEST(strjoin) { @@ -190,7 +190,7 @@ DEF_TEST(strjoin) { /* use (NULL, 0) to determine required buffer size. */ EXPECT_EQ_INT(3, strjoin(NULL, 0, (char *[]){"a", "b"}, 2, "-")); - return (0); + return 0; } DEF_TEST(escape_slashes) { @@ -264,7 +264,7 @@ DEF_TEST(strunescape) { status = strunescape(buffer, sizeof(buffer)); OK(status != 0); EXPECT_EQ_STR("\tbackslash end", buffer); - return (0); + return 0; /* Backslash at buffer end */ strncpy(buffer, "\\t3\\56", sizeof(buffer)); @@ -278,7 +278,7 @@ DEF_TEST(strunescape) { OK(buffer[5] == '6'); OK(buffer[6] == '7'); - return (0); + return 0; } DEF_TEST(parse_values) { @@ -323,7 +323,7 @@ DEF_TEST(parse_values) { EXPECT_EQ_DOUBLE(cases[i].value, vl.values[0].gauge); } - return (0); + return 0; } DEF_TEST(value_to_rate) { @@ -392,5 +392,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/configfile.c b/src/daemon/configfile.c index 3934e1f9..5594bb7a 100644 --- a/src/daemon/configfile.c +++ b/src/daemon/configfile.c @@ -128,13 +128,13 @@ static cf_callback_t *cf_search(const char *type) { cf_callback_t *cf_cb; if (type == NULL) - return (NULL); + return NULL; for (cf_cb = first_callback; cf_cb != NULL; cf_cb = cf_cb->next) if (strcasecmp(cf_cb->type, type) == 0) break; - return (cf_cb); + return cf_cb; } static int cf_dispatch(const char *type, const char *orig_key, @@ -147,7 +147,7 @@ static int cf_dispatch(const char *type, const char *orig_key, int i = 0; if (orig_key == NULL) - return (EINVAL); + return EINVAL; DEBUG("type = %s, key = %s, value = %s", ESCAPE_NULL(type), orig_key, ESCAPE_NULL(orig_value)); @@ -157,14 +157,14 @@ static int cf_dispatch(const char *type, const char *orig_key, "the plugin isn't loaded or didn't register " "a configuration callback.", type); - return (-1); + return -1; } if ((key = strdup(orig_key)) == NULL) - return (1); + return 1; if ((value = strdup(orig_value)) == NULL) { free(key); - return (2); + return 2; } ret = -1; @@ -186,26 +186,26 @@ static int cf_dispatch(const char *type, const char *orig_key, free(key); free(value); - return (ret); + return ret; } /* int cf_dispatch */ static int dispatch_global_option(const oconfig_item_t *ci) { if (ci->values_num != 1) - return (-1); + return -1; if (ci->values[0].type == OCONFIG_TYPE_STRING) - return (global_option_set(ci->key, ci->values[0].value.string, 0)); + return global_option_set(ci->key, ci->values[0].value.string, 0); else if (ci->values[0].type == OCONFIG_TYPE_NUMBER) { char tmp[128]; ssnprintf(tmp, sizeof(tmp), "%lf", ci->values[0].value.number); - return (global_option_set(ci->key, tmp, 0)); + return global_option_set(ci->key, tmp, 0); } else if (ci->values[0].type == OCONFIG_TYPE_BOOLEAN) { if (ci->values[0].value.boolean) - return (global_option_set(ci->key, "true", 0)); + return global_option_set(ci->key, "true", 0); else - return (global_option_set(ci->key, "false", 0)); + return global_option_set(ci->key, "false", 0); } - return (-1); + return -1; } /* int dispatch_global_option */ static int dispatch_value_typesdb(oconfig_item_t *ci) { @@ -215,7 +215,7 @@ static int dispatch_value_typesdb(oconfig_item_t *ci) { if (ci->values_num < 1) { ERROR("configfile: `TypesDB' needs at least one argument."); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; ++i) { @@ -228,24 +228,24 @@ static int dispatch_value_typesdb(oconfig_item_t *ci) { read_types_list(ci->values[i].value.string); } - return (0); + return 0; } /* int dispatch_value_typesdb */ static int dispatch_value_plugindir(oconfig_item_t *ci) { assert(strcasecmp(ci->key, "PluginDir") == 0); if (ci->values_num != 1) - return (-1); + return -1; if (ci->values[0].type != OCONFIG_TYPE_STRING) - return (-1); + return -1; plugin_set_dir(ci->values[0].value.string); - return (0); + return 0; } static int dispatch_loadplugin(oconfig_item_t *ci) { const char *name; - unsigned int flags = 0; + _Bool global = 0; plugin_ctx_t ctx = {0}; plugin_ctx_t old_ctx; int ret_val; @@ -253,9 +253,9 @@ static int dispatch_loadplugin(oconfig_item_t *ci) { assert(strcasecmp(ci->key, "LoadPlugin") == 0); if (ci->values_num != 1) - return (-1); + return -1; if (ci->values[0].type != OCONFIG_TYPE_STRING) - return (-1); + return -1; name = ci->values[0].value.string; if (strcmp("libvirt", name) == 0) @@ -270,7 +270,7 @@ static int dispatch_loadplugin(oconfig_item_t *ci) { oconfig_item_t *child = ci->children + i; if (strcasecmp("Globals", child->key) == 0) - cf_util_get_flag(child, &flags, PLUGIN_FLAGS_GLOBAL); + cf_util_get_boolean(child, &global); else if (strcasecmp("Interval", child->key) == 0) cf_util_get_cdtime(child, &ctx.interval); else if (strcasecmp("FlushInterval", child->key) == 0) @@ -285,11 +285,11 @@ static int dispatch_loadplugin(oconfig_item_t *ci) { } old_ctx = plugin_set_ctx(ctx); - ret_val = plugin_load(name, (uint32_t)flags); + ret_val = plugin_load(name, global); /* reset to the "global" context */ plugin_set_ctx(old_ctx); - return (ret_val); + return ret_val; } /* int dispatch_value_loadplugin */ static int dispatch_value_plugin(const char *plugin, oconfig_item_t *ci) { @@ -314,14 +314,14 @@ static int dispatch_value_plugin(const char *plugin, oconfig_item_t *ci) { ci->values[i].value.boolean ? "true" : "false"); if ((status < 0) || (status >= buffer_free)) - return (-1); + return -1; buffer_free -= status; buffer_ptr += status; } /* skip the initial space */ buffer_ptr = buffer + 1; - return (cf_dispatch(plugin, ci->key, buffer_ptr)); + return cf_dispatch(plugin, ci->key, buffer_ptr); } /* int dispatch_value_plugin */ static int dispatch_value(oconfig_item_t *ci) { @@ -339,18 +339,18 @@ static int dispatch_value(oconfig_item_t *ci) { break; } - return (ret); + return ret; } /* int dispatch_value */ static int dispatch_block_plugin(oconfig_item_t *ci) { const char *name; if (strcasecmp(ci->key, "Plugin") != 0) - return (-1); + return -1; if (ci->values_num < 1) - return (-1); + return -1; if (ci->values[0].type != OCONFIG_TYPE_STRING) - return (-1); + return -1; name = ci->values[0].value.string; if (strcmp("libvirt", name) == 0) { @@ -380,7 +380,7 @@ static int dispatch_block_plugin(oconfig_item_t *ci) { ERROR("Automatically loading plugin \"%s\" failed " "with status %i.", name, status); - return (status); + return status; } } @@ -394,7 +394,7 @@ static int dispatch_block_plugin(oconfig_item_t *ci) { old_ctx = plugin_set_ctx(cb->ctx); ret_val = (cb->callback(ci)); plugin_set_ctx(old_ctx); - return (ret_val); + return ret_val; } } @@ -413,18 +413,18 @@ static int dispatch_block_plugin(oconfig_item_t *ci) { } } - return (0); + return 0; } static int dispatch_block(oconfig_item_t *ci) { if (strcasecmp(ci->key, "LoadPlugin") == 0) - return (dispatch_loadplugin(ci)); + return dispatch_loadplugin(ci); else if (strcasecmp(ci->key, "Plugin") == 0) - return (dispatch_block_plugin(ci)); + return dispatch_block_plugin(ci); else if (strcasecmp(ci->key, "Chain") == 0) - return (fc_configure(ci)); + return fc_configure(ci); - return (0); + return 0; } static int cf_ci_replace_child(oconfig_item_t *dst, oconfig_item_t *src, @@ -458,7 +458,7 @@ static int cf_ci_replace_child(oconfig_item_t *dst, oconfig_item_t *src, * all children. */ if (dst->children_num + src->children_num - 1 == 0) { dst->children_num = 0; - return (0); + return 0; } temp = @@ -466,7 +466,7 @@ static int cf_ci_replace_child(oconfig_item_t *dst, oconfig_item_t *src, (dst->children_num + src->children_num - 1)); if (temp == NULL) { ERROR("configfile: realloc failed."); - return (-1); + return -1; } dst->children = temp; @@ -493,20 +493,20 @@ static int cf_ci_replace_child(oconfig_item_t *dst, oconfig_item_t *src, /* Update the number of children. */ dst->children_num += (src->children_num - 1); - return (0); + return 0; } /* int cf_ci_replace_child */ static int cf_ci_append_children(oconfig_item_t *dst, oconfig_item_t *src) { oconfig_item_t *temp; if ((src == NULL) || (src->children_num == 0)) - return (0); + return 0; temp = realloc(dst->children, sizeof(oconfig_item_t) * (dst->children_num + src->children_num)); if (temp == NULL) { ERROR("configfile: realloc failed."); - return (-1); + return -1; } dst->children = temp; @@ -514,7 +514,7 @@ static int cf_ci_append_children(oconfig_item_t *dst, oconfig_item_t *src) { sizeof(oconfig_item_t) * src->children_num); dst->children_num += src->children_num; - return (0); + return 0; } /* int cf_ci_append_children */ #define CF_MAX_DEPTH 8 @@ -553,13 +553,13 @@ static int cf_include_all(oconfig_item_t *root, int depth) { sfree(pattern); if (new == NULL) - return (-1); + return -1; /* Now replace the i'th child in `root' with `new'. */ if (cf_ci_replace_child(root, new, i) < 0) { sfree(new->values); sfree(new); - return (-1); + return -1; } /* ... and go back to the new i'th child. */ @@ -569,7 +569,7 @@ static int cf_include_all(oconfig_item_t *root, int depth) { sfree(new); } /* for (i = 0; i < root->children_num; i++) */ - return (0); + return 0; } /* int cf_include_all */ static oconfig_item_t *cf_read_file(const char *file, const char *pattern, @@ -589,7 +589,7 @@ static oconfig_item_t *cf_read_file(const char *file, const char *pattern, "does not match pattern `%s'.", filename, pattern); free(tmp); - return (NULL); + return NULL; } free(tmp); @@ -604,16 +604,16 @@ static oconfig_item_t *cf_read_file(const char *file, const char *pattern, root = oconfig_parse_file(file); if (root == NULL) { ERROR("configfile: Cannot read file `%s'.", file); - return (NULL); + return NULL; } status = cf_include_all(root, depth); if (status != 0) { oconfig_free(root); - return (NULL); + return NULL; } - return (root); + return root; } /* oconfig_item_t *cf_read_file */ static int cf_compare_string(const void *p1, const void *p2) { @@ -636,14 +636,14 @@ static oconfig_item_t *cf_read_dir(const char *dir, const char *pattern, char errbuf[1024]; ERROR("configfile: opendir failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } root = calloc(1, sizeof(*root)); if (root == NULL) { ERROR("configfile: calloc failed."); closedir(dh); - return (NULL); + return NULL; } while ((de = readdir(dh)) != NULL) { @@ -663,7 +663,7 @@ static oconfig_item_t *cf_read_dir(const char *dir, const char *pattern, free(filenames[i]); free(filenames); free(root); - return (NULL); + return NULL; } ++filenames_num; @@ -675,7 +675,7 @@ static oconfig_item_t *cf_read_dir(const char *dir, const char *pattern, free(filenames[i]); free(filenames); free(root); - return (NULL); + return NULL; } filenames = tmp; @@ -684,7 +684,7 @@ static oconfig_item_t *cf_read_dir(const char *dir, const char *pattern, if (filenames == NULL) { closedir(dh); - return (root); + return root; } qsort((void *)filenames, filenames_num, sizeof(*filenames), @@ -710,7 +710,7 @@ static oconfig_item_t *cf_read_dir(const char *dir, const char *pattern, closedir(dh); free(filenames); - return (root); + return root; } /* oconfig_item_t *cf_read_dir */ /* @@ -736,19 +736,19 @@ static oconfig_item_t *cf_read_generic(const char *path, const char *pattern, ERROR("configfile: Not including `%s' because the maximum " "nesting depth has been reached.", path); - return (NULL); + return NULL; } status = wordexp(path, &we, WRDE_NOCMD); if (status != 0) { ERROR("configfile: wordexp (%s) failed.", path); - return (NULL); + return NULL; } root = calloc(1, sizeof(*root)); if (root == NULL) { ERROR("configfile: calloc failed."); - return (NULL); + return NULL; } /* wordexp() might return a sorted list already. That's not @@ -783,7 +783,7 @@ static oconfig_item_t *cf_read_generic(const char *path, const char *pattern, if (temp == NULL) { oconfig_free(root); - return (NULL); + return NULL; } cf_ci_append_children(root, temp); @@ -793,7 +793,7 @@ static oconfig_item_t *cf_read_generic(const char *path, const char *pattern, wordfree(&we); - return (root); + return root; } /* oconfig_item_t *cf_read_generic */ /* #endif HAVE_WORDEXP_H */ @@ -807,7 +807,7 @@ static oconfig_item_t *cf_read_generic(const char *path, const char *pattern, ERROR("configfile: Not including `%s' because the maximum " "nesting depth has been reached.", path); - return (NULL); + return NULL; } status = stat(path, &statbuf); @@ -815,16 +815,16 @@ static oconfig_item_t *cf_read_generic(const char *path, const char *pattern, char errbuf[1024]; ERROR("configfile: stat (%s) failed: %s", path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } if (S_ISREG(statbuf.st_mode)) - return (cf_read_file(path, pattern, depth)); + return cf_read_file(path, pattern, depth); else if (S_ISDIR(statbuf.st_mode)) - return (cf_read_dir(path, pattern, depth)); + return cf_read_dir(path, pattern, depth); ERROR("configfile: %s is neither a file nor a directory.", path); - return (NULL); + return NULL; } /* oconfig_item_t *cf_read_generic */ #endif /* !HAVE_WORDEXP_H */ @@ -841,14 +841,14 @@ int global_option_set(const char *option, const char *value, _Bool from_cli) { if (i >= cf_global_options_num) { ERROR("configfile: Cannot set unknown global option `%s'.", option); - return (-1); + return -1; } if (cf_global_options[i].from_cli && (!from_cli)) { DEBUG("configfile: Ignoring %s `%s' option because " "it was overriden by a command-line option.", option, value); - return (0); + return 0; } sfree(cf_global_options[i].value); @@ -860,7 +860,7 @@ int global_option_set(const char *option, const char *value, _Bool from_cli) { cf_global_options[i].from_cli = from_cli; - return (0); + return 0; } const char *global_option_get(const char *option) { @@ -871,11 +871,10 @@ const char *global_option_get(const char *option) { if (i >= cf_global_options_num) { ERROR("configfile: Cannot get unknown global option `%s'.", option); - return (NULL); + return NULL; } - return ((cf_global_options[i].value != NULL) ? cf_global_options[i].value - : cf_global_options[i].def); + return (cf_global_options[i].value != NULL) ? cf_global_options[i].value : cf_global_options[i].def; } /* char *global_option_get */ long global_option_get_long(const char *option, long default_value) { @@ -884,14 +883,14 @@ long global_option_get_long(const char *option, long default_value) { str = global_option_get(option); if (NULL == str) - return (default_value); + return default_value; errno = 0; value = strtol(str, /* endptr = */ NULL, /* base = */ 0); if (errno != 0) - return (default_value); + return default_value; - return (value); + return value; } /* char *global_option_get_long */ cdtime_t global_option_get_time(const char *name, cdtime_t def) /* {{{ */ @@ -902,21 +901,21 @@ cdtime_t global_option_get_time(const char *name, cdtime_t def) /* {{{ */ optstr = global_option_get(name); if (optstr == NULL) - return (def); + return def; errno = 0; v = strtod(optstr, &endptr); if ((endptr == NULL) || (*endptr != 0) || (errno != 0)) - return (def); + return def; else if (v <= 0.0) - return (def); + return def; - return (DOUBLE_TO_CDTIME_T(v)); + return DOUBLE_TO_CDTIME_T(v); } /* }}} cdtime_t global_option_get_time */ cdtime_t cf_get_default_interval(void) { - return (global_option_get_time( - "Interval", DOUBLE_TO_CDTIME_T(COLLECTD_DEFAULT_INTERVAL))); + return global_option_get_time("Interval", + DOUBLE_TO_CDTIME_T(COLLECTD_DEFAULT_INTERVAL)); } void cf_unregister(const char *type) { @@ -974,12 +973,12 @@ int cf_register_complex(const char *type, int (*callback)(oconfig_item_t *)) { new = malloc(sizeof(*new)); if (new == NULL) - return (-1); + return -1; new->type = strdup(type); if (new->type == NULL) { sfree(new); - return (-1); + return -1; } new->callback = callback; @@ -996,7 +995,7 @@ int cf_register_complex(const char *type, int (*callback)(oconfig_item_t *)) { last->next = new; } - return (0); + return 0; } /* int cf_register_complex */ int cf_read(const char *filename) { @@ -1006,11 +1005,11 @@ int cf_read(const char *filename) { conf = cf_read_generic(filename, /* pattern = */ NULL, /* depth = */ 0); if (conf == NULL) { ERROR("Unable to read config file %s.", filename); - return (-1); + return -1; } else if (conf->children_num == 0) { ERROR("Configuration file %s is empty.", filename); oconfig_free(conf); - return (-1); + return -1; } for (int i = 0; i < conf->children_num; i++) { @@ -1045,18 +1044,18 @@ int cf_util_get_string(const oconfig_item_t *ci, char **ret_string) /* {{{ */ ERROR("cf_util_get_string: The %s option requires " "exactly one string argument.", ci->key); - return (-1); + return -1; } string = strdup(ci->values[0].value.string); if (string == NULL) - return (-1); + return -1; if (*ret_string != NULL) sfree(*ret_string); *ret_string = string; - return (0); + return 0; } /* }}} int cf_util_get_string */ /* Assures the config option is a string and copies it to the provided buffer. @@ -1064,67 +1063,67 @@ int cf_util_get_string(const oconfig_item_t *ci, char **ret_string) /* {{{ */ int cf_util_get_string_buffer(const oconfig_item_t *ci, char *buffer, /* {{{ */ size_t buffer_size) { if ((ci == NULL) || (buffer == NULL) || (buffer_size < 1)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { ERROR("cf_util_get_string_buffer: The %s option requires " "exactly one string argument.", ci->key); - return (-1); + return -1; } strncpy(buffer, ci->values[0].value.string, buffer_size); buffer[buffer_size - 1] = 0; - return (0); + return 0; } /* }}} int cf_util_get_string_buffer */ /* Assures the config option is a number and returns it as an int. */ int cf_util_get_int(const oconfig_item_t *ci, int *ret_value) /* {{{ */ { if ((ci == NULL) || (ret_value == NULL)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) { ERROR("cf_util_get_int: The %s option requires " "exactly one numeric argument.", ci->key); - return (-1); + return -1; } *ret_value = (int)ci->values[0].value.number; - return (0); + return 0; } /* }}} int cf_util_get_int */ int cf_util_get_double(const oconfig_item_t *ci, double *ret_value) /* {{{ */ { if ((ci == NULL) || (ret_value == NULL)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) { ERROR("cf_util_get_double: The %s option requires " "exactly one numeric argument.", ci->key); - return (-1); + return -1; } *ret_value = ci->values[0].value.number; - return (0); + return 0; } /* }}} int cf_util_get_double */ int cf_util_get_boolean(const oconfig_item_t *ci, _Bool *ret_bool) /* {{{ */ { if ((ci == NULL) || (ret_bool == NULL)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || ((ci->values[0].type != OCONFIG_TYPE_BOOLEAN) && (ci->values[0].type != OCONFIG_TYPE_STRING))) { ERROR("cf_util_get_boolean: The %s option requires " "exactly one boolean argument.", ci->key); - return (-1); + return -1; } switch (ci->values[0].type) { @@ -1145,12 +1144,12 @@ int cf_util_get_boolean(const oconfig_item_t *ci, _Bool *ret_bool) /* {{{ */ ERROR("cf_util_get_boolean: Cannot parse string value `%s' of the `%s' " "option as a boolean value.", ci->values[0].value.string, ci->key); - return (-1); + return -1; } break; } - return (0); + return 0; } /* }}} int cf_util_get_boolean */ int cf_util_get_flag(const oconfig_item_t *ci, /* {{{ */ @@ -1159,12 +1158,12 @@ int cf_util_get_flag(const oconfig_item_t *ci, /* {{{ */ _Bool b; if (ret_value == NULL) - return (EINVAL); + return EINVAL; b = 0; status = cf_util_get_boolean(ci, &b); if (status != 0) - return (status); + return status; if (b) { *ret_value |= flag; @@ -1172,7 +1171,7 @@ int cf_util_get_flag(const oconfig_item_t *ci, /* {{{ */ *ret_value &= ~flag; } - return (0); + return 0; } /* }}} int cf_util_get_flag */ /* Assures that the config option is a string or a number if the correct range @@ -1189,11 +1188,11 @@ int cf_util_get_port_number(const oconfig_item_t *ci) /* {{{ */ ERROR("cf_util_get_port_number: The \"%s\" option requires " "exactly one string argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].type == OCONFIG_TYPE_STRING) - return (service_name_to_port_number(ci->values[0].value.string)); + return service_name_to_port_number(ci->values[0].value.string); assert(ci->values[0].type == OCONFIG_TYPE_NUMBER); tmp = (int)(ci->values[0].value.number + 0.5); @@ -1203,10 +1202,10 @@ int cf_util_get_port_number(const oconfig_item_t *ci) /* {{{ */ "you specified, %i, is not in the valid " "range of 1-65535.", ci->key, tmp); - return (-1); + return -1; } - return (tmp); + return tmp; } /* }}} int cf_util_get_port_number */ int cf_util_get_service(const oconfig_item_t *ci, char **ret_string) /* {{{ */ @@ -1219,11 +1218,11 @@ int cf_util_get_service(const oconfig_item_t *ci, char **ret_string) /* {{{ */ ERROR("cf_util_get_service: The %s option requires exactly " "one argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].type == OCONFIG_TYPE_STRING) - return (cf_util_get_string(ci, ret_string)); + return cf_util_get_string(ci, ret_string); if (ci->values[0].type != OCONFIG_TYPE_NUMBER) { ERROR("cf_util_get_service: The %s option requires " "exactly one string or numeric argument.", @@ -1233,48 +1232,48 @@ int cf_util_get_service(const oconfig_item_t *ci, char **ret_string) /* {{{ */ port = 0; status = cf_util_get_int(ci, &port); if (status != 0) - return (status); + return status; else if ((port < 1) || (port > 65535)) { ERROR("cf_util_get_service: The port number given " "for the %s option is out of " "range (%i).", ci->key, port); - return (-1); + return -1; } service = malloc(6); if (service == NULL) { ERROR("cf_util_get_service: Out of memory."); - return (-1); + return -1; } ssnprintf(service, 6, "%i", port); sfree(*ret_string); *ret_string = service; - return (0); + return 0; } /* }}} int cf_util_get_service */ int cf_util_get_cdtime(const oconfig_item_t *ci, cdtime_t *ret_value) /* {{{ */ { if ((ci == NULL) || (ret_value == NULL)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) { ERROR("cf_util_get_cdtime: The %s option requires " "exactly one numeric argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].value.number < 0.0) { ERROR("cf_util_get_cdtime: The numeric argument of the %s " "option must not be negative.", ci->key); - return (-1); + return -1; } *ret_value = DOUBLE_TO_CDTIME_T(ci->values[0].value.number); - return (0); + return 0; } /* }}} int cf_util_get_cdtime */ diff --git a/src/daemon/filter_chain.c b/src/daemon/filter_chain.c index 9c4a89c1..5a2d6472 100644 --- a/src/daemon/filter_chain.c +++ b/src/daemon/filter_chain.c @@ -166,16 +166,16 @@ static char *fc_strdup(const char *orig) /* {{{ */ char *dest; if (orig == NULL) - return (NULL); + return NULL; sz = strlen(orig) + 1; dest = malloc(sz); if (dest == NULL) - return (NULL); + return NULL; memcpy(dest, orig, sz); - return (dest); + return dest; } /* }}} char *fc_strdup */ /* @@ -208,7 +208,7 @@ static int fc_config_add_match(fc_match_t **matches_head, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("Filter subsystem: `Match' blocks require " "exactly one string argument."); - return (-1); + return -1; } ptr = match_list_head; @@ -222,13 +222,13 @@ static int fc_config_add_match(fc_match_t **matches_head, /* {{{ */ WARNING("Filter subsystem: Cannot find a \"%s\" match. " "Did you load the appropriate plugin?", ci->values[0].value.string); - return (-1); + return -1; } m = calloc(1, sizeof(*m)); if (m == NULL) { ERROR("fc_config_add_match: calloc failed."); - return (-1); + return -1; } sstrncpy(m->name, ptr->name, sizeof(m->name)); @@ -241,7 +241,7 @@ static int fc_config_add_match(fc_match_t **matches_head, /* {{{ */ if (status != 0) { WARNING("Filter subsystem: Failed to create a %s match.", m->name); fc_free_matches(m); - return (-1); + return -1; } } @@ -255,7 +255,7 @@ static int fc_config_add_match(fc_match_t **matches_head, /* {{{ */ *matches_head = m; } - return (0); + return 0; } /* }}} int fc_config_add_match */ static int fc_config_add_target(fc_target_t **targets_head, /* {{{ */ @@ -267,7 +267,7 @@ static int fc_config_add_target(fc_target_t **targets_head, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("Filter subsystem: `Target' blocks require " "exactly one string argument."); - return (-1); + return -1; } ptr = target_list_head; @@ -281,13 +281,13 @@ static int fc_config_add_target(fc_target_t **targets_head, /* {{{ */ WARNING("Filter subsystem: Cannot find a \"%s\" target. " "Did you load the appropriate plugin?", ci->values[0].value.string); - return (-1); + return -1; } t = calloc(1, sizeof(*t)); if (t == NULL) { ERROR("fc_config_add_target: calloc failed."); - return (-1); + return -1; } sstrncpy(t->name, ptr->name, sizeof(t->name)); @@ -300,7 +300,7 @@ static int fc_config_add_target(fc_target_t **targets_head, /* {{{ */ if (status != 0) { WARNING("Filter subsystem: Failed to create a %s target.", t->name); fc_free_targets(t); - return (-1); + return -1; } } else { t->user_data = NULL; @@ -316,7 +316,7 @@ static int fc_config_add_target(fc_target_t **targets_head, /* {{{ */ *targets_head = t; } - return (0); + return 0; } /* }}} int fc_config_add_target */ static int fc_config_add_rule(fc_chain_t *chain, /* {{{ */ @@ -327,18 +327,18 @@ static int fc_config_add_rule(fc_chain_t *chain, /* {{{ */ if (ci->values_num > 1) { WARNING("Filter subsystem: `Rule' blocks have at most one argument."); - return (-1); + return -1; } else if ((ci->values_num == 1) && (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("Filter subsystem: `Rule' blocks expect one string argument " "or no argument at all."); - return (-1); + return -1; } rule = calloc(1, sizeof(*rule)); if (rule == NULL) { ERROR("fc_config_add_rule: calloc failed."); - return (-1); + return -1; } if (ci->values_num == 1) { @@ -378,7 +378,7 @@ static int fc_config_add_rule(fc_chain_t *chain, /* {{{ */ if (status != 0) { fc_free_rules(rule); - return (-1); + return -1; } if (chain->rules != NULL) { @@ -393,7 +393,7 @@ static int fc_config_add_rule(fc_chain_t *chain, /* {{{ */ chain->rules = rule; } - return (0); + return 0; } /* }}} int fc_config_add_rule */ static int fc_config_add_chain(const oconfig_item_t *ci) /* {{{ */ @@ -405,7 +405,7 @@ static int fc_config_add_chain(const oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("Filter subsystem: blocks require exactly one " "string argument."); - return (-1); + return -1; } if (chain_list_head != NULL) { @@ -417,7 +417,7 @@ static int fc_config_add_chain(const oconfig_item_t *ci) /* {{{ */ chain = calloc(1, sizeof(*chain)); if (chain == NULL) { ERROR("fc_config_add_chain: calloc failed."); - return (-1); + return -1; } sstrncpy(chain->name, ci->values[0].value.string, sizeof(chain->name)); } @@ -442,12 +442,12 @@ static int fc_config_add_chain(const oconfig_item_t *ci) /* {{{ */ if (status != 0) { fc_free_chains(chain); - return (-1); + return -1; } if (chain_list_head != NULL) { if (!new_chain) - return (0); + return 0; fc_chain_t *ptr; @@ -460,7 +460,7 @@ static int fc_config_add_chain(const oconfig_item_t *ci) /* {{{ */ chain_list_head = chain; } - return (0); + return 0; } /* }}} int fc_config_add_chain */ /* @@ -475,7 +475,7 @@ static int fc_bit_jump_create(const oconfig_item_t *ci, /* {{{ */ if (ci->children_num != 1) { ERROR("Filter subsystem: The built-in target `jump' needs exactly " "one `Chain' argument!"); - return (-1); + return -1; } ci_chain = ci->children; @@ -483,23 +483,23 @@ static int fc_bit_jump_create(const oconfig_item_t *ci, /* {{{ */ ERROR("Filter subsystem: The built-in target `jump' does not " "support the configuration option `%s'.", ci_chain->key); - return (-1); + return -1; } if ((ci_chain->values_num != 1) || (ci_chain->values[0].type != OCONFIG_TYPE_STRING)) { ERROR("Filter subsystem: Built-in target `jump': The `Chain' option " "needs exactly one string argument."); - return (-1); + return -1; } *user_data = fc_strdup(ci_chain->values[0].value.string); if (*user_data == NULL) { ERROR("fc_bit_jump_create: fc_strdup failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int fc_bit_jump_create */ static int fc_bit_jump_destroy(void **user_data) /* {{{ */ @@ -509,7 +509,7 @@ static int fc_bit_jump_destroy(void **user_data) /* {{{ */ *user_data = NULL; } - return (0); + return 0; } /* }}} int fc_bit_jump_destroy */ static int fc_bit_jump_invoke(const data_set_t *ds, /* {{{ */ @@ -531,16 +531,16 @@ static int fc_bit_jump_invoke(const data_set_t *ds, /* {{{ */ ERROR("Filter subsystem: Built-in target `jump': There is no chain " "named `%s'.", chain_name); - return (-1); + return -1; } status = fc_process_chain(ds, vl, chain); if (status < 0) - return (status); + return status; else if (status == FC_TARGET_STOP) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; else - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int fc_bit_jump_invoke */ static int @@ -548,7 +548,7 @@ fc_bit_stop_invoke(const data_set_t __attribute__((unused)) * ds, /* {{{ */ value_list_t __attribute__((unused)) * vl, notification_meta_t __attribute__((unused)) * *meta, void __attribute__((unused)) * *user_data) { - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int fc_bit_stop_invoke */ static int @@ -556,7 +556,7 @@ fc_bit_return_invoke(const data_set_t __attribute__((unused)) * ds, /* {{{ */ value_list_t __attribute__((unused)) * vl, notification_meta_t __attribute__((unused)) * *meta, void __attribute__((unused)) * *user_data) { - return (FC_TARGET_RETURN); + return FC_TARGET_RETURN; } /* }}} int fc_bit_return_invoke */ static int fc_bit_write_create(const oconfig_item_t *ci, /* {{{ */ @@ -606,7 +606,7 @@ static int fc_bit_write_create(const oconfig_item_t *ci, /* {{{ */ *user_data = plugin_list; - return (0); + return 0; } /* }}} int fc_bit_write_create */ static int fc_bit_write_destroy(void **user_data) /* {{{ */ @@ -614,7 +614,7 @@ static int fc_bit_write_destroy(void **user_data) /* {{{ */ fc_writer_t *plugin_list; if ((user_data == NULL) || (*user_data == NULL)) - return (0); + return 0; plugin_list = *user_data; @@ -622,7 +622,7 @@ static int fc_bit_write_destroy(void **user_data) /* {{{ */ free(plugin_list[i].plugin); free(plugin_list); - return (0); + return 0; } /* }}} int fc_bit_write_destroy */ static int fc_bit_write_invoke(const data_set_t *ds, /* {{{ */ @@ -688,7 +688,7 @@ static int fc_bit_write_invoke(const data_set_t *ds, /* {{{ */ } /* for (i = 0; plugin_list[i] != NULL; i++) */ } - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int fc_bit_write_invoke */ static int fc_init_once(void) /* {{{ */ @@ -697,7 +697,7 @@ static int fc_init_once(void) /* {{{ */ target_proc_t tproc = {0}; if (done != 0) - return (0); + return 0; tproc.create = fc_bit_jump_create; tproc.destroy = fc_bit_jump_destroy; @@ -723,7 +723,7 @@ static int fc_init_once(void) /* {{{ */ fc_register_target("write", tproc); done++; - return (0); + return 0; } /* }}} int fc_init_once */ /* @@ -738,7 +738,7 @@ int fc_register_match(const char *name, match_proc_t proc) /* {{{ */ m = calloc(1, sizeof(*m)); if (m == NULL) - return (-ENOMEM); + return -ENOMEM; sstrncpy(m->name, name, sizeof(m->name)); memcpy(&m->proc, &proc, sizeof(m->proc)); @@ -755,7 +755,7 @@ int fc_register_match(const char *name, match_proc_t proc) /* {{{ */ ptr->next = m; } - return (0); + return 0; } /* }}} int fc_register_match */ /* Add a target to list of available targets. */ @@ -767,7 +767,7 @@ int fc_register_target(const char *name, target_proc_t proc) /* {{{ */ t = calloc(1, sizeof(*t)); if (t == NULL) - return (-ENOMEM); + return -ENOMEM; sstrncpy(t->name, name, sizeof(t->name)); memcpy(&t->proc, &proc, sizeof(t->proc)); @@ -784,19 +784,19 @@ int fc_register_target(const char *name, target_proc_t proc) /* {{{ */ ptr->next = t; } - return (0); + return 0; } /* }}} int fc_register_target */ fc_chain_t *fc_chain_get_by_name(const char *chain_name) /* {{{ */ { if (chain_name == NULL) - return (NULL); + return NULL; for (fc_chain_t *chain = chain_list_head; chain != NULL; chain = chain->next) if (strcasecmp(chain_name, chain->name) == 0) - return (chain); + return chain; - return (NULL); + return NULL; } /* }}} int fc_chain_get_by_name */ int fc_process_chain(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -805,7 +805,7 @@ int fc_process_chain(const data_set_t *ds, value_list_t *vl, /* {{{ */ int status = FC_TARGET_CONTINUE; if (chain == NULL) - return (-1); + return -1; DEBUG("fc_process_chain (chain = %s);", chain->name); @@ -875,7 +875,7 @@ int fc_process_chain(const data_set_t *ds, value_list_t *vl, /* {{{ */ } /* for (rule) */ if ((status == FC_TARGET_STOP) || (status == FC_TARGET_RETURN)) - return (status); + return status; DEBUG("fc_process_chain (%s): Executing the default targets.", chain->name); @@ -908,15 +908,15 @@ int fc_process_chain(const data_set_t *ds, value_list_t *vl, /* {{{ */ chain->name, target->name, (status == FC_TARGET_STOP) ? "stop" : "return"); if (status == FC_TARGET_STOP) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; else - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } DEBUG("fc_process_chain (%s): Signaling `continue' at end of chain.", chain->name); - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int fc_process_chain */ /* Iterate over all rules in the chain and execute all targets for which all @@ -924,8 +924,7 @@ int fc_process_chain(const data_set_t *ds, value_list_t *vl, /* {{{ */ int fc_default_action(const data_set_t *ds, value_list_t *vl) /* {{{ */ { /* FIXME: Pass the meta-data to match targets here (when implemented). */ - return (fc_bit_write_invoke(ds, vl, - /* meta = */ NULL, /* user_data = */ NULL)); + return fc_bit_write_invoke(ds, vl, NULL, NULL); } /* }}} int fc_default_action */ int fc_configure(const oconfig_item_t *ci) /* {{{ */ @@ -933,14 +932,12 @@ int fc_configure(const oconfig_item_t *ci) /* {{{ */ fc_init_once(); if (ci == NULL) - return (-EINVAL); + return -EINVAL; if (strcasecmp("Chain", ci->key) == 0) - return (fc_config_add_chain(ci)); + return fc_config_add_chain(ci); WARNING("Filter subsystem: Unknown top level config option `%s'.", ci->key); - return (-1); + return -1; } /* }}} int fc_configure */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/daemon/filter_chain.h b/src/daemon/filter_chain.h index 36ccbae9..5cc06fc5 100644 --- a/src/daemon/filter_chain.h +++ b/src/daemon/filter_chain.h @@ -101,4 +101,3 @@ int fc_default_action(const data_set_t *ds, value_list_t *vl); int fc_configure(const oconfig_item_t *ci); #endif /* FILTER_CHAIN_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/meta_data.c b/src/daemon/meta_data.c index 583d8196..502ca108 100644 --- a/src/daemon/meta_data.c +++ b/src/daemon/meta_data.c @@ -67,16 +67,16 @@ static char *md_strdup(const char *orig) /* {{{ */ char *dest; if (orig == NULL) - return (NULL); + return NULL; sz = strlen(orig) + 1; dest = malloc(sz); if (dest == NULL) - return (NULL); + return NULL; memcpy(dest, orig, sz); - return (dest); + return dest; } /* }}} char *md_strdup */ static meta_entry_t *md_entry_alloc(const char *key) /* {{{ */ @@ -86,20 +86,20 @@ static meta_entry_t *md_entry_alloc(const char *key) /* {{{ */ e = calloc(1, sizeof(*e)); if (e == NULL) { ERROR("md_entry_alloc: calloc failed."); - return (NULL); + return NULL; } e->key = md_strdup(key); if (e->key == NULL) { free(e); ERROR("md_entry_alloc: md_strdup failed."); - return (NULL); + return NULL; } e->type = 0; e->next = NULL; - return (e); + return e; } /* }}} meta_entry_t *md_entry_alloc */ /* XXX: The lock on md must be held while calling this function! */ @@ -115,14 +115,14 @@ static meta_entry_t *md_entry_clone_contents(const meta_entry_t *orig) /* {{{ */ copy = md_entry_alloc(orig->key); if (copy == NULL) - return (NULL); + return NULL; copy->type = orig->type; if (copy->type == MD_TYPE_STRING) copy->value.mv_string = strdup(orig->value.mv_string); else copy->value = orig->value; - return (copy); + return copy; } /* }}} meta_entry_t *md_entry_clone_contents */ static meta_entry_t *md_entry_clone(const meta_entry_t *orig) /* {{{ */ @@ -130,12 +130,12 @@ static meta_entry_t *md_entry_clone(const meta_entry_t *orig) /* {{{ */ meta_entry_t *copy; if (orig == NULL) - return (NULL); + return NULL; copy = md_entry_clone_contents(orig); copy->next = md_entry_clone(orig->next); - return (copy); + return copy; } /* }}} meta_entry_t *md_entry_clone */ static void md_entry_free(meta_entry_t *e) /* {{{ */ @@ -160,7 +160,7 @@ static int md_entry_insert(meta_data_t *md, meta_entry_t *e) /* {{{ */ meta_entry_t *prev; if ((md == NULL) || (e == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); @@ -201,7 +201,7 @@ static int md_entry_insert(meta_data_t *md, meta_entry_t *e) /* {{{ */ md_entry_free(this); } - return (0); + return 0; } /* }}} int md_entry_insert */ /* XXX: The lock on md must be held while calling this function! */ @@ -254,7 +254,7 @@ static int md_entry_insert_clone(meta_data_t *md, meta_entry_t *orig) /* {{{ */ md_entry_free(this); } - return (0); + return 0; } /* }}} int md_entry_insert_clone */ /* XXX: The lock on md must be held while calling this function! */ @@ -263,13 +263,13 @@ static meta_entry_t *md_entry_lookup(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL)) - return (NULL); + return NULL; for (e = md->head; e != NULL; e = e->next) if (strcasecmp(key, e->key) == 0) break; - return (e); + return e; } /* }}} meta_entry_t *md_entry_lookup */ /* @@ -293,12 +293,12 @@ meta_data_t *meta_data_create(void) /* {{{ */ md = calloc(1, sizeof(*md)); if (md == NULL) { ERROR("meta_data_create: calloc failed."); - return (NULL); + return NULL; } pthread_mutex_init(&md->lock, /* attr = */ NULL); - return (md); + return md; } /* }}} meta_data_t *meta_data_create */ meta_data_t *meta_data_clone(meta_data_t *orig) /* {{{ */ @@ -306,27 +306,27 @@ meta_data_t *meta_data_clone(meta_data_t *orig) /* {{{ */ meta_data_t *copy; if (orig == NULL) - return (NULL); + return NULL; copy = meta_data_create(); if (copy == NULL) - return (NULL); + return NULL; pthread_mutex_lock(&orig->lock); copy->head = md_entry_clone(orig->head); pthread_mutex_unlock(&orig->lock); - return (copy); + return copy; } /* }}} meta_data_t *meta_data_clone */ int meta_data_clone_merge(meta_data_t **dest, meta_data_t *orig) /* {{{ */ { if (orig == NULL) - return (0); + return 0; if (*dest == NULL) { *dest = meta_data_clone(orig); - return (0); + return 0; } pthread_mutex_lock(&orig->lock); @@ -335,7 +335,7 @@ int meta_data_clone_merge(meta_data_t **dest, meta_data_t *orig) /* {{{ */ } pthread_mutex_unlock(&orig->lock); - return (0); + return 0; } /* }}} int meta_data_clone_merge */ void meta_data_destroy(meta_data_t *md) /* {{{ */ @@ -351,19 +351,19 @@ void meta_data_destroy(meta_data_t *md) /* {{{ */ int meta_data_exists(meta_data_t *md, const char *key) /* {{{ */ { if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); for (meta_entry_t *e = md->head; e != NULL; e = e->next) { if (strcasecmp(key, e->key) == 0) { pthread_mutex_unlock(&md->lock); - return (1); + return 1; } } pthread_mutex_unlock(&md->lock); - return (0); + return 0; } /* }}} int meta_data_exists */ int meta_data_type(meta_data_t *md, const char *key) /* {{{ */ @@ -398,7 +398,7 @@ int meta_data_toc(meta_data_t *md, char ***toc) /* {{{ */ if (count == 0) { pthread_mutex_unlock(&md->lock); - return (count); + return count; } *toc = calloc(count, sizeof(**toc)); @@ -415,7 +415,7 @@ int meta_data_delete(meta_data_t *md, const char *key) /* {{{ */ meta_entry_t *prev; if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); @@ -431,7 +431,7 @@ int meta_data_delete(meta_data_t *md, const char *key) /* {{{ */ if (this == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (prev == NULL) @@ -444,7 +444,7 @@ int meta_data_delete(meta_data_t *md, const char *key) /* {{{ */ this->next = NULL; md_entry_free(this); - return (0); + return 0; } /* }}} int meta_data_delete */ /* @@ -455,21 +455,21 @@ int meta_data_add_string(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; e = md_entry_alloc(key); if (e == NULL) - return (-ENOMEM); + return -ENOMEM; e->value.mv_string = md_strdup(value); if (e->value.mv_string == NULL) { ERROR("meta_data_add_string: md_strdup failed."); md_entry_free(e); - return (-ENOMEM); + return -ENOMEM; } e->type = MD_TYPE_STRING; - return (md_entry_insert(md, e)); + return md_entry_insert(md, e); } /* }}} int meta_data_add_string */ int meta_data_add_signed_int(meta_data_t *md, /* {{{ */ @@ -477,16 +477,16 @@ int meta_data_add_signed_int(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; e = md_entry_alloc(key); if (e == NULL) - return (-ENOMEM); + return -ENOMEM; e->value.mv_signed_int = value; e->type = MD_TYPE_SIGNED_INT; - return (md_entry_insert(md, e)); + return md_entry_insert(md, e); } /* }}} int meta_data_add_signed_int */ int meta_data_add_unsigned_int(meta_data_t *md, /* {{{ */ @@ -494,16 +494,16 @@ int meta_data_add_unsigned_int(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; e = md_entry_alloc(key); if (e == NULL) - return (-ENOMEM); + return -ENOMEM; e->value.mv_unsigned_int = value; e->type = MD_TYPE_UNSIGNED_INT; - return (md_entry_insert(md, e)); + return md_entry_insert(md, e); } /* }}} int meta_data_add_unsigned_int */ int meta_data_add_double(meta_data_t *md, /* {{{ */ @@ -511,16 +511,16 @@ int meta_data_add_double(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; e = md_entry_alloc(key); if (e == NULL) - return (-ENOMEM); + return -ENOMEM; e->value.mv_double = value; e->type = MD_TYPE_DOUBLE; - return (md_entry_insert(md, e)); + return md_entry_insert(md, e); } /* }}} int meta_data_add_double */ int meta_data_add_boolean(meta_data_t *md, /* {{{ */ @@ -528,16 +528,16 @@ int meta_data_add_boolean(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL)) - return (-EINVAL); + return -EINVAL; e = md_entry_alloc(key); if (e == NULL) - return (-ENOMEM); + return -ENOMEM; e->value.mv_boolean = value; e->type = MD_TYPE_BOOLEAN; - return (md_entry_insert(md, e)); + return md_entry_insert(md, e); } /* }}} int meta_data_add_boolean */ /* @@ -549,34 +549,34 @@ int meta_data_get_string(meta_data_t *md, /* {{{ */ char *temp; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (e->type != MD_TYPE_STRING) { ERROR("meta_data_get_string: Type mismatch for key `%s'", e->key); pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } temp = md_strdup(e->value.mv_string); if (temp == NULL) { pthread_mutex_unlock(&md->lock); ERROR("meta_data_get_string: md_strdup failed."); - return (-ENOMEM); + return -ENOMEM; } pthread_mutex_unlock(&md->lock); *value = temp; - return (0); + return 0; } /* }}} int meta_data_get_string */ int meta_data_get_signed_int(meta_data_t *md, /* {{{ */ @@ -584,26 +584,26 @@ int meta_data_get_signed_int(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (e->type != MD_TYPE_SIGNED_INT) { ERROR("meta_data_get_signed_int: Type mismatch for key `%s'", e->key); pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } *value = e->value.mv_signed_int; pthread_mutex_unlock(&md->lock); - return (0); + return 0; } /* }}} int meta_data_get_signed_int */ int meta_data_get_unsigned_int(meta_data_t *md, /* {{{ */ @@ -611,26 +611,26 @@ int meta_data_get_unsigned_int(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (e->type != MD_TYPE_UNSIGNED_INT) { ERROR("meta_data_get_unsigned_int: Type mismatch for key `%s'", e->key); pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } *value = e->value.mv_unsigned_int; pthread_mutex_unlock(&md->lock); - return (0); + return 0; } /* }}} int meta_data_get_unsigned_int */ int meta_data_get_double(meta_data_t *md, /* {{{ */ @@ -638,26 +638,26 @@ int meta_data_get_double(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (e->type != MD_TYPE_DOUBLE) { ERROR("meta_data_get_double: Type mismatch for key `%s'", e->key); pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } *value = e->value.mv_double; pthread_mutex_unlock(&md->lock); - return (0); + return 0; } /* }}} int meta_data_get_double */ int meta_data_get_boolean(meta_data_t *md, /* {{{ */ @@ -665,45 +665,45 @@ int meta_data_get_boolean(meta_data_t *md, /* {{{ */ meta_entry_t *e; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } if (e->type != MD_TYPE_BOOLEAN) { ERROR("meta_data_get_boolean: Type mismatch for key `%s'", e->key); pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } *value = e->value.mv_boolean; pthread_mutex_unlock(&md->lock); - return (0); + return 0; } /* }}} int meta_data_get_boolean */ int meta_data_as_string(meta_data_t *md, /* {{{ */ const char *key, char **value) { meta_entry_t *e; - char *actual; + const char *actual; char buffer[MD_MAX_NONSTRING_CHARS]; /* For non-string types. */ char *temp; int type; if ((md == NULL) || (key == NULL) || (value == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&md->lock); e = md_entry_lookup(md, key); if (e == NULL) { pthread_mutex_unlock(&md->lock); - return (-ENOENT); + return -ENOENT; } type = e->type; @@ -730,7 +730,7 @@ int meta_data_as_string(meta_data_t *md, /* {{{ */ default: pthread_mutex_unlock(&md->lock); ERROR("meta_data_as_string: unknown type %d for key `%s'", type, key); - return (-ENOENT); + return -ENOENT; } pthread_mutex_unlock(&md->lock); @@ -739,12 +739,10 @@ int meta_data_as_string(meta_data_t *md, /* {{{ */ if (temp == NULL) { pthread_mutex_unlock(&md->lock); ERROR("meta_data_as_string: md_strdup failed for key `%s'.", key); - return (-ENOMEM); + return -ENOMEM; } *value = temp; - return (0); + return 0; } /* }}} int meta_data_as_string */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/daemon/meta_data.h b/src/daemon/meta_data.h index 3ef33604..50fdb8d6 100644 --- a/src/daemon/meta_data.h +++ b/src/daemon/meta_data.h @@ -69,4 +69,3 @@ int meta_data_get_boolean(meta_data_t *md, const char *key, _Bool *value); int meta_data_as_string(meta_data_t *md, const char *key, char **value); #endif /* META_DATA_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/meta_data_test.c b/src/daemon/meta_data_test.c index 803c7454..bcd457d4 100644 --- a/src/daemon/meta_data_test.c +++ b/src/daemon/meta_data_test.c @@ -114,5 +114,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index 0f067374..3bf183d9 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -46,7 +46,7 @@ #include /* for pthread_set_name_np(3) */ #endif -#include +#include /* * Private structures @@ -148,9 +148,9 @@ static int plugin_dispatch_values_internal(value_list_t *vl); static const char *plugin_get_dir(void) { if (plugindir == NULL) - return (PLUGINDIR); + return PLUGINDIR; else - return (plugindir); + return plugindir; } static int plugin_update_internal_statistics(void) { /* {{{ */ @@ -258,7 +258,7 @@ static int register_callback(llist_t **list, /* {{{ */ ERROR("plugin: register_callback: " "llist_create failed."); destroy_callback(cf); - return (-1); + return -1; } } @@ -266,7 +266,7 @@ static int register_callback(llist_t **list, /* {{{ */ if (key == NULL) { ERROR("plugin: register_callback: strdup failed."); destroy_callback(cf); - return (-1); + return -1; } le = llist_search(*list, name); @@ -277,7 +277,7 @@ static int register_callback(llist_t **list, /* {{{ */ "llentry_create failed."); sfree(key); destroy_callback(cf); - return (-1); + return -1; } llist_append(*list, le); @@ -296,7 +296,7 @@ static int register_callback(llist_t **list, /* {{{ */ sfree(key); } - return (0); + return 0; } /* }}} int register_callback */ static void log_list_callbacks(llist_t **list, /* {{{ */ @@ -346,7 +346,7 @@ static int create_register_callback(llist_t **list, /* {{{ */ cf = calloc(1, sizeof(*cf)); if (cf == NULL) { ERROR("plugin: create_register_callback: calloc failed."); - return (-1); + return -1; } cf->cf_callback = callback; @@ -359,7 +359,7 @@ static int create_register_callback(llist_t **list, /* {{{ */ cf->cf_ctx = plugin_get_ctx(); - return (register_callback(list, name, cf)); + return register_callback(list, name, cf); } /* }}} int create_register_callback */ static int plugin_unregister(llist_t *list, const char *name) /* {{{ */ @@ -367,11 +367,11 @@ static int plugin_unregister(llist_t *list, const char *name) /* {{{ */ llentry_t *e; if (list == NULL) - return (-1); + return -1; e = llist_search(list, name); if (e == NULL) - return (-1); + return -1; llist_remove(list, e); @@ -380,7 +380,7 @@ static int plugin_unregister(llist_t *list, const char *name) /* {{{ */ llentry_destroy(e); - return (0); + return 0; } /* }}} int plugin_unregister */ /* @@ -388,40 +388,25 @@ static int plugin_unregister(llist_t *list, const char *name) /* {{{ */ * object, but it will bitch about a shared object not having a * ``module_register'' symbol.. */ -static int plugin_load_file(char *file, uint32_t flags) { - lt_dlhandle dlh; +static int plugin_load_file(const char *file, _Bool global) { void (*reg_handle)(void); - lt_dlinit(); - lt_dlerror(); /* clear errors */ + int flags = RTLD_NOW; + if (global) + flags |= RTLD_GLOBAL; -#if LIBTOOL_VERSION == 2 - if (flags & PLUGIN_FLAGS_GLOBAL) { - lt_dladvise advise; - lt_dladvise_init(&advise); - lt_dladvise_global(&advise); - dlh = lt_dlopenadvise(file, advise); - lt_dladvise_destroy(&advise); - } else { - dlh = lt_dlopen(file); - } -#else /* if LIBTOOL_VERSION == 1 */ - if (flags & PLUGIN_FLAGS_GLOBAL) - WARNING("plugin_load_file: The global flag is not supported, " - "libtool 2 is required for this."); - dlh = lt_dlopen(file); -#endif + void *dlh = dlopen(file, flags); if (dlh == NULL) { char errbuf[1024] = ""; ssnprintf(errbuf, sizeof(errbuf), - "lt_dlopen (\"%s\") failed: %s. " + "dlopen (\"%s\") failed: %s. " "The most common cause for this problem is " "missing dependencies. Use ldd(1) to check " "the dependencies of the plugin " "/ shared object.", - file, lt_dlerror()); + file, dlerror()); ERROR("%s", errbuf); /* Make sure this is printed to STDERR in any case, but also @@ -429,19 +414,20 @@ static int plugin_load_file(char *file, uint32_t flags) { if (list_log != NULL) fprintf(stderr, "ERROR: %s\n", errbuf); - return (1); + return 1; } - if ((reg_handle = (void (*)(void))lt_dlsym(dlh, "module_register")) == NULL) { + reg_handle = (void (*)(void))dlsym(dlh, "module_register"); + if (reg_handle == NULL) { WARNING("Couldn't find symbol \"module_register\" in \"%s\": %s\n", file, - lt_dlerror()); - lt_dlclose(dlh); - return (-1); + dlerror()); + dlclose(dlh); + return -1; } (*reg_handle)(); - return (0); + return 0; } static void *plugin_read_thread(void __attribute__((unused)) * args) { @@ -596,7 +582,7 @@ static void *plugin_read_thread(void __attribute__((unused)) * args) { } /* while (read_loop) */ pthread_exit(NULL); - return ((void *)0); + return (void *)0; } /* void *plugin_read_thread */ #ifdef PTHREAD_MAX_NAMELEN_NP @@ -699,11 +685,11 @@ plugin_value_list_clone(value_list_t const *vl_orig) /* {{{ */ value_list_t *vl; if (vl_orig == NULL) - return (NULL); + return NULL; vl = malloc(sizeof(*vl)); if (vl == NULL) - return (NULL); + return NULL; memcpy(vl, vl_orig, sizeof(*vl)); if (vl->host[0] == 0) @@ -712,7 +698,7 @@ plugin_value_list_clone(value_list_t const *vl_orig) /* {{{ */ vl->values = calloc(vl_orig->values_len, sizeof(*vl->values)); if (vl->values == NULL) { plugin_value_list_free(vl); - return (NULL); + return NULL; } memcpy(vl->values, vl_orig->values, vl_orig->values_len * sizeof(*vl->values)); @@ -720,7 +706,7 @@ plugin_value_list_clone(value_list_t const *vl_orig) /* {{{ */ vl->meta = meta_data_clone(vl->meta); if ((vl_orig->meta != NULL) && (vl->meta == NULL)) { plugin_value_list_free(vl); - return (NULL); + return NULL; } if (vl->time == 0) @@ -747,7 +733,7 @@ plugin_value_list_clone(value_list_t const *vl_orig) /* {{{ */ } } - return (vl); + return vl; } /* }}} value_list_t *plugin_value_list_clone */ static int plugin_write_enqueue(value_list_t const *vl) /* {{{ */ @@ -756,13 +742,13 @@ static int plugin_write_enqueue(value_list_t const *vl) /* {{{ */ q = malloc(sizeof(*q)); if (q == NULL) - return (ENOMEM); + return ENOMEM; q->next = NULL; q->vl = plugin_value_list_clone(vl); if (q->vl == NULL) { sfree(q); - return (ENOMEM); + return ENOMEM; } /* Store context of caller (read plugin); otherwise, it would not be @@ -785,7 +771,7 @@ static int plugin_write_enqueue(value_list_t const *vl) /* {{{ */ pthread_cond_signal(&write_cond); pthread_mutex_unlock(&write_lock); - return (0); + return 0; } /* }}} int plugin_write_enqueue */ static value_list_t *plugin_write_dequeue(void) /* {{{ */ @@ -800,7 +786,7 @@ static value_list_t *plugin_write_dequeue(void) /* {{{ */ if (write_queue_head == NULL) { pthread_mutex_unlock(&write_lock); - return (NULL); + return NULL; } q = write_queue_head; @@ -817,7 +803,7 @@ static value_list_t *plugin_write_dequeue(void) /* {{{ */ vl = q->vl; sfree(q); - return (vl); + return vl; } /* }}} value_list_t *plugin_write_dequeue */ static void *plugin_write_thread(void __attribute__((unused)) * args) /* {{{ */ @@ -833,7 +819,7 @@ static void *plugin_write_thread(void __attribute__((unused)) * args) /* {{{ */ } pthread_exit(NULL); - return ((void *)0); + return (void *)0; } /* }}} void *plugin_write_thread */ static void start_write_threads(size_t num) /* {{{ */ @@ -939,7 +925,7 @@ static _Bool plugin_is_loaded(char const *name) { assert(plugins_loaded != NULL); status = c_avl_get(plugins_loaded, name, /* ret_value = */ NULL); - return (status == 0); + return status == 0; } static int plugin_mark_loaded(char const *name) { @@ -948,11 +934,11 @@ static int plugin_mark_loaded(char const *name) { name_copy = strdup(name); if (name_copy == NULL) - return (ENOMEM); + return ENOMEM; status = c_avl_insert(plugins_loaded, /* key = */ name_copy, /* value = */ NULL); - return (status); + return status; } static void plugin_free_loaded(void) { @@ -972,7 +958,7 @@ static void plugin_free_loaded(void) { } #define BUFSIZE 512 -int plugin_load(char const *plugin_name, uint32_t flags) { +int plugin_load(char const *plugin_name, _Bool global) { DIR *dh; const char *dir; char filename[BUFSIZE] = ""; @@ -983,12 +969,12 @@ int plugin_load(char const *plugin_name, uint32_t flags) { int status; if (plugin_name == NULL) - return (EINVAL); + return EINVAL; /* Check if plugin is already loaded and don't do anything in this * case. */ if (plugin_is_loaded(plugin_name)) - return (0); + return 0; dir = plugin_get_dir(); ret = 1; @@ -1006,21 +992,21 @@ int plugin_load(char const *plugin_name, uint32_t flags) { */ if ((strcasecmp("perl", plugin_name) == 0) || (strcasecmp("python", plugin_name) == 0)) - flags |= PLUGIN_FLAGS_GLOBAL; + global = 1; /* `cpu' should not match `cpufreq'. To solve this we add `.so' to the * type when matching the filename */ status = ssnprintf(typename, sizeof(typename), "%s.so", plugin_name); if ((status < 0) || ((size_t)status >= sizeof(typename))) { WARNING("plugin_load: Filename too long: \"%s.so\"", plugin_name); - return (-1); + return -1; } if ((dh = opendir(dir)) == NULL) { char errbuf[1024]; ERROR("plugin_load: opendir (%s) failed: %s", dir, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while ((de = readdir(dh)) != NULL) { @@ -1044,7 +1030,7 @@ int plugin_load(char const *plugin_name, uint32_t flags) { continue; } - status = plugin_load_file(filename, flags); + status = plugin_load_file(filename, global); if (status == 0) { /* success */ plugin_mark_loaded(plugin_name); @@ -1063,7 +1049,7 @@ int plugin_load(char const *plugin_name, uint32_t flags) { if (filename[0] == 0) ERROR("plugin_load: Could not find plugin \"%s\" in %s", plugin_name, dir); - return (ret); + return ret; } /* @@ -1073,17 +1059,16 @@ int plugin_register_config(const char *name, int (*callback)(const char *key, const char *val), const char **keys, int keys_num) { cf_register(name, callback, keys, keys_num); - return (0); + return 0; } /* int plugin_register_config */ int plugin_register_complex_config(const char *type, int (*callback)(oconfig_item_t *)) { - return (cf_register_complex(type, callback)); + return cf_register_complex(type, callback); } /* int plugin_register_complex_config */ int plugin_register_init(const char *name, int (*callback)(void)) { - return (create_register_callback(&list_init, name, (void *)callback, - /* user_data = */ NULL)); + return create_register_callback(&list_init, name, (void *)callback, NULL); } /* plugin_register_init */ static int plugin_compare_read_func(const void *arg0, const void *arg1) { @@ -1094,11 +1079,11 @@ static int plugin_compare_read_func(const void *arg0, const void *arg1) { rf1 = arg1; if (rf0->rf_next_read < rf1->rf_next_read) - return (-1); + return -1; else if (rf0->rf_next_read > rf1->rf_next_read) - return (1); + return 1; else - return (0); + return 0; } /* int plugin_compare_read_func */ /* Add a read function to both, the heap and a linked list. The linked list if @@ -1118,7 +1103,7 @@ static int plugin_insert_read(read_func_t *rf) { if (read_list == NULL) { pthread_mutex_unlock(&read_lock); ERROR("plugin_insert_read: read_list failed."); - return (-1); + return -1; } } @@ -1127,7 +1112,7 @@ static int plugin_insert_read(read_func_t *rf) { if (read_heap == NULL) { pthread_mutex_unlock(&read_lock); ERROR("plugin_insert_read: c_heap_create failed."); - return (-1); + return -1; } } @@ -1138,14 +1123,14 @@ static int plugin_insert_read(read_func_t *rf) { "Check for duplicate \"LoadPlugin\" lines " "in your configuration!", rf->rf_name); - return (EINVAL); + return EINVAL; } le = llentry_create(rf->rf_name, rf); if (le == NULL) { pthread_mutex_unlock(&read_lock); ERROR("plugin_insert_read: llentry_create failed."); - return (-1); + return -1; } status = c_heap_insert(read_heap, rf); @@ -1153,7 +1138,7 @@ static int plugin_insert_read(read_func_t *rf) { pthread_mutex_unlock(&read_lock); ERROR("plugin_insert_read: c_heap_insert failed."); llentry_destroy(le); - return (-1); + return -1; } /* This does not fail. */ @@ -1162,7 +1147,7 @@ static int plugin_insert_read(read_func_t *rf) { /* Wake up all the read threads. */ pthread_cond_broadcast(&read_cond); pthread_mutex_unlock(&read_lock); - return (0); + return 0; } /* int plugin_insert_read */ int plugin_register_read(const char *name, int (*callback)(void)) { @@ -1172,7 +1157,7 @@ int plugin_register_read(const char *name, int (*callback)(void)) { rf = calloc(1, sizeof(*rf)); if (rf == NULL) { ERROR("plugin_register_read: calloc failed."); - return (ENOMEM); + return ENOMEM; } rf->rf_callback = (void *)callback; @@ -1190,7 +1175,7 @@ int plugin_register_read(const char *name, int (*callback)(void)) { sfree(rf); } - return (status); + return status; } /* int plugin_register_read */ int plugin_register_complex_read(const char *group, const char *name, @@ -1202,7 +1187,7 @@ int plugin_register_complex_read(const char *group, const char *name, rf = calloc(1, sizeof(*rf)); if (rf == NULL) { ERROR("plugin_register_complex_read: calloc failed."); - return (ENOMEM); + return ENOMEM; } rf->rf_callback = (void *)callback; @@ -1230,18 +1215,18 @@ int plugin_register_complex_read(const char *group, const char *name, sfree(rf); } - return (status); + return status; } /* int plugin_register_complex_read */ int plugin_register_write(const char *name, plugin_write_cb callback, user_data_t const *ud) { - return (create_register_callback(&list_write, name, (void *)callback, ud)); + return create_register_callback(&list_write, name, (void *)callback, ud); } /* int plugin_register_write */ static int plugin_flush_timeout_callback(user_data_t *ud) { flush_callback_t *cb = ud->data; - return plugin_flush(cb->name, cb->timeout, /* identifier = */ NULL); + return plugin_flush(cb->name, cb->timeout, NULL); } /* static int plugin_flush_callback */ static void plugin_flush_timeout_callback_free(void *data) { @@ -1266,7 +1251,7 @@ static char *plugin_flush_callback_name(const char *name) { flush_name = malloc(name_size + prefix_size + 1); if (flush_name == NULL) { ERROR("plugin_flush_callback_name: malloc failed."); - return (NULL); + return NULL; } sstrncpy(flush_name, flush_prefix, prefix_size + 1); @@ -1290,13 +1275,13 @@ int plugin_register_flush(const char *name, plugin_flush_cb callback, flush_name = plugin_flush_callback_name(name); if (flush_name == NULL) - return (-1); + return -1; cb = malloc(sizeof(*cb)); if (cb == NULL) { ERROR("plugin_register_flush: malloc failed."); sfree(flush_name); - return (-1); + return -1; } cb->name = strdup(name); @@ -1304,7 +1289,7 @@ int plugin_register_flush(const char *name, plugin_flush_cb callback, ERROR("plugin_register_flush: strdup failed."); sfree(cb); sfree(flush_name); - return (-1); + return -1; } cb->timeout = ctx.flush_timeout; @@ -1330,12 +1315,12 @@ int plugin_register_flush(const char *name, plugin_flush_cb callback, int plugin_register_missing(const char *name, plugin_missing_cb callback, user_data_t const *ud) { - return (create_register_callback(&list_missing, name, (void *)callback, ud)); + return create_register_callback(&list_missing, name, (void *)callback, ud); } /* int plugin_register_missing */ int plugin_register_shutdown(const char *name, int (*callback)(void)) { - return (create_register_callback(&list_shutdown, name, (void *)callback, - /* user_data = */ NULL)); + return create_register_callback(&list_shutdown, name, (void *)callback, + NULL); } /* int plugin_register_shutdown */ static void plugin_free_data_sets(void) { @@ -1366,50 +1351,50 @@ int plugin_register_data_set(const data_set_t *ds) { } else if (data_sets == NULL) { data_sets = c_avl_create((int (*)(const void *, const void *))strcmp); if (data_sets == NULL) - return (-1); + return -1; } ds_copy = malloc(sizeof(*ds_copy)); if (ds_copy == NULL) - return (-1); + return -1; memcpy(ds_copy, ds, sizeof(data_set_t)); ds_copy->ds = malloc(sizeof(*ds_copy->ds) * ds->ds_num); if (ds_copy->ds == NULL) { sfree(ds_copy); - return (-1); + return -1; } for (size_t i = 0; i < ds->ds_num; i++) memcpy(ds_copy->ds + i, ds->ds + i, sizeof(data_source_t)); - return (c_avl_insert(data_sets, (void *)ds_copy->type, (void *)ds_copy)); + return c_avl_insert(data_sets, (void *)ds_copy->type, (void *)ds_copy); } /* int plugin_register_data_set */ int plugin_register_log(const char *name, plugin_log_cb callback, user_data_t const *ud) { - return (create_register_callback(&list_log, name, (void *)callback, ud)); + return create_register_callback(&list_log, name, (void *)callback, ud); } /* int plugin_register_log */ int plugin_register_notification(const char *name, plugin_notification_cb callback, user_data_t const *ud) { - return ( - create_register_callback(&list_notification, name, (void *)callback, ud)); + return create_register_callback(&list_notification, name, (void *)callback, + ud); } /* int plugin_register_log */ int plugin_unregister_config(const char *name) { cf_unregister(name); - return (0); + return 0; } /* int plugin_unregister_config */ int plugin_unregister_complex_config(const char *name) { cf_unregister_complex(name); - return (0); + return 0; } /* int plugin_unregister_complex_config */ int plugin_unregister_init(const char *name) { - return (plugin_unregister(list_init, name)); + return plugin_unregister(list_init, name); } int plugin_unregister_read(const char *name) /* {{{ */ @@ -1418,20 +1403,20 @@ int plugin_unregister_read(const char *name) /* {{{ */ read_func_t *rf; if (name == NULL) - return (-ENOENT); + return -ENOENT; pthread_mutex_lock(&read_lock); if (read_list == NULL) { pthread_mutex_unlock(&read_lock); - return (-ENOENT); + return -ENOENT; } le = llist_search(read_list, name); if (le == NULL) { pthread_mutex_unlock(&read_lock); WARNING("plugin_unregister_read: No such read function: %s", name); - return (-ENOENT); + return -ENOENT; } llist_remove(read_list, le); @@ -1446,7 +1431,7 @@ int plugin_unregister_read(const char *name) /* {{{ */ DEBUG("plugin_unregister_read: Marked `%s' for removal.", name); - return (0); + return 0; } /* }}} int plugin_unregister_read */ void plugin_log_available_writers(void) { @@ -1469,13 +1454,13 @@ int plugin_unregister_read_group(const char *group) /* {{{ */ int found = 0; if (group == NULL) - return (-ENOENT); + return -ENOENT; pthread_mutex_lock(&read_lock); if (read_list == NULL) { pthread_mutex_unlock(&read_lock); - return (-ENOENT); + return -ENOENT; } while (42) { @@ -1505,14 +1490,14 @@ int plugin_unregister_read_group(const char *group) /* {{{ */ WARNING("plugin_unregister_read_group: No such " "group of read function: %s", group); - return (-ENOENT); + return -ENOENT; } - return (0); + return 0; } /* }}} int plugin_unregister_read_group */ int plugin_unregister_write(const char *name) { - return (plugin_unregister(list_write, name)); + return plugin_unregister(list_write, name); } int plugin_unregister_flush(const char *name) { @@ -1532,34 +1517,34 @@ int plugin_unregister_flush(const char *name) { } int plugin_unregister_missing(const char *name) { - return (plugin_unregister(list_missing, name)); + return plugin_unregister(list_missing, name); } int plugin_unregister_shutdown(const char *name) { - return (plugin_unregister(list_shutdown, name)); + return plugin_unregister(list_shutdown, name); } int plugin_unregister_data_set(const char *name) { data_set_t *ds; if (data_sets == NULL) - return (-1); + return -1; if (c_avl_remove(data_sets, name, NULL, (void *)&ds) != 0) - return (-1); + return -1; sfree(ds->ds); sfree(ds); - return (0); + return 0; } /* int plugin_unregister_data_set */ int plugin_unregister_log(const char *name) { - return (plugin_unregister(list_log, name)); + return plugin_unregister(list_log, name); } int plugin_unregister_notification(const char *name) { - return (plugin_unregister(list_notification, name)); + return plugin_unregister(list_notification, name); } int plugin_init_all(void) { @@ -1674,7 +1659,7 @@ int plugin_read_all_once(void) { if (read_heap == NULL) { NOTICE("No read-functions are registered."); - return (0); + return 0; } while (42) { @@ -1710,7 +1695,7 @@ int plugin_read_all_once(void) { destroy_callback((void *)rf); } - return (return_status); + return return_status; } /* int plugin_read_all_once */ int plugin_write(const char *plugin, /* {{{ */ @@ -1719,16 +1704,16 @@ int plugin_write(const char *plugin, /* {{{ */ int status; if (vl == NULL) - return (EINVAL); + return EINVAL; if (list_write == NULL) - return (ENOENT); + return ENOENT; if (ds == NULL) { ds = plugin_get_ds(vl->type); if (ds == NULL) { ERROR("plugin_write: Unable to lookup type `%s'.", vl->type); - return (ENOENT); + return ENOENT; } } @@ -1773,7 +1758,7 @@ int plugin_write(const char *plugin, /* {{{ */ } if (le == NULL) - return (ENOENT); + return ENOENT; cf = le->value; @@ -1785,14 +1770,14 @@ int plugin_write(const char *plugin, /* {{{ */ status = (*callback)(ds, vl, &cf->cf_udata); } - return (status); + return status; } /* }}} int plugin_write */ int plugin_flush(const char *plugin, cdtime_t timeout, const char *identifier) { llentry_t *le; if (list_flush == NULL) - return (0); + return 0; le = llist_head(list_flush); while (le != NULL) { @@ -1815,7 +1800,7 @@ int plugin_flush(const char *plugin, cdtime_t timeout, const char *identifier) { le = le->next; } - return (0); + return 0; } /* int plugin_flush */ int plugin_shutdown_all(void) { @@ -1881,7 +1866,7 @@ int plugin_shutdown_all(void) { plugin_free_loaded(); plugin_free_data_sets(); - return (ret); + return ret; } /* void plugin_shutdown_all */ int plugin_dispatch_missing(const value_list_t *vl) /* {{{ */ @@ -1889,7 +1874,7 @@ int plugin_dispatch_missing(const value_list_t *vl) /* {{{ */ llentry_t *le; if (list_missing == NULL) - return (0); + return 0; le = llist_head(list_missing); while (le != NULL) { @@ -1909,15 +1894,15 @@ int plugin_dispatch_missing(const value_list_t *vl) /* {{{ */ ERROR("plugin_dispatch_missing: Callback function \"%s\" " "failed with status %i.", le->key, status); - return (status); + return status; } else { - return (0); + return 0; } } le = le->next; } - return (0); + return 0; } /* int }}} plugin_dispatch_missing */ static int plugin_dispatch_values_internal(value_list_t *vl) { @@ -1939,7 +1924,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { ERROR("plugin_dispatch_values: Invalid value list " "from plugin %s.", vl->plugin); - return (-1); + return -1; } /* Free meta data only if the calling function didn't specify any. In @@ -1958,7 +1943,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { ERROR("plugin_dispatch_values: No data sets registered. " "Could the types database be read? Check " "your `TypesDB' setting!"); - return (-1); + return -1; } if (c_avl_get(data_sets, vl->type, (void *)&ds) != 0) { @@ -1968,7 +1953,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { INFO("plugin_dispatch_values: Dataset not found: %s " "(from \"%s\"), check your types.db!", vl->type, ident); - return (-1); + return -1; } DEBUG("plugin_dispatch_values: time = %.3f; interval = %.3f; " @@ -1994,7 +1979,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { "(ds->ds_num = %zu) != " "(vl->values_len = %zu)", ds->type, ds->ds_num, vl->values_len); - return (-1); + return -1; } #endif @@ -2012,7 +1997,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { "status %i (%#x).", status, status); } else if (status == FC_TARGET_STOP) - return (0); + return 0; } /* Update the value cache */ @@ -2034,7 +2019,7 @@ static int plugin_dispatch_values_internal(value_list_t *vl) { vl->meta = NULL; } - return (0); + return 0; } /* int plugin_dispatch_values_internal */ static double get_drop_probability(void) /* {{{ */ @@ -2048,14 +2033,14 @@ static double get_drop_probability(void) /* {{{ */ pthread_mutex_unlock(&write_lock); if (wql < write_limit_low) - return (0.0); + return 0.0; if (wql >= write_limit_high) - return (1.0); + return 1.0; pos = 1 + wql - write_limit_low; size = 1 + write_limit_high - write_limit_low; - return (((double)pos) / ((double)size)); + return (double)pos / (double)size; } /* }}} double get_drop_probability */ static _Bool check_drop_value(void) /* {{{ */ @@ -2068,11 +2053,11 @@ static _Bool check_drop_value(void) /* {{{ */ int status; if (write_limit_high == 0) - return (0); + return 0; p = get_drop_probability(); if (p == 0.0) - return (0); + return 0; status = pthread_mutex_trylock(&last_message_lock); if (status == 0) { @@ -2089,13 +2074,13 @@ static _Bool check_drop_value(void) /* {{{ */ } if (p == 1.0) - return (1); + return 1; q = cdrand_d(); if (q > p) - return (1); + return 1; else - return (0); + return 0; } /* }}} _Bool check_drop_value */ int plugin_dispatch_values(value_list_t const *vl) { @@ -2108,7 +2093,7 @@ int plugin_dispatch_values(value_list_t const *vl) { stats_values_dropped++; pthread_mutex_unlock(&statistics_lock); } - return (0); + return 0; } status = plugin_write_enqueue(vl); @@ -2117,10 +2102,10 @@ int plugin_dispatch_values(value_list_t const *vl) { ERROR("plugin_dispatch_values: plugin_write_enqueue failed " "with status %i (%s).", status, sstrerror(status, errbuf, sizeof(errbuf))); - return (status); + return status; } - return (0); + return 0; } __attribute__((sentinel)) int @@ -2195,7 +2180,7 @@ plugin_dispatch_multivalue(value_list_t const *template, /* {{{ */ va_end(ap); plugin_value_list_free(vl); - return (failed); + return failed; } /* }}} int plugin_dispatch_multivalue */ int plugin_dispatch_notification(const notification_t *notif) { @@ -2209,7 +2194,7 @@ int plugin_dispatch_notification(const notification_t *notif) { /* Nobody cares for notifications */ if (list_notification == NULL) - return (-1); + return -1; le = llist_head(list_notification); while (le != NULL) { @@ -2232,7 +2217,7 @@ int plugin_dispatch_notification(const notification_t *notif) { le = le->next; } - return (0); + return 0; } /* int plugin_dispatch_notification */ void plugin_log(int level, const char *format, ...) { @@ -2290,7 +2275,7 @@ int parse_log_severity(const char *severity) { log_level = LOG_DEBUG; #endif /* COLLECT_DEBUG */ - return (log_level); + return log_level; } /* int parse_log_severity */ int parse_notif_severity(const char *severity) { @@ -2304,7 +2289,7 @@ int parse_notif_severity(const char *severity) { (strcmp(severity, "WARN") == 0)) notif_severity = NOTIF_WARNING; - return (notif_severity); + return notif_severity; } /* int parse_notif_severity */ const data_set_t *plugin_get_ds(const char *name) { @@ -2312,15 +2297,15 @@ const data_set_t *plugin_get_ds(const char *name) { if (data_sets == NULL) { ERROR("plugin_get_ds: No data sets are defined yet."); - return (NULL); + return NULL; } if (c_avl_get(data_sets, name, (void *)&ds) != 0) { DEBUG("No such dataset registered: %s", name); - return (NULL); + return NULL; } - return (ds); + return ds; } /* data_set_t *plugin_get_ds */ static int plugin_notification_meta_add(notification_t *n, const char *name, @@ -2331,13 +2316,13 @@ static int plugin_notification_meta_add(notification_t *n, const char *name, if ((n == NULL) || (name == NULL) || (value == NULL)) { ERROR("plugin_notification_meta_add: A pointer is NULL!"); - return (-1); + return -1; } meta = calloc(1, sizeof(*meta)); if (meta == NULL) { ERROR("plugin_notification_meta_add: calloc failed."); - return (-1); + return -1; } sstrncpy(meta->name, name, sizeof(meta->name)); @@ -2349,7 +2334,7 @@ static int plugin_notification_meta_add(notification_t *n, const char *name, if (meta->nm_value.nm_string == NULL) { ERROR("plugin_notification_meta_add: strdup failed."); sfree(meta); - return (-1); + return -1; } break; } @@ -2372,7 +2357,7 @@ static int plugin_notification_meta_add(notification_t *n, const char *name, default: { ERROR("plugin_notification_meta_add: Unknown type: %i", type); sfree(meta); - return (-1); + return -1; } } /* switch (type) */ @@ -2386,33 +2371,33 @@ static int plugin_notification_meta_add(notification_t *n, const char *name, else tail->next = meta; - return (0); + return 0; } /* int plugin_notification_meta_add */ int plugin_notification_meta_add_string(notification_t *n, const char *name, const char *value) { - return (plugin_notification_meta_add(n, name, NM_TYPE_STRING, value)); + return plugin_notification_meta_add(n, name, NM_TYPE_STRING, value); } int plugin_notification_meta_add_signed_int(notification_t *n, const char *name, int64_t value) { - return (plugin_notification_meta_add(n, name, NM_TYPE_SIGNED_INT, &value)); + return plugin_notification_meta_add(n, name, NM_TYPE_SIGNED_INT, &value); } int plugin_notification_meta_add_unsigned_int(notification_t *n, const char *name, uint64_t value) { - return (plugin_notification_meta_add(n, name, NM_TYPE_UNSIGNED_INT, &value)); + return plugin_notification_meta_add(n, name, NM_TYPE_UNSIGNED_INT, &value); } int plugin_notification_meta_add_double(notification_t *n, const char *name, double value) { - return (plugin_notification_meta_add(n, name, NM_TYPE_DOUBLE, &value)); + return plugin_notification_meta_add(n, name, NM_TYPE_DOUBLE, &value); } int plugin_notification_meta_add_boolean(notification_t *n, const char *name, _Bool value) { - return (plugin_notification_meta_add(n, name, NM_TYPE_BOOLEAN, &value)); + return plugin_notification_meta_add(n, name, NM_TYPE_BOOLEAN, &value); } int plugin_notification_meta_copy(notification_t *dst, @@ -2440,7 +2425,7 @@ int plugin_notification_meta_copy(notification_t *dst, meta->nm_value.nm_boolean); } - return (0); + return 0; } /* int plugin_notification_meta_copy */ int plugin_notification_meta_free(notification_meta_t *n) { @@ -2449,7 +2434,7 @@ int plugin_notification_meta_free(notification_meta_t *n) { if (n == NULL) { ERROR("plugin_notification_meta_free: n == NULL!"); - return (-1); + return -1; } this = n; @@ -2469,7 +2454,7 @@ int plugin_notification_meta_free(notification_meta_t *n) { this = next; } - return (0); + return 0; } /* int plugin_notification_meta_free */ static void plugin_ctx_destructor(void *ctx) { @@ -2493,7 +2478,7 @@ static plugin_ctx_t *plugin_ctx_create(void) { assert(plugin_ctx_key_initialized); pthread_setspecific(plugin_ctx_key, ctx); DEBUG("Created new plugin context."); - return (ctx); + return ctx; } /* int plugin_ctx_create */ void plugin_init_ctx(void) { @@ -2514,7 +2499,7 @@ plugin_ctx_t plugin_get_ctx(void) { return ctx_init; } - return (*ctx); + return *ctx; } /* plugin_ctx_t plugin_get_ctx */ plugin_ctx_t plugin_set_ctx(plugin_ctx_t ctx) { @@ -2534,7 +2519,7 @@ plugin_ctx_t plugin_set_ctx(plugin_ctx_t ctx) { old = *c; *c = ctx; - return (old); + return old; } /* void plugin_set_ctx */ cdtime_t plugin_get_interval(void) { @@ -2590,5 +2575,3 @@ int plugin_thread_create(pthread_t *thread, const pthread_attr_t *attr, return 0; } /* int plugin_thread_create */ - -/* vim: set sw=8 ts=8 noet fdm=marker : */ diff --git a/src/daemon/plugin.h b/src/daemon/plugin.h index f6448a58..4f877e0e 100644 --- a/src/daemon/plugin.h +++ b/src/daemon/plugin.h @@ -36,8 +36,6 @@ #include -#define PLUGIN_FLAGS_GLOBAL 0x0001 - #ifndef DATA_MAX_NAME_LEN #define DATA_MAX_NAME_LEN 128 #endif @@ -226,7 +224,7 @@ void plugin_set_dir(const char *dir); * * ARGUMENTS * `name' Name of the plugin to load. - * `flags' Hints on how to handle this plugin. + * `global' Make this plugins symbols available for other shared libraries. * * RETURN VALUE * Returns zero upon success, a value greater than zero if no plugin was found @@ -236,7 +234,7 @@ void plugin_set_dir(const char *dir); * Re-loading an already loaded module is detected and zero is returned in * this case. */ -int plugin_load(const char *name, uint32_t flags); +int plugin_load(const char *name, _Bool global); int plugin_init_all(void); void plugin_read_all(void); diff --git a/src/daemon/plugin_mock.c b/src/daemon/plugin_mock.c index ddfc7890..ca985398 100644 --- a/src/daemon/plugin_mock.c +++ b/src/daemon/plugin_mock.c @@ -32,6 +32,17 @@ kstat_ctl_t *kc = NULL; char hostname_g[] = "example.com"; +void plugin_set_dir(const char *dir) { /* nop */ +} + +int plugin_load(const char *name, _Bool global) { return ENOTSUP; } + +int plugin_register_config(const char *name, + int (*callback)(const char *key, const char *val), + const char **keys, int keys_num) { + return ENOTSUP; +} + int plugin_register_complex_config(const char *type, int (*callback)(oconfig_item_t *)) { return ENOTSUP; @@ -45,10 +56,19 @@ int plugin_register_read(const char *name, int (*callback)(void)) { return ENOTSUP; } +int plugin_register_complex_read(const char *group, const char *name, + int (*callback)(user_data_t *), + cdtime_t interval, + user_data_t const *user_data) { + return ENOTSUP; +} + int plugin_register_shutdown(const char *name, int (*callback)(void)) { return ENOTSUP; } +int plugin_register_data_set(const data_set_t *ds) { return ENOTSUP; } + int plugin_dispatch_values(value_list_t const *vl) { return ENOTSUP; } int plugin_flush(const char *plugin, cdtime_t timeout, const char *identifier) { @@ -75,6 +95,25 @@ void plugin_log(int level, char const *format, ...) { printf("plugin_log (%i, \"%s\");\n", level, buffer); } -cdtime_t plugin_get_interval(void) { return TIME_T_TO_CDTIME_T(10); } +void plugin_init_ctx(void) { /* nop */ +} + +plugin_ctx_t mock_context = { + .interval = TIME_T_TO_CDTIME_T_STATIC(10), +}; + +plugin_ctx_t plugin_get_ctx(void) { return mock_context; } + +plugin_ctx_t plugin_set_ctx(plugin_ctx_t ctx) { + plugin_ctx_t prev = mock_context; + mock_context = ctx; + return prev; +} + +cdtime_t plugin_get_interval(void) { return mock_context.interval; } -/* vim: set sw=2 sts=2 et : */ +/* TODO(octo): this function is actually from filter_chain.h, but in order not + * to tumble down that rabbit hole, we're declaring it here. A better solution + * would be to hard-code the top-level config keys in daemon/collectd.c to avoid + * having these references in daemon/configfile.c. */ +int fc_configure(const oconfig_item_t *ci) { return ENOTSUP; } diff --git a/src/daemon/types_list.c b/src/daemon/types_list.c index b1a7203c..89a08dd7 100644 --- a/src/daemon/types_list.c +++ b/src/daemon/types_list.c @@ -40,7 +40,7 @@ static int parse_ds(data_source_t *dsrc, char *buf, size_t buf_len) { if (buf_len < 11) { ERROR("parse_ds: (buf_len = %zu) < 11", buf_len); - return (-1); + return -1; } if (buf[buf_len - 1] == ',') { @@ -61,7 +61,7 @@ static int parse_ds(data_source_t *dsrc, char *buf, size_t buf_len) { if (fields_num != 4) { ERROR("parse_ds: (fields_num = %i) != 4", fields_num); - return (-1); + return -1; } sstrncpy(dsrc->name, fields[0], sizeof(dsrc->name)); @@ -77,7 +77,7 @@ static int parse_ds(data_source_t *dsrc, char *buf, size_t buf_len) { else { ERROR("(fields[1] = %s) != (GAUGE || COUNTER || DERIVE || ABSOLUTE)", fields[1]); - return (-1); + return -1; } if (strcasecmp(fields[2], "U") == 0) @@ -90,7 +90,7 @@ static int parse_ds(data_source_t *dsrc, char *buf, size_t buf_len) { else dsrc->max = atof(fields[3]); - return (0); + return 0; } /* int parse_ds */ static void parse_line(char *buf) { @@ -170,7 +170,7 @@ int read_types_list(const char *file) { FILE *fh; if (file == NULL) - return (-1); + return -1; fh = fopen(file, "r"); if (fh == NULL) { @@ -179,7 +179,7 @@ int read_types_list(const char *file) { sstrerror(errno, errbuf, sizeof(errbuf))); ERROR("Failed to open types database `%s': %s", file, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } parse_file(fh); @@ -189,9 +189,5 @@ int read_types_list(const char *file) { DEBUG("Done parsing `%s'", file); - return (0); + return 0; } /* int read_types_list */ - -/* - * vim: shiftwidth=2:softtabstop=2:tabstop=8 - */ diff --git a/src/daemon/utils_avltree.c b/src/daemon/utils_avltree.c index 92259ae1..87568fb2 100644 --- a/src/daemon/utils_avltree.c +++ b/src/daemon/utils_avltree.c @@ -94,12 +94,12 @@ static int calc_height(c_avl_node_t *n) { int height_right; if (n == NULL) - return (0); + return 0; height_left = (n->left == NULL) ? 0 : n->left->height; height_right = (n->right == NULL) ? 0 : n->right->height; - return (((height_left > height_right) ? height_left : height_right) + 1); + return ((height_left > height_right) ? height_left : height_right) + 1; } /* int calc_height */ static c_avl_node_t *search(c_avl_tree_t *t, const void *key) { @@ -110,14 +110,14 @@ static c_avl_node_t *search(c_avl_tree_t *t, const void *key) { while (n != NULL) { cmp = t->compare(key, n->key); if (cmp == 0) - return (n); + return n; else if (cmp < 0) n = n->left; else n = n->right; } - return (NULL); + return NULL; } /* (x) (y) @@ -159,7 +159,7 @@ static c_avl_node_t *rotate_right(c_avl_tree_t *t, c_avl_node_t *x) { x->height = calc_height(x); y->height = calc_height(y); - return (y); + return y; } /* void rotate_right */ /* @@ -202,17 +202,17 @@ static c_avl_node_t *rotate_left(c_avl_tree_t *t, c_avl_node_t *x) { x->height = calc_height(x); y->height = calc_height(y); - return (y); + return y; } /* void rotate_left */ static c_avl_node_t *rotate_left_right(c_avl_tree_t *t, c_avl_node_t *x) { rotate_left(t, x->left); - return (rotate_right(t, x)); + return rotate_right(t, x); } /* void rotate_left_right */ static c_avl_node_t *rotate_right_left(c_avl_tree_t *t, c_avl_node_t *x) { rotate_right(t, x->right); - return (rotate_left(t, x)); + return rotate_left(t, x); } /* void rotate_right_left */ static void rebalance(c_avl_tree_t *t, c_avl_node_t *n) { @@ -256,7 +256,7 @@ static c_avl_node_t *c_avl_node_next(c_avl_node_t *n) { c_avl_node_t *r; /* return node */ if (n == NULL) { - return (NULL); + return NULL; } /* If we can't descent any further, we have to backtrack to the first @@ -274,10 +274,10 @@ static c_avl_node_t *c_avl_node_next(c_avl_node_t *n) { * r->left != n => r->right = n => r->parent == NULL */ if ((r == NULL) || (r->left != n)) { assert((r == NULL) || (r->parent == NULL)); - return (NULL); + return NULL; } else { assert(r->left == n); - return (r); + return r; } } else { r = n->right; @@ -285,14 +285,14 @@ static c_avl_node_t *c_avl_node_next(c_avl_node_t *n) { r = r->left; } - return (r); + return r; } /* c_avl_node_t *c_avl_node_next */ static c_avl_node_t *c_avl_node_prev(c_avl_node_t *n) { c_avl_node_t *r; /* return node */ if (n == NULL) { - return (NULL); + return NULL; } /* If we can't descent any further, we have to backtrack to the first @@ -310,10 +310,10 @@ static c_avl_node_t *c_avl_node_prev(c_avl_node_t *n) { * r->right != n => r->left = n => r->parent == NULL */ if ((r == NULL) || (r->right != n)) { assert((r == NULL) || (r->parent == NULL)); - return (NULL); + return NULL; } else { assert(r->right == n); - return (r); + return r; } } else { r = n->left; @@ -321,7 +321,7 @@ static c_avl_node_t *c_avl_node_prev(c_avl_node_t *n) { r = r->right; } - return (r); + return r; } /* c_avl_node_t *c_avl_node_prev */ static int _remove(c_avl_tree_t *t, c_avl_node_t *n) { @@ -409,7 +409,7 @@ static int _remove(c_avl_tree_t *t, c_avl_node_t *n) { assert(0); } - return (0); + return 0; } /* void *_remove */ /* @@ -419,16 +419,16 @@ c_avl_tree_t *c_avl_create(int (*compare)(const void *, const void *)) { c_avl_tree_t *t; if (compare == NULL) - return (NULL); + return NULL; if ((t = malloc(sizeof(*t))) == NULL) - return (NULL); + return NULL; t->root = NULL; t->compare = compare; t->size = 0; - return (t); + return t; } void c_avl_destroy(c_avl_tree_t *t) { @@ -444,7 +444,7 @@ int c_avl_insert(c_avl_tree_t *t, void *key, void *value) { int cmp; if ((new = malloc(sizeof(*new))) == NULL) - return (-1); + return -1; new->key = key; new->value = value; @@ -456,7 +456,7 @@ int c_avl_insert(c_avl_tree_t *t, void *key, void *value) { new->parent = NULL; t->root = new; t->size = 1; - return (0); + return 0; } nptr = t->root; @@ -464,7 +464,7 @@ int c_avl_insert(c_avl_tree_t *t, void *key, void *value) { cmp = t->compare(nptr->key, new->key); if (cmp == 0) { free_node(new); - return (1); + return 1; } else if (cmp < 0) { /* nptr < new */ if (nptr->right == NULL) { @@ -491,7 +491,7 @@ int c_avl_insert(c_avl_tree_t *t, void *key, void *value) { verify_tree(t->root); ++t->size; - return (0); + return 0; } /* int c_avl_insert */ int c_avl_remove(c_avl_tree_t *t, const void *key, void **rkey, void **rvalue) { @@ -502,7 +502,7 @@ int c_avl_remove(c_avl_tree_t *t, const void *key, void **rkey, void **rvalue) { n = search(t, key); if (n == NULL) - return (-1); + return -1; if (rkey != NULL) *rkey = n->key; @@ -512,7 +512,7 @@ int c_avl_remove(c_avl_tree_t *t, const void *key, void **rkey, void **rvalue) { status = _remove(t, n); verify_tree(t->root); --t->size; - return (status); + return status; } /* void *c_avl_remove */ int c_avl_get(c_avl_tree_t *t, const void *key, void **value) { @@ -522,22 +522,24 @@ int c_avl_get(c_avl_tree_t *t, const void *key, void **value) { n = search(t, key); if (n == NULL) - return (-1); + return -1; if (value != NULL) *value = n->value; - return (0); + return 0; } int c_avl_pick(c_avl_tree_t *t, void **key, void **value) { c_avl_node_t *n; c_avl_node_t *p; + assert(t != NULL); + if ((key == NULL) || (value == NULL)) - return (-1); + return -1; if (t->root == NULL) - return (-1); + return -1; n = t->root; while ((n->left != NULL) || (n->right != NULL)) { @@ -570,28 +572,28 @@ int c_avl_pick(c_avl_tree_t *t, void **key, void **value) { --t->size; rebalance(t, p); - return (0); + return 0; } /* int c_avl_pick */ c_avl_iterator_t *c_avl_get_iterator(c_avl_tree_t *t) { c_avl_iterator_t *iter; if (t == NULL) - return (NULL); + return NULL; iter = calloc(1, sizeof(*iter)); if (iter == NULL) - return (NULL); + return NULL; iter->tree = t; - return (iter); + return iter; } /* c_avl_iterator_t *c_avl_get_iterator */ int c_avl_iterator_next(c_avl_iterator_t *iter, void **key, void **value) { c_avl_node_t *n; if ((iter == NULL) || (key == NULL) || (value == NULL)) - return (-1); + return -1; if (iter->node == NULL) { for (n = iter->tree->root; n != NULL; n = n->left) @@ -603,20 +605,20 @@ int c_avl_iterator_next(c_avl_iterator_t *iter, void **key, void **value) { } if (n == NULL) - return (-1); + return -1; iter->node = n; *key = n->key; *value = n->value; - return (0); + return 0; } /* int c_avl_iterator_next */ int c_avl_iterator_prev(c_avl_iterator_t *iter, void **key, void **value) { c_avl_node_t *n; if ((iter == NULL) || (key == NULL) || (value == NULL)) - return (-1); + return -1; if (iter->node == NULL) { for (n = iter->tree->root; n != NULL; n = n->left) @@ -628,19 +630,19 @@ int c_avl_iterator_prev(c_avl_iterator_t *iter, void **key, void **value) { } if (n == NULL) - return (-1); + return -1; iter->node = n; *key = n->key; *value = n->value; - return (0); + return 0; } /* int c_avl_iterator_prev */ void c_avl_iterator_destroy(c_avl_iterator_t *iter) { free(iter); } int c_avl_size(c_avl_tree_t *t) { if (t == NULL) - return (0); - return (t->size); + return 0; + return t->size; } diff --git a/src/daemon/utils_avltree_test.c b/src/daemon/utils_avltree_test.c index 0a84f6f9..bb30f9d6 100644 --- a/src/daemon/utils_avltree_test.c +++ b/src/daemon/utils_avltree_test.c @@ -41,7 +41,7 @@ static int compare_callback(void const *v0, void const *v1) { assert(v1 != NULL); compare_total_count++; - return (strcmp(v0, v1)); + return strcmp(v0, v1); } DEF_TEST(success) { @@ -127,7 +127,7 @@ DEF_TEST(success) { c_avl_destroy(t); - return (0); + return 0; } int main(void) { @@ -135,5 +135,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/utils_cache.c b/src/daemon/utils_cache.c index aa8ce9ef..7d6e8fd6 100644 --- a/src/daemon/utils_cache.c +++ b/src/daemon/utils_cache.c @@ -83,7 +83,7 @@ static int cache_compare(const cache_entry_t *a, const cache_entry_t *b) { #if COLLECT_DEBUG assert((a != NULL) && (b != NULL)); #endif - return (strcmp(a->name, b->name)); + return strcmp(a->name, b->name); } /* int cache_compare */ static cache_entry_t *cache_alloc(size_t values_num) { @@ -92,7 +92,7 @@ static cache_entry_t *cache_alloc(size_t values_num) { ce = calloc(1, sizeof(*ce)); if (ce == NULL) { ERROR("utils_cache: cache_alloc: calloc failed."); - return (NULL); + return NULL; } ce->values_num = values_num; @@ -103,14 +103,14 @@ static cache_entry_t *cache_alloc(size_t values_num) { sfree(ce->values_raw); sfree(ce); ERROR("utils_cache: cache_alloc: calloc failed."); - return (NULL); + return NULL; } ce->history = NULL; ce->history_length = 0; ce->meta = NULL; - return (ce); + return ce; } /* cache_entry_t *cache_alloc */ static void cache_free(cache_entry_t *ce) { @@ -148,14 +148,14 @@ static int uc_insert(const data_set_t *ds, const value_list_t *vl, key_copy = strdup(key); if (key_copy == NULL) { ERROR("uc_insert: strdup failed."); - return (-1); + return -1; } ce = cache_alloc(ds->ds_num); if (ce == NULL) { sfree(key_copy); ERROR("uc_insert: cache_alloc (%zu) failed.", ds->ds_num); - return (-1); + return -1; } sstrncpy(ce->name, key, sizeof(ce->name)); @@ -191,7 +191,7 @@ static int uc_insert(const data_set_t *ds, const value_list_t *vl, ds->ds[i].type); sfree(key_copy); cache_free(ce); - return (-1); + return -1; } /* switch (ds->ds[i].type) */ } /* for (i) */ @@ -206,11 +206,11 @@ static int uc_insert(const data_set_t *ds, const value_list_t *vl, if (c_avl_insert(cache_tree, key_copy, ce) != 0) { sfree(key_copy); ERROR("uc_insert: c_avl_insert failed."); - return (-1); + return -1; } DEBUG("uc_insert: Added %s to the cache.", key); - return (0); + return 0; } /* int uc_insert */ int uc_init(void) { @@ -218,7 +218,7 @@ int uc_init(void) { cache_tree = c_avl_create((int (*)(const void *, const void *))cache_compare); - return (0); + return 0; } /* int uc_init */ int uc_check_timeout(void) { @@ -265,7 +265,7 @@ int uc_check_timeout(void) { if (expired_num == 0) { sfree(expired); - return (0); + return 0; } /* Call the "missing" callback for each value. Do this before removing the @@ -309,7 +309,7 @@ int uc_check_timeout(void) { pthread_mutex_unlock(&cache_lock); sfree(expired); - return (0); + return 0; } /* int uc_check_timeout */ int uc_update(const data_set_t *ds, const value_list_t *vl) { @@ -319,7 +319,7 @@ int uc_update(const data_set_t *ds, const value_list_t *vl) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_update: FORMAT_VL failed."); - return (-1); + return -1; } pthread_mutex_lock(&cache_lock); @@ -329,7 +329,7 @@ int uc_update(const data_set_t *ds, const value_list_t *vl) { { status = uc_insert(ds, vl, name); pthread_mutex_unlock(&cache_lock); - return (status); + return status; } assert(ce != NULL); @@ -341,7 +341,7 @@ int uc_update(const data_set_t *ds, const value_list_t *vl) { "last cache update = %.3f;", name, CDTIME_T_TO_DOUBLE(vl->time), CDTIME_T_TO_DOUBLE(ce->last_time)); - return (-1); + return -1; } for (size_t i = 0; i < ds->ds_num; i++) { @@ -378,7 +378,7 @@ int uc_update(const data_set_t *ds, const value_list_t *vl) { pthread_mutex_unlock(&cache_lock); ERROR("uc_update: Don't know how to handle data source type %i.", ds->ds[i].type); - return (-1); + return -1; } /* switch (ds->ds[i].type) */ DEBUG("uc_update: %s: ds[%zu] = %lf", name, i, ce->values_gauge[i]); @@ -405,7 +405,7 @@ int uc_update(const data_set_t *ds, const value_list_t *vl) { pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } /* int uc_update */ int uc_get_rate_by_name(const char *name, gauge_t **ret_values, @@ -448,7 +448,7 @@ int uc_get_rate_by_name(const char *name, gauge_t **ret_values, *ret_values_num = ret_num; } - return (status); + return status; } /* gauge_t *uc_get_rate_by_name */ gauge_t *uc_get_rate(const data_set_t *ds, const value_list_t *vl) { @@ -459,12 +459,12 @@ gauge_t *uc_get_rate(const data_set_t *ds, const value_list_t *vl) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("utils_cache: uc_get_rate: FORMAT_VL failed."); - return (NULL); + return NULL; } status = uc_get_rate_by_name(name, &ret, &ret_num); if (status != 0) - return (NULL); + return NULL; /* This is important - the caller has no other way of knowing how many * values are returned. */ @@ -473,11 +473,80 @@ gauge_t *uc_get_rate(const data_set_t *ds, const value_list_t *vl) { "but uc_get_rate_by_name returned %zu.", ds->type, ds->ds_num, ret_num); sfree(ret); + return NULL; + } + + return ret; +} /* gauge_t *uc_get_rate */ + +int uc_get_value_by_name(const char *name, value_t **ret_values, + size_t *ret_values_num) { + value_t *ret = NULL; + size_t ret_num = 0; + cache_entry_t *ce = NULL; + int status = 0; + + pthread_mutex_lock(&cache_lock); + + if (c_avl_get(cache_tree, name, (void *) &ce) == 0) { + assert(ce != NULL); + + /* remove missing values from getval */ + if (ce->state == STATE_MISSING) { + status = -1; + } else { + ret_num = ce->values_num; + ret = malloc(ret_num * sizeof(*ret)); + if (ret == NULL) { + ERROR("utils_cache: uc_get_value_by_name: malloc failed."); + status = -1; + } else { + memcpy(ret, ce->values_raw, ret_num * sizeof(value_t)); + } + } + } + else { + DEBUG("utils_cache: uc_get_value_by_name: No such value: %s", name); + status = -1; + } + + pthread_mutex_unlock(&cache_lock); + + if (status == 0) { + *ret_values = ret; + *ret_values_num = ret_num; + } + + return (status); +} /* int uc_get_value_by_name */ + +value_t *uc_get_value(const data_set_t *ds, const value_list_t *vl) { + char name[6 * DATA_MAX_NAME_LEN]; + value_t *ret = NULL; + size_t ret_num = 0; + int status; + + if (FORMAT_VL(name, sizeof(name), vl) != 0) { + ERROR("utils_cache: uc_get_value: FORMAT_VL failed."); + return (NULL); + } + + status = uc_get_value_by_name(name, &ret, &ret_num); + if (status != 0) + return (NULL); + + /* This is important - the caller has no other way of knowing how many + * values are returned. */ + if (ret_num != (size_t) ds->ds_num) { + ERROR("utils_cache: uc_get_value: ds[%s] has %zu values, " + "but uc_get_value_by_name returned %zu.", ds->type, ds->ds_num, + ret_num); + sfree(ret); return (NULL); } return (ret); -} /* gauge_t *uc_get_rate */ +} /* value_t *uc_get_value */ size_t uc_get_size(void) { size_t size_arrays = 0; @@ -486,7 +555,7 @@ size_t uc_get_size(void) { size_arrays = (size_t)c_avl_size(cache_tree); pthread_mutex_unlock(&cache_lock); - return (size_arrays); + return size_arrays; } int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { @@ -502,7 +571,7 @@ int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { int status = 0; if ((ret_names == NULL) || (ret_number == NULL)) - return (-1); + return -1; pthread_mutex_lock(&cache_lock); @@ -511,7 +580,7 @@ int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { /* Handle the "no values" case here, to avoid the error message when * calloc() returns NULL. */ pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } names = calloc(size_arrays, sizeof(*names)); @@ -521,7 +590,7 @@ int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { sfree(names); sfree(times); pthread_mutex_unlock(&cache_lock); - return (ENOMEM); + return ENOMEM; } iter = c_avl_get_iterator(cache_tree); @@ -556,7 +625,7 @@ int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { sfree(names); sfree(times); - return (-1); + return -1; } *ret_names = names; @@ -566,7 +635,7 @@ int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { sfree(times); *ret_number = number; - return (0); + return 0; } /* int uc_get_names */ int uc_get_state(const data_set_t *ds, const value_list_t *vl) { @@ -576,7 +645,7 @@ int uc_get_state(const data_set_t *ds, const value_list_t *vl) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_get_state: FORMAT_VL failed."); - return (STATE_ERROR); + return STATE_ERROR; } pthread_mutex_lock(&cache_lock); @@ -588,7 +657,7 @@ int uc_get_state(const data_set_t *ds, const value_list_t *vl) { pthread_mutex_unlock(&cache_lock); - return (ret); + return ret; } /* int uc_get_state */ int uc_set_state(const data_set_t *ds, const value_list_t *vl, int state) { @@ -598,7 +667,7 @@ int uc_set_state(const data_set_t *ds, const value_list_t *vl, int state) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_set_state: FORMAT_VL failed."); - return (STATE_ERROR); + return STATE_ERROR; } pthread_mutex_lock(&cache_lock); @@ -611,7 +680,7 @@ int uc_set_state(const data_set_t *ds, const value_list_t *vl, int state) { pthread_mutex_unlock(&cache_lock); - return (ret); + return ret; } /* int uc_set_state */ int uc_get_history_by_name(const char *name, gauge_t *ret_history, @@ -624,12 +693,12 @@ int uc_get_history_by_name(const char *name, gauge_t *ret_history, status = c_avl_get(cache_tree, name, (void *)&ce); if (status != 0) { pthread_mutex_unlock(&cache_lock); - return (-ENOENT); + return -ENOENT; } if (((size_t)ce->values_num) != num_ds) { pthread_mutex_unlock(&cache_lock); - return (-EINVAL); + return -EINVAL; } /* Check if there are enough values available. If not, increase the buffer @@ -641,7 +710,7 @@ int uc_get_history_by_name(const char *name, gauge_t *ret_history, realloc(ce->history, sizeof(*ce->history) * num_steps * ce->values_num); if (tmp == NULL) { pthread_mutex_unlock(&cache_lock); - return (-ENOMEM); + return -ENOMEM; } for (size_t i = ce->history_length * ce->values_num; @@ -671,7 +740,7 @@ int uc_get_history_by_name(const char *name, gauge_t *ret_history, pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } /* int uc_get_history_by_name */ int uc_get_history(const data_set_t *ds, const value_list_t *vl, @@ -680,10 +749,10 @@ int uc_get_history(const data_set_t *ds, const value_list_t *vl, if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("utils_cache: uc_get_history: FORMAT_VL failed."); - return (-1); + return -1; } - return (uc_get_history_by_name(name, ret_history, num_steps, num_ds)); + return uc_get_history_by_name(name, ret_history, num_steps, num_ds); } /* int uc_get_history */ int uc_get_hits(const data_set_t *ds, const value_list_t *vl) { @@ -693,7 +762,7 @@ int uc_get_hits(const data_set_t *ds, const value_list_t *vl) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_get_hits: FORMAT_VL failed."); - return (STATE_ERROR); + return STATE_ERROR; } pthread_mutex_lock(&cache_lock); @@ -705,7 +774,7 @@ int uc_get_hits(const data_set_t *ds, const value_list_t *vl) { pthread_mutex_unlock(&cache_lock); - return (ret); + return ret; } /* int uc_get_hits */ int uc_set_hits(const data_set_t *ds, const value_list_t *vl, int hits) { @@ -715,7 +784,7 @@ int uc_set_hits(const data_set_t *ds, const value_list_t *vl, int hits) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_set_hits: FORMAT_VL failed."); - return (STATE_ERROR); + return STATE_ERROR; } pthread_mutex_lock(&cache_lock); @@ -728,7 +797,7 @@ int uc_set_hits(const data_set_t *ds, const value_list_t *vl, int hits) { pthread_mutex_unlock(&cache_lock); - return (ret); + return ret; } /* int uc_set_hits */ int uc_inc_hits(const data_set_t *ds, const value_list_t *vl, int step) { @@ -738,7 +807,7 @@ int uc_inc_hits(const data_set_t *ds, const value_list_t *vl, int step) { if (FORMAT_VL(name, sizeof(name), vl) != 0) { ERROR("uc_inc_hits: FORMAT_VL failed."); - return (STATE_ERROR); + return STATE_ERROR; } pthread_mutex_lock(&cache_lock); @@ -751,7 +820,7 @@ int uc_inc_hits(const data_set_t *ds, const value_list_t *vl, int step) { pthread_mutex_unlock(&cache_lock); - return (ret); + return ret; } /* int uc_inc_hits */ /* @@ -762,24 +831,24 @@ uc_iter_t *uc_get_iterator(void) { iter = (uc_iter_t *)calloc(1, sizeof(*iter)); if (iter == NULL) - return (NULL); + return NULL; pthread_mutex_lock(&cache_lock); iter->iter = c_avl_get_iterator(cache_tree); if (iter->iter == NULL) { free(iter); - return (NULL); + return NULL; } - return (iter); + return iter; } /* uc_iter_t *uc_get_iterator */ int uc_iterator_next(uc_iter_t *iter, char **ret_name) { int status; if (iter == NULL) - return (-1); + return -1; while ((status = c_avl_iterator_next(iter->iter, (void *)&iter->name, (void *)&iter->entry)) == 0) { @@ -791,13 +860,13 @@ int uc_iterator_next(uc_iter_t *iter, char **ret_name) { if (status != 0) { iter->name = NULL; iter->entry = NULL; - return (-1); + return -1; } if (ret_name != NULL) *ret_name = iter->name; - return (0); + return 0; } /* int uc_iterator_next */ void uc_iterator_destroy(uc_iter_t *iter) { @@ -812,36 +881,36 @@ void uc_iterator_destroy(uc_iter_t *iter) { int uc_iterator_get_time(uc_iter_t *iter, cdtime_t *ret_time) { if ((iter == NULL) || (iter->entry == NULL) || (ret_time == NULL)) - return (-1); + return -1; *ret_time = iter->entry->last_time; - return (0); + return 0; } /* int uc_iterator_get_name */ int uc_iterator_get_values(uc_iter_t *iter, value_t **ret_values, size_t *ret_num) { if ((iter == NULL) || (iter->entry == NULL) || (ret_values == NULL) || (ret_num == NULL)) - return (-1); + return -1; *ret_values = calloc(iter->entry->values_num, sizeof(*iter->entry->values_raw)); if (*ret_values == NULL) - return (-1); + return -1; for (size_t i = 0; i < iter->entry->values_num; ++i) *ret_values[i] = iter->entry->values_raw[i]; *ret_num = iter->entry->values_num; - return (0); + return 0; } /* int uc_iterator_get_values */ int uc_iterator_get_interval(uc_iter_t *iter, cdtime_t *ret_interval) { if ((iter == NULL) || (iter->entry == NULL) || (ret_interval == NULL)) - return (-1); + return -1; *ret_interval = iter->entry->interval; - return (0); + return 0; } /* int uc_iterator_get_name */ /* @@ -857,7 +926,7 @@ static meta_data_t *uc_get_meta(const value_list_t *vl) /* {{{ */ status = FORMAT_VL(name, sizeof(name), vl); if (status != 0) { ERROR("utils_cache: uc_get_meta: FORMAT_VL failed."); - return (NULL); + return NULL; } pthread_mutex_lock(&cache_lock); @@ -865,7 +934,7 @@ static meta_data_t *uc_get_meta(const value_list_t *vl) /* {{{ */ status = c_avl_get(cache_tree, name, (void *)&ce); if (status != 0) { pthread_mutex_unlock(&cache_lock); - return (NULL); + return NULL; } assert(ce != NULL); @@ -875,7 +944,7 @@ static meta_data_t *uc_get_meta(const value_list_t *vl) /* {{{ */ if (ce->meta == NULL) pthread_mutex_unlock(&cache_lock); - return (ce->meta); + return ce->meta; } /* }}} meta_data_t *uc_get_meta */ /* Sorry about this preprocessor magic, but it really makes this file much @@ -886,10 +955,10 @@ static meta_data_t *uc_get_meta(const value_list_t *vl) /* {{{ */ int status; \ meta = uc_get_meta(vl); \ if (meta == NULL) \ - return (-1); \ + return -1; \ status = wrap_function(meta, key); \ pthread_mutex_unlock(&cache_lock); \ - return (status); \ + return status; \ } int uc_meta_data_exists(const value_list_t *vl, const char *key) UC_WRAP(meta_data_exists) @@ -906,10 +975,10 @@ int uc_meta_data_exists(const value_list_t *vl, int status; \ meta = uc_get_meta(vl); \ if (meta == NULL) \ - return (-1); \ + return -1; \ status = wrap_function(meta, key, value); \ pthread_mutex_unlock(&cache_lock); \ - return (status); \ + return status; \ } int uc_meta_data_add_string(const value_list_t *vl, const char *key, const char *value) @@ -940,5 +1009,3 @@ int uc_meta_data_exists(const value_list_t *vl, const char *key, _Bool *value) UC_WRAP(meta_data_get_boolean) #undef UC_WRAP - - /* vim: set sw=2 ts=8 sts=2 tw=78 : */ diff --git a/src/daemon/utils_cache.h b/src/daemon/utils_cache.h index 2f408734..8ba7133a 100644 --- a/src/daemon/utils_cache.h +++ b/src/daemon/utils_cache.h @@ -42,6 +42,8 @@ int uc_update(const data_set_t *ds, const value_list_t *vl); int uc_get_rate_by_name(const char *name, gauge_t **ret_values, size_t *ret_values_num); gauge_t *uc_get_rate(const data_set_t *ds, const value_list_t *vl); +int uc_get_value_by_name(const char *name, value_t **ret_values, size_t *ret_values_num); +value_t *uc_get_value(const data_set_t *ds, const value_list_t *vl); size_t uc_get_size(void); int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number); @@ -133,5 +135,4 @@ int uc_meta_data_get_double(const value_list_t *vl, const char *key, int uc_meta_data_get_boolean(const value_list_t *vl, const char *key, _Bool *value); -/* vim: set shiftwidth=2 softtabstop=2 tabstop=8 : */ #endif /* !UTILS_CACHE_H */ diff --git a/src/daemon/utils_cache_mock.c b/src/daemon/utils_cache_mock.c index 0f0077df..5389d126 100644 --- a/src/daemon/utils_cache_mock.c +++ b/src/daemon/utils_cache_mock.c @@ -30,14 +30,14 @@ gauge_t *uc_get_rate(__attribute__((unused)) data_set_t const *ds, __attribute__((unused)) value_list_t const *vl) { errno = ENOTSUP; - return (NULL); + return NULL; } int uc_get_rate_by_name(const char *name, gauge_t **ret_values, size_t *ret_values_num) { - return (ENOTSUP); + return ENOTSUP; } int uc_get_names(char ***ret_names, cdtime_t **ret_times, size_t *ret_number) { - return (ENOTSUP); + return ENOTSUP; } diff --git a/src/daemon/utils_complain.c b/src/daemon/utils_complain.c index fb452431..d2162ba7 100644 --- a/src/daemon/utils_complain.c +++ b/src/daemon/utils_complain.c @@ -97,5 +97,3 @@ void c_do_release(int level, c_complain_t *c, const char *format, ...) { plugin_log(level, "%s", message); } /* c_release */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/daemon/utils_complain.h b/src/daemon/utils_complain.h index fbeea90f..46d3a198 100644 --- a/src/daemon/utils_complain.h +++ b/src/daemon/utils_complain.h @@ -113,5 +113,3 @@ c_do_release(int level, c_complain_t *c, const char *format, ...); } while (0) #endif /* UTILS_COMPLAIN_H */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/daemon/utils_heap.c b/src/daemon/utils_heap.c index 8dd501da..d36d410b 100644 --- a/src/daemon/utils_heap.c +++ b/src/daemon/utils_heap.c @@ -99,11 +99,11 @@ c_heap_t *c_heap_create(int (*compare)(const void *, const void *)) { c_heap_t *h; if (compare == NULL) - return (NULL); + return NULL; h = calloc(1, sizeof(*h)); if (h == NULL) - return (NULL); + return NULL; pthread_mutex_init(&h->lock, /* attr = */ NULL); h->compare = compare; @@ -112,7 +112,7 @@ c_heap_t *c_heap_create(int (*compare)(const void *, const void *)) { h->list_len = 0; h->list_size = 0; - return (h); + return h; } /* c_heap_t *c_heap_create */ void c_heap_destroy(c_heap_t *h) { @@ -133,7 +133,7 @@ int c_heap_insert(c_heap_t *h, void *ptr) { size_t index; if ((h == NULL) || (ptr == NULL)) - return (-EINVAL); + return -EINVAL; pthread_mutex_lock(&h->lock); @@ -144,7 +144,7 @@ int c_heap_insert(c_heap_t *h, void *ptr) { tmp = realloc(h->list, (h->list_size + 16) * sizeof(*h->list)); if (tmp == NULL) { pthread_mutex_unlock(&h->lock); - return (-ENOMEM); + return -ENOMEM; } h->list = tmp; @@ -160,20 +160,20 @@ int c_heap_insert(c_heap_t *h, void *ptr) { reheap(h, /* parent of this node = */ (index - 1) / 2, DIR_UP); pthread_mutex_unlock(&h->lock); - return (0); + return 0; } /* int c_heap_insert */ void *c_heap_get_root(c_heap_t *h) { void *ret = NULL; if (h == NULL) - return (NULL); + return NULL; pthread_mutex_lock(&h->lock); if (h->list_len == 0) { pthread_mutex_unlock(&h->lock); - return (NULL); + return NULL; } else if (h->list_len == 1) { ret = h->list[0]; h->list[0] = NULL; @@ -201,7 +201,5 @@ void *c_heap_get_root(c_heap_t *h) { pthread_mutex_unlock(&h->lock); - return (ret); + return ret; } /* void *c_heap_get_root */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/daemon/utils_heap.h b/src/daemon/utils_heap.h index 2f77cc45..d2d70cdc 100644 --- a/src/daemon/utils_heap.h +++ b/src/daemon/utils_heap.h @@ -97,4 +97,3 @@ int c_heap_insert(c_heap_t *h, void *ptr); void *c_heap_get_root(c_heap_t *h); #endif /* UTILS_HEAP_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/utils_heap_test.c b/src/daemon/utils_heap_test.c index 8443b605..827c090f 100644 --- a/src/daemon/utils_heap_test.c +++ b/src/daemon/utils_heap_test.c @@ -68,7 +68,7 @@ DEF_TEST(simple) { } c_heap_destroy(h); - return (0); + return 0; } int main(void) { @@ -76,5 +76,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/utils_ignorelist.c b/src/daemon/utils_ignorelist.c deleted file mode 100644 index 9cf6aa1e..00000000 --- a/src/daemon/utils_ignorelist.c +++ /dev/null @@ -1,309 +0,0 @@ -/** - * collectd - src/utils_ignorelist.c - * Copyright (C) 2006 Lubos Stanek - * Copyright (C) 2008 Florian Forster - * - * This program is free software; you can redistribute it and/ - * or modify it under the terms of the GNU General Public Li- - * cence as published by the Free Software Foundation; either - * version 2 of the Licence, or any later version. - * - * This program is distributed in the hope that it will be use- - * ful, but WITHOUT ANY WARRANTY; without even the implied war- - * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public Licence 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 - * - * Authors: - * Lubos Stanek - * Florian Forster - **/ -/** - * ignorelist handles plugin's list of configured collectable - * entries with global ignore action - **/ -/** - * Usage: - * - * Define plugin's global pointer variable of type ignorelist_t: - * ignorelist_t *myconfig_ignore; - * If you know the state of the global ignore (IgnoreSelected), - * allocate the variable with: - * myconfig_ignore = ignorelist_create (YourKnownIgnore); - * If you do not know the state of the global ignore, - * initialize the global variable and set the ignore flag later: - * myconfig_ignore = ignorelist_init (); - * Append single entries in your cf_register'ed callback function: - * ignorelist_add (myconfig_ignore, newentry); - * When you hit the IgnoreSelected config option, - * offer it to the list: - * ignorelist_ignore (myconfig_ignore, instantly_got_value_of_ignore); - * That is all for the ignorelist initialization. - * Later during read and write (plugin's registered functions) get - * the information whether this entry would be collected or not: - * if (ignorelist_match (myconfig_ignore, thisentry)) - * return; - **/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include "common.h" -#include "plugin.h" -#include "utils_ignorelist.h" - -/* - * private prototypes - */ -struct ignorelist_item_s { -#if HAVE_REGEX_H - regex_t *rmatch; /* regular expression entry identification */ -#endif - char *smatch; /* string entry identification */ - struct ignorelist_item_s *next; -}; -typedef struct ignorelist_item_s ignorelist_item_t; - -struct ignorelist_s { - int ignore; /* ignore entries */ - ignorelist_item_t *head; /* pointer to the first entry */ -}; - -/* *** *** *** ********************************************* *** *** *** */ -/* *** *** *** *** *** *** private functions *** *** *** *** *** *** */ -/* *** *** *** ********************************************* *** *** *** */ - -static inline void ignorelist_append(ignorelist_t *il, - ignorelist_item_t *item) { - assert((il != NULL) && (item != NULL)); - - item->next = il->head; - il->head = item; -} - -#if HAVE_REGEX_H -static int ignorelist_append_regex(ignorelist_t *il, const char *re_str) { - regex_t *re; - ignorelist_item_t *entry; - int status; - - re = calloc(1, sizeof(*re)); - if (re == NULL) { - ERROR("ignorelist_append_regex: calloc failed."); - return (ENOMEM); - } - - status = regcomp(re, re_str, REG_EXTENDED); - if (status != 0) { - char errbuf[1024]; - (void)regerror(status, re, errbuf, sizeof(errbuf)); - ERROR("utils_ignorelist: regcomp failed: %s", errbuf); - ERROR("ignorelist_append_regex: Compiling regular expression \"%s\" " - "failed: %s", - re_str, errbuf); - sfree(re); - return (status); - } - - entry = calloc(1, sizeof(*entry)); - if (entry == NULL) { - ERROR("ignorelist_append_regex: calloc failed."); - regfree(re); - sfree(re); - return (ENOMEM); - } - entry->rmatch = re; - - ignorelist_append(il, entry); - return (0); -} /* int ignorelist_append_regex */ -#endif - -static int ignorelist_append_string(ignorelist_t *il, const char *entry) { - ignorelist_item_t *new; - - /* create new entry */ - if ((new = calloc(1, sizeof(*new))) == NULL) { - ERROR("cannot allocate new entry"); - return (1); - } - new->smatch = sstrdup(entry); - - /* append new entry */ - ignorelist_append(il, new); - - return (0); -} /* int ignorelist_append_string(ignorelist_t *il, const char *entry) */ - -#if HAVE_REGEX_H -/* - * check list for entry regex match - * return 1 if found - */ -static int ignorelist_match_regex(ignorelist_item_t *item, const char *entry) { - assert((item != NULL) && (item->rmatch != NULL) && (entry != NULL) && - (strlen(entry) > 0)); - - /* match regex */ - if (regexec(item->rmatch, entry, 0, NULL, 0) == 0) - return (1); - - return (0); -} /* int ignorelist_match_regex (ignorelist_item_t *item, const char *entry) */ -#endif - -/* - * check list for entry string match - * return 1 if found - */ -static int ignorelist_match_string(ignorelist_item_t *item, const char *entry) { - assert((item != NULL) && (item->smatch != NULL) && (entry != NULL) && - (strlen(entry) > 0)); - - if (strcmp(entry, item->smatch) == 0) - return (1); - - return (0); -} /* int ignorelist_match_string (ignorelist_item_t *item, const char *entry) */ - -/* *** *** *** ******************************************** *** *** *** */ -/* *** *** *** *** *** *** public functions *** *** *** *** *** *** */ -/* *** *** *** ******************************************** *** *** *** */ - -/* - * create the ignorelist_t with known ignore state - * return pointer to ignorelist_t - */ -ignorelist_t *ignorelist_create(int invert) { - ignorelist_t *il; - - il = calloc(1, sizeof(*il)); - if (il == NULL) - return NULL; - - /* - * ->ignore == 0 => collect - * ->ignore == 1 => ignore - */ - il->ignore = invert ? 0 : 1; - - return (il); -} /* ignorelist_t *ignorelist_create (int ignore) */ - -/* - * free memory used by ignorelist_t - */ -void ignorelist_free(ignorelist_t *il) { - ignorelist_item_t *this; - ignorelist_item_t *next; - - if (il == NULL) - return; - - for (this = il->head; this != NULL; this = next) { - next = this->next; -#if HAVE_REGEX_H - if (this->rmatch != NULL) { - regfree(this->rmatch); - sfree(this->rmatch); - this->rmatch = NULL; - } -#endif - if (this->smatch != NULL) { - sfree(this->smatch); - this->smatch = NULL; - } - sfree(this); - } - - sfree(il); -} /* void ignorelist_destroy (ignorelist_t *il) */ - -/* - * set ignore state of the ignorelist_t - */ -void ignorelist_set_invert(ignorelist_t *il, int invert) { - if (il == NULL) { - DEBUG("ignore call with ignorelist_t == NULL"); - return; - } - - il->ignore = invert ? 0 : 1; -} /* void ignorelist_set_invert (ignorelist_t *il, int ignore) */ - -/* - * append entry into ignorelist_t - * return 0 for success - */ -int ignorelist_add(ignorelist_t *il, const char *entry) { - size_t len; - - if (il == NULL) { - DEBUG("add called with ignorelist_t == NULL"); - return (1); - } - - len = strlen(entry); - - /* append nothing */ - if (len == 0) { - DEBUG("not appending: empty entry"); - return (1); - } - -#if HAVE_REGEX_H - /* regex string is enclosed in "/.../" */ - if ((len > 2) && (entry[0] == '/') && entry[len - 1] == '/') { - char *copy; - int status; - - /* skip leading slash */ - copy = strdup(entry + 1); - if (copy == NULL) - return ENOMEM; - - /* trim trailing slash */ - copy[strlen(copy) - 1] = 0; - - status = ignorelist_append_regex(il, copy); - sfree(copy); - return status; - } -#endif - - return ignorelist_append_string(il, entry); -} /* int ignorelist_add (ignorelist_t *il, const char *entry) */ - -/* - * check list for entry - * return 1 for ignored entry - */ -int ignorelist_match(ignorelist_t *il, const char *entry) { - /* if no entries, collect all */ - if ((il == NULL) || (il->head == NULL)) - return (0); - - if ((entry == NULL) || (strlen(entry) == 0)) - return (0); - - /* traverse list and check entries */ - for (ignorelist_item_t *traverse = il->head; traverse != NULL; - traverse = traverse->next) { -#if HAVE_REGEX_H - if (traverse->rmatch != NULL) { - if (ignorelist_match_regex(traverse, entry)) - return (il->ignore); - } else -#endif - { - if (ignorelist_match_string(traverse, entry)) - return (il->ignore); - } - } /* for traverse */ - - return (1 - il->ignore); -} /* int ignorelist_match (ignorelist_t *il, const char *entry) */ diff --git a/src/daemon/utils_ignorelist.h b/src/daemon/utils_ignorelist.h deleted file mode 100644 index a7fa86d5..00000000 --- a/src/daemon/utils_ignorelist.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - * collectd - src/utils_ignorelist.h - * Copyright (C) 2006 Lubos Stanek - * - * This program is free software; you can redistribute it and/ - * or modify it under the terms of the GNU General Public Li- - * cence as published by the Free Software Foundation; either - * version 2 of the Licence, or any later version. - * - * This program is distributed in the hope that it will be use- - * ful, but WITHOUT ANY WARRANTY; without even the implied war- - * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public Licence 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 - * - * Authors: - * Lubos Stanek - **/ -/** - * ignorelist handles plugin's list of configured collectable - * entries with global ignore action - **/ - -#ifndef UTILS_IGNORELIST_H -#define UTILS_IGNORELIST_H 1 - -#include "collectd.h" - -#if HAVE_REGEX_H -#include -#endif - -/* public prototypes */ - -struct ignorelist_s; -typedef struct ignorelist_s ignorelist_t; - -/* - * create the ignorelist_t with known ignore state - * return pointer to ignorelist_t - */ -ignorelist_t *ignorelist_create(int invert); - -/* - * free memory used by ignorelist_t - */ -void ignorelist_free(ignorelist_t *il); - -/* - * set ignore state of the ignorelist_t - */ -void ignorelist_set_invert(ignorelist_t *il, int invert); - -/* - * append entry to ignorelist_t - * returns zero on success, non-zero upon failure. - */ -int ignorelist_add(ignorelist_t *il, const char *entry); - -/* - * check list for entry - * return 1 for ignored entry - */ -int ignorelist_match(ignorelist_t *il, const char *entry); - -#endif /* UTILS_IGNORELIST_H */ diff --git a/src/daemon/utils_llist.c b/src/daemon/utils_llist.c index 2ed56a02..61c6051b 100644 --- a/src/daemon/utils_llist.c +++ b/src/daemon/utils_llist.c @@ -46,9 +46,9 @@ llist_t *llist_create(void) { ret = calloc(1, sizeof(*ret)); if (ret == NULL) - return (NULL); + return NULL; - return (ret); + return ret; } void llist_destroy(llist_t *l) { @@ -76,7 +76,7 @@ llentry_t *llentry_create(char *key, void *value) { e->next = NULL; } - return (e); + return e; } void llentry_destroy(llentry_t *e) { free(e); } @@ -124,16 +124,16 @@ void llist_remove(llist_t *l, llentry_t *e) { --(l->size); } -int llist_size(llist_t *l) { return (l ? l->size : 0); } +int llist_size(llist_t *l) { return l ? l->size : 0; } static int llist_strcmp(llentry_t *e, void *ud) { if ((e == NULL) || (ud == NULL)) - return (-1); - return (strcmp(e->key, (const char *)ud)); + return -1; + return strcmp(e->key, (const char *)ud); } llentry_t *llist_search(llist_t *l, const char *key) { - return (llist_search_custom(l, llist_strcmp, (void *)key)); + return llist_search_custom(l, llist_strcmp, (void *)key); } llentry_t *llist_search_custom(llist_t *l, int (*compare)(llentry_t *, void *), @@ -141,7 +141,7 @@ llentry_t *llist_search_custom(llist_t *l, int (*compare)(llentry_t *, void *), llentry_t *e; if (l == NULL) - return (NULL); + return NULL; e = l->head; while (e != NULL) { @@ -153,17 +153,17 @@ llentry_t *llist_search_custom(llist_t *l, int (*compare)(llentry_t *, void *), e = next; } - return (e); + return e; } llentry_t *llist_head(llist_t *l) { if (l == NULL) - return (NULL); - return (l->head); + return NULL; + return l->head; } llentry_t *llist_tail(llist_t *l) { if (l == NULL) - return (NULL); - return (l->tail); + return NULL; + return l->tail; } diff --git a/src/daemon/utils_random.c b/src/daemon/utils_random.c index d490986d..cf926f9c 100644 --- a/src/daemon/utils_random.c +++ b/src/daemon/utils_random.c @@ -50,7 +50,7 @@ static void cdrand_seed(void) { have_seed = 1; } -double cdrand_d() { +double cdrand_d(void) { double r; pthread_mutex_lock(&lock); @@ -58,10 +58,10 @@ double cdrand_d() { r = erand48(seed); pthread_mutex_unlock(&lock); - return (r); + return r; } -uint32_t cdrand_u() { +uint32_t cdrand_u(void) { long r; pthread_mutex_lock(&lock); @@ -81,5 +81,5 @@ long cdrand_range(long min, long max) { r = (long)(0.5 + (cdrand_d() * range)); r += min; - return (r); + return r; } diff --git a/src/daemon/utils_random.h b/src/daemon/utils_random.h index e25ae9b6..75bdc12e 100644 --- a/src/daemon/utils_random.h +++ b/src/daemon/utils_random.h @@ -29,7 +29,7 @@ * * This function is thread- and reentrant-safe. */ -double cdrand_d(); +double cdrand_d(void); /** * cdrand_u returns a random uint32_t value uniformly distributed in the range @@ -37,7 +37,7 @@ double cdrand_d(); * * This function is thread- and reentrant-safe. */ -uint32_t cdrand_u(); +uint32_t cdrand_u(void); /** * Returns a random long between min and max, inclusively. diff --git a/src/daemon/utils_subst.c b/src/daemon/utils_subst.c index 7056c5f0..a0163425 100644 --- a/src/daemon/utils_subst.c +++ b/src/daemon/utils_subst.c @@ -119,7 +119,7 @@ char *subst_string(char *buf, size_t buflen, const char *string, if ((buf == NULL) || (string == NULL) || (needle == NULL) || (replacement == NULL)) - return (NULL); + return NULL; needle_len = strlen(needle); sstrncpy(buf, string, buflen); @@ -157,7 +157,5 @@ char *subst_string(char *buf, size_t buflen, const char *string, i, string, needle, replacement); } - return (buf); + return buf; } /* char *subst_string */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/daemon/utils_subst.h b/src/daemon/utils_subst.h index 025f8d4e..a10b2589 100644 --- a/src/daemon/utils_subst.h +++ b/src/daemon/utils_subst.h @@ -100,5 +100,3 @@ char *subst_string(char *buf, size_t buflen, const char *string, const char *needle, const char *replacement); #endif /* UTILS_SUBST_H */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/daemon/utils_subst_test.c b/src/daemon/utils_subst_test.c index e335b501..00ea0eae 100644 --- a/src/daemon/utils_subst_test.c +++ b/src/daemon/utils_subst_test.c @@ -132,5 +132,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/utils_threshold.c b/src/daemon/utils_threshold.c index ad832f54..8c033411 100644 --- a/src/daemon/utils_threshold.c +++ b/src/daemon/utils_threshold.c @@ -58,9 +58,9 @@ threshold_t *threshold_get(const char *hostname, const char *plugin, name[sizeof(name) - 1] = '\0'; if (c_avl_get(threshold_tree, name, (void *)&th) == 0) - return (th); + return th; else - return (NULL); + return NULL; } /* }}} threshold_t *threshold_get */ /* @@ -76,39 +76,39 @@ threshold_t *threshold_search(const value_list_t *vl) { /* {{{ */ if ((th = threshold_get(vl->host, vl->plugin, vl->plugin_instance, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get(vl->host, vl->plugin, vl->plugin_instance, vl->type, NULL)) != NULL) - return (th); + return th; else if ((th = threshold_get(vl->host, vl->plugin, NULL, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get(vl->host, vl->plugin, NULL, vl->type, NULL)) != NULL) - return (th); + return th; else if ((th = threshold_get(vl->host, "", NULL, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get(vl->host, "", NULL, vl->type, NULL)) != NULL) - return (th); + return th; else if ((th = threshold_get("", vl->plugin, vl->plugin_instance, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get("", vl->plugin, vl->plugin_instance, vl->type, NULL)) != NULL) - return (th); + return th; else if ((th = threshold_get("", vl->plugin, NULL, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get("", vl->plugin, NULL, vl->type, NULL)) != NULL) - return (th); + return th; else if ((th = threshold_get("", "", NULL, vl->type, vl->type_instance)) != NULL) - return (th); + return th; else if ((th = threshold_get("", "", NULL, vl->type, NULL)) != NULL) - return (th); + return th; - return (NULL); + return NULL; } /* }}} threshold_t *threshold_search */ int ut_search_threshold(const value_list_t *vl, /* {{{ */ @@ -116,14 +116,14 @@ int ut_search_threshold(const value_list_t *vl, /* {{{ */ threshold_t *t; if (vl == NULL) - return (EINVAL); + return EINVAL; /* Is this lock really necessary? */ pthread_mutex_lock(&threshold_lock); t = threshold_search(vl); if (t == NULL) { pthread_mutex_unlock(&threshold_lock); - return (ENOENT); + return ENOENT; } memcpy(ret_threshold, t, sizeof(*ret_threshold)); @@ -131,5 +131,5 @@ int ut_search_threshold(const value_list_t *vl, /* {{{ */ ret_threshold->next = NULL; - return (0); + return 0; } /* }}} int ut_search_threshold */ diff --git a/src/daemon/utils_threshold.h b/src/daemon/utils_threshold.h index 585ad12a..cefc6e2c 100644 --- a/src/daemon/utils_threshold.h +++ b/src/daemon/utils_threshold.h @@ -61,5 +61,3 @@ threshold_t *threshold_search(const value_list_t *vl); int ut_search_threshold(const value_list_t *vl, threshold_t *ret_threshold); #endif /* UTILS_THRESHOLD_H */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/daemon/utils_time.c b/src/daemon/utils_time.c index 9ba2b5a1..815d9697 100644 --- a/src/daemon/utils_time.c +++ b/src/daemon/utils_time.c @@ -240,5 +240,3 @@ int rfc3339nano_local(char *buffer, size_t buffer_size, cdtime_t t) /* {{{ */ return format_rfc3339_local(buffer, buffer_size, t, 1); } /* }}} int rfc3339nano */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/daemon/utils_time.h b/src/daemon/utils_time.h index db510afe..60a6ea95 100644 --- a/src/daemon/utils_time.h +++ b/src/daemon/utils_time.h @@ -130,4 +130,3 @@ int rfc3339_local(char *buffer, size_t buffer_size, cdtime_t t); int rfc3339nano_local(char *buffer, size_t buffer_size, cdtime_t t); #endif /* UTILS_TIME_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/daemon/utils_time_test.c b/src/daemon/utils_time_test.c index c1c60a20..c0179cc0 100644 --- a/src/daemon/utils_time_test.c +++ b/src/daemon/utils_time_test.c @@ -167,5 +167,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/dbi.c b/src/dbi.c index 7cab1d54..ac307ff2 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -101,7 +101,7 @@ static const char *cdbi_strerror(dbi_conn conn, /* {{{ */ if (conn == NULL) { sstrncpy(buffer, "connection is NULL", buffer_size); - return (buffer); + return buffer; } msg = NULL; @@ -112,7 +112,7 @@ static const char *cdbi_strerror(dbi_conn conn, /* {{{ */ ssnprintf(buffer, buffer_size, "dbi_conn_error failed with status %i", status); - return (buffer); + return buffer; } /* }}} const char *cdbi_conn_error */ static int cdbi_result_get_field(dbi_result res, /* {{{ */ @@ -124,7 +124,7 @@ static int cdbi_result_get_field(dbi_result res, /* {{{ */ if (src_type == DBI_TYPE_ERROR) { ERROR("dbi plugin: cdbi_result_get: " "dbi_result_get_field_type_idx failed."); - return (-1); + return -1; } if (src_type == DBI_TYPE_INTEGER) { @@ -144,7 +144,7 @@ static int cdbi_result_get_field(dbi_result res, /* {{{ */ if (value == NULL) sstrncpy(buffer, "", buffer_size); else if (strcmp("ERROR", value) == 0) - return (-1); + return -1; else sstrncpy(buffer, value, buffer_size); } @@ -160,10 +160,10 @@ static int cdbi_result_get_field(dbi_result res, /* {{{ */ ERROR("dbi plugin: Column `%s': Don't know how to handle " "source type %hu.", field_name, src_type); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cdbi_result_get_field */ static void cdbi_database_free(cdbi_database_t *db) /* {{{ */ @@ -221,14 +221,14 @@ static int cdbi_config_add_database_driver_option(cdbi_database_t *db, /* {{{ */ (ci->values[1].type != OCONFIG_TYPE_NUMBER))) { WARNING("dbi plugin: The `DriverOption' config option " "needs exactly two arguments."); - return (-1); + return -1; } option = realloc(db->driver_options, sizeof(*option) * (db->driver_options_num + 1)); if (option == NULL) { ERROR("dbi plugin: realloc failed"); - return (-1); + return -1; } db->driver_options = option; @@ -238,7 +238,7 @@ static int cdbi_config_add_database_driver_option(cdbi_database_t *db, /* {{{ */ option->key = strdup(ci->values[0].value.string); if (option->key == NULL) { ERROR("dbi plugin: strdup failed."); - return (-1); + return -1; } if (ci->values[1].type == OCONFIG_TYPE_STRING) { @@ -246,7 +246,7 @@ static int cdbi_config_add_database_driver_option(cdbi_database_t *db, /* {{{ */ if (option->value.string == NULL) { ERROR("dbi plugin: strdup failed."); sfree(option->key); - return (-1); + return -1; } } else { assert(ci->values[1].type == OCONFIG_TYPE_NUMBER); @@ -255,7 +255,7 @@ static int cdbi_config_add_database_driver_option(cdbi_database_t *db, /* {{{ */ } db->driver_options_num++; - return (0); + return 0; } /* }}} int cdbi_config_add_database_driver_option */ static int cdbi_config_add_database(oconfig_item_t *ci) /* {{{ */ @@ -266,19 +266,19 @@ static int cdbi_config_add_database(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("dbi plugin: The `Database' block " "needs exactly one string argument."); - return (-1); + return -1; } db = calloc(1, sizeof(*db)); if (db == NULL) { ERROR("dbi plugin: calloc failed."); - return (-1); + return -1; } status = cf_util_get_string(ci, &db->name); if (status != 0) { sfree(db); - return (status); + return status; } /* Fill the `cdbi_database_t' structure.. */ @@ -371,10 +371,10 @@ static int cdbi_config_add_database(oconfig_item_t *ci) /* {{{ */ if (status != 0) { cdbi_database_free(db); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cdbi_config_add_database */ static int cdbi_config(oconfig_item_t *ci) /* {{{ */ @@ -391,7 +391,7 @@ static int cdbi_config(oconfig_item_t *ci) /* {{{ */ } } /* for (ci->children) */ - return (0); + return 0; } /* }}} int cdbi_config */ /* }}} End of configuration handling functions */ @@ -402,34 +402,34 @@ static int cdbi_init(void) /* {{{ */ int status; if (did_init != 0) - return (0); + return 0; if (queries_num == 0) { ERROR("dbi plugin: No blocks have been found. Without them, " "this plugin can't do anything useful, so we will return an error."); - return (-1); + return -1; } if (databases_num == 0) { ERROR("dbi plugin: No blocks have been found. Without them, " "this plugin can't do anything useful, so we will return an error."); - return (-1); + return -1; } status = dbi_initialize_r(/* driverdir = */ NULL, &dbi_instance); if (status < 0) { ERROR("dbi plugin: cdbi_init: dbi_initialize_r failed with status %i.", status); - return (-1); + return -1; } else if (status == 0) { ERROR("dbi plugin: `dbi_initialize_r' could not load any drivers. Please " "install at least one `DBD' or check your installation."); - return (-1); + return -1; } DEBUG("dbi plugin: cdbi_init: dbi_initialize_r reports %i driver%s.", status, (status == 1) ? "" : "s"); - return (0); + return 0; } /* }}} int cdbi_init */ static int cdbi_read_database_query(cdbi_database_t *db, /* {{{ */ @@ -619,7 +619,7 @@ static int cdbi_connect_database(cdbi_database_t *db) /* {{{ */ if (db->connection != NULL) { status = dbi_conn_ping(db->connection); if (status != 0) /* connection is alive */ - return (0); + return 0; dbi_conn_close(db->connection); db->connection = NULL; @@ -635,14 +635,14 @@ static int cdbi_connect_database(cdbi_database_t *db) /* {{{ */ driver = dbi_driver_list_r(driver, dbi_instance)) { INFO("dbi plugin: * %s", dbi_driver_get_name(driver)); } - return (-1); + return -1; } connection = dbi_conn_open(driver); if (connection == NULL) { ERROR("dbi plugin: cdbi_connect_database: dbi_conn_open (%s) failed.", db->driver); - return (-1); + return -1; } /* Set all the driver options. Because this is a very very very generic @@ -686,7 +686,7 @@ static int cdbi_connect_database(cdbi_database_t *db) /* {{{ */ } dbi_conn_close(connection); - return (-1); + return -1; } } /* for (i = 0; i < db->driver_options_num; i++) */ @@ -697,7 +697,7 @@ static int cdbi_connect_database(cdbi_database_t *db) /* {{{ */ "dbi_conn_connect failed: %s", db->name, cdbi_strerror(connection, errbuf, sizeof(errbuf))); dbi_conn_close(connection); - return (-1); + return -1; } if (db->select_db != NULL) { @@ -710,12 +710,12 @@ static int cdbi_connect_database(cdbi_database_t *db) /* {{{ */ db->name, db->select_db, cdbi_strerror(connection, errbuf, sizeof(errbuf))); dbi_conn_close(connection); - return (-1); + return -1; } } db->connection = connection; - return (0); + return 0; } /* }}} int cdbi_connect_database */ static int cdbi_read_database(user_data_t *ud) /* {{{ */ @@ -728,7 +728,7 @@ static int cdbi_read_database(user_data_t *ud) /* {{{ */ status = cdbi_connect_database(db); if (status != 0) - return (status); + return status; assert(db->connection != NULL); db_version = dbi_conn_get_engine_version(db->connection); @@ -749,10 +749,10 @@ static int cdbi_read_database(user_data_t *ud) /* {{{ */ if (success == 0) { ERROR("dbi plugin: All queries failed for database `%s'.", db->name); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cdbi_read_database */ static int cdbi_shutdown(void) /* {{{ */ @@ -771,7 +771,7 @@ static int cdbi_shutdown(void) /* {{{ */ queries = NULL; queries_num = 0; - return (0); + return 0; } /* }}} int cdbi_shutdown */ void module_register(void) /* {{{ */ @@ -780,7 +780,3 @@ void module_register(void) /* {{{ */ plugin_register_init("dbi", cdbi_init); plugin_register_shutdown("dbi", cdbi_shutdown); } /* }}} void module_register */ - -/* - * vim: shiftwidth=2 softtabstop=2 et fdm=marker - */ diff --git a/src/df.c b/src/df.c index 54166052..dd90f243 100644 --- a/src/df.c +++ b/src/df.c @@ -68,7 +68,7 @@ static int df_init(void) { if (il_fstype == NULL) il_fstype = ignorelist_create(1); - return (0); + return 0; } static int df_config(const char *key, const char *value) { @@ -76,16 +76,16 @@ static int df_config(const char *key, const char *value) { if (strcasecmp(key, "Device") == 0) { if (ignorelist_add(il_device, value)) - return (1); - return (0); + return 1; + return 0; } else if (strcasecmp(key, "MountPoint") == 0) { if (ignorelist_add(il_mountpoint, value)) - return (1); - return (0); + return 1; + return 0; } else if (strcasecmp(key, "FSType") == 0) { if (ignorelist_add(il_fstype, value)) - return (1); - return (0); + return 1; + return 0; } else if (strcasecmp(key, "IgnoreSelected") == 0) { if (IS_TRUE(value)) { ignorelist_set_invert(il_device, 0); @@ -96,36 +96,36 @@ static int df_config(const char *key, const char *value) { ignorelist_set_invert(il_mountpoint, 1); ignorelist_set_invert(il_fstype, 1); } - return (0); + return 0; } else if (strcasecmp(key, "ReportByDevice") == 0) { if (IS_TRUE(value)) by_device = 1; - return (0); + return 0; } else if (strcasecmp(key, "ReportInodes") == 0) { if (IS_TRUE(value)) report_inodes = 1; else report_inodes = 0; - return (0); + return 0; } else if (strcasecmp(key, "ValuesAbsolute") == 0) { if (IS_TRUE(value)) values_absolute = 1; else values_absolute = 0; - return (0); + return 0; } else if (strcasecmp(key, "ValuesPercentage") == 0) { if (IS_TRUE(value)) values_percentage = 1; else values_percentage = 0; - return (0); + return 0; } - return (-1); + return -1; } __attribute__((nonnull(2))) static void df_submit_one(char *plugin_instance, @@ -158,7 +158,7 @@ static int df_read(void) { mnt_list = NULL; if (cu_mount_getlist(&mnt_list) == NULL) { ERROR("df plugin: cu_mount_getlist failed."); - return (-1); + return -1; } for (cu_mount_t *mnt_ptr = mnt_list; mnt_ptr != NULL; @@ -285,7 +285,7 @@ static int df_read(void) { df_submit_one(disk_name, "percent_bytes", "used", (gauge_t)((float_t)(blk_used) / statbuf.f_blocks * 100)); } else - return (-1); + return -1; } /* inode handling */ @@ -316,7 +316,7 @@ static int df_read(void) { disk_name, "percent_inodes", "used", (gauge_t)((float_t)(inode_used) / statbuf.f_files * 100)); } else - return (-1); + return -1; } if (values_absolute) { df_submit_one(disk_name, "df_inodes", "free", (gauge_t)inode_free); @@ -329,7 +329,7 @@ static int df_read(void) { cu_mount_freelist(mnt_list); - return (0); + return 0; } /* int df_read */ void module_register(void) { diff --git a/src/disk.c b/src/disk.c index e01e1506..4a217c30 100644 --- a/src/disk.c +++ b/src/disk.c @@ -139,7 +139,7 @@ static int pnumdisk; #error "No applicable input method." #endif -#if HAVE_LIBUDEV +#if HAVE_UDEV_H #include static char *conf_udev_name_attr = NULL; @@ -156,7 +156,7 @@ static int disk_config(const char *key, const char *value) { if (ignorelist == NULL) ignorelist = ignorelist_create(/* invert = */ 1); if (ignorelist == NULL) - return (1); + return 1; if (strcasecmp("Disk", key) == 0) { ignorelist_add(ignorelist, value); @@ -173,22 +173,22 @@ static int disk_config(const char *key, const char *value) { "on Mach / Mac OS X and will be ignored."); #endif } else if (strcasecmp("UdevNameAttr", key) == 0) { -#if HAVE_LIBUDEV +#if HAVE_UDEV_H if (conf_udev_name_attr != NULL) { free(conf_udev_name_attr); conf_udev_name_attr = NULL; } if ((conf_udev_name_attr = strdup(value)) == NULL) - return (1); + return 1; #else WARNING("disk plugin: The \"UdevNameAttr\" option is only supported " "if collectd is built with libudev support"); #endif } else { - return (-1); + return -1; } - return (0); + return 0; } /* int disk_config */ static int disk_init(void) { @@ -204,20 +204,20 @@ static int disk_init(void) { if (status != kIOReturnSuccess) { ERROR("IOMasterPort failed: %s", mach_error_string(status)); io_master_port = MACH_PORT_NULL; - return (-1); + return -1; } /* #endif HAVE_IOKIT_IOKITLIB_H */ #elif KERNEL_LINUX -#if HAVE_LIBUDEV +#if HAVE_UDEV_H if (conf_udev_name_attr != NULL) { handle_udev = udev_new(); if (handle_udev == NULL) { ERROR("disk plugin: udev_new() failed!"); - return (-1); + return -1; } } -#endif /* HAVE_LIBUDEV */ +#endif /* HAVE_UDEV_H */ /* #endif KERNEL_LINUX */ #elif KERNEL_FREEBSD @@ -226,12 +226,12 @@ static int disk_init(void) { rv = geom_gettree(&geom_tree); if (rv != 0) { ERROR("geom_gettree() failed, returned %d", rv); - return (-1); + return -1; } rv = geom_stats_open(); if (rv != 0) { ERROR("geom_stats_open() failed, returned %d", rv); - return (-1); + return -1; } /* #endif KERNEL_FREEBSD */ @@ -241,7 +241,7 @@ static int disk_init(void) { numdisk = 0; if (kc == NULL) - return (-1); + return -1; for (numdisk = 0, ksp_chain = kc->kc_chain; (numdisk < MAX_NUMDISK) && (ksp_chain != NULL); @@ -255,17 +255,17 @@ static int disk_init(void) { } #endif /* HAVE_LIBKSTAT */ - return (0); + return 0; } /* int disk_init */ static int disk_shutdown(void) { #if KERNEL_LINUX -#if HAVE_LIBUDEV +#if HAVE_UDEV_H if (handle_udev != NULL) udev_unref(handle_udev); -#endif /* HAVE_LIBUDEV */ +#endif /* HAVE_UDEV_H */ #endif /* KERNEL_LINUX */ - return (0); + return 0; } /* int disk_shutdown */ static void disk_submit(const char *plugin_instance, const char *type, @@ -321,11 +321,11 @@ static counter_t disk_calc_time_incr(counter_t delta_time, double avg_time = ((double)delta_time) / ((double)delta_ops); double avg_time_incr = interval * avg_time; - return ((counter_t)(avg_time_incr + .5)); + return (counter_t)(avg_time_incr + .5); } #endif -#if HAVE_LIBUDEV +#if HAVE_UDEV_H /** * Attempt to provide an rename disk instance from an assigned udev attribute. * @@ -363,7 +363,7 @@ static signed long long dict_get_value(CFDictionaryRef dict, const char *key) { kCFStringEncodingASCII); if (key_obj == NULL) { DEBUG("CFStringCreateWithCString (%s) failed.", key); - return (-1LL); + return -1LL; } /* get => we don't need to release (== free) the object */ @@ -373,15 +373,15 @@ static signed long long dict_get_value(CFDictionaryRef dict, const char *key) { if (val_obj == NULL) { DEBUG("CFDictionaryGetValue (%s) failed.", key); - return (-1LL); + return -1LL; } if (!CFNumberGetValue(val_obj, kCFNumberSInt64Type, &val_int)) { DEBUG("CFNumberGetValue (%s) failed.", key); - return (-1LL); + return -1LL; } - return (val_int); + return val_int; } #endif /* HAVE_IOKIT_IOKITLIB_H */ @@ -405,10 +405,10 @@ static int disk_read(void) { /* Get the list of all disk objects. */ if (IOServiceGetMatchingServices( - io_master_port, IOServiceMatching(kIOBlockStorageDriverClass), - &disk_list) != kIOReturnSuccess) { + io_master_port, IOServiceMatching(kIOBlockStorageDriverClass), + &disk_list) != kIOReturnSuccess) { ERROR("disk plugin: IOServiceGetMatchingServices failed."); - return (-1); + return -1; } while ((disk = IOIteratorNext(disk_list)) != 0) { @@ -551,7 +551,7 @@ static int disk_read(void) { snap = geom_stats_snapshot_get(); if (snap == NULL) { ERROR("disk plugin: geom_stats_snapshot_get() failed."); - return (-1); + return -1; } /* Check if we have dirty read from this snapshot */ @@ -568,7 +568,7 @@ static int disk_read(void) { if (geom_gettree(&geom_tree) != 0) { ERROR("disk plugin: geom_gettree() failed"); geom_stats_snapshot_free(snap); - return (-1); + return -1; } geom_id = geom_lookupid(&geom_tree, snap_iter->id); } @@ -682,7 +682,7 @@ static int disk_read(void) { fh = fopen("/proc/partitions", "r"); if (fh == NULL) { ERROR("disk plugin: fopen (/proc/{diskstats,partitions}) failed."); - return (-1); + return -1; } /* Kernel is 2.4.* */ @@ -842,7 +842,7 @@ static int disk_read(void) { output_name = disk_name; -#if HAVE_LIBUDEV +#if HAVE_UDEV_H char *alt_name = NULL; if (conf_udev_name_attr != NULL) { alt_name = @@ -853,7 +853,7 @@ static int disk_read(void) { #endif if (ignorelist_match(ignorelist, output_name) != 0) { -#if HAVE_LIBUDEV +#if HAVE_UDEV_H /* release udev-based alternate name, if allocated */ sfree(alt_name); #endif @@ -879,7 +879,7 @@ static int disk_read(void) { submit_io_time(output_name, io_time, weighted_time); } /* if (is_disk) */ -#if HAVE_LIBUDEV +#if HAVE_UDEV_H /* release udev-based alternate name, if allocated */ sfree(alt_name); #endif @@ -910,7 +910,7 @@ static int disk_read(void) { static kstat_io_t kio; if (kc == NULL) - return (-1); + return -1; for (int i = 0; i < numdisk; i++) { if (kstat_read(kc, ksp[i], &kio) == -1) @@ -946,7 +946,7 @@ static int disk_read(void) { char name[DATA_MAX_NAME_LEN]; if ((ds = sg_get_disk_io_stats(&disks)) == NULL) - return (0); + return 0; for (int counter = 0; counter < disks; counter++) { strncpy(name, ds->disk_name, sizeof(name)); @@ -977,7 +977,7 @@ static int disk_read(void) { char errbuf[1024]; WARNING("disk plugin: perfstat_disk: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (numdisk != pnumdisk || stat_disk == NULL) { @@ -993,7 +993,7 @@ static int disk_read(void) { char errbuf[1024]; WARNING("disk plugin: perfstat_disk : %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (int i = 0; i < rnumdisk; i++) { @@ -1020,7 +1020,7 @@ static int disk_read(void) { } #endif /* defined(HAVE_PERFSTAT) */ - return (0); + return 0; } /* int disk_read */ void module_register(void) { diff --git a/src/dns.c b/src/dns.c index e3208a68..e64af0dd 100644 --- a/src/dns.c +++ b/src/dns.c @@ -84,7 +84,7 @@ static counter_list_t *counter_list_search(counter_list_t **list, if (entry->key == key) break; - return (entry); + return entry; } static counter_list_t *counter_list_create(counter_list_t **list, @@ -94,7 +94,7 @@ static counter_list_t *counter_list_create(counter_list_t **list, entry = calloc(1, sizeof(*entry)); if (entry == NULL) - return (NULL); + return NULL; entry->key = key; entry->value = value; @@ -111,7 +111,7 @@ static counter_list_t *counter_list_create(counter_list_t **list, last->next = entry; } - return (entry); + return entry; } static void counter_list_add(counter_list_t **list, unsigned int key, @@ -132,7 +132,7 @@ static int dns_config(const char *key, const char *value) { if (pcap_device != NULL) free(pcap_device); if ((pcap_device = strdup(value)) == NULL) - return (1); + return 1; } else if (strcasecmp(key, "IgnoreSource") == 0) { if (value != NULL) ignore_list_add_name(value); @@ -142,10 +142,10 @@ static int dns_config(const char *key, const char *value) { else select_numeric_qtype = 1; } else { - return (-1); + return -1; } - return (0); + return 0; } static void dns_child_callback(const rfc1035_header_t *dns) { @@ -208,19 +208,19 @@ static int dns_run_pcap_loop(void) { ERROR("dns plugin: Opening interface `%s' " "failed: %s", (pcap_device != NULL) ? pcap_device : "any", pcap_error); - return (PCAP_ERROR); + return PCAP_ERROR; } status = pcap_compile(pcap_obj, &fp, "udp port 53", 1, 0); if (status < 0) { ERROR("dns plugin: pcap_compile failed: %s", pcap_statustostr(status)); - return (status); + return status; } status = pcap_setfilter(pcap_obj, &fp); if (status < 0) { ERROR("dns plugin: pcap_setfilter failed: %s", pcap_statustostr(status)); - return (status); + return status; } DEBUG("dns plugin: PCAP object created."); @@ -237,7 +237,7 @@ static int dns_run_pcap_loop(void) { status = PCAP_ERROR_IFACE_NOT_UP; pcap_close(pcap_obj); - return (status); + return status; } /* int dns_run_pcap_loop */ static int dns_sleep_one_interval(void) /* {{{ */ @@ -247,10 +247,10 @@ static int dns_sleep_one_interval(void) /* {{{ */ if ((errno == EINTR) || (errno == EAGAIN)) continue; - return (errno); + return errno; } - return (0); + return 0; } /* }}} int dns_sleep_one_interval */ static void *dns_child_loop(__attribute__((unused)) void *dummy) /* {{{ */ @@ -269,7 +269,7 @@ static void *dns_child_loop(__attribute__((unused)) void *dummy) /* {{{ */ ERROR("dns plugin: PCAP returned error %s.", pcap_statustostr(status)); listen_thread_init = 0; - return (NULL); + return NULL; } /* }}} void *dns_child_loop */ static int dns_init(void) { @@ -282,7 +282,7 @@ static int dns_init(void) { pthread_mutex_unlock(&traffic_mutex); if (listen_thread_init != 0) - return (-1); + return -1; status = plugin_thread_create(&listen_thread, NULL, dns_child_loop, (void *)0, "dns listen"); @@ -290,7 +290,7 @@ static int dns_init(void) { char errbuf[1024]; ERROR("dns plugin: pthread_create failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } listen_thread_init = 1; @@ -308,7 +308,7 @@ static int dns_init(void) { } #endif - return (0); + return 0; } /* int dns_init */ static void submit_derive(const char *type, const char *type_instance, @@ -392,7 +392,7 @@ static int dns_read(void) { submit_derive("dns_rcode", rcode_str(keys[i]), values[i]); } - return (0); + return 0; } /* int dns_read */ void module_register(void) { diff --git a/src/dpdkevents.c b/src/dpdkevents.c new file mode 100644 index 00000000..6be6bc04 --- /dev/null +++ b/src/dpdkevents.c @@ -0,0 +1,584 @@ +/* + * collectd - src/dpdkevents.c + * MIT License + * + * Copyright(c) 2017 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Maryam Tahhan + * Harry van Haaren + * Serhiy Pshyk + * Kim-Marie Jones + * Krzysztof Matczak + */ + +#include "collectd.h" + +#include "common.h" +#include "plugin.h" + +#include "semaphore.h" +#include "sys/mman.h" +#include "utils_dpdk.h" +#include "utils_time.h" + +#include +#include +#include +#include + +#define DPDK_EVENTS_PLUGIN "dpdkevents" +#define DPDK_EVENTS_NAME "dpdk_collectd_events" +#define ETH_LINK_NA 0xFF + +#define INT64_BIT_SIZE 64 +#define KEEPALIVE_PLUGIN_INSTANCE "keepalive" +#define RTE_KEEPALIVE_SHM_NAME "/dpdk_keepalive_shm_name" + +typedef struct dpdk_keepalive_shm_s { + sem_t core_died; + enum rte_keepalive_state core_state[RTE_KEEPALIVE_MAXCORES]; + uint64_t core_last_seen_times[RTE_KEEPALIVE_MAXCORES]; +} dpdk_keepalive_shm_t; + +typedef struct dpdk_ka_monitor_s { + cdtime_t read_time; + int lcore_state; +} dpdk_ka_monitor_t; + +typedef struct dpdk_link_status_config_s { + int enabled; + int send_updated; + uint32_t enabled_port_mask; + char port_name[RTE_MAX_ETHPORTS][DATA_MAX_NAME_LEN]; + int notify; +} dpdk_link_status_config_t; + +typedef struct dpdk_keep_alive_config_s { + int enabled; + int send_updated; + uint128_t lcore_mask; + dpdk_keepalive_shm_t *shm; + char shm_name[DATA_MAX_NAME_LEN]; + int notify; +} dpdk_keep_alive_config_t; + +typedef struct dpdk_events_config_s { + cdtime_t interval; + dpdk_link_status_config_t link_status; + dpdk_keep_alive_config_t keep_alive; +} dpdk_events_config_t; + +typedef struct dpdk_link_info_s { + cdtime_t read_time; + int status_updated; + int link_status; +} dpdk_link_info_t; + +typedef struct dpdk_events_ctx_s { + dpdk_events_config_t config; + uint32_t nb_ports; + dpdk_link_info_t link_info[RTE_MAX_ETHPORTS]; + dpdk_ka_monitor_t core_info[RTE_KEEPALIVE_MAXCORES]; +} dpdk_events_ctx_t; + +#define DPDK_EVENTS_CTX_GET(a) ((dpdk_events_ctx_t *)dpdk_helper_priv_get(a)) + +#define DPDK_EVENTS_TRACE() \ + DEBUG("%s:%s:%d pid=%u", DPDK_EVENTS_PLUGIN, __FUNCTION__, __LINE__, getpid()) + +static dpdk_helper_ctx_t *g_hc; + +static int dpdk_event_keep_alive_shm_create(void) { + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + char *shm_name; + + if (strlen(ec->config.keep_alive.shm_name)) { + shm_name = ec->config.keep_alive.shm_name; + } else { + shm_name = RTE_KEEPALIVE_SHM_NAME; + WARNING(DPDK_EVENTS_PLUGIN ": Keep alive shared memory identifier is not " + "specified, using default one: %s", + shm_name); + } + + char errbuf[ERR_BUF_SIZE]; + int fd = shm_open(shm_name, O_RDWR, 0); + if (fd < 0) { + ERROR(DPDK_EVENTS_PLUGIN ": Failed to open %s as SHM:%s. Is DPDK KA " + "primary application running?", + shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); + return errno; + } else { + ec->config.keep_alive.shm = + (dpdk_keepalive_shm_t *)mmap(0, sizeof(*(ec->config.keep_alive.shm)), + PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + close(fd); + if (ec->config.keep_alive.shm == MAP_FAILED) { + ERROR(DPDK_EVENTS_PLUGIN ": Failed to mmap KA SHM:%s", + sstrerror(errno, errbuf, sizeof(errbuf))); + return errno; + } + } + + return 0; +} + +static void dpdk_events_default_config(void) { + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + + ec->config.interval = plugin_get_interval(); + + /* Link Status */ + ec->config.link_status.enabled = 0; + ec->config.link_status.enabled_port_mask = ~0; + ec->config.link_status.send_updated = 1; + ec->config.link_status.notify = 0; + + for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { + ec->config.link_status.port_name[i][0] = 0; + } + + /* Keep Alive */ + ec->config.keep_alive.enabled = 0; + ec->config.keep_alive.send_updated = 1; + ec->config.keep_alive.notify = 0; + memset(&ec->config.keep_alive.lcore_mask, 0, + sizeof(ec->config.keep_alive.lcore_mask)); + memset(&ec->config.keep_alive.shm_name, 0, + sizeof(ec->config.keep_alive.shm_name)); +} + +static int dpdk_events_preinit(void) { + DPDK_EVENTS_TRACE(); + + if (g_hc != NULL) { + /* already initialized if config callback was called before init callback */ + DEBUG("dpdk_events_preinit: helper already initialized."); + return 0; + } + + int ret = + dpdk_helper_init(DPDK_EVENTS_NAME, sizeof(dpdk_events_ctx_t), &g_hc); + if (ret != 0) { + ERROR(DPDK_EVENTS_PLUGIN ": failed to initialize %s helper(error: %s)", + DPDK_EVENTS_NAME, strerror(ret)); + return ret; + } + + dpdk_events_default_config(); + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { + ec->link_info[i].link_status = ETH_LINK_NA; + } + + for (int i = 0; i < RTE_KEEPALIVE_MAXCORES; i++) { + ec->core_info[i].lcore_state = ETH_LINK_NA; + } + + return ret; +} + +static int dpdk_events_link_status_config(dpdk_events_ctx_t *ec, + oconfig_item_t *ci) { + ec->config.link_status.enabled = 1; + + DEBUG(DPDK_EVENTS_PLUGIN ": Subscribed for Link Status Events."); + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + + if (strcasecmp("EnabledPortMask", child->key) == 0) { + ec->config.link_status.enabled_port_mask = + (uint32_t)child->values[0].value.number; + DEBUG(DPDK_EVENTS_PLUGIN ": LinkStatus:Enabled Port Mask 0x%X", + ec->config.link_status.enabled_port_mask); + } else if (strcasecmp("SendEventsOnUpdate", child->key) == 0) { + ec->config.link_status.send_updated = child->values[0].value.boolean; + DEBUG(DPDK_EVENTS_PLUGIN ": LinkStatus:SendEventsOnUpdate %d", + (int)child->values[0].value.boolean); + } else if (strcasecmp("SendNotification", child->key) == 0) { + ec->config.link_status.notify = child->values[0].value.boolean; + DEBUG(DPDK_EVENTS_PLUGIN ": LinkStatus:SendNotification %d", + (int)child->values[0].value.boolean); + } + } + + int port_num = 0; + + /* parse port names after EnabledPortMask was parsed */ + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("PortName", child->key) == 0) { + while (!(ec->config.link_status.enabled_port_mask & (1 << port_num))) + port_num++; + ssnprintf(ec->config.link_status.port_name[port_num], DATA_MAX_NAME_LEN, + "%s", child->values[0].value.string); + DEBUG(DPDK_EVENTS_PLUGIN ": LinkStatus:Port %d Name: %s", port_num, + ec->config.link_status.port_name[port_num]); + port_num++; + } + } + + return 0; +} + +static int dpdk_events_keep_alive_config(dpdk_events_ctx_t *ec, + oconfig_item_t *ci) { + ec->config.keep_alive.enabled = 1; + DEBUG(DPDK_EVENTS_PLUGIN ": Subscribed for Keep Alive Events."); + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + + if (strcasecmp("SendEventsOnUpdate", child->key) == 0) { + ec->config.keep_alive.send_updated = child->values[0].value.boolean; + DEBUG(DPDK_EVENTS_PLUGIN ": KeepAlive:SendEventsOnUpdate %d", + (int)child->values[0].value.boolean); + } else if (strcasecmp("LCoreMask", child->key) == 0) { + char lcore_mask[DATA_MAX_NAME_LEN]; + ssnprintf(lcore_mask, sizeof(lcore_mask), "%s", + child->values[0].value.string); + ec->config.keep_alive.lcore_mask = + str_to_uint128(lcore_mask, strlen(lcore_mask)); + DEBUG(DPDK_EVENTS_PLUGIN ": KeepAlive:LCoreMask 0x%" PRIX64 "%" PRIX64 "", + ec->config.keep_alive.lcore_mask.high, + ec->config.keep_alive.lcore_mask.low); + } else if (strcasecmp("KeepAliveShmName", child->key) == 0) { + ssnprintf(ec->config.keep_alive.shm_name, + sizeof(ec->config.keep_alive.shm_name), "%s", + child->values[0].value.string); + DEBUG(DPDK_EVENTS_PLUGIN ": KeepAlive:KeepAliveShmName %s", + ec->config.keep_alive.shm_name); + } else if (strcasecmp("SendNotification", child->key) == 0) { + ec->config.keep_alive.notify = child->values[0].value.boolean; + DEBUG(DPDK_EVENTS_PLUGIN ": KeepAlive:SendNotification %d", + (int)child->values[0].value.boolean); + } + } + + return 0; +} + +static int dpdk_events_config(oconfig_item_t *ci) { + DPDK_EVENTS_TRACE(); + + int ret = dpdk_events_preinit(); + if (ret) + return ret; + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("EAL", child->key) == 0) { + dpdk_helper_eal_config_parse(g_hc, child); + } else if (strcasecmp("Event", child->key) == 0) { + if (strcasecmp(child->values[0].value.string, "link_status") == 0) { + dpdk_events_link_status_config(ec, child); + } else if (strcasecmp(child->values[0].value.string, "keep_alive") == 0) { + dpdk_events_keep_alive_config(ec, child); + } else { + ERROR(DPDK_EVENTS_PLUGIN ": The selected event \"%s\" is unknown.", + child->values[0].value.string); + } + } + } + + if (!ec->config.keep_alive.enabled && !ec->config.link_status.enabled) { + ERROR(DPDK_EVENTS_PLUGIN ": At least one type of events should be " + "configured for collecting. Plugin misconfigured"); + return -1; + } + + return ret; +} + +static int dpdk_helper_link_status_get(dpdk_helper_ctx_t *phc) { + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(phc); + + /* get Link Status values from DPDK */ + uint8_t nb_ports = rte_eth_dev_count(); + if (nb_ports == 0) { + DPDK_CHILD_LOG("dpdkevent-helper: No DPDK ports available. " + "Check bound devices to DPDK driver.\n"); + return -ENODEV; + } + ec->nb_ports = nb_ports > RTE_MAX_ETHPORTS ? RTE_MAX_ETHPORTS : nb_ports; + + for (int i = 0; i < ec->nb_ports; i++) { + if (ec->config.link_status.enabled_port_mask & (1 << i)) { + struct rte_eth_link link; + ec->link_info[i].read_time = cdtime(); + rte_eth_link_get_nowait(i, &link); + if ((link.link_status == ETH_LINK_NA) || + (link.link_status != ec->link_info[i].link_status)) { + ec->link_info[i].link_status = link.link_status; + ec->link_info[i].status_updated = 1; + DPDK_CHILD_LOG(" === PORT %d Link Status: %s\n", i, + link.link_status ? "UP" : "DOWN"); + } + } + } + + return 0; +} + +/* this function is called from helper context */ +int dpdk_helper_command_handler(dpdk_helper_ctx_t *phc, enum DPDK_CMD cmd) { + if (phc == NULL) { + DPDK_CHILD_LOG(DPDK_EVENTS_PLUGIN ": Invalid argument(phc)\n"); + return -EINVAL; + } + + if (cmd != DPDK_CMD_GET_EVENTS) { + DPDK_CHILD_LOG(DPDK_EVENTS_PLUGIN ": Unknown command (cmd=%d)\n", cmd); + return -EINVAL; + } + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(phc); + int ret = 0; + if (ec->config.link_status.enabled) + ret = dpdk_helper_link_status_get(phc); + + return ret; +} + +static void dpdk_events_notification_dispatch(int severity, + const char *plugin_instance, + cdtime_t time, const char *msg) { + notification_t n = { + .severity = severity, .time = time, .plugin = DPDK_EVENTS_PLUGIN}; + sstrncpy(n.host, hostname_g, sizeof(n.host)); + sstrncpy(n.plugin_instance, plugin_instance, sizeof(n.plugin_instance)); + sstrncpy(n.message, msg, sizeof(n.message)); + plugin_dispatch_notification(&n); +} + +static void dpdk_events_gauge_submit(const char *plugin_instance, + const char *type_instance, gauge_t value, + cdtime_t time) { + value_list_t vl = {.values = &(value_t){.gauge = value}, + .values_len = 1, + .time = time, + .plugin = DPDK_EVENTS_PLUGIN, + .type = "gauge", + .meta = NULL}; + sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance)); + sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); + plugin_dispatch_values(&vl); +} + +static int dpdk_events_link_status_dispatch(dpdk_helper_ctx_t *phc) { + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(phc); + DEBUG(DPDK_EVENTS_PLUGIN ": %s:%d ports=%u", __FUNCTION__, __LINE__, + ec->nb_ports); + + /* dispatch Link Status values to collectd */ + for (int i = 0; i < ec->nb_ports; i++) { + if (ec->config.link_status.enabled_port_mask & (1 << i)) { + if (!ec->config.link_status.send_updated || + ec->link_info[i].status_updated) { + + DEBUG(DPDK_EVENTS_PLUGIN ": Dispatch PORT %d Link Status: %s", i, + ec->link_info[i].link_status ? "UP" : "DOWN"); + + char dev_name[DATA_MAX_NAME_LEN]; + if (ec->config.link_status.port_name[i][0] != 0) { + ssnprintf(dev_name, sizeof(dev_name), "%s", + ec->config.link_status.port_name[i]); + } else { + ssnprintf(dev_name, sizeof(dev_name), "port.%d", i); + } + + if (ec->config.link_status.notify) { + int sev = ec->link_info[i].link_status ? NOTIF_OKAY : NOTIF_WARNING; + char msg[DATA_MAX_NAME_LEN]; + ssnprintf(msg, sizeof(msg), "Link Status: %s", + ec->link_info[i].link_status ? "UP" : "DOWN"); + dpdk_events_notification_dispatch(sev, dev_name, + ec->link_info[i].read_time, msg); + } else { + dpdk_events_gauge_submit(dev_name, "link_status", + (gauge_t)ec->link_info[i].link_status, + ec->link_info[i].read_time); + } + ec->link_info[i].status_updated = 0; + } + } + } + + return 0; +} + +static void dpdk_events_keep_alive_dispatch(dpdk_helper_ctx_t *phc) { + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(phc); + + /* dispatch Keep Alive values to collectd */ + for (int i = 0; i < RTE_KEEPALIVE_MAXCORES; i++) { + if (i < INT64_BIT_SIZE) { + if (!(ec->config.keep_alive.lcore_mask.low & ((uint64_t)1 << i))) + continue; + } else if (i >= INT64_BIT_SIZE && i < INT64_BIT_SIZE * 2) { + if (!(ec->config.keep_alive.lcore_mask.high & + ((uint64_t)1 << (i - INT64_BIT_SIZE)))) + continue; + } else { + WARNING(DPDK_EVENTS_PLUGIN + ": %s:%d Core id %u is out of 0 to %u range, skipping", + __FUNCTION__, __LINE__, i, INT64_BIT_SIZE * 2); + continue; + } + + char core_name[DATA_MAX_NAME_LEN]; + ssnprintf(core_name, sizeof(core_name), "lcore%u", i); + + if (!ec->config.keep_alive.send_updated || + (ec->core_info[i].lcore_state != + ec->config.keep_alive.shm->core_state[i])) { + ec->core_info[i].lcore_state = ec->config.keep_alive.shm->core_state[i]; + ec->core_info[i].read_time = cdtime(); + + if (ec->config.keep_alive.notify) { + char msg[DATA_MAX_NAME_LEN]; + int sev; + + switch (ec->config.keep_alive.shm->core_state[i]) { + case RTE_KA_STATE_ALIVE: + sev = NOTIF_OKAY; + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: ALIVE", i); + break; + case RTE_KA_STATE_MISSING: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: MISSING", i); + sev = NOTIF_WARNING; + break; + case RTE_KA_STATE_DEAD: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: DEAD", i); + sev = NOTIF_FAILURE; + break; + case RTE_KA_STATE_UNUSED: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: UNUSED", i); + sev = NOTIF_OKAY; + break; + case RTE_KA_STATE_GONE: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: GONE", i); + sev = NOTIF_FAILURE; + break; + case RTE_KA_STATE_DOZING: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: DOZING", i); + sev = NOTIF_OKAY; + break; + case RTE_KA_STATE_SLEEP: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: SLEEP", i); + sev = NOTIF_OKAY; + break; + default: + ssnprintf(msg, sizeof(msg), "lcore %u Keep Alive Status: UNKNOWN", i); + sev = NOTIF_FAILURE; + } + + dpdk_events_notification_dispatch(sev, KEEPALIVE_PLUGIN_INSTANCE, + ec->core_info[i].read_time, msg); + } else { + dpdk_events_gauge_submit(KEEPALIVE_PLUGIN_INSTANCE, core_name, + ec->config.keep_alive.shm->core_state[i], + ec->core_info[i].read_time); + } + } + } +} + +static int dpdk_events_read(user_data_t *ud) { + DPDK_EVENTS_TRACE(); + + if (g_hc == NULL) { + ERROR(DPDK_EVENTS_PLUGIN ": plugin not initialized."); + return -1; + } + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + + if (ec->config.link_status.enabled) { + int cmd_res = 0; + int ret = dpdk_helper_command(g_hc, DPDK_CMD_GET_EVENTS, &cmd_res, + ec->config.interval); + if (cmd_res == 0 && ret == 0) { + dpdk_events_link_status_dispatch(g_hc); + } + } + + if (ec->config.keep_alive.enabled) { + dpdk_events_keep_alive_dispatch(g_hc); + } + + return 0; +} + +static int dpdk_events_init(void) { + DPDK_EVENTS_TRACE(); + + int ret = dpdk_events_preinit(); + if (ret) + return ret; + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + + if (ec->config.keep_alive.enabled) { + ret = dpdk_event_keep_alive_shm_create(); + if (ret) { + ERROR(DPDK_EVENTS_PLUGIN ": %s : error %d in ka_shm_create()", + __FUNCTION__, ret); + return ret; + } + } + return 0; +} + +static int dpdk_events_shutdown(void) { + DPDK_EVENTS_TRACE(); + int ret; + + dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); + if (ec->config.keep_alive.enabled) { + ret = munmap(ec->config.keep_alive.shm, sizeof(dpdk_keepalive_shm_t)); + if (ret) { + ERROR(DPDK_EVENTS_PLUGIN ": munmap KA monitor returned %d", ret); + return ret; + } + } + + ret = dpdk_helper_shutdown(g_hc); + g_hc = NULL; + if (ret) + ERROR(DPDK_EVENTS_PLUGIN ": failed to cleanup %s helper", DPDK_EVENTS_NAME); + + return ret; +} + +void module_register(void) { + plugin_register_init(DPDK_EVENTS_PLUGIN, dpdk_events_init); + plugin_register_complex_config(DPDK_EVENTS_PLUGIN, dpdk_events_config); + plugin_register_complex_read(NULL, DPDK_EVENTS_PLUGIN, dpdk_events_read, 0, + NULL); + plugin_register_shutdown(DPDK_EVENTS_PLUGIN, dpdk_events_shutdown); +} diff --git a/src/dpdkstat.c b/src/dpdkstat.c index 6d0aabf7..cc525e82 100644 --- a/src/dpdkstat.c +++ b/src/dpdkstat.c @@ -1,4 +1,4 @@ -/*- +/* * collectd - src/dpdkstat.c * MIT License * @@ -26,47 +26,30 @@ * Maryam Tahhan * Harry van Haaren * Taras Chornyi + * Serhiy Pshyk + * Krzysztof Matczak */ #include "collectd.h" -#include "common.h" /* auxiliary functions */ -#include "plugin.h" /* plugin_register_*, plugin_dispatch_values */ -#include "utils_time.h" - -#include -#include -#include -#include -#include +#include "common.h" +#include "utils_dpdk.h" -#include -#include -#include #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DPDK_DEFAULT_RTE_CONFIG "/var/run/.rte_config" -#define DPDK_MAX_ARGC 8 -#define DPDKSTAT_MAX_BUFFER_SIZE (4096 * 4) -#define DPDK_SHM_NAME "dpdk_collectd_stats_shm" -#define ERR_BUF_SIZE 1024 -#define REINIT_SHM 1 -#define RESET 1 -#define NO_RESET 0 + +#define DPDK_STATS_PLUGIN "dpdkstat" +#define DPDK_STATS_NAME "dpdk_collectd_stats" + +#define DPDK_STATS_TRACE() \ + DEBUG("%s:%s:%d pid=%u", DPDK_STATS_PLUGIN, __FUNCTION__, __LINE__, getpid()) + +struct dpdk_stats_config_s { + cdtime_t interval; + uint32_t enabled_port_mask; + char port_name[RTE_MAX_ETHPORTS][DATA_MAX_NAME_LEN]; +}; +typedef struct dpdk_stats_config_s dpdk_stats_config_t; #define RTE_VERSION_16_07 RTE_VERSION_NUM(16, 7, 0, 16) @@ -88,740 +71,436 @@ ctx->xstats = (struct rte_eth_xstat *)&ctx->raw_data[0]; \ ctx->xnames = \ (struct rte_eth_xstat_name *)&ctx \ - ->raw_data[ctx->num_xstats * sizeof(struct rte_eth_xstat)]; \ + ->raw_data[ctx->stats_count * sizeof(struct rte_eth_xstat)]; \ } while (0) #endif -enum DPDK_HELPER_ACTION { - DPDK_HELPER_ACTION_COUNT_STATS, - DPDK_HELPER_ACTION_SEND_STATS, -}; - -enum DPDK_HELPER_STATUS { - DPDK_HELPER_NOT_INITIALIZED = 0, - DPDK_HELPER_WAITING_ON_PRIMARY, - DPDK_HELPER_INITIALIZING_EAL, - DPDK_HELPER_ALIVE_SENDING_STATS, - DPDK_HELPER_GRACEFUL_QUIT, -}; - -struct dpdk_config_s { - /* General DPDK params */ - char coremask[DATA_MAX_NAME_LEN]; - char memory_channels[DATA_MAX_NAME_LEN]; - char socket_memory[DATA_MAX_NAME_LEN]; - char process_type[DATA_MAX_NAME_LEN]; - char file_prefix[DATA_MAX_NAME_LEN]; - cdtime_t interval; - uint32_t eal_initialized; - uint32_t enabled_port_mask; - char port_name[RTE_MAX_ETHPORTS][DATA_MAX_NAME_LEN]; - uint32_t eal_argc; - /* Helper info */ - int collectd_reinit_shm; - pid_t helper_pid; - sem_t sema_helper_get_stats; - sem_t sema_stats_in_shm; - int helper_pipes[2]; - enum DPDK_HELPER_STATUS helper_status; - enum DPDK_HELPER_ACTION helper_action; - /* xstats info */ - uint32_t num_ports; - uint32_t num_xstats; +struct dpdk_stats_ctx_s { + dpdk_stats_config_t config; + uint32_t stats_count; + uint32_t ports_count; cdtime_t port_read_time[RTE_MAX_ETHPORTS]; - uint32_t num_stats_in_port[RTE_MAX_ETHPORTS]; - struct rte_eth_link link_status[RTE_MAX_ETHPORTS]; + uint32_t port_stats_count[RTE_MAX_ETHPORTS]; #if RTE_VERSION < RTE_VERSION_16_07 struct rte_eth_xstats *xstats; #else struct rte_eth_xstat *xstats; struct rte_eth_xstat_name *xnames; #endif - char *raw_data; - /* rte_eth_xstats from here on until the end of the SHM */ + char raw_data[]; }; -typedef struct dpdk_config_s dpdk_config_t; - -static int g_configured; -static dpdk_config_t *g_configuration; - -static void dpdk_config_init_default(void); -static int dpdk_config(oconfig_item_t *ci); -static int dpdk_helper_init_eal(void); -static int dpdk_helper_run(void); -static int dpdk_helper_spawn(enum DPDK_HELPER_ACTION action); -static int dpdk_init(void); -static int dpdk_read(user_data_t *ud); -static int dpdk_shm_cleanup(void); -static int dpdk_shm_init(size_t size); - -/* Write the default configuration to the g_configuration instances */ -static void dpdk_config_init_default(void) { - g_configuration->interval = plugin_get_interval(); - if (g_configuration->interval == cf_get_default_interval()) - WARNING("dpdkstat: No time interval was configured, default value %" PRIu64 - " ms is set", - CDTIME_T_TO_MS(g_configuration->interval)); - /* Default is all ports enabled */ - g_configuration->enabled_port_mask = ~0; - g_configuration->eal_argc = DPDK_MAX_ARGC; - g_configuration->eal_initialized = 0; - ssnprintf(g_configuration->coremask, DATA_MAX_NAME_LEN, "%s", "0xf"); - ssnprintf(g_configuration->memory_channels, DATA_MAX_NAME_LEN, "%s", "1"); - ssnprintf(g_configuration->process_type, DATA_MAX_NAME_LEN, "%s", - "secondary"); - ssnprintf(g_configuration->file_prefix, DATA_MAX_NAME_LEN, "%s", - DPDK_DEFAULT_RTE_CONFIG); - - for (int i = 0; i < RTE_MAX_ETHPORTS; i++) - g_configuration->port_name[i][0] = 0; +typedef struct dpdk_stats_ctx_s dpdk_stats_ctx_t; + +#define DPDK_STATS_CTX_GET(a) ((dpdk_stats_ctx_t *)dpdk_helper_priv_get(a)) + +dpdk_helper_ctx_t *g_hc = NULL; +static char g_shm_name[DATA_MAX_NAME_LEN] = DPDK_STATS_NAME; +static int dpdk_stats_reinit_helper(); +static void dpdk_stats_default_config(void) { + dpdk_stats_ctx_t *ec = DPDK_STATS_CTX_GET(g_hc); + + ec->config.interval = plugin_get_interval(); + for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { + ec->config.port_name[i][0] = 0; + } + /* Enable all ports by default */ + ec->config.enabled_port_mask = ~0; } -static int dpdk_config(oconfig_item_t *ci) { - int port_counter = 0; - /* Allocate g_configuration and - * initialize a POSIX SHared Memory (SHM) object. - */ - int err = dpdk_shm_init(sizeof(dpdk_config_t)); - if (err) { +static int dpdk_stats_preinit(void) { + DPDK_STATS_TRACE(); + + if (g_hc != NULL) { + /* already initialized if config callback was called before init callback */ + DEBUG("dpdk_stats_preinit: helper already initialized"); + return 0; + } + + int ret = dpdk_helper_init(g_shm_name, sizeof(dpdk_stats_ctx_t), &g_hc); + if (ret != 0) { char errbuf[ERR_BUF_SIZE]; - ERROR("dpdkstat: error in shm_init, %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - return -1; + ERROR("%s: failed to initialize %s helper(error: %s)", DPDK_STATS_PLUGIN, + g_shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); + return ret; } - /* Set defaults for config, overwritten by loop if config item exists */ - dpdk_config_init_default(); + dpdk_stats_default_config(); + return ret; +} + +static int dpdk_stats_config(oconfig_item_t *ci) { + DPDK_STATS_TRACE(); + + int ret = dpdk_stats_preinit(); + if (ret) + return ret; + + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(g_hc); for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; - if (strcasecmp("Coremask", child->key) == 0) { - cf_util_get_string_buffer(child, g_configuration->coremask, - sizeof(g_configuration->coremask)); - DEBUG("dpdkstat:COREMASK %s ", g_configuration->coremask); - } else if (strcasecmp("MemoryChannels", child->key) == 0) { - cf_util_get_string_buffer(child, g_configuration->memory_channels, - sizeof(g_configuration->memory_channels)); - DEBUG("dpdkstat:Memory Channels %s ", g_configuration->memory_channels); - } else if (strcasecmp("SocketMemory", child->key) == 0) { - cf_util_get_string_buffer(child, g_configuration->socket_memory, - sizeof(g_configuration->memory_channels)); - DEBUG("dpdkstat: socket mem %s ", g_configuration->socket_memory); - } else if (strcasecmp("ProcessType", child->key) == 0) { - cf_util_get_string_buffer(child, g_configuration->process_type, - sizeof(g_configuration->process_type)); - DEBUG("dpdkstat: proc type %s ", g_configuration->process_type); - } else if ((strcasecmp("FilePrefix", child->key) == 0) && - (child->values[0].type == OCONFIG_TYPE_STRING)) { - ssnprintf(g_configuration->file_prefix, DATA_MAX_NAME_LEN, - "/var/run/.%s_config", child->values[0].value.string); - DEBUG("dpdkstat: file prefix %s ", g_configuration->file_prefix); - } else if ((strcasecmp("EnabledPortMask", child->key) == 0) && - (child->values[0].type == OCONFIG_TYPE_NUMBER)) { - g_configuration->enabled_port_mask = - (uint32_t)child->values[0].value.number; - DEBUG("dpdkstat: Enabled Port Mask %u", - g_configuration->enabled_port_mask); - } else if (strcasecmp("PortName", child->key) == 0) { - cf_util_get_string_buffer( - child, g_configuration->port_name[port_counter], - sizeof(g_configuration->port_name[port_counter])); - DEBUG("dpdkstat: Port %d Name: %s ", port_counter, - g_configuration->port_name[port_counter]); - port_counter++; - } else { - WARNING("dpdkstat: The config option \"%s\" is unknown.", child->key); + if ((strcasecmp("EnabledPortMask", child->key) == 0) && + (child->values[0].type == OCONFIG_TYPE_NUMBER)) { + ctx->config.enabled_port_mask = child->values[0].value.number; + DEBUG("%s: Enabled Port Mask 0x%X", DPDK_STATS_PLUGIN, + ctx->config.enabled_port_mask); + } else if (strcasecmp("SharedMemObj", child->key) == 0) { + cf_util_get_string_buffer(child, g_shm_name, sizeof(g_shm_name)); + DEBUG("%s: Shared memory object %s", DPDK_STATS_PLUGIN, g_shm_name); + dpdk_stats_reinit_helper(); + } else if (strcasecmp("EAL", child->key) == 0) { + ret = dpdk_helper_eal_config_parse(g_hc, child); + if (ret) + return ret; } - } /* End for (int i = 0; i < ci->children_num; i++)*/ - g_configured = 1; /* Bypass configuration in dpdk_shm_init(). */ + } - return 0; -} + int port_num = 0; -/* - * Allocate g_configuration and initialize SHared Memory (SHM) - * for config and helper process - */ -static int dpdk_shm_init(size_t size) { - /* - * Check if SHM is already configured: when config items are provided, the - * config function initializes SHM. If there is no config, then init() will - * just return. - */ - if (g_configuration) - return 0; + /* parse port names after EnabledPortMask was parsed */ + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; - char errbuf[ERR_BUF_SIZE]; + if (strcasecmp("PortName", child->key) == 0) { - /* Create and open a new object, or open an existing object. */ - int fd = shm_open(DPDK_SHM_NAME, O_CREAT | O_TRUNC | O_RDWR, 0666); - if (fd < 0) { - WARNING("dpdkstat:Failed to open %s as SHM:%s", DPDK_SHM_NAME, - sstrerror(errno, errbuf, sizeof(errbuf))); - goto fail; - } - /* Set the size of the shared memory object. */ - int ret = ftruncate(fd, size); - if (ret != 0) { - WARNING("dpdkstat:Failed to resize SHM:%s", - sstrerror(errno, errbuf, sizeof(errbuf))); - goto fail_close; - } - /* Map the shared memory object into this process' virtual address space. */ - g_configuration = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (g_configuration == MAP_FAILED) { - WARNING("dpdkstat:Failed to mmap SHM:%s", - sstrerror(errno, errbuf, sizeof(errbuf))); - goto fail_close; - } - /* - * Close the file descriptor, the shared memory object still exists - * and can only be removed by calling shm_unlink(). - */ - close(fd); - - /* Initialize g_configuration. */ - memset(g_configuration, 0, size); - - /* Initialize the semaphores for SHM use */ - int err = sem_init(&g_configuration->sema_helper_get_stats, 1, 0); - if (err) { - ERROR("dpdkstat semaphore init failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - goto fail; - } - err = sem_init(&g_configuration->sema_stats_in_shm, 1, 0); - if (err) { - ERROR("dpdkstat semaphore init failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - goto fail; - } + while (!(ctx->config.enabled_port_mask & (1 << port_num))) + port_num++; - g_configuration->xstats = NULL; + cf_util_get_string_buffer(child, ctx->config.port_name[port_num], + sizeof(ctx->config.port_name[port_num])); + DEBUG("%s: Port %d Name: %s", DPDK_STATS_PLUGIN, port_num, + ctx->config.port_name[port_num]); - return 0; + port_num++; + } + } -fail_close: - close(fd); -fail: - /* Reset to zero, as it was set to MAP_FAILED aka: (void *)-1. Avoid - * an issue if collectd attempts to run this plugin failure. - */ - g_configuration = 0; - return -1; + return ret; } -static int dpdk_re_init_shm() { - dpdk_config_t temp_config; - memcpy(&temp_config, g_configuration, sizeof(dpdk_config_t)); - DEBUG("dpdkstat: %s: ports %" PRIu32 ", xstats %" PRIu32, __func__, - temp_config.num_ports, temp_config.num_xstats); - - size_t shm_xstats_size = - sizeof(dpdk_config_t) + - (DPDK_STATS_CTX_GET_XSTAT_SIZE * g_configuration->num_xstats); - DEBUG("=== SHM new size for %" PRIu32 " xstats", g_configuration->num_xstats); - - int err = dpdk_shm_cleanup(); - if (err) { - ERROR("dpdkstat: Error in shm_cleanup in %s", __func__); - return err; - } - err = dpdk_shm_init(shm_xstats_size); - if (err) { - WARNING("dpdkstat: Error in shm_init in %s", __func__); - return err; - } - /* If the XML config() function has been run, don't re-initialize defaults */ - if (!g_configured) - dpdk_config_init_default(); - - memcpy(g_configuration, &temp_config, sizeof(dpdk_config_t)); - g_configuration->collectd_reinit_shm = 0; - g_configuration->raw_data = (char *)(g_configuration + 1); - DPDK_STATS_CTX_INIT(g_configuration); - return 0; -} +static int dpdk_helper_stats_get(dpdk_helper_ctx_t *phc) { + int len = 0; + int ret = 0; + int stats = 0; + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(phc); -static int dpdk_init(void) { - int err = dpdk_shm_init(sizeof(dpdk_config_t)); - if (err) { - ERROR("dpdkstat: %s : error %d in shm_init()", __func__, err); - return err; - } + /* get stats from DPDK */ + for (uint8_t i = 0; i < ctx->ports_count; i++) { + if (!(ctx->config.enabled_port_mask & (1 << i))) + continue; - /* If the XML config() function has been run, dont re-initialize defaults */ - if (!g_configured) { - dpdk_config_init_default(); + ctx->port_read_time[i] = cdtime(); + /* Store available stats array length for port */ + len = ctx->port_stats_count[i]; + + ret = rte_eth_xstats_get(i, &ctx->xstats[stats], len); + if (ret < 0 || ret > len) { + DPDK_CHILD_LOG(DPDK_STATS_PLUGIN + ": Error reading stats (port=%d; len=%d, ret=%d)\n", + i, len, ret); + ctx->port_stats_count[i] = 0; + return -1; + } +#if RTE_VERSION >= RTE_VERSION_16_07 + ret = rte_eth_xstats_get_names(i, &ctx->xnames[stats], len); + if (ret < 0 || ret > len) { + DPDK_CHILD_LOG(DPDK_STATS_PLUGIN + ": Error reading stat names (port=%d; len=%d ret=%d)\n", + i, len, ret); + ctx->port_stats_count[i] = 0; + return -1; + } +#endif + ctx->port_stats_count[i] = ret; + stats += ctx->port_stats_count[i]; } + assert(stats <= ctx->stats_count); return 0; } -static int dpdk_helper_stop(int reset) { - g_configuration->helper_status = DPDK_HELPER_GRACEFUL_QUIT; - if (reset) { - g_configuration->eal_initialized = 0; - g_configuration->num_ports = 0; - g_configuration->xstats = NULL; - g_configuration->num_xstats = 0; - for (int i = 0; i < RTE_MAX_ETHPORTS; i++) - g_configuration->num_stats_in_port[i] = 0; - } - close(g_configuration->helper_pipes[1]); - int err = kill(g_configuration->helper_pid, SIGKILL); - if (err) { - char errbuf[ERR_BUF_SIZE]; - WARNING("dpdkstat: error sending kill to helper: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - } +static int dpdk_helper_stats_count_get(dpdk_helper_ctx_t *phc) { + uint8_t ports = dpdk_helper_eth_dev_count(); + if (ports == 0) + return -ENODEV; - return 0; -} + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(phc); + ctx->ports_count = ports; -static int dpdk_helper_spawn(enum DPDK_HELPER_ACTION action) { - char errbuf[ERR_BUF_SIZE]; - g_configuration->eal_initialized = 0; - g_configuration->helper_action = action; - /* - * Create a pipe for helper stdout back to collectd. This is necessary for - * logging EAL failures, as rte_eal_init() calls rte_panic(). - */ - if (pipe(g_configuration->helper_pipes) != 0) { - DEBUG("dpdkstat: Could not create helper pipe: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - return -1; + int len = 0; + int stats_count = 0; + for (int i = 0; i < ports; i++) { + if (!(ctx->config.enabled_port_mask & (1 << i))) + continue; +#if RTE_VERSION >= RTE_VERSION_16_07 + len = rte_eth_xstats_get_names(i, NULL, 0); +#else + len = rte_eth_xstats_get(i, NULL, 0); +#endif + if (len < 0) { + DPDK_CHILD_LOG("%s: Cannot get stats count\n", DPDK_STATS_PLUGIN); + return -1; + } + ctx->port_stats_count[i] = len; + stats_count += len; } - int pipe0_flags = fcntl(g_configuration->helper_pipes[0], F_GETFL, 0); - int pipe1_flags = fcntl(g_configuration->helper_pipes[1], F_GETFL, 0); - if (pipe0_flags == -1 || pipe1_flags == -1) { - WARNING("dpdkstat: Failed setting up pipe flags: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - } - int pipe0_err = fcntl(g_configuration->helper_pipes[0], F_SETFL, - pipe1_flags | O_NONBLOCK); - int pipe1_err = fcntl(g_configuration->helper_pipes[1], F_SETFL, - pipe0_flags | O_NONBLOCK); - if (pipe0_err == -1 || pipe1_err == -1) { - WARNING("dpdkstat: Failed setting up pipes: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - } + DPDK_CHILD_LOG("%s:%s:%d stats_count=%d\n", DPDK_STATS_PLUGIN, __FUNCTION__, + __LINE__, stats_count); - pid_t pid = fork(); - if (pid > 0) { - close(g_configuration->helper_pipes[1]); - g_configuration->helper_pid = pid; - DEBUG("dpdkstat: helper pid %li", (long)g_configuration->helper_pid); - /* Kick helper once its alive to have it start processing */ - sem_post(&g_configuration->sema_helper_get_stats); - } else if (pid == 0) { - /* Replace stdout with a pipe to collectd. */ - close(g_configuration->helper_pipes[0]); - close(STDOUT_FILENO); - dup2(g_configuration->helper_pipes[1], STDOUT_FILENO); - dpdk_helper_run(); - exit(0); - } else { - ERROR("dpdkstat: Failed to fork helper process: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - return -1; - } - return 0; + return stats_count; } -/* - * Initialize the DPDK EAL, if this returns, EAL is successfully initialized. - * On failure, the EAL prints an error message, and the helper process exits. - */ -static int dpdk_helper_init_eal(void) { - g_configuration->helper_status = DPDK_HELPER_INITIALIZING_EAL; - char *argp[(g_configuration->eal_argc) + 1]; - int i = 0; - - argp[i++] = "collectd-dpdk"; - if (strcasecmp(g_configuration->coremask, "") != 0) { - argp[i++] = "-c"; - argp[i++] = g_configuration->coremask; - } - if (strcasecmp(g_configuration->memory_channels, "") != 0) { - argp[i++] = "-n"; - argp[i++] = g_configuration->memory_channels; - } - if (strcasecmp(g_configuration->socket_memory, "") != 0) { - argp[i++] = "--socket-mem"; - argp[i++] = g_configuration->socket_memory; +static int dpdk_stats_get_size(dpdk_helper_ctx_t *phc) { + return dpdk_helper_data_size_get(phc) - sizeof(dpdk_stats_ctx_t); +} + +int dpdk_helper_command_handler(dpdk_helper_ctx_t *phc, enum DPDK_CMD cmd) { + /* this function is called from helper context */ + + if (phc == NULL) { + DPDK_CHILD_LOG("%s: Invalid argument(phc)\n", DPDK_STATS_PLUGIN); + return -EINVAL; } - if (strcasecmp(g_configuration->file_prefix, "") != 0 && - strcasecmp(g_configuration->file_prefix, DPDK_DEFAULT_RTE_CONFIG) != 0) { - argp[i++] = "--file-prefix"; - argp[i++] = g_configuration->file_prefix; + + if (cmd != DPDK_CMD_GET_STATS) { + DPDK_CHILD_LOG("%s: Unknown command (cmd=%d)\n", DPDK_STATS_PLUGIN, cmd); + return -EINVAL; } - if (strcasecmp(g_configuration->process_type, "") != 0) { - argp[i++] = "--proc-type"; - argp[i++] = g_configuration->process_type; + + int stats_count = dpdk_helper_stats_count_get(phc); + if (stats_count < 0) { + return stats_count; } - g_configuration->eal_argc = i; - g_configuration->eal_initialized = 1; - int ret = rte_eal_init(g_configuration->eal_argc, argp); - if (ret < 0) { - g_configuration->eal_initialized = 0; - return ret; + DPDK_STATS_CTX_GET(phc)->stats_count = stats_count; + int stats_size = stats_count * DPDK_STATS_CTX_GET_XSTAT_SIZE; + + if (dpdk_stats_get_size(phc) < stats_size) { + DPDK_CHILD_LOG( + DPDK_STATS_PLUGIN + ":%s:%d not enough space for stats (available=%d, needed=%d)\n", + __FUNCTION__, __LINE__, (int)dpdk_stats_get_size(phc), stats_size); + return -ENOBUFS; } - return 0; + + return dpdk_helper_stats_get(phc); } -static int dpdk_helper_run(void) { - char errbuf[ERR_BUF_SIZE]; - pid_t ppid = getppid(); - g_configuration->helper_status = DPDK_HELPER_WAITING_ON_PRIMARY; - - while (1) { - /* sem_timedwait() to avoid blocking forever */ - cdtime_t now = cdtime(); - cdtime_t safety_period = MS_TO_CDTIME_T(1500); - int ret = - sem_timedwait(&g_configuration->sema_helper_get_stats, - &CDTIME_T_TO_TIMESPEC(now + safety_period + - g_configuration->interval * 2)); - - if (ret == -1 && errno == ETIMEDOUT) { - ERROR("dpdkstat-helper: sem timedwait()" - " timeout, did collectd terminate?"); - dpdk_helper_stop(RESET); - } - /* Parent PID change means collectd died so quit the helper process. */ - if (ppid != getppid()) { - WARNING("dpdkstat-helper: parent PID changed, quitting."); - dpdk_helper_stop(RESET); +static void dpdk_stats_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, + const char *cnt_name) { + char *type_end; + type_end = strrchr(cnt_name, '_'); + + if ((type_end != NULL) && (strncmp(cnt_name, "rx_", strlen("rx_")) == 0)) { + if (strstr(type_end, "bytes") != NULL) { + sstrncpy(cnt_type, "if_rx_octets", cnt_type_len); + } else if (strstr(type_end, "error") != NULL) { + sstrncpy(cnt_type, "if_rx_errors", cnt_type_len); + } else if (strstr(type_end, "dropped") != NULL) { + sstrncpy(cnt_type, "if_rx_dropped", cnt_type_len); + } else if (strstr(type_end, "packets") != NULL) { + sstrncpy(cnt_type, "if_rx_packets", cnt_type_len); + } else if (strstr(type_end, "_placement") != NULL) { + sstrncpy(cnt_type, "if_rx_errors", cnt_type_len); + } else if (strstr(type_end, "_buff") != NULL) { + sstrncpy(cnt_type, "if_rx_errors", cnt_type_len); + } else { + /* Does not fit obvious type: use a more generic one */ + sstrncpy(cnt_type, "derive", cnt_type_len); } - /* Checking for DPDK primary process. */ - if (!rte_eal_primary_proc_alive(g_configuration->file_prefix)) { - if (g_configuration->eal_initialized) { - WARNING("dpdkstat-helper: no primary alive but EAL initialized:" - " quitting."); - dpdk_helper_stop(RESET); - } - g_configuration->helper_status = DPDK_HELPER_WAITING_ON_PRIMARY; - /* Back to start of while() - waiting for primary process */ - continue; + } else if ((type_end != NULL) && + (strncmp(cnt_name, "tx_", strlen("tx_"))) == 0) { + if (strstr(type_end, "bytes") != NULL) { + sstrncpy(cnt_type, "if_tx_octets", cnt_type_len); + } else if (strstr(type_end, "error") != NULL) { + sstrncpy(cnt_type, "if_tx_errors", cnt_type_len); + } else if (strstr(type_end, "dropped") != NULL) { + sstrncpy(cnt_type, "if_tx_dropped", cnt_type_len); + } else if (strstr(type_end, "packets") != NULL) { + sstrncpy(cnt_type, "if_tx_packets", cnt_type_len); + } else { + /* Does not fit obvious type: use a more generic one */ + sstrncpy(cnt_type, "derive", cnt_type_len); } - - if (!g_configuration->eal_initialized) { - /* Initialize EAL. */ - int ret = dpdk_helper_init_eal(); - if (ret != 0) { - WARNING("ERROR INITIALIZING EAL"); - dpdk_helper_stop(RESET); - } + } else if ((type_end != NULL) && + (strncmp(cnt_name, "flow_", strlen("flow_"))) == 0) { + + if (strstr(type_end, "_filters") != NULL) { + sstrncpy(cnt_type, "operations", cnt_type_len); + } else if (strstr(type_end, "error") != NULL) + sstrncpy(cnt_type, "errors", cnt_type_len); + + } else if ((type_end != NULL) && + (strncmp(cnt_name, "mac_", strlen("mac_"))) == 0) { + if (strstr(type_end, "error") != NULL) { + sstrncpy(cnt_type, "errors", cnt_type_len); } + } else { + /* Does not fit obvious type, or strrchr error: + * use a more generic type */ + sstrncpy(cnt_type, "derive", cnt_type_len); + } +} - g_configuration->helper_status = DPDK_HELPER_ALIVE_SENDING_STATS; +static void dpdk_stats_counter_submit(const char *plugin_instance, + const char *cnt_name, derive_t value, + cdtime_t port_read_time) { + value_list_t vl = VALUE_LIST_INIT; + vl.values = &(value_t){.derive = value}; + vl.values_len = 1; + vl.time = port_read_time; + sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + sstrncpy(vl.plugin, DPDK_STATS_PLUGIN, sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance)); + dpdk_stats_resolve_cnt_type(vl.type, sizeof(vl.type), cnt_name); + sstrncpy(vl.type_instance, cnt_name, sizeof(vl.type_instance)); + plugin_dispatch_values(&vl); +} - uint8_t nb_ports = rte_eth_dev_count(); - if (nb_ports == 0) { - DEBUG("dpdkstat-helper: No DPDK ports available. " - "Check bound devices to DPDK driver."); - dpdk_helper_stop(RESET); - } +static int dpdk_stats_counters_dispatch(dpdk_helper_ctx_t *phc) { + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(phc); - if (nb_ports > RTE_MAX_ETHPORTS) - nb_ports = RTE_MAX_ETHPORTS; + /* dispatch stats values to collectd */ - int len = 0, enabled_port_count = 0, num_xstats = 0; - for (uint8_t i = 0; i < nb_ports; i++) { - if (!(g_configuration->enabled_port_mask & (1 << i))) - continue; + DEBUG("%s:%s:%d ports=%u", DPDK_STATS_PLUGIN, __FUNCTION__, __LINE__, + ctx->ports_count); - if (g_configuration->helper_action == DPDK_HELPER_ACTION_COUNT_STATS) { -#if RTE_VERSION >= RTE_VERSION_16_07 - len = rte_eth_xstats_get_names(i, NULL, 0); -#else - len = rte_eth_xstats_get(i, NULL, 0); -#endif - if (len < 0) { - ERROR("dpdkstat-helper: Cannot get xstats count on port %" PRIu8, i); - break; - } - num_xstats += len; - g_configuration->num_stats_in_port[enabled_port_count] = len; - enabled_port_count++; - continue; - } else { - len = g_configuration->num_stats_in_port[enabled_port_count]; - g_configuration->port_read_time[enabled_port_count] = cdtime(); - ret = rte_eth_xstats_get( - i, g_configuration->xstats + num_xstats, - g_configuration->num_stats_in_port[enabled_port_count]); - if (ret < 0 || ret != len) { - DEBUG("dpdkstat-helper: Error reading xstats on port %" PRIu8 - " len = %d", - i, len); - break; - } -#if RTE_VERSION >= RTE_VERSION_16_07 - ret = rte_eth_xstats_get_names(i, g_configuration->xnames + num_xstats, - len); - if (ret < 0 || ret != len) { - ERROR("dpdkstat-helper: Error reading xstat names (port=%d; len=%d)", - i, len); - break; - } -#endif - num_xstats += g_configuration->num_stats_in_port[enabled_port_count]; - enabled_port_count++; - } - } /* for (nb_ports) */ - - if (g_configuration->helper_action == DPDK_HELPER_ACTION_COUNT_STATS) { - g_configuration->num_ports = enabled_port_count; - g_configuration->num_xstats = num_xstats; - DEBUG("dpdkstat-helper ports: %" PRIu32 ", num stats: %" PRIu32, - g_configuration->num_ports, g_configuration->num_xstats); - /* Exit, allowing collectd to re-init SHM to the right size */ - g_configuration->collectd_reinit_shm = REINIT_SHM; - dpdk_helper_stop(NO_RESET); + int stats_count = 0; + + for (int i = 0; i < ctx->ports_count; i++) { + if (!(ctx->config.enabled_port_mask & (1 << i))) + continue; + + char dev_name[64]; + if (ctx->config.port_name[i][0] != 0) { + ssnprintf(dev_name, sizeof(dev_name), "%s", ctx->config.port_name[i]); + } else { + ssnprintf(dev_name, sizeof(dev_name), "port.%d", i); } - /* Now kick collectd send thread to send the stats */ - int err = sem_post(&g_configuration->sema_stats_in_shm); - if (err) { - WARNING("dpdkstat: error posting semaphore to helper %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - dpdk_helper_stop(RESET); + + DEBUG(" === Dispatch stats for port %d (name=%s; stats_count=%d)", i, + dev_name, ctx->port_stats_count[i]); + + for (int j = 0; j < ctx->port_stats_count[i]; j++) { + const char *cnt_name = DPDK_STATS_XSTAT_GET_NAME(ctx, stats_count); + if (cnt_name == NULL) + WARNING("dpdkstat: Invalid counter name"); + else + dpdk_stats_counter_submit( + dev_name, cnt_name, + (derive_t)DPDK_STATS_XSTAT_GET_VALUE(ctx, stats_count), + ctx->port_read_time[i]); + stats_count++; + + assert(stats_count <= ctx->stats_count); } - } /* while(1) */ + } return 0; } -static void dpdk_submit_xstats(const char *dev_name, int count, - uint32_t counters, cdtime_t port_read_time) { - for (uint32_t j = 0; j < counters; j++) { - value_list_t vl = VALUE_LIST_INIT; - char *counter_name; - char *type_end; - - vl.values = &(value_t){.derive = (derive_t)DPDK_STATS_XSTAT_GET_VALUE( - g_configuration, count + j)}; - vl.values_len = 1; /* Submit stats one at a time */ - vl.time = port_read_time; - sstrncpy(vl.plugin, "dpdkstat", sizeof(vl.plugin)); - sstrncpy(vl.plugin_instance, dev_name, sizeof(vl.plugin_instance)); - counter_name = DPDK_STATS_XSTAT_GET_NAME(g_configuration, count + j); - if (counter_name == NULL) { - WARNING("dpdkstat: Failed to get counter name."); - return; - } +static int dpdk_stats_reinit_helper() { + DPDK_STATS_TRACE(); - type_end = strrchr(counter_name, '_'); - - if ((type_end != NULL) && - (strncmp(counter_name, "rx_", strlen("rx_")) == 0)) { - if (strstr(type_end, "bytes") != NULL) { - sstrncpy(vl.type, "if_rx_octets", sizeof(vl.type)); - } else if (strstr(type_end, "error") != NULL) { - sstrncpy(vl.type, "if_rx_errors", sizeof(vl.type)); - } else if (strstr(type_end, "dropped") != NULL) { - sstrncpy(vl.type, "if_rx_dropped", sizeof(vl.type)); - } else if (strstr(type_end, "packets") != NULL) { - sstrncpy(vl.type, "if_rx_packets", sizeof(vl.type)); - } else if (strstr(type_end, "_placement") != NULL) { - sstrncpy(vl.type, "if_rx_errors", sizeof(vl.type)); - } else if (strstr(type_end, "_buff") != NULL) { - sstrncpy(vl.type, "if_rx_errors", sizeof(vl.type)); - } else { - /* Does not fit obvious type: use a more generic one */ - sstrncpy(vl.type, "derive", sizeof(vl.type)); - } - - } else if ((type_end != NULL) && - (strncmp(counter_name, "tx_", strlen("tx_"))) == 0) { - if (strstr(type_end, "bytes") != NULL) { - sstrncpy(vl.type, "if_tx_octets", sizeof(vl.type)); - } else if (strstr(type_end, "error") != NULL) { - sstrncpy(vl.type, "if_tx_errors", sizeof(vl.type)); - } else if (strstr(type_end, "dropped") != NULL) { - sstrncpy(vl.type, "if_tx_dropped", sizeof(vl.type)); - } else if (strstr(type_end, "packets") != NULL) { - sstrncpy(vl.type, "if_tx_packets", sizeof(vl.type)); - } else { - /* Does not fit obvious type: use a more generic one */ - sstrncpy(vl.type, "derive", sizeof(vl.type)); - } - } else if ((type_end != NULL) && - (strncmp(counter_name, "flow_", strlen("flow_"))) == 0) { - - if (strstr(type_end, "_filters") != NULL) { - sstrncpy(vl.type, "operations", sizeof(vl.type)); - } else if (strstr(type_end, "error") != NULL) - sstrncpy(vl.type, "errors", sizeof(vl.type)); - - } else if ((type_end != NULL) && - (strncmp(counter_name, "mac_", strlen("mac_"))) == 0) { - if (strstr(type_end, "error") != NULL) { - sstrncpy(vl.type, "errors", sizeof(vl.type)); - } - } else { - /* Does not fit obvious type, or strrchr error: - * use a more generic type */ - sstrncpy(vl.type, "derive", sizeof(vl.type)); - } + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(g_hc); - sstrncpy(vl.type_instance, counter_name, sizeof(vl.type_instance)); - plugin_dispatch_values(&vl); - } -} + size_t data_size = sizeof(dpdk_stats_ctx_t) + + (ctx->stats_count * DPDK_STATS_CTX_GET_XSTAT_SIZE); -static int dpdk_read(user_data_t *ud) { - int ret = 0; + DEBUG("%s:%d helper reinit (new_size=%zu)", __FUNCTION__, __LINE__, + data_size); - /* - * Check if SHM flag is set to be re-initialized. AKA DPDK ports have been - * counted, so re-init SHM to be large enough to fit all the statistics. - */ - if (g_configuration->collectd_reinit_shm) { - DEBUG("dpdkstat: read() now reinit SHM then launching send-thread"); - dpdk_re_init_shm(); - } + dpdk_stats_ctx_t tmp_ctx; + dpdk_eal_config_t tmp_eal; - /* - * Check if DPDK proc is alive, and has already counted port / stats. This - * must be done in dpdk_read(), because the DPDK primary process may not be - * alive at dpdk_init() time. - */ - if (g_configuration->helper_status == DPDK_HELPER_NOT_INITIALIZED || - g_configuration->helper_status == DPDK_HELPER_GRACEFUL_QUIT) { - int action = DPDK_HELPER_ACTION_SEND_STATS; - if (g_configuration->num_xstats == 0) - action = DPDK_HELPER_ACTION_COUNT_STATS; - /* Spawn the helper thread to count stats or to read stats. */ - int err = dpdk_helper_spawn(action); - if (err) { - char errbuf[ERR_BUF_SIZE]; - ERROR("dpdkstat: error spawning helper %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - return -1; - } - } + memcpy(&tmp_ctx, ctx, sizeof(dpdk_stats_ctx_t)); + dpdk_helper_eal_config_get(g_hc, &tmp_eal); - pid_t ws = waitpid(g_configuration->helper_pid, NULL, WNOHANG); - /* - * Conditions under which to respawn helper: - * waitpid() fails, helper process died (or quit), so respawn - */ - _Bool respawn_helper = 0; - if (ws != 0) { - respawn_helper = 1; - } + dpdk_helper_shutdown(g_hc); - char buf[DPDKSTAT_MAX_BUFFER_SIZE]; - char out[DPDKSTAT_MAX_BUFFER_SIZE]; + g_hc = NULL; - /* non blocking check on helper logging pipe */ - struct pollfd fds = { - .fd = g_configuration->helper_pipes[0], .events = POLLIN, - }; - int data_avail = poll(&fds, 1, 0); - if (data_avail < 0) { + int ret; + ret = dpdk_helper_init(g_shm_name, data_size, &g_hc); + if (ret != 0) { char errbuf[ERR_BUF_SIZE]; - if (errno != EINTR || errno != EAGAIN) - ERROR("dpdkstats: poll(2) failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - } - while (data_avail) { - int nbytes = read(g_configuration->helper_pipes[0], buf, sizeof(buf)); - if (nbytes <= 0) - break; - ssnprintf(out, nbytes, "%s", buf); - DEBUG("dpdkstat: helper-proc: %s", out); + ERROR("%s: failed to initialize %s helper(error: %s)", DPDK_STATS_PLUGIN, + g_shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); + return ret; } - if (respawn_helper) { - if (g_configuration->helper_pid) - dpdk_helper_stop(RESET); - dpdk_helper_spawn(DPDK_HELPER_ACTION_COUNT_STATS); + ctx = DPDK_STATS_CTX_GET(g_hc); + memcpy(ctx, &tmp_ctx, sizeof(dpdk_stats_ctx_t)); + DPDK_STATS_CTX_INIT(ctx); + dpdk_helper_eal_config_set(g_hc, &tmp_eal); + + return ret; +} + +static int dpdk_stats_read(user_data_t *ud) { + DPDK_STATS_TRACE(); + + int ret = 0; + + if (g_hc == NULL) { + ERROR("dpdk stats plugin not initialized"); + return -EINVAL; } - /* Kick helper process through SHM */ - sem_post(&g_configuration->sema_helper_get_stats); + dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(g_hc); - cdtime_t now = cdtime(); - ret = sem_timedwait(&g_configuration->sema_stats_in_shm, - &CDTIME_T_TO_TIMESPEC(now + g_configuration->interval)); - if (ret == -1) { - if (errno == ETIMEDOUT) - DEBUG( - "dpdkstat: timeout in collectd thread: is a DPDK Primary running? "); + int result = 0; + ret = dpdk_helper_command(g_hc, DPDK_CMD_GET_STATS, &result, + ctx->config.interval); + if (ret != 0) { return 0; } - /* Dispatch the stats.*/ - uint32_t count = 0, port_num = 0; - - for (uint32_t i = 0; i < g_configuration->num_ports; i++) { - char dev_name[64]; - cdtime_t port_read_time = g_configuration->port_read_time[i]; - uint32_t counters_num = g_configuration->num_stats_in_port[i]; - size_t ports_max = CHAR_BIT * sizeof(g_configuration->enabled_port_mask); - for (size_t j = port_num; j < ports_max; j++) { - if ((g_configuration->enabled_port_mask & (1 << j)) != 0) - break; - port_num++; - } + if (result == -ENOBUFS) { + dpdk_stats_reinit_helper(); + } else if (result == -ENODEV) { + dpdk_helper_shutdown(g_hc); + } else if (result == 0) { + dpdk_stats_counters_dispatch(g_hc); + } - if (g_configuration->port_name[i][0] != 0) - ssnprintf(dev_name, sizeof(dev_name), "%s", - g_configuration->port_name[i]); - else - ssnprintf(dev_name, sizeof(dev_name), "port.%" PRIu32, port_num); - dpdk_submit_xstats(dev_name, count, counters_num, port_read_time); - count += counters_num; - port_num++; - } /* for each port */ return 0; } -static int dpdk_shm_cleanup(void) { - int ret = munmap(g_configuration, sizeof(dpdk_config_t)); - g_configuration = 0; - if (ret) { - ERROR("dpdkstat: munmap returned %d", ret); - return ret; - } - ret = shm_unlink(DPDK_SHM_NAME); - if (ret) { - ERROR("dpdkstat: shm_unlink returned %d", ret); +static int dpdk_stats_init(void) { + DPDK_STATS_TRACE(); + int ret = 0; + + ret = dpdk_stats_preinit(); + if (ret != 0) { return ret; } + return 0; } -static int dpdk_shutdown(void) { +static int dpdk_stats_shutdown(void) { + DPDK_STATS_TRACE(); + int ret = 0; - char errbuf[ERR_BUF_SIZE]; - close(g_configuration->helper_pipes[1]); - int err = kill(g_configuration->helper_pid, SIGKILL); - if (err) { - ERROR("dpdkstat: error sending sigkill to helper %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - ret = -1; - } - err = dpdk_shm_cleanup(); - if (err) { - ERROR("dpdkstat: error cleaning up SHM: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); - ret = -1; + + ret = dpdk_helper_shutdown(g_hc); + g_hc = NULL; + if (ret != 0) { + ERROR("%s: failed to cleanup %s helper", DPDK_STATS_PLUGIN, g_shm_name); + return ret; } return ret; } void module_register(void) { - plugin_register_complex_config("dpdkstat", dpdk_config); - plugin_register_init("dpdkstat", dpdk_init); - plugin_register_complex_read(NULL, "dpdkstat", dpdk_read, 0, NULL); - plugin_register_shutdown("dpdkstat", dpdk_shutdown); + plugin_register_init(DPDK_STATS_PLUGIN, dpdk_stats_init); + plugin_register_complex_config(DPDK_STATS_PLUGIN, dpdk_stats_config); + plugin_register_complex_read(NULL, DPDK_STATS_PLUGIN, dpdk_stats_read, 0, + NULL); + plugin_register_shutdown(DPDK_STATS_PLUGIN, dpdk_stats_shutdown); } diff --git a/src/drbd.c b/src/drbd.c index 2ee16567..97a4f032 100644 --- a/src/drbd.c +++ b/src/drbd.c @@ -57,7 +57,7 @@ static const char *drbd_names[] = { }; static size_t drbd_names_num = STATIC_ARRAY_SIZE(drbd_names); -static int drbd_init(void) { return (0); } +static int drbd_init(void) { return 0; } static int drbd_submit_fields(long int resource, char **fields, size_t fields_num) { @@ -67,14 +67,14 @@ static int drbd_submit_fields(long int resource, char **fields, if (resource < 0) { WARNING("drbd plugin: Unable to parse resource"); - return (EINVAL); + return EINVAL; } if (fields_num != drbd_names_num) { WARNING("drbd plugin: Wrong number of fields for " "r%ld statistics. Expected %zu, got %zu.", resource, drbd_names_num, fields_num); - return (EINVAL); + return EINVAL; } ssnprintf(plugin_instance, sizeof(plugin_instance), "r%ld", resource); @@ -86,7 +86,7 @@ static int drbd_submit_fields(long int resource, char **fields, continue; data = strchr(fields[i], ':'); if (data == NULL) - return (EINVAL); + return EINVAL; (void)parse_value(++data, &values[i], DS_TYPE_DERIVE); } @@ -103,7 +103,7 @@ static int drbd_submit_fields(long int resource, char **fields, plugin_dispatch_values(&vl); } - return (0); + return 0; } /* drbd_submit_fields */ static int drbd_read(void) { @@ -117,7 +117,7 @@ static int drbd_read(void) { fh = fopen(drbd_stats, "r"); if (fh == NULL) { WARNING("drbd plugin: Unable to open %s", drbd_stats); - return (EINVAL); + return EINVAL; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -142,7 +142,7 @@ static int drbd_read(void) { } /* while (fgets) */ fclose(fh); - return (0); + return 0; } /* void drbd_read */ void module_register(void) { diff --git a/src/email.c b/src/email.c index 50f76626..e5f015b2 100644 --- a/src/email.c +++ b/src/email.c @@ -159,18 +159,18 @@ static type_list_t list_check_copy; * Private functions */ static int email_config(const char *key, const char *value) { - if (0 == strcasecmp(key, "SocketFile")) { - if (NULL != sock_file) + if (strcasecmp(key, "SocketFile") == 0) { + if (sock_file != NULL) free(sock_file); sock_file = sstrdup(value); - } else if (0 == strcasecmp(key, "SocketGroup")) { - if (NULL != sock_group) + } else if (strcasecmp(key, "SocketGroup") == 0) { + if (sock_group != NULL) free(sock_group); sock_group = sstrdup(value); - } else if (0 == strcasecmp(key, "SocketPerms")) { + } else if (strcasecmp(key, "SocketPerms") == 0) { /* the user is responsible for providing reasonable values */ sock_perms = (int)strtol(value, NULL, 8); - } else if (0 == strcasecmp(key, "MaxConns")) { + } else if (strcasecmp(key, "MaxConns") == 0) { long int tmp = strtol(value, NULL, 0); if (tmp < 1) { @@ -200,7 +200,7 @@ static int email_config(const char *key, const char *value) { /* Increment the value of the given name in the given list by incr. */ static void type_list_incr(type_list_t *list, char *name, int incr) { - if (NULL == list->head) { + if (list->head == NULL) { list->head = smalloc(sizeof(*list->head)); list->head->name = sstrdup(name); @@ -212,11 +212,11 @@ static void type_list_incr(type_list_t *list, char *name, int incr) { type_t *ptr; for (ptr = list->head; NULL != ptr; ptr = ptr->next) { - if (0 == strcmp(name, ptr->name)) + if (strcmp(name, ptr->name) == 0) break; } - if (NULL == ptr) { + if (ptr == NULL) { list->tail->next = smalloc(sizeof(*list->tail->next)); list->tail = list->tail->next; @@ -238,14 +238,14 @@ static void *collect(void *arg) { pthread_mutex_lock(&conns_mutex); - while (NULL == conns.head) { + while (conns.head == NULL) { pthread_cond_wait(&conn_available, &conns_mutex); } connection = conns.head; conns.head = conns.head->next; - if (NULL == conns.head) { + if (conns.head == NULL) { conns.tail = NULL; } @@ -263,8 +263,8 @@ static void *collect(void *arg) { int len = 0; errno = 0; - if (NULL == fgets(line, sizeof(line), this->socket)) { - if (0 != errno) { + if (fgets(line, sizeof(line), this->socket) == NULL) { + if (errno != 0) { char errbuf[1024]; log_err("collect: reading from socket (fd #%i) " "failed: %s", @@ -275,13 +275,13 @@ static void *collect(void *arg) { } len = strlen(line); - if (('\n' != line[len - 1]) && ('\r' != line[len - 1])) { + if ((line[len - 1] != '\n') && (line[len - 1] != '\r')) { log_warn("collect: line too long (> %zu characters): " "'%s' (truncated)", sizeof(line) - 1, line); - while (NULL != fgets(line, sizeof(line), this->socket)) - if (('\n' == line[len - 1]) || ('\r' == line[len - 1])) + while (fgets(line, sizeof(line), this->socket) != NULL) + if ((line[len - 1] == '\n') || (line[len - 1] == '\r')) break; continue; } @@ -293,18 +293,18 @@ static void *collect(void *arg) { log_debug("collect: line = '%s'", line); - if (':' != line[1]) { + if (line[1] != ':') { log_err("collect: syntax error in line '%s'", line); continue; } - if ('e' == line[0]) { /* e:: */ + if (line[0] == 'e') { /* e:: */ char *ptr = NULL; char *type = strtok_r(line + 2, ":", &ptr); char *tmp = strtok_r(NULL, ":", &ptr); int bytes = 0; - if (NULL == tmp) { + if (tmp == NULL) { log_err("collect: syntax error in line '%s'", line); continue; } @@ -320,13 +320,13 @@ static void *collect(void *arg) { type_list_incr(&list_size, type, /* increment = */ bytes); pthread_mutex_unlock(&size_mutex); } - } else if ('s' == line[0]) { /* s: */ + } else if (line[0] == 's') { /* s: */ pthread_mutex_lock(&score_mutex); score = (score * (double)score_count + atof(line + 2)) / (double)(score_count + 1); ++score_count; pthread_mutex_unlock(&score_mutex); - } else if ('c' == line[0]) { /* c:[,,...] */ + } else if (line[0] == 'c') { /* c:[,,...] */ char *dummy = line + 2; char *endptr = NULL; char *type; @@ -357,7 +357,7 @@ static void *collect(void *arg) { } /* while (1) */ pthread_exit((void *)0); - return ((void *)0); + return (void *)0; } /* static void *collect (void *) */ static void *open_connection(void __attribute__((unused)) * arg) { @@ -366,7 +366,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { /* create UNIX socket */ errno = 0; - if (-1 == (connector_socket = socket(PF_UNIX, SOCK_STREAM, 0))) { + if ((connector_socket = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) { char errbuf[1024]; disabled = 1; log_err("socket() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); @@ -379,9 +379,8 @@ static void *open_connection(void __attribute__((unused)) * arg) { sstrncpy(addr.sun_path, path, (size_t)(UNIX_PATH_MAX - 1)); errno = 0; - if (-1 == - bind(connector_socket, (struct sockaddr *)&addr, - offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path))) { + if (bind(connector_socket, (struct sockaddr *)&addr, + offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path)) == -1) { char errbuf[1024]; disabled = 1; close(connector_socket); @@ -391,7 +390,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { } errno = 0; - if (-1 == listen(connector_socket, 5)) { + if (listen(connector_socket, 5) == -1) { char errbuf[1024]; disabled = 1; close(connector_socket); @@ -425,7 +424,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { } errno = 0; - if (0 != chmod(path, sock_perms)) { + if (chmod(path, sock_perms) != 0) { char errbuf[1024]; log_warn("chmod() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); } @@ -466,7 +465,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { pthread_mutex_lock(&available_mutex); - while (0 == available_collectors) { + while (available_collectors == 0) { pthread_cond_wait(&collector_available, &available_mutex); } @@ -505,7 +504,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { connection->socket = fdopen(remote, "r"); connection->next = NULL; - if (NULL == connection->socket) { + if (connection->socket == NULL) { close(remote); sfree(connection); continue; @@ -513,7 +512,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { pthread_mutex_lock(&conns_mutex); - if (NULL == conns.head) { + if (conns.head == NULL) { conns.head = connection; conns.tail = connection; } else { @@ -527,7 +526,7 @@ static void *open_connection(void __attribute__((unused)) * arg) { } pthread_exit((void *)0); - return ((void *)0); + return (void *)0; } /* static void *open_connection (void *) */ static int email_init(void) { @@ -537,10 +536,10 @@ static int email_init(void) { disabled = 1; log_err("plugin_thread_create() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } /* int email_init */ static void type_list_free(type_list_t *t) { @@ -605,11 +604,11 @@ static int email_shutdown(void) { type_list_free(&list_check); type_list_free(&list_check_copy); - unlink((NULL == sock_file) ? SOCK_PATH : sock_file); + unlink((sock_file == NULL) ? SOCK_PATH : sock_file); sfree(sock_file); sfree(sock_group); - return (0); + return 0; } /* static void email_shutdown (void) */ static void email_submit(const char *type, const char *type_instance, @@ -632,14 +631,14 @@ static void email_submit(const char *type, const char *type_instance, static void copy_type_list(type_list_t *l1, type_list_t *l2) { type_t *last = NULL; - for (type_t *ptr1 = l1->head, *ptr2 = l2->head; NULL != ptr1; + for (type_t *ptr1 = l1->head, *ptr2 = l2->head; ptr1 != NULL; ptr1 = ptr1->next, last = ptr2, ptr2 = ptr2->next) { - if (NULL == ptr2) { + if (ptr2 == NULL) { ptr2 = smalloc(sizeof(*ptr2)); ptr2->name = NULL; ptr2->next = NULL; - if (NULL == last) { + if (last == NULL) { l2->head = ptr2; } else { last->next = ptr2; @@ -648,7 +647,7 @@ static void copy_type_list(type_list_t *l1, type_list_t *l2) { l2->tail = ptr2; } - if (NULL == ptr2->name) { + if (ptr2->name == NULL) { ptr2->name = sstrdup(ptr1->name); } @@ -663,7 +662,7 @@ static int email_read(void) { int score_count_old; if (disabled) - return (-1); + return -1; /* email count */ pthread_mutex_lock(&count_mutex); @@ -672,7 +671,7 @@ static int email_read(void) { pthread_mutex_unlock(&count_mutex); - for (type_t *ptr = list_count_copy.head; NULL != ptr; ptr = ptr->next) { + for (type_t *ptr = list_count_copy.head; ptr != NULL; ptr = ptr->next) { email_submit("email_count", ptr->name, ptr->value); } @@ -683,7 +682,7 @@ static int email_read(void) { pthread_mutex_unlock(&size_mutex); - for (type_t *ptr = list_size_copy.head; NULL != ptr; ptr = ptr->next) { + for (type_t *ptr = list_size_copy.head; ptr != NULL; ptr = ptr->next) { email_submit("email_size", ptr->name, ptr->value); } @@ -707,10 +706,10 @@ static int email_read(void) { pthread_mutex_unlock(&check_mutex); - for (type_t *ptr = list_check_copy.head; NULL != ptr; ptr = ptr->next) + for (type_t *ptr = list_check_copy.head; ptr != NULL; ptr = ptr->next) email_submit("spam_check", ptr->name, ptr->value); - return (0); + return 0; } /* int email_read */ void module_register(void) { @@ -719,5 +718,3 @@ void module_register(void) { plugin_register_read("email", email_read); plugin_register_shutdown("email", email_shutdown); } /* void module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/entropy.c b/src/entropy.c index de35291c..c7b5b3f3 100644 --- a/src/entropy.c +++ b/src/entropy.c @@ -50,11 +50,11 @@ static int entropy_read(void) { value_t v; if (parse_value_file(ENTROPY_FILE, &v, DS_TYPE_GAUGE) != 0) { ERROR("entropy plugin: Reading \"" ENTROPY_FILE "\" failed."); - return (-1); + return -1; } entropy_submit(v); - return (0); + return 0; } void module_register(void) { diff --git a/src/ethstat.c b/src/ethstat.c index bd55252f..3c03e36a 100644 --- a/src/ethstat.c +++ b/src/ethstat.c @@ -62,19 +62,19 @@ static int ethstat_add_interface(const oconfig_item_t *ci) /* {{{ */ tmp = realloc(interfaces, sizeof(*interfaces) * (interfaces_num + 1)); if (tmp == NULL) - return (-1); + return -1; interfaces = tmp; interfaces[interfaces_num] = NULL; status = cf_util_get_string(ci, interfaces + interfaces_num); if (status != 0) - return (status); + return status; interfaces_num++; INFO("ethstat plugin: Registered interface %s", interfaces[interfaces_num - 1]); - return (0); + return 0; } /* }}} int ethstat_add_interface */ static int ethstat_add_map(const oconfig_item_t *ci) /* {{{ */ @@ -90,20 +90,20 @@ static int ethstat_add_map(const oconfig_item_t *ci) /* {{{ */ ERROR("ethstat plugin: The %s option requires " "two or three string arguments.", ci->key); - return (-1); + return -1; } key = strdup(ci->values[0].value.string); if (key == NULL) { ERROR("ethstat plugin: strdup(3) failed."); - return (ENOMEM); + return ENOMEM; } map = calloc(1, sizeof(*map)); if (map == NULL) { sfree(key); ERROR("ethstat plugin: calloc failed."); - return (ENOMEM); + return ENOMEM; } sstrncpy(map->type, ci->values[1].value.string, sizeof(map->type)); @@ -117,7 +117,7 @@ static int ethstat_add_map(const oconfig_item_t *ci) /* {{{ */ sfree(map); sfree(key); ERROR("ethstat plugin: c_avl_create() failed."); - return (-1); + return -1; } } @@ -132,10 +132,10 @@ static int ethstat_add_map(const oconfig_item_t *ci) /* {{{ */ sfree(map); sfree(key); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int ethstat_add_map */ static int ethstat_config(oconfig_item_t *ci) /* {{{ */ @@ -154,7 +154,7 @@ static int ethstat_config(oconfig_item_t *ci) /* {{{ */ child->key); } - return (0); + return 0; } /* }}} */ static void ethstat_submit_value(const char *device, const char *type_instance, @@ -223,14 +223,14 @@ static int ethstat_read_interface(char *device) { ERROR("ethstat plugin: Failed to get driver information " "from %s: %s", device, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } n_stats = (size_t)drvinfo.n_stats; if (n_stats < 1) { close(fd); ERROR("ethstat plugin: No stats available for %s", device); - return (-1); + return -1; } strings_size = sizeof(struct ethtool_gstrings) + (n_stats * ETH_GSTRING_LEN); @@ -243,7 +243,7 @@ static int ethstat_read_interface(char *device) { sfree(strings); sfree(stats); ERROR("ethstat plugin: malloc failed."); - return (-1); + return -1; } strings->cmd = ETHTOOL_GSTRINGS; @@ -258,7 +258,7 @@ static int ethstat_read_interface(char *device) { free(stats); ERROR("ethstat plugin: Cannot get strings from %s: %s", device, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } stats->cmd = ETHTOOL_GSTATS; @@ -272,7 +272,7 @@ static int ethstat_read_interface(char *device) { free(stats); ERROR("ethstat plugin: Reading statistics from %s failed: %s", device, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (size_t i = 0; i < n_stats; i++) { @@ -292,7 +292,7 @@ static int ethstat_read_interface(char *device) { sfree(strings); sfree(stats); - return (0); + return 0; } /* }}} ethstat_read_interface */ static int ethstat_read(void) { @@ -307,7 +307,7 @@ static int ethstat_shutdown(void) { void *value = NULL; if (value_map == NULL) - return (0); + return 0; while (c_avl_pick(value_map, &key, &value) == 0) { sfree(key); @@ -317,7 +317,7 @@ static int ethstat_shutdown(void) { c_avl_destroy(value_map); value_map = NULL; - return (0); + return 0; } void module_register(void) { @@ -325,5 +325,3 @@ void module_register(void) { plugin_register_read("ethstat", ethstat_read); plugin_register_shutdown("ethstat", ethstat_shutdown); } - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/exec.c b/src/exec.c index 28380ac3..3d12a2de 100644 --- a/src/exec.c +++ b/src/exec.c @@ -108,26 +108,26 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ if (ci->children_num != 0) { WARNING("exec plugin: The config option `%s' may not be a block.", ci->key); - return (-1); + return -1; } if (ci->values_num < 2) { WARNING("exec plugin: The config option `%s' needs at least two " "arguments.", ci->key); - return (-1); + return -1; } if ((ci->values[0].type != OCONFIG_TYPE_STRING) || (ci->values[1].type != OCONFIG_TYPE_STRING)) { WARNING("exec plugin: The first two arguments to the `%s' option must " "be string arguments.", ci->key); - return (-1); + return -1; } pl = calloc(1, sizeof(*pl)); if (pl == NULL) { ERROR("exec plugin: calloc failed."); - return (-1); + return -1; } if (strcasecmp("NotificationExec", ci->key) == 0) @@ -139,7 +139,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ if (pl->user == NULL) { ERROR("exec plugin: strdup failed."); sfree(pl); - return (-1); + return -1; } pl->group = strchr(pl->user, ':'); @@ -153,7 +153,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ ERROR("exec plugin: strdup failed."); sfree(pl->user); sfree(pl); - return (-1); + return -1; } pl->argv = calloc(ci->values_num, sizeof(*pl->argv)); @@ -162,7 +162,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ sfree(pl->exec); sfree(pl->user); sfree(pl); - return (-1); + return -1; } { @@ -179,7 +179,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ sfree(pl->exec); sfree(pl->user); sfree(pl); - return (-1); + return -1; } for (i = 1; i < (ci->values_num - 1); i++) { @@ -213,7 +213,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ sfree(pl->exec); sfree(pl->user); sfree(pl); - return (-1); + return -1; } for (i = 0; pl->argv[i] != NULL; i++) { @@ -223,7 +223,7 @@ static int exec_config_exec(oconfig_item_t *ci) /* {{{ */ pl->next = pl_head; pl_head = pl; - return (0); + return 0; } /* int exec_config_exec }}} */ static int exec_config(oconfig_item_t *ci) /* {{{ */ @@ -238,7 +238,7 @@ static int exec_config(oconfig_item_t *ci) /* {{{ */ } } /* for (i) */ - return (0); + return 0; } /* int exec_config }}} */ static void set_environment(void) /* {{{ */ @@ -332,7 +332,7 @@ static int create_pipe(int fd_pipe[2]) /* {{{ */ if (status != 0) { ERROR("exec plugin: pipe failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } return 0; @@ -372,7 +372,7 @@ static int fork_child(program_list_t *pl, int *fd_in, int *fd_out, char nambuf[4096]; if (pl->pid != 0) - return (-1); + return -1; if ((create_pipe(fd_pipe_in) == -1) || (create_pipe(fd_pipe_out) == -1) || (create_pipe(fd_pipe_err) == -1)) @@ -401,19 +401,19 @@ static int fork_child(program_list_t *pl, int *fd_in, int *fd_out, /* The group configured in the configfile is set as effective group, because * this way the forked process can (re-)gain the user's primary group. */ egid = -1; - if (NULL != pl->group) { - if ('\0' != *pl->group) { + if (pl->group != NULL) { + if (*pl->group != '\0') { struct group *gr_ptr = NULL; struct group gr; status = getgrnam_r(pl->group, &gr, nambuf, sizeof(nambuf), &gr_ptr); - if (0 != status) { + if (status != 0) { ERROR("exec plugin: Failed to get group information " "for group ``%s'': %s", pl->group, sstrerror(status, errbuf, sizeof(errbuf))); goto failed; } - if (NULL == gr_ptr) { + if (gr_ptr == NULL) { ERROR("exec plugin: No such group: `%s'", pl->group); goto failed; } @@ -487,26 +487,26 @@ static int fork_child(program_list_t *pl, int *fd_in, int *fd_out, else close(fd_pipe_err[0]); - return (pid); + return pid; failed: close_pipe(fd_pipe_in); close_pipe(fd_pipe_out); close_pipe(fd_pipe_err); - return (-1); + return -1; } /* int fork_child }}} */ static int parse_line(char *buffer) /* {{{ */ { if (strncasecmp("PUTVAL", buffer, strlen("PUTVAL")) == 0) - return (cmd_handle_putval(stdout, buffer)); + return cmd_handle_putval(stdout, buffer); else if (strncasecmp("PUTNOTIF", buffer, strlen("PUTNOTIF")) == 0) - return (handle_putnotif(stdout, buffer)); + return handle_putnotif(stdout, buffer); else { ERROR("exec plugin: Unable to parse command, ignoring line: \"%s\"", buffer); - return (-1); + return -1; } } /* int parse_line }}} */ @@ -655,7 +655,7 @@ static void *exec_read_one(void *arg) /* {{{ */ close(fd_err); pthread_exit((void *)0); - return (NULL); + return NULL; } /* void *exec_read_one }}} */ static void *exec_notification_one(void *arg) /* {{{ */ @@ -737,7 +737,7 @@ static void *exec_notification_one(void *arg) /* {{{ */ n->meta = NULL; sfree(arg); pthread_exit((void *)0); - return (NULL); + return NULL; } /* void *exec_notification_one }}} */ static int exec_init(void) /* {{{ */ @@ -763,7 +763,7 @@ static int exec_init(void) /* {{{ */ } #endif - return (0); + return 0; } /* int exec_init }}} */ static int exec_read(void) /* {{{ */ @@ -791,7 +791,7 @@ static int exec_read(void) /* {{{ */ pthread_attr_destroy(&attr); } /* for (pl) */ - return (0); + return 0; } /* int exec_read }}} */ static int exec_notification(const notification_t *n, /* {{{ */ @@ -831,7 +831,7 @@ static int exec_notification(const notification_t *n, /* {{{ */ pthread_attr_destroy(&attr); } /* for (pl) */ - return (0); + return 0; } /* }}} int exec_notification */ static int exec_shutdown(void) /* {{{ */ @@ -855,7 +855,7 @@ static int exec_shutdown(void) /* {{{ */ } /* while (pl) */ pl_head = NULL; - return (0); + return 0; } /* int exec_shutdown }}} */ void module_register(void) { @@ -866,7 +866,3 @@ void module_register(void) { /* user_data = */ NULL); plugin_register_shutdown("exec", exec_shutdown); } /* void module_register */ - -/* - * vim:shiftwidth=2:softtabstop=2:tabstop=8:fdm=marker - */ diff --git a/src/fhcount.c b/src/fhcount.c index 92107839..36115305 100644 --- a/src/fhcount.c +++ b/src/fhcount.c @@ -49,7 +49,7 @@ static int fhcount_config(const char *key, const char *value) { ret = 0; } - return (ret); + return ret; } static void fhcount_submit(const char *type, const char *type_instance, @@ -82,12 +82,12 @@ static int fhcount_read(void) { fp = fopen("/proc/sys/fs/file-nr", "r"); if (fp == NULL) { ERROR("fhcount: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (EXIT_FAILURE); + return EXIT_FAILURE; } if (fgets(buffer, buffer_len, fp) == NULL) { ERROR("fhcount: fgets: %s", sstrerror(errno, errbuf, sizeof(errbuf))); fclose(fp); - return (EXIT_FAILURE); + return EXIT_FAILURE; } fclose(fp); @@ -96,7 +96,7 @@ static int fhcount_read(void) { if (numfields != 3) { ERROR("fhcount: Line doesn't contain 3 fields"); - return (EXIT_FAILURE); + return EXIT_FAILURE; } // Define the values @@ -117,7 +117,7 @@ static int fhcount_read(void) { fhcount_submit("percent", "unused", (gauge_t)prc_unused); } - return (0); + return 0; } void module_register(void) { diff --git a/src/filecount.c b/src/filecount.c index a78b8800..7eb51047 100644 --- a/src/filecount.c +++ b/src/filecount.c @@ -105,16 +105,16 @@ static int fc_config_set_instance(fc_directory_conf_t *dir, const char *str) { /* do nothing */; if (*ptr == 0) - return (-1); + return -1; copy = strdup(ptr); if (copy == NULL) - return (-1); + return -1; sfree(dir->instance); dir->instance = copy; - return (0); + return 0; } /* int fc_config_set_instance */ static int fc_config_add_dir_instance(fc_directory_conf_t *dir, @@ -122,10 +122,10 @@ static int fc_config_add_dir_instance(fc_directory_conf_t *dir, if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("filecount plugin: The `Instance' config option needs exactly " "one string argument."); - return (-1); + return -1; } - return (fc_config_set_instance(dir, ci->values[0].value.string)); + return fc_config_set_instance(dir, ci->values[0].value.string); } /* int fc_config_add_dir_instance */ static int fc_config_add_dir_name(fc_directory_conf_t *dir, @@ -135,19 +135,19 @@ static int fc_config_add_dir_name(fc_directory_conf_t *dir, if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("filecount plugin: The `Name' config option needs exactly one " "string argument."); - return (-1); + return -1; } temp = strdup(ci->values[0].value.string); if (temp == NULL) { ERROR("filecount plugin: strdup failed."); - return (-1); + return -1; } sfree(dir->name); dir->name = temp; - return (0); + return 0; } /* int fc_config_add_dir_name */ static int fc_config_add_dir_mtime(fc_directory_conf_t *dir, @@ -159,12 +159,12 @@ static int fc_config_add_dir_mtime(fc_directory_conf_t *dir, (ci->values[0].type != OCONFIG_TYPE_NUMBER))) { WARNING("filecount plugin: The `MTime' config option needs exactly one " "string or numeric argument."); - return (-1); + return -1; } if (ci->values[0].type == OCONFIG_TYPE_NUMBER) { dir->mtime = (int64_t)ci->values[0].value.number; - return (0); + return 0; } errno = 0; @@ -174,7 +174,7 @@ static int fc_config_add_dir_mtime(fc_directory_conf_t *dir, (endptr == ci->values[0].value.string)) { WARNING("filecount plugin: Converting `%s' to a number failed.", ci->values[0].value.string); - return (-1); + return -1; } switch (*endptr) { @@ -210,12 +210,12 @@ static int fc_config_add_dir_mtime(fc_directory_conf_t *dir, default: WARNING("filecount plugin: Invalid suffix for `MTime': `%c'", *endptr); - return (-1); + return -1; } /* switch (*endptr) */ dir->mtime = (int64_t)temp; - return (0); + return 0; } /* int fc_config_add_dir_mtime */ static int fc_config_add_dir_size(fc_directory_conf_t *dir, @@ -227,12 +227,12 @@ static int fc_config_add_dir_size(fc_directory_conf_t *dir, (ci->values[0].type != OCONFIG_TYPE_NUMBER))) { WARNING("filecount plugin: The `Size' config option needs exactly one " "string or numeric argument."); - return (-1); + return -1; } if (ci->values[0].type == OCONFIG_TYPE_NUMBER) { dir->size = (int64_t)ci->values[0].value.number; - return (0); + return 0; } errno = 0; @@ -242,7 +242,7 @@ static int fc_config_add_dir_size(fc_directory_conf_t *dir, (endptr == ci->values[0].value.string)) { WARNING("filecount plugin: Converting `%s' to a number failed.", ci->values[0].value.string); - return (-1); + return -1; } switch (*endptr) { @@ -278,12 +278,12 @@ static int fc_config_add_dir_size(fc_directory_conf_t *dir, default: WARNING("filecount plugin: Invalid suffix for `Size': `%c'", *endptr); - return (-1); + return -1; } /* switch (*endptr) */ dir->size = (int64_t)temp; - return (0); + return 0; } /* int fc_config_add_dir_size */ static int fc_config_add_dir_option(fc_directory_conf_t *dir, @@ -291,7 +291,7 @@ static int fc_config_add_dir_option(fc_directory_conf_t *dir, if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) { WARNING("filecount plugin: The `Recursive' config options needs exactly " "one boolean argument."); - return (-1); + return -1; } if (ci->values[0].value.boolean) @@ -299,7 +299,7 @@ static int fc_config_add_dir_option(fc_directory_conf_t *dir, else dir->options &= ~bit; - return (0); + return 0; } /* int fc_config_add_dir_option */ static int fc_config_add_dir(oconfig_item_t *ci) { @@ -309,21 +309,21 @@ static int fc_config_add_dir(oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("filecount plugin: `Directory' needs exactly one string " "argument."); - return (-1); + return -1; } /* Initialize `dir' */ dir = calloc(1, sizeof(*dir)); if (dir == NULL) { ERROR("filecount plugin: calloc failed."); - return (-1); + return -1; } dir->path = strdup(ci->values[0].value.string); if (dir->path == NULL) { ERROR("filecount plugin: strdup failed."); sfree(dir); - return (-1); + return -1; } fc_config_set_instance(dir, dir->path); @@ -380,10 +380,10 @@ static int fc_config_add_dir(oconfig_item_t *ci) { sfree(dir->instance); sfree(dir->path); sfree(dir); - return (-1); + return -1; } - return (0); + return 0; } /* int fc_config_add_dir */ static int fc_config(oconfig_item_t *ci) { @@ -397,16 +397,16 @@ static int fc_config(oconfig_item_t *ci) { } } /* for (ci->children) */ - return (0); + return 0; } /* int fc_config */ static int fc_init(void) { if (directories_num < 1) { WARNING("filecount plugin: No directories have been configured."); - return (-1); + return -1; } - return (0); + return 0; } /* int fc_init */ static int fc_read_dir_callback(const char *dirname, const char *filename, @@ -417,29 +417,29 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, int status; if (dir == NULL) - return (-1); + return -1; ssnprintf(abs_path, sizeof(abs_path), "%s/%s", dirname, filename); status = lstat(abs_path, &statbuf); if (status != 0) { ERROR("filecount plugin: stat (%s) failed.", abs_path); - return (-1); + return -1; } if (S_ISDIR(statbuf.st_mode) && (dir->options & FC_RECURSIVE)) { status = walk_directory( abs_path, fc_read_dir_callback, dir, /* include hidden = */ (dir->options & FC_HIDDEN) ? 1 : 0); - return (status); + return status; } else if (!S_ISREG(statbuf.st_mode)) { - return (0); + return 0; } if (dir->name != NULL) { status = fnmatch(dir->name, filename, /* flags = */ 0); if (status != 0) - return (0); + return 0; } if (dir->mtime != 0) { @@ -455,7 +455,7 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, if (((dir->mtime < 0) && (statbuf.st_mtime < mtime)) || ((dir->mtime > 0) && (statbuf.st_mtime > mtime))) - return (0); + return 0; } if (dir->size != 0) { @@ -468,13 +468,13 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, if (((dir->size < 0) && (statbuf.st_size > size)) || ((dir->size > 0) && (statbuf.st_size < size))) - return (0); + return 0; } dir->files_num++; dir->files_size += (uint64_t)statbuf.st_size; - return (0); + return 0; } /* int fc_read_dir_callback */ static int fc_read_dir(fc_directory_conf_t *dir) { @@ -491,19 +491,19 @@ static int fc_read_dir(fc_directory_conf_t *dir) { /* include hidden */ (dir->options & FC_HIDDEN) ? 1 : 0); if (status != 0) { WARNING("filecount plugin: walk_directory (%s) failed.", dir->path); - return (-1); + return -1; } fc_submit_dir(dir); - return (0); + return 0; } /* int fc_read_dir */ static int fc_read(void) { for (size_t i = 0; i < directories_num; i++) fc_read_dir(directories[i]); - return (0); + return 0; } /* int fc_read */ void module_register(void) { @@ -511,7 +511,3 @@ void module_register(void) { plugin_register_init("filecount", fc_init); plugin_register_read("filecount", fc_read); } /* void module_register */ - -/* - * vim: set sw=2 sts=2 et : - */ diff --git a/src/fscache.c b/src/fscache.c index c410ea39..dd36b8b9 100644 --- a/src/fscache.c +++ b/src/fscache.c @@ -209,13 +209,11 @@ static int fscache_read(void) { } else { printf("cant open file\n"); - return (-1); + return -1; } - return (0); + return 0; } void module_register(void) { plugin_register_read("fscache", fscache_read); } /* void module_register */ - -/* vim: set sw=4 sts=4 et : */ diff --git a/src/gmond.c b/src/gmond.c index fc9a2326..c6804276 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -152,7 +152,7 @@ static metric_map_t *metric_lookup(const char *key) /* {{{ */ } if (i >= map_len) - return (NULL); + return NULL; /* Look up the DS type and ds_index. */ if (map[i].ds_type < 0) /* {{{ */ @@ -162,14 +162,14 @@ static metric_map_t *metric_lookup(const char *key) /* {{{ */ ds = plugin_get_ds(map[i].type); if (ds == NULL) { WARNING("gmond plugin: Type not defined: %s", map[i].type); - return (NULL); + return NULL; } if ((map[i].ds_name == NULL) && (ds->ds_num != 1)) { WARNING("gmond plugin: No data source name defined for metric %s, " "but type %s has more than one data source.", map[i].ganglia_name, map[i].type); - return (NULL); + return NULL; } if (map[i].ds_name == NULL) { @@ -185,7 +185,7 @@ static metric_map_t *metric_lookup(const char *key) /* {{{ */ WARNING("gmond plugin: There is no data source " "named `%s' in type `%s'.", map[i].ds_name, ds->type); - return (NULL); + return NULL; } map[i].ds_index = j; } @@ -193,7 +193,7 @@ static metric_map_t *metric_lookup(const char *key) /* {{{ */ map[i].ds_type = ds->ds[map[i].ds_index].type; } /* }}} if ((map[i].ds_type < 0) || (map[i].ds_index < 0)) */ - return (map + i); + return map + i; } /* }}} metric_map_t *metric_lookup */ static int create_sockets(socket_entry_t **ret_sockets, /* {{{ */ @@ -208,7 +208,7 @@ static int create_sockets(socket_entry_t **ret_sockets, /* {{{ */ int status; if (*ret_sockets != NULL) - return (EINVAL); + return EINVAL; struct addrinfo ai_hints = {.ai_family = AF_UNSPEC, .ai_flags = AI_ADDRCONFIG | AI_PASSIVE, @@ -223,7 +223,7 @@ static int create_sockets(socket_entry_t **ret_sockets, /* {{{ */ (service == NULL) ? "(null)" : service, (ai_return == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(ai_return)); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -348,12 +348,12 @@ static int create_sockets(socket_entry_t **ret_sockets, /* {{{ */ if (sockets_num == 0) { sfree(sockets); - return (-1); + return -1; } *ret_sockets = sockets; *ret_sockets_num = sockets_num; - return (0); + return 0; } /* }}} int create_sockets */ static int request_meta_data(const char *host, const char *name) /* {{{ */ @@ -371,7 +371,7 @@ static int request_meta_data(const char *host, const char *name) /* {{{ */ (msg.Ganglia_metadata_msg_u.grequest.metric_id.name == NULL)) { sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.host); sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.name); - return (-1); + return -1; } xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE); @@ -379,7 +379,7 @@ static int request_meta_data(const char *host, const char *name) /* {{{ */ if (!xdr_Ganglia_metadata_msg(&xdr, &msg)) { sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.host); sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.name); - return (-1); + return -1; } buffer_size = xdr_getpos(&xdr); @@ -403,7 +403,7 @@ static int request_meta_data(const char *host, const char *name) /* {{{ */ sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.host); sfree(msg.Ganglia_metadata_msg_u.grequest.metric_id.name); - return (0); + return 0; } /* }}} int request_meta_data */ static staging_entry_t *staging_entry_get(const char *host, /* {{{ */ @@ -415,7 +415,7 @@ static staging_entry_t *staging_entry_get(const char *host, /* {{{ */ int status; if (staging_tree == NULL) - return (NULL); + return NULL; ssnprintf(key, sizeof(key), "%s/%s/%s", host, type, (type_instance != NULL) ? type_instance : ""); @@ -423,12 +423,12 @@ static staging_entry_t *staging_entry_get(const char *host, /* {{{ */ se = NULL; status = c_avl_get(staging_tree, key, (void *)&se); if (status == 0) - return (se); + return se; /* insert new entry */ se = calloc(1, sizeof(*se)); if (se == NULL) - return (NULL); + return NULL; sstrncpy(se->key, key, sizeof(se->key)); se->flags = 0; @@ -436,7 +436,7 @@ static staging_entry_t *staging_entry_get(const char *host, /* {{{ */ se->vl.values = (value_t *)calloc(values_len, sizeof(*se->vl.values)); if (se->vl.values == NULL) { sfree(se); - return (NULL); + return NULL; } se->vl.values_len = values_len; @@ -453,10 +453,10 @@ static staging_entry_t *staging_entry_get(const char *host, /* {{{ */ ERROR("gmond plugin: c_avl_insert failed."); sfree(se->vl.values); sfree(se); - return (NULL); + return NULL; } - return (se); + return se; } /* }}} staging_entry_t *staging_entry_get */ static int staging_entry_update(const char *host, const char *name, /* {{{ */ @@ -468,13 +468,13 @@ static int staging_entry_update(const char *host, const char *name, /* {{{ */ ds = plugin_get_ds(type); if (ds == NULL) { ERROR("gmond plugin: Looking up type %s failed.", type); - return (-1); + return -1; } if (ds->ds_num <= ds_index) { ERROR("gmond plugin: Invalid index %zu: %s has only %zu data source(s).", ds_index, ds->type, ds->ds_num); - return (-1); + return -1; } pthread_mutex_lock(&staging_lock); @@ -483,11 +483,11 @@ static int staging_entry_update(const char *host, const char *name, /* {{{ */ if (se == NULL) { pthread_mutex_unlock(&staging_lock); ERROR("gmond plugin: staging_entry_get failed."); - return (-1); + return -1; } if (se->vl.values_len != ds->ds_num) { pthread_mutex_unlock(&staging_lock); - return (-1); + return -1; } if (ds_type == DS_TYPE_COUNTER) @@ -506,7 +506,7 @@ static int staging_entry_update(const char *host, const char *name, /* {{{ */ /* Check if all data sources have been set. If not, return here. */ if (se->flags != ((0x01 << se->vl.values_len) - 1)) { pthread_mutex_unlock(&staging_lock); - return (0); + return 0; } /* Check if the interval of this metric is known. If not, request meta data @@ -517,7 +517,7 @@ static int staging_entry_update(const char *host, const char *name, /* {{{ */ pthread_mutex_unlock(&staging_lock); request_meta_data(host, name); - return (0); + return 0; } plugin_dispatch_values(&se->vl); @@ -525,7 +525,7 @@ static int staging_entry_update(const char *host, const char *name, /* {{{ */ se->flags = 0; pthread_mutex_unlock(&staging_lock); - return (0); + return 0; } /* }}} int staging_entry_update */ static int mc_handle_value_msg(Ganglia_value_msg *msg) /* {{{ */ @@ -606,7 +606,7 @@ static int mc_handle_value_msg(Ganglia_value_msg *msg) /* {{{ */ } default: DEBUG("gmond plugin: Value type not handled: %i", msg->id); - return (-1); + return -1; } /* }}} switch (msg->id) */ assert(host != NULL); @@ -625,12 +625,12 @@ static int mc_handle_value_msg(Ganglia_value_msg *msg) /* {{{ */ else assert(23 == 42); - return (staging_entry_update(host, name, map->type, map->type_instance, - map->ds_index, map->ds_type, val_copy)); + return staging_entry_update(host, name, map->type, map->type_instance, + map->ds_index, map->ds_type, val_copy); } DEBUG("gmond plugin: Cannot find a translation for %s.", name); - return (-1); + return -1; } /* }}} int mc_handle_value_msg */ static int mc_handle_metadata_msg(Ganglia_metadata_msg *msg) /* {{{ */ @@ -645,19 +645,19 @@ static int mc_handle_metadata_msg(Ganglia_metadata_msg *msg) /* {{{ */ msg_meta = msg->Ganglia_metadata_msg_u.gfull; if (msg_meta.metric.tmax == 0) - return (-1); + return -1; map = metric_lookup(msg_meta.metric_id.name); if (map == NULL) { DEBUG("gmond plugin: Not handling meta data %s.", msg_meta.metric_id.name); - return (0); + return 0; } ds = plugin_get_ds(map->type); if (ds == NULL) { WARNING("gmond plugin: Could not find data set %s.", map->type); - return (-1); + return -1; } DEBUG("gmond plugin: Received meta data for %s/%s.", @@ -672,16 +672,16 @@ static int mc_handle_metadata_msg(Ganglia_metadata_msg *msg) /* {{{ */ if (se == NULL) { ERROR("gmond plugin: staging_entry_get failed."); - return (-1); + return -1; } break; } - default: { return (-1); } + default: { return -1; } } - return (0); + return 0; } /* }}} int mc_handle_metadata_msg */ static int mc_handle_metric(void *buffer, size_t buffer_size) /* {{{ */ @@ -719,10 +719,10 @@ static int mc_handle_metric(void *buffer, size_t buffer_size) /* {{{ */ default: DEBUG("gmond plugin: Unknown format: %i", format); - return (-1); + return -1; } /* switch (format) */ - return (0); + return 0; } /* }}} int mc_handle_metric */ static int mc_handle_socket(struct pollfd *p) /* {{{ */ @@ -732,7 +732,7 @@ static int mc_handle_socket(struct pollfd *p) /* {{{ */ if ((p->revents & (POLLIN | POLLPRI)) == 0) { p->revents = 0; - return (-1); + return -1; } buffer_size = recv(p->fd, buffer, sizeof(buffer), /* flags = */ 0); @@ -741,11 +741,11 @@ static int mc_handle_socket(struct pollfd *p) /* {{{ */ ERROR("gmond plugin: recv failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); p->revents = 0; - return (-1); + return -1; } mc_handle_metric(buffer, (size_t)buffer_size); - return (0); + return 0; } /* }}} int mc_handle_socket */ static void *mc_receive_thread(void *arg) /* {{{ */ @@ -761,7 +761,7 @@ static void *mc_receive_thread(void *arg) /* {{{ */ /* listen = */ 1); if (status != 0) { ERROR("gmond plugin: create_sockets failed."); - return ((void *)-1); + return (void *)-1; } mc_receive_sockets = (struct pollfd *)calloc(mc_receive_sockets_num, @@ -773,7 +773,7 @@ static void *mc_receive_thread(void *arg) /* {{{ */ free(mc_receive_socket_entries); mc_receive_socket_entries = NULL; mc_receive_sockets_num = 0; - return ((void *)-1); + return (void *)-1; } for (size_t i = 0; i < mc_receive_sockets_num; i++) { @@ -800,7 +800,7 @@ static void *mc_receive_thread(void *arg) /* {{{ */ } /* while (mc_receive_thread_loop != 0) */ free(mc_receive_socket_entries); - return ((void *)0); + return (void *)0; } /* }}} void *mc_receive_thread */ static int mc_receive_thread_start(void) /* {{{ */ @@ -808,7 +808,7 @@ static int mc_receive_thread_start(void) /* {{{ */ int status; if (mc_receive_thread_running != 0) - return (-1); + return -1; mc_receive_thread_loop = 1; @@ -818,17 +818,17 @@ static int mc_receive_thread_start(void) /* {{{ */ if (status != 0) { ERROR("gmond plugin: Starting receive thread failed."); mc_receive_thread_loop = 0; - return (-1); + return -1; } mc_receive_thread_running = 1; - return (0); + return 0; } /* }}} int start_receive_thread */ static int mc_receive_thread_stop(void) /* {{{ */ { if (mc_receive_thread_running == 0) - return (-1); + return -1; mc_receive_thread_loop = 0; @@ -839,7 +839,7 @@ static int mc_receive_thread_stop(void) /* {{{ */ mc_receive_thread_running = 0; - return (0); + return 0; } /* }}} int mc_receive_thread_stop */ /* @@ -862,18 +862,18 @@ static int gmond_config_set_string(oconfig_item_t *ci, char **str) /* {{{ */ WARNING("gmond plugin: The `%s' option needs " "exactly one string argument.", ci->key); - return (-1); + return -1; } tmp = strdup(ci->values[0].value.string); if (tmp == NULL) { ERROR("gmond plugin: strdup failed."); - return (-1); + return -1; } sfree(*str); *str = tmp; - return (0); + return 0; } /* }}} int gmond_config_set_string */ static int gmond_config_add_metric(oconfig_item_t *ci) /* {{{ */ @@ -883,13 +883,13 @@ static int gmond_config_add_metric(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("gmond plugin: `Metric' blocks need " "exactly one string argument."); - return (-1); + return -1; } map = realloc(metric_map, (metric_map_len + 1) * sizeof(*metric_map)); if (map == NULL) { ERROR("gmond plugin: realloc failed."); - return (-1); + return -1; } metric_map = map; map = metric_map + metric_map_len; @@ -904,7 +904,7 @@ static int gmond_config_add_metric(oconfig_item_t *ci) /* {{{ */ map->ganglia_name = strdup(ci->values[0].value.string); if (map->ganglia_name == NULL) { ERROR("gmond plugin: strdup failed."); - return (-1); + return -1; } for (int i = 0; i < ci->children_num; i++) { @@ -925,11 +925,11 @@ static int gmond_config_add_metric(oconfig_item_t *ci) /* {{{ */ ERROR("gmond plugin: No type is set for metric %s.", map->ganglia_name); sfree(map->ganglia_name); sfree(map->type_instance); - return (-1); + return -1; } metric_map_len++; - return (0); + return 0; } /* }}} int gmond_config_add_metric */ static int gmond_config_set_address(oconfig_item_t *ci, /* {{{ */ @@ -941,14 +941,14 @@ static int gmond_config_set_address(oconfig_item_t *ci, /* {{{ */ WARNING("gmond plugin: The `%s' config option needs " "one or two string arguments.", ci->key); - return (-1); + return -1; } if ((ci->values[0].type != OCONFIG_TYPE_STRING) || ((ci->values_num == 2) && (ci->values[1].type != OCONFIG_TYPE_STRING))) { WARNING("gmond plugin: The `%s' config option needs " "one or two string arguments.", ci->key); - return (-1); + return -1; } addr = strdup(ci->values[0].value.string); @@ -961,7 +961,7 @@ static int gmond_config_set_address(oconfig_item_t *ci, /* {{{ */ ERROR("gmond plugin: strdup failed."); sfree(addr); sfree(port); - return (-1); + return -1; } sfree(*ret_addr); @@ -970,7 +970,7 @@ static int gmond_config_set_address(oconfig_item_t *ci, /* {{{ */ *ret_addr = addr; *ret_port = port; - return (0); + return 0; } /* }}} int gmond_config_set_address */ static int gmond_config(oconfig_item_t *ci) /* {{{ */ @@ -987,7 +987,7 @@ static int gmond_config(oconfig_item_t *ci) /* {{{ */ } } - return (0); + return 0; } /* }}} int gmond_config */ static int gmond_init(void) /* {{{ */ @@ -1001,12 +1001,12 @@ static int gmond_init(void) /* {{{ */ staging_tree = c_avl_create((int (*)(const void *, const void *))strcmp); if (staging_tree == NULL) { ERROR("gmond plugin: c_avl_create failed."); - return (-1); + return -1; } mc_receive_thread_start(); - return (0); + return 0; } /* }}} int gmond_init */ static int gmond_shutdown(void) /* {{{ */ @@ -1022,7 +1022,7 @@ static int gmond_shutdown(void) /* {{{ */ mc_send_sockets_num = 0; pthread_mutex_unlock(&mc_send_sockets_lock); - return (0); + return 0; } /* }}} int gmond_shutdown */ void module_register(void) { @@ -1030,5 +1030,3 @@ void module_register(void) { plugin_register_init("gmond", gmond_init); plugin_register_shutdown("gmond", gmond_shutdown); } - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/gps.c b/src/gps.c index a4b3e2e7..210c2934 100644 --- a/src/gps.c +++ b/src/gps.c @@ -226,7 +226,7 @@ static int cgps_read(void) { cgps_submit("satellites", data_copy.sats_used, "used"); cgps_submit("satellites", data_copy.sats_visible, "visible"); - return (0); + return 0; } /** @@ -262,7 +262,7 @@ static int cgps_config(oconfig_item_t *ci) { cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT; } - return (0); + return 0; } /** @@ -286,10 +286,10 @@ static int cgps_init(void) { plugin_thread_create(&cgps_thread_id, NULL, cgps_thread, NULL, "gps"); if (status != 0) { ERROR("gps plugin: pthread_create() failed."); - return (-1); + return -1; } - return (0); + return 0; } /** @@ -315,7 +315,7 @@ static int cgps_shutdown(void) { sfree(cgps_config_data.port); sfree(cgps_config_data.host); - return (0); + return 0; } /** diff --git a/src/grpc.cc b/src/grpc.cc index 0ae80bb8..2f16dbcb 100644 --- a/src/grpc.cc +++ b/src/grpc.cc @@ -26,8 +26,8 @@ * Florian octo Forster **/ -#include #include +#include #include #include @@ -61,10 +61,10 @@ using google::protobuf::util::TimeUtil; */ struct Listener { - grpc::string addr; - grpc::string port; + grpc::string addr; + grpc::string port; - grpc::SslServerCredentialsOptions *ssl; + grpc::SslServerCredentialsOptions *ssl; }; static std::vector listeners; static grpc::string default_addr("0.0.0.0:50051"); @@ -73,189 +73,187 @@ static grpc::string default_addr("0.0.0.0:50051"); * helper functions */ -static bool ident_matches(const value_list_t *vl, const value_list_t *matcher) -{ - if (fnmatch(matcher->host, vl->host, 0)) - return false; +static bool ident_matches(const value_list_t *vl, const value_list_t *matcher) { + if (fnmatch(matcher->host, vl->host, 0)) + return false; - if (fnmatch(matcher->plugin, vl->plugin, 0)) - return false; - if (fnmatch(matcher->plugin_instance, vl->plugin_instance, 0)) - return false; + if (fnmatch(matcher->plugin, vl->plugin, 0)) + return false; + if (fnmatch(matcher->plugin_instance, vl->plugin_instance, 0)) + return false; - if (fnmatch(matcher->type, vl->type, 0)) - return false; - if (fnmatch(matcher->type_instance, vl->type_instance, 0)) - return false; + if (fnmatch(matcher->type, vl->type, 0)) + return false; + if (fnmatch(matcher->type_instance, vl->type_instance, 0)) + return false; - return true; + return true; } /* ident_matches */ -static grpc::string read_file(const char *filename) -{ - std::ifstream f; - grpc::string s, content; - - f.open(filename); - if (!f.is_open()) { - ERROR("grpc: Failed to open '%s'", filename); - return ""; - } - - while (std::getline(f, s)) { - content += s; - content.push_back('\n'); - } - f.close(); - return content; +static grpc::string read_file(const char *filename) { + std::ifstream f; + grpc::string s, content; + + f.open(filename); + if (!f.is_open()) { + ERROR("grpc: Failed to open '%s'", filename); + return ""; + } + + while (std::getline(f, s)) { + content += s; + content.push_back('\n'); + } + f.close(); + return content; } /* read_file */ /* * proto conversion */ -static void marshal_ident(const value_list_t *vl, collectd::types::Identifier *msg) -{ - msg->set_host(vl->host); - msg->set_plugin(vl->plugin); - if (vl->plugin_instance[0] != '\0') - msg->set_plugin_instance(vl->plugin_instance); - msg->set_type(vl->type); - if (vl->type_instance[0] != '\0') - msg->set_type_instance(vl->type_instance); +static void marshal_ident(const value_list_t *vl, + collectd::types::Identifier *msg) { + msg->set_host(vl->host); + msg->set_plugin(vl->plugin); + if (vl->plugin_instance[0] != '\0') + msg->set_plugin_instance(vl->plugin_instance); + msg->set_type(vl->type); + if (vl->type_instance[0] != '\0') + msg->set_type_instance(vl->type_instance); } /* marshal_ident */ -static grpc::Status unmarshal_ident(const collectd::types::Identifier &msg, value_list_t *vl, - bool require_fields) -{ - std::string s; +static grpc::Status unmarshal_ident(const collectd::types::Identifier &msg, + value_list_t *vl, bool require_fields) { + std::string s; - s = msg.host(); - if (!s.length() && require_fields) - return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, - grpc::string("missing host name")); - sstrncpy(vl->host, s.c_str(), sizeof(vl->host)); + s = msg.host(); + if (!s.length() && require_fields) + return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, + grpc::string("missing host name")); + sstrncpy(vl->host, s.c_str(), sizeof(vl->host)); - s = msg.plugin(); - if (!s.length() && require_fields) - return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, - grpc::string("missing plugin name")); - sstrncpy(vl->plugin, s.c_str(), sizeof(vl->plugin)); + s = msg.plugin(); + if (!s.length() && require_fields) + return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, + grpc::string("missing plugin name")); + sstrncpy(vl->plugin, s.c_str(), sizeof(vl->plugin)); - s = msg.type(); - if (!s.length() && require_fields) - return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, - grpc::string("missing type name")); - sstrncpy(vl->type, s.c_str(), sizeof(vl->type)); + s = msg.type(); + if (!s.length() && require_fields) + return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, + grpc::string("missing type name")); + sstrncpy(vl->type, s.c_str(), sizeof(vl->type)); - s = msg.plugin_instance(); - sstrncpy(vl->plugin_instance, s.c_str(), sizeof(vl->plugin_instance)); + s = msg.plugin_instance(); + sstrncpy(vl->plugin_instance, s.c_str(), sizeof(vl->plugin_instance)); - s = msg.type_instance(); - sstrncpy(vl->type_instance, s.c_str(), sizeof(vl->type_instance)); + s = msg.type_instance(); + sstrncpy(vl->type_instance, s.c_str(), sizeof(vl->type_instance)); - return grpc::Status::OK; + return grpc::Status::OK; } /* unmarshal_ident() */ -static grpc::Status marshal_value_list(const value_list_t *vl, collectd::types::ValueList *msg) -{ - auto id = msg->mutable_identifier(); - marshal_ident(vl, id); - - auto ds = plugin_get_ds(vl->type); - if ((ds == NULL) || (ds->ds_num != vl->values_len)) { - return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to retrieve data-set for values")); - } - - auto t = TimeUtil::NanosecondsToTimestamp(CDTIME_T_TO_NS(vl->time)); - auto d = TimeUtil::NanosecondsToDuration(CDTIME_T_TO_NS(vl->interval)); - msg->set_allocated_time(new google::protobuf::Timestamp(t)); - msg->set_allocated_interval(new google::protobuf::Duration(d)); - - for (size_t i = 0; i < vl->values_len; ++i) { - auto v = msg->add_values(); - switch (ds->ds[i].type) { - case DS_TYPE_COUNTER: - v->set_counter(vl->values[i].counter); - break; - case DS_TYPE_GAUGE: - v->set_gauge(vl->values[i].gauge); - break; - case DS_TYPE_DERIVE: - v->set_derive(vl->values[i].derive); - break; - case DS_TYPE_ABSOLUTE: - v->set_absolute(vl->values[i].absolute); - break; - default: - return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("unknown value type")); - } - - auto name = msg->add_ds_names(); - name->assign(ds->ds[i].name); - } - - return grpc::Status::OK; +static grpc::Status marshal_value_list(const value_list_t *vl, + collectd::types::ValueList *msg) { + auto id = msg->mutable_identifier(); + marshal_ident(vl, id); + + auto ds = plugin_get_ds(vl->type); + if ((ds == NULL) || (ds->ds_num != vl->values_len)) { + return grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to retrieve data-set for values")); + } + + auto t = TimeUtil::NanosecondsToTimestamp(CDTIME_T_TO_NS(vl->time)); + auto d = TimeUtil::NanosecondsToDuration(CDTIME_T_TO_NS(vl->interval)); + msg->set_allocated_time(new google::protobuf::Timestamp(t)); + msg->set_allocated_interval(new google::protobuf::Duration(d)); + + for (size_t i = 0; i < vl->values_len; ++i) { + auto v = msg->add_values(); + switch (ds->ds[i].type) { + case DS_TYPE_COUNTER: + v->set_counter(vl->values[i].counter); + break; + case DS_TYPE_GAUGE: + v->set_gauge(vl->values[i].gauge); + break; + case DS_TYPE_DERIVE: + v->set_derive(vl->values[i].derive); + break; + case DS_TYPE_ABSOLUTE: + v->set_absolute(vl->values[i].absolute); + break; + default: + return grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("unknown value type")); + } + + auto name = msg->add_ds_names(); + name->assign(ds->ds[i].name); + } + + return grpc::Status::OK; } /* marshal_value_list */ -static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg, value_list_t *vl) -{ - vl->time = NS_TO_CDTIME_T(TimeUtil::TimestampToNanoseconds(msg.time())); - vl->interval = NS_TO_CDTIME_T(TimeUtil::DurationToNanoseconds(msg.interval())); - - auto status = unmarshal_ident(msg.identifier(), vl, true); - if (!status.ok()) - return status; - - value_t *values = NULL; - size_t values_len = 0; - - status = grpc::Status::OK; - for (auto v : msg.values()) { - value_t *val = (value_t *)realloc(values, (values_len + 1) * sizeof(*values)); - if (!val) { - status = grpc::Status(grpc::StatusCode::RESOURCE_EXHAUSTED, - grpc::string("failed to allocate values array")); - break; - } - - values = val; - val = values + values_len; - values_len++; - - switch (v.value_case()) { - case collectd::types::Value::ValueCase::kCounter: - val->counter = counter_t(v.counter()); - break; - case collectd::types::Value::ValueCase::kGauge: - val->gauge = gauge_t(v.gauge()); - break; - case collectd::types::Value::ValueCase::kDerive: - val->derive = derive_t(v.derive()); - break; - case collectd::types::Value::ValueCase::kAbsolute: - val->absolute = absolute_t(v.absolute()); - break; - default: - status = grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, - grpc::string("unknown value type")); - break; - } - - if (!status.ok()) - break; - } - if (status.ok()) { - vl->values = values; - vl->values_len = values_len; - } - else if (values) { - free(values); - } - - return status; +static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg, + value_list_t *vl) { + vl->time = NS_TO_CDTIME_T(TimeUtil::TimestampToNanoseconds(msg.time())); + vl->interval = + NS_TO_CDTIME_T(TimeUtil::DurationToNanoseconds(msg.interval())); + + auto status = unmarshal_ident(msg.identifier(), vl, true); + if (!status.ok()) + return status; + + value_t *values = NULL; + size_t values_len = 0; + + status = grpc::Status::OK; + for (auto v : msg.values()) { + value_t *val = + (value_t *)realloc(values, (values_len + 1) * sizeof(*values)); + if (!val) { + status = grpc::Status(grpc::StatusCode::RESOURCE_EXHAUSTED, + grpc::string("failed to allocate values array")); + break; + } + + values = val; + val = values + values_len; + values_len++; + + switch (v.value_case()) { + case collectd::types::Value::ValueCase::kCounter: + val->counter = counter_t(v.counter()); + break; + case collectd::types::Value::ValueCase::kGauge: + val->gauge = gauge_t(v.gauge()); + break; + case collectd::types::Value::ValueCase::kDerive: + val->derive = derive_t(v.derive()); + break; + case collectd::types::Value::ValueCase::kAbsolute: + val->absolute = absolute_t(v.absolute()); + break; + default: + status = grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, + grpc::string("unknown value type")); + break; + } + + if (!status.ok()) + break; + } + if (status.ok()) { + vl->values = values; + vl->values_len = values_len; + } else if (values) { + free(values); + } + + return status; } /* unmarshal_value_list() */ /* @@ -263,200 +261,200 @@ static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg, */ class CollectdImpl : public collectd::Collectd::Service { public: - grpc::Status QueryValues(grpc::ServerContext *ctx, QueryValuesRequest const *req, grpc::ServerWriter *writer) override { - value_list_t match; - auto status = unmarshal_ident(req->identifier(), &match, false); - if (!status.ok()) { - return status; - } - - std::queue value_lists; - status = this->queryValuesRead(&match, &value_lists); - if (status.ok()) { - status = this->queryValuesWrite(ctx, writer, &value_lists); - } - - while (!value_lists.empty()) { - auto vl = value_lists.front(); - value_lists.pop(); - sfree(vl.values); - } - - return status; - } - - grpc::Status PutValues(grpc::ServerContext *ctx, - grpc::ServerReader *reader, - PutValuesResponse *res) override { - PutValuesRequest req; - - while (reader->Read(&req)) { - value_list_t vl = {0}; - auto status = unmarshal_value_list(req.value_list(), &vl); - if (!status.ok()) - return status; - - if (plugin_dispatch_values(&vl)) - return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to enqueue values for writing")); - } - - res->Clear(); - return grpc::Status::OK; - } + grpc::Status + QueryValues(grpc::ServerContext *ctx, QueryValuesRequest const *req, + grpc::ServerWriter *writer) override { + value_list_t match; + auto status = unmarshal_ident(req->identifier(), &match, false); + if (!status.ok()) { + return status; + } + + std::queue value_lists; + status = this->queryValuesRead(&match, &value_lists); + if (status.ok()) { + status = this->queryValuesWrite(ctx, writer, &value_lists); + } + + while (!value_lists.empty()) { + auto vl = value_lists.front(); + value_lists.pop(); + sfree(vl.values); + } + + return status; + } + + grpc::Status PutValues(grpc::ServerContext *ctx, + grpc::ServerReader *reader, + PutValuesResponse *res) override { + PutValuesRequest req; + + while (reader->Read(&req)) { + value_list_t vl = {0}; + auto status = unmarshal_value_list(req.value_list(), &vl); + if (!status.ok()) + return status; + + if (plugin_dispatch_values(&vl)) + return grpc::Status( + grpc::StatusCode::INTERNAL, + grpc::string("failed to enqueue values for writing")); + } + + res->Clear(); + return grpc::Status::OK; + } private: - grpc::Status queryValuesRead(value_list_t const *match, std::queue *value_lists) { - uc_iter_t *iter; - if ((iter = uc_get_iterator()) == NULL) { - return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to query values: cannot create iterator")); - } - - grpc::Status status = grpc::Status::OK; - char *name = NULL; - while (uc_iterator_next(iter, &name) == 0) { - value_list_t vl; - if (parse_identifier_vl(name, &vl) != 0) { - status = grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to parse identifier")); - break; - } - - if (!ident_matches(&vl, match)) - continue; - - if (uc_iterator_get_time(iter, &vl.time) < 0) { - status = grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to retrieve value timestamp")); - break; - } - if (uc_iterator_get_interval(iter, &vl.interval) < 0) { - status = grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to retrieve value interval")); - break; - } - if (uc_iterator_get_values(iter, &vl.values, &vl.values_len) < 0) { - status = grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to retrieve values")); - break; - } - - value_lists->push(vl); - } // while (uc_iterator_next(iter, &name) == 0) - - uc_iterator_destroy(iter); - return status; - } - - grpc::Status queryValuesWrite(grpc::ServerContext *ctx, - grpc::ServerWriter *writer, - std::queue *value_lists) { - while (!value_lists->empty()) { - auto vl = value_lists->front(); - QueryValuesResponse res; - res.Clear(); - - auto status = marshal_value_list(&vl, res.mutable_value_list()); - if (!status.ok()) { - return status; - } - - if (!writer->Write(res)) { - return grpc::Status::CANCELLED; - } - - value_lists->pop(); - sfree(vl.values); - } - - return grpc::Status::OK; - } + grpc::Status queryValuesRead(value_list_t const *match, + std::queue *value_lists) { + uc_iter_t *iter; + if ((iter = uc_get_iterator()) == NULL) { + return grpc::Status( + grpc::StatusCode::INTERNAL, + grpc::string("failed to query values: cannot create iterator")); + } + + grpc::Status status = grpc::Status::OK; + char *name = NULL; + while (uc_iterator_next(iter, &name) == 0) { + value_list_t vl; + if (parse_identifier_vl(name, &vl) != 0) { + status = grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to parse identifier")); + break; + } + + if (!ident_matches(&vl, match)) + continue; + + if (uc_iterator_get_time(iter, &vl.time) < 0) { + status = + grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to retrieve value timestamp")); + break; + } + if (uc_iterator_get_interval(iter, &vl.interval) < 0) { + status = + grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to retrieve value interval")); + break; + } + if (uc_iterator_get_values(iter, &vl.values, &vl.values_len) < 0) { + status = grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to retrieve values")); + break; + } + + value_lists->push(vl); + } // while (uc_iterator_next(iter, &name) == 0) + + uc_iterator_destroy(iter); + return status; + } + + grpc::Status queryValuesWrite(grpc::ServerContext *ctx, + grpc::ServerWriter *writer, + std::queue *value_lists) { + while (!value_lists->empty()) { + auto vl = value_lists->front(); + QueryValuesResponse res; + res.Clear(); + + auto status = marshal_value_list(&vl, res.mutable_value_list()); + if (!status.ok()) { + return status; + } + + if (!writer->Write(res)) { + return grpc::Status::CANCELLED; + } + + value_lists->pop(); + sfree(vl.values); + } + + return grpc::Status::OK; + } }; /* * gRPC server implementation */ -class CollectdServer final -{ +class CollectdServer final { public: - void Start() - { - auto auth = grpc::InsecureServerCredentials(); - - grpc::ServerBuilder builder; - - if (listeners.empty()) { - builder.AddListeningPort(default_addr, auth); - INFO("grpc: Listening on %s", default_addr.c_str()); - } - else { - for (auto l : listeners) { - grpc::string addr = l.addr + ":" + l.port; - - auto use_ssl = grpc::string(""); - auto a = auth; - if (l.ssl != nullptr) { - use_ssl = grpc::string(" (SSL enabled)"); - a = grpc::SslServerCredentials(*l.ssl); - } - - builder.AddListeningPort(addr, a); - INFO("grpc: Listening on %s%s", addr.c_str(), use_ssl.c_str()); - } - } - - builder.RegisterService(&collectd_service_); - - server_ = builder.BuildAndStart(); - } /* Start() */ - - void Shutdown() - { - server_->Shutdown(); - } /* Shutdown() */ + void Start() { + auto auth = grpc::InsecureServerCredentials(); + + grpc::ServerBuilder builder; + + if (listeners.empty()) { + builder.AddListeningPort(default_addr, auth); + INFO("grpc: Listening on %s", default_addr.c_str()); + } else { + for (auto l : listeners) { + grpc::string addr = l.addr + ":" + l.port; + + auto use_ssl = grpc::string(""); + auto a = auth; + if (l.ssl != nullptr) { + use_ssl = grpc::string(" (SSL enabled)"); + a = grpc::SslServerCredentials(*l.ssl); + } + + builder.AddListeningPort(addr, a); + INFO("grpc: Listening on %s%s", addr.c_str(), use_ssl.c_str()); + } + } + + builder.RegisterService(&collectd_service_); + + server_ = builder.BuildAndStart(); + } /* Start() */ + + void Shutdown() { server_->Shutdown(); } /* Shutdown() */ private: - CollectdImpl collectd_service_; + CollectdImpl collectd_service_; - std::unique_ptr server_; + std::unique_ptr server_; }; /* class CollectdServer */ -class CollectdClient final -{ +class CollectdClient final { public: - CollectdClient(std::shared_ptr channel) : stub_(Collectd::NewStub(channel)) { - } - - int PutValues(value_list_t const *vl) { - grpc::ClientContext ctx; - - PutValuesRequest req; - auto status = marshal_value_list(vl, req.mutable_value_list()); - if (!status.ok()) { - ERROR("grpc: Marshalling value_list_t failed."); - return -1; - } - - PutValuesResponse res; - auto stream = stub_->PutValues(&ctx, &res); - if (!stream->Write(req)) { - NOTICE("grpc: Broken stream."); - /* intentionally not returning. */ - } - - stream->WritesDone(); - status = stream->Finish(); - if (!status.ok()) { - ERROR ("grpc: Error while closing stream."); - return -1; - } - - return 0; - } /* int PutValues */ + CollectdClient(std::shared_ptr channel) + : stub_(Collectd::NewStub(channel)) {} + + int PutValues(value_list_t const *vl) { + grpc::ClientContext ctx; + + PutValuesRequest req; + auto status = marshal_value_list(vl, req.mutable_value_list()); + if (!status.ok()) { + ERROR("grpc: Marshalling value_list_t failed."); + return -1; + } + + PutValuesResponse res; + auto stream = stub_->PutValues(&ctx, &res); + if (!stream->Write(req)) { + NOTICE("grpc: Broken stream."); + /* intentionally not returning. */ + } + + stream->WritesDone(); + status = stream->Finish(); + if (!status.ok()) { + ERROR("grpc: Error while closing stream."); + return -1; + } + + return 0; + } /* int PutValues */ private: - std::unique_ptr stub_; + std::unique_ptr stub_; }; static CollectdServer *server = nullptr; @@ -465,216 +463,194 @@ static CollectdServer *server = nullptr; * collectd plugin interface */ extern "C" { - static void c_grpc_destroy_write_callback (void *ptr) { - delete (CollectdClient *) ptr; - } - - static int c_grpc_write(__attribute__((unused)) data_set_t const *ds, - value_list_t const *vl, - user_data_t *ud) { - CollectdClient *c = (CollectdClient *) ud->data; - return c->PutValues(vl); - } - - static int c_grpc_config_listen(oconfig_item_t *ci) - { - if ((ci->values_num != 2) - || (ci->values[0].type != OCONFIG_TYPE_STRING) - || (ci->values[1].type != OCONFIG_TYPE_STRING)) { - ERROR("grpc: The `%s` config option needs exactly " - "two string argument (address and port).", ci->key); - return -1; - } - - auto listener = Listener(); - listener.addr = grpc::string(ci->values[0].value.string); - listener.port = grpc::string(ci->values[1].value.string); - listener.ssl = nullptr; - - auto ssl_opts = new(grpc::SslServerCredentialsOptions); - grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp = {}; - bool use_ssl = false; - - for (int i = 0; i < ci->children_num; i++) { - oconfig_item_t *child = ci->children + i; - - if (!strcasecmp("EnableSSL", child->key)) { - if (cf_util_get_boolean(child, &use_ssl)) { - ERROR("grpc: Option `%s` expects a boolean value", - child->key); - return -1; - } - } - else if (!strcasecmp("SSLCACertificateFile", child->key)) { - char *certs = NULL; - if (cf_util_get_string(child, &certs)) { - ERROR("grpc: Option `%s` expects a string value", - child->key); - return -1; - } - ssl_opts->pem_root_certs = read_file(certs); - } - else if (!strcasecmp("SSLCertificateKeyFile", child->key)) { - char *key = NULL; - if (cf_util_get_string(child, &key)) { - ERROR("grpc: Option `%s` expects a string value", - child->key); - return -1; - } - pkcp.private_key = read_file(key); - } - else if (!strcasecmp("SSLCertificateFile", child->key)) { - char *cert = NULL; - if (cf_util_get_string(child, &cert)) { - ERROR("grpc: Option `%s` expects a string value", - child->key); - return -1; - } - pkcp.cert_chain = read_file(cert); - } - else { - WARNING("grpc: Option `%s` not allowed in <%s> block.", - child->key, ci->key); - } - } - - ssl_opts->pem_key_cert_pairs.push_back(pkcp); - if (use_ssl) - listener.ssl = ssl_opts; - else - delete(ssl_opts); - - listeners.push_back(listener); - return 0; - } /* c_grpc_config_listen() */ - - static int c_grpc_config_server(oconfig_item_t *ci) - { - if ((ci->values_num != 2) - || (ci->values[0].type != OCONFIG_TYPE_STRING) - || (ci->values[1].type != OCONFIG_TYPE_STRING)) { - ERROR("grpc: The `%s` config option needs exactly " - "two string argument (address and port).", ci->key); - return -1; - } - - grpc::SslCredentialsOptions ssl_opts; - bool use_ssl = false; - - for (int i = 0; i < ci->children_num; i++) { - oconfig_item_t *child = ci->children + i; - - if (!strcasecmp("EnableSSL", child->key)) { - if (cf_util_get_boolean(child, &use_ssl)) { - return -1; - } - } - else if (!strcasecmp("SSLCACertificateFile", child->key)) { - char *certs = NULL; - if (cf_util_get_string(child, &certs)) { - return -1; - } - ssl_opts.pem_root_certs = read_file(certs); - } - else if (!strcasecmp("SSLCertificateKeyFile", child->key)) { - char *key = NULL; - if (cf_util_get_string(child, &key)) { - return -1; - } - ssl_opts.pem_private_key = read_file(key); - } - else if (!strcasecmp("SSLCertificateFile", child->key)) { - char *cert = NULL; - if (cf_util_get_string(child, &cert)) { - return -1; - } - ssl_opts.pem_cert_chain = read_file(cert); - } - else { - WARNING("grpc: Option `%s` not allowed in <%s> block.", - child->key, ci->key); - } - } - - auto node = grpc::string(ci->values[0].value.string); - auto service = grpc::string(ci->values[1].value.string); - auto addr = node + ":" + service; - - CollectdClient *client; - if (use_ssl) { - auto channel_creds = grpc::SslCredentials(ssl_opts); - auto channel = grpc::CreateChannel(addr, channel_creds); - client = new CollectdClient(channel); - } else { - auto channel = grpc::CreateChannel(addr, grpc::InsecureChannelCredentials()); - client = new CollectdClient(channel); - } - - auto callback_name = grpc::string("grpc/") + addr; - user_data_t ud = { - .data = client, - .free_func = c_grpc_destroy_write_callback, - }; - - plugin_register_write (callback_name.c_str(), c_grpc_write, &ud); - return 0; - } /* c_grpc_config_server() */ - - static int c_grpc_config(oconfig_item_t *ci) - { - int i; - - for (i = 0; i < ci->children_num; i++) { - oconfig_item_t *child = ci->children + i; - - if (!strcasecmp("Listen", child->key)) { - if (c_grpc_config_listen(child)) - return -1; - } - else if (!strcasecmp("Server", child->key)) { - if (c_grpc_config_server(child)) - return -1; - } - - else { - WARNING("grpc: Option `%s` not allowed here.", child->key); - } - } - - return 0; - } /* c_grpc_config() */ - - static int c_grpc_init(void) - { - server = new CollectdServer(); - if (!server) { - ERROR("grpc: Failed to create server"); - return -1; - } - - server->Start(); - return 0; - } /* c_grpc_init() */ - - static int c_grpc_shutdown(void) - { - if (!server) - return 0; - - server->Shutdown(); - - delete server; - server = nullptr; - - return 0; - } /* c_grpc_shutdown() */ - - void module_register(void) - { - plugin_register_complex_config("grpc", c_grpc_config); - plugin_register_init("grpc", c_grpc_init); - plugin_register_shutdown("grpc", c_grpc_shutdown); - } /* module_register() */ -} /* extern "C" */ +static void c_grpc_destroy_write_callback(void *ptr) { + delete (CollectdClient *)ptr; +} -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ +static int c_grpc_write(__attribute__((unused)) data_set_t const *ds, + value_list_t const *vl, user_data_t *ud) { + CollectdClient *c = (CollectdClient *)ud->data; + return c->PutValues(vl); +} + +static int c_grpc_config_listen(oconfig_item_t *ci) { + if ((ci->values_num != 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) || + (ci->values[1].type != OCONFIG_TYPE_STRING)) { + ERROR("grpc: The `%s` config option needs exactly " + "two string argument (address and port).", + ci->key); + return -1; + } + + auto listener = Listener(); + listener.addr = grpc::string(ci->values[0].value.string); + listener.port = grpc::string(ci->values[1].value.string); + listener.ssl = nullptr; + + auto ssl_opts = new (grpc::SslServerCredentialsOptions); + grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp = {}; + bool use_ssl = false; + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + + if (!strcasecmp("EnableSSL", child->key)) { + if (cf_util_get_boolean(child, &use_ssl)) { + ERROR("grpc: Option `%s` expects a boolean value", child->key); + return -1; + } + } else if (!strcasecmp("SSLCACertificateFile", child->key)) { + char *certs = NULL; + if (cf_util_get_string(child, &certs)) { + ERROR("grpc: Option `%s` expects a string value", child->key); + return -1; + } + ssl_opts->pem_root_certs = read_file(certs); + } else if (!strcasecmp("SSLCertificateKeyFile", child->key)) { + char *key = NULL; + if (cf_util_get_string(child, &key)) { + ERROR("grpc: Option `%s` expects a string value", child->key); + return -1; + } + pkcp.private_key = read_file(key); + } else if (!strcasecmp("SSLCertificateFile", child->key)) { + char *cert = NULL; + if (cf_util_get_string(child, &cert)) { + ERROR("grpc: Option `%s` expects a string value", child->key); + return -1; + } + pkcp.cert_chain = read_file(cert); + } else { + WARNING("grpc: Option `%s` not allowed in <%s> block.", child->key, + ci->key); + } + } + + ssl_opts->pem_key_cert_pairs.push_back(pkcp); + if (use_ssl) + listener.ssl = ssl_opts; + else + delete (ssl_opts); + + listeners.push_back(listener); + return 0; +} /* c_grpc_config_listen() */ + +static int c_grpc_config_server(oconfig_item_t *ci) { + if ((ci->values_num != 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) || + (ci->values[1].type != OCONFIG_TYPE_STRING)) { + ERROR("grpc: The `%s` config option needs exactly " + "two string argument (address and port).", + ci->key); + return -1; + } + + grpc::SslCredentialsOptions ssl_opts; + bool use_ssl = false; + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + + if (!strcasecmp("EnableSSL", child->key)) { + if (cf_util_get_boolean(child, &use_ssl)) { + return -1; + } + } else if (!strcasecmp("SSLCACertificateFile", child->key)) { + char *certs = NULL; + if (cf_util_get_string(child, &certs)) { + return -1; + } + ssl_opts.pem_root_certs = read_file(certs); + } else if (!strcasecmp("SSLCertificateKeyFile", child->key)) { + char *key = NULL; + if (cf_util_get_string(child, &key)) { + return -1; + } + ssl_opts.pem_private_key = read_file(key); + } else if (!strcasecmp("SSLCertificateFile", child->key)) { + char *cert = NULL; + if (cf_util_get_string(child, &cert)) { + return -1; + } + ssl_opts.pem_cert_chain = read_file(cert); + } else { + WARNING("grpc: Option `%s` not allowed in <%s> block.", child->key, + ci->key); + } + } + + auto node = grpc::string(ci->values[0].value.string); + auto service = grpc::string(ci->values[1].value.string); + auto addr = node + ":" + service; + + CollectdClient *client; + if (use_ssl) { + auto channel_creds = grpc::SslCredentials(ssl_opts); + auto channel = grpc::CreateChannel(addr, channel_creds); + client = new CollectdClient(channel); + } else { + auto channel = + grpc::CreateChannel(addr, grpc::InsecureChannelCredentials()); + client = new CollectdClient(channel); + } + + auto callback_name = grpc::string("grpc/") + addr; + user_data_t ud = { + .data = client, .free_func = c_grpc_destroy_write_callback, + }; + + plugin_register_write(callback_name.c_str(), c_grpc_write, &ud); + return 0; +} /* c_grpc_config_server() */ + +static int c_grpc_config(oconfig_item_t *ci) { + int i; + + for (i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + + if (!strcasecmp("Listen", child->key)) { + if (c_grpc_config_listen(child)) + return -1; + } else if (!strcasecmp("Server", child->key)) { + if (c_grpc_config_server(child)) + return -1; + } + + else { + WARNING("grpc: Option `%s` not allowed here.", child->key); + } + } + + return 0; +} /* c_grpc_config() */ + +static int c_grpc_init(void) { + server = new CollectdServer(); + if (!server) { + ERROR("grpc: Failed to create server"); + return -1; + } + + server->Start(); + return 0; +} /* c_grpc_init() */ + +static int c_grpc_shutdown(void) { + if (!server) + return 0; + + server->Shutdown(); + + delete server; + server = nullptr; + + return 0; +} /* c_grpc_shutdown() */ + +void module_register(void) { + plugin_register_complex_config("grpc", c_grpc_config); + plugin_register_init("grpc", c_grpc_init); + plugin_register_shutdown("grpc", c_grpc_shutdown); +} /* module_register() */ +} /* extern "C" */ diff --git a/src/hddtemp.c b/src/hddtemp.c index 321c1652..3af9c0fa 100644 --- a/src/hddtemp.c +++ b/src/hddtemp.c @@ -112,7 +112,7 @@ static char *hddtemp_query_daemon(void) { ERROR("hddtemp plugin: getaddrinfo (%s, %s): %s", host, port, (ai_return == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(ai_return)); - return (NULL); + return NULL; } fd = -1; @@ -146,7 +146,7 @@ static char *hddtemp_query_daemon(void) { if (fd < 0) { ERROR("hddtemp plugin: Could not connect to daemon."); - return (NULL); + return NULL; } /* receive data from the hddtemp daemon */ @@ -169,7 +169,7 @@ static char *hddtemp_query_daemon(void) { close(fd); free(buffer); ERROR("hddtemp plugin: Allocation failed."); - return (NULL); + return NULL; } buffer = new_buffer; } @@ -186,7 +186,7 @@ static char *hddtemp_query_daemon(void) { sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); free(buffer); - return (NULL); + return NULL; } buffer_fill += status; } @@ -197,13 +197,13 @@ static char *hddtemp_query_daemon(void) { buffer); close(fd); free(buffer); - return (NULL); + return NULL; } assert(buffer_fill < buffer_size); buffer[buffer_fill] = '\0'; close(fd); - return (buffer); + return buffer; } static int hddtemp_config(const char *key, const char *value) { @@ -218,10 +218,10 @@ static int hddtemp_config(const char *key, const char *value) { else sstrncpy(hddtemp_port, value, sizeof(hddtemp_port)); } else { - return (-1); + return -1; } - return (0); + return 0; } static void hddtemp_submit(char *type_instance, double value) { @@ -248,7 +248,7 @@ static int hddtemp_read(void) { /* get data from daemon */ buf = hddtemp_query_daemon(); if (buf == NULL) - return (-1); + return -1; /* NB: strtok_r will eat up "||" and leading "|"'s */ ptr = buf; @@ -276,7 +276,7 @@ static int hddtemp_read(void) { } free(buf); - return (0); + return 0; } /* int hddtemp_read */ /* module_register diff --git a/src/hugepages.c b/src/hugepages.c index f23a6e2a..871e625f 100644 --- a/src/hugepages.c +++ b/src/hugepages.c @@ -76,7 +76,7 @@ static int hp_config(oconfig_item_t *ci) { child->key); } - return (0); + return 0; } static void submit_hp(const struct entry_info *info) { diff --git a/src/intel_rdt.c b/src/intel_rdt.c index 6f157b8f..7966daa5 100644 --- a/src/intel_rdt.c +++ b/src/intel_rdt.c @@ -80,10 +80,10 @@ static int strtouint64(const char *s, uint64_t *n) { if (!(*s != '\0' && *endptr == '\0')) { DEBUG(RDT_PLUGIN ": Error converting '%s' to unsigned number.", s); - return (-EINVAL); + return -EINVAL; } - return (0); + return 0; } /* @@ -136,12 +136,12 @@ static size_t strlisttonums(char *s, uint64_t *nums, size_t max) { *p = '\0'; ret = strtouint64(token, &start); if (ret < 0) - return (0); + return 0; ret = strtouint64(p + 1, &end); if (ret < 0) - return (0); + return 0; if (start > end) { - return (0); + return 0; } for (n = start; n <= end; n++) { if (!(isdup(nums, index, n))) { @@ -156,7 +156,7 @@ static size_t strlisttonums(char *s, uint64_t *nums, size_t max) { ret = strtouint64(token, &val); if (ret < 0) - return (0); + return 0; if (!(isdup(nums, index, val))) { nums[index] = val; @@ -223,14 +223,14 @@ static int cgroup_set(rdt_core_group_t *cg, char *desc, uint64_t *cores, cg->cores = calloc(num_cores, sizeof(unsigned)); if (cg->cores == NULL) { ERROR(RDT_PLUGIN ": Error allocating core group table"); - return (-ENOMEM); + return -ENOMEM; } cg->num_cores = num_cores; cg->desc = strdup(desc); if (cg->desc == NULL) { ERROR(RDT_PLUGIN ": Error allocating core group description"); sfree(cg->cores); - return (-ENOMEM); + return -ENOMEM; } for (size_t i = 0; i < num_cores; i++) @@ -252,14 +252,13 @@ static int cgroup_set(rdt_core_group_t *cg, char *desc, uint64_t *cores, * `item' Config option containing core groups. * `groups' Table of core groups to set values in. * `max_groups' Maximum number of core groups allowed. - * `max_core' Maximum allowed core value. * * RETURN VALUE * On success, the number of core groups set up. On error, appropriate * negative error value. */ static int oconfig_to_cgroups(oconfig_item_t *item, rdt_core_group_t *groups, - size_t max_groups, uint64_t max_core) { + size_t max_groups) { int index = 0; assert(groups != NULL); @@ -282,15 +281,7 @@ static int oconfig_to_cgroups(oconfig_item_t *item, rdt_core_group_t *groups, if (n == 0) { ERROR(RDT_PLUGIN ": Error parsing core group (%s)", item->values[j].value.string); - return (-EINVAL); - } - - for (int i = 0; i < n; i++) { - if (cores[i] > max_core) { - ERROR(RDT_PLUGIN ": Core group (%s) contains invalid core id (%d)", - item->values[j].value.string, (int)cores[i]); - return (-EINVAL); - } + return -EINVAL; } /* set core group info */ @@ -395,30 +386,52 @@ static int rdt_default_cgroups(void) { return g_rdt->pqos_cpu->num_cores; } +static int rdt_is_core_id_valid(int core_id) { + + for (int i = 0; i < g_rdt->pqos_cpu->num_cores; i++) + if (core_id == g_rdt->pqos_cpu->cores[i].lcore) + return 1; + + return 0; +} + static int rdt_config_cgroups(oconfig_item_t *item) { int n = 0; enum pqos_mon_event events = 0; if (item == NULL) { DEBUG(RDT_PLUGIN ": cgroups_config: Invalid argument."); - return (-EINVAL); + return -EINVAL; } DEBUG(RDT_PLUGIN ": Core groups [%d]:", item->values_num); for (int j = 0; j < item->values_num; j++) { if (item->values[j].type != OCONFIG_TYPE_STRING) { ERROR(RDT_PLUGIN ": given core group value is not a string [idx=%d]", j); - return (-EINVAL); + return -EINVAL; } DEBUG(RDT_PLUGIN ": [%d]: %s", j, item->values[j].value.string); } - n = oconfig_to_cgroups(item, g_rdt->cgroups, RDT_MAX_CORES, - g_rdt->pqos_cpu->num_cores - 1); + n = oconfig_to_cgroups(item, g_rdt->cgroups, g_rdt->pqos_cpu->num_cores); if (n < 0) { rdt_free_cgroups(); ERROR(RDT_PLUGIN ": Error parsing core groups configuration."); - return (-EINVAL); + return -EINVAL; + } + + /* validate configured core id values */ + for (int group_idx = 0; group_idx < n; group_idx++) { + for (int core_idx = 0; core_idx < g_rdt->cgroups[group_idx].num_cores; + core_idx++) { + if (!rdt_is_core_id_valid(g_rdt->cgroups[group_idx].cores[core_idx])) { + ERROR(RDT_PLUGIN ": Core group '%s' contains invalid core id '%d'", + g_rdt->cgroups[group_idx].desc, + (int)g_rdt->cgroups[group_idx].cores[core_idx]); + rdt_free_cgroups(); + return -EINVAL; + } + } } if (n == 0) { @@ -451,7 +464,7 @@ static int rdt_config_cgroups(oconfig_item_t *item) { if (found != 0) { rdt_free_cgroups(); ERROR(RDT_PLUGIN ": Cannot monitor same cores in different groups."); - return (-EINVAL); + return -EINVAL; } } @@ -460,11 +473,15 @@ static int rdt_config_cgroups(oconfig_item_t *item) { if (g_rdt->pgroups[i] == NULL) { rdt_free_cgroups(); ERROR(RDT_PLUGIN ": Failed to allocate memory for monitoring data."); - return (-ENOMEM); + return -ENOMEM; } } - return (0); + return 0; +} + +static void rdt_pqos_log(void *context, const size_t size, const char *msg) { + DEBUG(RDT_PLUGIN ": %s", msg); } static int rdt_preinit(void) { @@ -472,24 +489,21 @@ static int rdt_preinit(void) { if (g_rdt != NULL) { /* already initialized if config callback was called before init callback */ - return (0); + return 0; } g_rdt = calloc(1, sizeof(*g_rdt)); if (g_rdt == NULL) { ERROR(RDT_PLUGIN ": Failed to allocate memory for rdt context."); - return (-ENOMEM); + return -ENOMEM; } - /* In case previous instance of the application was not closed properly - * call fini and ignore return code. */ - pqos_fini(); + struct pqos_config pqos = {.fd_log = -1, + .callback_log = rdt_pqos_log, + .context_log = NULL, + .verbose = 0}; - /* TODO: - * stdout should not be used here. Will be reworked when support of log - * callback is added to PQoS library. - */ - ret = pqos_init(&(struct pqos_config){.fd_log = STDOUT_FILENO}); + ret = pqos_init(&pqos); if (ret != PQOS_RETVAL_OK) { ERROR(RDT_PLUGIN ": Error initializing PQoS library!"); goto rdt_preinit_error1; @@ -514,7 +528,10 @@ static int rdt_preinit(void) { goto rdt_preinit_error2; } - return (0); + /* Reset pqos monitoring groups registers */ + pqos_mon_reset(); + + return 0; rdt_preinit_error2: pqos_fini(); @@ -523,7 +540,7 @@ rdt_preinit_error1: sfree(g_rdt); - return (-1); + return -1; } static int rdt_config(oconfig_item_t *ci) { @@ -546,7 +563,7 @@ static int rdt_config(oconfig_item_t *ci) { reports a failure in configuration and aborts */ - return (0); + return (0); } #if COLLECT_DEBUG @@ -557,7 +574,7 @@ static int rdt_config(oconfig_item_t *ci) { } } - return (0); + return 0; } static void rdt_submit_derive(char *cgroup, char *type, char *type_instance, @@ -597,13 +614,13 @@ static int rdt_read(__attribute__((unused)) user_data_t *ud) { if (g_rdt == NULL) { ERROR(RDT_PLUGIN ": rdt_read: plugin not initialized."); - return (-EINVAL); + return -EINVAL; } ret = pqos_mon_poll(&g_rdt->pgroups[0], (unsigned)g_rdt->num_groups); if (ret != PQOS_RETVAL_OK) { ERROR(RDT_PLUGIN ": Failed to poll monitoring data."); - return (-1); + return -1; } #if COLLECT_DEBUG @@ -633,14 +650,14 @@ static int rdt_read(__attribute__((unused)) user_data_t *ud) { } } - return (0); + return 0; } static int rdt_init(void) { int ret; if(g_state == CONFIGURATION_ERROR) - return (-1); + return -1; ret = rdt_preinit(); if (ret != 0) @@ -658,7 +675,7 @@ static int rdt_init(void) { cg->desc, ret); } - return (0); + return 0; } static int rdt_shutdown(void) { @@ -667,7 +684,7 @@ static int rdt_shutdown(void) { DEBUG(RDT_PLUGIN ": rdt_shutdown."); if (g_rdt == NULL) - return (0); + return 0; /* Stop monitoring */ for (int i = 0; i < g_rdt->num_groups; i++) { @@ -681,7 +698,7 @@ static int rdt_shutdown(void) { rdt_free_cgroups(); sfree(g_rdt); - return (0); + return 0; } void module_register(void) { diff --git a/src/interface.c b/src/interface.c index b7c6f90e..78a0d694 100644 --- a/src/interface.c +++ b/src/interface.c @@ -120,10 +120,10 @@ static int interface_config(const char *key, const char *value) { "Solaris."); #endif /* HAVE_LIBKSTAT */ } else { - return (-1); + return -1; } - return (0); + return 0; } #if HAVE_LIBKSTAT @@ -133,7 +133,7 @@ static int interface_init(void) { numif = 0; if (kc == NULL) - return (-1); + return -1; for (numif = 0, ksp_chain = kc->kc_chain; (numif < MAX_NUMIF) && (ksp_chain != NULL); @@ -149,7 +149,7 @@ static int interface_init(void) { ksp[numif++] = ksp_chain; } - return (0); + return 0; } /* int interface_init */ #endif /* HAVE_LIBKSTAT */ @@ -202,7 +202,7 @@ static int interface_read(void) { struct IFA_DATA *if_data; if (getifaddrs(&if_list) != 0) - return (-1); + return -1; for (struct ifaddrs *if_ptr = if_list; if_ptr != NULL; if_ptr = if_ptr->ifa_next) { @@ -239,7 +239,7 @@ static int interface_read(void) { char errbuf[1024]; WARNING("interface plugin: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, 1024, fh) != NULL) { @@ -289,7 +289,7 @@ static int interface_read(void) { char iname[DATA_MAX_NAME_LEN]; if (kc == NULL) - return (-1); + return -1; for (int i = 0; i < numif; i++) { if (kstat_read(kc, ksp[i], NULL) == -1) @@ -355,7 +355,7 @@ static int interface_read(void) { char errbuf[1024]; WARNING("interface plugin: perfstat_netinterface: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (pnif != nif || ifstat == NULL) { @@ -370,7 +370,7 @@ static int interface_read(void) { char errbuf[1024]; WARNING("interface plugin: perfstat_netinterface (interfaces=%d): %s", nif, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (int i = 0; i < ifs; i++) { @@ -385,7 +385,7 @@ static int interface_read(void) { } #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* int interface_read */ void module_register(void) { diff --git a/src/ipc.c b/src/ipc.c index c9fb003e..432c5e08 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -123,13 +123,13 @@ static int ipc_read_sem(void) /* {{{ */ ERROR("ipc plugin: semctl(2) failed: %s. " "Maybe the kernel is not configured for semaphores?", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } ipc_submit_g("sem", "count", "arrays", seminfo.semusz); ipc_submit_g("sem", "count", "total", seminfo.semaem); - return (0); + return 0; } /* }}} int ipc_read_sem */ static int ipc_read_shm(void) /* {{{ */ @@ -143,14 +143,14 @@ static int ipc_read_shm(void) /* {{{ */ ERROR("ipc plugin: shmctl(2) failed: %s. " "Maybe the kernel is not configured for shared memory?", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } ipc_submit_g("shm", "segments", NULL, shm_info.used_ids); ipc_submit_g("shm", "bytes", "total", shm_info.shm_tot * pagesize_g); ipc_submit_g("shm", "bytes", "rss", shm_info.shm_rss * pagesize_g); ipc_submit_g("shm", "bytes", "swapped", shm_info.shm_swp * pagesize_g); - return (0); + return 0; } /* }}} int ipc_read_shm */ @@ -160,20 +160,20 @@ static int ipc_read_msg(void) /* {{{ */ if (msgctl(0, MSG_INFO, (struct msqid_ds *)(void *)&msginfo) < 0) { ERROR("Kernel is not configured for message queues"); - return (-1); + return -1; } ipc_submit_g("msg", "count", "queues", msginfo.msgmni); ipc_submit_g("msg", "count", "headers", msginfo.msgmap); ipc_submit_g("msg", "count", "space", msginfo.msgtql); - return (0); + return 0; } /* }}} int ipc_read_msg */ static int ipc_init(void) /* {{{ */ { pagesize_g = sysconf(_SC_PAGESIZE); - return (0); + return 0; } /* }}} */ /* #endif KERNEL_LINUX */ @@ -190,7 +190,7 @@ static caddr_t ipc_get_info(cid_t cid, int cmd, int version, int stsize, char errbuf[1024]; WARNING("ipc plugin: get_ipc_info: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } } @@ -199,7 +199,7 @@ static caddr_t ipc_get_info(cid_t cid, int cmd, int version, int stsize, if (size % stsize) { ERROR("ipc plugin: ipc_get_info: missmatch struct size and buffer size"); - return (NULL); + return NULL; } *nmemb = size / stsize; @@ -207,7 +207,7 @@ static caddr_t ipc_get_info(cid_t cid, int cmd, int version, int stsize, buff = malloc(size); if (buff == NULL) { ERROR("ipc plugin: ipc_get_info malloc failed."); - return (NULL); + return NULL; } if (get_ipc_info(cid, cmd, version, buff, &size) < 0) { @@ -215,7 +215,7 @@ static caddr_t ipc_get_info(cid_t cid, int cmd, int version, int stsize, WARNING("ipc plugin: get_ipc_info: %s", sstrerror(errno, errbuf, sizeof(errbuf))); free(buff); - return (NULL); + return NULL; } return buff; @@ -242,7 +242,7 @@ static int ipc_read_sem(void) /* {{{ */ ipc_submit_g("sem", "count", "arrays", sem_nsems); ipc_submit_g("sem", "count", "total", sems); - return (0); + return 0; } /* }}} int ipc_read_sem */ static int ipc_read_shm(void) /* {{{ */ @@ -267,7 +267,7 @@ static int ipc_read_shm(void) /* {{{ */ ipc_submit_g("shm", "segments", NULL, shm_segments); ipc_submit_g("shm", "bytes", "total", shm_bytes); - return (0); + return 0; } /* }}} int ipc_read_shm */ @@ -295,7 +295,7 @@ static int ipc_read_msg(void) /* {{{ */ ipc_submit_g("msg", "count", "headers", msg_qnum); ipc_submit_g("msg", "count", "space", msg_used_space); - return (0); + return 0; } /* }}} */ #endif /* KERNEL_AIX */ @@ -307,7 +307,7 @@ static int ipc_read(void) /* {{{ */ x |= ipc_read_sem(); x |= ipc_read_msg(); - return (x); + return x; } /* }}} */ @@ -319,5 +319,3 @@ void module_register(void) /* {{{ */ plugin_register_read("ipc", ipc_read); } /* }}} */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/ipmi.c b/src/ipmi.c index 1bbaf412..98e77bfe 100644 --- a/src/ipmi.c +++ b/src/ipmi.c @@ -253,7 +253,7 @@ static int sensor_list_add(ipmi_sensor_t *sensor) { /* Both `ignorelist' and `plugin_instance' may be NULL. */ if (ignorelist_match(ignorelist, sensor_name_ptr) != 0) - return (0); + return 0; /* FIXME: Use rate unit or base unit to scale the value */ @@ -283,7 +283,7 @@ static int sensor_list_add(ipmi_sensor_t *sensor) { "because I don't know how to handle its type (%#x, %s). " "If you need this sensor, please file a bug report.", sensor_name_ptr, sensor_type, sensor_type_str); - return (-1); + return -1; } } /* switch (sensor_type) */ @@ -299,13 +299,13 @@ static int sensor_list_add(ipmi_sensor_t *sensor) { if (list_item != NULL) { pthread_mutex_unlock(&sensor_list_lock); - return (0); + return 0; } list_item = (c_ipmi_sensor_list_t *)calloc(1, sizeof(c_ipmi_sensor_list_t)); if (list_item == NULL) { pthread_mutex_unlock(&sensor_list_lock); - return (-1); + return -1; } list_item->sensor_id = ipmi_sensor_convert_to_id(sensor); @@ -333,7 +333,7 @@ static int sensor_list_add(ipmi_sensor_t *sensor) { plugin_dispatch_notification(&n); } - return (0); + return 0; } /* int sensor_list_add */ static int sensor_list_remove(ipmi_sensor_t *sensor) { @@ -355,7 +355,7 @@ static int sensor_list_remove(ipmi_sensor_t *sensor) { if (list_item == NULL) { pthread_mutex_unlock(&sensor_list_lock); - return (-1); + return -1; } if (list_prev == NULL) @@ -382,7 +382,7 @@ static int sensor_list_remove(ipmi_sensor_t *sensor) { } free(list_item); - return (0); + return 0; } /* int sensor_list_remove */ static int sensor_list_read_all(void) { @@ -396,7 +396,7 @@ static int sensor_list_read_all(void) { pthread_mutex_unlock(&sensor_list_lock); - return (0); + return 0; } /* int sensor_list_read_all */ static int sensor_list_remove_all(void) { @@ -417,7 +417,7 @@ static int sensor_list_remove_all(void) { list_item = list_next; } /* while (list_item) */ - return (0); + return 0; } /* int sensor_list_remove_all */ /* @@ -487,7 +487,7 @@ static int thread_init(os_handler_t **ret_os_handler) { os_handler = ipmi_posix_thread_setup_os_handler(SIGIO); if (os_handler == NULL) { ERROR("ipmi plugin: ipmi_posix_thread_setup_os_handler failed."); - return (-1); + return -1; } ipmi_init(os_handler); @@ -496,7 +496,7 @@ static int thread_init(os_handler_t **ret_os_handler) { /* user data = */ NULL, &smi_connection); if (status != 0) { c_ipmi_error("ipmi_smi_setup_con", status); - return (-1); + return -1; } ipmi_open_option_t open_option[1] = {[0] = {.option = IPMI_OPEN_OPTION_ALL, @@ -509,11 +509,11 @@ static int thread_init(os_handler_t **ret_os_handler) { sizeof(open_option) / sizeof(open_option[0]), &domain_id); if (status != 0) { c_ipmi_error("ipmi_open_domain", status); - return (-1); + return -1; } *ret_os_handler = os_handler; - return (0); + return 0; } /* int thread_init */ static void *thread_main(void __attribute__((unused)) * user_data) { @@ -523,7 +523,7 @@ static void *thread_main(void __attribute__((unused)) * user_data) { status = thread_init(&os_handler); if (status != 0) { ERROR("ipmi plugin: thread_init failed.\n"); - return ((void *)-1); + return (void *)-1; } while (c_ipmi_active != 0) { @@ -533,14 +533,14 @@ static void *thread_main(void __attribute__((unused)) * user_data) { ipmi_posix_thread_free_os_handler(os_handler); - return ((void *)0); + return (void *)0; } /* void *thread_main */ static int c_ipmi_config(const char *key, const char *value) { if (ignorelist == NULL) ignorelist = ignorelist_create(/* invert = */ 1); if (ignorelist == NULL) - return (1); + return 1; if (strcasecmp("Sensor", key) == 0) { ignorelist_add(ignorelist, value); @@ -559,10 +559,10 @@ static int c_ipmi_config(const char *key, const char *value) { if (IS_TRUE(value)) c_ipmi_nofiy_notpresent = 1; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int c_ipmi_config */ static int c_ipmi_init(void) { @@ -580,16 +580,16 @@ static int c_ipmi_init(void) { c_ipmi_active = 0; thread_id = (pthread_t)0; ERROR("ipmi plugin: pthread_create failed."); - return (-1); + return -1; } - return (0); + return 0; } /* int c_ipmi_init */ static int c_ipmi_read(void) { if ((c_ipmi_active == 0) || (thread_id == (pthread_t)0)) { INFO("ipmi plugin: c_ipmi_read: I'm not active, returning false."); - return (-1); + return -1; } sensor_list_read_all(); @@ -599,7 +599,7 @@ static int c_ipmi_read(void) { else c_ipmi_init_in_progress = 0; - return (0); + return 0; } /* int c_ipmi_read */ static int c_ipmi_shutdown(void) { @@ -612,7 +612,7 @@ static int c_ipmi_shutdown(void) { sensor_list_remove_all(); - return (0); + return 0; } /* int c_ipmi_shutdown */ void module_register(void) { @@ -621,5 +621,3 @@ void module_register(void) { plugin_register_read("ipmi", c_ipmi_read); plugin_register_shutdown("ipmi", c_ipmi_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 fdm=marker et : */ diff --git a/src/iptables.c b/src/iptables.c index bf17cfbd..1d127bf7 100644 --- a/src/iptables.c +++ b/src/iptables.c @@ -98,7 +98,7 @@ static int iptables_config(const char *key, const char *value) { else if (strcasecmp(key, "Chain6") == 0) ip_version = IPV6; else - return (1); + return 1; ip_chain_t temp = {0}; ip_chain_t * final, **list; @@ -115,7 +115,7 @@ static int iptables_config(const char *key, const char *value) { if (value_copy == NULL) { char errbuf[1024]; ERROR("strdup failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } /* @@ -131,7 +131,7 @@ static int iptables_config(const char *key, const char *value) { fields_num = strsplit(value_copy, fields, 4); if (fields_num < 2) { free(value_copy); - return (1); + return 1; } table = fields[0]; @@ -141,7 +141,7 @@ static int iptables_config(const char *key, const char *value) { if ((unsigned int)table_len > sizeof(temp.table)) { ERROR("Table `%s' too long.", table); free(value_copy); - return (1); + return 1; } sstrncpy(temp.table, table, table_len); @@ -149,7 +149,7 @@ static int iptables_config(const char *key, const char *value) { if ((unsigned int)chain_len > sizeof(temp.chain)) { ERROR("Chain `%s' too long.", chain); free(value_copy); - return (1); + return 1; } sstrncpy(temp.chain, chain, chain_len); @@ -164,7 +164,7 @@ static int iptables_config(const char *key, const char *value) { temp.rule.comment = strdup(comment); if (temp.rule.comment == NULL) { free(value_copy); - return (1); + return 1; } temp.rule_type = RTYPE_COMMENT; } @@ -185,7 +185,7 @@ static int iptables_config(const char *key, const char *value) { char errbuf[1024]; ERROR("realloc failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); sfree(temp.rule.comment); - return (1); + return 1; } chain_list = list; @@ -194,7 +194,7 @@ static int iptables_config(const char *key, const char *value) { char errbuf[1024]; ERROR("malloc failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); sfree(temp.rule.comment); - return (1); + return 1; } memcpy(final, &temp, sizeof(temp)); chain_list[chain_num] = final; @@ -203,7 +203,7 @@ static int iptables_config(const char *key, const char *value) { DEBUG("Chain #%i: table = %s; chain = %s;", chain_num, final->table, final->chain); - return (0); + return 0; } /* int iptables_config */ static int submit6_match(const struct ip6t_entry_match *match, @@ -215,13 +215,13 @@ static int submit6_match(const struct ip6t_entry_match *match, /* Select the rules to collect */ if (chain->rule_type == RTYPE_NUM) { if (chain->rule.num != rule_num) - return (0); + return 0; } else { if (strcmp(match->u.user.name, "comment") != 0) - return (0); + return 0; if ((chain->rule_type == RTYPE_COMMENT) && (strcmp(chain->rule.comment, (char *)match->data) != 0)) - return (0); + return 0; } sstrncpy(vl.plugin, "ip6tables", sizeof(vl.plugin)); @@ -229,7 +229,7 @@ static int submit6_match(const struct ip6t_entry_match *match, status = ssnprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%s-%s", chain->table, chain->chain); if ((status < 1) || ((unsigned int)status >= sizeof(vl.plugin_instance))) - return (0); + return 0; if (chain->name[0] != '\0') { sstrncpy(vl.type_instance, chain->name, sizeof(vl.type_instance)); @@ -250,7 +250,7 @@ static int submit6_match(const struct ip6t_entry_match *match, vl.values = &(value_t){.derive = (derive_t)entry->counters.pcnt}; plugin_dispatch_values(&vl); - return (0); + return 0; } /* int submit6_match */ /* This needs to return `int' for IPT_MATCH_ITERATE to work. */ @@ -263,13 +263,13 @@ static int submit_match(const struct ipt_entry_match *match, /* Select the rules to collect */ if (chain->rule_type == RTYPE_NUM) { if (chain->rule.num != rule_num) - return (0); + return 0; } else { if (strcmp(match->u.user.name, "comment") != 0) - return (0); + return 0; if ((chain->rule_type == RTYPE_COMMENT) && (strcmp(chain->rule.comment, (char *)match->data) != 0)) - return (0); + return 0; } sstrncpy(vl.plugin, "iptables", sizeof(vl.plugin)); @@ -277,7 +277,7 @@ static int submit_match(const struct ipt_entry_match *match, status = ssnprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%s-%s", chain->table, chain->chain); if ((status < 1) || ((unsigned int)status >= sizeof(vl.plugin_instance))) - return (0); + return 0; if (chain->name[0] != '\0') { sstrncpy(vl.type_instance, chain->name, sizeof(vl.type_instance)); @@ -298,7 +298,7 @@ static int submit_match(const struct ipt_entry_match *match, vl.values = &(value_t){.derive = (derive_t)entry->counters.pcnt}; plugin_dispatch_values(&vl); - return (0); + return 0; } /* int submit_match */ /* ipv6 submit_chain */ @@ -407,7 +407,7 @@ static int iptables_read(void) { num_failures++; } /* for (i = 0 .. chain_num) */ - return ((num_failures < chain_num) ? 0 : -1); + return (num_failures < chain_num) ? 0 : -1; } /* int iptables_read */ static int iptables_shutdown(void) { @@ -418,7 +418,7 @@ static int iptables_shutdown(void) { } sfree(chain_list); - return (0); + return 0; } /* int iptables_shutdown */ static int iptables_init(void) { @@ -435,7 +435,7 @@ static int iptables_init(void) { "running \"setcap cap_net_admin=ep\" on the collectd binary."); } #endif - return (0); + return 0; } /* int iptables_init */ void module_register(void) { diff --git a/src/ipvs.c b/src/ipvs.c index 2446bd13..da67970d 100644 --- a/src/ipvs.c +++ b/src/ipvs.c @@ -42,14 +42,7 @@ #include #endif /* HAVE_NETINET_IN_H */ -/* this can probably only be found in the kernel sources */ -#if HAVE_LINUX_IP_VS_H #include -#elif HAVE_NET_IP_VS_H -#include -#elif HAVE_IP_VS_H -#include -#endif /* HAVE_IP_VS_H */ #define log_err(...) ERROR("ipvs: " __VA_ARGS__) #define log_info(...) INFO("ipvs: " __VA_ARGS__) @@ -64,68 +57,67 @@ static int sockfd = -1; */ static struct ip_vs_get_services *ipvs_get_services(void) { struct ip_vs_getinfo ipvs_info; - struct ip_vs_get_services *ret; + struct ip_vs_get_services *services; - socklen_t len; + socklen_t len = sizeof(ipvs_info); - len = sizeof(ipvs_info); - - if (0 != getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_INFO, (void *)&ipvs_info, - &len)) { + if (getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_INFO, &ipvs_info, &len) == + -1) { char errbuf[1024]; log_err("ip_vs_get_services: getsockopt() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); return NULL; } - len = sizeof(*ret) + + len = sizeof(*services) + sizeof(struct ip_vs_service_entry) * ipvs_info.num_services; - if (NULL == (ret = malloc(len))) { + services = malloc(len); + if (services == NULL) { log_err("ipvs_get_services: Out of memory."); - exit(3); + return NULL; } - ret->num_services = ipvs_info.num_services; + services->num_services = ipvs_info.num_services; - if (0 != getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_SERVICES, (void *)ret, - &len)) { + if (getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_SERVICES, services, &len) == + -1) { char errbuf[1024]; log_err("ipvs_get_services: getsockopt failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - free(ret); + free(services); return NULL; } - return ret; + return services; } /* ipvs_get_services */ static struct ip_vs_get_dests *ipvs_get_dests(struct ip_vs_service_entry *se) { - struct ip_vs_get_dests *ret; - socklen_t len; + struct ip_vs_get_dests *dests; - len = sizeof(*ret) + sizeof(struct ip_vs_dest_entry) * se->num_dests; + socklen_t len = + sizeof(*dests) + sizeof(struct ip_vs_dest_entry) * se->num_dests; - if (NULL == (ret = malloc(len))) { + dests = malloc(len); + if (dests == NULL) { log_err("ipvs_get_dests: Out of memory."); - exit(3); + return NULL; } - ret->fwmark = se->fwmark; - ret->protocol = se->protocol; - ret->addr = se->addr; - ret->port = se->port; - ret->num_dests = se->num_dests; + dests->fwmark = se->fwmark; + dests->protocol = se->protocol; + dests->addr = se->addr; + dests->port = se->port; + dests->num_dests = se->num_dests; - if (0 != - getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_DESTS, (void *)ret, &len)) { + if (getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_DESTS, dests, &len) == -1) { char errbuf[1024]; log_err("ipvs_get_dests: getsockopt() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - free(ret); + free(dests); return NULL; } - return ret; + return dests; } /* ip_vs_get_dests */ /* @@ -134,19 +126,17 @@ static struct ip_vs_get_dests *ipvs_get_dests(struct ip_vs_service_entry *se) { static int cipvs_init(void) { struct ip_vs_getinfo ipvs_info; - socklen_t len; - - if (-1 == (sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) { + if ((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) == -1) { char errbuf[1024]; log_err("cipvs_init: socket() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); return -1; } - len = sizeof(ipvs_info); + socklen_t len = sizeof(ipvs_info); - if (0 != getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_INFO, (void *)&ipvs_info, - &len)) { + if (getsockopt(sockfd, IPPROTO_IP, IP_VS_SO_GET_INFO, &ipvs_info, &len) == + -1) { char errbuf[1024]; log_err("cipvs_init: getsockopt() failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); @@ -176,21 +166,16 @@ static int cipvs_init(void) { /* plugin instance */ static int get_pi(struct ip_vs_service_entry *se, char *pi, size_t size) { - struct in_addr addr; - int len = 0; - - if ((NULL == se) || (NULL == pi)) + if ((se == NULL) || (pi == NULL)) return 0; - addr.s_addr = se->addr; + struct in_addr addr = {.s_addr = se->addr}; - /* inet_ntoa() returns a pointer to a statically allocated buffer - * I hope non-glibc systems behave the same */ - len = + int len = ssnprintf(pi, size, "%s_%s%u", inet_ntoa(addr), (se->protocol == IPPROTO_TCP) ? "TCP" : "UDP", ntohs(se->port)); - if ((0 > len) || (size <= ((size_t)len))) { + if ((len < 0) || (size <= ((size_t)len))) { log_err("plugin instance truncated: %s", pi); return -1; } @@ -199,19 +184,14 @@ static int get_pi(struct ip_vs_service_entry *se, char *pi, size_t size) { /* type instance */ static int get_ti(struct ip_vs_dest_entry *de, char *ti, size_t size) { - struct in_addr addr; - int len = 0; - - if ((NULL == de) || (NULL == ti)) + if ((de == NULL) || (ti == NULL)) return 0; - addr.s_addr = de->addr; + struct in_addr addr = {.s_addr = de->addr}; - /* inet_ntoa() returns a pointer to a statically allocated buffer - * I hope non-glibc systems behave the same */ - len = ssnprintf(ti, size, "%s_%u", inet_ntoa(addr), ntohs(de->port)); + int len = ssnprintf(ti, size, "%s_%u", inet_ntoa(addr), ntohs(de->port)); - if ((0 > len) || (size <= ((size_t)len))) { + if ((len < 0) || (size <= ((size_t)len))) { log_err("type instance truncated: %s", ti); return -1; } @@ -228,11 +208,10 @@ static void cipvs_submit_connections(const char *pi, const char *ti, sstrncpy(vl.plugin, "ipvs", sizeof(vl.plugin)); sstrncpy(vl.plugin_instance, pi, sizeof(vl.plugin_instance)); sstrncpy(vl.type, "connections", sizeof(vl.type)); - sstrncpy(vl.type_instance, (NULL != ti) ? ti : "total", + sstrncpy(vl.type_instance, (ti != NULL) ? ti : "total", sizeof(vl.type_instance)); plugin_dispatch_values(&vl); - return; } /* cipvs_submit_connections */ static void cipvs_submit_if(const char *pi, const char *t, const char *ti, @@ -248,11 +227,10 @@ static void cipvs_submit_if(const char *pi, const char *t, const char *ti, sstrncpy(vl.plugin, "ipvs", sizeof(vl.plugin)); sstrncpy(vl.plugin_instance, pi, sizeof(vl.plugin_instance)); sstrncpy(vl.type, t, sizeof(vl.type)); - sstrncpy(vl.type_instance, (NULL != ti) ? ti : "total", + sstrncpy(vl.type_instance, (ti != NULL) ? ti : "total", sizeof(vl.type_instance)); plugin_dispatch_values(&vl); - return; } /* cipvs_submit_if */ static void cipvs_submit_dest(const char *pi, struct ip_vs_dest_entry *de) { @@ -260,13 +238,12 @@ static void cipvs_submit_dest(const char *pi, struct ip_vs_dest_entry *de) { char ti[DATA_MAX_NAME_LEN]; - if (0 != get_ti(de, ti, sizeof(ti))) + if (get_ti(de, ti, sizeof(ti)) != 0) return; cipvs_submit_connections(pi, ti, stats.conns); cipvs_submit_if(pi, "if_packets", ti, stats.inpkts, stats.outpkts); cipvs_submit_if(pi, "if_octets", ti, stats.inbytes, stats.outbytes); - return; } /* cipvs_submit_dest */ static void cipvs_submit_service(struct ip_vs_service_entry *se) { @@ -275,7 +252,7 @@ static void cipvs_submit_service(struct ip_vs_service_entry *se) { char pi[DATA_MAX_NAME_LEN]; - if (0 != get_pi(se, pi, sizeof(pi))) { + if (get_pi(se, pi, sizeof(pi)) != 0) { free(dests); return; } @@ -292,12 +269,11 @@ static void cipvs_submit_service(struct ip_vs_service_entry *se) { } /* cipvs_submit_service */ static int cipvs_read(void) { - struct ip_vs_get_services *services = NULL; - if (sockfd < 0) - return (-1); + return -1; - if (NULL == (services = ipvs_get_services())) + struct ip_vs_get_services *services = ipvs_get_services(); + if (services == NULL) return -1; for (size_t i = 0; i < services->num_services; ++i) @@ -321,5 +297,3 @@ void module_register(void) { plugin_register_shutdown("ipvs", cipvs_shutdown); return; } /* module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/irq.c b/src/irq.c index 371ba645..d5404159 100644 --- a/src/irq.c +++ b/src/irq.c @@ -54,10 +54,10 @@ static int irq_config(const char *key, const char *value) { invert = 0; ignorelist_set_invert(ignorelist, invert); } else { - return (-1); + return -1; } - return (0); + return 0; } static void irq_submit(const char *irq_name, derive_t value) { @@ -93,7 +93,7 @@ static int irq_read(void) { char errbuf[1024]; ERROR("irq plugin: fopen (/proc/interrupts): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* Get CPU count from the first line */ @@ -103,7 +103,7 @@ static int irq_read(void) { ERROR("irq plugin: unable to get CPU count from first line " "of /proc/interrupts"); fclose(fh); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -165,7 +165,7 @@ static int irq_read(void) { fclose(fh); - return (0); + return 0; } /* int irq_read */ void module_register(void) { diff --git a/src/java.c b/src/java.c index 63b5e317..e3d3442a 100644 --- a/src/java.c +++ b/src/java.c @@ -137,7 +137,7 @@ static int ctoj_string(JNIEnv *jvm_env, /* {{{ */ o_string = (*jvm_env)->NewStringUTF(jvm_env, (string != NULL) ? string : ""); if (o_string == NULL) { ERROR("java plugin: ctoj_string: NewStringUTF failed."); - return (-1); + return -1; } /* Search for the `void setFoo (String s)' method. */ @@ -147,7 +147,7 @@ static int ctoj_string(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_string: Cannot find method `void %s (String)'.", method_name); (*jvm_env)->DeleteLocalRef(jvm_env, o_string); - return (-1); + return -1; } /* Call the method. */ @@ -156,7 +156,7 @@ static int ctoj_string(JNIEnv *jvm_env, /* {{{ */ /* Decrease reference counter on the java.lang.String object. */ (*jvm_env)->DeleteLocalRef(jvm_env, o_string); - return (0); + return 0; } /* }}} int ctoj_string */ static jstring ctoj_output_string(JNIEnv *jvm_env, /* {{{ */ @@ -170,7 +170,7 @@ static jstring ctoj_output_string(JNIEnv *jvm_env, /* {{{ */ return NULL; } - return (o_string); + return o_string; } /* }}} int ctoj_output_string */ static int ctoj_int(JNIEnv *jvm_env, /* {{{ */ @@ -183,12 +183,12 @@ static int ctoj_int(JNIEnv *jvm_env, /* {{{ */ if (m_set == NULL) { ERROR("java plugin: ctoj_int: Cannot find method `void %s (int)'.", method_name); - return (-1); + return -1; } (*jvm_env)->CallVoidMethod(jvm_env, object_ptr, m_set, value); - return (0); + return 0; } /* }}} int ctoj_int */ static int ctoj_long(JNIEnv *jvm_env, /* {{{ */ @@ -201,12 +201,12 @@ static int ctoj_long(JNIEnv *jvm_env, /* {{{ */ if (m_set == NULL) { ERROR("java plugin: ctoj_long: Cannot find method `void %s (long)'.", method_name); - return (-1); + return -1; } (*jvm_env)->CallVoidMethod(jvm_env, object_ptr, m_set, value); - return (0); + return 0; } /* }}} int ctoj_long */ static int ctoj_double(JNIEnv *jvm_env, /* {{{ */ @@ -219,12 +219,12 @@ static int ctoj_double(JNIEnv *jvm_env, /* {{{ */ if (m_set == NULL) { ERROR("java plugin: ctoj_double: Cannot find method `void %s (double)'.", method_name); - return (-1); + return -1; } (*jvm_env)->CallVoidMethod(jvm_env, object_ptr, m_set, value); - return (0); + return 0; } /* }}} int ctoj_double */ /* Convert a jlong to a java.lang.Number */ @@ -238,7 +238,7 @@ static jobject ctoj_jlong_to_number(JNIEnv *jvm_env, jlong value) /* {{{ */ if (c_long == NULL) { ERROR("java plugin: ctoj_jlong_to_number: Looking up the " "java.lang.Long class failed."); - return (NULL); + return NULL; } m_long_constructor = @@ -246,10 +246,10 @@ static jobject ctoj_jlong_to_number(JNIEnv *jvm_env, jlong value) /* {{{ */ if (m_long_constructor == NULL) { ERROR("java plugin: ctoj_jlong_to_number: Looking up the " "`Long (long)' constructor failed."); - return (NULL); + return NULL; } - return ((*jvm_env)->NewObject(jvm_env, c_long, m_long_constructor, value)); + return (*jvm_env)->NewObject(jvm_env, c_long, m_long_constructor, value); } /* }}} jobject ctoj_jlong_to_number */ /* Convert a jdouble to a java.lang.Number */ @@ -263,7 +263,7 @@ static jobject ctoj_jdouble_to_number(JNIEnv *jvm_env, jdouble value) /* {{{ */ if (c_double == NULL) { ERROR("java plugin: ctoj_jdouble_to_number: Looking up the " "java.lang.Double class failed."); - return (NULL); + return NULL; } m_double_constructor = @@ -271,26 +271,25 @@ static jobject ctoj_jdouble_to_number(JNIEnv *jvm_env, jdouble value) /* {{{ */ if (m_double_constructor == NULL) { ERROR("java plugin: ctoj_jdouble_to_number: Looking up the " "`Double (double)' constructor failed."); - return (NULL); + return NULL; } - return ( - (*jvm_env)->NewObject(jvm_env, c_double, m_double_constructor, value)); + return (*jvm_env)->NewObject(jvm_env, c_double, m_double_constructor, value); } /* }}} jobject ctoj_jdouble_to_number */ /* Convert a value_t to a java.lang.Number */ static jobject ctoj_value_to_number(JNIEnv *jvm_env, /* {{{ */ value_t value, int ds_type) { if (ds_type == DS_TYPE_COUNTER) - return (ctoj_jlong_to_number(jvm_env, (jlong)value.counter)); + return ctoj_jlong_to_number(jvm_env, (jlong)value.counter); else if (ds_type == DS_TYPE_GAUGE) - return (ctoj_jdouble_to_number(jvm_env, (jdouble)value.gauge)); + return ctoj_jdouble_to_number(jvm_env, (jdouble)value.gauge); if (ds_type == DS_TYPE_DERIVE) - return (ctoj_jlong_to_number(jvm_env, (jlong)value.derive)); + return ctoj_jlong_to_number(jvm_env, (jlong)value.derive); if (ds_type == DS_TYPE_ABSOLUTE) - return (ctoj_jlong_to_number(jvm_env, (jlong)value.absolute)); + return ctoj_jlong_to_number(jvm_env, (jlong)value.absolute); else - return (NULL); + return NULL; } /* }}} jobject ctoj_value_to_number */ /* Convert a data_source_t to a org/collectd/api/DataSource */ @@ -306,7 +305,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ if (c_datasource == NULL) { ERROR("java plugin: ctoj_data_source: " "FindClass (org/collectd/api/DataSource) failed."); - return (NULL); + return NULL; } /* Lookup the `ValueList ()' constructor. */ @@ -315,7 +314,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ if (m_datasource_constructor == NULL) { ERROR("java plugin: ctoj_data_source: Cannot find the " "`DataSource ()' constructor."); - return (NULL); + return NULL; } /* Create a new instance. */ @@ -324,7 +323,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ if (o_datasource == NULL) { ERROR("java plugin: ctoj_data_source: " "Creating a new DataSource instance failed."); - return (NULL); + return NULL; } /* Set name via `void setName (String name)' */ @@ -334,7 +333,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_data_source: " "ctoj_string (setName) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_datasource); - return (NULL); + return NULL; } /* Set type via `void setType (int type)' */ @@ -343,7 +342,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_data_source: " "ctoj_int (setType) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_datasource); - return (NULL); + return NULL; } /* Set min via `void setMin (double min)' */ @@ -353,7 +352,7 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_data_source: " "ctoj_double (setMin) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_datasource); - return (NULL); + return NULL; } /* Set max via `void setMax (double max)' */ @@ -363,10 +362,10 @@ static jobject ctoj_data_source(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_data_source: " "ctoj_double (setMax) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_datasource); - return (NULL); + return NULL; } - return (o_datasource); + return o_datasource; } /* }}} jobject ctoj_data_source */ /* Convert a oconfig_value_t to a org/collectd/api/OConfigValue */ @@ -384,7 +383,7 @@ static jobject ctoj_oconfig_value(JNIEnv *jvm_env, /* {{{ */ if (c_ocvalue == NULL) { ERROR("java plugin: ctoj_oconfig_value: " "FindClass (org/collectd/api/OConfigValue) failed."); - return (NULL); + return NULL; } if (ocvalue.type == OCONFIG_TYPE_BOOLEAN) { @@ -397,11 +396,11 @@ static jobject ctoj_oconfig_value(JNIEnv *jvm_env, /* {{{ */ if (m_ocvalue_constructor == NULL) { ERROR("java plugin: ctoj_oconfig_value: Cannot find the " "`OConfigValue (boolean)' constructor."); - return (NULL); + return NULL; } - return ((*jvm_env)->NewObject(jvm_env, c_ocvalue, m_ocvalue_constructor, - tmp_boolean)); + return (*jvm_env)->NewObject(jvm_env, c_ocvalue, m_ocvalue_constructor, + tmp_boolean); } /* if (ocvalue.type == OCONFIG_TYPE_BOOLEAN) */ else if (ocvalue.type == OCONFIG_TYPE_STRING) { m_ocvalue_constructor = (*jvm_env)->GetMethodID( @@ -409,14 +408,14 @@ static jobject ctoj_oconfig_value(JNIEnv *jvm_env, /* {{{ */ if (m_ocvalue_constructor == NULL) { ERROR("java plugin: ctoj_oconfig_value: Cannot find the " "`OConfigValue (String)' constructor."); - return (NULL); + return NULL; } o_argument = (*jvm_env)->NewStringUTF(jvm_env, ocvalue.value.string); if (o_argument == NULL) { ERROR("java plugin: ctoj_oconfig_value: " "Creating a String object failed."); - return (NULL); + return NULL; } } else if (ocvalue.type == OCONFIG_TYPE_NUMBER) { m_ocvalue_constructor = (*jvm_env)->GetMethodID( @@ -424,17 +423,17 @@ static jobject ctoj_oconfig_value(JNIEnv *jvm_env, /* {{{ */ if (m_ocvalue_constructor == NULL) { ERROR("java plugin: ctoj_oconfig_value: Cannot find the " "`OConfigValue (Number)' constructor."); - return (NULL); + return NULL; } o_argument = ctoj_jdouble_to_number(jvm_env, (jdouble)ocvalue.value.number); if (o_argument == NULL) { ERROR("java plugin: ctoj_oconfig_value: " "Creating a Number object failed."); - return (NULL); + return NULL; } } else { - return (NULL); + return NULL; } assert(m_ocvalue_constructor != NULL); @@ -446,11 +445,11 @@ static jobject ctoj_oconfig_value(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_oconfig_value: " "Creating an OConfigValue object failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_argument); - return (NULL); + return NULL; } (*jvm_env)->DeleteLocalRef(jvm_env, o_argument); - return (o_ocvalue); + return o_ocvalue; } /* }}} jobject ctoj_oconfig_value */ /* Convert a oconfig_item_t to a org/collectd/api/OConfigItem */ @@ -467,7 +466,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ if (c_ocitem == NULL) { ERROR("java plugin: ctoj_oconfig_item: " "FindClass (org/collectd/api/OConfigItem) failed."); - return (NULL); + return NULL; } /* Get the required methods: m_ocitem_constructor, m_addvalue, and m_addchild @@ -477,7 +476,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ if (m_ocitem_constructor == NULL) { ERROR("java plugin: ctoj_oconfig_item: Cannot find the " "`OConfigItem (String)' constructor."); - return (NULL); + return NULL; } m_addvalue = (*jvm_env)->GetMethodID(jvm_env, c_ocitem, "addValue", @@ -485,7 +484,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ if (m_addvalue == NULL) { ERROR("java plugin: ctoj_oconfig_item: Cannot find the " "`addValue (OConfigValue)' method."); - return (NULL); + return NULL; } m_addchild = (*jvm_env)->GetMethodID(jvm_env, c_ocitem, "addChild", @@ -493,7 +492,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ if (m_addchild == NULL) { ERROR("java plugin: ctoj_oconfig_item: Cannot find the " "`addChild (OConfigItem)' method."); - return (NULL); + return NULL; } /* }}} */ @@ -503,7 +502,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ if (o_key == NULL) { ERROR("java plugin: ctoj_oconfig_item: " "Creating String object failed."); - return (NULL); + return NULL; } /* Create an OConfigItem object */ @@ -513,7 +512,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_oconfig_item: " "Creating an OConfigItem object failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_key); - return (NULL); + return NULL; } /* We don't need the String object any longer.. */ @@ -529,7 +528,7 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_oconfig_item: " "Creating an OConfigValue object failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_ocitem); - return (NULL); + return NULL; } (*jvm_env)->CallVoidMethod(jvm_env, o_ocitem, m_addvalue, o_value); @@ -546,14 +545,14 @@ static jobject ctoj_oconfig_item(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_oconfig_item: " "Creating an OConfigItem object failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_ocitem); - return (NULL); + return NULL; } (*jvm_env)->CallVoidMethod(jvm_env, o_ocitem, m_addchild, o_child); (*jvm_env)->DeleteLocalRef(jvm_env, o_child); } /* }}} for (i = 0; i < ci->children_num; i++) */ - return (o_ocitem); + return o_ocitem; } /* }}} jobject ctoj_oconfig_item */ /* Convert a data_set_t to a org/collectd/api/DataSet */ @@ -570,7 +569,7 @@ static jobject ctoj_data_set(JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ if (c_dataset == NULL) { ERROR("java plugin: ctoj_data_set: Looking up the " "org/collectd/api/DataSet class failed."); - return (NULL); + return NULL; } /* Search for the `DataSet (String type)' constructor. */ @@ -579,7 +578,7 @@ static jobject ctoj_data_set(JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ if (m_constructor == NULL) { ERROR("java plugin: ctoj_data_set: Looking up the " "`DataSet (String)' constructor failed."); - return (NULL); + return NULL; } /* Search for the `void addDataSource (DataSource)' method. */ @@ -588,20 +587,20 @@ static jobject ctoj_data_set(JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ if (m_add == NULL) { ERROR("java plugin: ctoj_data_set: Looking up the " "`addDataSource (DataSource)' method failed."); - return (NULL); + return NULL; } o_type = (*jvm_env)->NewStringUTF(jvm_env, ds->type); if (o_type == NULL) { ERROR("java plugin: ctoj_data_set: Creating a String object failed."); - return (NULL); + return NULL; } o_dataset = (*jvm_env)->NewObject(jvm_env, c_dataset, m_constructor, o_type); if (o_dataset == NULL) { ERROR("java plugin: ctoj_data_set: Creating a DataSet object failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_type); - return (NULL); + return NULL; } /* Decrease reference counter on the java.lang.String object. */ @@ -615,7 +614,7 @@ static jobject ctoj_data_set(JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ ERROR("java plugin: ctoj_data_set: ctoj_data_source (%s.%s) failed", ds->type, ds->ds[i].name); (*jvm_env)->DeleteLocalRef(jvm_env, o_dataset); - return (NULL); + return NULL; } (*jvm_env)->CallVoidMethod(jvm_env, o_dataset, m_add, o_datasource); @@ -623,7 +622,7 @@ static jobject ctoj_data_set(JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_datasource); } /* for (i = 0; i < ds->ds_num; i++) */ - return (o_dataset); + return o_dataset; } /* }}} jobject ctoj_data_set */ static int ctoj_value_list_add_value(JNIEnv *jvm_env, /* {{{ */ @@ -637,21 +636,21 @@ static int ctoj_value_list_add_value(JNIEnv *jvm_env, /* {{{ */ if (m_addvalue == NULL) { ERROR("java plugin: ctoj_value_list_add_value: " "Cannot find method `void addValue (Number)'."); - return (-1); + return -1; } o_number = ctoj_value_to_number(jvm_env, value, ds_type); if (o_number == NULL) { ERROR("java plugin: ctoj_value_list_add_value: " "ctoj_value_to_number failed."); - return (-1); + return -1; } (*jvm_env)->CallVoidMethod(jvm_env, object_ptr, m_addvalue, o_number); (*jvm_env)->DeleteLocalRef(jvm_env, o_number); - return (0); + return 0; } /* }}} int ctoj_value_list_add_value */ static int ctoj_value_list_add_data_set(JNIEnv *jvm_env, /* {{{ */ @@ -666,7 +665,7 @@ static int ctoj_value_list_add_data_set(JNIEnv *jvm_env, /* {{{ */ if (m_setdataset == NULL) { ERROR("java plugin: ctoj_value_list_add_data_set: " "Cannot find the `void setDataSet (DataSet)' method."); - return (-1); + return -1; } /* Create a DataSet object. */ @@ -675,7 +674,7 @@ static int ctoj_value_list_add_data_set(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_value_list_add_data_set: " "ctoj_data_set (%s) failed.", ds->type); - return (-1); + return -1; } /* Actually call the method. */ @@ -684,7 +683,7 @@ static int ctoj_value_list_add_data_set(JNIEnv *jvm_env, /* {{{ */ /* Decrease reference counter on the List object. */ (*jvm_env)->DeleteLocalRef(jvm_env, o_dataset); - return (0); + return 0; } /* }}} int ctoj_value_list_add_data_set */ /* Convert a value_list_t (and data_set_t) to a org/collectd/api/ValueList */ @@ -701,7 +700,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ if (c_valuelist == NULL) { ERROR("java plugin: ctoj_value_list: " "FindClass (org/collectd/api/ValueList) failed."); - return (NULL); + return NULL; } /* Lookup the `ValueList ()' constructor. */ @@ -710,7 +709,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ if (m_valuelist_constructor == NULL) { ERROR("java plugin: ctoj_value_list: Cannot find the " "`ValueList ()' constructor."); - return (NULL); + return NULL; } /* Create a new instance. */ @@ -719,7 +718,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ if (o_valuelist == NULL) { ERROR("java plugin: ctoj_value_list: Creating a new ValueList instance " "failed."); - return (NULL); + return NULL; } status = ctoj_value_list_add_data_set(jvm_env, c_valuelist, o_valuelist, ds); @@ -727,7 +726,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_value_list: " "ctoj_value_list_add_data_set failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_valuelist); - return (NULL); + return NULL; } /* Set the strings.. */ @@ -738,7 +737,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_value_list: ctoj_string (%s) failed.", \ method_name); \ (*jvm_env)->DeleteLocalRef(jvm_env, o_valuelist); \ - return (NULL); \ + return NULL; \ } \ } while (0) @@ -756,7 +755,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: ctoj_value_list: ctoj_long (setTime) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_valuelist); - return (NULL); + return NULL; } /* Set the `interval' member.. */ @@ -765,7 +764,7 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: ctoj_value_list: ctoj_long (setInterval) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_valuelist); - return (NULL); + return NULL; } for (size_t i = 0; i < vl->values_len; i++) { @@ -775,11 +774,11 @@ static jobject ctoj_value_list(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_value_list: " "ctoj_value_list_add_value failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_valuelist); - return (NULL); + return NULL; } } - return (o_valuelist); + return o_valuelist; } /* }}} jobject ctoj_value_list */ /* Convert a notification_t to a org/collectd/api/Notification */ @@ -797,7 +796,7 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ if (c_notification == NULL) { ERROR("java plugin: ctoj_notification: " "FindClass (org/collectd/api/Notification) failed."); - return (NULL); + return NULL; } /* Lookup the `Notification ()' constructor. */ @@ -806,7 +805,7 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ if (m_constructor == NULL) { ERROR("java plugin: ctoj_notification: Cannot find the " "`Notification ()' constructor."); - return (NULL); + return NULL; } /* Create a new instance. */ @@ -815,7 +814,7 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ if (o_notification == NULL) { ERROR("java plugin: ctoj_notification: Creating a new Notification " "instance failed."); - return (NULL); + return NULL; } /* Set the strings.. */ @@ -827,7 +826,7 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: ctoj_notification: ctoj_string (%s) failed.", \ method_name); \ (*jvm_env)->DeleteLocalRef(jvm_env, o_notification); \ - return (NULL); \ + return NULL; \ } \ } while (0) @@ -846,7 +845,7 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: ctoj_notification: ctoj_long (setTime) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_notification); - return (NULL); + return NULL; } /* Set the `severity' member.. */ @@ -855,10 +854,10 @@ static jobject ctoj_notification(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: ctoj_notification: ctoj_int (setSeverity) failed."); (*jvm_env)->DeleteLocalRef(jvm_env, o_notification); - return (NULL); + return NULL; } - return (o_notification); + return o_notification; } /* }}} jobject ctoj_notification */ /* @@ -878,24 +877,24 @@ static int jtoc_string(JNIEnv *jvm_env, /* {{{ */ if (method_id == NULL) { ERROR("java plugin: jtoc_string: Cannot find method `String %s ()'.", method_name); - return (-1); + return -1; } string_obj = (*jvm_env)->CallObjectMethod(jvm_env, object_ptr, method_id); if ((string_obj == NULL) && (empty_okay == 0)) { ERROR("java plugin: jtoc_string: CallObjectMethod (%s) failed.", method_name); - return (-1); + return -1; } else if ((string_obj == NULL) && (empty_okay != 0)) { memset(buffer, 0, buffer_size); - return (0); + return 0; } c_str = (*jvm_env)->GetStringUTFChars(jvm_env, string_obj, 0); if (c_str == NULL) { ERROR("java plugin: jtoc_string: GetStringUTFChars failed."); (*jvm_env)->DeleteLocalRef(jvm_env, string_obj); - return (-1); + return -1; } sstrncpy(buffer, c_str, buffer_size); @@ -903,7 +902,7 @@ static int jtoc_string(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->ReleaseStringUTFChars(jvm_env, string_obj, c_str); (*jvm_env)->DeleteLocalRef(jvm_env, string_obj); - return (0); + return 0; } /* }}} int jtoc_string */ /* Call an `int ()' method. */ @@ -916,12 +915,12 @@ static int jtoc_int(JNIEnv *jvm_env, /* {{{ */ if (method_id == NULL) { ERROR("java plugin: jtoc_int: Cannot find method `int %s ()'.", method_name); - return (-1); + return -1; } *ret_value = (*jvm_env)->CallIntMethod(jvm_env, object_ptr, method_id); - return (0); + return 0; } /* }}} int jtoc_int */ /* Call a `long ()' method. */ @@ -934,12 +933,12 @@ static int jtoc_long(JNIEnv *jvm_env, /* {{{ */ if (method_id == NULL) { ERROR("java plugin: jtoc_long: Cannot find method `long %s ()'.", method_name); - return (-1); + return -1; } *ret_value = (*jvm_env)->CallLongMethod(jvm_env, object_ptr, method_id); - return (0); + return 0; } /* }}} int jtoc_long */ /* Call a `double ()' method. */ @@ -952,12 +951,12 @@ static int jtoc_double(JNIEnv *jvm_env, /* {{{ */ if (method_id == NULL) { ERROR("java plugin: jtoc_double: Cannot find method `double %s ()'.", method_name); - return (-1); + return -1; } *ret_value = (*jvm_env)->CallDoubleMethod(jvm_env, object_ptr, method_id); - return (0); + return 0; } /* }}} int jtoc_double */ static int jtoc_value(JNIEnv *jvm_env, /* {{{ */ @@ -975,7 +974,7 @@ static int jtoc_value(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: jtoc_value: " "jtoc_double failed."); - return (-1); + return -1; } (*ret_value).gauge = (gauge_t)tmp_double; } else { @@ -985,7 +984,7 @@ static int jtoc_value(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: jtoc_value: " "jtoc_long failed."); - return (-1); + return -1; } if (ds_type == DS_TYPE_DERIVE) @@ -996,7 +995,7 @@ static int jtoc_value(JNIEnv *jvm_env, /* {{{ */ (*ret_value).counter = (counter_t)tmp_long; } - return (0); + return 0; } /* }}} int jtoc_value */ /* Read a List, convert it to `value_t' and add it to the given @@ -1024,7 +1023,7 @@ static int jtoc_values_array(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_number_array); \ if (o_list != NULL) \ (*jvm_env)->DeleteLocalRef(jvm_env, o_list); \ - return (status); + return status; /* Call: List ValueList.getValues () */ m_getvalues = (*jvm_env)->GetMethodID(jvm_env, class_ptr, "getValues", @@ -1093,7 +1092,7 @@ static int jtoc_values_array(JNIEnv *jvm_env, /* {{{ */ #undef BAIL_OUT (*jvm_env)->DeleteLocalRef(jvm_env, o_number_array); (*jvm_env)->DeleteLocalRef(jvm_env, o_list); - return (0); + return 0; } /* }}} int jtoc_values_array */ /* Convert a org/collectd/api/ValueList to a value_list_t. */ @@ -1107,7 +1106,7 @@ static int jtoc_value_list(JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ class_ptr = (*jvm_env)->GetObjectClass(jvm_env, object_ptr); if (class_ptr == NULL) { ERROR("java plugin: jtoc_value_list: GetObjectClass failed."); - return (-1); + return -1; } /* eo == empty okay */ @@ -1117,7 +1116,7 @@ static int jtoc_value_list(JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ object_ptr, method); \ if (status != 0) { \ ERROR("java plugin: jtoc_value_list: jtoc_string (%s) failed.", method); \ - return (-1); \ + return -1; \ } \ } while (0) @@ -1128,7 +1127,7 @@ static int jtoc_value_list(JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ ERROR("java plugin: jtoc_value_list: Data-set `%s' is not defined. " "Please consult the types.db(5) manpage for mor information.", vl->type); - return (-1); + return -1; } SET_STRING(vl->host, "getHost", /* empty = */ 0); @@ -1141,7 +1140,7 @@ static int jtoc_value_list(JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ status = jtoc_long(jvm_env, &tmp_long, class_ptr, object_ptr, "getTime"); if (status != 0) { ERROR("java plugin: jtoc_value_list: jtoc_long (getTime) failed."); - return (-1); + return -1; } /* Java measures time in milliseconds. */ vl->time = MS_TO_CDTIME_T(tmp_long); @@ -1149,17 +1148,17 @@ static int jtoc_value_list(JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ status = jtoc_long(jvm_env, &tmp_long, class_ptr, object_ptr, "getInterval"); if (status != 0) { ERROR("java plugin: jtoc_value_list: jtoc_long (getInterval) failed."); - return (-1); + return -1; } vl->interval = MS_TO_CDTIME_T(tmp_long); status = jtoc_values_array(jvm_env, ds, vl, class_ptr, object_ptr); if (status != 0) { ERROR("java plugin: jtoc_value_list: jtoc_values_array failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int jtoc_value_list */ /* Convert a org/collectd/api/Notification to a notification_t. */ @@ -1173,7 +1172,7 @@ static int jtoc_notification(JNIEnv *jvm_env, notification_t *n, /* {{{ */ class_ptr = (*jvm_env)->GetObjectClass(jvm_env, object_ptr); if (class_ptr == NULL) { ERROR("java plugin: jtoc_notification: GetObjectClass failed."); - return (-1); + return -1; } /* eo == empty okay */ @@ -1184,7 +1183,7 @@ static int jtoc_notification(JNIEnv *jvm_env, notification_t *n, /* {{{ */ if (status != 0) { \ ERROR("java plugin: jtoc_notification: jtoc_string (%s) failed.", \ method); \ - return (-1); \ + return -1; \ } \ } while (0) @@ -1200,7 +1199,7 @@ static int jtoc_notification(JNIEnv *jvm_env, notification_t *n, /* {{{ */ status = jtoc_long(jvm_env, &tmp_long, class_ptr, object_ptr, "getTime"); if (status != 0) { ERROR("java plugin: jtoc_notification: jtoc_long (getTime) failed."); - return (-1); + return -1; } /* Java measures time in milliseconds. */ n->time = MS_TO_CDTIME_T(tmp_long); @@ -1208,11 +1207,11 @@ static int jtoc_notification(JNIEnv *jvm_env, notification_t *n, /* {{{ */ status = jtoc_int(jvm_env, &tmp_int, class_ptr, object_ptr, "getSeverity"); if (status != 0) { ERROR("java plugin: jtoc_notification: jtoc_int (getSeverity) failed."); - return (-1); + return -1; } n->severity = (int)tmp_int; - return (0); + return 0; } /* }}} int jtoc_notification */ /* * Functions accessible from Java @@ -1227,14 +1226,14 @@ static jint JNICALL cjni_api_dispatch_values(JNIEnv *jvm_env, /* {{{ */ status = jtoc_value_list(jvm_env, &vl, java_vl); if (status != 0) { ERROR("java plugin: cjni_api_dispatch_values: jtoc_value_list failed."); - return (-1); + return -1; } status = plugin_dispatch_values(&vl); sfree(vl.values); - return (status); + return status; } /* }}} jint cjni_api_dispatch_values */ static jint JNICALL cjni_api_dispatch_notification(JNIEnv *jvm_env, /* {{{ */ @@ -1247,12 +1246,12 @@ static jint JNICALL cjni_api_dispatch_notification(JNIEnv *jvm_env, /* {{{ */ if (status != 0) { ERROR("java plugin: cjni_api_dispatch_notification: jtoc_notification " "failed."); - return (-1); + return -1; } status = plugin_dispatch_notification(&n); - return (status); + return status; } /* }}} jint cjni_api_dispatch_notification */ static jobject JNICALL cjni_api_get_ds(JNIEnv *jvm_env, /* {{{ */ @@ -1264,7 +1263,7 @@ static jobject JNICALL cjni_api_get_ds(JNIEnv *jvm_env, /* {{{ */ ds_name = (*jvm_env)->GetStringUTFChars(jvm_env, o_string_type, 0); if (ds_name == NULL) { ERROR("java plugin: cjni_api_get_ds: GetStringUTFChars failed."); - return (NULL); + return NULL; } ds = plugin_get_ds(ds_name); @@ -1275,22 +1274,22 @@ static jobject JNICALL cjni_api_get_ds(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_string_type, ds_name); if (ds == NULL) - return (NULL); + return NULL; o_dataset = ctoj_data_set(jvm_env, ds); - return (o_dataset); + return o_dataset; } /* }}} jint cjni_api_get_ds */ static jint JNICALL cjni_api_register_config(JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_config) { - return (cjni_callback_register(jvm_env, o_name, o_config, CB_TYPE_CONFIG)); + return cjni_callback_register(jvm_env, o_name, o_config, CB_TYPE_CONFIG); } /* }}} jint cjni_api_register_config */ static jint JNICALL cjni_api_register_init(JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_config) { - return (cjni_callback_register(jvm_env, o_name, o_config, CB_TYPE_INIT)); + return cjni_callback_register(jvm_env, o_name, o_config, CB_TYPE_INIT); } /* }}} jint cjni_api_register_init */ static jint JNICALL cjni_api_register_read(JNIEnv *jvm_env, /* {{{ */ @@ -1300,7 +1299,7 @@ static jint JNICALL cjni_api_register_read(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_read, CB_TYPE_READ); if (cbi == NULL) - return (-1); + return -1; DEBUG("java plugin: Registering new read callback: %s", cbi->name); @@ -1313,7 +1312,7 @@ static jint JNICALL cjni_api_register_read(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_read); - return (0); + return 0; } /* }}} jint cjni_api_register_read */ static jint JNICALL cjni_api_register_write(JNIEnv *jvm_env, /* {{{ */ @@ -1323,7 +1322,7 @@ static jint JNICALL cjni_api_register_write(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_write, CB_TYPE_WRITE); if (cbi == NULL) - return (-1); + return -1; DEBUG("java plugin: Registering new write callback: %s", cbi->name); @@ -1335,7 +1334,7 @@ static jint JNICALL cjni_api_register_write(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_write); - return (0); + return 0; } /* }}} jint cjni_api_register_write */ static jint JNICALL cjni_api_register_flush(JNIEnv *jvm_env, /* {{{ */ @@ -1345,7 +1344,7 @@ static jint JNICALL cjni_api_register_flush(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_flush, CB_TYPE_FLUSH); if (cbi == NULL) - return (-1); + return -1; DEBUG("java plugin: Registering new flush callback: %s", cbi->name); @@ -1357,14 +1356,13 @@ static jint JNICALL cjni_api_register_flush(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_flush); - return (0); + return 0; } /* }}} jint cjni_api_register_flush */ static jint JNICALL cjni_api_register_shutdown(JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_shutdown) { - return ( - cjni_callback_register(jvm_env, o_name, o_shutdown, CB_TYPE_SHUTDOWN)); + return cjni_callback_register(jvm_env, o_name, o_shutdown, CB_TYPE_SHUTDOWN); } /* }}} jint cjni_api_register_shutdown */ static jint JNICALL cjni_api_register_log(JNIEnv *jvm_env, /* {{{ */ @@ -1374,7 +1372,7 @@ static jint JNICALL cjni_api_register_log(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_log, CB_TYPE_LOG); if (cbi == NULL) - return (-1); + return -1; DEBUG("java plugin: Registering new log callback: %s", cbi->name); @@ -1385,7 +1383,7 @@ static jint JNICALL cjni_api_register_log(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_log); - return (0); + return 0; } /* }}} jint cjni_api_register_log */ static jint JNICALL cjni_api_register_notification(JNIEnv *jvm_env, /* {{{ */ @@ -1396,7 +1394,7 @@ static jint JNICALL cjni_api_register_notification(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_notification, CB_TYPE_NOTIFICATION); if (cbi == NULL) - return (-1); + return -1; DEBUG("java plugin: Registering new notification callback: %s", cbi->name); @@ -1408,7 +1406,7 @@ static jint JNICALL cjni_api_register_notification(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_notification); - return (0); + return 0; } /* }}} jint cjni_api_register_notification */ static jint JNICALL cjni_api_register_match_target(JNIEnv *jvm_env, /* {{{ */ @@ -1421,13 +1419,13 @@ static jint JNICALL cjni_api_register_match_target(JNIEnv *jvm_env, /* {{{ */ if (c_name == NULL) { ERROR("java plugin: cjni_api_register_match_target: " "GetStringUTFChars failed."); - return (-1); + return -1; } status = cjni_callback_register(jvm_env, o_name, o_match, type); if (status != 0) { (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); - return (-1); + return -1; } if (type == CB_TYPE_MATCH) { @@ -1450,7 +1448,7 @@ static jint JNICALL cjni_api_register_match_target(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: cjni_api_register_match_target: " "Don't know whether to create a match or a target."); (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); - return (-1); + return -1; } if (status != 0) { @@ -1458,26 +1456,26 @@ static jint JNICALL cjni_api_register_match_target(JNIEnv *jvm_env, /* {{{ */ "%s failed.", (type == CB_TYPE_MATCH) ? "fc_register_match" : "fc_register_target"); (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); - return (-1); + return -1; } (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); - return (0); + return 0; } /* }}} jint cjni_api_register_match_target */ static jint JNICALL cjni_api_register_match(JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_match) { - return (cjni_api_register_match_target(jvm_env, this, o_name, o_match, - CB_TYPE_MATCH)); + return cjni_api_register_match_target(jvm_env, this, o_name, o_match, + CB_TYPE_MATCH); } /* }}} jint cjni_api_register_match */ static jint JNICALL cjni_api_register_target(JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_target) { - return (cjni_api_register_match_target(jvm_env, this, o_name, o_target, - CB_TYPE_TARGET)); + return cjni_api_register_match_target(jvm_env, this, o_name, o_target, + CB_TYPE_TARGET); } /* }}} jint cjni_api_register_target */ static void JNICALL cjni_api_log(JNIEnv *jvm_env, /* {{{ */ @@ -1635,21 +1633,21 @@ cjni_callback_info_create(JNIEnv *jvm_env, /* {{{ */ default: ERROR("java plugin: cjni_callback_info_create: Unknown type: %#x", type); - return (NULL); + return NULL; } c_name = (*jvm_env)->GetStringUTFChars(jvm_env, o_name, 0); if (c_name == NULL) { ERROR("java plugin: cjni_callback_info_create: " "GetStringUTFChars failed."); - return (NULL); + return NULL; } cbi = calloc(1, sizeof(*cbi)); if (cbi == NULL) { ERROR("java plugin: cjni_callback_info_create: calloc failed."); (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); - return (NULL); + return NULL; } cbi->type = type; @@ -1659,7 +1657,7 @@ cjni_callback_info_create(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: cjni_callback_info_create: strdup failed."); (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); sfree(cbi); - return (NULL); + return NULL; } (*jvm_env)->ReleaseStringUTFChars(jvm_env, o_name, c_name); @@ -1669,7 +1667,7 @@ cjni_callback_info_create(JNIEnv *jvm_env, /* {{{ */ ERROR("java plugin: cjni_callback_info_create: NewGlobalRef failed."); sfree(cbi->name); sfree(cbi); - return (NULL); + return NULL; } cbi->class = (*jvm_env)->GetObjectClass(jvm_env, cbi->object); @@ -1678,7 +1676,7 @@ cjni_callback_info_create(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteGlobalRef(jvm_env, cbi->object); sfree(cbi->name); sfree(cbi); - return (NULL); + return NULL; } cbi->method = (*jvm_env)->GetMethodID(jvm_env, cbi->class, method_name, @@ -1690,10 +1688,10 @@ cjni_callback_info_create(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteGlobalRef(jvm_env, cbi->object); sfree(cbi->name); sfree(cbi); - return (NULL); + return NULL; } - return (cbi); + return cbi; } /* }}} cjni_callback_info_t cjni_callback_info_create */ /* Allocate a `cjni_callback_info_t' via `cjni_callback_info_create' and add it @@ -1710,7 +1708,7 @@ static int cjni_callback_register(JNIEnv *jvm_env, /* {{{ */ cbi = cjni_callback_info_create(jvm_env, o_name, o_callback, type); if (cbi == NULL) - return (-1); + return -1; #if COLLECT_DEBUG switch (type) { @@ -1751,7 +1749,7 @@ static int cjni_callback_register(JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteGlobalRef(jvm_env, cbi->object); free(cbi); - return (-1); + return -1; } java_callbacks = tmp; java_callbacks[java_callbacks_num] = *cbi; @@ -1760,7 +1758,7 @@ static int cjni_callback_register(JNIEnv *jvm_env, /* {{{ */ pthread_mutex_unlock(&java_callbacks_lock); free(cbi); - return (0); + return 0; } /* }}} int cjni_callback_register */ /* Callback for `pthread_key_create'. It frees the data contained in @@ -1801,17 +1799,17 @@ static int cjni_init_native(JNIEnv *jvm_env) /* {{{ */ ERROR("cjni_init_native: Cannot find the API class \"org.collectd.api" ".Collectd\". Please set the correct class path " "using 'JVMArg \"-Djava.class.path=...\"'."); - return (-1); + return -1; } status = (*jvm_env)->RegisterNatives( jvm_env, api_class_ptr, jni_api_functions, (jint)jni_api_functions_num); if (status != 0) { ERROR("cjni_init_native: RegisterNatives failed with status %i.", status); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cjni_init_native */ /* Create the JVM. This is called when the first thread tries to access the JVM @@ -1825,14 +1823,14 @@ static int cjni_create_jvm(void) /* {{{ */ int status; if (jvm != NULL) - return (0); + return 0; status = pthread_key_create(&jvm_env_key, cjni_jvm_env_destroy); if (status != 0) { ERROR("java plugin: cjni_create_jvm: pthread_key_create failed " "with status %i.", status); - return (-1); + return -1; } jvm_env = NULL; @@ -1851,7 +1849,7 @@ static int cjni_create_jvm(void) /* {{{ */ ERROR("java plugin: cjni_create_jvm: " "JNI_CreateJavaVM failed with status %i.", status); - return (-1); + return -1; } assert(jvm != NULL); assert(jvm_env != NULL); @@ -1860,11 +1858,11 @@ static int cjni_create_jvm(void) /* {{{ */ status = cjni_init_native(jvm_env); if (status != 0) { ERROR("java plugin: cjni_create_jvm: cjni_init_native failed."); - return (-1); + return -1; } DEBUG("java plugin: The JVM has been created."); - return (0); + return 0; } /* }}} int cjni_create_jvm */ /* Increase the reference counter to the JVM for this thread. If it was zero, @@ -1882,7 +1880,7 @@ static JNIEnv *cjni_thread_attach(void) /* {{{ */ status = cjni_create_jvm(); if (status != 0) { ERROR("java plugin: cjni_thread_attach: cjni_create_jvm failed."); - return (NULL); + return NULL; } } assert(jvm != NULL); @@ -1893,7 +1891,7 @@ static JNIEnv *cjni_thread_attach(void) /* {{{ */ cjni_env = calloc(1, sizeof(*cjni_env)); if (cjni_env == NULL) { ERROR("java plugin: cjni_thread_attach: calloc failed."); - return (NULL); + return NULL; } cjni_env->reference_counter = 0; cjni_env->jvm_env = NULL; @@ -1917,7 +1915,7 @@ static JNIEnv *cjni_thread_attach(void) /* {{{ */ ERROR("java plugin: cjni_thread_attach: AttachCurrentThread failed " "with status %i.", status); - return (NULL); + return NULL; } cjni_env->reference_counter = 1; @@ -1927,7 +1925,7 @@ static JNIEnv *cjni_thread_attach(void) /* {{{ */ DEBUG("java plugin: cjni_thread_attach: cjni_env->reference_counter = %i", cjni_env->reference_counter); assert(jvm_env != NULL); - return (jvm_env); + return jvm_env; } /* }}} JNIEnv *cjni_thread_attach */ /* Decrease the reference counter of this thread. If it reaches zero, detach @@ -1940,7 +1938,7 @@ static int cjni_thread_detach(void) /* {{{ */ cjni_env = pthread_getspecific(jvm_env_key); if (cjni_env == NULL) { ERROR("java plugin: cjni_thread_detach: pthread_getspecific failed."); - return (-1); + return -1; } assert(cjni_env->reference_counter > 0); @@ -1951,7 +1949,7 @@ static int cjni_thread_detach(void) /* {{{ */ cjni_env->reference_counter); if (cjni_env->reference_counter > 0) - return (0); + return 0; status = (*jvm)->DetachCurrentThread(jvm); if (status != 0) { @@ -1963,7 +1961,7 @@ static int cjni_thread_detach(void) /* {{{ */ cjni_env->reference_counter = 0; cjni_env->jvm_env = NULL; - return (0); + return 0; } /* }}} int cjni_thread_detach */ static int cjni_config_add_jvm_arg(oconfig_item_t *ci) /* {{{ */ @@ -1972,7 +1970,7 @@ static int cjni_config_add_jvm_arg(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("java plugin: `JVMArg' needs exactly one string argument."); - return (-1); + return -1; } if (jvm != NULL) { @@ -1980,24 +1978,24 @@ static int cjni_config_add_jvm_arg(oconfig_item_t *ci) /* {{{ */ "`LoadPlugin' options! The JVM is already started and I have to " "ignore this argument: %s", ci->values[0].value.string); - return (-1); + return -1; } tmp = realloc(jvm_argv, sizeof(char *) * (jvm_argc + 1)); if (tmp == NULL) { ERROR("java plugin: realloc failed."); - return (-1); + return -1; } jvm_argv = tmp; jvm_argv[jvm_argc] = strdup(ci->values[0].value.string); if (jvm_argv[jvm_argc] == NULL) { ERROR("java plugin: strdup failed."); - return (-1); + return -1; } jvm_argc++; - return (0); + return 0; } /* }}} int cjni_config_add_jvm_arg */ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ @@ -2009,19 +2007,19 @@ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("java plugin: `LoadPlugin' needs exactly one string argument."); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; class = realloc(java_classes_list, (java_classes_list_len + 1) * sizeof(*java_classes_list)); if (class == NULL) { ERROR("java plugin: realloc failed."); cjni_thread_detach(); - return (-1); + return -1; } java_classes_list = class; class = java_classes_list + java_classes_list_len; @@ -2031,7 +2029,7 @@ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ if (class->name == NULL) { ERROR("java plugin: strdup failed."); cjni_thread_detach(); - return (-1); + return -1; } class->class = NULL; class->object = NULL; @@ -2052,7 +2050,7 @@ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ class->name); cjni_thread_detach(); free(class->name); - return (-1); + return -1; } constructor_id = @@ -2063,7 +2061,7 @@ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ class->name); cjni_thread_detach(); free(class->name); - return (-1); + return -1; } tmp_object = (*jvm_env)->NewObject(jvm_env, class->class, constructor_id); @@ -2077,14 +2075,14 @@ static int cjni_config_load_plugin(oconfig_item_t *ci) /* {{{ */ class->name); cjni_thread_detach(); free(class->name); - return (-1); + return -1; } cjni_thread_detach(); java_classes_list_len++; - return (0); + return 0; } /* }}} int cjni_config_load_plugin */ static int cjni_config_plugin_block(oconfig_item_t *ci) /* {{{ */ @@ -2100,7 +2098,7 @@ static int cjni_config_plugin_block(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("java plugin: `Plugin' blocks " "need exactly one string argument."); - return (-1); + return -1; } name = ci->values[0].value.string; @@ -2122,20 +2120,20 @@ static int cjni_config_plugin_block(oconfig_item_t *ci) /* {{{ */ "configuration callback has been registered. Please make sure, the " "`LoadPlugin' lines precede the `Plugin' blocks.", name); - return (0); + return 0; } DEBUG("java plugin: Configuring %s", name); jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; o_ocitem = ctoj_oconfig_item(jvm_env, ci); if (o_ocitem == NULL) { ERROR("java plugin: cjni_config_plugin_block: ctoj_oconfig_item failed."); cjni_thread_detach(); - return (-1); + return -1; } class = (*jvm_env)->GetObjectClass(jvm_env, cbi->object); @@ -2146,7 +2144,7 @@ static int cjni_config_plugin_block(oconfig_item_t *ci) /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_ocitem); cjni_thread_detach(); - return (0); + return 0; } /* }}} int cjni_config_plugin_block */ static int cjni_config_perform(oconfig_item_t *ci) /* {{{ */ @@ -2190,10 +2188,10 @@ static int cjni_config_perform(oconfig_item_t *ci) /* {{{ */ if ((success == 0) && (errors > 0)) { ERROR("java plugin: All statements failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cjni_config_perform */ /* Copy the children of `ci' to the global `config_block' variable. */ @@ -2204,17 +2202,17 @@ static int cjni_config_callback(oconfig_item_t *ci) /* {{{ */ assert(ci != NULL); if (ci->children_num == 0) - return (0); /* nothing to do */ + return 0; /* nothing to do */ ci_copy = oconfig_clone(ci); if (ci_copy == NULL) { ERROR("java plugin: oconfig_clone failed."); - return (-1); + return -1; } if (config_block == NULL) { config_block = ci_copy; - return (0); + return 0; } tmp = realloc(config_block->children, @@ -2223,7 +2221,7 @@ static int cjni_config_callback(oconfig_item_t *ci) /* {{{ */ if (tmp == NULL) { ERROR("java plugin: realloc failed."); oconfig_free(ci_copy); - return (-1); + return -1; } config_block->children = tmp; @@ -2239,7 +2237,7 @@ static int cjni_config_callback(oconfig_item_t *ci) /* {{{ */ oconfig_free(ci_copy); - return (0); + return 0; } /* }}} int cjni_config_callback */ /* Free the data contained in the `user_data_t' pointer passed to `cjni_read' @@ -2289,24 +2287,24 @@ static int cjni_read(user_data_t *ud) /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_read: jvm == NULL"); - return (-1); + return -1; } if ((ud == NULL) || (ud->data == NULL)) { ERROR("java plugin: cjni_read: Invalid user data."); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cbi = (cjni_callback_info_t *)ud->data; ret_status = (*jvm_env)->CallIntMethod(jvm_env, cbi->object, cbi->method); cjni_thread_detach(); - return (ret_status); + return ret_status; } /* }}} int cjni_read */ /* Call the CB_TYPE_WRITE callback pointed to by the `user_data_t' pointer. */ @@ -2319,17 +2317,17 @@ static int cjni_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_write: jvm == NULL"); - return (-1); + return -1; } if ((ud == NULL) || (ud->data == NULL)) { ERROR("java plugin: cjni_write: Invalid user data."); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cbi = (cjni_callback_info_t *)ud->data; @@ -2337,7 +2335,7 @@ static int cjni_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (vl_java == NULL) { ERROR("java plugin: cjni_write: ctoj_value_list failed."); cjni_thread_detach(); - return (-1); + return -1; } ret_status = @@ -2346,7 +2344,7 @@ static int cjni_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, vl_java); cjni_thread_detach(); - return (ret_status); + return ret_status; } /* }}} int cjni_write */ /* Call the CB_TYPE_FLUSH callback pointed to by the `user_data_t' pointer. */ @@ -2360,17 +2358,17 @@ static int cjni_flush(cdtime_t timeout, const char *identifier, /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_flush: jvm == NULL"); - return (-1); + return -1; } if ((ud == NULL) || (ud->data == NULL)) { ERROR("java plugin: cjni_flush: Invalid user data."); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cbi = (cjni_callback_info_t *)ud->data; @@ -2380,7 +2378,7 @@ static int cjni_flush(cdtime_t timeout, const char *identifier, /* {{{ */ ERROR("java plugin: cjni_flush: Converting double " "to Number object failed."); cjni_thread_detach(); - return (-1); + return -1; } o_identifier = NULL; @@ -2390,7 +2388,7 @@ static int cjni_flush(cdtime_t timeout, const char *identifier, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_timeout); ERROR("java plugin: cjni_flush: NewStringUTF failed."); cjni_thread_detach(); - return (-1); + return -1; } } @@ -2401,7 +2399,7 @@ static int cjni_flush(cdtime_t timeout, const char *identifier, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_timeout); cjni_thread_detach(); - return (ret_status); + return ret_status; } /* }}} int cjni_flush */ /* Call the CB_TYPE_LOG callback pointed to by the `user_data_t' pointer. */ @@ -2448,17 +2446,17 @@ static int cjni_notification(const notification_t *n, /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_read: jvm == NULL"); - return (-1); + return -1; } if ((ud == NULL) || (ud->data == NULL)) { ERROR("java plugin: cjni_read: Invalid user data."); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cbi = (cjni_callback_info_t *)ud->data; @@ -2466,7 +2464,7 @@ static int cjni_notification(const notification_t *n, /* {{{ */ if (o_notification == NULL) { ERROR("java plugin: cjni_notification: ctoj_notification failed."); cjni_thread_detach(); - return (-1); + return -1; } ret_status = (*jvm_env)->CallIntMethod(jvm_env, cbi->object, cbi->method, @@ -2475,7 +2473,7 @@ static int cjni_notification(const notification_t *n, /* {{{ */ (*jvm_env)->DeleteLocalRef(jvm_env, o_notification); cjni_thread_detach(); - return (ret_status); + return ret_status; } /* }}} int cjni_notification */ /* Callbacks for matches implemented in Java */ @@ -2507,12 +2505,12 @@ static int cjni_match_target_create(const oconfig_item_t *ci, /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_read: jvm == NULL"); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; /* Find out whether to create a match or a target. */ if (strcasecmp("Match", ci->key) == 0) @@ -2617,7 +2615,7 @@ static int cjni_match_target_create(const oconfig_item_t *ci, /* {{{ */ cbi_ret->name, (type == CB_TYPE_MATCH) ? "match" : "target"); /* Success! */ - return (0); + return 0; #undef BAIL_OUT } /* }}} int cjni_match_target_create */ @@ -2626,7 +2624,7 @@ static int cjni_match_target_destroy(void **user_data) /* {{{ */ cjni_callback_info_destroy(*user_data); *user_data = NULL; - return (0); + return 0; } /* }}} int cjni_match_target_destroy */ static int cjni_match_target_invoke(const data_set_t *ds, /* {{{ */ @@ -2642,12 +2640,12 @@ static int cjni_match_target_invoke(const data_set_t *ds, /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_match_target_invoke: jvm == NULL"); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cbi = (cjni_callback_info_t *)*user_data; @@ -2655,14 +2653,14 @@ static int cjni_match_target_invoke(const data_set_t *ds, /* {{{ */ if (o_vl == NULL) { ERROR("java plugin: cjni_match_target_invoke: ctoj_value_list failed."); cjni_thread_detach(); - return (-1); + return -1; } o_ds = ctoj_data_set(jvm_env, ds); if (o_ds == NULL) { ERROR("java plugin: cjni_match_target_invoke: ctoj_value_list failed."); cjni_thread_detach(); - return (-1); + return -1; } ret_status = @@ -2693,7 +2691,7 @@ static int cjni_match_target_invoke(const data_set_t *ds, /* {{{ */ } /* if (cbi->type == CB_TYPE_TARGET) */ cjni_thread_detach(); - return (ret_status); + return ret_status; } /* }}} int cjni_match_target_invoke */ /* Iterate over `java_callbacks' and call all CB_TYPE_INIT callbacks. */ @@ -2717,7 +2715,7 @@ static int cjni_init_plugins(JNIEnv *jvm_env) /* {{{ */ } } - return (0); + return 0; } /* }}} int cjni_init_plugins */ /* Iterate over `java_callbacks' and call all CB_TYPE_SHUTDOWN callbacks. */ @@ -2739,7 +2737,7 @@ static int cjni_shutdown_plugins(JNIEnv *jvm_env) /* {{{ */ } } - return (0); + return 0; } /* }}} int cjni_shutdown_plugins */ static int cjni_shutdown(void) /* {{{ */ @@ -2749,7 +2747,7 @@ static int cjni_shutdown(void) /* {{{ */ int status; if (jvm == NULL) - return (0); + return 0; jvm_env = NULL; args.version = JNI_VERSION_1_2; @@ -2759,7 +2757,7 @@ static int cjni_shutdown(void) /* {{{ */ ERROR("java plugin: cjni_shutdown: AttachCurrentThread failed with status " "%i.", status); - return (-1); + return -1; } /* Execute all the shutdown functions registered by plugins. */ @@ -2801,7 +2799,7 @@ static int cjni_shutdown(void) /* {{{ */ jvm_argc = 0; sfree(jvm_argv); - return (0); + return 0; } /* }}} int cjni_shutdown */ /* Initialization: Create a JVM, load all configured classes and call their @@ -2813,7 +2811,7 @@ static int cjni_init(void) /* {{{ */ if ((config_block == NULL) && (jvm == NULL)) { ERROR("java plugin: cjni_init: No configuration block for " "the java plugin was found."); - return (-1); + return -1; } if (config_block != NULL) { @@ -2823,17 +2821,17 @@ static int cjni_init(void) /* {{{ */ if (jvm == NULL) { ERROR("java plugin: cjni_init: jvm == NULL"); - return (-1); + return -1; } jvm_env = cjni_thread_attach(); if (jvm_env == NULL) - return (-1); + return -1; cjni_init_plugins(jvm_env); cjni_thread_detach(); - return (0); + return 0; } /* }}} int cjni_init */ void module_register(void) { @@ -2841,5 +2839,3 @@ void module_register(void) { plugin_register_init("java", cjni_init); plugin_register_shutdown("java", cjni_shutdown); } /* void module_register (void) */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/libcollectdclient/Makefile.am b/src/libcollectdclient/Makefile.am deleted file mode 100644 index e81a5943..00000000 --- a/src/libcollectdclient/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -AUTOMAKE_OPTIONS = foreign no-dependencies - -pkginclude_HEADERS = collectd/client.h collectd/network.h collectd/network_buffer.h collectd/lcc_features.h -lib_LTLIBRARIES = libcollectdclient.la -nodist_pkgconfig_DATA = libcollectdclient.pc - -BUILT_SOURCES = collectd/lcc_features.h - -libcollectdclient_la_SOURCES = client.c network.c network_buffer.c -libcollectdclient_la_CPPFLAGS = $(AM_CPPFLAGS) \ - -I$(top_srcdir)/src/libcollectdclient/collectd \ - -I$(top_builddir)/src/libcollectdclient/collectd \ - -I$(top_srcdir)/src/daemon -libcollectdclient_la_LDFLAGS = -version-info 1:0:0 -libcollectdclient_la_LIBADD = -if BUILD_WITH_LIBGCRYPT -libcollectdclient_la_CPPFLAGS += $(GCRYPT_CPPFLAGS) -libcollectdclient_la_LDFLAGS += $(GCRYPT_LDFLAGS) -libcollectdclient_la_LIBADD += $(GCRYPT_LIBS) -endif diff --git a/src/libcollectdclient/client.c b/src/libcollectdclient/client.c index f61e9678..c3cd414f 100644 --- a/src/libcollectdclient/client.c +++ b/src/libcollectdclient/client.c @@ -165,18 +165,18 @@ static char *sstrerror(int errnum, char *buf, size_t buflen) { buf[buflen - 1] = 0; - return (buf); + return buf; } /* char *sstrerror */ static int lcc_set_errno(lcc_connection_t *c, int err) /* {{{ */ { if (c == NULL) - return (-1); + return -1; sstrerror(err, c->errbuf, sizeof(c->errbuf)); c->errbuf[sizeof(c->errbuf) - 1] = 0; - return (0); + return 0; } /* }}} int lcc_set_errno */ static char *lcc_strescape(char *dest, const char *src, @@ -186,7 +186,7 @@ static char *lcc_strescape(char *dest, const char *src, size_t src_pos; if ((dest == NULL) || (src == NULL)) - return (NULL); + return NULL; dest_pos = 0; src_pos = 0; @@ -223,7 +223,7 @@ static char *lcc_strescape(char *dest, const char *src, dest_pos++; src_pos++; - return (dest); + return dest; } /* }}} char *lcc_strescape */ /* lcc_chomp: Removes all control-characters at the end of a string. */ @@ -260,11 +260,11 @@ static int lcc_send(lcc_connection_t *c, const char *command) /* {{{ */ status = fprintf(c->fh, "%s\r\n", command); if (status < 0) { lcc_set_errno(c, errno); - return (-1); + return -1; } fflush(c->fh); - return (0); + return 0; } /* }}} int lcc_send */ static int lcc_receive(lcc_connection_t *c, /* {{{ */ @@ -278,7 +278,7 @@ static int lcc_receive(lcc_connection_t *c, /* {{{ */ ptr = fgets(buffer, sizeof(buffer), c->fh); if (ptr == NULL) { lcc_set_errno(c, errno); - return (-1); + return -1; } lcc_chomp(buffer); lcc_tracef("receive: <-- %s\n", buffer); @@ -290,7 +290,7 @@ static int lcc_receive(lcc_connection_t *c, /* {{{ */ res.status = (int)strtol(buffer, &ptr, 0); if ((errno != 0) || (ptr == &buffer[0])) { lcc_set_errno(c, errno); - return (-1); + return -1; } /* Skip white spaces after the status number */ @@ -304,7 +304,7 @@ static int lcc_receive(lcc_connection_t *c, /* {{{ */ /* Error or no lines follow: We're done. */ if (res.status <= 0) { memcpy(ret_res, &res, sizeof(res)); - return (0); + return 0; } /* Allocate space for the char-pointers */ @@ -313,7 +313,7 @@ static int lcc_receive(lcc_connection_t *c, /* {{{ */ res.lines = malloc(res.lines_num * sizeof(*res.lines)); if (res.lines == NULL) { lcc_set_errno(c, ENOMEM); - return (-1); + return -1; } /* Now receive all the lines */ @@ -340,11 +340,11 @@ static int lcc_receive(lcc_connection_t *c, /* {{{ */ free(res.lines[i]); } free(res.lines); - return (-1); + return -1; } memcpy(ret_res, &res, sizeof(res)); - return (0); + return 0; } /* }}} int lcc_receive */ static int lcc_sendreceive(lcc_connection_t *c, /* {{{ */ @@ -354,18 +354,18 @@ static int lcc_sendreceive(lcc_connection_t *c, /* {{{ */ if (c->fh == NULL) { lcc_set_errno(c, EBADF); - return (-1); + return -1; } status = lcc_send(c, command); if (status != 0) - return (status); + return status; status = lcc_receive(c, &res); if (status == 0) memcpy(ret_res, &res, sizeof(*ret_res)); - return (status); + return status; } /* }}} int lcc_sendreceive */ static int lcc_open_unixsocket(lcc_connection_t *c, const char *path) /* {{{ */ @@ -383,7 +383,7 @@ static int lcc_open_unixsocket(lcc_connection_t *c, const char *path) /* {{{ */ fd = socket(AF_UNIX, SOCK_STREAM, /* protocol = */ 0); if (fd < 0) { lcc_set_errno(c, errno); - return (-1); + return -1; } sa.sun_family = AF_UNIX; @@ -393,17 +393,17 @@ static int lcc_open_unixsocket(lcc_connection_t *c, const char *path) /* {{{ */ if (status != 0) { lcc_set_errno(c, errno); close(fd); - return (-1); + return -1; } c->fh = fdopen(fd, "r+"); if (c->fh == NULL) { lcc_set_errno(c, errno); close(fd); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int lcc_open_unixsocket */ static int lcc_open_netsocket(lcc_connection_t *c, /* {{{ */ @@ -432,7 +432,7 @@ static int lcc_open_netsocket(lcc_connection_t *c, /* {{{ */ port = strchr(addr, ']'); if (port == NULL) { LCC_SET_ERRSTR(c, "malformed address: %s", addr_orig); - return (-1); + return -1; } *port = 0; port++; @@ -443,7 +443,7 @@ static int lcc_open_netsocket(lcc_connection_t *c, /* {{{ */ port = NULL; else { LCC_SET_ERRSTR(c, "garbage after address: %s", port); - return (-1); + return -1; } } /* if (*addr = ']') */ else if (strchr(addr, '.') != NULL) /* Hostname or IPv4 */ @@ -463,7 +463,7 @@ static int lcc_open_netsocket(lcc_connection_t *c, /* {{{ */ &ai_res); if (status != 0) { LCC_SET_ERRSTR(c, "getaddrinfo: %s", gai_strerror(status)); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_res; ai_ptr != NULL; @@ -495,11 +495,11 @@ static int lcc_open_netsocket(lcc_connection_t *c, /* {{{ */ if (status != 0) { lcc_set_errno(c, status); freeaddrinfo(ai_res); - return (-1); + return -1; } freeaddrinfo(ai_res); - return (0); + return 0; } /* }}} int lcc_open_netsocket */ static int lcc_open_socket(lcc_connection_t *c, const char *addr) /* {{{ */ @@ -507,7 +507,7 @@ static int lcc_open_socket(lcc_connection_t *c, const char *addr) /* {{{ */ int status = 0; if (addr == NULL) - return (-1); + return -1; assert(c != NULL); assert(c->fh == NULL); @@ -520,7 +520,7 @@ static int lcc_open_socket(lcc_connection_t *c, const char *addr) /* {{{ */ else status = lcc_open_netsocket(c, addr); - return (status); + return status; } /* }}} int lcc_open_socket */ /* @@ -528,17 +528,17 @@ static int lcc_open_socket(lcc_connection_t *c, const char *addr) /* {{{ */ */ unsigned int lcc_version(void) /* {{{ */ { - return (LCC_VERSION); + return LCC_VERSION; } /* }}} unsigned int lcc_version */ const char *lcc_version_string(void) /* {{{ */ { - return (LCC_VERSION_STRING); + return LCC_VERSION_STRING; } /* }}} const char *lcc_version_string */ const char *lcc_version_extra(void) /* {{{ */ { - return (LCC_VERSION_EXTRA); + return LCC_VERSION_EXTRA; } /* }}} const char *lcc_version_extra */ int lcc_connect(const char *address, lcc_connection_t **ret_con) /* {{{ */ @@ -547,29 +547,29 @@ int lcc_connect(const char *address, lcc_connection_t **ret_con) /* {{{ */ int status; if (address == NULL) - return (-1); + return -1; if (ret_con == NULL) - return (-1); + return -1; c = calloc(1, sizeof(*c)); if (c == NULL) - return (-1); + return -1; status = lcc_open_socket(c, address); if (status != 0) { lcc_disconnect(c); - return (status); + return status; } *ret_con = c; - return (0); + return 0; } /* }}} int lcc_connect */ int lcc_disconnect(lcc_connection_t *c) /* {{{ */ { if (c == NULL) - return (-1); + return -1; if (c->fh != NULL) { fclose(c->fh); @@ -577,7 +577,7 @@ int lcc_disconnect(lcc_connection_t *c) /* {{{ */ } free(c); - return (0); + return 0; } /* }}} int lcc_disconnect */ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ @@ -596,17 +596,17 @@ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ int status; if (c == NULL) - return (-1); + return -1; if (ident == NULL) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } /* Build a commend with an escaped version of the identifier string. */ status = lcc_identifier_to_string(c, ident_str, sizeof(ident_str), ident); if (status != 0) - return (status); + return status; snprintf(command, sizeof(command), "GETVAL %s", lcc_strescape(ident_esc, ident_str, sizeof(ident_esc))); @@ -615,12 +615,12 @@ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ /* Send talk to the daemon.. */ status = lcc_sendreceive(c, command, &res); if (status != 0) - return (status); + return status; if (res.status != 0) { LCC_SET_ERRSTR(c, "Server error: %s", res.message); lcc_response_free(&res); - return (-1); + return -1; } values_num = res.lines_num; @@ -636,7 +636,7 @@ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ } \ free(values_names); \ lcc_response_free(&res); \ - return (-1); \ + return -1; \ } while (0) /* If neither the values nor the names are requested, return here.. */ @@ -644,7 +644,7 @@ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ if (ret_values_num != NULL) *ret_values_num = values_num; lcc_response_free(&res); - return (0); + return 0; } /* Allocate space for the values */ @@ -698,7 +698,7 @@ int lcc_getval(lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ lcc_response_free(&res); - return (0); + return 0; } /* }}} int lcc_getval */ int lcc_putval(lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ @@ -712,13 +712,13 @@ int lcc_putval(lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ if ((c == NULL) || (vl == NULL) || (vl->values_len < 1) || (vl->values == NULL) || (vl->values_types == NULL)) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } status = lcc_identifier_to_string(c, ident_str, sizeof(ident_str), &vl->identifier); if (status != 0) - return (status); + return status; SSTRCATF(command, "PUTVAL %s", lcc_strescape(ident_esc, ident_str, sizeof(ident_esc))); @@ -748,16 +748,16 @@ int lcc_putval(lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ status = lcc_sendreceive(c, command, &res); if (status != 0) - return (status); + return status; if (res.status != 0) { LCC_SET_ERRSTR(c, "Server error: %s", res.message); lcc_response_free(&res); - return (-1); + return -1; } lcc_response_free(&res); - return (0); + return 0; } /* }}} int lcc_putval */ int lcc_flush(lcc_connection_t *c, const char *plugin, /* {{{ */ @@ -768,7 +768,7 @@ int lcc_flush(lcc_connection_t *c, const char *plugin, /* {{{ */ if (c == NULL) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } SSTRCPY(command, "FLUSH"); @@ -788,7 +788,7 @@ int lcc_flush(lcc_connection_t *c, const char *plugin, /* {{{ */ status = lcc_identifier_to_string(c, ident_str, sizeof(ident_str), ident); if (status != 0) - return (status); + return status; SSTRCATF(command, " identifier=%s", lcc_strescape(ident_esc, ident_str, sizeof(ident_esc))); @@ -796,16 +796,16 @@ int lcc_flush(lcc_connection_t *c, const char *plugin, /* {{{ */ status = lcc_sendreceive(c, command, &res); if (status != 0) - return (status); + return status; if (res.status != 0) { LCC_SET_ERRSTR(c, "Server error: %s", res.message); lcc_response_free(&res); - return (-1); + return -1; } lcc_response_free(&res); - return (0); + return 0; } /* }}} int lcc_flush */ /* TODO: Implement lcc_putnotif */ @@ -819,21 +819,21 @@ int lcc_listval(lcc_connection_t *c, /* {{{ */ size_t ident_num; if (c == NULL) - return (-1); + return -1; if ((ret_ident == NULL) || (ret_ident_num == NULL)) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } status = lcc_sendreceive(c, "LISTVAL", &res); if (status != 0) - return (status); + return status; if (res.status != 0) { LCC_SET_ERRSTR(c, "Server error: %s", res.message); lcc_response_free(&res); - return (-1); + return -1; } ident_num = res.lines_num; @@ -841,7 +841,7 @@ int lcc_listval(lcc_connection_t *c, /* {{{ */ if (ident == NULL) { lcc_response_free(&res); lcc_set_errno(c, ENOMEM); - return (-1); + return -1; } for (size_t i = 0; i < res.lines_num; i++) { @@ -875,20 +875,20 @@ int lcc_listval(lcc_connection_t *c, /* {{{ */ if (status != 0) { free(ident); - return (-1); + return -1; } *ret_ident = ident; *ret_ident_num = ident_num; - return (0); + return 0; } /* }}} int lcc_listval */ const char *lcc_strerror(lcc_connection_t *c) /* {{{ */ { if (c == NULL) - return ("Invalid object"); - return (c->errbuf); + return "Invalid object"; + return c->errbuf; } /* }}} const char *lcc_strerror */ int lcc_identifier_to_string(lcc_connection_t *c, /* {{{ */ @@ -896,7 +896,7 @@ int lcc_identifier_to_string(lcc_connection_t *c, /* {{{ */ const lcc_identifier_t *ident) { if ((string == NULL) || (string_size < 6) || (ident == NULL)) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } if (ident->plugin_instance[0] == 0) { @@ -917,7 +917,7 @@ int lcc_identifier_to_string(lcc_connection_t *c, /* {{{ */ } string[string_size - 1] = 0; - return (0); + return 0; } /* }}} int lcc_identifier_to_string */ int lcc_string_to_identifier(lcc_connection_t *c, /* {{{ */ @@ -932,7 +932,7 @@ int lcc_string_to_identifier(lcc_connection_t *c, /* {{{ */ string_copy = strdup(string); if (string_copy == NULL) { lcc_set_errno(c, ENOMEM); - return (-1); + return -1; } host = string_copy; @@ -940,7 +940,7 @@ int lcc_string_to_identifier(lcc_connection_t *c, /* {{{ */ if (plugin == NULL) { LCC_SET_ERRSTR(c, "Malformed identifier string: %s", string); free(string_copy); - return (-1); + return -1; } *plugin = 0; plugin++; @@ -949,7 +949,7 @@ int lcc_string_to_identifier(lcc_connection_t *c, /* {{{ */ if (type == NULL) { LCC_SET_ERRSTR(c, "Malformed identifier string: %s", string); free(string_copy); - return (-1); + return -1; } *type = 0; type++; @@ -977,7 +977,7 @@ int lcc_string_to_identifier(lcc_connection_t *c, /* {{{ */ SSTRCPY(ident->type_instance, type_instance); free(string_copy); - return (0); + return 0; } /* }}} int lcc_string_to_identifier */ int lcc_identifier_compare(const void *a, /* {{{ */ @@ -987,17 +987,17 @@ int lcc_identifier_compare(const void *a, /* {{{ */ int status; if ((i0 == NULL) && (i1 == NULL)) - return (0); + return 0; else if (i0 == NULL) - return (-1); + return -1; else if (i1 == NULL) - return (1); + return 1; #define CMP_FIELD(f) \ do { \ status = strcmp(i0->f, i1->f); \ if (status != 0) \ - return (status); \ + return status; \ } while (0); CMP_FIELD(host); @@ -1008,18 +1008,16 @@ int lcc_identifier_compare(const void *a, /* {{{ */ #undef CMP_FIELD - return (0); + return 0; } /* }}} int lcc_identifier_compare */ int lcc_sort_identifiers(lcc_connection_t *c, /* {{{ */ lcc_identifier_t *idents, size_t idents_num) { if (idents == NULL) { lcc_set_errno(c, EINVAL); - return (-1); + return -1; } qsort(idents, idents_num, sizeof(*idents), lcc_identifier_compare); - return (0); + return 0; } /* }}} int lcc_sort_identifiers */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/libcollectdclient/collectd/client.h b/src/libcollectdclient/collectd/client.h index 36aaf921..8604ff6b 100644 --- a/src/libcollectdclient/collectd/client.h +++ b/src/libcollectdclient/collectd/client.h @@ -39,9 +39,7 @@ /* * Includes (for data types) */ -#if HAVE_STDINT_H #include -#endif #include #include @@ -141,5 +139,4 @@ int lcc_sort_identifiers(lcc_connection_t *c, lcc_identifier_t *idents, LCC_END_DECLS -/* vim: set sw=2 sts=2 et : */ #endif /* LIBCOLLECTD_COLLECTDCLIENT_H */ diff --git a/src/libcollectdclient/collectd/lcc_features.h.in b/src/libcollectdclient/collectd/lcc_features.h.in index 0e6fcd43..304845e2 100644 --- a/src/libcollectdclient/collectd/lcc_features.h.in +++ b/src/libcollectdclient/collectd/lcc_features.h.in @@ -62,6 +62,3 @@ const char *lcc_version_extra (void); LCC_END_DECLS #endif /* ! LIBCOLLECTD_LCC_FEATURES_H */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ - diff --git a/src/libcollectdclient/collectd/network.h b/src/libcollectdclient/collectd/network.h index fdb9b33f..35fd7d62 100644 --- a/src/libcollectdclient/collectd/network.h +++ b/src/libcollectdclient/collectd/network.h @@ -73,5 +73,4 @@ int lcc_network_notification_send (lcc_network_t *net, const lcc_notification_t *notif); #endif -/* vim: set sw=2 sts=2 et : */ #endif /* LIBCOLLECTDCLIENT_NETWORK_H */ diff --git a/src/libcollectdclient/collectd/network_buffer.h b/src/libcollectdclient/collectd/network_buffer.h index 5612458b..9f393103 100644 --- a/src/libcollectdclient/collectd/network_buffer.h +++ b/src/libcollectdclient/collectd/network_buffer.h @@ -55,4 +55,3 @@ int lcc_network_buffer_get(lcc_network_buffer_t *nb, void *buffer, size_t *buffer_size); #endif /* LIBCOLLECTDCLIENT_NETWORK_BUFFER_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/libcollectdclient/network.c b/src/libcollectdclient/network.c index a21799c2..49257d4a 100644 --- a/src/libcollectdclient/network.c +++ b/src/libcollectdclient/network.c @@ -81,10 +81,10 @@ struct lcc_server_s { static int server_close_socket(lcc_server_t *srv) /* {{{ */ { if (srv == NULL) - return (EINVAL); + return EINVAL; if (srv->fd < 0) - return (0); + return 0; close(srv->fd); srv->fd = -1; @@ -92,7 +92,7 @@ static int server_close_socket(lcc_server_t *srv) /* {{{ */ srv->sa = NULL; srv->sa_len = 0; - return (0); + return 0; } /* }}} int server_close_socket */ static void int_server_destroy(lcc_server_t *srv) /* {{{ */ @@ -121,7 +121,7 @@ static int server_open_socket(lcc_server_t *srv) /* {{{ */ int status; if (srv == NULL) - return (EINVAL); + return EINVAL; if (srv->fd >= 0) server_close_socket(srv); @@ -132,7 +132,7 @@ static int server_open_socket(lcc_server_t *srv) /* {{{ */ status = getaddrinfo(srv->node, srv->service, &ai_hints, &ai_list); if (status != 0) - return (status); + return status; assert(ai_list != NULL); for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -189,8 +189,8 @@ static int server_open_socket(lcc_server_t *srv) /* {{{ */ freeaddrinfo(ai_list); if (srv->fd < 0) - return (-1); - return (0); + return -1; + return 0; } /* }}} int server_open_socket */ static int server_send_buffer(lcc_server_t *srv) /* {{{ */ @@ -202,7 +202,7 @@ static int server_send_buffer(lcc_server_t *srv) /* {{{ */ if (srv->fd < 0) { status = server_open_socket(srv); if (status != 0) - return (status); + return status; } buffer_size = sizeof(buffer); @@ -210,14 +210,14 @@ static int server_send_buffer(lcc_server_t *srv) /* {{{ */ status = lcc_network_buffer_finalize(srv->buffer); if (status != 0) { lcc_network_buffer_initialize(srv->buffer); - return (status); + return status; } status = lcc_network_buffer_get(srv->buffer, buffer, &buffer_size); lcc_network_buffer_initialize(srv->buffer); if (status != 0) - return (status); + return status; if (buffer_size > sizeof(buffer)) buffer_size = sizeof(buffer); @@ -234,8 +234,8 @@ static int server_send_buffer(lcc_server_t *srv) /* {{{ */ } if (status < 0) - return (status); - return (0); + return status; + return 0; } /* }}} int server_send_buffer */ static int server_value_add(lcc_server_t *srv, /* {{{ */ @@ -244,10 +244,10 @@ static int server_value_add(lcc_server_t *srv, /* {{{ */ status = lcc_network_buffer_add_value(srv->buffer, vl); if (status == 0) - return (0); + return 0; server_send_buffer(srv); - return (lcc_network_buffer_add_value(srv->buffer, vl)); + return lcc_network_buffer_add_value(srv->buffer, vl); } /* }}} int server_value_add */ /* @@ -259,11 +259,11 @@ lcc_network_t *lcc_network_create(void) /* {{{ */ net = calloc(1, sizeof(*net)); if (net == NULL) - return (NULL); + return NULL; net->servers = NULL; - return (net); + return net; } /* }}} lcc_network_t *lcc_network_create */ void lcc_network_destroy(lcc_network_t *net) /* {{{ */ @@ -279,13 +279,13 @@ lcc_server_t *lcc_server_create(lcc_network_t *net, /* {{{ */ lcc_server_t *srv; if ((net == NULL) || (node == NULL)) - return (NULL); + return NULL; if (service == NULL) service = NET_DEFAULT_PORT; srv = calloc(1, sizeof(*srv)); if (srv == NULL) - return (NULL); + return NULL; srv->fd = -1; srv->security_level = NONE; @@ -296,14 +296,14 @@ lcc_server_t *lcc_server_create(lcc_network_t *net, /* {{{ */ srv->node = strdup(node); if (srv->node == NULL) { free(srv); - return (NULL); + return NULL; } srv->service = strdup(service); if (srv->service == NULL) { free(srv->node); free(srv); - return (NULL); + return NULL; } srv->buffer = lcc_network_buffer_create(/* size = */ 0); @@ -311,7 +311,7 @@ lcc_server_t *lcc_server_create(lcc_network_t *net, /* {{{ */ free(srv->service); free(srv->node); free(srv); - return (NULL); + return NULL; } if (net->servers == NULL) { @@ -325,13 +325,13 @@ lcc_server_t *lcc_server_create(lcc_network_t *net, /* {{{ */ last->next = srv; } - return (srv); + return srv; } /* }}} lcc_server_t *lcc_server_create */ int lcc_server_destroy(lcc_network_t *net, lcc_server_t *srv) /* {{{ */ { if ((net == NULL) || (srv == NULL)) - return (EINVAL); + return EINVAL; if (net->servers == srv) { net->servers = srv->next; @@ -343,7 +343,7 @@ int lcc_server_destroy(lcc_network_t *net, lcc_server_t *srv) /* {{{ */ prev = prev->next; if (prev == NULL) - return (ENOENT); + return ENOENT; prev->next = srv->next; srv->next = NULL; @@ -351,17 +351,17 @@ int lcc_server_destroy(lcc_network_t *net, lcc_server_t *srv) /* {{{ */ int_server_destroy(srv); - return (0); + return 0; } /* }}} int lcc_server_destroy */ int lcc_server_set_ttl(lcc_server_t *srv, uint8_t ttl) /* {{{ */ { if (srv == NULL) - return (EINVAL); + return EINVAL; srv->ttl = (int)ttl; - return (0); + return 0; } /* }}} int lcc_server_set_ttl */ int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */ @@ -370,11 +370,11 @@ int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */ int status; if ((srv == NULL) || (interface == NULL)) - return (EINVAL); + return EINVAL; if_index = if_nametoindex(interface); if (if_index == 0) - return (ENOENT); + return ENOENT; /* IPv4 multicast */ if (srv->sa->sa_family == AF_INET) { @@ -398,9 +398,9 @@ int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */ status = setsockopt(srv->fd, IPPROTO_IP, IP_MULTICAST_IF, &mreq, sizeof(mreq)); if (status != 0) - return (status); + return status; - return (0); + return 0; } } @@ -412,9 +412,9 @@ int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */ status = setsockopt(srv->fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &if_index, sizeof(if_index)); if (status != 0) - return (status); + return status; - return (0); + return 0; } } @@ -423,28 +423,26 @@ int lcc_server_set_interface(lcc_server_t *srv, char const *interface) /* {{{ */ status = setsockopt(srv->fd, SOL_SOCKET, SO_BINDTODEVICE, interface, (socklen_t)(strlen(interface) + 1)); if (status != 0) - return (-1); + return -1; #endif - return (0); + return 0; } /* }}} int lcc_server_set_interface */ int lcc_server_set_security_level(lcc_server_t *srv, /* {{{ */ lcc_security_level_t level, const char *username, const char *password) { - return (lcc_network_buffer_set_security_level(srv->buffer, level, username, - password)); + return lcc_network_buffer_set_security_level(srv->buffer, level, username, + password); } /* }}} int lcc_server_set_security_level */ int lcc_network_values_send(lcc_network_t *net, /* {{{ */ const lcc_value_list_t *vl) { if ((net == NULL) || (vl == NULL)) - return (EINVAL); + return EINVAL; for (lcc_server_t *srv = net->servers; srv != NULL; srv = srv->next) server_value_add(srv, vl); - return (0); + return 0; } /* }}} int lcc_network_values_send */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/libcollectdclient/network_buffer.c b/src/libcollectdclient/network_buffer.c index aa4941d8..662265d9 100644 --- a/src/libcollectdclient/network_buffer.c +++ b/src/libcollectdclient/network_buffer.c @@ -35,7 +35,7 @@ #include -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H #if defined __APPLE__ /* default xcode compiler throws warnings even when deprecated functionality * is not used. -Werror breaks the build because of erroneous warnings. @@ -106,7 +106,7 @@ struct lcc_network_buffer_s { char *username; char *password; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H gcry_cipher_hd_t encr_cypher; size_t encr_header_len; char encr_iv[16]; @@ -128,27 +128,27 @@ static _Bool have_gcrypt(void) /* {{{ */ static _Bool need_init = 1; if (!need_init) - return (result); + return result; need_init = 0; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H #if GCRYPT_VERSION_NUMBER < 0x010600 if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread)) - return (0); + return 0; #endif if (!gcry_check_version(GCRYPT_VERSION)) - return (0); + return 0; if (!gcry_control(GCRYCTL_INIT_SECMEM, 32768, 0)) - return (0); + return 0; gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); result = 1; - return (1); + return 1; #else - return (0); + return 0; #endif } /* }}} _Bool have_gcrypt */ @@ -171,7 +171,7 @@ static uint64_t htonll(uint64_t val) /* {{{ */ } if (config == 1) - return (val); + return val; hi = (uint32_t)(val >> 32); lo = (uint32_t)(val & 0x00000000FFFFFFFF); @@ -179,7 +179,7 @@ static uint64_t htonll(uint64_t val) /* {{{ */ hi = htonl(hi); lo = htonl(lo); - return ((((uint64_t)lo) << 32) | ((uint64_t)hi)); + return (((uint64_t)lo) << 32) | ((uint64_t)hi); } /* }}} uint64_t htonll */ #endif @@ -222,9 +222,9 @@ static double htond(double val) /* {{{ */ out.byte[4] = out.byte[5] = 0x00; out.byte[6] = 0xf8; out.byte[7] = 0x7f; - return (out.floating); + return out.floating; } else if (config == 1) - return (val); + return val; else if (config == 2) { in.floating = val; out.byte[0] = in.byte[7]; @@ -235,7 +235,7 @@ static double htond(double val) /* {{{ */ out.byte[5] = in.byte[2]; out.byte[6] = in.byte[1]; out.byte[7] = in.byte[0]; - return (out.floating); + return out.floating; } else if (config == 3) { in.floating = val; out.byte[0] = in.byte[4]; @@ -246,10 +246,10 @@ static double htond(double val) /* {{{ */ out.byte[5] = in.byte[1]; out.byte[6] = in.byte[2]; out.byte[7] = in.byte[3]; - return (out.floating); + return out.floating; } else { /* If in doubt, just copy the value back to the caller. */ - return (val); + return val; } } /* }}} double htond */ @@ -270,7 +270,7 @@ static int nb_add_values(char **ret_buffer, /* {{{ */ sizeof(pkg_values_types) + sizeof(pkg_values); if (*ret_buffer_len < packet_len) - return (ENOMEM); + return ENOMEM; pkg_type = htons(TYPE_VALUES); pkg_length = htons((uint16_t)packet_len); @@ -296,7 +296,7 @@ static int nb_add_values(char **ret_buffer, /* {{{ */ break; default: - return (EINVAL); + return EINVAL; } /* switch (vl->values_types[i]) */ } /* for (vl->values_len) */ @@ -322,7 +322,7 @@ static int nb_add_values(char **ret_buffer, /* {{{ */ *ret_buffer = packet_ptr + packet_len; *ret_buffer_len -= packet_len; - return (0); + return 0; } /* }}} int nb_add_values */ static int nb_add_number(char **ret_buffer, /* {{{ */ @@ -340,7 +340,7 @@ static int nb_add_number(char **ret_buffer, /* {{{ */ packet_len = sizeof(pkg_type) + sizeof(pkg_length) + sizeof(pkg_value); if (*ret_buffer_len < packet_len) - return (ENOMEM); + return ENOMEM; pkg_type = htons(type); pkg_length = htons((uint16_t)packet_len); @@ -359,14 +359,14 @@ static int nb_add_number(char **ret_buffer, /* {{{ */ *ret_buffer = packet_ptr + packet_len; *ret_buffer_len -= packet_len; - return (0); + return 0; } /* }}} int nb_add_number */ static int nb_add_time(char **ret_buffer, /* {{{ */ size_t *ret_buffer_len, uint16_t type, double value) { /* Convert to collectd's "cdtime" representation. */ uint64_t cdtime_value = (uint64_t)(value * 1073741824.0); - return (nb_add_number(ret_buffer, ret_buffer_len, type, cdtime_value)); + return nb_add_number(ret_buffer, ret_buffer_len, type, cdtime_value); } /* }}} int nb_add_time */ static int nb_add_string(char **ret_buffer, /* {{{ */ @@ -382,7 +382,7 @@ static int nb_add_string(char **ret_buffer, /* {{{ */ packet_len = sizeof(pkg_type) + sizeof(pkg_length) + str_len + 1; if (*ret_buffer_len < packet_len) - return (ENOMEM); + return ENOMEM; pkg_type = htons(type); pkg_length = htons((uint16_t)packet_len); @@ -402,7 +402,7 @@ static int nb_add_string(char **ret_buffer, /* {{{ */ *ret_buffer = packet_ptr + packet_len; *ret_buffer_len -= packet_len; - return (0); + return 0; } /* }}} int nb_add_string */ static int nb_add_value_list(lcc_network_buffer_t *nb, /* {{{ */ @@ -419,14 +419,14 @@ static int nb_add_value_list(lcc_network_buffer_t *nb, /* {{{ */ if (strcmp(ident_dst->host, ident_src->host) != 0) { if (nb_add_string(&buffer, &buffer_size, TYPE_HOST, ident_src->host, strlen(ident_src->host)) != 0) - return (-1); + return -1; SSTRNCPY(ident_dst->host, ident_src->host, sizeof(ident_dst->host)); } if (strcmp(ident_dst->plugin, ident_src->plugin) != 0) { if (nb_add_string(&buffer, &buffer_size, TYPE_PLUGIN, ident_src->plugin, strlen(ident_src->plugin)) != 0) - return (-1); + return -1; SSTRNCPY(ident_dst->plugin, ident_src->plugin, sizeof(ident_dst->plugin)); } @@ -434,7 +434,7 @@ static int nb_add_value_list(lcc_network_buffer_t *nb, /* {{{ */ if (nb_add_string(&buffer, &buffer_size, TYPE_PLUGIN_INSTANCE, ident_src->plugin_instance, strlen(ident_src->plugin_instance)) != 0) - return (-1); + return -1; SSTRNCPY(ident_dst->plugin_instance, ident_src->plugin_instance, sizeof(ident_dst->plugin_instance)); } @@ -442,7 +442,7 @@ static int nb_add_value_list(lcc_network_buffer_t *nb, /* {{{ */ if (strcmp(ident_dst->type, ident_src->type) != 0) { if (nb_add_string(&buffer, &buffer_size, TYPE_TYPE, ident_src->type, strlen(ident_src->type)) != 0) - return (-1); + return -1; SSTRNCPY(ident_dst->type, ident_src->type, sizeof(ident_dst->type)); } @@ -450,32 +450,32 @@ static int nb_add_value_list(lcc_network_buffer_t *nb, /* {{{ */ if (nb_add_string(&buffer, &buffer_size, TYPE_TYPE_INSTANCE, ident_src->type_instance, strlen(ident_src->type_instance)) != 0) - return (-1); + return -1; SSTRNCPY(ident_dst->type_instance, ident_src->type_instance, sizeof(ident_dst->type_instance)); } if (nb->state.time != vl->time) { if (nb_add_time(&buffer, &buffer_size, TYPE_TIME_HR, vl->time)) - return (-1); + return -1; nb->state.time = vl->time; } if (nb->state.interval != vl->interval) { if (nb_add_time(&buffer, &buffer_size, TYPE_INTERVAL_HR, vl->interval)) - return (-1); + return -1; nb->state.interval = vl->interval; } if (nb_add_values(&buffer, &buffer_size, vl) != 0) - return (-1); + return -1; nb->ptr = buffer; nb->free = buffer_size; - return (0); + return 0; } /* }}} int nb_add_value_list */ -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H static int nb_add_signature(lcc_network_buffer_t *nb) /* {{{ */ { char *buffer; @@ -497,27 +497,27 @@ static int nb_add_signature(lcc_network_buffer_t *nb) /* {{{ */ hd = NULL; err = gcry_md_open(&hd, GCRY_MD_SHA256, GCRY_MD_FLAG_HMAC); if (err != 0) - return (-1); + return -1; assert(nb->password != NULL); err = gcry_md_setkey(hd, nb->password, strlen(nb->password)); if (err != 0) { gcry_md_close(hd); - return (-1); + return -1; } gcry_md_write(hd, buffer, buffer_size); hash = gcry_md_read(hd, GCRY_MD_SHA256); if (hash == NULL) { gcry_md_close(hd); - return (-1); + return -1; } assert(((2 * sizeof(uint16_t)) + hash_length) == PART_SIGNATURE_SHA256_SIZE); memcpy(nb->buffer + (2 * sizeof(uint16_t)), hash, hash_length); gcry_md_close(hd); - return (0); + return 0; } /* }}} int nb_add_signature */ static int nb_add_encryption(lcc_network_buffer_t *nb) /* {{{ */ @@ -556,7 +556,7 @@ static int nb_add_encryption(lcc_network_buffer_t *nb) /* {{{ */ err = gcry_cipher_open(&nb->encr_cypher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_OFB, /* flags = */ 0); if (err != 0) - return (-1); + return -1; /* Calculate our 256bit key used for AES */ gcry_md_hash_buffer(GCRY_MD_SHA256, password_hash, nb->password, @@ -567,7 +567,7 @@ static int nb_add_encryption(lcc_network_buffer_t *nb) /* {{{ */ if (err != 0) { gcry_cipher_close(nb->encr_cypher); nb->encr_cypher = NULL; - return (-1); + return -1; } } else /* if (nb->encr_cypher != NULL) */ { @@ -579,7 +579,7 @@ static int nb_add_encryption(lcc_network_buffer_t *nb) /* {{{ */ if (err != 0) { gcry_cipher_close(nb->encr_cypher); nb->encr_cypher = NULL; - return (-1); + return -1; } /* Encrypt the buffer in-place */ @@ -588,10 +588,10 @@ static int nb_add_encryption(lcc_network_buffer_t *nb) /* {{{ */ if (err != 0) { gcry_cipher_close(nb->encr_cypher); nb->encr_cypher = NULL; - return (-1); + return -1; } - return (0); + return 0; } /* }}} int nb_add_encryption */ #endif @@ -607,18 +607,18 @@ lcc_network_buffer_t *lcc_network_buffer_create(size_t size) /* {{{ */ if (size < 128) { errno = EINVAL; - return (NULL); + return NULL; } nb = calloc(1, sizeof(*nb)); if (nb == NULL) - return (NULL); + return NULL; nb->size = size; nb->buffer = calloc(1, nb->size); if (nb->buffer == NULL) { free(nb); - return (NULL); + return NULL; } nb->ptr = nb->buffer; @@ -628,7 +628,7 @@ lcc_network_buffer_t *lcc_network_buffer_create(size_t size) /* {{{ */ nb->username = NULL; nb->password = NULL; - return (nb); + return nb; } /* }}} lcc_network_buffer_t *lcc_network_buffer_create */ void lcc_network_buffer_destroy(lcc_network_buffer_t *nb) /* {{{ */ @@ -654,18 +654,18 @@ int lcc_network_buffer_set_security_level(lcc_network_buffer_t *nb, /* {{{ */ nb->password = NULL; nb->seclevel = NONE; lcc_network_buffer_initialize(nb); - return (0); + return 0; } if (!have_gcrypt()) - return (ENOTSUP); + return ENOTSUP; username_copy = strdup(username); password_copy = strdup(password); if ((username_copy == NULL) || (password_copy == NULL)) { free(username_copy); free(password_copy); - return (ENOMEM); + return ENOMEM; } free(nb->username); @@ -675,20 +675,20 @@ int lcc_network_buffer_set_security_level(lcc_network_buffer_t *nb, /* {{{ */ nb->seclevel = level; lcc_network_buffer_initialize(nb); - return (0); + return 0; } /* }}} int lcc_network_buffer_set_security_level */ int lcc_network_buffer_initialize(lcc_network_buffer_t *nb) /* {{{ */ { if (nb == NULL) - return (EINVAL); + return EINVAL; memset(nb->buffer, 0, nb->size); memset(&nb->state, 0, sizeof(nb->state)); nb->ptr = nb->buffer; nb->free = nb->size; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if (nb->seclevel == SIGN) { size_t username_len; uint16_t pkg_type = htons(TYPE_SIGN_SHA256); @@ -731,22 +731,22 @@ int lcc_network_buffer_initialize(lcc_network_buffer_t *nb) /* {{{ */ } #endif - return (0); + return 0; } /* }}} int lcc_network_buffer_initialize */ int lcc_network_buffer_finalize(lcc_network_buffer_t *nb) /* {{{ */ { if (nb == NULL) - return (EINVAL); + return EINVAL; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if (nb->seclevel == SIGN) return nb_add_signature(nb); else if (nb->seclevel == ENCRYPT) return nb_add_encryption(nb); #endif - return (0); + return 0; } /* }}} int lcc_network_buffer_finalize */ int lcc_network_buffer_add_value(lcc_network_buffer_t *nb, /* {{{ */ @@ -754,10 +754,10 @@ int lcc_network_buffer_add_value(lcc_network_buffer_t *nb, /* {{{ */ int status; if ((nb == NULL) || (vl == NULL)) - return (EINVAL); + return EINVAL; status = nb_add_value_list(nb, vl); - return (status); + return status; } /* }}} int lcc_network_buffer_add_value */ int lcc_network_buffer_get(lcc_network_buffer_t *nb, /* {{{ */ @@ -766,7 +766,7 @@ int lcc_network_buffer_get(lcc_network_buffer_t *nb, /* {{{ */ size_t sz_available; if ((nb == NULL) || (buffer_size == NULL)) - return (EINVAL); + return EINVAL; assert(nb->size >= nb->free); sz_required = nb->size - nb->free; @@ -777,7 +777,5 @@ int lcc_network_buffer_get(lcc_network_buffer_t *nb, /* {{{ */ memcpy(buffer, nb->buffer, (sz_available < sz_required) ? sz_available : sz_required); - return (0); + return 0; } /* }}} int lcc_network_buffer_get */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/liboconfig/Makefile.am b/src/liboconfig/Makefile.am deleted file mode 100644 index 5ac0ef34..00000000 --- a/src/liboconfig/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -BUILT_SOURCES = parser.h -#CLEANFILES = parser.[ch] scanner.c -AM_YFLAGS = -d - -noinst_LTLIBRARIES = liboconfig.la - -liboconfig_la_LDFLAGS = -avoid-version $(LEXLIB) -liboconfig_la_SOURCES = oconfig.c oconfig.h aux_types.h scanner.l parser.y diff --git a/src/liboconfig/oconfig.c b/src/liboconfig/oconfig.c index 76134dbe..0ffda3aa 100644 --- a/src/liboconfig/oconfig.c +++ b/src/liboconfig/oconfig.c @@ -62,7 +62,7 @@ static oconfig_item_t *oconfig_parse_fh(FILE *fh) { status = yyparse(); if (status != 0) { fprintf(stderr, "yyparse returned error #%i\n", status); - return (NULL); + return NULL; } c_file = NULL; @@ -71,7 +71,7 @@ static oconfig_item_t *oconfig_parse_fh(FILE *fh) { ci_root = NULL; yyset_in((FILE *)0); - return (ret); + return ret; } /* oconfig_item_t *oconfig_parse_fh */ oconfig_item_t *oconfig_parse_file(const char *file) { @@ -83,7 +83,7 @@ oconfig_item_t *oconfig_parse_file(const char *file) { fh = fopen(file, "r"); if (fh == NULL) { fprintf(stderr, "fopen (%s) failed: %s\n", file, strerror(errno)); - return (NULL); + return NULL; } ret = oconfig_parse_fh(fh); @@ -91,7 +91,7 @@ oconfig_item_t *oconfig_parse_file(const char *file) { c_file = NULL; - return (ret); + return ret; } /* oconfig_item_t *oconfig_parse_file */ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { @@ -100,7 +100,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { ci_copy = calloc(1, sizeof(*ci_copy)); if (ci_copy == NULL) { fprintf(stderr, "calloc failed.\n"); - return (NULL); + return NULL; } ci_copy->values = NULL; ci_copy->parent = NULL; @@ -110,7 +110,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { if (ci_copy->key == NULL) { fprintf(stderr, "strdup failed.\n"); free(ci_copy); - return (NULL); + return NULL; } if (ci_orig->values_num > 0) /* {{{ */ @@ -121,7 +121,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { fprintf(stderr, "calloc failed.\n"); free(ci_copy->key); free(ci_copy); - return (NULL); + return NULL; } ci_copy->values_num = ci_orig->values_num; @@ -133,7 +133,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { if (ci_copy->values[i].value.string == NULL) { fprintf(stderr, "strdup failed.\n"); oconfig_free(ci_copy); - return (NULL); + return NULL; } } else /* ci_copy->values[i].type != OCONFIG_TYPE_STRING) */ { @@ -149,7 +149,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { if (ci_copy->children == NULL) { fprintf(stderr, "calloc failed.\n"); oconfig_free(ci_copy); - return (NULL); + return NULL; } ci_copy->children_num = ci_orig->children_num; @@ -159,7 +159,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { child = oconfig_clone(ci_orig->children + i); if (child == NULL) { oconfig_free(ci_copy); - return (NULL); + return NULL; } child->parent = ci_copy; ci_copy->children[i] = *child; @@ -167,7 +167,7 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci_orig) { } /* for (i = 0; i < ci_copy->children_num; i++) */ } /* }}} if (ci_orig->children_num > 0) */ - return (ci_copy); + return ci_copy; } /* oconfig_item_t *oconfig_clone */ static void oconfig_free_all(oconfig_item_t *ci) { @@ -196,7 +196,3 @@ void oconfig_free(oconfig_item_t *ci) { oconfig_free_all(ci); free(ci); } - -/* - * vim:shiftwidth=2:tabstop=8:softtabstop=2:fdm=marker - */ diff --git a/src/liboconfig/oconfig.h b/src/liboconfig/oconfig.h index d27f6f53..3b81062e 100644 --- a/src/liboconfig/oconfig.h +++ b/src/liboconfig/oconfig.h @@ -67,7 +67,4 @@ oconfig_item_t *oconfig_clone(const oconfig_item_t *ci); void oconfig_free(oconfig_item_t *ci); -/* - * vim: shiftwidth=2:tabstop=8:softtabstop=2 - */ #endif /* OCONFIG_H */ diff --git a/src/load.c b/src/load.c index c7388605..d6584d50 100644 --- a/src/load.c +++ b/src/load.c @@ -69,7 +69,7 @@ static int load_config(const char *key, const char *value) { "is not available, because I can't determine the " "number of CPUS on this system. Sorry."); #endif - return (-1); + return -1; } static void load_submit(gauge_t snum, gauge_t mnum, gauge_t lnum) { int cores = 0; @@ -131,14 +131,14 @@ static int load_read(void) { if ((loadavg = fopen("/proc/loadavg", "r")) == NULL) { char errbuf[1024]; WARNING("load: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (fgets(buffer, 16, loadavg) == NULL) { char errbuf[1024]; WARNING("load: fgets: %s", sstrerror(errno, errbuf, sizeof(errbuf))); fclose(loadavg); - return (-1); + return -1; } if (fclose(loadavg)) { @@ -149,7 +149,7 @@ static int load_read(void) { numfields = strsplit(buffer, fields, 8); if (numfields < 3) - return (-1); + return -1; snum = atof(fields[0]); mnum = atof(fields[1]); @@ -180,7 +180,7 @@ static int load_read(void) { char errbuf[1024]; WARNING("load: perfstat_cpu : %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } snum = (float)cputotal.loadavg[0] / (float)(1 << SBITS); @@ -193,7 +193,7 @@ static int load_read(void) { #error "No applicable input method." #endif - return (0); + return 0; } void module_register(void) { diff --git a/src/log_logstash.c b/src/log_logstash.c index 8df43136..28cc34c8 100644 --- a/src/log_logstash.c +++ b/src/log_logstash.c @@ -236,7 +236,7 @@ static int log_logstash_notification(const notification_t *n, if (g == NULL) { fprintf(stderr, "Could not allocate JSON generator.\n"); - return (0); + return 0; } if (yajl_gen_map_open(g) != yajl_gen_status_ok) @@ -323,12 +323,12 @@ static int log_logstash_notification(const notification_t *n, } log_logstash_print(g, LOG_INFO, (n->time != 0) ? n->time : cdtime()); - return (0); + return 0; err: yajl_gen_free(g); fprintf(stderr, "Could not correctly generate JSON notification\n"); - return (0); + return 0; } /* int log_logstash_notification */ void module_register(void) { @@ -339,5 +339,3 @@ void module_register(void) { plugin_register_notification("log_logstash", log_logstash_notification, /* user_data = */ NULL); } /* void module_register (void) */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/logfile.c b/src/logfile.c index 6629c0b3..e5807f1b 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -53,7 +53,7 @@ static int logfile_config(const char *key, const char *value) { if (log_level < 0) { log_level = LOG_INFO; ERROR("logfile: invalid loglevel [%s] defaulting to 'info'", value); - return (1); + return 1; } } else if (0 == strcasecmp(key, "File")) { sfree(log_file); @@ -194,7 +194,7 @@ static int logfile_notification(const notification_t *n, logfile_print(buf, LOG_INFO, (n->time != 0) ? n->time : cdtime()); - return (0); + return 0; } /* int logfile_notification */ void module_register(void) { @@ -204,5 +204,3 @@ void module_register(void) { plugin_register_notification("logfile", logfile_notification, /* user_data = */ NULL); } /* void module_register (void) */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/lpar.c b/src/lpar.c index df4424c8..a0dde32c 100644 --- a/src/lpar.c +++ b/src/lpar.c @@ -61,10 +61,10 @@ static int lpar_config(const char *key, const char *value) { else report_by_serial = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int lpar_config */ static int lpar_init(void) { @@ -79,7 +79,7 @@ static int lpar_init(void) { char errbuf[1024]; ERROR("lpar plugin: perfstat_partition_total failed: %s (%i)", sstrerror(errno, errbuf, sizeof(errbuf)), status); - return (-1); + return -1; } #if PERFSTAT_SUPPORTS_DONATION @@ -95,7 +95,7 @@ static int lpar_init(void) { pool_stats = 0; } - return (0); + return 0; } /* int lpar_init */ static void lpar_submit(const char *type_instance, double value) { @@ -128,7 +128,7 @@ static int lpar_read(void) { from chassis to chassis through Live Partition Mobility (LPM). */ if (uname(&name) != 0) { ERROR("lpar plugin: uname failed."); - return (-1); + return -1; } sstrncpy(serial, name.machine, sizeof(serial)); @@ -141,7 +141,7 @@ static int lpar_read(void) { char errbuf[1024]; ERROR("lpar plugin: perfstat_partition_total failed: %s (%i)", sstrerror(errno, errbuf, sizeof(errbuf)), status); - return (-1); + return -1; } /* Number of ticks since we last run. */ @@ -149,7 +149,7 @@ static int lpar_read(void) { if (ticks == 0) { /* The stats have not been updated. Return now to avoid * dividing by zero */ - return (0); + return 0; } /* @@ -235,7 +235,7 @@ static int lpar_read(void) { memcpy(&lparstats_old, &lparstats, sizeof(lparstats_old)); - return (0); + return 0; } /* int lpar_read */ void module_register(void) { @@ -243,5 +243,3 @@ void module_register(void) { plugin_register_init("lpar", lpar_init); plugin_register_read("lpar", lpar_read); } /* void module_register */ - -/* vim: set sw=8 noet : */ diff --git a/src/lua.c b/src/lua.c index 2bd56a16..aeaeff24 100644 --- a/src/lua.c +++ b/src/lua.c @@ -79,10 +79,10 @@ static int clua_load_callback(lua_State *L, int callback_ref) /* {{{ */ if (!lua_isfunction(L, -1)) { lua_pop(L, 1); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int clua_load_callback */ /* Store the threads in a global variable so they are not cleaned up by the @@ -96,12 +96,12 @@ static int clua_store_thread(lua_State *L, int idx) /* {{{ */ lua_pushvalue(L, idx); /* +1 = 3 */ if (!lua_isthread(L, -1)) { lua_pop(L, 3); /* -3 = 0 */ - return (-1); + return -1; } luaL_ref(L, LUA_REGISTRYINDEX); lua_pop(L, 1); /* -1 = 0 */ - return (0); + return 0; } /* }}} int clua_store_thread */ static int clua_read(user_data_t *ud) /* {{{ */ @@ -117,7 +117,7 @@ static int clua_read(user_data_t *ud) /* {{{ */ ERROR("Lua plugin: Unable to load callback \"%s\" (id %i).", cb->lua_function_name, cb->callback_id); pthread_mutex_unlock(&cb->lock); - return (-1); + return -1; } /* +1 = 1 */ @@ -131,7 +131,7 @@ static int clua_read(user_data_t *ud) /* {{{ */ ERROR("Lua plugin: Calling a read callback failed: %s", errmsg); lua_pop(L, 1); pthread_mutex_unlock(&cb->lock); - return (-1); + return -1; } if (!lua_isnumber(L, -1)) { @@ -147,7 +147,7 @@ static int clua_read(user_data_t *ud) /* {{{ */ lua_pop(L, 1); /* -1 = 0 */ pthread_mutex_unlock(&cb->lock); - return (status); + return status; } /* }}} int clua_read */ static int clua_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -163,7 +163,7 @@ static int clua_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ ERROR("Lua plugin: Unable to load callback \"%s\" (id %i).", cb->lua_function_name, cb->callback_id); pthread_mutex_unlock(&cb->lock); - return (-1); + return -1; } /* +1 = 1 */ @@ -172,7 +172,7 @@ static int clua_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ lua_pop(L, 1); /* -1 = 0 */ pthread_mutex_unlock(&cb->lock); ERROR("Lua plugin: luaC_pushvaluelist failed."); - return (-1); + return -1; } /* +1 = 2 */ @@ -186,7 +186,7 @@ static int clua_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ ERROR("Lua plugin: Calling the write callback failed:\n%s", errmsg); lua_pop(L, 1); /* -1 = 0 */ pthread_mutex_unlock(&cb->lock); - return (-1); + return -1; } if (!lua_isnumber(L, -1)) { @@ -200,7 +200,7 @@ static int clua_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ lua_pop(L, 1); /* -1 = 0 */ pthread_mutex_unlock(&cb->lock); - return (status); + return status; } /* }}} int clua_write */ /* @@ -404,7 +404,7 @@ static int lua_script_init(lua_script_t *script) /* {{{ */ script->lua_state = luaL_newstate(); if (script->lua_state == NULL) { ERROR("Lua plugin: luaL_newstate() failed."); - return (-1); + return -1; } /* Open up all the standard Lua libraries. */ @@ -437,7 +437,7 @@ static int lua_script_init(lua_script_t *script) /* {{{ */ lua_pop(script->lua_state, 1); } - return (0); + return 0; } /* }}} int lua_script_init */ static int lua_script_load(const char *script_path) /* {{{ */ @@ -445,20 +445,20 @@ static int lua_script_load(const char *script_path) /* {{{ */ lua_script_t *script = malloc(sizeof(*script)); if (script == NULL) { ERROR("Lua plugin: malloc failed."); - return (-1); + return -1; } int status = lua_script_init(script); if (status != 0) { lua_script_free(script); - return (status); + return status; } script->script_path = strdup(script_path); if (script->script_path == NULL) { ERROR("Lua plugin: strdup failed."); lua_script_free(script); - return (-1); + return -1; } status = luaL_loadfile(script->lua_state, script->script_path); @@ -467,7 +467,7 @@ static int lua_script_load(const char *script_path) /* {{{ */ lua_tostring(script->lua_state, -1)); lua_pop(script->lua_state, 1); lua_script_free(script); - return (-1); + return -1; } status = lua_pcall(script->lua_state, @@ -486,7 +486,7 @@ static int lua_script_load(const char *script_path) /* {{{ */ script->script_path, errmsg); lua_script_free(script); - return (-1); + return -1; } /* Append this script to the global list of scripts. */ @@ -500,14 +500,14 @@ static int lua_script_load(const char *script_path) /* {{{ */ scripts = script; } - return (0); + return 0; } /* }}} int lua_script_load */ static int lua_config_base_path(const oconfig_item_t *ci) /* {{{ */ { int status = cf_util_get_string_buffer(ci, base_path, sizeof(base_path)); if (status != 0) - return (status); + return status; size_t len = strlen(base_path); while ((len > 0) && (base_path[len - 1] == '/')) { @@ -517,7 +517,7 @@ static int lua_config_base_path(const oconfig_item_t *ci) /* {{{ */ DEBUG("Lua plugin: base_path = \"%s\";", base_path); - return (0); + return 0; } /* }}} int lua_config_base_path */ static int lua_config_script(const oconfig_item_t *ci) /* {{{ */ @@ -526,7 +526,7 @@ static int lua_config_script(const oconfig_item_t *ci) /* {{{ */ int status = cf_util_get_string_buffer(ci, rel_path, sizeof(rel_path)); if (status != 0) - return (status); + return status; char abs_path[PATH_MAX]; @@ -539,7 +539,7 @@ static int lua_config_script(const oconfig_item_t *ci) /* {{{ */ status = lua_script_load(abs_path); if (status != 0) - return (status); + return status; INFO("Lua plugin: File \"%s\" loaded successfully", abs_path); @@ -576,12 +576,10 @@ static int lua_shutdown(void) /* {{{ */ { lua_script_free(scripts); - return (0); + return 0; } /* }}} int lua_shutdown */ void module_register(void) { plugin_register_complex_config("lua", lua_config); plugin_register_shutdown("lua", lua_shutdown); } - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/lvm.c b/src/lvm.c index 3a84a6d8..c3214b07 100644 --- a/src/lvm.c +++ b/src/lvm.c @@ -156,14 +156,14 @@ static int lvm_read(void) { lvm = lvm_init(NULL); if (!lvm) { ERROR("lvm plugin: lvm_init failed."); - return (-1); + return -1; } vg_names = lvm_list_vg_names(lvm); if (!vg_names) { ERROR("lvm plugin lvm_list_vg_name failed %s", lvm_errmsg(lvm)); lvm_quit(lvm); - return (-1); + return -1; } dm_list_iterate_items(name_list, vg_names) { @@ -181,7 +181,7 @@ static int lvm_read(void) { } lvm_quit(lvm); - return (0); + return 0; } /*lvm_read */ void module_register(void) { diff --git a/src/madwifi.c b/src/madwifi.c index 99e42243..5a915b62 100644 --- a/src/madwifi.c +++ b/src/madwifi.c @@ -418,7 +418,7 @@ static int madwifi_real_init(void) { for (size_t i = 0; i < STATIC_ARRAY_SIZE(bounds); i++) bounds[i]++; - return (0); + return 0; } static int madwifi_config(const char *key, const char *value) { @@ -461,7 +461,7 @@ static int madwifi_config(const char *key, const char *value) { int id = watchitem_find(value); if (id < 0) - return (-1); + return -1; else watchlist_add(watch_items, id); } @@ -470,7 +470,7 @@ static int madwifi_config(const char *key, const char *value) { int id = watchitem_find(value); if (id < 0) - return (-1); + return -1; else watchlist_remove(watch_items, id); } @@ -488,7 +488,7 @@ static int madwifi_config(const char *key, const char *value) { int id = watchitem_find(value); if (id < 0) - return (-1); + return -1; else watchlist_add(misc_items, id); } @@ -497,15 +497,15 @@ static int madwifi_config(const char *key, const char *value) { int id = watchitem_find(value); if (id < 0) - return (-1); + return -1; else watchlist_remove(misc_items, id); } else - return (-1); + return -1; - return (0); + return 0; } static void submit(const char *dev, const char *type, const char *ti1, @@ -600,7 +600,7 @@ static int process_athstats(int sk, const char *dev) { "SIOCGATHSTATS to device %s " "failed with status %i.", dev, status); - return (status); + return status; } /* These stats are handled as a special case, because they are @@ -616,7 +616,7 @@ static int process_athstats(int sk, const char *dev) { /* All other ath statistics */ process_stat_struct(ATH_STAT, &stats, dev, NULL, "ath_stat", "ast_misc"); - return (0); + return 0; } static int process_80211stats(int sk, const char *dev) { @@ -633,11 +633,11 @@ static int process_80211stats(int sk, const char *dev) { "SIOCG80211STATS to device %s " "failed with status %i.", dev, status); - return (status); + return status; } process_stat_struct(IFA_STAT, &stats, dev, NULL, "ath_stat", "is_misc"); - return (0); + return 0; } static int process_station(int sk, const char *dev, @@ -668,7 +668,7 @@ static int process_station(int sk, const char *dev, "IEEE80211_IOCTL_STA_STATS to device %s " "failed with status %i.", dev, status); - return (status); + return status; } /* These two stats are handled as a special case as they are @@ -685,7 +685,7 @@ static int process_station(int sk, const char *dev, /* All other node statistics */ process_stat_struct(NOD_STAT, ns, dev, mac, "node_stat", "ns_misc"); - return (0); + return 0; } static int process_stations(int sk, const char *dev) { @@ -706,7 +706,7 @@ static int process_stations(int sk, const char *dev) { "IEEE80211_IOCTL_STA_INFO to device %s " "failed with status %i.", dev, status); - return (status); + return status; } len = iwr.u.data.length; @@ -723,7 +723,7 @@ static int process_stations(int sk, const char *dev) { if (item_watched(STAT_ATH_NODES)) submit_gauge(dev, "ath_nodes", NULL, NULL, nodes); - return (0); + return 0; } static int process_device(int sk, const char *dev) { @@ -742,7 +742,7 @@ static int process_device(int sk, const char *dev) { if (status == 0) num_success++; - return ((num_success == 0) ? -1 : 0); + return (num_success == 0) ? -1 : 0; } static int check_devname(const char *dev) { @@ -777,7 +777,7 @@ static int sysfs_iterate(int sk) { nets = opendir("/sys/class/net/"); if (nets == NULL) { WARNING("madwifi plugin: opening /sys/class/net failed"); - return (-1); + return -1; } num_success = 0; @@ -803,8 +803,8 @@ static int sysfs_iterate(int sk) { closedir(nets); if ((num_success == 0) && (num_fail != 0)) - return (-1); - return (0); + return -1; + return 0; } static int procfs_iterate(int sk) { @@ -817,7 +817,7 @@ static int procfs_iterate(int sk) { if ((fh = fopen("/proc/net/dev", "r")) == NULL) { WARNING("madwifi plugin: opening /proc/net/dev failed"); - return (-1); + return -1; } num_success = 0; @@ -852,7 +852,7 @@ static int procfs_iterate(int sk) { fclose(fh); if ((num_success == 0) && (num_fail != 0)) - return (-1); + return -1; return 0; } @@ -866,7 +866,7 @@ static int madwifi_read(void) { sk = socket(AF_INET, SOCK_DGRAM, 0); if (sk < 0) - return (-1); + return -1; /* procfs iteration is not safe because it does not check whether given interface is madwifi interface and there are private ioctls used, which diff --git a/src/match_empty_counter.c b/src/match_empty_counter.c index 67c55789..27817fe5 100644 --- a/src/match_empty_counter.c +++ b/src/match_empty_counter.c @@ -40,12 +40,12 @@ static int mec_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ } *user_data = NULL; - return (0); + return 0; } /* }}} int mec_create */ static int mec_destroy(__attribute__((unused)) void **user_data) /* {{{ */ { - return (0); + return 0; } /* }}} int mec_destroy */ static int mec_match(__attribute__((unused)) const data_set_t *ds, /* {{{ */ @@ -67,9 +67,9 @@ static int mec_match(__attribute__((unused)) const data_set_t *ds, /* {{{ */ } if ((num_counters != 0) && (num_counters == num_empty)) - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; - return (FC_MATCH_NO_MATCH); + return FC_MATCH_NO_MATCH; } /* }}} int mec_match */ void module_register(void) { @@ -79,5 +79,3 @@ void module_register(void) { .create = mec_create, .destroy = mec_destroy, .match = mec_match, }); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/match_hashed.c b/src/match_hashed.c index fad52718..c0554b23 100644 --- a/src/match_hashed.c +++ b/src/match_hashed.c @@ -56,19 +56,19 @@ static int mh_config_match(const oconfig_item_t *ci, /* {{{ */ (ci->values[1].type != OCONFIG_TYPE_NUMBER)) { ERROR("hashed match: The `Match' option requires " "exactly two numeric arguments."); - return (-1); + return -1; } if ((ci->values[0].value.number < 0) || (ci->values[1].value.number < 0)) { ERROR("hashed match: The arguments of the `Match' " "option must be positive."); - return (-1); + return -1; } tmp = realloc(m->matches, sizeof(*tmp) * (m->matches_num + 1)); if (tmp == NULL) { ERROR("hashed match: realloc failed."); - return (-1); + return -1; } m->matches = tmp; tmp = m->matches + m->matches_num; @@ -79,12 +79,12 @@ static int mh_config_match(const oconfig_item_t *ci, /* {{{ */ if (tmp->match >= tmp->total) { ERROR("hashed match: The first argument of the `Match' option " "must be smaller than the second argument."); - return (-1); + return -1; } assert(tmp->total != 0); m->matches_num++; - return (0); + return 0; } /* }}} int mh_config_match */ static int mh_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -94,7 +94,7 @@ static int mh_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ m = calloc(1, sizeof(*m)); if (m == NULL) { ERROR("mh_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } for (int i = 0; i < ci->children_num; i++) { @@ -110,11 +110,11 @@ static int mh_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ sfree(m->matches); sfree(m); ERROR("hashed match: No matches were configured. Not creating match."); - return (-1); + return -1; } *user_data = m; - return (0); + return 0; } /* }}} int mh_create */ static int mh_destroy(void **user_data) /* {{{ */ @@ -122,13 +122,13 @@ static int mh_destroy(void **user_data) /* {{{ */ mh_match_t *mh; if ((user_data == NULL) || (*user_data == NULL)) - return (0); + return 0; mh = *user_data; sfree(mh->matches); sfree(mh); - return (0); + return 0; } /* }}} int mh_destroy */ static int mh_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ @@ -139,7 +139,7 @@ static int mh_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ uint32_t hash_val; if ((user_data == NULL) || (*user_data == NULL)) - return (-1); + return -1; m = *user_data; @@ -153,9 +153,9 @@ static int mh_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ for (size_t i = 0; i < m->matches_num; i++) if ((hash_val % m->matches[i].total) == m->matches[i].match) - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; - return (FC_MATCH_NO_MATCH); + return FC_MATCH_NO_MATCH; } /* }}} int mh_match */ void module_register(void) { @@ -166,5 +166,3 @@ void module_register(void) { mproc.match = mh_match; fc_register_match("hashed", mproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/match_regex.c b/src/match_regex.c index 209f7736..6b45f6c9 100644 --- a/src/match_regex.c +++ b/src/match_regex.c @@ -107,7 +107,7 @@ static void mr_free_match(mr_match_t *m) /* {{{ */ static int mr_match_regexen(mr_regex_t *re_head, /* {{{ */ const char *string) { if (re_head == NULL) - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; for (mr_regex_t *re = re_head; re != NULL; re = re->next) { int status; @@ -121,11 +121,11 @@ static int mr_match_regexen(mr_regex_t *re_head, /* {{{ */ } else { DEBUG("regex match: Regular expression `%s' does not match `%s'.", re->re_str, string); - return (FC_MATCH_NO_MATCH); + return FC_MATCH_NO_MATCH; } } - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; } /* }}} int mr_match_regexen */ static int mr_add_regex(mr_regex_t **re_head, const char *re_str, /* {{{ */ @@ -136,7 +136,7 @@ static int mr_add_regex(mr_regex_t **re_head, const char *re_str, /* {{{ */ re = calloc(1, sizeof(*re)); if (re == NULL) { log_err("mr_add_regex: calloc failed."); - return (-1); + return -1; } re->next = NULL; @@ -144,7 +144,7 @@ static int mr_add_regex(mr_regex_t **re_head, const char *re_str, /* {{{ */ if (re->re_str == NULL) { sfree(re); log_err("mr_add_regex: strdup failed."); - return (-1); + return -1; } status = regcomp(&re->re, re->re_str, REG_EXTENDED | REG_NOSUB); @@ -156,7 +156,7 @@ static int mr_add_regex(mr_regex_t **re_head, const char *re_str, /* {{{ */ errmsg); sfree(re->re_str); sfree(re); - return (-1); + return -1; } if (*re_head == NULL) { @@ -171,14 +171,14 @@ static int mr_add_regex(mr_regex_t **re_head, const char *re_str, /* {{{ */ ptr->next = re; } - return (0); + return 0; } /* }}} int mr_add_regex */ static int mr_config_add_regex(mr_regex_t **re_head, /* {{{ */ oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { log_warn("`%s' needs exactly one string argument.", ci->key); - return (-1); + return -1; } return mr_add_regex(re_head, ci->values[0].value.string, ci->key); @@ -195,14 +195,14 @@ static int mr_config_add_meta_regex(llist_t **meta, /* {{{ */ if ((ci->values_num != 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) || (ci->values[1].type != OCONFIG_TYPE_STRING)) { log_warn("`%s' needs exactly two string arguments.", ci->key); - return (-1); + return -1; } if (*meta == NULL) { *meta = llist_create(); if (*meta == NULL) { log_err("mr_config_add_meta_regex: llist_create failed."); - return (-1); + return -1; } } @@ -212,13 +212,13 @@ static int mr_config_add_meta_regex(llist_t **meta, /* {{{ */ meta_key = strdup(meta_key); if (meta_key == NULL) { log_err("mr_config_add_meta_regex: strdup failed."); - return (-1); + return -1; } entry = llentry_create(meta_key, NULL); if (entry == NULL) { log_err("mr_config_add_meta_regex: llentry_create failed."); sfree(meta_key); - return (-1); + return -1; } /* meta_key and entry will now be freed by mr_free_match(). */ llist_append(*meta, entry); @@ -242,7 +242,7 @@ static int mr_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ m = calloc(1, sizeof(*m)); if (m == NULL) { log_err("mr_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } m->invert = 0; @@ -292,18 +292,18 @@ static int mr_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { mr_free_match(m); - return (status); + return status; } *user_data = m; - return (0); + return 0; } /* }}} int mr_create */ static int mr_destroy(void **user_data) /* {{{ */ { if ((user_data != NULL) && (*user_data != NULL)) mr_free_match(*user_data); - return (0); + return 0; } /* }}} int mr_destroy */ static int mr_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ @@ -315,7 +315,7 @@ static int mr_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ int nomatch_value = FC_MATCH_NO_MATCH; if ((user_data == NULL) || (*user_data == NULL)) - return (-1); + return -1; m = *user_data; @@ -325,35 +325,35 @@ static int mr_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ } if (mr_match_regexen(m->host, vl->host) == FC_MATCH_NO_MATCH) - return (nomatch_value); + return nomatch_value; if (mr_match_regexen(m->plugin, vl->plugin) == FC_MATCH_NO_MATCH) - return (nomatch_value); + return nomatch_value; if (mr_match_regexen(m->plugin_instance, vl->plugin_instance) == FC_MATCH_NO_MATCH) - return (nomatch_value); + return nomatch_value; if (mr_match_regexen(m->type, vl->type) == FC_MATCH_NO_MATCH) - return (nomatch_value); + return nomatch_value; if (mr_match_regexen(m->type_instance, vl->type_instance) == FC_MATCH_NO_MATCH) - return (nomatch_value); + return nomatch_value; if (vl->meta != NULL) { for (llentry_t *e = llist_head(m->meta); e != NULL; e = e->next) { mr_regex_t *meta_re = (mr_regex_t *)e->value; char *value; int status = meta_data_get_string(vl->meta, e->key, &value); if (status == (-ENOENT)) /* key is not present */ - return (nomatch_value); + return nomatch_value; if (status != 0) /* some other problem */ continue; /* error will have already been printed. */ if (mr_match_regexen(meta_re, value) == FC_MATCH_NO_MATCH) { sfree(value); - return (nomatch_value); + return nomatch_value; } sfree(value); } } - return (match_value); + return match_value; } /* }}} int mr_match */ void module_register(void) { @@ -364,5 +364,3 @@ void module_register(void) { mproc.match = mr_match; fc_register_match("regex", mproc); } /* module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab fdm=marker : */ diff --git a/src/match_timediff.c b/src/match_timediff.c index 6d00ed29..c80694de 100644 --- a/src/match_timediff.c +++ b/src/match_timediff.c @@ -53,7 +53,7 @@ static int mt_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ m = calloc(1, sizeof(*m)); if (m == NULL) { ERROR("mt_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } m->future = 0; @@ -91,11 +91,11 @@ static int mt_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { free(m); - return (status); + return status; } *user_data = m; - return (0); + return 0; } /* }}} int mt_create */ static int mt_destroy(void **user_data) /* {{{ */ @@ -104,7 +104,7 @@ static int mt_destroy(void **user_data) /* {{{ */ sfree(*user_data); } - return (0); + return 0; } /* }}} int mt_destroy */ static int mt_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ @@ -115,22 +115,22 @@ static int mt_match(const data_set_t __attribute__((unused)) * ds, /* {{{ */ cdtime_t now; if ((user_data == NULL) || (*user_data == NULL)) - return (-1); + return -1; m = *user_data; now = cdtime(); if (m->future != 0) { if (vl->time >= (now + m->future)) - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; } if (m->past != 0) { if (vl->time <= (now - m->past)) - return (FC_MATCH_MATCHES); + return FC_MATCH_MATCHES; } - return (FC_MATCH_NO_MATCH); + return FC_MATCH_NO_MATCH; } /* }}} int mt_match */ void module_register(void) { @@ -141,5 +141,3 @@ void module_register(void) { mproc.match = mt_match; fc_register_match("timediff", mproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/match_value.c b/src/match_value.c index 3c943757..44cea268 100644 --- a/src/match_value.c +++ b/src/match_value.c @@ -74,7 +74,7 @@ static int mv_config_add_satisfy(mv_match_t *m, /* {{{ */ oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { ERROR("`value' match: `%s' needs exactly one string argument.", ci->key); - return (-1); + return -1; } if (strcasecmp("All", ci->values[0].value.string) == 0) @@ -85,10 +85,10 @@ static int mv_config_add_satisfy(mv_match_t *m, /* {{{ */ ERROR("`value' match: Passing `%s' to the `%s' option is invalid. " "The argument must either be `All' or `Any'.", ci->values[0].value.string, ci->key); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int mv_config_add_satisfy */ static int mv_config_add_data_source(mv_match_t *m, /* {{{ */ @@ -99,7 +99,7 @@ static int mv_config_add_data_source(mv_match_t *m, /* {{{ */ /* Check number of arbuments. */ if (ci->values_num < 1) { ERROR("`value' match: `%s' needs at least one argument.", ci->key); - return (-1); + return -1; } /* Check type of arguments */ @@ -112,7 +112,7 @@ static int mv_config_add_data_source(mv_match_t *m, /* {{{ */ ci->key, i + 1, (ci->values[i].type == OCONFIG_TYPE_BOOLEAN) ? "truth value" : "number"); - return (-1); + return -1; } /* Allocate space for the char pointers */ @@ -120,7 +120,7 @@ static int mv_config_add_data_source(mv_match_t *m, /* {{{ */ temp = realloc(m->data_sources, new_data_sources_num * sizeof(char *)); if (temp == NULL) { ERROR("`value' match: realloc failed."); - return (-1); + return -1; } m->data_sources = temp; @@ -138,7 +138,7 @@ static int mv_config_add_data_source(mv_match_t *m, /* {{{ */ m->data_sources_num++; } - return (0); + return 0; } /* }}} int mv_config_add_data_source */ static int mv_config_add_gauge(gauge_t *ret_value, /* {{{ */ @@ -146,12 +146,12 @@ static int mv_config_add_gauge(gauge_t *ret_value, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) { ERROR("`value' match: `%s' needs exactly one numeric argument.", ci->key); - return (-1); + return -1; } *ret_value = ci->values[0].value.number; - return (0); + return 0; } /* }}} int mv_config_add_gauge */ static int mv_config_add_boolean(int *ret_value, /* {{{ */ @@ -159,7 +159,7 @@ static int mv_config_add_boolean(int *ret_value, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) { ERROR("`value' match: `%s' needs exactly one boolean argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].value.boolean) @@ -167,7 +167,7 @@ static int mv_config_add_boolean(int *ret_value, /* {{{ */ else *ret_value = 0; - return (0); + return 0; } /* }}} int mv_config_add_boolean */ static int mv_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -178,7 +178,7 @@ static int mv_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ m = calloc(1, sizeof(*m)); if (m == NULL) { ERROR("mv_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } m->min = NAN; @@ -226,18 +226,18 @@ static int mv_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { mv_free_match(m); - return (status); + return status; } *user_data = m; - return (0); + return 0; } /* }}} int mv_create */ static int mv_destroy(void **user_data) /* {{{ */ { if ((user_data != NULL) && (*user_data != NULL)) mv_free_match(*user_data); - return (0); + return 0; } /* }}} int mv_destroy */ static int mv_match(const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -248,7 +248,7 @@ static int mv_match(const data_set_t *ds, const value_list_t *vl, /* {{{ */ int status; if ((user_data == NULL) || (*user_data == NULL)) - return (-1); + return -1; m = *user_data; @@ -256,7 +256,7 @@ static int mv_match(const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (values == NULL) { ERROR("`value' match: Retrieving the current rate from the cache " "failed."); - return (-1); + return -1; } status = FC_MATCH_NO_MATCH; @@ -305,7 +305,7 @@ static int mv_match(const data_set_t *ds, const value_list_t *vl, /* {{{ */ } /* for (i = 0; i < ds->ds_num; i++) */ free(values); - return (status); + return status; } /* }}} int mv_match */ void module_register(void) { @@ -316,5 +316,3 @@ void module_register(void) { mproc.match = mv_match; fc_register_match("value", mproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/mbmon.c b/src/mbmon.c index aa593a03..b5352bf6 100644 --- a/src/mbmon.c +++ b/src/mbmon.c @@ -99,7 +99,7 @@ static int mbmon_query_daemon(char *buffer, int buffer_size) { ERROR("mbmon: getaddrinfo (%s, %s): %s", host, port, (ai_return == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(ai_return)); - return (-1); + return -1; } fd = -1; @@ -132,7 +132,7 @@ static int mbmon_query_daemon(char *buffer, int buffer_size) { if (fd < 0) { ERROR("mbmon: Could not connect to daemon."); - return (-1); + return -1; } /* receive data from the mbmon daemon */ @@ -150,7 +150,7 @@ static int mbmon_query_daemon(char *buffer, int buffer_size) { ERROR("mbmon: Error reading from socket: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (-1); + return -1; } buffer_fill += status; @@ -166,11 +166,11 @@ static int mbmon_query_daemon(char *buffer, int buffer_size) { "Buffer: `%s'", buffer); close(fd); - return (-1); + return -1; } close(fd); - return (0); + return 0; } static int mbmon_config(const char *key, const char *value) { @@ -183,10 +183,10 @@ static int mbmon_config(const char *key, const char *value) { free(mbmon_port); mbmon_port = strdup(value); } else { - return (-1); + return -1; } - return (0); + return 0; } static void mbmon_submit(const char *type, const char *type_instance, @@ -214,7 +214,7 @@ static int mbmon_read(void) { /* get data from daemon */ if (mbmon_query_daemon(buf, sizeof(buf)) < 0) - return (-1); + return -1; s = buf; while ((t = strchr(s, ':')) != NULL) { @@ -254,7 +254,7 @@ static int mbmon_read(void) { s = nextc + 1; } - return (0); + return 0; } /* void mbmon_read */ /* module_register diff --git a/src/mcelog.c b/src/mcelog.c new file mode 100644 index 00000000..fad18d50 --- /dev/null +++ b/src/mcelog.c @@ -0,0 +1,551 @@ +/*- + * collectd - src/mcelog.c + * MIT License + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + + * Authors: + * Maryam Tahhan + * Volodymyr Mytnyk + * Taras Chornyi + * Krzysztof Matczak + */ + +#include "common.h" +#include "collectd.h" + +#include +#include +#include +#include + +#define MCELOG_PLUGIN "mcelog" +#define MCELOG_BUFF_SIZE 1024 +#define MCELOG_POLL_TIMEOUT 1000 /* ms */ +#define MCELOG_SOCKET_STR "SOCKET" +#define MCELOG_DIMM_NAME "DMI_NAME" +#define MCELOG_CORRECTED_ERR "corrected memory errors" +#define MCELOG_UNCORRECTED_ERR "uncorrected memory errors" + +typedef struct mcelog_config_s { + char logfile[PATH_MAX]; /* mcelog logfile */ + pthread_t tid; /* poll thread id */ +} mcelog_config_t; + +typedef struct socket_adapter_s socket_adapter_t; + +struct socket_adapter_s { + int sock_fd; /* mcelog server socket fd */ + struct sockaddr_un unix_sock; /* mcelog client socket */ + pthread_rwlock_t lock; + /* function pointers for socket operations */ + int (*write)(socket_adapter_t *self, const char *msg, const size_t len); + int (*reinit)(socket_adapter_t *self); + int (*receive)(socket_adapter_t *self, FILE **p_file); + int (*close)(socket_adapter_t *self); +}; + +typedef struct mcelog_memory_rec_s { + int corrected_err_total; /* x total*/ + int corrected_err_timed; /* x in 24h*/ + char corrected_err_timed_period[DATA_MAX_NAME_LEN]; + int uncorrected_err_total; /* x total*/ + int uncorrected_err_timed; /* x in 24h*/ + char uncorrected_err_timed_period[DATA_MAX_NAME_LEN]; + char location[DATA_MAX_NAME_LEN]; /* SOCKET x CHANNEL x DIMM x*/ + char dimm_name[DATA_MAX_NAME_LEN]; /* DMI_NAME "DIMM_F1" */ +} mcelog_memory_rec_t; + +static int socket_close(socket_adapter_t *self); +static int socket_write(socket_adapter_t *self, const char *msg, + const size_t len); +static int socket_reinit(socket_adapter_t *self); +static int socket_receive(socket_adapter_t *self, FILE **p_file); + +static mcelog_config_t g_mcelog_config = {.logfile = "/var/log/mcelog"}; + +static socket_adapter_t socket_adapter = { + .sock_fd = -1, + .unix_sock = + { + .sun_family = AF_UNIX, .sun_path = "/var/run/mcelog-client", + }, + .lock = PTHREAD_RWLOCK_INITIALIZER, + .close = socket_close, + .write = socket_write, + .reinit = socket_reinit, + .receive = socket_receive, +}; + +static _Bool mcelog_thread_running; + +static int mcelog_config(oconfig_item_t *ci) { + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("McelogClientSocket", child->key) == 0) { + if (cf_util_get_string_buffer(child, socket_adapter.unix_sock.sun_path, + sizeof(socket_adapter.unix_sock.sun_path)) < + 0) { + ERROR(MCELOG_PLUGIN ": Invalid configuration option: \"%s\".", + child->key); + return -1; + } + } else if (strcasecmp("McelogLogfile", child->key) == 0) { + if (cf_util_get_string_buffer(child, g_mcelog_config.logfile, + sizeof(g_mcelog_config.logfile)) < 0) { + ERROR(MCELOG_PLUGIN ": Invalid configuration option: \"%s\".", + child->key); + return -1; + } + } else { + ERROR(MCELOG_PLUGIN ": Invalid configuration option: \"%s\".", + child->key); + return -1; + } + } + return 0; +} + +static int socket_close(socket_adapter_t *self) { + int ret = 0; + pthread_rwlock_rdlock(&self->lock); + if (fcntl(self->sock_fd, F_GETFL) != -1) { + char errbuf[MCELOG_BUFF_SIZE]; + if (shutdown(self->sock_fd, SHUT_RDWR) != 0) { + ERROR(MCELOG_PLUGIN ": Socket shutdown failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + ret = -1; + } + if (close(self->sock_fd) != 0) { + ERROR(MCELOG_PLUGIN ": Socket close failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + ret = -1; + } + } + pthread_rwlock_unlock(&self->lock); + return ret; +} + +static int socket_write(socket_adapter_t *self, const char *msg, + const size_t len) { + int ret = 0; + pthread_rwlock_rdlock(&self->lock); + if (swrite(self->sock_fd, msg, len) < 0) + ret = -1; + pthread_rwlock_unlock(&self->lock); + return ret; +} + +static void mcelog_dispatch_notification(notification_t *n) { + if (!n) { + ERROR(MCELOG_PLUGIN ": %s: NULL pointer", __FUNCTION__); + return; + } + + sstrncpy(n->host, hostname_g, sizeof(n->host)); + sstrncpy(n->type, "gauge", sizeof(n->type)); + plugin_dispatch_notification(n); + if (n->meta) + plugin_notification_meta_free(n->meta); +} + +static int socket_reinit(socket_adapter_t *self) { + char errbuff[MCELOG_BUFF_SIZE]; + int ret = -1; + cdtime_t interval = plugin_get_interval(); + struct timeval socket_timeout = CDTIME_T_TO_TIMEVAL(interval); + + /* synchronization via write lock since sock_fd may be changed here */ + pthread_rwlock_wrlock(&self->lock); + self->sock_fd = + socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0); + if (self->sock_fd < 0) { + ERROR(MCELOG_PLUGIN ": Could not create a socket. %s", + sstrerror(errno, errbuff, sizeof(errbuff))); + pthread_rwlock_unlock(&self->lock); + return ret; + } + + /* Set socket timeout option */ + if (setsockopt(self->sock_fd, SOL_SOCKET, SO_SNDTIMEO, &socket_timeout, + sizeof(socket_timeout)) < 0) + ERROR(MCELOG_PLUGIN ": Failed to set the socket timeout option."); + + /* downgrading to read lock due to possible recursive read locks + * in self->close(self) call */ + pthread_rwlock_unlock(&self->lock); + pthread_rwlock_rdlock(&self->lock); + if (connect(self->sock_fd, (struct sockaddr *)&(self->unix_sock), + sizeof(self->unix_sock)) < 0) { + ERROR(MCELOG_PLUGIN ": Failed to connect to mcelog server. %s", + sstrerror(errno, errbuff, sizeof(errbuff))); + self->close(self); + ret = -1; + } else { + ret = 0; + mcelog_dispatch_notification( + &(notification_t){.severity = NOTIF_OKAY, + .time = cdtime(), + .message = "Connected to mcelog server", + .plugin = MCELOG_PLUGIN, + .type_instance = "mcelog_status"}); + } + pthread_rwlock_unlock(&self->lock); + return ret; +} + +static int mcelog_prepare_notification(notification_t *n, + const mcelog_memory_rec_t *mr) { + if (n == NULL || mr == NULL) + return -1; + + if ((mr->location[0] != '\0') && + (plugin_notification_meta_add_string(n, MCELOG_SOCKET_STR, mr->location) < + 0)) { + ERROR(MCELOG_PLUGIN ": add memory location meta data failed"); + return -1; + } + if ((mr->dimm_name[0] != '\0') && + (plugin_notification_meta_add_string(n, MCELOG_DIMM_NAME, mr->dimm_name) < + 0)) { + ERROR(MCELOG_PLUGIN ": add DIMM name meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if (plugin_notification_meta_add_signed_int(n, MCELOG_CORRECTED_ERR, + mr->corrected_err_total) < 0) { + ERROR(MCELOG_PLUGIN ": add corrected errors meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if (plugin_notification_meta_add_signed_int( + n, "corrected memory timed errors", mr->corrected_err_timed) < 0) { + ERROR(MCELOG_PLUGIN ": add corrected timed errors meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if ((mr->corrected_err_timed_period[0] != '\0') && + (plugin_notification_meta_add_string(n, "corrected errors time period", + mr->corrected_err_timed_period) < + 0)) { + ERROR(MCELOG_PLUGIN ": add corrected errors period meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if (plugin_notification_meta_add_signed_int(n, MCELOG_UNCORRECTED_ERR, + mr->uncorrected_err_total) < 0) { + ERROR(MCELOG_PLUGIN ": add corrected errors meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if (plugin_notification_meta_add_signed_int(n, + "uncorrected memory timed errors", + mr->uncorrected_err_timed) < 0) { + ERROR(MCELOG_PLUGIN ": add corrected timed errors meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + if ((mr->uncorrected_err_timed_period[0] != '\0') && + (plugin_notification_meta_add_string(n, "uncorrected errors time period", + mr->uncorrected_err_timed_period) < + 0)) { + ERROR(MCELOG_PLUGIN ": add corrected errors period meta data failed"); + plugin_notification_meta_free(n->meta); + return -1; + } + + return 0; +} + +static int mcelog_submit(const mcelog_memory_rec_t *mr) { + + if (!mr) { + ERROR(MCELOG_PLUGIN ": %s: NULL pointer", __FUNCTION__); + return -1; + } + + value_list_t vl = { + .values_len = 1, + .values = &(value_t){.derive = (derive_t)mr->corrected_err_total}, + .time = cdtime(), + .plugin = MCELOG_PLUGIN, + .type = "errors", + .type_instance = "corrected_memory_errors"}; + + if (mr->dimm_name[0] != '\0') + ssnprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%s_%s", + mr->location, mr->dimm_name); + else + sstrncpy(vl.plugin_instance, mr->location, sizeof(vl.plugin_instance)); + + plugin_dispatch_values(&vl); + + ssnprintf(vl.type_instance, sizeof(vl.type_instance), + "corrected_memory_errors_in_%s", mr->corrected_err_timed_period); + vl.values = &(value_t){.derive = (derive_t)mr->corrected_err_timed}; + plugin_dispatch_values(&vl); + + sstrncpy(vl.type_instance, "uncorrected_memory_errors", + sizeof(vl.type_instance)); + vl.values = &(value_t){.derive = (derive_t)mr->uncorrected_err_total}; + plugin_dispatch_values(&vl); + + ssnprintf(vl.type_instance, sizeof(vl.type_instance), + "uncorrected_memory_errors_in_%s", + mr->uncorrected_err_timed_period); + vl.values = &(value_t){.derive = (derive_t)mr->uncorrected_err_timed}; + plugin_dispatch_values(&vl); + + return 0; +} + +static int parse_memory_info(FILE *p_file, mcelog_memory_rec_t *memory_record) { + char buf[DATA_MAX_NAME_LEN] = {0}; + while (fgets(buf, sizeof(buf), p_file)) { + /* Got empty line or "done" */ + if ((!strncmp("\n", buf, strlen(buf))) || + (!strncmp(buf, "done\n", strlen(buf)))) + return 1; + if (strlen(buf) < 5) + continue; + if (!strncmp(buf, MCELOG_SOCKET_STR, strlen(MCELOG_SOCKET_STR))) { + sstrncpy(memory_record->location, buf, strlen(buf)); + /* replace spaces with '_' */ + for (size_t i = 0; i < strlen(memory_record->location); i++) + if (memory_record->location[i] == ' ') + memory_record->location[i] = '_'; + DEBUG(MCELOG_PLUGIN ": Got SOCKET INFO %s", memory_record->location); + } + if (!strncmp(buf, MCELOG_DIMM_NAME, strlen(MCELOG_DIMM_NAME))) { + char *name = NULL; + char *saveptr = NULL; + name = strtok_r(buf, "\"", &saveptr); + if (name != NULL && saveptr != NULL) { + name = strtok_r(NULL, "\"", &saveptr); + if (name != NULL) { + sstrncpy(memory_record->dimm_name, name, + sizeof(memory_record->dimm_name)); + DEBUG(MCELOG_PLUGIN ": Got DIMM NAME %s", memory_record->dimm_name); + } + } + } + if (!strncmp(buf, MCELOG_CORRECTED_ERR, strlen(MCELOG_CORRECTED_ERR))) { + /* Get next line*/ + if (fgets(buf, sizeof(buf), p_file) != NULL) { + sscanf(buf, "\t%d total", &(memory_record->corrected_err_total)); + DEBUG(MCELOG_PLUGIN ": Got corrected error total %d", + memory_record->corrected_err_total); + } + if (fgets(buf, sizeof(buf), p_file) != NULL) { + sscanf(buf, "\t%d in %s", &(memory_record->corrected_err_timed), + memory_record->corrected_err_timed_period); + DEBUG(MCELOG_PLUGIN ": Got timed corrected errors %d in %s", + memory_record->corrected_err_total, + memory_record->corrected_err_timed_period); + } + } + if (!strncmp(buf, MCELOG_UNCORRECTED_ERR, strlen(MCELOG_UNCORRECTED_ERR))) { + if (fgets(buf, sizeof(buf), p_file) != NULL) { + sscanf(buf, "\t%d total", &(memory_record->uncorrected_err_total)); + DEBUG(MCELOG_PLUGIN ": Got uncorrected error total %d", + memory_record->uncorrected_err_total); + } + if (fgets(buf, sizeof(buf), p_file) != NULL) { + sscanf(buf, "\t%d in %s", &(memory_record->uncorrected_err_timed), + memory_record->uncorrected_err_timed_period); + DEBUG(MCELOG_PLUGIN ": Got timed uncorrected errors %d in %s", + memory_record->uncorrected_err_total, + memory_record->uncorrected_err_timed_period); + } + } + memset(buf, 0, sizeof(buf)); + } + /* parsing definitely finished */ + return 0; +} + +static void poll_worker_cleanup(void *arg) { + mcelog_thread_running = 0; + FILE *p_file = *((FILE **)arg); + if (p_file != NULL) + fclose(p_file); + free(arg); +} + +static int socket_receive(socket_adapter_t *self, FILE **pp_file) { + int res = -1; + pthread_rwlock_rdlock(&self->lock); + struct pollfd poll_fd = { + .fd = self->sock_fd, .events = POLLIN | POLLPRI, + }; + + if ((res = poll(&poll_fd, 1, MCELOG_POLL_TIMEOUT)) <= 0) { + if (res != 0 && errno != EINTR) { + char errbuf[MCELOG_BUFF_SIZE]; + ERROR("mcelog: poll failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + pthread_rwlock_unlock(&self->lock); + return res; + } + + if (poll_fd.revents & (POLLERR | POLLHUP | POLLNVAL)) { + /* connection is broken */ + ERROR(MCELOG_PLUGIN ": Connection to socket is broken"); + if (poll_fd.revents & (POLLERR | POLLHUP)) { + mcelog_dispatch_notification( + &(notification_t){.severity = NOTIF_FAILURE, + .time = cdtime(), + .message = "Connection to mcelog socket is broken.", + .plugin = MCELOG_PLUGIN, + .type_instance = "mcelog_status"}); + } + pthread_rwlock_unlock(&self->lock); + return -1; + } + + if (!(poll_fd.revents & (POLLIN | POLLPRI))) { + INFO(MCELOG_PLUGIN ": No data to read"); + pthread_rwlock_unlock(&self->lock); + return 0; + } + + if ((*pp_file = fdopen(dup(self->sock_fd), "r")) == NULL) + res = -1; + + pthread_rwlock_unlock(&self->lock); + return res; +} + +static void *poll_worker(__attribute__((unused)) void *arg) { + char errbuf[MCELOG_BUFF_SIZE]; + mcelog_thread_running = 1; + FILE **pp_file = calloc(1, sizeof(*pp_file)); + if (pp_file == NULL) { + ERROR("mcelog: memory allocation failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + pthread_exit((void *)1); + } + + pthread_cleanup_push(poll_worker_cleanup, pp_file); + + while (1) { + /* blocking call */ + int res = socket_adapter.receive(&socket_adapter, pp_file); + if (res < 0) { + socket_adapter.close(&socket_adapter); + while (socket_adapter.reinit(&socket_adapter) != 0) { + nanosleep(&CDTIME_T_TO_TIMESPEC(MS_TO_CDTIME_T(MCELOG_POLL_TIMEOUT)), + NULL); + } + continue; + } + /* timeout or no data to read */ + else if (res == 0) + continue; + + if (*pp_file == NULL) + continue; + + mcelog_memory_rec_t memory_record = {0}; + while (parse_memory_info(*pp_file, &memory_record)) { + /* Check if location was successfully parsed */ + if (memory_record.location[0] == '\0') { + memset(&memory_record, 0, sizeof(memory_record)); + continue; + } + + notification_t n = {.severity = NOTIF_OKAY, + .time = cdtime(), + .message = "Got memory errors info.", + .plugin = MCELOG_PLUGIN, + .type_instance = "memory_erros"}; + + if (mcelog_prepare_notification(&n, &memory_record) == 0) + mcelog_dispatch_notification(&n); + if (mcelog_submit(&memory_record) != 0) + ERROR(MCELOG_PLUGIN ": Failed to submit memory errors"); + memset(&memory_record, 0, sizeof(memory_record)); + } + + fclose(*pp_file); + *pp_file = NULL; + } + + mcelog_thread_running = 0; + pthread_cleanup_pop(1); + return NULL; +} + +static int mcelog_init(void) { + if (socket_adapter.reinit(&socket_adapter) != 0) { + ERROR(MCELOG_PLUGIN ": Cannot connect to client socket"); + return -1; + } + + if (plugin_thread_create(&g_mcelog_config.tid, NULL, poll_worker, NULL, + NULL) != 0) { + ERROR(MCELOG_PLUGIN ": Error creating poll thread."); + return -1; + } + return 0; +} + +static int get_memory_machine_checks(void) { + static const char dump[] = "dump all bios\n"; + int ret = socket_adapter.write(&socket_adapter, dump, sizeof(dump)); + if (ret != 0) + ERROR(MCELOG_PLUGIN ": SENT DUMP REQUEST FAILED"); + else + DEBUG(MCELOG_PLUGIN ": SENT DUMP REQUEST OK"); + return ret; +} + +static int mcelog_read(__attribute__((unused)) user_data_t *ud) { + DEBUG(MCELOG_PLUGIN ": %s", __FUNCTION__); + + if (get_memory_machine_checks() != 0) + ERROR(MCELOG_PLUGIN ": MACHINE CHECK INFO NOT AVAILABLE"); + + return 0; +} + +static int mcelog_shutdown(void) { + int ret = 0; + if (mcelog_thread_running) { + pthread_cancel(g_mcelog_config.tid); + if (pthread_join(g_mcelog_config.tid, NULL) != 0) { + ERROR(MCELOG_PLUGIN ": Stopping thread failed."); + ret = -1; + } + } + + ret = socket_adapter.close(&socket_adapter) || ret; + pthread_rwlock_destroy(&(socket_adapter.lock)); + return -ret; +} + +void module_register(void) { + plugin_register_complex_config(MCELOG_PLUGIN, mcelog_config); + plugin_register_init(MCELOG_PLUGIN, mcelog_init); + plugin_register_complex_read(NULL, MCELOG_PLUGIN, mcelog_read, 0, NULL); + plugin_register_shutdown(MCELOG_PLUGIN, mcelog_shutdown); +} diff --git a/src/md.c b/src/md.c index 5e6b3ac7..98cef1d4 100644 --- a/src/md.c +++ b/src/md.c @@ -46,17 +46,17 @@ static int md_config(const char *key, const char *value) { if (ignorelist == NULL) ignorelist = ignorelist_create(/* invert = */ 1); if (ignorelist == NULL) - return (1); + return 1; if (strcasecmp(key, "Device") == 0) { ignorelist_add(ignorelist, value); } else if (strcasecmp(key, "IgnoreSelected") == 0) { ignorelist_set_invert(ignorelist, IS_TRUE(value) ? 0 : 1); } else { - return (-1); + return -1; } - return (0); + return 0; } static void md_submit(const int minor, const char *type_instance, @@ -149,7 +149,7 @@ static int md_read(void) { char errbuf[1024]; WARNING("md: Unable to open %s: %s", PROC_DISKSTATS, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* Iterate md devices */ @@ -187,7 +187,7 @@ static int md_read(void) { fclose(fh); - return (0); + return 0; } /* int md_read */ void module_register(void) { diff --git a/src/memcachec.c b/src/memcachec.c index bebbe401..c2147fd5 100644 --- a/src/memcachec.c +++ b/src/memcachec.c @@ -111,29 +111,29 @@ static int cmc_page_init_memc(web_page_t *wp) /* {{{ */ wp->memc = memcached_create(NULL); if (wp->memc == NULL) { ERROR("memcachec plugin: memcached_create failed."); - return (-1); + return -1; } server = memcached_servers_parse(wp->server); memcached_server_push(wp->memc, server); memcached_server_list_free(server); - return (0); + return 0; } /* }}} int cmc_page_init_memc */ static int cmc_config_add_string(const char *name, char **dest, /* {{{ */ oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("memcachec plugin: `%s' needs exactly one string argument.", name); - return (-1); + return -1; } sfree(*dest); *dest = strdup(ci->values[0].value.string); if (*dest == NULL) - return (-1); + return -1; - return (0); + return 0; } /* }}} int cmc_config_add_string */ static int cmc_config_add_match_dstype(int *dstype_ret, /* {{{ */ @@ -142,7 +142,7 @@ static int cmc_config_add_match_dstype(int *dstype_ret, /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("memcachec plugin: `DSType' needs exactly one string argument."); - return (-1); + return -1; } if (strncasecmp("Gauge", ci->values[0].value.string, strlen("Gauge")) == 0) { @@ -175,11 +175,11 @@ static int cmc_config_add_match_dstype(int *dstype_ret, /* {{{ */ if (dstype == 0) { WARNING("memcachec plugin: `%s' is not a valid argument to `DSType'.", ci->values[0].value.string); - return (-1); + return -1; } *dstype_ret = dstype; - return (0); + return 0; } /* }}} int cmc_config_add_match_dstype */ static int cmc_config_add_match(web_page_t *page, /* {{{ */ @@ -194,7 +194,7 @@ static int cmc_config_add_match(web_page_t *page, /* {{{ */ match = calloc(1, sizeof(*match)); if (match == NULL) { ERROR("memcachec plugin: calloc failed."); - return (-1); + return -1; } status = 0; @@ -242,7 +242,7 @@ static int cmc_config_add_match(web_page_t *page, /* {{{ */ if (status != 0) { cmc_web_match_free(match); - return (status); + return status; } match->match = @@ -250,7 +250,7 @@ static int cmc_config_add_match(web_page_t *page, /* {{{ */ if (match->match == NULL) { ERROR("memcachec plugin: match_create_simple failed."); cmc_web_match_free(match); - return (-1); + return -1; } else { web_match_t *prev; @@ -264,7 +264,7 @@ static int cmc_config_add_match(web_page_t *page, /* {{{ */ prev->next = match; } - return (0); + return 0; } /* }}} int cmc_config_add_match */ static int cmc_config_add_page(oconfig_item_t *ci) /* {{{ */ @@ -275,13 +275,13 @@ static int cmc_config_add_page(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING( "memcachec plugin: `Page' blocks need exactly one string argument."); - return (-1); + return -1; } page = calloc(1, sizeof(*page)); if (page == NULL) { ERROR("memcachec plugin: calloc failed."); - return (-1); + return -1; } page->server = NULL; page->key = NULL; @@ -290,7 +290,7 @@ static int cmc_config_add_page(oconfig_item_t *ci) /* {{{ */ if (page->instance == NULL) { ERROR("memcachec plugin: strdup failed."); sfree(page); - return (-1); + return -1; } /* Process all children */ @@ -342,7 +342,7 @@ static int cmc_config_add_page(oconfig_item_t *ci) /* {{{ */ if (status != 0) { cmc_web_page_free(page); - return (status); + return status; } /* Add the new page to the linked list */ @@ -357,7 +357,7 @@ static int cmc_config_add_page(oconfig_item_t *ci) /* {{{ */ prev->next = page; } - return (0); + return 0; } /* }}} int cmc_config_add_page */ static int cmc_config(oconfig_item_t *ci) /* {{{ */ @@ -386,19 +386,19 @@ static int cmc_config(oconfig_item_t *ci) /* {{{ */ if ((success == 0) && (errors > 0)) { ERROR("memcachec plugin: All statements failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cmc_config */ static int cmc_init(void) /* {{{ */ { if (pages_g == NULL) { INFO("memcachec plugin: No pages have been defined."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cmc_init */ static void cmc_submit(const web_page_t *wp, const web_match_t *wm, /* {{{ */ @@ -423,14 +423,14 @@ static int cmc_read_page(web_page_t *wp) /* {{{ */ int status; if (wp->memc == NULL) - return (-1); + return -1; wp->buffer = memcached_get(wp->memc, wp->key, strlen(wp->key), &string_length, &flags, &rc); if (rc != MEMCACHED_SUCCESS) { ERROR("memcachec plugin: memcached_get failed: %s", memcached_strerror(wp->memc, rc)); - return (-1); + return -1; } for (web_match_t *wm = wp->matches; wm != NULL; wm = wm->next) { @@ -454,7 +454,7 @@ static int cmc_read_page(web_page_t *wp) /* {{{ */ sfree(wp->buffer); - return (0); + return 0; } /* }}} int cmc_read_page */ static int cmc_read(void) /* {{{ */ @@ -462,7 +462,7 @@ static int cmc_read(void) /* {{{ */ for (web_page_t *wp = pages_g; wp != NULL; wp = wp->next) cmc_read_page(wp); - return (0); + return 0; } /* }}} int cmc_read */ static int cmc_shutdown(void) /* {{{ */ @@ -470,7 +470,7 @@ static int cmc_shutdown(void) /* {{{ */ cmc_web_page_free(pages_g); pages_g = NULL; - return (0); + return 0; } /* }}} int cmc_shutdown */ void module_register(void) { @@ -479,5 +479,3 @@ void module_register(void) { plugin_register_read("memcachec", cmc_read); plugin_register_shutdown("memcachec", cmc_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/memcached.c b/src/memcached.c index 79c38a79..5fc17df3 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -78,7 +78,7 @@ static int memcached_connect_unix(memcached_t *st) { char errbuf[1024]; ERROR("memcached plugin: memcached_connect_unix: socket(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* connect to the memcached daemon */ @@ -89,7 +89,7 @@ static int memcached_connect_unix(memcached_t *st) { fd = -1; } - return (fd); + return fd; } /* int memcached_connect_unix */ static int memcached_connect_inet(memcached_t *st) { @@ -109,7 +109,7 @@ static int memcached_connect_inet(memcached_t *st) { st->connhost, st->connport, (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -138,14 +138,14 @@ static int memcached_connect_inet(memcached_t *st) { } freeaddrinfo(ai_list); - return (fd); + return fd; } /* int memcached_connect_inet */ static int memcached_connect(memcached_t *st) { if (st->socket != NULL) - return (memcached_connect_unix(st)); + return memcached_connect_unix(st); else - return (memcached_connect_inet(st)); + return memcached_connect_inet(st); } static int memcached_query_daemon(char *buffer, size_t buffer_size, @@ -167,7 +167,7 @@ static int memcached_query_daemon(char *buffer, size_t buffer_size, sstrerror(errno, errbuf, sizeof(errbuf))); shutdown(fd, SHUT_RDWR); close(fd); - return (-1); + return -1; } /* receive data from the memcached daemon */ @@ -188,7 +188,7 @@ static int memcached_query_daemon(char *buffer, size_t buffer_size, sstrerror(errno, errbuf, sizeof(errbuf))); shutdown(fd, SHUT_RDWR); close(fd); - return (-1); + return -1; } buffer_fill += (size_t)status; @@ -212,7 +212,7 @@ static int memcached_query_daemon(char *buffer, size_t buffer_size, shutdown(fd, SHUT_RDWR); close(fd); - return (status); + return status; } /* int memcached_query_daemon */ static void memcached_init_vl(value_list_t *vl, memcached_t const *st) { @@ -412,8 +412,10 @@ static int memcached_read(user_data_t *user_data) { } /* - * Operations on the cache, i. e. cache hits, cache misses and evictions of - * items + * Operations on the cache: + * - get hits/misses + * - delete hits/misses + * - evictions */ else if (FIELD_IS("get_hits")) { submit_derive("memcached_ops", "hits", atoll(fields[2]), st); @@ -422,6 +424,10 @@ static int memcached_read(user_data_t *user_data) { submit_derive("memcached_ops", "misses", atoll(fields[2]), st); } else if (FIELD_IS("evictions")) { submit_derive("memcached_ops", "evictions", atoll(fields[2]), st); + } else if (FIELD_IS("delete_hits")) { + submit_derive("memcached_ops", "delete_hits", atoll(fields[2]), st); + } else if (FIELD_IS("delete_misses")) { + submit_derive("memcached_ops", "delete_misses", atoll(fields[2]), st); } /* @@ -489,7 +495,7 @@ static int memcached_add_read_callback(memcached_t *st) { if (st->host) { st->connhost = strdup(st->host); if (st->connhost == NULL) - return (ENOMEM); + return ENOMEM; if ((strcmp("127.0.0.1", st->host) == 0) || (strcmp("localhost", st->host) == 0)) @@ -497,14 +503,14 @@ static int memcached_add_read_callback(memcached_t *st) { } else { st->connhost = strdup(MEMCACHED_DEF_HOST); if (st->connhost == NULL) - return (ENOMEM); + return ENOMEM; } } if (st->connport == NULL) { st->connport = strdup(MEMCACHED_DEF_PORT); if (st->connport == NULL) - return (ENOMEM); + return ENOMEM; } assert(st->connhost != NULL); @@ -518,7 +524,7 @@ static int memcached_add_read_callback(memcached_t *st) { .data = st, .free_func = memcached_free, }); - return (status); + return status; } /* int memcached_add_read_callback */ /* Configuration handling functiions @@ -540,7 +546,7 @@ static int config_add_instance(oconfig_item_t *ci) { st = calloc(1, sizeof(*st)); if (st == NULL) { ERROR("memcached plugin: calloc failed."); - return (ENOMEM); + return ENOMEM; } st->name = NULL; @@ -554,7 +560,7 @@ static int config_add_instance(oconfig_item_t *ci) { if (status != 0) { sfree(st); - return (status); + return status; } for (int i = 0; i < ci->children_num; i++) { @@ -582,10 +588,10 @@ static int config_add_instance(oconfig_item_t *ci) { if (status != 0) { memcached_free(st); - return (-1); + return -1; } - return (0); + return 0; } static int memcached_config(oconfig_item_t *ci) { @@ -601,7 +607,7 @@ static int memcached_config(oconfig_item_t *ci) { } else if (!have_instance_block) { /* Non-instance option: Assume legacy configuration (without * blocks) and call config_add_instance() with the block. */ - return (config_add_instance(ci)); + return config_add_instance(ci); } else WARNING("memcached plugin: The configuration option " "\"%s\" is not allowed here. Did you " @@ -610,7 +616,7 @@ static int memcached_config(oconfig_item_t *ci) { child->key); } /* for (ci->children) */ - return (status); + return status; } static int memcached_init(void) { @@ -618,12 +624,12 @@ static int memcached_init(void) { int status; if (memcached_have_instances) - return (0); + return 0; /* No instances were configured, lets start a default instance. */ st = calloc(1, sizeof(*st)); if (st == NULL) - return (ENOMEM); + return ENOMEM; st->name = NULL; st->host = NULL; st->socket = NULL; @@ -636,7 +642,7 @@ static int memcached_init(void) { else memcached_free(st); - return (status); + return status; } /* int memcached_init */ void module_register(void) { diff --git a/src/memory.c b/src/memory.c index 14b35599..e49fe84a 100644 --- a/src/memory.c +++ b/src/memory.c @@ -111,7 +111,7 @@ static int memory_config(oconfig_item_t *ci) /* {{{ */ child->key); } - return (0); + return 0; } /* }}} int memory_config */ static int memory_init(void) { @@ -133,11 +133,11 @@ static int memory_init(void) { pagesize = getpagesize(); if (get_kstat(&ksp, "unix", 0, "system_pages") != 0) { ksp = NULL; - return (-1); + return -1; } if (get_kstat(&ksz, "zfs", 0, "arcstats") != 0) { ksz = NULL; - return (-1); + return -1; } /* #endif HAVE_LIBKSTAT */ @@ -146,7 +146,7 @@ static int memory_init(void) { pagesize = getpagesize(); if (pagesize <= 0) { ERROR("memory plugin: Invalid pagesize: %i", pagesize); - return (-1); + return -1; } /* #endif HAVE_SYSCTL */ @@ -157,7 +157,7 @@ static int memory_init(void) { #elif HAVE_PERFSTAT pagesize = getpagesize(); #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* int memory_init */ #define MEMORY_SUBMIT(...) \ @@ -180,14 +180,14 @@ static int memory_read_internal(value_list_t *vl) { gauge_t free; if (!port_host || !pagesize) - return (-1); + return -1; vm_data_len = sizeof(vm_data) / sizeof(natural_t); if ((status = host_statistics(port_host, HOST_VM_INFO, (host_info_t)&vm_data, &vm_data_len)) != KERN_SUCCESS) { ERROR("memory-plugin: host_statistics failed and returned the value %i", (int)status); - return (-1); + return -1; } /* @@ -282,7 +282,7 @@ static int memory_read_internal(value_list_t *vl) { if ((fh = fopen("/proc/meminfo", "r")) == NULL) { char errbuf[1024]; WARNING("memory: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -320,7 +320,7 @@ static int memory_read_internal(value_list_t *vl) { } if (mem_total < (mem_free + mem_buffered + mem_cached + mem_slab_total)) - return (-1); + return -1; mem_used = mem_total - (mem_free + mem_buffered + mem_cached + mem_slab_total); @@ -353,9 +353,9 @@ static int memory_read_internal(value_list_t *vl) { long long availrmem; if (ksp == NULL) - return (-1); + return -1; if (ksz == NULL) - return (-1); + return -1; mem_used = get_kstat_value(ksp, "pagestotal"); mem_free = get_kstat_value(ksp, "pagesfree"); @@ -370,7 +370,7 @@ static int memory_read_internal(value_list_t *vl) { if ((mem_used < 0LL) || (mem_free < 0LL) || (mem_lock < 0LL)) { WARNING("memory plugin: one of used, free or locked is negative."); - return (-1); + return -1; } mem_unus = physmem - mem_used; @@ -424,7 +424,7 @@ static int memory_read_internal(value_list_t *vl) { char errbuf[1024]; WARNING("memory plugin: sysctl failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } assert(pagesize > 0); @@ -441,7 +441,7 @@ static int memory_read_internal(value_list_t *vl) { ios = sg_get_mem_stats(); if (ios == NULL) - return (-1); + return -1; MEMORY_SUBMIT("used", (gauge_t)ios->used, "cached", (gauge_t)ios->cache, "free", (gauge_t)ios->free); @@ -454,7 +454,7 @@ static int memory_read_internal(value_list_t *vl) { char errbuf[1024]; WARNING("memory plugin: perfstat_memory_total failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* Unfortunately, the AIX documentation is not very clear on how these @@ -473,7 +473,7 @@ static int memory_read_internal(value_list_t *vl) { (gauge_t)(pmemory.real_process * pagesize)); #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* }}} int memory_read_internal */ static int memory_read(void) /* {{{ */ @@ -487,7 +487,7 @@ static int memory_read(void) /* {{{ */ sstrncpy(vl.type, "memory", sizeof(vl.type)); vl.time = cdtime(); - return (memory_read_internal(&vl)); + return memory_read_internal(&vl); } /* }}} int memory_read */ void module_register(void) { diff --git a/src/mic.c b/src/mic.c index ab5ffd1b..90a61789 100644 --- a/src/mic.c +++ b/src/mic.c @@ -63,7 +63,7 @@ static int mic_init(void) { U32 mic_count; if (mic_handle) - return (0); + return 0; mic_count = (U32)STATIC_ARRAY_SIZE(mics); ret = MicInitAPI(&mic_handle, eTARGET_SCIF_DRIVER, mics, &mic_count); @@ -75,10 +75,10 @@ static int mic_init(void) { if (mic_count < 0 || mic_count >= MAX_MICS) { ERROR("mic plugin: No Intel MICs in system"); - return (1); + return 1; } else { num_mics = mic_count; - return (0); + return 0; } } @@ -88,7 +88,7 @@ static int mic_config(const char *key, const char *value) { if (power_ignore == NULL) power_ignore = ignorelist_create(1); if (temp_ignore == NULL || power_ignore == NULL) - return (1); + return 1; if (strcasecmp("ShowCPU", key) == 0) { show_cpu = IS_TRUE(value); @@ -115,9 +115,9 @@ static int mic_config(const char *key, const char *value) { invert = 0; ignorelist_set_invert(power_ignore, invert); } else { - return (-1); + return -1; } - return (0); + return 0; } static void mic_submit_memory_use(int micnumber, const char *type_instance, @@ -148,13 +148,13 @@ static int mic_read_memory(int mic) { if (ret != MIC_ACCESS_API_SUCCESS) { ERROR("mic plugin: Problem getting Memory Utilization: %s", MicGetErrorString(ret)); - return (1); + return 1; } mic_submit_memory_use(mic, "free", mem_free); mic_submit_memory_use(mic, "used", mem_total - mem_free - mem_bufs); mic_submit_memory_use(mic, "buffered", mem_bufs); DEBUG("mic plugin: Memory Read: %u %u %u", mem_total, mem_free, mem_bufs); - return (0); + return 0; } static void mic_submit_temp(int micnumber, const char *type, gauge_t value) { @@ -191,11 +191,11 @@ static int mic_read_temps(int mic) { ERROR("mic plugin: Error reading temperature \"%s\": " "%s", name, MicGetErrorString(status)); - return (1); + return 1; } mic_submit_temp(mic, name, temp_buffer); } - return (0); + return 0; } static void mic_submit_cpu(int micnumber, const char *type_instance, int core, @@ -231,7 +231,7 @@ static int mic_read_cpu(int mic) { if (status != MIC_ACCESS_API_SUCCESS) { ERROR("mic plugin: Problem getting CPU utilization: %s", MicGetErrorString(status)); - return (-1); + return -1; } if (show_cpu) { @@ -249,7 +249,7 @@ static int mic_read_cpu(int mic) { mic_submit_cpu(mic, "idle", j, core_jiffs[j].idle); } } - return (0); + return 0; } static void mic_submit_power(int micnumber, const char *type, @@ -277,7 +277,7 @@ static int mic_read_power(int mic) { if (ret != MIC_ACCESS_API_SUCCESS) { ERROR("mic plugin: Problem getting Power Usage: %s", MicGetErrorString(ret)); - return (1); + return 1; } /* power is in uWatts, current in mA, voltage in uVolts.. convert to @@ -311,7 +311,7 @@ static int mic_read_power(int mic) { SUB_VOLTS(vddg); SUB_VOLTS(vddq); - return (0); + return 0; } static int mic_read(void) { @@ -357,7 +357,7 @@ static int mic_shutdown(void) { MicCloseAPI(&mic_handle); mic_handle = NULL; - return (0); + return 0; } void module_register(void) { @@ -366,7 +366,3 @@ void module_register(void) { plugin_register_read("mic", mic_read); plugin_register_config("mic", mic_config, config_keys, config_keys_num); } /* void module_register */ - -/* - * vim: set shiftwidth=8 softtabstop=8 noet textwidth=78 : - */ diff --git a/src/modbus.c b/src/modbus.c index 5d29791d..f45fe21c 100644 --- a/src/modbus.c +++ b/src/modbus.c @@ -156,13 +156,13 @@ static mb_data_t *data_definitions = NULL; static mb_data_t *data_get_by_name(mb_data_t *src, /* {{{ */ const char *name) { if (name == NULL) - return (NULL); + return NULL; for (mb_data_t *ptr = src; ptr != NULL; ptr = ptr->next) if (strcasecmp(ptr->name, name) == 0) - return (ptr); + return ptr; - return (NULL); + return NULL; } /* }}} mb_data_t *data_get_by_name */ static int data_append(mb_data_t **dst, mb_data_t *src) /* {{{ */ @@ -170,13 +170,13 @@ static int data_append(mb_data_t **dst, mb_data_t *src) /* {{{ */ mb_data_t *ptr; if ((dst == NULL) || (src == NULL)) - return (EINVAL); + return EINVAL; ptr = *dst; if (ptr == NULL) { *dst = src; - return (0); + return 0; } while (ptr->next != NULL) @@ -184,7 +184,7 @@ static int data_append(mb_data_t **dst, mb_data_t *src) /* {{{ */ ptr->next = src; - return (0); + return 0; } /* }}} int data_append */ /* Copy a single mb_data_t and append it to another list. */ @@ -194,11 +194,11 @@ static int data_copy(mb_data_t **dst, const mb_data_t *src) /* {{{ */ int status; if ((dst == NULL) || (src == NULL)) - return (EINVAL); + return EINVAL; tmp = malloc(sizeof(*tmp)); if (tmp == NULL) - return (ENOMEM); + return ENOMEM; memcpy(tmp, src, sizeof(*tmp)); tmp->name = NULL; tmp->next = NULL; @@ -206,17 +206,17 @@ static int data_copy(mb_data_t **dst, const mb_data_t *src) /* {{{ */ tmp->name = strdup(src->name); if (tmp->name == NULL) { sfree(tmp); - return (ENOMEM); + return ENOMEM; } status = data_append(dst, tmp); if (status != 0) { sfree(tmp->name); sfree(tmp); - return (status); + return status; } - return (0); + return 0; } /* }}} int data_copy */ /* Lookup a single mb_data_t instance, copy it and append the copy to another @@ -226,13 +226,13 @@ static int data_copy_by_name(mb_data_t **dst, mb_data_t *src, /* {{{ */ mb_data_t *ptr; if ((dst == NULL) || (src == NULL) || (name == NULL)) - return (EINVAL); + return EINVAL; ptr = data_get_by_name(src, name); if (ptr == NULL) - return (ENOENT); + return ENOENT; - return (data_copy(dst, ptr)); + return data_copy(dst, ptr); } /* }}} int data_copy_by_name */ /* Read functions */ @@ -242,7 +242,7 @@ static int mb_submit(mb_host_t *host, mb_slave_t *slave, /* {{{ */ value_list_t vl = VALUE_LIST_INIT; if ((host == NULL) || (slave == NULL) || (data == NULL)) - return (EINVAL); + return EINVAL; if (host->interval == 0) host->interval = plugin_get_interval(); @@ -259,7 +259,7 @@ static int mb_submit(mb_host_t *host, mb_slave_t *slave, /* {{{ */ sstrncpy(vl.type, data->type, sizeof(vl.type)); sstrncpy(vl.type_instance, data->instance, sizeof(vl.type_instance)); - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } /* }}} int mb_submit */ static float mb_register_to_float(uint16_t hi, uint16_t lo) /* {{{ */ @@ -283,7 +283,7 @@ static float mb_register_to_float(uint16_t hi, uint16_t lo) /* {{{ */ conv.b[0] = (hi >> 8) & 0x00ff; #endif - return (conv.f); + return conv.f; } /* }}} float mb_register_to_float */ #if LEGACY_LIBMODBUS @@ -293,7 +293,7 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ int status; if (host == NULL) - return (EINVAL); + return EINVAL; #if COLLECT_DEBUG modbus_set_debug(&host->connection, 1); @@ -325,11 +325,11 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ if (status != 0) { ERROR("Modbus plugin: modbus_connect (%s, %i) failed with status %i.", host->node, host->port ? host->port : host->baudrate, status); - return (status); + return status; } host->is_connected = 1; - return (0); + return 0; } /* }}} int mb_init_connection */ /* #endif LEGACY_LIBMODBUS */ @@ -340,10 +340,10 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ int status; if (host == NULL) - return (EINVAL); + return EINVAL; if (host->connection != NULL) - return (0); + return 0; if (host->conntype == MBCONN_TCP) { if ((host->port < 1) || (host->port > 65535)) @@ -355,7 +355,7 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ host->connection = modbus_new_tcp(host->node, host->port); if (host->connection == NULL) { ERROR("Modbus plugin: Creating new Modbus/TCP object failed."); - return (-1); + return -1; } } else { DEBUG("Modbus plugin: Trying to connect to \"%s\", baudrate %i.", @@ -364,7 +364,7 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ host->connection = modbus_new_rtu(host->node, host->baudrate, 'N', 8, 1); if (host->connection == NULL) { ERROR("Modbus plugin: Creating new Modbus/RTU object failed."); - return (-1); + return -1; } } @@ -381,10 +381,10 @@ static int mb_init_connection(mb_host_t *host) /* {{{ */ host->node, host->port ? host->port : host->baudrate, status); modbus_free(host->connection); host->connection = NULL; - return (status); + return status; } - return (0); + return 0; } /* }}} int mb_init_connection */ #endif /* !LEGACY_LIBMODBUS */ @@ -408,19 +408,19 @@ static int mb_read_data(mb_host_t *host, mb_slave_t *slave, /* {{{ */ int status = 0; if ((host == NULL) || (slave == NULL) || (data == NULL)) - return (EINVAL); + return EINVAL; ds = plugin_get_ds(data->type); if (ds == NULL) { ERROR("Modbus plugin: Type \"%s\" is not defined.", data->type); - return (-1); + return -1; } if (ds->ds_num != 1) { ERROR("Modbus plugin: The type \"%s\" has %zu data sources. " "I can only handle data sets with only one data source.", data->type, ds->ds_num); - return (-1); + return -1; } if ((ds->ds[0].type != DS_TYPE_GAUGE) && @@ -458,7 +458,7 @@ static int mb_read_data(mb_host_t *host, mb_slave_t *slave, /* {{{ */ host->node); host->is_connected = 0; host->connection = NULL; - return (-1); + return -1; } } else if (status != 0) { #if LEGACY_LIBMODBUS @@ -480,7 +480,7 @@ static int mb_read_data(mb_host_t *host, mb_slave_t *slave, /* {{{ */ if (status != 0) { ERROR("Modbus plugin: modbus_set_slave (%i) failed with status %i.", slave->id, status); - return (-1); + return -1; } #endif if (data->modbus_register_type == MREG_INPUT) { @@ -505,7 +505,7 @@ static int mb_read_data(mb_host_t *host, mb_slave_t *slave, /* {{{ */ modbus_free(host->connection); #endif host->connection = NULL; - return (-1); + return -1; } DEBUG("Modbus plugin: mb_read_data: Success! " @@ -575,7 +575,7 @@ static int mb_read_data(mb_host_t *host, mb_slave_t *slave, /* {{{ */ mb_submit(host, slave, data, vt); } - return (0); + return 0; } /* }}} int mb_read_data */ static int mb_read_slave(mb_host_t *host, mb_slave_t *slave) /* {{{ */ @@ -584,7 +584,7 @@ static int mb_read_slave(mb_host_t *host, mb_slave_t *slave) /* {{{ */ int status; if ((host == NULL) || (slave == NULL)) - return (EINVAL); + return EINVAL; success = 0; for (mb_data_t *data = slave->collect; data != NULL; data = data->next) { @@ -594,9 +594,9 @@ static int mb_read_slave(mb_host_t *host, mb_slave_t *slave) /* {{{ */ } if (success == 0) - return (-1); + return -1; else - return (0); + return 0; } /* }}} int mb_read_slave */ static int mb_read(user_data_t *user_data) /* {{{ */ @@ -606,7 +606,7 @@ static int mb_read(user_data_t *user_data) /* {{{ */ int status; if ((user_data == NULL) || (user_data->data == NULL)) - return (EINVAL); + return EINVAL; host = user_data->data; @@ -618,9 +618,9 @@ static int mb_read(user_data_t *user_data) /* {{{ */ } if (success == 0) - return (-1); + return -1; else - return (0); + return 0; } /* }}} int mb_read */ /* Free functions */ @@ -681,7 +681,7 @@ static int mb_config_add_data(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &data.name); if (status != 0) - return (status); + return status; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -752,7 +752,7 @@ static int mb_config_add_data(oconfig_item_t *ci) /* {{{ */ sfree(data.name); - return (status); + return status; } /* }}} int mb_config_add_data */ static int mb_config_set_host_address(mb_host_t *host, /* {{{ */ @@ -761,7 +761,7 @@ static int mb_config_set_host_address(mb_host_t *host, /* {{{ */ int status; if ((host == NULL) || (address == NULL)) - return (EINVAL); + return EINVAL; struct addrinfo ai_hints = { /* XXX: libmodbus can only handle IPv4 addresses. */ @@ -774,7 +774,7 @@ static int mb_config_set_host_address(mb_host_t *host, /* {{{ */ ERROR("Modbus plugin: getaddrinfo failed: %s", (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (status); + return status; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -797,7 +797,7 @@ static int mb_config_set_host_address(mb_host_t *host, /* {{{ */ host->node); } - return (status); + return status; } /* }}} int mb_config_set_host_address */ static int mb_config_add_slave(mb_host_t *host, oconfig_item_t *ci) /* {{{ */ @@ -806,11 +806,11 @@ static int mb_config_add_slave(mb_host_t *host, oconfig_item_t *ci) /* {{{ */ int status; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; slave = realloc(host->slaves, sizeof(*slave) * (host->slaves_num + 1)); if (slave == NULL) - return (ENOMEM); + return ENOMEM; host->slaves = slave; slave = host->slaves + host->slaves_num; memset(slave, 0, sizeof(*slave)); @@ -818,7 +818,7 @@ static int mb_config_add_slave(mb_host_t *host, oconfig_item_t *ci) /* {{{ */ status = cf_util_get_int(ci, &slave->id); if (status != 0) - return (status); + return status; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -852,7 +852,7 @@ static int mb_config_add_slave(mb_host_t *host, oconfig_item_t *ci) /* {{{ */ else /* if (status != 0) */ data_free_all(slave->collect); - return (status); + return status; } /* }}} int mb_config_add_slave */ static int mb_config_add_host(oconfig_item_t *ci) /* {{{ */ @@ -862,17 +862,17 @@ static int mb_config_add_host(oconfig_item_t *ci) /* {{{ */ host = calloc(1, sizeof(*host)); if (host == NULL) - return (ENOMEM); + return ENOMEM; host->slaves = NULL; status = cf_util_get_string_buffer(ci, host->host, sizeof(host->host)); if (status != 0) { sfree(host); - return (status); + return status; } if (host->host[0] == 0) { sfree(host); - return (EINVAL); + return EINVAL; } for (int i = 0; i < ci->children_num; i++) { @@ -946,13 +946,13 @@ static int mb_config_add_host(oconfig_item_t *ci) /* {{{ */ host_free(host); } - return (status); + return status; } /* }}} int mb_config_add_host */ static int mb_config(oconfig_item_t *ci) /* {{{ */ { if (ci == NULL) - return (EINVAL); + return EINVAL; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -965,7 +965,7 @@ static int mb_config(oconfig_item_t *ci) /* {{{ */ ERROR("Modbus plugin: Unknown configuration option: %s", child->key); } - return (0); + return 0; } /* }}} int mb_config */ /* ========= */ @@ -975,12 +975,10 @@ static int mb_shutdown(void) /* {{{ */ data_free_all(data_definitions); data_definitions = NULL; - return (0); + return 0; } /* }}} int mb_shutdown */ void module_register(void) { plugin_register_complex_config("modbus", mb_config); plugin_register_shutdown("modbus", mb_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/mqtt.c b/src/mqtt.c index 315974b6..36e65778 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -160,17 +160,17 @@ static char *strip_prefix(char *topic) { num++; if (num < 2) - return (NULL); + return NULL; while (num > 2) { char *tmp = strchr(topic, '/'); if (tmp == NULL) - return (NULL); + return NULL; topic = tmp + 1; num--; } - return (topic); + return topic; } static void on_message( @@ -243,7 +243,7 @@ static int mqtt_reconnect(mqtt_client_conf_t *conf) { int status; if (conf->connected) - return (0); + return 0; status = mosquitto_reconnect(conf->mosq); if (status != MOSQ_ERR_SUCCESS) { @@ -251,7 +251,7 @@ static int mqtt_reconnect(mqtt_client_conf_t *conf) { ERROR("mqtt_connect_broker: mosquitto_connect failed: %s", (status == MOSQ_ERR_ERRNO) ? sstrerror(errno, errbuf, sizeof(errbuf)) : mosquitto_strerror(status)); - return (-1); + return -1; } conf->connected = 1; @@ -260,7 +260,7 @@ static int mqtt_reconnect(mqtt_client_conf_t *conf) { "mqtt plugin: successfully reconnected to broker \"%s:%d\"", conf->host, conf->port); - return (0); + return 0; } /* mqtt_reconnect */ /* must hold conf->lock when calling. */ @@ -284,7 +284,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { #endif if (conf->mosq == NULL) { ERROR("mqtt plugin: mosquitto_new failed"); - return (-1); + return -1; } #if LIBMOSQUITTO_MAJOR != 0 @@ -297,7 +297,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_strerror(status)); mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } status = mosquitto_tls_opts_set(conf->mosq, SSL_VERIFY_PEER, @@ -307,7 +307,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_strerror(status)); mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } status = mosquitto_tls_insecure_set(conf->mosq, false); @@ -316,7 +316,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_strerror(status)); mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } } #endif @@ -333,7 +333,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } } @@ -353,7 +353,7 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } if (!conf->publish) { @@ -369,12 +369,12 @@ static int mqtt_connect(mqtt_client_conf_t *conf) { mosquitto_disconnect(conf->mosq); mosquitto_destroy(conf->mosq); conf->mosq = NULL; - return (-1); + return -1; } } conf->connected = 1; - return (0); + return 0; } /* mqtt_connect */ static void *subscribers_thread(void *arg) { @@ -427,7 +427,7 @@ static int publish(mqtt_client_conf_t *conf, char const *topic, if (status != 0) { pthread_mutex_unlock(&conf->lock); ERROR("mqtt plugin: unable to reconnect to broker"); - return (status); + return status; } status = mosquitto_publish(conf->mosq, /* message_id */ NULL, topic, @@ -451,11 +451,11 @@ static int publish(mqtt_client_conf_t *conf, char const *topic, mosquitto_disconnect(conf->mosq); pthread_mutex_unlock(&conf->lock); - return (-1); + return -1; } pthread_mutex_unlock(&conf->lock); - return (0); + return 0; } /* int publish */ static int format_topic(char *buf, size_t buf_len, data_set_t const *ds, @@ -465,21 +465,21 @@ static int format_topic(char *buf, size_t buf_len, data_set_t const *ds, char *c; if ((conf->topic_prefix == NULL) || (conf->topic_prefix[0] == 0)) - return (FORMAT_VL(buf, buf_len, vl)); + return FORMAT_VL(buf, buf_len, vl); status = FORMAT_VL(name, sizeof(name), vl); if (status != 0) - return (status); + return status; status = ssnprintf(buf, buf_len, "%s/%s", conf->topic_prefix, name); if ((status < 0) || (((size_t)status) >= buf_len)) - return (ENOMEM); + return ENOMEM; while((c = strchr(buf, '#')) || (c = strchr(buf, '+'))) { *c = '_'; } - return (0); + return 0; } /* int format_topic */ static int mqtt_write(const data_set_t *ds, const value_list_t *vl, @@ -490,28 +490,28 @@ static int mqtt_write(const data_set_t *ds, const value_list_t *vl, int status = 0; if ((user_data == NULL) || (user_data->data == NULL)) - return (EINVAL); + return EINVAL; conf = user_data->data; status = format_topic(topic, sizeof(topic), ds, vl, conf); if (status != 0) { ERROR("mqtt plugin: format_topic failed with status %d.", status); - return (status); + return status; } status = format_values(payload, sizeof(payload), ds, vl, conf->store_rates); if (status != 0) { ERROR("mqtt plugin: format_values failed with status %d.", status); - return (status); + return status; } status = publish(conf, topic, payload, strlen(payload) + 1); if (status != 0) { ERROR("mqtt plugin: publish failed: %s", mosquitto_strerror(status)); - return (status); + return status; } - return (status); + return status; } /* mqtt_write */ /* @@ -539,7 +539,7 @@ static int mqtt_config_publisher(oconfig_item_t *ci) { conf = calloc(1, sizeof(*conf)); if (conf == NULL) { ERROR("mqtt plugin: calloc failed."); - return (-1); + return -1; } conf->publish = 1; @@ -547,7 +547,7 @@ static int mqtt_config_publisher(oconfig_item_t *ci) { status = cf_util_get_string(ci, &conf->name); if (status != 0) { mqtt_free(conf); - return (status); + return status; } conf->host = strdup(MQTT_DEFAULT_HOST); @@ -560,7 +560,7 @@ static int mqtt_config_publisher(oconfig_item_t *ci) { status = pthread_mutex_init(&conf->lock, NULL); if (status != 0) { mqtt_free(conf); - return (status); + return status; } C_COMPLAIN_INIT(&conf->complaint_cantpublish); @@ -612,7 +612,7 @@ static int mqtt_config_publisher(oconfig_item_t *ci) { plugin_register_write(cb_name, mqtt_write, &(user_data_t){ .data = conf, }); - return (0); + return 0; } /* mqtt_config_publisher */ /* @@ -633,7 +633,7 @@ static int mqtt_config_subscriber(oconfig_item_t *ci) { conf = calloc(1, sizeof(*conf)); if (conf == NULL) { ERROR("mqtt plugin: calloc failed."); - return (-1); + return -1; } conf->publish = 0; @@ -641,7 +641,7 @@ static int mqtt_config_subscriber(oconfig_item_t *ci) { status = cf_util_get_string(ci, &conf->name); if (status != 0) { mqtt_free(conf); - return (status); + return status; } conf->host = strdup(MQTT_DEFAULT_HOST); @@ -654,7 +654,7 @@ static int mqtt_config_subscriber(oconfig_item_t *ci) { status = pthread_mutex_init(&conf->lock, NULL); if (status != 0) { mqtt_free(conf); - return (status); + return status; } C_COMPLAIN_INIT(&conf->complaint_cantpublish); @@ -694,13 +694,13 @@ static int mqtt_config_subscriber(oconfig_item_t *ci) { if (tmp == NULL) { ERROR("mqtt plugin: realloc failed."); mqtt_free(conf); - return (-1); + return -1; } subscribers = tmp; subscribers[subscribers_num] = conf; subscribers_num++; - return (0); + return 0; } /* mqtt_config_subscriber */ /* @@ -725,7 +725,7 @@ static int mqtt_config(oconfig_item_t *ci) { ERROR("mqtt plugin: Unknown config option: %s", child->key); } - return (0); + return 0; } /* int mqtt_config */ static int mqtt_init(void) { @@ -750,12 +750,10 @@ static int mqtt_init(void) { } } - return (0); + return 0; } /* mqtt_init */ void module_register(void) { plugin_register_complex_config("mqtt", mqtt_config); plugin_register_init("mqtt", mqtt_init); } /* void module_register */ - -/* vim: set sw=4 sts=4 et fdm=marker : */ diff --git a/src/multimeter.c b/src/multimeter.c index 913e277e..72b0fed9 100644 --- a/src/multimeter.c +++ b/src/multimeter.c @@ -27,8 +27,7 @@ #include "common.h" #include "plugin.h" -#if HAVE_TERMIOS_H && HAVE_SYS_IOCTL_H && HAVE_MATH_H -#include +#if HAVE_TERMIOS_H && HAVE_SYS_IOCTL_H #include #include #else @@ -50,7 +49,7 @@ static int multimeter_read_value(double *value) { char errbuf[1024]; ERROR("multimeter plugin: gettimeofday failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } time_end.tv_sec++; @@ -65,7 +64,7 @@ static int multimeter_read_value(double *value) { status = swrite(fd, "D", 1); if (status < 0) { ERROR("multimeter plugin: swrite failed."); - return (-1); + return -1; } FD_ZERO(&rfds); @@ -76,7 +75,7 @@ static int multimeter_read_value(double *value) { ERROR("multimeter plugin: " "gettimeofday failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (timeval_cmp(time_end, time_now, &timeout) < 0) break; @@ -121,9 +120,9 @@ static int multimeter_read_value(double *value) { break; } } else - return (-1); /* Overflow */ + return -1; /* Overflow */ - return (0); /* value received */ + return 0; /* value received */ } else break; } else if (!status) /* Timeout */ @@ -142,7 +141,7 @@ static int multimeter_read_value(double *value) { } } while (--retry); - return (-2); /* no value received */ + return -2; /* no value received */ } /* int multimeter_read_value */ static int multimeter_init(void) { @@ -174,13 +173,13 @@ static int multimeter_init(void) { INFO("multimeter plugin: Device " "found at %s", device); - return (0); + return 0; } } } ERROR("multimeter plugin: No device found"); - return (-1); + return -1; } #undef LINE_LENGTH @@ -199,13 +198,13 @@ static int multimeter_read(void) { double value; if (fd < 0) - return (-1); + return -1; if (multimeter_read_value(&value) != 0) - return (-1); + return -1; multimeter_submit(value); - return (0); + return 0; } /* int multimeter_read */ static int multimeter_shutdown(void) { @@ -214,7 +213,7 @@ static int multimeter_shutdown(void) { fd = -1; } - return (0); + return 0; } void module_register(void) { diff --git a/src/mysql.c b/src/mysql.c index 8409d1b6..b6edce0d 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -121,13 +121,13 @@ static int mysql_config_database(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("mysql plugin: The `Database' block " "needs exactly one string argument."); - return (-1); + return -1; } db = calloc(1, sizeof(*db)); if (db == NULL) { ERROR("mysql plugin: calloc failed."); - return (-1); + return -1; } /* initialize all the pointers */ @@ -153,7 +153,7 @@ static int mysql_config_database(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &db->instance); if (status != 0) { sfree(db); - return (status); + return status; } assert(db->instance != NULL); @@ -229,16 +229,16 @@ static int mysql_config_database(oconfig_item_t *ci) /* {{{ */ }); } else { mysql_database_free(db); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int mysql_config_database */ static int mysql_config(oconfig_item_t *ci) /* {{{ */ { if (ci == NULL) - return (EINVAL); + return EINVAL; /* Fill the `mysql_database_t' structure.. */ for (int i = 0; i < ci->children_num; i++) { @@ -250,7 +250,7 @@ static int mysql_config(oconfig_item_t *ci) /* {{{ */ WARNING("mysql plugin: Option \"%s\" not allowed here.", child->key); } - return (0); + return 0; } /* }}} int mysql_config */ /* }}} End of configuration handling functions */ @@ -263,7 +263,7 @@ static MYSQL *getconnection(mysql_database_t *db) { status = mysql_ping(db->con); if (status == 0) - return (db->con); + return db->con; WARNING("mysql plugin: Lost connection to instance \"%s\": %s", db->instance, mysql_error(db->con)); @@ -274,7 +274,7 @@ static MYSQL *getconnection(mysql_database_t *db) { db->con = mysql_init(NULL); if (db->con == NULL) { ERROR("mysql plugin: mysql_init failed: %s", mysql_error(db->con)); - return (NULL); + return NULL; } } @@ -289,7 +289,7 @@ static MYSQL *getconnection(mysql_database_t *db) { "at server %s: %s", (db->database != NULL) ? db->database : "", (db->host != NULL) ? db->host : "localhost", mysql_error(db->con)); - return (NULL); + return NULL; } cipher = mysql_get_ssl_cipher(db->con); @@ -302,7 +302,7 @@ static MYSQL *getconnection(mysql_database_t *db) { mysql_get_server_info(db->con), mysql_get_proto_info(db->con)); db->is_connected = 1; - return (db->con); + return db->con; } /* static MYSQL *getconnection (mysql_database_t *db) */ static void set_host(mysql_database_t *db, char *buf, size_t buflen) { @@ -364,17 +364,17 @@ static MYSQL_RES *exec_query(MYSQL *con, const char *query) { if (mysql_real_query(con, query, query_len)) { ERROR("mysql plugin: Failed to execute query: %s", mysql_error(con)); INFO("mysql plugin: SQL query was: %s", query); - return (NULL); + return NULL; } res = mysql_store_result(con); if (res == NULL) { ERROR("mysql plugin: Failed to store query result: %s", mysql_error(con)); INFO("mysql plugin: SQL query was: %s", query); - return (NULL); + return NULL; } - return (res); + return res; } /* exec_query */ static int mysql_read_master_stats(mysql_database_t *db, MYSQL *con) { @@ -389,7 +389,7 @@ static int mysql_read_master_stats(mysql_database_t *db, MYSQL *con) { res = exec_query(con, query); if (res == NULL) - return (-1); + return -1; row = mysql_fetch_row(res); if (row == NULL) { @@ -397,7 +397,7 @@ static int mysql_read_master_stats(mysql_database_t *db, MYSQL *con) { "`%s' did not return any rows.", query); mysql_free_result(res); - return (-1); + return -1; } field_num = mysql_num_fields(res); @@ -406,7 +406,7 @@ static int mysql_read_master_stats(mysql_database_t *db, MYSQL *con) { "`%s' returned less than two columns.", query); mysql_free_result(res); - return (-1); + return -1; } position = atoll(row[1]); @@ -420,7 +420,7 @@ static int mysql_read_master_stats(mysql_database_t *db, MYSQL *con) { mysql_free_result(res); - return (0); + return 0; } /* mysql_read_master_stats */ static int mysql_read_slave_stats(mysql_database_t *db, MYSQL *con) { @@ -442,7 +442,7 @@ static int mysql_read_slave_stats(mysql_database_t *db, MYSQL *con) { res = exec_query(con, query); if (res == NULL) - return (-1); + return -1; row = mysql_fetch_row(res); if (row == NULL) { @@ -450,7 +450,7 @@ static int mysql_read_slave_stats(mysql_database_t *db, MYSQL *con) { "`%s' did not return any rows.", query); mysql_free_result(res); - return (-1); + return -1; } field_num = mysql_num_fields(res); @@ -459,7 +459,7 @@ static int mysql_read_slave_stats(mysql_database_t *db, MYSQL *con) { "`%s' returned less than 33 columns.", query); mysql_free_result(res); - return (-1); + return -1; } if (db->slave_stats) { @@ -532,7 +532,7 @@ static int mysql_read_slave_stats(mysql_database_t *db, MYSQL *con) { mysql_free_result(res); - return (0); + return 0; } /* mysql_read_slave_stats */ static int mysql_read_innodb_stats(mysql_database_t *db, MYSQL *con) { @@ -591,7 +591,7 @@ static int mysql_read_innodb_stats(mysql_database_t *db, MYSQL *con) { res = exec_query(con, query); if (res == NULL) - return (-1); + return -1; while ((row = mysql_fetch_row(res))) { int i; @@ -621,7 +621,7 @@ static int mysql_read_innodb_stats(mysql_database_t *db, MYSQL *con) { } mysql_free_result(res); - return (0); + return 0; } static int mysql_read_wsrep_stats(mysql_database_t *db, MYSQL *con) { @@ -670,7 +670,7 @@ static int mysql_read_wsrep_stats(mysql_database_t *db, MYSQL *con) { res = exec_query(con, query); if (res == NULL) - return (-1); + return -1; row = mysql_fetch_row(res); if (row == NULL) { @@ -678,7 +678,7 @@ static int mysql_read_wsrep_stats(mysql_database_t *db, MYSQL *con) { "`%s' did not return any rows.", query); mysql_free_result(res); - return (-1); + return -1; } while ((row = mysql_fetch_row(res))) { @@ -706,7 +706,7 @@ static int mysql_read_wsrep_stats(mysql_database_t *db, MYSQL *con) { } mysql_free_result(res); - return (0); + return 0; } /* mysql_read_wsrep_stats */ static int mysql_read(user_data_t *ud) { @@ -733,14 +733,14 @@ static int mysql_read(user_data_t *ud) { if ((ud == NULL) || (ud->data == NULL)) { ERROR("mysql plugin: mysql_database_read: Invalid user data."); - return (-1); + return -1; } db = (mysql_database_t *)ud->data; /* An error message will have been printed in this case */ if ((con = getconnection(db)) == NULL) - return (-1); + return -1; mysql_version = mysql_get_server_version(con); @@ -750,7 +750,7 @@ static int mysql_read(user_data_t *ud) { res = exec_query(con, query); if (res == NULL) - return (-1); + return -1; while ((row = mysql_fetch_row(res))) { char *key; @@ -938,7 +938,7 @@ static int mysql_read(user_data_t *ud) { if (db->wsrep_stats) mysql_read_wsrep_stats(db, con); - return (0); + return 0; } /* int mysql_read */ void module_register(void) { diff --git a/src/netapp.c b/src/netapp.c index 45144bf1..701ac2f7 100644 --- a/src/netapp.c +++ b/src/netapp.c @@ -459,7 +459,7 @@ static disk_t *get_disk(cfg_disk_t *cd, const char *name) /* {{{ */ disk_t *d; if ((cd == NULL) || (name == NULL)) - return (NULL); + return NULL; for (d = cd->disks; d != NULL; d = d->next) { if (strcmp(d->name, name) == 0) @@ -468,13 +468,13 @@ static disk_t *get_disk(cfg_disk_t *cd, const char *name) /* {{{ */ d = calloc(1, sizeof(*d)); if (d == NULL) - return (NULL); + return NULL; d->next = NULL; d->name = strdup(name); if (d->name == NULL) { sfree(d); - return (NULL); + return NULL; } d->next = cd->disks; @@ -492,12 +492,12 @@ static data_volume_usage_t *get_volume_usage(cfg_volume_usage_t *cvu, /* {{{ */ int ignore_snapshot = 0; if ((cvu == NULL) || (name == NULL)) - return (NULL); + return NULL; last = cvu->volumes; while (last != NULL) { if (strcmp(last->name, name) == 0) - return (last); + return last; if (last->next == NULL) break; @@ -510,18 +510,18 @@ static data_volume_usage_t *get_volume_usage(cfg_volume_usage_t *cvu, /* {{{ */ ignore_capacity = ignorelist_match(cvu->il_capacity, name); ignore_snapshot = ignorelist_match(cvu->il_snapshot, name); if ((ignore_capacity != 0) && (ignore_snapshot != 0)) - return (NULL); + return NULL; /* Not found: allocate. */ new = calloc(1, sizeof(*new)); if (new == NULL) - return (NULL); + return NULL; new->next = NULL; new->name = strdup(name); if (new->name == NULL) { sfree(new); - return (NULL); + return NULL; } if (ignore_capacity == 0) @@ -541,7 +541,7 @@ static data_volume_usage_t *get_volume_usage(cfg_volume_usage_t *cvu, /* {{{ */ else last->next = new; - return (new); + return new; } /* }}} data_volume_usage_t *get_volume_usage */ static data_volume_perf_t *get_volume_perf(cfg_volume_perf_t *cvp, /* {{{ */ @@ -554,12 +554,12 @@ static data_volume_perf_t *get_volume_perf(cfg_volume_perf_t *cvp, /* {{{ */ int ignore_latency = 0; if ((cvp == NULL) || (name == NULL)) - return (NULL); + return NULL; last = cvp->volumes; while (last != NULL) { if (strcmp(last->name, name) == 0) - return (last); + return last; if (last->next == NULL) break; @@ -573,18 +573,18 @@ static data_volume_perf_t *get_volume_perf(cfg_volume_perf_t *cvp, /* {{{ */ ignore_operations = ignorelist_match(cvp->il_operations, name); ignore_latency = ignorelist_match(cvp->il_latency, name); if ((ignore_octets != 0) || (ignore_operations != 0) || (ignore_latency != 0)) - return (NULL); + return NULL; /* Not found: allocate. */ new = calloc(1, sizeof(*new)); if (new == NULL) - return (NULL); + return NULL; new->next = NULL; new->name = strdup(name); if (new->name == NULL) { sfree(new); - return (NULL); + return NULL; } if (ignore_octets == 0) @@ -600,7 +600,7 @@ static data_volume_perf_t *get_volume_perf(cfg_volume_perf_t *cvp, /* {{{ */ else last->next = new; - return (new); + return new; } /* }}} data_volume_perf_t *get_volume_perf */ /* @@ -634,7 +634,7 @@ static int submit_values(const char *host, /* {{{ */ if (type_inst != NULL) sstrncpy(vl.type_instance, type_inst, sizeof(vl.type_instance)); - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } /* }}} int submit_uint64 */ static int submit_two_derive(const char *host, @@ -646,16 +646,17 @@ static int submit_two_derive(const char *host, {.derive = val0}, {.derive = val1}, }; - return (submit_values(host, plugin_inst, type, type_inst, values, - STATIC_ARRAY_SIZE(values), timestamp, interval)); + return submit_values(host, plugin_inst, type, type_inst, values, + STATIC_ARRAY_SIZE(values), timestamp, interval); } /* }}} int submit_two_derive */ static int submit_derive(const char *host, const char *plugin_inst, /* {{{ */ const char *type, const char *type_inst, derive_t counter, cdtime_t timestamp, cdtime_t interval) { - return (submit_values(host, plugin_inst, type, type_inst, - &(value_t){.derive = counter}, 1, timestamp, interval)); + return submit_values(host, plugin_inst, type, type_inst, &(value_t){ + .derive=counter, + }, 1, timestamp, interval); } /* }}} int submit_derive */ static int submit_two_gauge(const char *host, const char *plugin_inst, /* {{{ */ @@ -666,15 +667,16 @@ static int submit_two_gauge(const char *host, const char *plugin_inst, /* {{{ */ {.gauge = val0}, {.gauge = val1}, }; - return (submit_values(host, plugin_inst, type, type_inst, values, - STATIC_ARRAY_SIZE(values), timestamp, interval)); + return submit_values(host, plugin_inst, type, type_inst, values, + STATIC_ARRAY_SIZE(values), timestamp, interval); } /* }}} int submit_two_gauge */ static int submit_double(const char *host, const char *plugin_inst, /* {{{ */ const char *type, const char *type_inst, double d, cdtime_t timestamp, cdtime_t interval) { - return (submit_values(host, plugin_inst, type, type_inst, - &(value_t){.gauge = d}, 1, timestamp, interval)); + return submit_values(host, plugin_inst, type, type_inst, &(value_t){ + .gauge=d, + }, 1, timestamp, interval); } /* }}} int submit_uint64 */ /* Calculate hit ratio from old and new counters and submit the resulting @@ -696,8 +698,8 @@ static int submit_cache_ratio(const char *host, /* {{{ */ v.gauge = 100.0 * ((gauge_t)hits) / ((gauge_t)(hits + misses)); } - return (submit_values(host, plugin_inst, "cache_ratio", type_inst, &v, 1, - timestamp, interval)); + return submit_values(host, plugin_inst, "cache_ratio", type_inst, &v, 1, + timestamp, interval); } /* }}} int submit_cache_ratio */ /* Submits all the caches used by WAFL. Uses "submit_cache_ratio". */ @@ -753,7 +755,7 @@ static int submit_wafl_data(const char *hostname, /* Copy HAVE_* flags */ old_data->flags |= (new_data->flags & HAVE_WAFL_ALL); - return (0); + return 0; } /* }}} int submit_wafl_data */ /* Submits volume performance data to the daemon, taking care to honor and @@ -765,7 +767,7 @@ static int submit_volume_perf_data(const char *hostname, /* {{{ */ char plugin_instance[DATA_MAX_NAME_LEN]; if ((hostname == NULL) || (old_data == NULL) || (new_data == NULL)) - return (-1); + return -1; ssnprintf(plugin_instance, sizeof(plugin_instance), "volume-%s", old_data->name); @@ -853,7 +855,7 @@ static int submit_volume_perf_data(const char *hostname, /* {{{ */ /* Copy the HAVE_* flags */ old_data->flags |= (new_data->flags & HAVE_VOLUME_PERF_ALL); - return (0); + return 0; } /* }}} int submit_volume_perf_data */ static cdtime_t cna_child_get_cdtime(na_elem_t *data) /* {{{ */ @@ -862,7 +864,7 @@ static cdtime_t cna_child_get_cdtime(na_elem_t *data) /* {{{ */ t = (time_t)na_child_get_uint64(data, "timestamp", /* default = */ 0); - return (TIME_T_TO_CDTIME_T(t)); + return TIME_T_TO_CDTIME_T(t); } /* }}} cdtime_t cna_child_get_cdtime */ /* @@ -889,7 +891,7 @@ static int cna_handle_wafl_data(const char *hostname, "na_elem_child (\"instances\") failed " "for host %s.", hostname); - return (-1); + return -1; } plugin_inst = na_child_get_string(instances, "name"); @@ -898,7 +900,7 @@ static int cna_handle_wafl_data(const char *hostname, "na_child_get_string (\"name\") failed " "for host %s.", hostname); - return (-1); + return -1; } /* Iterate over all counters */ @@ -948,8 +950,8 @@ static int cna_handle_wafl_data(const char *hostname, } } - return ( - submit_wafl_data(hostname, plugin_inst, cfg_wafl, &perf_data, interval)); + return submit_wafl_data(hostname, plugin_inst, cfg_wafl, &perf_data, + interval); } /* }}} void cna_handle_wafl_data */ static int cna_setup_wafl(cfg_wafl_t *cw) /* {{{ */ @@ -957,15 +959,15 @@ static int cna_setup_wafl(cfg_wafl_t *cw) /* {{{ */ na_elem_t *e; if (cw == NULL) - return (EINVAL); + return EINVAL; if (cw->query != NULL) - return (0); + return 0; cw->query = na_elem_new("perf-object-get-instances"); if (cw->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(cw->query, "objectname", "wafl"); @@ -974,7 +976,7 @@ static int cna_setup_wafl(cfg_wafl_t *cw) /* {{{ */ na_elem_free(cw->query); cw->query = NULL; ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(e, "counter", "name_cache_hit"); na_child_add_string(e, "counter", "name_cache_miss"); @@ -987,7 +989,7 @@ static int cna_setup_wafl(cfg_wafl_t *cw) /* {{{ */ na_child_add(cw->query, e); - return (0); + return 0; } /* }}} int cna_setup_wafl */ static int cna_query_wafl(host_config_t *host) /* {{{ */ @@ -997,20 +999,20 @@ static int cna_query_wafl(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If WAFL was not configured, return without doing anything. */ if (host->cfg_wafl == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_wafl->interval.interval + host->cfg_wafl->interval.last_read) > now) - return (0); + return 0; status = cna_setup_wafl(host->cfg_wafl); if (status != 0) - return (status); + return status; assert(host->cfg_wafl->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_wafl->query); @@ -1019,7 +1021,7 @@ static int cna_query_wafl(host_config_t *host) /* {{{ */ "host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_wafl_data(host->name, host->cfg_wafl, data, @@ -1029,7 +1031,7 @@ static int cna_query_wafl(host_config_t *host) /* {{{ */ host->cfg_wafl->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_wafl */ /* Data corresponding to */ @@ -1042,7 +1044,7 @@ static int cna_handle_disk_data(const char *hostname, /* {{{ */ disk_t *worst_disk = NULL; if ((cfg_disk == NULL) || (data == NULL)) - return (EINVAL); + return EINVAL; timestamp = cna_child_get_cdtime(data); @@ -1052,7 +1054,7 @@ static int cna_handle_disk_data(const char *hostname, /* {{{ */ "na_elem_child (\"instances\") failed " "for host %s.", hostname); - return (-1); + return -1; } /* Iterate over all children */ @@ -1137,7 +1139,7 @@ static int cna_handle_disk_data(const char *hostname, /* {{{ */ submit_double(hostname, "system", "percent", "disk_busy", worst_disk->disk_busy_percent, timestamp, interval); - return (0); + return 0; } /* }}} int cna_handle_disk_data */ static int cna_setup_disk(cfg_disk_t *cd) /* {{{ */ @@ -1145,15 +1147,15 @@ static int cna_setup_disk(cfg_disk_t *cd) /* {{{ */ na_elem_t *e; if (cd == NULL) - return (EINVAL); + return EINVAL; if (cd->query != NULL) - return (0); + return 0; cd->query = na_elem_new("perf-object-get-instances"); if (cd->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(cd->query, "objectname", "disk"); @@ -1162,13 +1164,13 @@ static int cna_setup_disk(cfg_disk_t *cd) /* {{{ */ na_elem_free(cd->query); cd->query = NULL; ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(e, "counter", "disk_busy"); na_child_add_string(e, "counter", "base_for_disk_busy"); na_child_add(cd->query, e); - return (0); + return 0; } /* }}} int cna_setup_disk */ static int cna_query_disk(host_config_t *host) /* {{{ */ @@ -1178,21 +1180,21 @@ static int cna_query_disk(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If the user did not configure disk statistics, return without doing * anything. */ if (host->cfg_disk == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_disk->interval.interval + host->cfg_disk->interval.last_read) > now) - return (0); + return 0; status = cna_setup_disk(host->cfg_disk); if (status != 0) - return (status); + return status; assert(host->cfg_disk->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_disk->query); @@ -1201,7 +1203,7 @@ static int cna_query_disk(host_config_t *host) /* {{{ */ "host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_disk_data(host->name, host->cfg_disk, data, @@ -1211,7 +1213,7 @@ static int cna_query_disk(host_config_t *host) /* {{{ */ host->cfg_disk->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_disk */ /* Data corresponding to */ @@ -1230,7 +1232,7 @@ static int cna_handle_volume_perf_data(const char *hostname, /* {{{ */ "na_elem_child (\"instances\") failed " "for host %s.", hostname); - return (-1); + return -1; } iter_instances = na_child_iterator(elem_instances); @@ -1299,7 +1301,7 @@ static int cna_handle_volume_perf_data(const char *hostname, /* {{{ */ submit_volume_perf_data(hostname, v, &perf_data, interval); } /* for (volume) */ - return (0); + return 0; } /* }}} int cna_handle_volume_perf_data */ static int cna_setup_volume_perf(cfg_volume_perf_t *cd) /* {{{ */ @@ -1307,15 +1309,15 @@ static int cna_setup_volume_perf(cfg_volume_perf_t *cd) /* {{{ */ na_elem_t *e; if (cd == NULL) - return (EINVAL); + return EINVAL; if (cd->query != NULL) - return (0); + return 0; cd->query = na_elem_new("perf-object-get-instances"); if (cd->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(cd->query, "objectname", "volume"); @@ -1324,7 +1326,7 @@ static int cna_setup_volume_perf(cfg_volume_perf_t *cd) /* {{{ */ na_elem_free(cd->query); cd->query = NULL; ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(e, "counter", "read_ops"); na_child_add_string(e, "counter", "write_ops"); @@ -1334,7 +1336,7 @@ static int cna_setup_volume_perf(cfg_volume_perf_t *cd) /* {{{ */ na_child_add_string(e, "counter", "write_latency"); na_child_add(cd->query, e); - return (0); + return 0; } /* }}} int cna_setup_volume_perf */ static int cna_query_volume_perf(host_config_t *host) /* {{{ */ @@ -1344,21 +1346,21 @@ static int cna_query_volume_perf(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If the user did not configure volume performance statistics, return * without doing anything. */ if (host->cfg_volume_perf == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_volume_perf->interval.interval + host->cfg_volume_perf->interval.last_read) > now) - return (0); + return 0; status = cna_setup_volume_perf(host->cfg_volume_perf); if (status != 0) - return (status); + return status; assert(host->cfg_volume_perf->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_volume_perf->query); @@ -1367,7 +1369,7 @@ static int cna_query_volume_perf(host_config_t *host) /* {{{ */ "for host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = @@ -1378,7 +1380,7 @@ static int cna_query_volume_perf(host_config_t *host) /* {{{ */ host->cfg_volume_perf->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_volume_perf */ /* Data corresponding to */ @@ -1472,7 +1474,7 @@ static int cna_submit_volume_usage_data(const char *hostname, /* {{{ */ v->flags &= ~HAVE_VOLUME_USAGE_ALL; } /* for (v = cfg_volume->volumes) */ - return (0); + return 0; } /* }}} int cna_submit_volume_usage_data */ /* Switch the state of a volume between online and offline and send out a @@ -1498,7 +1500,7 @@ static int cna_change_volume_status(const char *hostname, /* {{{ */ v->flags |= IS_VOLUME_USAGE_OFFLINE; } - return (plugin_dispatch_notification(&n)); + return plugin_dispatch_notification(&n); } /* }}} int cna_change_volume_status */ static void cna_handle_volume_snap_usage(const host_config_t *host, /* {{{ */ @@ -1661,7 +1663,7 @@ static int cna_handle_volume_usage_data(const host_config_t *host, /* {{{ */ "na_elem_child (\"volumes\") failed " "for host %s.", host->name); - return (-1); + return -1; } iter_volume = na_child_iterator(elem_volumes); @@ -1721,25 +1723,25 @@ static int cna_handle_volume_usage_data(const host_config_t *host, /* {{{ */ } } /* for (elem_volume) */ - return (cna_submit_volume_usage_data( - host->name, cfg_volume, host->cfg_volume_usage->interval.interval)); + return cna_submit_volume_usage_data(host->name, cfg_volume, + host->cfg_volume_usage->interval.interval); } /* }}} int cna_handle_volume_usage_data */ static int cna_setup_volume_usage(cfg_volume_usage_t *cvu) /* {{{ */ { if (cvu == NULL) - return (EINVAL); + return EINVAL; if (cvu->query != NULL) - return (0); + return 0; cvu->query = na_elem_new("volume-list-info"); if (cvu->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cna_setup_volume_usage */ static int cna_query_volume_usage(host_config_t *host) /* {{{ */ @@ -1749,21 +1751,21 @@ static int cna_query_volume_usage(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If the user did not configure volume_usage statistics, return without * doing anything. */ if (host->cfg_volume_usage == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_volume_usage->interval.interval + host->cfg_volume_usage->interval.last_read) > now) - return (0); + return 0; status = cna_setup_volume_usage(host->cfg_volume_usage); if (status != 0) - return (status); + return status; assert(host->cfg_volume_usage->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_volume_usage->query); @@ -1772,7 +1774,7 @@ static int cna_query_volume_usage(host_config_t *host) /* {{{ */ "for host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_volume_usage_data(host, host->cfg_volume_usage, data); @@ -1781,7 +1783,7 @@ static int cna_query_volume_usage(host_config_t *host) /* {{{ */ host->cfg_volume_usage->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_volume_usage */ /* Data corresponding to */ @@ -1796,7 +1798,7 @@ static int cna_handle_quota_data(const host_config_t *host, /* {{{ */ "na_elem_child (\"quotas\") failed " "for host %s.", host->name); - return (-1); + return -1; } iter_quota = na_child_iterator(elem_quotas); @@ -1844,24 +1846,24 @@ static int cna_handle_quota_data(const host_config_t *host, /* {{{ */ } } /* for (elem_quota) */ - return (0); + return 0; } /* }}} int cna_handle_volume_usage_data */ static int cna_setup_quota(cfg_quota_t *cq) /* {{{ */ { if (cq == NULL) - return (EINVAL); + return EINVAL; if (cq->query != NULL) - return (0); + return 0; cq->query = na_elem_new("quota-report"); if (cq->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cna_setup_quota */ static int cna_query_quota(host_config_t *host) /* {{{ */ @@ -1871,21 +1873,21 @@ static int cna_query_quota(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If the user did not configure quota statistics, return without * doing anything. */ if (host->cfg_quota == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_quota->interval.interval + host->cfg_quota->interval.last_read) > now) - return (0); + return 0; status = cna_setup_quota(host->cfg_quota); if (status != 0) - return (status); + return status; assert(host->cfg_quota->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_quota->query); @@ -1894,7 +1896,7 @@ static int cna_query_quota(host_config_t *host) /* {{{ */ "host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_quota_data(host, host->cfg_quota, data); @@ -1903,7 +1905,7 @@ static int cna_query_quota(host_config_t *host) /* {{{ */ host->cfg_quota->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_quota */ /* Data corresponding to */ @@ -1913,7 +1915,7 @@ static int cna_handle_snapvault_data(const char *hostname, /* {{{ */ na_elem_t *status_list = na_elem_child(data, "status-list"); if (status_list == NULL) { ERROR("netapp plugin: SnapVault status record missing status-list"); - return (0); + return 0; } na_elem_iter_t status_iter = na_child_iterator(status_list); @@ -1957,7 +1959,7 @@ static int cna_handle_snapvault_data(const char *hostname, /* {{{ */ } } /* for (status) */ - return (0); + return 0; } /* }}} int cna_handle_snapvault_data */ static int cna_handle_snapvault_iter(host_config_t *host, /* {{{ */ @@ -1989,7 +1991,7 @@ static int cna_handle_snapvault_iter(host_config_t *host, /* {{{ */ "na_server_invoke failed for host %s: %s", host->name, na_results_reason(data)); na_elem_free(elem); - return (-1); + return -1; } cna_handle_snapvault_data(host->name, host->cfg_snapvault, elem, @@ -2000,25 +2002,25 @@ static int cna_handle_snapvault_iter(host_config_t *host, /* {{{ */ na_elem_free(na_server_invoke( host->srv, "snapvault-secondary-relationship-status-list-iter-end", "tag", tag, NULL)); - return (0); + return 0; } /* }}} int cna_handle_snapvault_iter */ static int cna_setup_snapvault(cfg_snapvault_t *sv) /* {{{ */ { if (sv == NULL) - return (EINVAL); + return EINVAL; if (sv->query != NULL) - return (0); + return 0; sv->query = na_elem_new("snapvault-secondary-relationship-status-list-iter-start"); if (sv->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cna_setup_snapvault */ static int cna_query_snapvault(host_config_t *host) /* {{{ */ @@ -2036,11 +2038,11 @@ static int cna_query_snapvault(host_config_t *host) /* {{{ */ now = cdtime(); if ((host->cfg_snapvault->interval.interval + host->cfg_snapvault->interval.last_read) > now) - return (0); + return 0; status = cna_setup_snapvault(host->cfg_snapvault); if (status != 0) - return (status); + return status; assert(host->cfg_snapvault->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_snapvault->query); @@ -2049,7 +2051,7 @@ static int cna_query_snapvault(host_config_t *host) /* {{{ */ "for host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_snapvault_iter(host, data); @@ -2058,7 +2060,7 @@ static int cna_query_snapvault(host_config_t *host) /* {{{ */ host->cfg_snapvault->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_snapvault */ /* Data corresponding to */ @@ -2084,7 +2086,7 @@ static int cna_handle_system_data(const char *hostname, /* {{{ */ "na_elem_child (\"instances\") failed " "for host %s.", hostname); - return (-1); + return -1; } instance = na_child_get_string(instances, "name"); @@ -2093,7 +2095,7 @@ static int cna_handle_system_data(const char *hostname, /* {{{ */ "na_child_get_string (\"name\") failed " "for host %s.", hostname); - return (-1); + return -1; } counter_iter = na_child_iterator(na_elem_child(instances, "counters")); @@ -2154,25 +2156,25 @@ static int cna_handle_system_data(const char *hostname, /* {{{ */ timestamp, interval); } - return (0); + return 0; } /* }}} int cna_handle_system_data */ static int cna_setup_system(cfg_system_t *cs) /* {{{ */ { if (cs == NULL) - return (EINVAL); + return EINVAL; if (cs->query != NULL) - return (0); + return 0; cs->query = na_elem_new("perf-object-get-instances"); if (cs->query == NULL) { ERROR("netapp plugin: na_elem_new failed."); - return (-1); + return -1; } na_child_add_string(cs->query, "objectname", "system"); - return (0); + return 0; } /* }}} int cna_setup_system */ static int cna_query_system(host_config_t *host) /* {{{ */ @@ -2182,20 +2184,20 @@ static int cna_query_system(host_config_t *host) /* {{{ */ cdtime_t now; if (host == NULL) - return (EINVAL); + return EINVAL; /* If system statistics were not configured, return without doing anything. */ if (host->cfg_system == NULL) - return (0); + return 0; now = cdtime(); if ((host->cfg_system->interval.interval + host->cfg_system->interval.last_read) > now) - return (0); + return 0; status = cna_setup_system(host->cfg_system); if (status != 0) - return (status); + return status; assert(host->cfg_system->query != NULL); data = na_server_invoke_elem(host->srv, host->cfg_system->query); @@ -2204,7 +2206,7 @@ static int cna_query_system(host_config_t *host) /* {{{ */ "host %s: %s", host->name, na_results_reason(data)); na_elem_free(data); - return (-1); + return -1; } status = cna_handle_system_data(host->name, host->cfg_system, data, @@ -2214,7 +2216,7 @@ static int cna_query_system(host_config_t *host) /* {{{ */ host->cfg_system->interval.last_read = now; na_elem_free(data); - return (status); + return status; } /* }}} int cna_query_system */ /* @@ -2225,12 +2227,12 @@ static int cna_query_system(host_config_t *host) /* {{{ */ static int cna_config_bool_to_flag(const oconfig_item_t *ci, /* {{{ */ uint32_t *flags, uint32_t flag) { if ((ci == NULL) || (flags == NULL)) - return (EINVAL); + return EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) { WARNING("netapp plugin: The %s option needs exactly one boolean argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].value.boolean) @@ -2238,7 +2240,7 @@ static int cna_config_bool_to_flag(const oconfig_item_t *ci, /* {{{ */ else *flags &= ~flag; - return (0); + return 0; } /* }}} int cna_config_bool_to_flag */ /* Handling of the "Interval" option which is allowed in every block. */ @@ -2249,12 +2251,12 @@ static int cna_config_get_interval(const oconfig_item_t *ci, /* {{{ */ status = cf_util_get_cdtime(ci, &tmp); if (status != 0) - return (status); + return status; out_interval->interval = tmp; out_interval->last_read = 0; - return (0); + return 0; } /* }}} int cna_config_get_interval */ /* Handling of the "GetIO", "GetOps" and "GetLatency" options within a @@ -2335,12 +2337,12 @@ static int cna_config_volume_performance(host_config_t *host, /* {{{ */ cfg_volume_perf_t *cfg_volume_perf; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_volume_perf == NULL) { cfg_volume_perf = calloc(1, sizeof(*cfg_volume_perf)); if (cfg_volume_perf == NULL) - return (ENOMEM); + return ENOMEM; /* Set default flags */ cfg_volume_perf->query = NULL; @@ -2349,14 +2351,14 @@ static int cna_config_volume_performance(host_config_t *host, /* {{{ */ cfg_volume_perf->il_octets = ignorelist_create(/* invert = */ 1); if (cfg_volume_perf->il_octets == NULL) { sfree(cfg_volume_perf); - return (ENOMEM); + return ENOMEM; } cfg_volume_perf->il_operations = ignorelist_create(/* invert = */ 1); if (cfg_volume_perf->il_operations == NULL) { ignorelist_free(cfg_volume_perf->il_octets); sfree(cfg_volume_perf); - return (ENOMEM); + return ENOMEM; } cfg_volume_perf->il_latency = ignorelist_create(/* invert = */ 1); @@ -2364,7 +2366,7 @@ static int cna_config_volume_performance(host_config_t *host, /* {{{ */ ignorelist_free(cfg_volume_perf->il_octets); ignorelist_free(cfg_volume_perf->il_operations); sfree(cfg_volume_perf); - return (ENOMEM); + return ENOMEM; } host->cfg_volume_perf = cfg_volume_perf; @@ -2395,7 +2397,7 @@ static int cna_config_volume_performance(host_config_t *host, /* {{{ */ item->key); } - return (0); + return 0; } /* }}} int cna_config_volume_performance */ /* Handling of the "GetCapacity" and "GetSnapshot" options within a @@ -2456,12 +2458,12 @@ static int cna_config_quota(host_config_t *host, oconfig_item_t *ci) /* {{{ */ cfg_quota_t *cfg_quota; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_quota == NULL) { cfg_quota = calloc(1, sizeof(*cfg_quota)); if (cfg_quota == NULL) - return (ENOMEM); + return ENOMEM; cfg_quota->query = NULL; host->cfg_quota = cfg_quota; @@ -2479,7 +2481,7 @@ static int cna_config_quota(host_config_t *host, oconfig_item_t *ci) /* {{{ */ item->key); } - return (0); + return 0; } /* }}} int cna_config_quota */ /* Corresponds to a block */ @@ -2487,12 +2489,12 @@ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */ cfg_disk_t *cfg_disk; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_disk == NULL) { cfg_disk = calloc(1, sizeof(*cfg_disk)); if (cfg_disk == NULL) - return (ENOMEM); + return ENOMEM; /* Set default flags */ cfg_disk->flags = CFG_DISK_ALL; @@ -2520,7 +2522,7 @@ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */ host->cfg_disk = NULL; } - return (0); + return 0; } /* }}} int cna_config_disk */ /* Corresponds to a block */ @@ -2529,12 +2531,12 @@ static int cna_config_wafl(host_config_t *host, oconfig_item_t *ci) /* {{{ */ cfg_wafl_t *cfg_wafl; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_wafl == NULL) { cfg_wafl = calloc(1, sizeof(*cfg_wafl)); if (cfg_wafl == NULL) - return (ENOMEM); + return ENOMEM; /* Set default flags */ cfg_wafl->flags = CFG_WAFL_ALL; @@ -2569,7 +2571,7 @@ static int cna_config_wafl(host_config_t *host, oconfig_item_t *ci) /* {{{ */ host->cfg_wafl = NULL; } - return (0); + return 0; } /* }}} int cna_config_wafl */ /* @@ -2594,12 +2596,12 @@ static int cna_config_volume_usage(host_config_t *host, /* {{{ */ cfg_volume_usage_t *cfg_volume_usage; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_volume_usage == NULL) { cfg_volume_usage = calloc(1, sizeof(*cfg_volume_usage)); if (cfg_volume_usage == NULL) - return (ENOMEM); + return ENOMEM; /* Set default flags */ cfg_volume_usage->query = NULL; @@ -2608,14 +2610,14 @@ static int cna_config_volume_usage(host_config_t *host, /* {{{ */ cfg_volume_usage->il_capacity = ignorelist_create(/* invert = */ 1); if (cfg_volume_usage->il_capacity == NULL) { sfree(cfg_volume_usage); - return (ENOMEM); + return ENOMEM; } cfg_volume_usage->il_snapshot = ignorelist_create(/* invert = */ 1); if (cfg_volume_usage->il_snapshot == NULL) { ignorelist_free(cfg_volume_usage->il_capacity); sfree(cfg_volume_usage); - return (ENOMEM); + return ENOMEM; } host->cfg_volume_usage = cfg_volume_usage; @@ -2642,7 +2644,7 @@ static int cna_config_volume_usage(host_config_t *host, /* {{{ */ item->key); } - return (0); + return 0; } /* }}} int cna_config_volume_usage */ /* Corresponds to a block */ @@ -2684,12 +2686,12 @@ static int cna_config_system(host_config_t *host, /* {{{ */ cfg_system_t *cfg_system; if ((host == NULL) || (ci == NULL)) - return (EINVAL); + return EINVAL; if (host->cfg_system == NULL) { cfg_system = calloc(1, sizeof(*cfg_system)); if (cfg_system == NULL) - return (ENOMEM); + return ENOMEM; /* Set default flags */ cfg_system->flags = CFG_SYSTEM_ALL; @@ -2726,7 +2728,7 @@ static int cna_config_system(host_config_t *host, /* {{{ */ host->cfg_system = NULL; } - return (0); + return 0; } /* }}} int cna_config_system */ /* Corresponds to a block. */ @@ -2736,7 +2738,7 @@ static host_config_t *cna_alloc_host(void) /* {{{ */ host = calloc(1, sizeof(*host)); if (host == NULL) - return (NULL); + return NULL; host->name = NULL; host->protocol = NA_SERVER_TRANSPORT_HTTPS; @@ -2753,7 +2755,7 @@ static host_config_t *cna_alloc_host(void) /* {{{ */ host->cfg_snapvault = NULL; host->cfg_system = NULL; - return (host); + return host; } /* }}} host_config_t *cna_alloc_host */ static host_config_t *cna_shallow_clone_host(host_config_t *host) /* {{{ */ @@ -2761,11 +2763,11 @@ static host_config_t *cna_shallow_clone_host(host_config_t *host) /* {{{ */ host_config_t *clone; if (host == NULL) - return (NULL); + return NULL; clone = cna_alloc_host(); if (clone == NULL) - return (NULL); + return NULL; if (host->name != NULL) { clone->name = strdup(host->name); @@ -2804,7 +2806,7 @@ static host_config_t *cna_shallow_clone_host(host_config_t *host) /* {{{ */ clone->interval = host->interval; - return (clone); + return clone; } /* }}} host_config_t *cna_shallow_clone_host */ static int cna_read(user_data_t *ud); @@ -2827,7 +2829,7 @@ static int cna_register_host(host_config_t *host) /* {{{ */ .data = host, .free_func = (void *)free_host_config, }); - return (0); + return 0; } /* }}} int cna_register_host */ static int cna_config_host(host_config_t *host, /* {{{ */ @@ -2843,12 +2845,12 @@ static int cna_config_host(host_config_t *host, /* {{{ */ WARNING("netapp plugin: \"%s\" needs exactly one string argument. Ignoring " "host block.", ci->key); - return (1); + return 1; } status = cf_util_get_string(ci, &host->name); if (status != 0) - return (1); + return 1; for (int i = 0; i < ci->children_num; ++i) { item = ci->children + i; @@ -2871,7 +2873,7 @@ static int cna_config_host(host_config_t *host, /* {{{ */ WARNING("netapp plugin: \"Protocol\" needs to be either \"http\" or " "\"https\". Ignoring host block \"%s\".", ci->values[0].value.string); - return (1); + return 1; } if (!strcasecmp(item->values[0].value.string, "http")) host->protocol = NA_SERVER_TRANSPORT_HTTP; @@ -2947,7 +2949,7 @@ static int cna_config_host(host_config_t *host, /* {{{ */ if (status != 0) return status; - return (0); + return 0; } /* }}} host_config_t *cna_config_host */ /* @@ -2961,10 +2963,10 @@ static int cna_init_host(host_config_t *host) /* {{{ */ int major_version = 1, minor_version = 1; if (host == NULL) - return (EINVAL); + return EINVAL; if (host->srv != NULL) - return (0); + return 0; if (host->vfiler != NULL) /* Request version 1.7 of the ONTAP API */ minor_version = 7; @@ -2972,7 +2974,7 @@ static int cna_init_host(host_config_t *host) /* {{{ */ host->srv = na_server_open(host->host, major_version, minor_version); if (host->srv == NULL) { ERROR("netapp plugin: na_server_open (%s) failed.", host->host); - return (-1); + return -1; } na_server_set_transport_type(host->srv, host->protocol, @@ -2986,14 +2988,14 @@ static int cna_init_host(host_config_t *host) /* {{{ */ if (!na_server_set_vfiler(host->srv, host->vfiler)) { ERROR("netapp plugin: Failed to connect to VFiler '%s' on host '%s'.", host->vfiler, host->host); - return (-1); + return -1; } else { INFO("netapp plugin: Connected to VFiler '%s' on host '%s'.", host->vfiler, host->host); } } - return (0); + return 0; } /* }}} int cna_init_host */ static int cna_init(void) /* {{{ */ @@ -3006,7 +3008,7 @@ static int cna_init(void) /* {{{ */ return 1; } - return (0); + return 0; } /* }}} cna_init */ static int cna_read_internal(host_config_t *host) { /* {{{ */ @@ -3014,31 +3016,31 @@ static int cna_read_internal(host_config_t *host) { /* {{{ */ status = cna_query_wafl(host); if (status != 0) - return (status); + return status; status = cna_query_disk(host); if (status != 0) - return (status); + return status; status = cna_query_volume_perf(host); if (status != 0) - return (status); + return status; status = cna_query_volume_usage(host); if (status != 0) - return (status); + return status; status = cna_query_quota(host); if (status != 0) - return (status); + return status; status = cna_query_snapvault(host); if (status != 0) - return (status); + return status; status = cna_query_system(host); if (status != 0) - return (status); + return status; return 0; } /* }}} int cna_read_internal */ @@ -3048,13 +3050,13 @@ static int cna_read(user_data_t *ud) { /* {{{ */ int status; if ((ud == NULL) || (ud->data == NULL)) - return (-1); + return -1; host = ud->data; status = cna_init_host(host); if (status != 0) - return (status); + return status; status = cna_read_internal(host); if (status != 0) { @@ -3101,7 +3103,7 @@ static int cna_shutdown(void) /* {{{ */ /* Clean up system resources and stuff. */ na_shutdown(); - return (0); + return 0; } /* }}} int cna_shutdown */ void module_register(void) { @@ -3109,5 +3111,3 @@ void module_register(void) { plugin_register_init("netapp", cna_init); plugin_register_shutdown("netapp", cna_shutdown); } - -/* vim: set sw=2 ts=2 noet fdm=marker : */ diff --git a/src/netlink.c b/src/netlink.c index 8076c1fa..3cc1084b 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -85,6 +85,11 @@ typedef struct ir_ignorelist_s { struct ir_ignorelist_s *next; } ir_ignorelist_t; +struct qos_stats { + struct gnet_stats_basic *bs; + struct gnet_stats_queue *qs; +}; + static int ir_ignorelist_invert = 1; static ir_ignorelist_t *ir_ignorelist_head = NULL; @@ -103,13 +108,13 @@ static int add_ignorelist(const char *dev, const char *type, const char *inst) { entry = calloc(1, sizeof(*entry)); if (entry == NULL) - return (-1); + return -1; if (strcasecmp(dev, "All") != 0) { entry->device = strdup(dev); if (entry->device == NULL) { sfree(entry); - return (-1); + return -1; } } @@ -117,7 +122,7 @@ static int add_ignorelist(const char *dev, const char *type, const char *inst) { if (entry->type == NULL) { sfree(entry->device); sfree(entry); - return (-1); + return -1; } if (inst != NULL) { @@ -126,14 +131,14 @@ static int add_ignorelist(const char *dev, const char *type, const char *inst) { sfree(entry->type); sfree(entry->device); sfree(entry); - return (-1); + return -1; } } entry->next = ir_ignorelist_head; ir_ignorelist_head = entry; - return (0); + return 0; } /* int add_ignorelist */ /* @@ -145,7 +150,7 @@ static int check_ignorelist(const char *dev, const char *type, assert((dev != NULL) && (type != NULL)); if (ir_ignorelist_head == NULL) - return (ir_ignorelist_invert ? 0 : 1); + return ir_ignorelist_invert ? 0 : 1; for (ir_ignorelist_t *i = ir_ignorelist_head; i != NULL; i = i->next) { /* i->device == NULL => match all devices */ @@ -166,10 +171,10 @@ static int check_ignorelist(const char *dev, const char *type, i->device == NULL ? "(nil)" : i->device, i->type, i->inst == NULL ? "(nil)" : i->inst); - return (ir_ignorelist_invert ? 0 : 1); + return ir_ignorelist_invert ? 0 : 1; } /* for i */ - return (ir_ignorelist_invert); + return ir_ignorelist_invert; } /* int check_ignorelist */ static void submit_one(const char *dev, const char *type, @@ -216,7 +221,7 @@ static int update_iflist(struct ifinfomsg *msg, const char *dev) { temp = realloc(iflist, (msg->ifi_index + 1) * sizeof(char *)); if (temp == NULL) { ERROR("netlink plugin: update_iflist: realloc failed."); - return (-1); + return -1; } memset(temp + iflist_len, '\0', @@ -230,7 +235,7 @@ static int update_iflist(struct ifinfomsg *msg, const char *dev) { iflist[msg->ifi_index] = strdup(dev); } - return (0); + return 0; } /* int update_iflist */ static void check_ignorelist_and_submit(const char *dev, @@ -387,20 +392,30 @@ static int link_filter_cb(const struct nlmsghdr *nlh, #if HAVE_TCA_STATS2 static int qos_attr_cb(const struct nlattr *attr, void *data) { - struct gnet_stats_basic **bs = (struct gnet_stats_basic **)data; + struct qos_stats *q_stats = (struct qos_stats *)data; /* skip unsupported attribute in user-space */ if (mnl_attr_type_valid(attr, TCA_STATS_MAX) < 0) return MNL_CB_OK; if (mnl_attr_get_type(attr) == TCA_STATS_BASIC) { - if (mnl_attr_validate2(attr, MNL_TYPE_UNSPEC, sizeof(**bs)) < 0) { + if (mnl_attr_validate2(attr, MNL_TYPE_UNSPEC, sizeof(*q_stats->bs)) < 0) { ERROR("netlink plugin: qos_attr_cb: TCA_STATS_BASIC mnl_attr_validate2 " "failed."); return MNL_CB_ERROR; } - *bs = mnl_attr_get_payload(attr); - return MNL_CB_STOP; + q_stats->bs = mnl_attr_get_payload(attr); + return MNL_CB_OK; + } + + if (mnl_attr_get_type(attr) == TCA_STATS_QUEUE) { + if (mnl_attr_validate2(attr, MNL_TYPE_UNSPEC, sizeof(*q_stats->qs)) < 0) { + ERROR("netlink plugin: qos_attr_cb: TCA_STATS_QUEUE mnl_attr_validate2 " + "failed."); + return MNL_CB_ERROR; + } + q_stats->qs = mnl_attr_get_payload(attr); + return MNL_CB_OK; } return MNL_CB_OK; @@ -470,7 +485,7 @@ static int qos_filter_cb(const struct nlmsghdr *nlh, void *args) { if (kind == NULL) { ERROR("netlink plugin: qos_filter_cb: kind == NULL"); - return (-1); + return -1; } { /* The ID */ @@ -492,7 +507,9 @@ static int qos_filter_cb(const struct nlmsghdr *nlh, void *args) { #if HAVE_TCA_STATS2 mnl_attr_for_each(attr, nlh, sizeof(*tm)) { - struct gnet_stats_basic *bs = NULL; + struct qos_stats q_stats; + + memset(&q_stats, 0x0, sizeof(q_stats)); if (mnl_attr_get_type(attr) != TCA_STATS2) continue; @@ -503,9 +520,9 @@ static int qos_filter_cb(const struct nlmsghdr *nlh, void *args) { return MNL_CB_ERROR; } - mnl_attr_parse_nested(attr, qos_attr_cb, &bs); + mnl_attr_parse_nested(attr, qos_attr_cb, &q_stats); - if (bs != NULL) { + if (q_stats.bs != NULL || q_stats.qs != NULL) { char type_instance[DATA_MAX_NAME_LEN]; stats_submitted = 1; @@ -513,8 +530,13 @@ static int qos_filter_cb(const struct nlmsghdr *nlh, void *args) { ssnprintf(type_instance, sizeof(type_instance), "%s-%s", tc_type, tc_inst); - submit_one(dev, "ipt_bytes", type_instance, bs->bytes); - submit_one(dev, "ipt_packets", type_instance, bs->packets); + if (q_stats.bs != NULL) { + submit_one(dev, "ipt_bytes", type_instance, q_stats.bs->bytes); + submit_one(dev, "ipt_packets", type_instance, q_stats.bs->packets); + } + if (q_stats.qs != NULL) { + submit_one(dev, "if_tx_dropped", type_instance, q_stats.qs->drops); + } } break; @@ -566,12 +588,12 @@ static int ir_config(const char *key, const char *value) { new_val = strdup(value); if (new_val == NULL) - return (-1); + return -1; fields_num = strsplit(new_val, fields, STATIC_ARRAY_SIZE(fields)); if ((fields_num < 1) || (fields_num > 8)) { sfree(new_val); - return (-1); + return -1; } if ((strcasecmp(key, "Interface") == 0) || @@ -594,7 +616,7 @@ static int ir_config(const char *key, const char *value) { ERROR("netlink plugin: Invalid number of fields for option " "`%s'. Got %i, expected 1 or 2.", key, fields_num); - return (-1); + return -1; } else { add_ignorelist(fields[0], key, (fields_num == 2) ? fields[1] : NULL); status = 0; @@ -616,22 +638,22 @@ static int ir_config(const char *key, const char *value) { sfree(new_val); - return (status); + return status; } /* int ir_config */ static int ir_init(void) { nl = mnl_socket_open(NETLINK_ROUTE); if (nl == NULL) { ERROR("netlink plugin: ir_init: mnl_socket_open failed."); - return (-1); + return -1; } if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) { ERROR("netlink plugin: ir_init: mnl_socket_bind failed."); - return (-1); + return -1; } - return (0); + return 0; } /* int ir_init */ static int ir_read(void) { @@ -655,7 +677,7 @@ static int ir_read(void) { if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { ERROR("netlink plugin: ir_read: rtnl_wilddump_request failed."); - return (-1); + return -1; } ret = mnl_socket_recvfrom(nl, buf, sizeof(buf)); @@ -667,7 +689,7 @@ static int ir_read(void) { } if (ret < 0) { ERROR("netlink plugin: ir_read: mnl_socket_recvfrom failed."); - return (-1); + return -1; } /* `link_filter_cb' will update `iflist' which is used here to iterate @@ -718,7 +740,7 @@ static int ir_read(void) { } /* for (type_index) */ } /* for (if_index) */ - return (0); + return 0; } /* int ir_read */ static int ir_shutdown(void) { @@ -727,7 +749,7 @@ static int ir_shutdown(void) { nl = NULL; } - return (0); + return 0; } /* int ir_shutdown */ void module_register(void) { @@ -736,7 +758,3 @@ void module_register(void) { plugin_register_read("netlink", ir_read); plugin_register_shutdown("netlink", ir_shutdown); } /* void module_register */ - -/* - * vim: set shiftwidth=2 softtabstop=2 tabstop=8 : - */ diff --git a/src/network.c b/src/network.c index f93f49c7..00c6c756 100644 --- a/src/network.c +++ b/src/network.c @@ -51,7 +51,7 @@ #include #endif -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H #if defined __APPLE__ /* default xcode compiler throws warnings even when deprecated functionality * is not used. -Werror breaks the build because of erroneous warnings. @@ -96,7 +96,7 @@ GCRY_THREAD_OPTION_PTHREAD_IMPL; * Private data types */ #define SECURITY_LEVEL_NONE 0 -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H #define SECURITY_LEVEL_SIGN 1 #define SECURITY_LEVEL_ENCRYPT 2 #endif @@ -104,7 +104,7 @@ struct sockent_client { int fd; struct sockaddr_storage *addr; socklen_t addrlen; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H int security_level; char *username; char *password; @@ -118,7 +118,7 @@ struct sockent_client { struct sockent_server { int *fd; size_t fd_num; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H int security_level; char *auth_file; fbhash_t *userdb; @@ -324,9 +324,9 @@ static _Bool check_receive_okay(const value_list_t *vl) /* {{{ */ /* This is a value we already sent. Don't allow it to be received again in * order to avoid looping. */ if ((status == 0) && (time_sent >= ((uint64_t)vl->time))) - return (0); + return 0; - return (1); + return 1; } /* }}} _Bool check_receive_okay */ static _Bool check_send_okay(const value_list_t *vl) /* {{{ */ @@ -335,24 +335,24 @@ static _Bool check_send_okay(const value_list_t *vl) /* {{{ */ int status; if (network_config_forward) - return (1); + return 1; if (vl->meta == NULL) - return (1); + return 1; status = meta_data_get_boolean(vl->meta, "network:received", &received); if (status == -ENOENT) - return (1); + return 1; else if (status != 0) { ERROR("network plugin: check_send_okay: meta_data_get_boolean failed " "with status %i.", status); - return (1); + return 1; } /* By default, only *send* value lists that were not *received* by the * network plugin. */ - return (!received); + return !received; } /* }}} _Bool check_send_okay */ static _Bool check_notify_received(const notification_t *n) /* {{{ */ @@ -360,9 +360,9 @@ static _Bool check_notify_received(const notification_t *n) /* {{{ */ for (notification_meta_t *ptr = n->meta; ptr != NULL; ptr = ptr->next) if ((strcmp("network:received", ptr->name) == 0) && (ptr->type == NM_TYPE_BOOLEAN)) - return ((_Bool)ptr->nm_value.nm_boolean); + return (_Bool)ptr->nm_value.nm_boolean; - return (0); + return 0; } /* }}} _Bool check_notify_received */ static _Bool check_send_notify_okay(const notification_t *n) /* {{{ */ @@ -371,7 +371,7 @@ static _Bool check_send_notify_okay(const notification_t *n) /* {{{ */ _Bool received = 0; if (n->meta == NULL) - return (1); + return 1; received = check_notify_received(n); @@ -387,7 +387,7 @@ static _Bool check_send_notify_okay(const notification_t *n) /* {{{ */ /* By default, only *send* value lists that were not *received* by the * network plugin. */ - return (!received); + return !received; } /* }}} _Bool check_send_notify_okay */ static int network_dispatch_values(value_list_t *vl, /* {{{ */ @@ -396,7 +396,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ if ((vl->time == 0) || (strlen(vl->host) == 0) || (strlen(vl->plugin) == 0) || (strlen(vl->type) == 0)) - return (-EINVAL); + return -EINVAL; if (!check_receive_okay(vl)) { #if COLLECT_DEBUG @@ -408,7 +408,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ name); #endif stats_values_not_dispatched++; - return (0); + return 0; } assert(vl->meta == NULL); @@ -416,7 +416,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ vl->meta = meta_data_create(); if (vl->meta == NULL) { ERROR("network plugin: meta_data_create failed."); - return (-ENOMEM); + return -ENOMEM; } status = meta_data_add_boolean(vl->meta, "network:received", 1); @@ -424,7 +424,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ ERROR("network plugin: meta_data_add_boolean failed."); meta_data_destroy(vl->meta); vl->meta = NULL; - return (status); + return status; } if (username != NULL) { @@ -433,7 +433,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ ERROR("network plugin: meta_data_add_string failed."); meta_data_destroy(vl->meta); vl->meta = NULL; - return (status); + return status; } } @@ -443,7 +443,7 @@ static int network_dispatch_values(value_list_t *vl, /* {{{ */ meta_data_destroy(vl->meta); vl->meta = NULL; - return (0); + return 0; } /* }}} int network_dispatch_values */ static int network_dispatch_notification(notification_t *n) /* {{{ */ @@ -457,7 +457,7 @@ static int network_dispatch_notification(notification_t *n) /* {{{ */ ERROR("network plugin: plugin_notification_meta_add_boolean failed."); plugin_notification_meta_free(n->meta); n->meta = NULL; - return (status); + return status; } status = plugin_dispatch_notification(n); @@ -465,10 +465,10 @@ static int network_dispatch_notification(notification_t *n) /* {{{ */ plugin_notification_meta_free(n->meta); n->meta = NULL; - return (status); + return status; } /* }}} int network_dispatch_notification */ -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H static int network_init_gcrypt(void) /* {{{ */ { gcry_error_t err; @@ -477,7 +477,7 @@ static int network_init_gcrypt(void) /* {{{ */ * Because you can't know in a library whether another library has * already initialized the library */ if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P)) - return (0); + return 0; /* http://www.gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html * To ensure thread-safety, it's important to set GCRYCTL_SET_THREAD_CBS @@ -491,7 +491,7 @@ static int network_init_gcrypt(void) /* {{{ */ if (err) { ERROR("network plugin: gcry_control (GCRYCTL_SET_THREAD_CBS) failed: %s", gcry_strerror(err)); - return (-1); + return -1; } #endif @@ -501,11 +501,11 @@ static int network_init_gcrypt(void) /* {{{ */ if (err) { ERROR("network plugin: gcry_control (GCRYCTL_INIT_SECMEM) failed: %s", gcry_strerror(err)); - return (-1); + return -1; } gcry_control(GCRYCTL_INITIALIZATION_FINISHED); - return (0); + return 0; } /* }}} int network_init_gcrypt */ static gcry_cipher_hd_t network_get_aes256_cypher(sockent_t *se, /* {{{ */ @@ -525,11 +525,11 @@ static gcry_cipher_hd_t network_get_aes256_cypher(sockent_t *se, /* {{{ */ cyper_ptr = &se->data.server.cypher; if (username == NULL) - return (NULL); + return NULL; secret = fbh_get(se->data.server.userdb, username); if (secret == NULL) - return (NULL); + return NULL; gcry_md_hash_buffer(GCRY_MD_SHA256, password_hash, secret, strlen(secret)); @@ -543,7 +543,7 @@ static gcry_cipher_hd_t network_get_aes256_cypher(sockent_t *se, /* {{{ */ ERROR("network plugin: gcry_cipher_open returned: %s", gcry_strerror(err)); *cyper_ptr = NULL; - return (NULL); + return NULL; } } else { gcry_cipher_reset(*cyper_ptr); @@ -556,7 +556,7 @@ static gcry_cipher_hd_t network_get_aes256_cypher(sockent_t *se, /* {{{ */ gcry_strerror(err)); gcry_cipher_close(*cyper_ptr); *cyper_ptr = NULL; - return (NULL); + return NULL; } err = gcry_cipher_setiv(*cyper_ptr, iv, iv_size); @@ -565,12 +565,12 @@ static gcry_cipher_hd_t network_get_aes256_cypher(sockent_t *se, /* {{{ */ gcry_strerror(err)); gcry_cipher_close(*cyper_ptr); *cyper_ptr = NULL; - return (NULL); + return NULL; } - return (*cyper_ptr); + return *cyper_ptr; } /* }}} int network_get_aes256_cypher */ -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ static int write_part_values(char **ret_buffer, size_t *ret_buffer_len, const data_set_t *ds, const value_list_t *vl) { @@ -590,19 +590,19 @@ static int write_part_values(char **ret_buffer, size_t *ret_buffer_len, (num_values * sizeof(uint8_t)) + (num_values * sizeof(value_t)); if (*ret_buffer_len < packet_len) - return (-1); + return -1; pkg_values_types = malloc(num_values * sizeof(*pkg_values_types)); if (pkg_values_types == NULL) { ERROR("network plugin: write_part_values: malloc failed."); - return (-1); + return -1; } pkg_values = malloc(num_values * sizeof(*pkg_values)); if (pkg_values == NULL) { free(pkg_values_types); ERROR("network plugin: write_part_values: malloc failed."); - return (-1); + return -1; } pkg_ph.type = htons(TYPE_VALUES); @@ -635,7 +635,7 @@ static int write_part_values(char **ret_buffer, size_t *ret_buffer_len, ERROR("network plugin: write_part_values: " "Unknown data source type: %i", ds->ds[i].type); - return (-1); + return -1; } /* switch (ds->ds[i].type) */ } /* for (num_values) */ @@ -663,7 +663,7 @@ static int write_part_values(char **ret_buffer, size_t *ret_buffer_len, free(pkg_values_types); free(pkg_values); - return (0); + return 0; } /* int write_part_values */ static int write_part_number(char **ret_buffer, size_t *ret_buffer_len, @@ -679,7 +679,7 @@ static int write_part_number(char **ret_buffer, size_t *ret_buffer_len, packet_len = sizeof(pkg_head) + sizeof(pkg_value); if (*ret_buffer_len < packet_len) - return (-1); + return -1; pkg_head.type = htons(type); pkg_head.length = htons(packet_len); @@ -697,7 +697,7 @@ static int write_part_number(char **ret_buffer, size_t *ret_buffer_len, *ret_buffer = packet_ptr + packet_len; *ret_buffer_len -= packet_len; - return (0); + return 0; } /* int write_part_number */ static int write_part_string(char **ret_buffer, size_t *ret_buffer_len, @@ -712,7 +712,7 @@ static int write_part_string(char **ret_buffer, size_t *ret_buffer_len, buffer_len = 2 * sizeof(uint16_t) + str_len + 1; if (*ret_buffer_len < buffer_len) - return (-1); + return -1; pkg_type = htons(type); pkg_length = htons(buffer_len); @@ -733,7 +733,7 @@ static int write_part_string(char **ret_buffer, size_t *ret_buffer_len, *ret_buffer = buffer + buffer_len; *ret_buffer_len -= buffer_len; - return (0); + return 0; } /* int write_part_string */ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, @@ -755,7 +755,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, NOTICE("network plugin: packet is too short: " "buffer_len = %zu", buffer_len); - return (-1); + return -1; } memcpy((void *)&tmp16, buffer, sizeof(tmp16)); @@ -780,7 +780,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, "Chunk of size %zu expected, " "but buffer has only %zu bytes left.", exp_size, buffer_len); - return (-1); + return -1; } assert(pkg_numval <= ((buffer_len - 6) / 9)); @@ -788,7 +788,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, WARNING("network plugin: parse_part_values: " "Length and number of values " "in the packet don't match."); - return (-1); + return -1; } pkg_types = calloc(pkg_numval, sizeof(*pkg_types)); @@ -797,7 +797,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, sfree(pkg_types); sfree(pkg_values); ERROR("network plugin: parse_part_values: calloc failed."); - return (-1); + return -1; } memcpy(pkg_types, buffer, pkg_numval * sizeof(*pkg_types)); @@ -829,7 +829,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, pkg_types[i]); sfree(pkg_types); sfree(pkg_values); - return (-1); + return -1; } /* switch (pkg_types[i]) */ } @@ -840,7 +840,7 @@ static int parse_part_values(void **ret_buffer, size_t *ret_buffer_len, sfree(pkg_types); - return (0); + return 0; } /* int parse_part_values */ static int parse_part_number(void **ret_buffer, size_t *ret_buffer_len, @@ -860,7 +860,7 @@ static int parse_part_number(void **ret_buffer, size_t *ret_buffer_len, "Chunk of size %zu expected, " "but buffer has only %zu bytes left.", exp_size, buffer_len); - return (-1); + return -1; } memcpy((void *)&tmp16, buffer, sizeof(tmp16)); @@ -878,7 +878,7 @@ static int parse_part_number(void **ret_buffer, size_t *ret_buffer_len, *ret_buffer = buffer; *ret_buffer_len = buffer_len - pkg_length; - return (0); + return 0; } /* int parse_part_number */ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, @@ -893,7 +893,7 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, size_t payload_size; if (output_len == 0) - return (EINVAL); + return EINVAL; if (buffer_len < header_size) { WARNING("network plugin: parse_part_string: " @@ -901,7 +901,7 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, "Chunk of at least size %zu expected, " "but buffer has only %zu bytes left.", header_size, buffer_len); - return (-1); + return -1; } memcpy((void *)&tmp16, buffer, sizeof(tmp16)); @@ -920,7 +920,7 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, "Chunk of size %" PRIu16 " received, " "but buffer has only %zu bytes left.", pkg_length, buffer_len); - return (-1); + return -1; } /* Check that pkg_length is in the valid range */ @@ -930,7 +930,7 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, "Header claims this packet is only %hu " "bytes long.", pkg_length); - return (-1); + return -1; } /* Check that the package data fits into the output buffer. @@ -943,7 +943,7 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, "which is too small to hold the received " "%zu byte string.", output_len, payload_size); - return (-1); + return -1; } /* All sanity checks successfull, let's copy the data over */ @@ -956,13 +956,13 @@ static int parse_part_string(void **ret_buffer, size_t *ret_buffer_len, WARNING("network plugin: parse_part_string: " "Received string does not end " "with a NULL-byte."); - return (-1); + return -1; } *ret_buffer = buffer; *ret_buffer_len = buffer_len - pkg_length; - return (0); + return 0; } /* int parse_part_string */ /* Forward declaration: parse_part_sign_sha256 and parse_part_encr_aes256 call @@ -978,7 +978,7 @@ static int parse_packet(sockent_t *se, void *buffer, size_t buffer_size, buffer_offset += (s); \ } while (0) -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ void **ret_buffer, size_t *ret_buffer_len, int flags) { @@ -1005,7 +1005,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ /* Check if the buffer has enough data for this structure. */ if (buffer_len <= PART_SIGNATURE_SHA256_SIZE) - return (-ENOMEM); + return -ENOMEM; /* Read type and length header */ BUFFER_READ(&pss.head.type, sizeof(pss.head.type)); @@ -1016,7 +1016,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ if ((pss_head_length <= PART_SIGNATURE_SHA256_SIZE) || (pss_head_length > buffer_len)) { ERROR("network plugin: HMAC-SHA-256 with invalid length received."); - return (-1); + return -1; } if (se->data.server.userdb == NULL) { @@ -1028,7 +1028,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ *ret_buffer = buffer + pss_head_length; *ret_buffer_len -= pss_head_length; - return (0); + return 0; } /* Copy the hash. */ @@ -1038,7 +1038,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ username_len = pss_head_length - PART_SIGNATURE_SHA256_SIZE; pss.username = malloc(username_len + 1); if (pss.username == NULL) - return (-ENOMEM); + return -ENOMEM; /* Read the username */ BUFFER_READ(pss.username, username_len); @@ -1051,7 +1051,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ if (secret == NULL) { ERROR("network plugin: Unknown user: %s", pss.username); sfree(pss.username); - return (-ENOENT); + return -ENOENT; } /* Create a hash device and check the HMAC */ @@ -1062,7 +1062,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ gcry_strerror(err)); sfree(secret); sfree(pss.username); - return (-1); + return -1; } err = gcry_md_setkey(hd, secret, strlen(secret)); @@ -1071,7 +1071,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ gcry_md_close(hd); sfree(secret); sfree(pss.username); - return (-1); + return -1; } gcry_md_write(hd, buffer + PART_SIGNATURE_SHA256_SIZE, @@ -1082,7 +1082,7 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ gcry_md_close(hd); sfree(secret); sfree(pss.username); - return (-1); + return -1; } memcpy(hash, hash_ptr, sizeof(hash)); @@ -1105,11 +1105,11 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ *ret_buffer = buffer + buffer_len; *ret_buffer_len = 0; - return (0); + return 0; } /* }}} int parse_part_sign_sha256 */ -/* #endif HAVE_LIBGCRYPT */ +/* #endif HAVE_GCRYPT_H */ -#else /* if !HAVE_LIBGCRYPT */ +#else /* if !HAVE_GCRYPT_H */ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ void **ret_buffer, size_t *ret_buffer_size, int flags) { @@ -1127,14 +1127,14 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ buffer_offset = 0; if (buffer_size <= PART_SIGNATURE_SHA256_SIZE) - return (-ENOMEM); + return -ENOMEM; BUFFER_READ(&pss.head.type, sizeof(pss.head.type)); BUFFER_READ(&pss.head.length, sizeof(pss.head.length)); part_len = ntohs(pss.head.length); if ((part_len <= PART_SIGNATURE_SHA256_SIZE) || (part_len > buffer_size)) - return (-EINVAL); + return -EINVAL; if (warning_has_been_printed == 0) { WARNING("network plugin: Received signed packet, but the network " @@ -1149,11 +1149,11 @@ static int parse_part_sign_sha256(sockent_t *se, /* {{{ */ *ret_buffer = buffer + buffer_size; *ret_buffer_size = 0; - return (0); + return 0; } /* }}} int parse_part_sign_sha256 */ -#endif /* !HAVE_LIBGCRYPT */ +#endif /* !HAVE_GCRYPT_H */ -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ void **ret_buffer, size_t *ret_buffer_len, int flags) { @@ -1173,7 +1173,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ if (buffer_len <= PART_ENCRYPTION_AES256_SIZE) { NOTICE("network plugin: parse_part_encr_aes256: " "Discarding short packet."); - return (-1); + return -1; } buffer_offset = 0; @@ -1187,7 +1187,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ if ((part_size <= PART_ENCRYPTION_AES256_SIZE) || (part_size > buffer_len)) { NOTICE("network plugin: parse_part_encr_aes256: " "Discarding part with invalid size."); - return (-1); + return -1; } /* Read the username */ @@ -1198,13 +1198,13 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ (username_len > (part_size - (PART_ENCRYPTION_AES256_SIZE + 1)))) { NOTICE("network plugin: parse_part_encr_aes256: " "Discarding part with invalid username length."); - return (-1); + return -1; } assert(username_len > 0); pea.username = malloc(username_len + 1); if (pea.username == NULL) - return (-ENOMEM); + return -ENOMEM; BUFFER_READ(pea.username, username_len); pea.username[username_len] = 0; @@ -1219,7 +1219,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ if (cypher == NULL) { ERROR("network plugin: Failed to get cypher. Username: %s", pea.username); sfree(pea.username); - return (-1); + return -1; } payload_len = part_size - (PART_ENCRYPTION_AES256_SIZE + username_len); @@ -1233,7 +1233,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ sfree(pea.username); ERROR("network plugin: gcry_cipher_decrypt returned: %s. Username: %s", gcry_strerror(err), pea.username); - return (-1); + return -1; } /* Read the hash */ @@ -1248,7 +1248,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ if (memcmp(hash, pea.hash, sizeof(hash)) != 0) { ERROR("network plugin: Checksum mismatch. Username: %s", pea.username); sfree(pea.username); - return (-1); + return -1; } parse_packet(se, buffer + buffer_offset, payload_len, flags | PP_ENCRYPTED, @@ -1262,11 +1262,11 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ sfree(pea.username); - return (0); + return 0; } /* }}} int parse_part_encr_aes256 */ -/* #endif HAVE_LIBGCRYPT */ +/* #endif HAVE_GCRYPT_H */ -#else /* if !HAVE_LIBGCRYPT */ +#else /* if !HAVE_GCRYPT_H */ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ void **ret_buffer, size_t *ret_buffer_size, int flags) { @@ -1293,7 +1293,7 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ if ((ph_length <= PART_ENCRYPTION_AES256_SIZE) || (ph_length > buffer_size)) { ERROR("network plugin: AES-256 encrypted part " "with invalid length received."); - return (-1); + return -1; } if (warning_has_been_printed == 0) { @@ -1306,9 +1306,9 @@ static int parse_part_encr_aes256(sockent_t *se, /* {{{ */ *ret_buffer = (void *)(((char *)*ret_buffer) + ph_length); *ret_buffer_size -= ph_length; - return (0); + return 0; } /* }}} int parse_part_encr_aes256 */ -#endif /* !HAVE_LIBGCRYPT */ +#endif /* !HAVE_GCRYPT_H */ #undef BUFFER_READ @@ -1320,11 +1320,11 @@ static int parse_packet(sockent_t *se, /* {{{ */ value_list_t vl = VALUE_LIST_INIT; notification_t n = {0}; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H int packet_was_signed = (flags & PP_SIGNED); int packet_was_encrypted = (flags & PP_ENCRYPTED); int printed_ignore_warning = 0; -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ memset(&vl, '\0', sizeof(vl)); status = 0; @@ -1357,7 +1357,7 @@ static int parse_packet(sockent_t *se, /* {{{ */ break; } } -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H else if ((se->data.server.security_level == SECURITY_LEVEL_ENCRYPT) && (packet_was_encrypted == 0)) { if (printed_ignore_warning == 0) { @@ -1369,7 +1369,7 @@ static int parse_packet(sockent_t *se, /* {{{ */ buffer_size -= (size_t)pkg_length; continue; } -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ else if (pkg_type == TYPE_SIGN_SHA256) { status = parse_part_sign_sha256(se, &buffer, &buffer_size, flags); if (status != 0) { @@ -1380,7 +1380,7 @@ static int parse_packet(sockent_t *se, /* {{{ */ break; } } -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H else if ((se->data.server.security_level == SECURITY_LEVEL_SIGN) && (packet_was_encrypted == 0) && (packet_was_signed == 0)) { if (printed_ignore_warning == 0) { @@ -1392,7 +1392,7 @@ static int parse_packet(sockent_t *se, /* {{{ */ buffer_size -= (size_t)pkg_length; continue; } -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ else if (pkg_type == TYPE_VALUES) { status = parse_part_values(&buffer, &buffer_size, &vl.values, &vl.values_len); @@ -1493,7 +1493,7 @@ static int parse_packet(sockent_t *se, /* {{{ */ WARNING("network plugin: parse_packet: Received truncated " "packet, try increasing `MaxPacketSize'"); - return (status); + return status; } /* }}} int parse_packet */ static void free_sockent_client(struct sockent_client *sec) /* {{{ */ @@ -1503,7 +1503,7 @@ static void free_sockent_client(struct sockent_client *sec) /* {{{ */ sec->fd = -1; } sfree(sec->addr); -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H sfree(sec->username); sfree(sec->password); if (sec->cypher != NULL) @@ -1521,7 +1521,7 @@ static void free_sockent_server(struct sockent_server *ses) /* {{{ */ } sfree(ses->fd); -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H sfree(ses->auth_file); fbh_destroy(ses->userdb); if (ses->cypher != NULL) @@ -1567,7 +1567,7 @@ static int network_set_ttl(const sockent_t *se, const struct addrinfo *ai) { assert(se->type == SOCKENT_TYPE_CLIENT); if ((network_config_ttl < 1) || (network_config_ttl > 255)) - return (-1); + return -1; if (ai->ai_family == AF_INET) { struct sockaddr_in *addr = (struct sockaddr_in *)ai->ai_addr; @@ -1583,7 +1583,7 @@ static int network_set_ttl(const sockent_t *se, const struct addrinfo *ai) { char errbuf[1024]; ERROR("network plugin: setsockopt (ipv4-ttl): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } else if (ai->ai_family == AF_INET6) { /* Useful example: @@ -1601,11 +1601,11 @@ static int network_set_ttl(const sockent_t *se, const struct addrinfo *ai) { char errbuf[1024]; ERROR("network plugin: setsockopt(ipv6-ttl): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } - return (0); + return 0; } /* int network_set_ttl */ static int network_set_interface(const sockent_t *se, @@ -1639,10 +1639,10 @@ static int network_set_interface(const sockent_t *se, char errbuf[1024]; ERROR("network plugin: setsockopt (ipv4-multicast-if): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } } else if (ai->ai_family == AF_INET6) { struct sockaddr_in6 *addr = (struct sockaddr_in6 *)ai->ai_addr; @@ -1653,10 +1653,10 @@ static int network_set_interface(const sockent_t *se, char errbuf[1024]; ERROR("network plugin: setsockopt (ipv6-multicast-if): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } } @@ -1667,7 +1667,7 @@ static int network_set_interface(const sockent_t *se, char interface_name[IFNAMSIZ]; if (if_indextoname(se->interface, interface_name) == NULL) - return (-1); + return -1; DEBUG("network plugin: Binding socket to interface %s", interface_name); @@ -1676,7 +1676,7 @@ static int network_set_interface(const sockent_t *se, char errbuf[1024]; ERROR("network plugin: setsockopt (bind-if): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* #endif HAVE_IF_INDEXTONAME && SO_BINDTODEVICE */ @@ -1692,7 +1692,7 @@ static int network_set_interface(const sockent_t *se, #endif } - return (0); + return 0; } /* }}} network_set_interface */ static int network_bind_socket(int fd, const struct addrinfo *ai, @@ -1709,7 +1709,7 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (reuseaddr): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } DEBUG("fd = %i; calling `bind'", fd); @@ -1717,7 +1717,7 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, if (bind(fd, ai->ai_addr, ai->ai_addrlen) == -1) { char errbuf[1024]; ERROR("bind: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (ai->ai_family == AF_INET) { @@ -1747,7 +1747,7 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (multicast-loop): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) == @@ -1755,10 +1755,10 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (add-membership): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } } else if (ai->ai_family == AF_INET6) { /* Useful example: @@ -1787,7 +1787,7 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (ipv6-multicast-loop): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (setsockopt(fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq, @@ -1795,10 +1795,10 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (ipv6-add-membership): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } } @@ -1811,7 +1811,7 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char interface_name[IFNAMSIZ]; if (if_indextoname(interface_idx, interface_name) == NULL) - return (-1); + return -1; DEBUG("fd = %i; Binding socket to interface %s", fd, interface_name); @@ -1820,12 +1820,12 @@ static int network_bind_socket(int fd, const struct addrinfo *ai, char errbuf[1024]; ERROR("network plugin: setsockopt (bind-if): %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } #endif /* HAVE_IF_INDEXTONAME && SO_BINDTODEVICE */ - return (0); + return 0; } /* int network_bind_socket */ /* Initialize a sockent structure. `type' must be either `SOCKENT_TYPE_CLIENT' @@ -1835,11 +1835,11 @@ static sockent_t *sockent_create(int type) /* {{{ */ sockent_t *se; if ((type != SOCKENT_TYPE_CLIENT) && (type != SOCKENT_TYPE_SERVER)) - return (NULL); + return NULL; se = calloc(1, sizeof(*se)); if (se == NULL) - return (NULL); + return NULL; se->type = type; se->node = NULL; @@ -1850,7 +1850,7 @@ static sockent_t *sockent_create(int type) /* {{{ */ if (type == SOCKENT_TYPE_SERVER) { se->data.server.fd = NULL; se->data.server.fd_num = 0; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H se->data.server.security_level = SECURITY_LEVEL_NONE; se->data.server.auth_file = NULL; se->data.server.userdb = NULL; @@ -1861,7 +1861,7 @@ static sockent_t *sockent_create(int type) /* {{{ */ se->data.client.addr = NULL; se->data.client.resolve_interval = 0; se->data.client.next_resolve_reconnect = 0; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H se->data.client.security_level = SECURITY_LEVEL_NONE; se->data.client.username = NULL; se->data.client.password = NULL; @@ -1869,18 +1869,18 @@ static sockent_t *sockent_create(int type) /* {{{ */ #endif } - return (se); + return se; } /* }}} sockent_t *sockent_create */ static int sockent_init_crypto(sockent_t *se) /* {{{ */ { -#if HAVE_LIBGCRYPT /* {{{ */ +#if HAVE_GCRYPT_H /* {{{ */ if (se->type == SOCKENT_TYPE_CLIENT) { if (se->data.client.security_level > SECURITY_LEVEL_NONE) { if (network_init_gcrypt() < 0) { ERROR("network plugin: Cannot configure client socket with " "security: Failed to initialize crypto library."); - return (-1); + return -1; } if ((se->data.client.username == NULL) || @@ -1888,7 +1888,7 @@ static int sockent_init_crypto(sockent_t *se) /* {{{ */ ERROR("network plugin: Client socket with " "security requested, but no " "credentials are configured."); - return (-1); + return -1; } gcry_md_hash_buffer(GCRY_MD_SHA256, se->data.client.password_hash, se->data.client.password, @@ -1900,26 +1900,26 @@ static int sockent_init_crypto(sockent_t *se) /* {{{ */ (se->data.server.auth_file == NULL)) { ERROR("network plugin: Server socket with security requested, " "but no \"AuthFile\" is configured."); - return (-1); + return -1; } if (se->data.server.auth_file != NULL) { if (network_init_gcrypt() < 0) { ERROR("network plugin: Cannot configure server socket with security: " "Failed to initialize crypto library."); - return (-1); + return -1; } se->data.server.userdb = fbh_create(se->data.server.auth_file); if (se->data.server.userdb == NULL) { ERROR("network plugin: Reading password file \"%s\" failed.", se->data.server.auth_file); - return (-1); + return -1; } } } -#endif /* }}} HAVE_LIBGCRYPT */ +#endif /* }}} HAVE_GCRYPT_H */ - return (0); + return 0; } /* }}} int sockent_init_crypto */ static int sockent_client_disconnect(sockent_t *se) /* {{{ */ @@ -1927,7 +1927,7 @@ static int sockent_client_disconnect(sockent_t *se) /* {{{ */ struct sockent_client *client; if ((se == NULL) || (se->type != SOCKENT_TYPE_CLIENT)) - return (EINVAL); + return EINVAL; client = &se->data.client; if (client->fd >= 0) /* connected */ @@ -1939,7 +1939,7 @@ static int sockent_client_disconnect(sockent_t *se) /* {{{ */ sfree(client->addr); client->addrlen = 0; - return (0); + return 0; } /* }}} int sockent_client_disconnect */ static int sockent_client_connect(sockent_t *se) /* {{{ */ @@ -1953,7 +1953,7 @@ static int sockent_client_connect(sockent_t *se) /* {{{ */ cdtime_t now; if ((se == NULL) || (se->type != SOCKENT_TYPE_CLIENT)) - return (EINVAL); + return EINVAL; client = &se->data.client; @@ -1967,7 +1967,7 @@ static int sockent_client_connect(sockent_t *se) /* {{{ */ } if (client->fd >= 0 && !reconnect) /* already connected and not stale*/ - return (0); + return 0; struct addrinfo ai_hints = {.ai_family = AF_UNSPEC, .ai_flags = AI_ADDRCONFIG, @@ -1982,7 +1982,7 @@ static int sockent_client_connect(sockent_t *se) /* {{{ */ LOG_ERR, &complaint, "network plugin: getaddrinfo (%s, %s) failed: %s", (se->node == NULL) ? "(null)" : se->node, (se->service == NULL) ? "(null)" : se->service, gai_strerror(status)); - return (-1); + return -1; } else { c_release(LOG_NOTICE, &complaint, "network plugin: Successfully resolved \"%s\".", se->node); @@ -2024,11 +2024,11 @@ static int sockent_client_connect(sockent_t *se) /* {{{ */ freeaddrinfo(ai_list); if (client->fd < 0) - return (-1); + return -1; if (client->resolve_interval > 0) client->next_resolve_reconnect = now + client->resolve_interval; - return (0); + return 0; } /* }}} int sockent_client_connect */ /* Open the file descriptors for a initialized sockent structure. */ @@ -2041,7 +2041,7 @@ static int sockent_server_listen(sockent_t *se) /* {{{ */ const char *service; if (se == NULL) - return (-1); + return -1; assert(se->data.server.fd == NULL); assert(se->data.server.fd_num == 0); @@ -2065,7 +2065,7 @@ static int sockent_server_listen(sockent_t *se) /* {{{ */ ERROR("network plugin: getaddrinfo (%s, %s) failed: %s", (se->node == NULL) ? "(null)" : se->node, (se->service == NULL) ? "(null)" : se->service, gai_strerror(status)); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -2103,8 +2103,8 @@ static int sockent_server_listen(sockent_t *se) /* {{{ */ freeaddrinfo(ai_list); if (se->data.server.fd_num == 0) - return (-1); - return (0); + return -1; + return 0; } /* }}} int sockent_server_listen */ /* Add a sockent to the global list of sockets */ @@ -2113,7 +2113,7 @@ static int sockent_add(sockent_t *se) /* {{{ */ sockent_t *last_ptr; if (se == NULL) - return (-1); + return -1; if (se->type == SOCKENT_TYPE_SERVER) { struct pollfd *tmp; @@ -2122,7 +2122,7 @@ static int sockent_add(sockent_t *se) /* {{{ */ sizeof(*tmp) * (listen_sockets_num + se->data.server.fd_num)); if (tmp == NULL) { ERROR("network plugin: realloc failed."); - return (-1); + return -1; } listen_sockets_pollfd = tmp; tmp = listen_sockets_pollfd + listen_sockets_num; @@ -2138,14 +2138,14 @@ static int sockent_add(sockent_t *se) /* {{{ */ if (listen_sockets == NULL) { listen_sockets = se; - return (0); + return 0; } last_ptr = listen_sockets; } else /* if (se->type == SOCKENT_TYPE_CLIENT) */ { if (sending_sockets == NULL) { sending_sockets = se; - return (0); + return 0; } last_ptr = sending_sockets; } @@ -2154,7 +2154,7 @@ static int sockent_add(sockent_t *se) /* {{{ */ last_ptr = last_ptr->next; last_ptr->next = se; - return (0); + return 0; } /* }}} int sockent_add */ static void *dispatch_thread(void __attribute__((unused)) * arg) /* {{{ */ @@ -2210,7 +2210,7 @@ static void *dispatch_thread(void __attribute__((unused)) * arg) /* {{{ */ sfree(ent); } /* while (42) */ - return (NULL); + return NULL; } /* }}} void *dispatch_thread */ static int network_receive(void) /* {{{ */ @@ -2335,11 +2335,11 @@ static int network_receive(void) /* {{{ */ pthread_mutex_unlock(&receive_list_lock); } - return (status); + return status; } /* }}} int network_receive */ static void *receive_thread(void __attribute__((unused)) * arg) { - return (network_receive() ? (void *)1 : (void *)0); + return network_receive() ? (void *)1 : (void *)0; } /* void *receive_thread */ static void network_init_buffer(void) { @@ -2379,7 +2379,7 @@ static void network_send_buffer_plain(sockent_t *se, /* {{{ */ } /* while (42) */ } /* }}} void network_send_buffer_plain */ -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H #define BUFFER_ADD(p, s) \ do { \ memcpy(buffer + buffer_offset, (p), (s)); \ @@ -2529,20 +2529,20 @@ static void network_send_buffer_encrypted(sockent_t *se, /* {{{ */ network_send_buffer_plain(se, buffer, buffer_size); } /* }}} void network_send_buffer_encrypted */ #undef BUFFER_ADD -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ static void network_send_buffer(char *buffer, size_t buffer_len) /* {{{ */ { DEBUG("network plugin: network_send_buffer: buffer_len = %zu", buffer_len); for (sockent_t *se = sending_sockets; se != NULL; se = se->next) { -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if (se->data.client.security_level == SECURITY_LEVEL_ENCRYPT) network_send_buffer_encrypted(se, buffer, buffer_len); else if (se->data.client.security_level == SECURITY_LEVEL_SIGN) network_send_buffer_signed(se, buffer, buffer_len); else /* if (se->data.client.security_level == SECURITY_LEVEL_NONE) */ -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ network_send_buffer_plain(se, buffer, buffer_len); } /* for (sending_sockets) */ } /* }}} void network_send_buffer */ @@ -2555,28 +2555,28 @@ static int add_to_buffer(char *buffer, size_t buffer_size, /* {{{ */ if (strcmp(vl_def->host, vl->host) != 0) { if (write_part_string(&buffer, &buffer_size, TYPE_HOST, vl->host, strlen(vl->host)) != 0) - return (-1); + return -1; sstrncpy(vl_def->host, vl->host, sizeof(vl_def->host)); } if (vl_def->time != vl->time) { if (write_part_number(&buffer, &buffer_size, TYPE_TIME_HR, (uint64_t)vl->time)) - return (-1); + return -1; vl_def->time = vl->time; } if (vl_def->interval != vl->interval) { if (write_part_number(&buffer, &buffer_size, TYPE_INTERVAL_HR, (uint64_t)vl->interval)) - return (-1); + return -1; vl_def->interval = vl->interval; } if (strcmp(vl_def->plugin, vl->plugin) != 0) { if (write_part_string(&buffer, &buffer_size, TYPE_PLUGIN, vl->plugin, strlen(vl->plugin)) != 0) - return (-1); + return -1; sstrncpy(vl_def->plugin, vl->plugin, sizeof(vl_def->plugin)); } @@ -2584,7 +2584,7 @@ static int add_to_buffer(char *buffer, size_t buffer_size, /* {{{ */ if (write_part_string(&buffer, &buffer_size, TYPE_PLUGIN_INSTANCE, vl->plugin_instance, strlen(vl->plugin_instance)) != 0) - return (-1); + return -1; sstrncpy(vl_def->plugin_instance, vl->plugin_instance, sizeof(vl_def->plugin_instance)); } @@ -2592,22 +2592,22 @@ static int add_to_buffer(char *buffer, size_t buffer_size, /* {{{ */ if (strcmp(vl_def->type, vl->type) != 0) { if (write_part_string(&buffer, &buffer_size, TYPE_TYPE, vl->type, strlen(vl->type)) != 0) - return (-1); + return -1; sstrncpy(vl_def->type, ds->type, sizeof(vl_def->type)); } if (strcmp(vl_def->type_instance, vl->type_instance) != 0) { if (write_part_string(&buffer, &buffer_size, TYPE_TYPE_INSTANCE, vl->type_instance, strlen(vl->type_instance)) != 0) - return (-1); + return -1; sstrncpy(vl_def->type_instance, vl->type_instance, sizeof(vl_def->type_instance)); } if (write_part_values(&buffer, &buffer_size, ds, vl) != 0) - return (-1); + return -1; - return (buffer - buffer_orig); + return buffer - buffer_orig; } /* }}} int add_to_buffer */ static void flush_buffer(void) { @@ -2645,7 +2645,7 @@ static int network_write(const data_set_t *ds, const value_list_t *vl, pthread_mutex_lock(&stats_lock); stats_values_not_sent++; pthread_mutex_unlock(&stats_lock); - return (0); + return 0; } uc_meta_data_add_unsigned_int(vl, "network:time_sent", (uint64_t)vl->time); @@ -2688,7 +2688,7 @@ static int network_write(const data_set_t *ds, const value_list_t *vl, pthread_mutex_unlock(&send_buffer_lock); - return ((status < 0) ? -1 : 0); + return (status < 0) ? -1 : 0; } /* int network_write */ static int network_config_set_ttl(const oconfig_item_t *ci) /* {{{ */ @@ -2696,15 +2696,15 @@ static int network_config_set_ttl(const oconfig_item_t *ci) /* {{{ */ int tmp = 0; if (cf_util_get_int(ci, &tmp) != 0) - return (-1); + return -1; else if ((tmp > 0) && (tmp <= 255)) network_config_ttl = tmp; else { WARNING("network plugin: The `TimeToLive' must be between 1 and 255."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int network_config_set_ttl */ static int network_config_set_interface(const oconfig_item_t *ci, /* {{{ */ @@ -2712,10 +2712,10 @@ static int network_config_set_interface(const oconfig_item_t *ci, /* {{{ */ char if_name[256]; if (cf_util_get_string_buffer(ci, if_name, sizeof(if_name)) != 0) - return (-1); + return -1; *interface = if_nametoindex(if_name); - return (0); + return 0; } /* }}} int network_config_set_interface */ static int network_config_set_buffer_size(const oconfig_item_t *ci) /* {{{ */ @@ -2723,26 +2723,26 @@ static int network_config_set_buffer_size(const oconfig_item_t *ci) /* {{{ */ int tmp = 0; if (cf_util_get_int(ci, &tmp) != 0) - return (-1); + return -1; else if ((tmp >= 1024) && (tmp <= 65535)) network_config_packet_size = tmp; else { WARNING( "network plugin: The `MaxPacketSize' must be between 1024 and 65535."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int network_config_set_buffer_size */ -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H static int network_config_set_security_level(oconfig_item_t *ci, /* {{{ */ int *retval) { char *str; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("network plugin: The `SecurityLevel' config option needs exactly " "one string argument."); - return (-1); + return -1; } str = ci->values[0].value.string; @@ -2754,12 +2754,12 @@ static int network_config_set_security_level(oconfig_item_t *ci, /* {{{ */ *retval = SECURITY_LEVEL_NONE; else { WARNING("network plugin: Unknown security level: %s.", str); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int network_config_set_security_level */ -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ static int network_config_add_listen(const oconfig_item_t *ci) /* {{{ */ { @@ -2772,13 +2772,13 @@ static int network_config_add_listen(const oconfig_item_t *ci) /* {{{ */ ERROR("network plugin: The `%s' config option needs " "one or two string arguments.", ci->key); - return (-1); + return -1; } se = sockent_create(SOCKENT_TYPE_SERVER); if (se == NULL) { ERROR("network plugin: sockent_create failed."); - return (-1); + return -1; } se->node = strdup(ci->values[0].value.string); @@ -2788,13 +2788,13 @@ static int network_config_add_listen(const oconfig_item_t *ci) /* {{{ */ for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if (strcasecmp("AuthFile", child->key) == 0) cf_util_get_string(child, &se->data.server.auth_file); else if (strcasecmp("SecurityLevel", child->key) == 0) network_config_set_security_level(child, &se->data.server.security_level); else -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ if (strcasecmp("Interface", child->key) == 0) network_config_set_interface(child, &se->interface); else { @@ -2802,23 +2802,23 @@ static int network_config_add_listen(const oconfig_item_t *ci) /* {{{ */ } } -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if ((se->data.server.security_level > SECURITY_LEVEL_NONE) && (se->data.server.auth_file == NULL)) { ERROR("network plugin: A security level higher than `none' was " "requested, but no AuthFile option was given. Cowardly refusing to " "open this socket!"); sockent_destroy(se); - return (-1); + return -1; } -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ status = sockent_init_crypto(se); if (status != 0) { ERROR("network plugin: network_config_add_listen: sockent_init_crypto() " "failed."); sockent_destroy(se); - return (-1); + return -1; } status = sockent_server_listen(se); @@ -2826,17 +2826,17 @@ static int network_config_add_listen(const oconfig_item_t *ci) /* {{{ */ ERROR("network plugin: network_config_add_listen: sockent_server_listen " "failed."); sockent_destroy(se); - return (-1); + return -1; } status = sockent_add(se); if (status != 0) { ERROR("network plugin: network_config_add_listen: sockent_add failed."); sockent_destroy(se); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int network_config_add_listen */ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ @@ -2850,13 +2850,13 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ ERROR("network plugin: The `%s' config option needs " "one or two string arguments.", ci->key); - return (-1); + return -1; } se = sockent_create(SOCKENT_TYPE_CLIENT); if (se == NULL) { ERROR("network plugin: sockent_create failed."); - return (-1); + return -1; } se->node = strdup(ci->values[0].value.string); @@ -2866,7 +2866,7 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if (strcasecmp("Username", child->key) == 0) cf_util_get_string(child, &se->data.client.username); else if (strcasecmp("Password", child->key) == 0) @@ -2874,7 +2874,7 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ else if (strcasecmp("SecurityLevel", child->key) == 0) network_config_set_security_level(child, &se->data.client.security_level); else -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ if (strcasecmp("Interface", child->key) == 0) network_config_set_interface(child, &se->interface); else if (strcasecmp("ResolveInterval", child->key) == 0) @@ -2884,7 +2884,7 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ } } -#if HAVE_LIBGCRYPT +#if HAVE_GCRYPT_H if ((se->data.client.security_level > SECURITY_LEVEL_NONE) && ((se->data.client.username == NULL) || (se->data.client.password == NULL))) { @@ -2892,16 +2892,16 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ "requested, but no Username or Password option was given. " "Cowardly refusing to open this socket!"); sockent_destroy(se); - return (-1); + return -1; } -#endif /* HAVE_LIBGCRYPT */ +#endif /* HAVE_GCRYPT_H */ status = sockent_init_crypto(se); if (status != 0) { ERROR("network plugin: network_config_add_server: sockent_init_crypto() " "failed."); sockent_destroy(se); - return (-1); + return -1; } /* No call to sockent_client_connect() here -- it is called from @@ -2911,10 +2911,10 @@ static int network_config_add_server(const oconfig_item_t *ci) /* {{{ */ if (status != 0) { ERROR("network plugin: network_config_add_server: sockent_add failed."); sockent_destroy(se); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int network_config_add_server */ static int network_config(oconfig_item_t *ci) /* {{{ */ @@ -2946,7 +2946,7 @@ static int network_config(oconfig_item_t *ci) /* {{{ */ } } - return (0); + return 0; } /* }}} int network_config */ static int network_notification(const notification_t *n, @@ -2958,63 +2958,63 @@ static int network_notification(const notification_t *n, int status; if (!check_send_notify_okay(n)) - return (0); + return 0; memset(buffer, 0, sizeof(buffer)); status = write_part_number(&buffer_ptr, &buffer_free, TYPE_TIME_HR, (uint64_t)n->time); if (status != 0) - return (-1); + return -1; status = write_part_number(&buffer_ptr, &buffer_free, TYPE_SEVERITY, (uint64_t)n->severity); if (status != 0) - return (-1); + return -1; if (strlen(n->host) > 0) { status = write_part_string(&buffer_ptr, &buffer_free, TYPE_HOST, n->host, strlen(n->host)); if (status != 0) - return (-1); + return -1; } if (strlen(n->plugin) > 0) { status = write_part_string(&buffer_ptr, &buffer_free, TYPE_PLUGIN, n->plugin, strlen(n->plugin)); if (status != 0) - return (-1); + return -1; } if (strlen(n->plugin_instance) > 0) { status = write_part_string(&buffer_ptr, &buffer_free, TYPE_PLUGIN_INSTANCE, n->plugin_instance, strlen(n->plugin_instance)); if (status != 0) - return (-1); + return -1; } if (strlen(n->type) > 0) { status = write_part_string(&buffer_ptr, &buffer_free, TYPE_TYPE, n->type, strlen(n->type)); if (status != 0) - return (-1); + return -1; } if (strlen(n->type_instance) > 0) { status = write_part_string(&buffer_ptr, &buffer_free, TYPE_TYPE_INSTANCE, n->type_instance, strlen(n->type_instance)); if (status != 0) - return (-1); + return -1; } status = write_part_string(&buffer_ptr, &buffer_free, TYPE_MESSAGE, n->message, strlen(n->message)); if (status != 0) - return (-1); + return -1; network_send_buffer(buffer, sizeof(buffer) - buffer_free); - return (0); + return 0; } /* int network_notification */ static int network_shutdown(void) { @@ -3055,7 +3055,7 @@ static int network_shutdown(void) { plugin_unregister_write("network"); plugin_unregister_shutdown("network"); - return (0); + return 0; } /* int network_shutdown */ static int network_stats_read(void) /* {{{ */ @@ -3126,7 +3126,7 @@ static int network_stats_read(void) /* {{{ */ vl.type_instance[0] = 0; plugin_dispatch_values(&vl); - return (0); + return 0; } /* }}} int network_stats_read */ static int network_init(void) { @@ -3135,7 +3135,7 @@ static int network_init(void) { /* Check if we were already initialized. If so, just return - there's * nothing more to do (for now, that is). */ if (have_init) - return (0); + return 0; have_init = 1; if (network_config_stats) @@ -3146,7 +3146,7 @@ static int network_init(void) { send_buffer = malloc(network_config_packet_size); if (send_buffer == NULL) { ERROR("network plugin: malloc failed."); - return (-1); + return -1; } network_init_buffer(); @@ -3161,7 +3161,7 @@ static int network_init(void) { /* If no threads need to be started, return here. */ if ((listen_sockets_num == 0) || ((dispatch_thread_running != 0) && (receive_thread_running != 0))) - return (0); + return 0; if (dispatch_thread_running == 0) { int status; @@ -3191,7 +3191,7 @@ static int network_init(void) { } } - return (0); + return 0; } /* int network_init */ /* @@ -3211,14 +3211,14 @@ static int network_flush(cdtime_t timeout, cdtime_t now = cdtime(); if ((send_buffer_last_update + timeout) > now) { pthread_mutex_unlock(&send_buffer_lock); - return (0); + return 0; } } flush_buffer(); } pthread_mutex_unlock(&send_buffer_lock); - return (0); + return 0; } /* int network_flush */ void module_register(void) { @@ -3227,5 +3227,3 @@ void module_register(void) { plugin_register_flush("network", network_flush, /* user_data = */ NULL); } /* void module_register */ - -/* vim: set fdm=marker : */ diff --git a/src/nfs.c b/src/nfs.c index 74c6cbc3..62906133 100644 --- a/src/nfs.c +++ b/src/nfs.c @@ -296,7 +296,7 @@ static kstat_t *nfs4_ksp_server; #endif #if KERNEL_LINUX -static int nfs_init(void) { return (0); } +static int nfs_init(void) { return 0; } /* #endif KERNEL_LINUX */ #elif HAVE_LIBKSTAT @@ -309,7 +309,7 @@ static int nfs_init(void) { nfs4_ksp_server = NULL; if (kc == NULL) - return (-1); + return -1; for (kstat_t *ksp_chain = kc->kc_chain; ksp_chain != NULL; ksp_chain = ksp_chain->ks_next) { @@ -329,7 +329,7 @@ static int nfs_init(void) { nfs4_ksp_client = ksp_chain; } - return (0); + return 0; } /* int nfs_init */ #endif @@ -374,12 +374,12 @@ static int nfs_submit_fields_safe(int nfs_version, const char *instance, WARNING("nfs plugin: Wrong number of fields for " "NFSv%i %s statistics. Expected %zu, got %zu.", nfs_version, instance, proc_names_num, fields_num); - return (EINVAL); + return EINVAL; } nfs_submit_fields(nfs_version, instance, fields, fields_num, proc_names); - return (0); + return 0; } static int nfs_submit_nfs4_server(const char *instance, char **fields, @@ -398,7 +398,7 @@ static int nfs_submit_nfs4_server(const char *instance, char **fields, fields_num = NFS4_SERVER_MAX_PROC; suppress_warning = 1; } else { - return (EINVAL); + return EINVAL; } } @@ -412,7 +412,7 @@ static int nfs_submit_nfs4_server(const char *instance, char **fields, nfs4_server41_procedures_names); } - return (0); + return 0; } static int nfs_submit_nfs4_client(const char *instance, char **fields, @@ -462,7 +462,7 @@ static int nfs_submit_nfs4_client(const char *instance, char **fields, suppress_warning = 1; } else { - return (EINVAL); + return EINVAL; } } @@ -477,7 +477,7 @@ static int nfs_submit_nfs4_client(const char *instance, char **fields, nfs4_client41_procedures_names); } - return (0); + return 0; } static void nfs_read_linux(FILE *fh, const char *inst) { @@ -521,7 +521,7 @@ static int nfs_read_kstat(kstat_t *ksp, int nfs_version, const char *inst, value_t values[proc_names_num]; if (ksp == NULL) - return (EINVAL); + return EINVAL; ssnprintf(plugin_instance, sizeof(plugin_instance), "v%i%s", nfs_version, inst); @@ -537,7 +537,7 @@ static int nfs_read_kstat(kstat_t *ksp, int nfs_version, const char *inst, } nfs_procedures_submit(plugin_instance, proc_names, values, proc_names_num); - return (0); + return 0; } #endif @@ -555,7 +555,7 @@ static int nfs_read(void) { fclose(fh); } - return (0); + return 0; } /* #endif KERNEL_LINUX */ @@ -574,7 +574,7 @@ static int nfs_read(void) { nfs_read_kstat(nfs4_ksp_server, /* version = */ 4, "server", nfs4_procedures_names, nfs4_procedures_names_num); - return (0); + return 0; } #endif /* HAVE_LIBKSTAT */ diff --git a/src/nginx.c b/src/nginx.c index ffc545c4..0f1da0ae 100644 --- a/src/nginx.c +++ b/src/nginx.c @@ -62,13 +62,13 @@ static size_t nginx_curl_callback(void *buf, size_t size, size_t nmemb, } if (len == 0) - return (len); + return len; memcpy(&nginx_buffer[nginx_buffer_len], buf, len); nginx_buffer_len += len; nginx_buffer[nginx_buffer_len] = 0; - return (len); + return len; } static int config_set(char **var, const char *value) { @@ -78,28 +78,28 @@ static int config_set(char **var, const char *value) { } if ((*var = strdup(value)) == NULL) - return (1); + return 1; else - return (0); + return 0; } static int config(const char *key, const char *value) { if (strcasecmp(key, "url") == 0) - return (config_set(&url, value)); + return config_set(&url, value); else if (strcasecmp(key, "user") == 0) - return (config_set(&user, value)); + return config_set(&user, value); else if (strcasecmp(key, "password") == 0) - return (config_set(&pass, value)); + return config_set(&pass, value); else if (strcasecmp(key, "verifypeer") == 0) - return (config_set(&verify_peer, value)); + return config_set(&verify_peer, value); else if (strcasecmp(key, "verifyhost") == 0) - return (config_set(&verify_host, value)); + return config_set(&verify_host, value); else if (strcasecmp(key, "cacert") == 0) - return (config_set(&cacert, value)); + return config_set(&cacert, value); else if (strcasecmp(key, "timeout") == 0) - return (config_set(&timeout, value)); + return config_set(&timeout, value); else - return (-1); + return -1; } /* int config */ static int init(void) { @@ -108,7 +108,7 @@ static int init(void) { if ((curl = curl_easy_init()) == NULL) { ERROR("nginx plugin: curl_easy_init failed."); - return (-1); + return -1; } curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); @@ -126,7 +126,7 @@ static int init(void) { pass == NULL ? "" : pass); if ((status < 0) || ((size_t)status >= sizeof(credentials))) { ERROR("nginx plugin: Credentials would have been truncated."); - return (-1); + return -1; } curl_easy_setopt(curl, CURLOPT_USERPWD, credentials); @@ -165,7 +165,7 @@ static int init(void) { } #endif - return (0); + return 0; } /* void init */ static void submit(const char *type, const char *inst, long long value) { @@ -202,14 +202,14 @@ static int nginx_read(void) { int fields_num; if (curl == NULL) - return (-1); + return -1; if (url == NULL) - return (-1); + return -1; nginx_buffer_len = 0; if (curl_easy_perform(curl) != CURLE_OK) { WARNING("nginx plugin: curl_easy_perform failed: %s", nginx_curl_error); - return (-1); + return -1; } ptr = nginx_buffer; @@ -259,7 +259,7 @@ static int nginx_read(void) { nginx_buffer_len = 0; - return (0); + return 0; } /* int nginx_read */ void module_register(void) { @@ -267,7 +267,3 @@ void module_register(void) { plugin_register_init("nginx", init); plugin_register_read("nginx", nginx_read); } /* void module_register */ - -/* - * vim: set shiftwidth=2 softtabstop=2 tabstop=8 : - */ diff --git a/src/notify_desktop.c b/src/notify_desktop.c index 48404411..d167fbfe 100644 --- a/src/notify_desktop.c +++ b/src/notify_desktop.c @@ -166,5 +166,3 @@ void module_register(void) { plugin_register_init("notify_desktop", c_notify_init); return; } /* module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/notify_email.c b/src/notify_email.c index f42e66c6..c1ce2f8b 100644 --- a/src/notify_email.c +++ b/src/notify_email.c @@ -115,7 +115,7 @@ static int notify_email_init(void) { if (session == NULL) { pthread_mutex_unlock(&session_lock); ERROR("notify_email plugin: cannot create SMTP session"); - return (-1); + return -1; } smtp_set_monitorcb(session, monitor_cb, NULL, 1); @@ -131,11 +131,11 @@ static int notify_email_init(void) { if (!smtp_auth_set_context(session, authctx)) { pthread_mutex_unlock(&session_lock); ERROR("notify_email plugin: cannot set SMTP auth context"); - return (-1); + return -1; } pthread_mutex_unlock(&session_lock); - return (0); + return 0; } /* int notify_email_init */ static int notify_email_shutdown(void) { @@ -152,7 +152,7 @@ static int notify_email_shutdown(void) { auth_client_exit(); pthread_mutex_unlock(&session_lock); - return (0); + return 0; } /* int notify_email_shutdown */ static int notify_email_config(const char *key, const char *value) { @@ -162,14 +162,14 @@ static int notify_email_config(const char *key, const char *value) { tmp = realloc(recipients, (recipients_len + 1) * sizeof(char *)); if (tmp == NULL) { ERROR("notify_email: realloc failed."); - return (-1); + return -1; } recipients = tmp; recipients[recipients_len] = strdup(value); if (recipients[recipients_len] == NULL) { ERROR("notify_email: strdup failed."); - return (-1); + return -1; } recipients_len++; } else if (0 == strcasecmp(key, "SMTPServer")) { @@ -179,7 +179,7 @@ static int notify_email_config(const char *key, const char *value) { int port_tmp = atoi(value); if (port_tmp < 1 || port_tmp > 65535) { WARNING("notify_email plugin: Invalid SMTP port: %i", port_tmp); - return (1); + return 1; } smtp_port = port_tmp; } else if (0 == strcasecmp(key, "SMTPUser")) { @@ -246,13 +246,13 @@ static int notify_email_notification(const notification_t *n, if (session == NULL) { /* Initialization failed or we're in the process of shutting down. */ pthread_mutex_unlock(&session_lock); - return (-1); + return -1; } if (!(message = smtp_add_message(session))) { pthread_mutex_unlock(&session_lock); ERROR("notify_email plugin: cannot set SMTP message"); - return (-1); + return -1; } smtp_set_reverse_path(message, email_from); smtp_set_header(message, "To", NULL, NULL); @@ -266,7 +266,7 @@ static int notify_email_notification(const notification_t *n, ERROR("notify_email plugin: SMTP server problem: %s", smtp_strerror(smtp_errno(), buf, sizeof buf)); pthread_mutex_unlock(&session_lock); - return (-1); + return -1; } else { #if COLLECT_DEBUG const smtp_status_t *status; @@ -279,7 +279,7 @@ static int notify_email_notification(const notification_t *n, } pthread_mutex_unlock(&session_lock); - return (0); + return 0; } /* int notify_email_notification */ void module_register(void) { @@ -290,5 +290,3 @@ void module_register(void) { plugin_register_notification("notify_email", notify_email_notification, /* user_data = */ NULL); } /* void module_register (void) */ - -/* vim: set sw=2 sts=2 ts=8 et : */ diff --git a/src/notify_nagios.c b/src/notify_nagios.c index 13516915..c95f7cb9 100644 --- a/src/notify_nagios.c +++ b/src/notify_nagios.c @@ -153,5 +153,3 @@ void module_register(void) { plugin_register_complex_config("notify_nagios", nagios_config); plugin_register_notification("notify_nagios", nagios_notify, NULL); } /* void module_register (void) */ - -/* vim: set sw=2 sts=2 ts=8 et : */ diff --git a/src/ntpd.c b/src/ntpd.c index 1dc1857b..68ac3a75 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -32,9 +32,6 @@ #include "common.h" #include "plugin.h" -#if HAVE_STDINT_H -#include -#endif #if HAVE_NETDB_H #include #endif @@ -266,7 +263,7 @@ static int ntpd_config(const char *key, const char *value) { if (ntpd_host != NULL) free(ntpd_host); if ((ntpd_host = strdup(value)) == NULL) - return (1); + return 1; } else if (strcasecmp(key, "Port") == 0) { int port = (int)(atof(value)); if ((port > 0) && (port <= 65535)) @@ -284,10 +281,10 @@ static int ntpd_config(const char *key, const char *value) { else include_unit_id = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } static void ntpd_submit(const char *type, const char *type_inst, @@ -322,7 +319,7 @@ static int ntpd_connect(void) { int status; if (sock_descr >= 0) - return (sock_descr); + return sock_descr; DEBUG("Opening a new socket"); @@ -344,7 +341,7 @@ static int ntpd_connect(void) { ERROR("ntpd plugin: getaddrinfo (%s, %s): %s", host, port, (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (-1); + return -1; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -370,7 +367,7 @@ static int ntpd_connect(void) { ERROR("ntpd plugin: Unable to connect to server."); } - return (sock_descr); + return sock_descr; } /* For a description of the arguments see `ntpd_do_query' below. */ @@ -399,7 +396,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, ssize_t pkt_padding; /* Padding in this packet */ if ((sd = ntpd_connect()) < 0) - return (-1); + return -1; items = NULL; items_num = 0; @@ -415,7 +412,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, char errbuf[1024]; ERROR("ntpd plugin: gettimeofday failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } time_end.tv_sec++; /* wait for a most one second */ @@ -427,7 +424,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, char errbuf[1024]; ERROR("ntpd plugin: gettimeofday failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (timeval_cmp(time_end, time_now, &time_left) <= 0) @@ -453,7 +450,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, char errbuf[1024]; ERROR("ntpd plugin: poll failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (status == 0) /* timeout */ @@ -474,7 +471,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, DEBUG("Closing socket #%i", sd); close(sd); sock_descr = sd = -1; - return (-1); + return -1; } DEBUG("recv'd %i bytes", status); @@ -516,7 +513,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, if (INFO_ERR(res.err_nitems) != 0) { ERROR("ntpd plugin: Received error code %i", (int)INFO_ERR(res.err_nitems)); - return ((int)INFO_ERR(res.err_nitems)); + return (int)INFO_ERR(res.err_nitems); } /* extract number of items in this packet and the size of these items */ @@ -635,7 +632,7 @@ static int ntpd_receive_response(int *res_items, int *res_size, char **res_data, done = 1; } /* while (done == 0) */ - return (0); + return 0; } /* int ntpd_receive_response */ /* For a description of the arguments see `ntpd_do_query' below. */ @@ -650,7 +647,7 @@ static int ntpd_send_request(int req_code, int req_items, int req_size, assert(req_size >= 0); if ((sd = ntpd_connect()) < 0) - return (-1); + return -1; req.rm_vn_mode = RM_VN_MODE(0, 0, 0); req.auth_seq = AUTH_SEQ(0, 0); @@ -676,10 +673,10 @@ static int ntpd_send_request(int req_code, int req_items, int req_size, DEBUG("`swrite' failed. Closing socket #%i", sd); close(sd); sock_descr = sd = -1; - return (status); + return status; } - return (0); + return 0; } /* @@ -704,10 +701,10 @@ static int ntpd_do_query(int req_code, int req_items, int req_size, status = ntpd_send_request(req_code, req_items, req_size, req_data); if (status != 0) - return (status); + return status; status = ntpd_receive_response(res_items, res_size, res_data, res_item_size); - return (status); + return status; } static double ntpd_read_fp(int32_t val_int) { @@ -716,7 +713,7 @@ static double ntpd_read_fp(int32_t val_int) { val_int = ntohl(val_int); val_double = ((double)val_int) / FP_FRAC; - return (val_double); + return val_double; } static uint32_t @@ -724,7 +721,7 @@ ntpd_get_refclock_id(struct info_peer_summary const *peer_info) { uint32_t addr = ntohl(peer_info->srcadr); uint32_t refclock_id = (addr >> 8) & 0x00FF; - return (refclock_id); + return refclock_id; } static int ntpd_get_name_from_address(char *buffer, size_t buffer_size, @@ -770,10 +767,10 @@ static int ntpd_get_name_from_address(char *buffer, size_t buffer_size, ERROR("ntpd plugin: getnameinfo failed: %s", (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (-1); + return -1; } - return (0); + return 0; } /* ntpd_get_name_from_address */ static int ntpd_get_name_refclock(char *buffer, size_t buffer_size, @@ -782,8 +779,7 @@ static int ntpd_get_name_refclock(char *buffer, size_t buffer_size, uint32_t unit_id = ntohl(peer_info->srcadr) & 0x00FF; if (((size_t)refclock_id) >= refclock_names_num) - return (ntpd_get_name_from_address(buffer, buffer_size, peer_info, - /* do_reverse_lookup = */ 0)); + return ntpd_get_name_from_address(buffer, buffer_size, peer_info, 0); if (include_unit_id) ssnprintf(buffer, buffer_size, "%s-%" PRIu32, refclock_names[refclock_id], @@ -791,7 +787,7 @@ static int ntpd_get_name_refclock(char *buffer, size_t buffer_size, else sstrncpy(buffer, refclock_names[refclock_id], buffer_size); - return (0); + return 0; } /* int ntpd_get_name_refclock */ static int ntpd_get_name(char *buffer, size_t buffer_size, @@ -799,10 +795,10 @@ static int ntpd_get_name(char *buffer, size_t buffer_size, uint32_t addr = ntohl(peer_info->srcadr); if (!peer_info->v6_flag && ((addr & REFCLOCK_MASK) == REFCLOCK_ADDR)) - return (ntpd_get_name_refclock(buffer, buffer_size, peer_info)); + return ntpd_get_name_refclock(buffer, buffer_size, peer_info); else - return (ntpd_get_name_from_address(buffer, buffer_size, peer_info, - do_reverse_lookups)); + return ntpd_get_name_from_address(buffer, buffer_size, peer_info, + do_reverse_lookups); } /* int ntpd_addr_to_name */ static int ntpd_read(void) { @@ -836,12 +832,12 @@ static int ntpd_read(void) { if (status != 0) { ERROR("ntpd plugin: ntpd_do_query (REQ_GET_KERNEL) failed with status %i", status); - return (status); + return status; } else if ((ik == NULL) || (ik_num == 0) || (ik_size == 0)) { ERROR("ntpd plugin: ntpd_do_query returned unexpected data. " "(ik = %p; ik_num = %i; ik_size = %i)", (void *)ik, ik_num, ik_size); - return (-1); + return -1; } if (ntohs(ik->status) & STA_NANO) { @@ -875,12 +871,12 @@ static int ntpd_read(void) { ERROR( "ntpd plugin: ntpd_do_query (REQ_PEER_LIST_SUM) failed with status %i", status); - return (status); + return status; } else if ((ps == NULL) || (ps_num == 0) || (ps_size == 0)) { ERROR("ntpd plugin: ntpd_do_query returned unexpected data. " "(ps = %p; ps_num = %i; ps_size = %i)", (void *)ps, ps_num, ps_size); - return (-1); + return -1; } for (int i = 0; i < ps_num; i++) { @@ -929,7 +925,7 @@ static int ntpd_read(void) { free(ps); ps = NULL; - return (0); + return 0; } /* int ntpd_read */ void module_register(void) { diff --git a/src/numa.c b/src/numa.c index 049daeee..6ef3f090 100644 --- a/src/numa.c +++ b/src/numa.c @@ -69,7 +69,7 @@ static int numa_read_node(int node) /* {{{ */ char errbuf[1024]; ERROR("numa plugin: Reading node %i failed: open(%s): %s", node, path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } success = 0; @@ -95,7 +95,7 @@ static int numa_read_node(int node) /* {{{ */ } fclose(fh); - return (success ? 0 : -1); + return success ? 0 : -1; } /* }}} int numa_read_node */ static int numa_read(void) /* {{{ */ @@ -106,7 +106,7 @@ static int numa_read(void) /* {{{ */ if (max_node < 0) { WARNING("numa plugin: No NUMA nodes were detected."); - return (-1); + return -1; } success = 0; @@ -116,7 +116,7 @@ static int numa_read(void) /* {{{ */ success++; } - return (success ? 0 : -1); + return success ? 0 : -1; } /* }}} int numa_read */ static int numa_init(void) /* {{{ */ @@ -140,17 +140,15 @@ static int numa_init(void) /* {{{ */ char errbuf[1024]; ERROR("numa plugin: stat(%s) failed: %s", path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } DEBUG("numa plugin: Found %i nodes.", max_node + 1); - return (0); + return 0; } /* }}} int numa_init */ void module_register(void) { plugin_register_init("numa", numa_init); plugin_register_read("numa", numa_read); } /* void module_register */ - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/nut.c b/src/nut.c index d40e0951..2173af9b 100644 --- a/src/nut.c +++ b/src/nut.c @@ -54,8 +54,11 @@ static nut_ups_t *upslist_head = NULL; static pthread_mutex_t read_lock = PTHREAD_MUTEX_INITIALIZER; static int read_busy = 0; -static const char *config_keys[] = {"UPS"}; +static const char *config_keys[] = {"UPS", "FORCESSL", "VERIFYPEER", "CAPATH"}; static int config_keys_num = STATIC_ARRAY_SIZE(config_keys); +static int force_ssl = 0; // Initialized to default of 0 (false) +static int verify_peer = 0; // Initialized to default of 0 (false) +static char *ca_path = NULL; static void free_nut_ups_t(nut_ups_t *ups) { if (ups->conn != NULL) { @@ -76,14 +79,14 @@ static int nut_add_ups(const char *name) { ups = calloc(1, sizeof(*ups)); if (ups == NULL) { ERROR("nut plugin: nut_add_ups: calloc failed."); - return (1); + return 1; } status = upscli_splitname(name, &ups->upsname, &ups->hostname, &ups->port); if (status != 0) { ERROR("nut plugin: nut_add_ups: upscli_splitname (%s) failed.", name); free_nut_ups_t(ups); - return (1); + return 1; } if (upslist_head == NULL) @@ -95,14 +98,56 @@ static int nut_add_ups(const char *name) { last->next = ups; } - return (0); + return 0; } /* int nut_add_ups */ +static int nut_force_ssl(const char *value) { + if (strcasecmp(value, "true") == 0) + force_ssl = 1; + else if (strcasecmp(value, "false") == 0) + force_ssl = 0; // Should already be set to 0 from initialization + else { + force_ssl = 0; + WARNING("nut plugin: nut_force_ssl: invalid FORCESSL value " + "found. Defaulting to false."); + } + return 0; +} /* int nut_parse_force_ssl */ + +static int nut_verify_peer(const char *value) { + if (strcasecmp(value, "true") == 0) + verify_peer = 1; + else if (strcasecmp(value, "false") == 0) + verify_peer = 0; // Should already be set to 0 from initialization + else { + verify_peer = 0; + WARNING("nut plugin: nut_verify_peer: invalid VERIFYPEER value " + "found. Defaulting to false."); + } + return 0; +} /* int nut_verify_peer */ + +static int nut_ca_path(const char *value) { + if (value != NULL && strcmp(value, "") != 0) { + ca_path = malloc(strlen(value) + 1); + strncpy(ca_path, value, (strlen(value) + 1)); + } else { + ca_path = NULL; // Should alread be set to NULL from initialization + } + return 0; +} /* int nut_ca_path */ + static int nut_config(const char *key, const char *value) { if (strcasecmp(key, "UPS") == 0) - return (nut_add_ups(value)); + return nut_add_ups(value); + else if (strcasecmp(key, "FORCESSL") == 0) + return nut_force_ssl(value); + else if (strcasecmp(key, "VERIFYPEER") == 0) + return nut_verify_peer(value); + else if (strcasecmp(key, "CAPATH") == 0) + return nut_ca_path(value); else - return (-1); + return -1; } /* int nut_config */ static void nut_submit(nut_ups_t *ups, const char *type, @@ -123,6 +168,119 @@ static void nut_submit(nut_ups_t *ups, const char *type, plugin_dispatch_values(&vl); } /* void nut_submit */ +static int nut_connect(nut_ups_t *ups) { +#if HAVE_UPSCLI_INIT + int status; + int ssl_status; + int ssl_flags; + + if (verify_peer == 1 && force_ssl == 0) { + WARNING("nut plugin: nut_connect: VerifyPeer true but ForceSSL " + "false. Setting ForceSSL to true."); + force_ssl = 1; + } + + if (verify_peer == 1 && ca_path == NULL) { + ERROR("nut plugin: nut_connect: VerifyPeer true but missing " + "CAPath value."); + return -1; + } + + if (verify_peer == 1) { + status = upscli_init(verify_peer, ca_path, NULL, NULL); + + if (status != 1) { + ERROR("nut plugin: nut_connect: upscli_init (%i, %s) failed: %s", + verify_peer, ca_path, upscli_strerror(ups->conn)); + upscli_cleanup(); + return -1; + } + } /* if (verify_peer == 1) */ + + if (verify_peer == 1) + ssl_flags = (UPSCLI_CONN_REQSSL | UPSCLI_CONN_CERTVERIF); + else if (force_ssl == 1) + ssl_flags = UPSCLI_CONN_REQSSL; + else + ssl_flags = UPSCLI_CONN_TRYSSL; + + status = upscli_connect(ups->conn, ups->hostname, ups->port, ssl_flags); + + if (status != 0) { + ERROR("nut plugin: nut_connect: upscli_connect (%s, %i) failed: %s", + ups->hostname, ups->port, upscli_strerror(ups->conn)); + sfree(ups->conn); + upscli_cleanup(); + return -1; + } /* if (status != 0) */ + + INFO("nut plugin: Connection to (%s, %i) established.", ups->hostname, + ups->port); + + // Output INFO or WARNING based on SSL and VERIFICATION + ssl_status = upscli_ssl(ups->conn); // 1 for SSL, 0 for not, -1 for error + if (ssl_status == 1 && verify_peer == 1) { + INFO("nut plugin: Connection is secured with SSL and certificate " + "has been verified."); + } else if (ssl_status == 1) { + INFO("nut plugin: Connection is secured with SSL with no verification " + "of server SSL certificate."); + } else if (ssl_status == 0) { + WARNING("nut plugin: Connection is unsecured (no SSL)."); + } else { + ERROR("nut plugin: nut_connect: upscli_ssl failed: %s", + upscli_strerror(ups->conn)); + sfree(ups->conn); + upscli_cleanup(); + return -1; + } /* if (ssl_status == 1 && verify_peer == 1) */ + return 0; + +#else /* #if HAVE_UPSCLI_INIT */ + int status; + int ssl_status; + int ssl_flags; + + if (verify_peer == 1 || ca_path != NULL) { + WARNING("nut plugin: nut_connect: Dependency libupsclient version " + "insufficient (<2.7) for VerifyPeer support. Ignoring VerifyPeer " + "and CAPath."); + } + + if (force_ssl == 1) + ssl_flags = UPSCLI_CONN_REQSSL; + else + ssl_flags = UPSCLI_CONN_TRYSSL; + + status = upscli_connect(ups->conn, ups->hostname, ups->port, ssl_flags); + + if (status != 0) { + ERROR("nut plugin: nut_connect: upscli_connect (%s, %i) failed: %s", + ups->hostname, ups->port, upscli_strerror(ups->conn)); + sfree(ups->conn); + return -1; + } /* if (status != 0) */ + + INFO("nut plugin: Connection to (%s, %i) established.", ups->hostname, + ups->port); + + // Output INFO or WARNING based on SSL + ssl_status = upscli_ssl(ups->conn); // 1 for SSL, 0 for not, -1 for error + if (ssl_status == 1) { + INFO("nut plugin: Connection is secured with SSL with no verification " + "of server SSL certificate."); + } else if (ssl_status == 0) { + WARNING("nut plugin: Connection is unsecured (no SSL)."); + } else { + ERROR("nut plugin: nut_connect: upscli_ssl failed: %s", + upscli_strerror(ups->conn)); + sfree(ups->conn); + return -1; + } /* if (ssl_status == 1 && verify_peer == 1) */ + return 0; +#endif +} + static int nut_read_one(nut_ups_t *ups) { const char *query[3] = {"VAR", ups->upsname, NULL}; unsigned int query_num = 2; @@ -135,20 +293,13 @@ static int nut_read_one(nut_ups_t *ups) { ups->conn = malloc(sizeof(*ups->conn)); if (ups->conn == NULL) { ERROR("nut plugin: malloc failed."); - return (-1); + return -1; } - status = - upscli_connect(ups->conn, ups->hostname, ups->port, UPSCLI_CONN_TRYSSL); - if (status != 0) { - ERROR("nut plugin: nut_read_one: upscli_connect (%s, %i) failed: %s", - ups->hostname, ups->port, upscli_strerror(ups->conn)); - sfree(ups->conn); - return (-1); - } + status = nut_connect(ups); + if (status == -1) + return -1; - INFO("nut plugin: Connection to (%s, %i) established.", ups->hostname, - ups->port); } /* if (ups->conn == NULL) */ /* nut plugin: nut_read_one: upscli_list_start (adpos) failed: Protocol @@ -159,7 +310,10 @@ static int nut_read_one(nut_ups_t *ups) { ups->upsname, upscli_strerror(ups->conn)); upscli_disconnect(ups->conn); sfree(ups->conn); - return (-1); +#if HAVE_UPSCLI_INIT + upscli_cleanup(); +#endif + return -1; } while ((status = upscli_list_next(ups->conn, query_num, query, &answer_num, @@ -211,7 +365,7 @@ static int nut_read_one(nut_ups_t *ups) { } } /* while (upscli_list_next) */ - return (0); + return 0; } /* int nut_read_one */ static int nut_read(void) { @@ -223,7 +377,7 @@ static int nut_read(void) { pthread_mutex_unlock(&read_lock); if (success != 0) - return (0); + return 0; for (nut_ups_t *ups = upslist_head; ups != NULL; ups = ups->next) if (nut_read_one(ups) == 0) @@ -233,7 +387,7 @@ static int nut_read(void) { read_busy = 0; pthread_mutex_unlock(&read_lock); - return ((success != 0) ? 0 : -1); + return (success != 0) ? 0 : -1; } /* int nut_read */ static int nut_shutdown(void) { @@ -246,8 +400,11 @@ static int nut_shutdown(void) { free_nut_ups_t(this); this = next; } +#if HAVE_UPSCLI_INIT + upscli_cleanup(); +#endif - return (0); + return 0; } /* int nut_shutdown */ void module_register(void) { @@ -255,5 +412,3 @@ void module_register(void) { plugin_register_read("nut", nut_read); plugin_register_shutdown("nut", nut_shutdown); } /* void module_register */ - -/* vim: set sw=2 ts=8 sts=2 tw=78 : */ diff --git a/src/olsrd.c b/src/olsrd.c index d1caf461..eccafae2 100644 --- a/src/olsrd.c +++ b/src/olsrd.c @@ -54,15 +54,15 @@ static int config_want_topology = OLSRD_WANT_SUMMARY; static const char *olsrd_get_node(void) /* {{{ */ { if (config_node != NULL) - return (config_node); - return (OLSRD_DEFAULT_NODE); + return config_node; + return OLSRD_DEFAULT_NODE; } /* }}} const char *olsrd_get_node */ static const char *olsrd_get_service(void) /* {{{ */ { if (config_service != NULL) - return (config_service); - return (OLSRD_DEFAULT_SERVICE); + return config_service; + return OLSRD_DEFAULT_SERVICE; } /* }}} const char *olsrd_get_service */ static void olsrd_set_node(const char *node) /* {{{ */ @@ -114,7 +114,7 @@ static size_t strchomp(char *buffer) /* {{{ */ buffer[buffer_len] = 0; } - return (buffer_len); + return buffer_len; } /* }}} size_t strchomp */ static size_t strtabsplit(char *string, char **fields, size_t size) /* {{{ */ @@ -134,7 +134,7 @@ static size_t strtabsplit(char *string, char **fields, size_t size) /* {{{ */ break; } - return (i); + return i; } /* }}} size_t strtabsplit */ static FILE *olsrd_connect(void) /* {{{ */ @@ -154,7 +154,7 @@ static FILE *olsrd_connect(void) /* {{{ */ if (ai_return != 0) { ERROR("olsrd plugin: getaddrinfo (%s, %s) failed: %s", olsrd_get_node(), olsrd_get_service(), gai_strerror(ai_return)); - return (NULL); + return NULL; } fh = NULL; @@ -191,7 +191,7 @@ static FILE *olsrd_connect(void) /* {{{ */ freeaddrinfo(ai_list); - return (fh); + return fh; } /* }}} FILE *olsrd_connect */ __attribute__((nonnull(2))) static void @@ -214,7 +214,7 @@ olsrd_submit(const char *plugin_instance, /* {{{ */ static int olsrd_cb_ignore(int lineno, /* {{{ */ size_t fields_num, char **fields) { - return (0); + return 0; } /* }}} int olsrd_cb_ignore */ static int olsrd_cb_links(int lineno, /* {{{ */ @@ -239,7 +239,7 @@ static int olsrd_cb_links(int lineno, /* {{{ */ char *endptr; if (config_want_links == OLSRD_WANT_NOT) - return (0); + return 0; /* Special handling of the first line. */ if (lineno <= 0) { @@ -249,7 +249,7 @@ static int olsrd_cb_links(int lineno, /* {{{ */ nlq_sum = 0.0; nlq_num = 0; - return (0); + return 0; } /* Special handling of the last line. */ @@ -272,11 +272,11 @@ static int olsrd_cb_links(int lineno, /* {{{ */ olsrd_submit(/* p.-inst = */ "links", /* type = */ "signal_quality", "average-nlq", nlq); - return (0); + return 0; } if (fields_num != 6) - return (-1); + return -1; links_num++; @@ -328,7 +328,7 @@ static int olsrd_cb_links(int lineno, /* {{{ */ } } - return (0); + return 0; } /* }}} int olsrd_cb_links */ static int olsrd_cb_routes(int lineno, /* {{{ */ @@ -351,7 +351,7 @@ static int olsrd_cb_routes(int lineno, /* {{{ */ char *endptr; if (config_want_routes == OLSRD_WANT_NOT) - return (0); + return 0; /* Special handling of the first line */ if (lineno <= 0) { @@ -361,7 +361,7 @@ static int olsrd_cb_routes(int lineno, /* {{{ */ etx_sum = 0.0; etx_num = 0; - return (0); + return 0; } /* Special handling after the last line */ @@ -386,11 +386,11 @@ static int olsrd_cb_routes(int lineno, /* {{{ */ olsrd_submit(/* p.-inst = */ "routes", /* type = */ "route_etx", "average", etx); - return (0); + return 0; } if (fields_num != 5) - return (-1); + return -1; routes_num++; @@ -429,7 +429,7 @@ static int olsrd_cb_routes(int lineno, /* {{{ */ } } - return (0); + return 0; } /* }}} int olsrd_cb_routes */ static int olsrd_cb_topology(int lineno, /* {{{ */ @@ -450,7 +450,7 @@ static int olsrd_cb_topology(int lineno, /* {{{ */ char *endptr; if (config_want_topology == OLSRD_WANT_NOT) - return (0); + return 0; /* Special handling of the first line */ if (lineno <= 0) { @@ -458,7 +458,7 @@ static int olsrd_cb_topology(int lineno, /* {{{ */ lq_num = 0; links_num = 0; - return (0); + return 0; } /* Special handling after the last line */ @@ -474,11 +474,11 @@ static int olsrd_cb_topology(int lineno, /* {{{ */ olsrd_submit(/* p.-inst = */ "topology", /* type = */ "signal_quality", /* t.-inst = */ "average", lq); - return (0); + return 0; } if (fields_num != 5) - return (-1); + return -1; links_num++; @@ -523,7 +523,7 @@ static int olsrd_cb_topology(int lineno, /* {{{ */ } } - return (0); + return 0; } /* }}} int olsrd_cb_topology */ static int olsrd_read_table(FILE *fh, /* {{{ */ @@ -552,7 +552,7 @@ static int olsrd_read_table(FILE *fh, /* {{{ */ lineno++; } /* while (fgets) */ - return (0); + return 0; } /* }}} int olsrd_read_table */ static int olsrd_config(const char *key, const char *value) /* {{{ */ @@ -569,10 +569,10 @@ static int olsrd_config(const char *key, const char *value) /* {{{ */ olsrd_set_detail(&config_want_topology, value, key); else { ERROR("olsrd plugin: Unknown configuration option given: %s", key); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int olsrd_config */ static int olsrd_read(void) /* {{{ */ @@ -583,7 +583,7 @@ static int olsrd_read(void) /* {{{ */ fh = olsrd_connect(); if (fh == NULL) - return (-1); + return -1; fputs("\r\n", fh); fflush(fh); @@ -615,7 +615,7 @@ static int olsrd_read(void) /* {{{ */ fclose(fh); - return (0); + return 0; } /* }}} int olsrd_read */ static int olsrd_shutdown(void) /* {{{ */ @@ -623,7 +623,7 @@ static int olsrd_shutdown(void) /* {{{ */ sfree(config_node); sfree(config_service); - return (0); + return 0; } /* }}} int olsrd_shutdown */ void module_register(void) { @@ -631,5 +631,3 @@ void module_register(void) { plugin_register_read("olsrd", olsrd_read); plugin_register_shutdown("olsrd", olsrd_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/onewire.c b/src/onewire.c index 10fa5ca1..2d594ec9 100644 --- a/src/onewire.c +++ b/src/onewire.c @@ -123,7 +123,7 @@ static int timeval_subtract(struct timeval *result, struct timeval *t2, result->tv_sec = diff / 1000000; result->tv_usec = diff % 1000000; - return (diff < 0); + return diff < 0; } #endif /* COLLECT_DEBUG */ @@ -169,7 +169,7 @@ static int direct_list_insert(const char *config) { if (regcomp(®ex_direct, regexp_to_match, REG_EXTENDED)) { ERROR("onewire plugin: Cannot compile regex"); direct_list_element_free(element); - return (1); + return 1; } regex_direct_initialized = 1; DEBUG("onewire plugin: Compiled regex!!"); @@ -242,7 +242,7 @@ static int cow_load_config(const char *key, const char *value) { if (ignorelist_add(sensor_list, value)) { ERROR("onewire plugin: Cannot add value to ignorelist."); - return (1); + return 1; } } else { DEBUG("onewire plugin: %s is a direct access", value); @@ -257,7 +257,7 @@ static int cow_load_config(const char *key, const char *value) { temp = strdup(value); if (temp == NULL) { ERROR("onewire plugin: strdup failed."); - return (1); + return 1; } sfree(device_g); device_g = temp; @@ -269,10 +269,10 @@ static int cow_load_config(const char *key, const char *value) { else ERROR("onewire plugin: Invalid `Interval' setting: %s", value); } else { - return (-1); + return -1; } - return (0); + return 0; } static int cow_read_values(const char *path, const char *name, @@ -310,7 +310,7 @@ static int cow_read_values(const char *path, const char *name, ERROR("onewire plugin: OW_get (%s/%s) failed. error = %s;", path, family_info->features[i].filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } DEBUG("Read onewire device %s as %s", file, buffer); @@ -334,7 +334,7 @@ static int cow_read_values(const char *path, const char *name, free(buffer); } /* for (i = 0; i < features_num; i++) */ - return ((success > 0) ? 0 : -1); + return (success > 0) ? 0 : -1; } /* int cow_read_values */ /* Forward declaration so the recursion below works */ @@ -358,7 +358,7 @@ static int cow_read_ds2409(const char *path) { if ((status > 0) && (status < (int)sizeof(subpath))) cow_read_bus(subpath); - return (0); + return 0; } /* int cow_read_ds2409 */ static int cow_read_bus(const char *path) { @@ -376,7 +376,7 @@ static int cow_read_bus(const char *path) { if (status < 0) { ERROR("onewire plugin: OW_get (%s) failed. error = %s;", path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } DEBUG("onewire plugin: OW_get (%s) returned: %s", path, buffer); @@ -415,7 +415,7 @@ static int cow_read_bus(const char *path) { } /* while (strtok_r) */ free(buffer); - return (0); + return 0; } /* int cow_read_bus */ /* =================================================================================== @@ -439,7 +439,7 @@ static int cow_simple_read(void) { if (status < 0) { ERROR("onewire plugin: OW_get (%s) failed. status = %s;", traverse->path, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } DEBUG("onewire plugin: Read onewire device %s as %s", traverse->path, buffer); @@ -502,7 +502,7 @@ static int cow_shutdown(void) { regfree(®ex_direct); } - return (0); + return 0; } /* int cow_shutdown */ static int cow_init(void) { @@ -511,7 +511,7 @@ static int cow_init(void) { if (device_g == NULL) { ERROR("onewire plugin: cow_init: No device configured."); - return (-1); + return -1; } DEBUG("onewire plugin: about to init device <%s>.", device_g); @@ -519,14 +519,14 @@ static int cow_init(void) { if (status != 0) { ERROR("onewire plugin: OW_init(%s) failed: %s.", device_g, sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } plugin_register_complex_read(/* group = */ NULL, "onewire", cow_read, ow_interval, /* user data = */ NULL); plugin_register_shutdown("onewire", cow_shutdown); - return (0); + return 0; } /* int cow_init */ void module_register(void) { @@ -534,5 +534,3 @@ void module_register(void) { plugin_register_config("onewire", cow_load_config, config_keys, config_keys_num); } - -/* vim: set sw=2 sts=2 ts=8 et fdm=marker cindent : */ diff --git a/src/openldap.c b/src/openldap.c index 50757db8..80539290 100644 --- a/src/openldap.c +++ b/src/openldap.c @@ -85,7 +85,7 @@ static int cldap_init_host(cldap_t *st) /* {{{ */ if (st->state && st->ld) { DEBUG("openldap plugin: Already connected to %s", st->url); - return (0); + return 0; } rc = ldap_initialize(&ld, st->url); @@ -147,7 +147,7 @@ static int cldap_init_host(cldap_t *st) /* {{{ */ } else { DEBUG("openldap plugin: Successfully connected to %s", st->url); st->state = 1; - return (0); + return 0; } } /* }}} static cldap_init_host */ @@ -200,14 +200,14 @@ static int cldap_read_host(user_data_t *ud) /* {{{ */ if ((ud == NULL) || (ud->data == NULL)) { ERROR("openldap plugin: cldap_read_host: Invalid user data."); - return (-1); + return -1; } st = (cldap_t *)ud->data; status = cldap_init_host(st); if (status != 0) - return (-1); + return -1; rc = ldap_search_ext_s(st->ld, "cn=Monitor", LDAP_SCOPE_SUBTREE, "(|(!(cn=* *))(cn=Database*))", attrs, 0, NULL, NULL, @@ -376,7 +376,7 @@ static int cldap_read_host(user_data_t *ud) /* {{{ */ } ldap_msgfree(result); - return (0); + return 0; } /* }}} int cldap_read_host */ /* Configuration handling functions {{{ @@ -397,13 +397,13 @@ static int cldap_config_add(oconfig_item_t *ci) /* {{{ */ st = calloc(1, sizeof(*st)); if (st == NULL) { ERROR("openldap plugin: calloc failed."); - return (-1); + return -1; } status = cf_util_get_string(ci, &st->name); if (status != 0) { sfree(st); - return (status); + return status; } st->starttls = 0; @@ -495,10 +495,10 @@ static int cldap_config_add(oconfig_item_t *ci) /* {{{ */ if (status != 0) { cldap_free(st); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int cldap_config_add */ static int cldap_config(oconfig_item_t *ci) /* {{{ */ @@ -518,7 +518,7 @@ static int cldap_config(oconfig_item_t *ci) /* {{{ */ child->key); } /* for (ci->children) */ - return (status); + return status; } /* }}} int cldap_config */ /* }}} End of configuration handling functions */ @@ -529,7 +529,7 @@ static int cldap_init(void) /* {{{ */ * ldap_initialize(3) */ int debug_level; ldap_get_option(NULL, LDAP_OPT_DEBUG_LEVEL, &debug_level); - return (0); + return 0; } /* }}} int cldap_init */ static int cldap_shutdown(void) /* {{{ */ @@ -540,7 +540,7 @@ static int cldap_shutdown(void) /* {{{ */ sfree(databases); databases_num = 0; - return (0); + return 0; } /* }}} int cldap_shutdown */ void module_register(void) /* {{{ */ diff --git a/src/openvpn.c b/src/openvpn.c index 90694b78..143a770b 100644 --- a/src/openvpn.c +++ b/src/openvpn.c @@ -88,7 +88,7 @@ static int openvpn_strsplit(char *string, char **fields, size_t size) { break; } - return (i); + return i; } /* int openvpn_strsplit */ /* dispatches number of users */ @@ -225,7 +225,7 @@ static int single_read(const char *name, FILE *fh) { read = 1; - return (read); + return read; } /* int single_read */ /* for reading status version 1 */ @@ -276,12 +276,12 @@ static int multi1_read(const char *name, FILE *fh) { } if (ferror(fh)) - return (0); + return 0; if (collect_user_count) numusers_submit(name, name, sum_users); - return (1); + return 1; } /* int multi1_read */ /* for reading status version 2 */ @@ -336,7 +336,7 @@ static int multi2_read(const char *name, FILE *fh) { read = 1; } - return (read); + return read; } /* int multi2_read */ /* for reading status version 3 */ @@ -391,7 +391,7 @@ static int multi3_read(const char *name, FILE *fh) { read = 1; } - return (read); + return read; } /* int multi3_read */ /* for reading status version 4 */ @@ -446,7 +446,7 @@ static int multi4_read(const char *name, FILE *fh) { read = 1; } - return (read); + return read; } /* int multi4_read */ /* read callback */ @@ -457,7 +457,7 @@ static int openvpn_read(void) { read = 0; if (vpn_num == 0) - return (0); + return 0; /* call the right read function for every status entry in the list */ for (int i = 0; i < vpn_num; i++) { @@ -498,7 +498,7 @@ static int openvpn_read(void) { read += vpn_read; } - return (read ? 0 : -1); + return read ? 0 : -1; } /* int openvpn_read */ static int version_detect(const char *filename) { @@ -509,14 +509,14 @@ static int version_detect(const char *filename) { /* Sanity checking. We're called from the config handling routine, so * better play it save. */ if ((filename == NULL) || (*filename == 0)) - return (0); + return 0; fh = fopen(filename, "r"); if (fh == NULL) { char errbuf[1024]; WARNING("openvpn plugin: Unable to read \"%s\": %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (0); + return 0; } /* now search for the specific multimode data format */ @@ -581,7 +581,7 @@ static int openvpn_config(const char *key, const char *value) { WARNING("openvpn plugin: unable to detect status version, " "discarding status file \"%s\".", value); - return (1); + return 1; } status_file = sstrdup(value); @@ -589,7 +589,7 @@ static int openvpn_config(const char *key, const char *value) { char errbuf[1024]; WARNING("openvpn plugin: sstrdup failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } /* it determines the file name as string starting at location filename + 1 @@ -611,7 +611,7 @@ static int openvpn_config(const char *key, const char *value) { "different one.", status_name); sfree(status_file); - return (1); + return 1; } } @@ -622,7 +622,7 @@ static int openvpn_config(const char *key, const char *value) { ERROR("openvpn plugin: malloc failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); sfree(status_file); - return (1); + return 1; } temp->file = status_file; temp->version = status_version; @@ -638,7 +638,7 @@ static int openvpn_config(const char *key, const char *value) { sfree(vpn_list); sfree(temp->file); sfree(temp); - return (1); + return 1; } vpn_list = tmp_list; @@ -677,10 +677,10 @@ static int openvpn_config(const char *key, const char *value) { collect_individual_users = 1; } /* if (strcasecmp("CollectIndividualUsers", key) == 0) */ else { - return (-1); + return -1; } - return (0); + return 0; } /* int openvpn_config */ /* shutdown callback */ @@ -692,7 +692,7 @@ static int openvpn_shutdown(void) { sfree(vpn_list); - return (0); + return 0; } /* int openvpn_shutdown */ static int openvpn_init(void) { @@ -701,13 +701,13 @@ static int openvpn_init(void) { WARNING("OpenVPN plugin: Neither `CollectIndividualUsers', " "`CollectCompression', nor `CollectUserCount' is true. There's no " "data left to collect."); - return (-1); + return -1; } plugin_register_read("openvpn", openvpn_read); plugin_register_shutdown("openvpn", openvpn_shutdown); - return (0); + return 0; } /* int openvpn_init */ void module_register(void) { @@ -715,5 +715,3 @@ void module_register(void) { config_keys_num); plugin_register_init("openvpn", openvpn_init); } /* void module_register */ - -/* vim: set sw=2 ts=2 : */ diff --git a/src/oracle.c b/src/oracle.c index 4eacc543..2d98f0aa 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -179,13 +179,13 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("oracle plugin: The `Database' block " "needs exactly one string argument."); - return (-1); + return -1; } db = calloc(1, sizeof(*db)); if (db == NULL) { ERROR("oracle plugin: calloc failed."); - return (-1); + return -1; } db->name = NULL; db->host = NULL; @@ -196,7 +196,7 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &db->name); if (status != 0) { sfree(db); - return (status); + return status; } /* Fill the `o_database_t' structure.. */ @@ -282,10 +282,10 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ if (status != 0) { o_database_free(db); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int o_config_add_database */ static int o_config(oconfig_item_t *ci) /* {{{ */ @@ -310,7 +310,7 @@ static int o_config(oconfig_item_t *ci) /* {{{ */ } } /* for (ci->children) */ - return (0); + return 0; } /* }}} int o_config */ /* }}} End of configuration handling functions */ @@ -320,7 +320,7 @@ static int o_init(void) /* {{{ */ int status; if (oci_env != NULL) - return (0); + return 0; status = OCIEnvCreate(&oci_env, /* mode = */ OCI_THREADED, @@ -332,7 +332,7 @@ static int o_init(void) /* {{{ */ /* user_data_ptr = */ NULL); if (status != 0) { ERROR("oracle plugin: OCIEnvCreate failed with status %i.", status); - return (-1); + return -1; } status = OCIHandleAlloc(oci_env, (void *)&oci_error, OCI_HTYPE_ERROR, @@ -341,10 +341,10 @@ static int o_init(void) /* {{{ */ ERROR("oracle plugin: OCIHandleAlloc (OCI_HTYPE_ERROR) failed " "with status %i.", status); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int o_init */ static int o_read_database_query(o_database_t *db, /* {{{ */ @@ -378,7 +378,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ o_report_error("o_read_database_query", db->name, udb_query_get_name(q), "OCIHandleAlloc", oci_error); oci_statement = NULL; - return (-1); + return -1; } status = OCIStmtPrepare(oci_statement, oci_error, (text *)statement, @@ -390,7 +390,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ "OCIStmtPrepare", oci_error); OCIHandleFree(oci_statement, OCI_HTYPE_STMT); oci_statement = NULL; - return (-1); + return -1; } udb_query_set_user_data(q, oci_statement); @@ -411,7 +411,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ if (status != OCI_SUCCESS) { o_report_error("o_read_database_query", db->name, udb_query_get_name(q), "OCIStmtExecute", oci_error); - return (-1); + return -1; } /* }}} */ /* Acquire the number of columns returned. */ @@ -424,7 +424,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ if (status != OCI_SUCCESS) { o_report_error("o_read_database_query", db->name, udb_query_get_name(q), "OCIAttrGet", oci_error); - return (-1); + return -1; } /* }}} */ column_num = (size_t)param_counter; @@ -461,7 +461,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ if ((ptr) == NULL) { \ FREE_ALL; \ ERROR("oracle plugin: o_read_database_query: calloc failed."); \ - return (-1); \ + return -1; \ } \ } while (0) @@ -471,13 +471,13 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ oci_defines = NULL; ALLOC_OR_FAIL(column_names, column_num * sizeof(char *)); - ALLOC_OR_FAIL(column_names[0], column_num * DATA_MAX_NAME_LEN * sizeof(char)); + ALLOC_OR_FAIL(column_names[0], column_num * DATA_MAX_NAME_LEN); for (size_t i = 1; i < column_num; i++) column_names[i] = column_names[i - 1] + DATA_MAX_NAME_LEN; ALLOC_OR_FAIL(column_values, column_num * sizeof(char *)); ALLOC_OR_FAIL(column_values[0], - column_num * DATA_MAX_NAME_LEN * sizeof(char)); + column_num * DATA_MAX_NAME_LEN); for (size_t i = 1; i < column_num; i++) column_values[i] = column_values[i - 1] + DATA_MAX_NAME_LEN; @@ -552,7 +552,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ "udb_query_prepare_result failed.", db->name, udb_query_get_name(q)); FREE_ALL; - return (-1); + return -1; } /* Fetch and handle all the rows that matched the query. */ @@ -582,7 +582,7 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ * %s", q->statement); */ FREE_ALL; - return (0); + return 0; #undef FREE_ALL #undef ALLOC_OR_FAIL } /* }}} int o_read_database_query */ @@ -602,7 +602,7 @@ static int o_read_database(o_database_t *db) /* {{{ */ if (status != OCI_SUCCESS) { o_report_error("o_read_database", db->name, NULL, "OCIAttrGet", oci_error); - return (-1); + return -1; } if (server_handle == NULL) { @@ -616,7 +616,7 @@ static int o_read_database(o_database_t *db) /* {{{ */ if (status != OCI_SUCCESS) { o_report_error("o_read_database", db->name, NULL, "OCIAttrGet", oci_error); - return (-1); + return -1; } } @@ -642,7 +642,7 @@ static int o_read_database(o_database_t *db) /* {{{ */ DEBUG("oracle plugin: OCILogon (%s): db->oci_service_context = %p;", db->connect_id, db->oci_service_context); db->oci_service_context = NULL; - return (-1); + return -1; } else if (status == OCI_SUCCESS_WITH_INFO) { /* TODO: Print NOTIFY message. */ } @@ -656,7 +656,7 @@ static int o_read_database(o_database_t *db) /* {{{ */ for (size_t i = 0; i < db->queries_num; i++) o_read_database_query(db, db->queries[i], db->q_prep_areas[i]); - return (0); + return 0; } /* }}} int o_read_database */ static int o_read(void) /* {{{ */ @@ -666,7 +666,7 @@ static int o_read(void) /* {{{ */ for (i = 0; i < databases_num; i++) o_read_database(databases[i]); - return (0); + return 0; } /* }}} int o_read */ static int o_shutdown(void) /* {{{ */ @@ -696,7 +696,7 @@ static int o_shutdown(void) /* {{{ */ queries = NULL; queries_num = 0; - return (0); + return 0; } /* }}} int o_shutdown */ void module_register(void) /* {{{ */ @@ -706,7 +706,3 @@ void module_register(void) /* {{{ */ plugin_register_read("oracle", o_read); plugin_register_shutdown("oracle", o_shutdown); } /* }}} void module_register */ - -/* - * vim: shiftwidth=2 softtabstop=2 et fdm=marker - */ diff --git a/src/ovs_events.c b/src/ovs_events.c new file mode 100644 index 00000000..65042343 --- /dev/null +++ b/src/ovs_events.c @@ -0,0 +1,658 @@ +/** + * collectd - src/ovs_events.c + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Volodymyr Mytnyk + **/ + +#include "collectd.h" + +#include "common.h" /* auxiliary functions */ + +#include "utils_ovs.h" /* OVS helpers */ + +#define OVS_EVENTS_IFACE_NAME_SIZE 128 +#define OVS_EVENTS_IFACE_UUID_SIZE 64 +#define OVS_EVENTS_EXT_IFACE_ID_SIZE 64 +#define OVS_EVENTS_EXT_VM_UUID_SIZE 64 +#define OVS_EVENTS_PLUGIN "ovs_events" +#define OVS_EVENTS_CTX_LOCK \ + for (int __i = ovs_events_ctx_lock(); __i != 0; __i = ovs_events_ctx_unlock()) + +/* Link status type */ +enum ovs_events_link_status_e { DOWN, UP }; +typedef enum ovs_events_link_status_e ovs_events_link_status_t; + +/* Interface info */ +struct ovs_events_iface_info_s { + char name[OVS_EVENTS_IFACE_NAME_SIZE]; /* interface name */ + char uuid[OVS_EVENTS_IFACE_UUID_SIZE]; /* interface UUID */ + char ext_iface_id[OVS_EVENTS_EXT_IFACE_ID_SIZE]; /* external interface id */ + char ext_vm_uuid[OVS_EVENTS_EXT_VM_UUID_SIZE]; /* external VM UUID */ + ovs_events_link_status_t link_status; /* interface link status */ + struct ovs_events_iface_info_s *next; /* next interface info */ +}; +typedef struct ovs_events_iface_info_s ovs_events_iface_info_t; + +/* Interface list */ +struct ovs_events_iface_list_s { + char name[OVS_EVENTS_IFACE_NAME_SIZE]; /* interface name */ + struct ovs_events_iface_list_s *next; /* next interface info */ +}; +typedef struct ovs_events_iface_list_s ovs_events_iface_list_t; + +/* OVS events configuration data */ +struct ovs_events_config_s { + _Bool send_notification; /* sent notification to collectd? */ + char ovs_db_node[OVS_DB_ADDR_NODE_SIZE]; /* OVS DB node */ + char ovs_db_serv[OVS_DB_ADDR_SERVICE_SIZE]; /* OVS DB service */ + char ovs_db_unix[OVS_DB_ADDR_UNIX_SIZE]; /* OVS DB unix socket path */ + ovs_events_iface_list_t *ifaces; /* interface info */ +}; +typedef struct ovs_events_config_s ovs_events_config_t; + +/* OVS events context type */ +struct ovs_events_ctx_s { + pthread_mutex_t mutex; /* mutex to lock the context */ + ovs_db_t *ovs_db; /* pointer to OVS DB instance */ + ovs_events_config_t config; /* plugin config */ + char *ovs_db_select_params; /* OVS DB select parameter request */ + _Bool is_db_available; /* specify whether OVS DB is available */ +}; +typedef struct ovs_events_ctx_s ovs_events_ctx_t; + +/* + * Private variables + */ +static ovs_events_ctx_t ovs_events_ctx = { + .mutex = PTHREAD_MUTEX_INITIALIZER, + .config = {.send_notification = 1, /* send notification by default */ + .ovs_db_node = "localhost", /* use default OVS DB node */ + .ovs_db_serv = "6640"} /* use default OVS DB service */ +}; + +/* Forward declaration */ +static int ovs_events_plugin_read(user_data_t *u); + +/* This function is used only by "OVS_EVENTS_CTX_LOCK" define (see above). + * It always returns 1 when context is locked. + */ +static int ovs_events_ctx_lock() { + pthread_mutex_lock(&ovs_events_ctx.mutex); + return 1; +} + +/* This function is used only by "OVS_EVENTS_CTX_LOCK" define (see above). + * It always returns 0 when context is unlocked. + */ +static int ovs_events_ctx_unlock() { + pthread_mutex_unlock(&ovs_events_ctx.mutex); + return 0; +} + +/* Check if given interface name exists in configuration file. It + * returns 1 if exists otherwise 0. If no interfaces are configured, + * -1 is returned + */ +static int ovs_events_config_iface_exists(const char *ifname) { + if (ovs_events_ctx.config.ifaces == NULL) + return -1; + + /* check if given interface exists */ + for (ovs_events_iface_list_t *iface = ovs_events_ctx.config.ifaces; iface; + iface = iface->next) + if (strcmp(ifname, iface->name) == 0) + return 1; + + return 0; +} + +/* Get OVS DB select parameter request based on rfc7047, + * "Transact" & "Select" section + */ +static char *ovs_events_get_select_params() { + size_t buff_size = 0; + size_t buff_off = 0; + char *opt_buff = NULL; + static const char params_fmt[] = "[\"Open_vSwitch\"%s]"; + static const char option_fmt[] = + ",{\"op\":\"select\",\"table\":\"Interface\"," + "\"where\":[[\"name\",\"==\",\"%s\"]]," + "\"columns\":[\"link_state\",\"external_ids\"," + "\"name\",\"_uuid\"]}"; + static const char default_opt[] = + ",{\"op\":\"select\",\"table\":\"Interface\"," + "\"where\":[],\"columns\":[\"link_state\"," + "\"external_ids\",\"name\",\"_uuid\"]}"; + /* setup OVS DB interface condition */ + for (ovs_events_iface_list_t *iface = ovs_events_ctx.config.ifaces; iface; + iface = iface->next) { + /* allocate new buffer (format size + ifname len is good enough) */ + buff_size += sizeof(option_fmt) + strlen(iface->name); + char *new_buff = realloc(opt_buff, buff_size); + if (new_buff == NULL) { + sfree(opt_buff); + return NULL; + } + opt_buff = new_buff; + int ret = ssnprintf(opt_buff + buff_off, buff_size - buff_off, option_fmt, + iface->name); + if (ret < 0) { + sfree(opt_buff); + return NULL; + } + buff_off += ret; + } + /* if no interfaces are configured, use default params */ + if (opt_buff == NULL) + if ((opt_buff = strdup(default_opt)) == NULL) + return NULL; + + /* allocate memory for OVS DB select params */ + size_t params_size = sizeof(params_fmt) + strlen(opt_buff); + char *params_buff = calloc(1, params_size); + if (params_buff == NULL) { + sfree(opt_buff); + return NULL; + } + + /* create OVS DB select params */ + if (ssnprintf(params_buff, params_size, params_fmt, opt_buff) < 0) + sfree(params_buff); + + sfree(opt_buff); + return params_buff; +} + +/* Release memory allocated for configuration data */ +static void ovs_events_config_free() { + ovs_events_iface_list_t *del_iface = NULL; + sfree(ovs_events_ctx.ovs_db_select_params); + while (ovs_events_ctx.config.ifaces) { + del_iface = ovs_events_ctx.config.ifaces; + ovs_events_ctx.config.ifaces = ovs_events_ctx.config.ifaces->next; + sfree(del_iface); + } +} + +/* Parse/process "Interfaces" configuration option. Returns 0 if success + * otherwise -1 (error) + */ +static int ovs_events_config_get_interfaces(const oconfig_item_t *ci) { + for (int j = 0; j < ci->values_num; j++) { + /* check interface name type */ + if (ci->values[j].type != OCONFIG_TYPE_STRING) { + ERROR(OVS_EVENTS_PLUGIN + ": given interface name is not a string [idx=%d]", j); + return -1; + } + /* allocate memory for configured interface */ + ovs_events_iface_list_t *new_iface = calloc(1, sizeof(*new_iface)); + if (new_iface == NULL) { + ERROR(OVS_EVENTS_PLUGIN ": calloc () copy interface name fail"); + return -1; + } else { + /* store interface name */ + sstrncpy(new_iface->name, ci->values[j].value.string, + sizeof(new_iface->name)); + new_iface->next = ovs_events_ctx.config.ifaces; + ovs_events_ctx.config.ifaces = new_iface; + DEBUG(OVS_EVENTS_PLUGIN ": found monitored interface \"%s\"", + new_iface->name); + } + } + return 0; +} + +/* Parse plugin configuration file and store the config + * in allocated memory. Returns negative value in case of error. + */ +static int ovs_events_plugin_config(oconfig_item_t *ci) { + _Bool dispatch_values = 0; + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("SendNotification", child->key) == 0) { + if (cf_util_get_boolean(child, + &ovs_events_ctx.config.send_notification) != 0) { + ovs_events_config_free(); + return -1; + } + } else if (strcasecmp("Address", child->key) == 0) { + if (cf_util_get_string_buffer( + child, ovs_events_ctx.config.ovs_db_node, + sizeof(ovs_events_ctx.config.ovs_db_node)) != 0) { + ovs_events_config_free(); + return -1; + } + } else if (strcasecmp("Port", child->key) == 0) { + char *service = NULL; + if (cf_util_get_service(child, &service) != 0) { + ovs_events_config_free(); + return -1; + } + strncpy(ovs_events_ctx.config.ovs_db_serv, service, + sizeof(ovs_events_ctx.config.ovs_db_serv)); + sfree(service); + } else if (strcasecmp("Socket", child->key) == 0) { + if (cf_util_get_string_buffer( + child, ovs_events_ctx.config.ovs_db_unix, + sizeof(ovs_events_ctx.config.ovs_db_unix)) != 0) { + ovs_events_config_free(); + return -1; + } + } else if (strcasecmp("Interfaces", child->key) == 0) { + if (ovs_events_config_get_interfaces(child) != 0) { + ovs_events_config_free(); + return -1; + } + } else if (strcasecmp("DispatchValues", child->key) == 0) { + if (cf_util_get_boolean(child, &dispatch_values) != 0) { + ovs_events_config_free(); + return -1; + } + } else { + ERROR(OVS_EVENTS_PLUGIN ": option '%s' is not allowed here", child->key); + ovs_events_config_free(); + return -1; + } + } + /* Check and warn about invalid configuration */ + if (!ovs_events_ctx.config.send_notification && !dispatch_values) { + WARNING(OVS_EVENTS_PLUGIN ": send notification and dispatch values " + "options are disabled. No information will be dispatched by the " + "plugin. Please check your configuration"); + } + /* Dispatch link status values if configured */ + if (dispatch_values) + return plugin_register_complex_read(NULL, OVS_EVENTS_PLUGIN, + ovs_events_plugin_read, 0, NULL); + + return 0; +} + +/* Dispatch OVS interface link status event to collectd */ +static void ovs_events_dispatch_notification(const ovs_events_iface_info_t *ifinfo) { + const char *msg_link_status = NULL; + notification_t n = { + NOTIF_FAILURE, cdtime(), "", "", OVS_EVENTS_PLUGIN, "", "", "", NULL}; + + /* convert link status to message string */ + switch (ifinfo->link_status) { + case UP: + msg_link_status = "UP"; + n.severity = NOTIF_OKAY; + break; + case DOWN: + msg_link_status = "DOWN"; + n.severity = NOTIF_WARNING; + break; + default: + ERROR(OVS_EVENTS_PLUGIN ": unknown interface link status"); + return; + } + + /* add interface metadata to the notification */ + if (plugin_notification_meta_add_string(&n, "uuid", ifinfo->uuid) < 0) { + ERROR(OVS_EVENTS_PLUGIN ": add interface uuid meta data failed"); + return; + } + + if (strlen(ifinfo->ext_vm_uuid) > 0) { + if (plugin_notification_meta_add_string(&n, "vm-uuid", + ifinfo->ext_vm_uuid) < 0) { + ERROR(OVS_EVENTS_PLUGIN ": add interface vm-uuid meta data failed"); + return; + } + } + + if (strlen(ifinfo->ext_iface_id) > 0) { + if (plugin_notification_meta_add_string(&n, "iface-id", + ifinfo->ext_iface_id) < 0) { + ERROR(OVS_EVENTS_PLUGIN ": add interface iface-id meta data failed"); + return; + } + } + + /* fill the notification data */ + ssnprintf(n.message, sizeof(n.message), + "link state of \"%s\" interface has been changed to \"%s\"", + ifinfo->name, msg_link_status); + sstrncpy(n.host, hostname_g, sizeof(n.host)); + sstrncpy(n.plugin_instance, ifinfo->name, sizeof(n.plugin_instance)); + sstrncpy(n.type, "gauge", sizeof(n.type)); + sstrncpy(n.type_instance, "link_status", sizeof(n.type_instance)); + plugin_dispatch_notification(&n); +} + +/* Dispatch OVS interface link status value to collectd */ +static void ovs_events_link_status_submit(const ovs_events_iface_info_t *ifinfo) { + value_list_t vl = VALUE_LIST_INIT; + meta_data_t *meta = NULL; + + /* add interface metadata to the submit value */ + if ((meta = meta_data_create()) != NULL) { + if (meta_data_add_string(meta, "uuid", ifinfo->uuid) < 0) + ERROR(OVS_EVENTS_PLUGIN ": add interface uuid meta data failed"); + + if (strlen(ifinfo->ext_vm_uuid) > 0) + if (meta_data_add_string(meta, "vm-uuid", ifinfo->ext_vm_uuid) < 0) + ERROR(OVS_EVENTS_PLUGIN ": add interface vm-uuid meta data failed"); + + if (strlen(ifinfo->ext_iface_id) > 0) + if (meta_data_add_string(meta, "iface-id", ifinfo->ext_iface_id) < 0) + ERROR(OVS_EVENTS_PLUGIN ": add interface iface-id meta data failed"); + vl.meta = meta; + } else + ERROR(OVS_EVENTS_PLUGIN ": create metadata failed"); + + vl.time = cdtime(); + vl.values = &(value_t){.gauge = (gauge_t)ifinfo->link_status}; + vl.values_len = 1; + sstrncpy(vl.plugin, OVS_EVENTS_PLUGIN, sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, ifinfo->name, sizeof(vl.plugin_instance)); + sstrncpy(vl.type, "gauge", sizeof(vl.type)); + sstrncpy(vl.type_instance, "link_status", sizeof(vl.type_instance)); + plugin_dispatch_values(&vl); + meta_data_destroy(meta); +} + +/* Dispatch OVS DB terminate connection event to collectd */ +static void ovs_events_dispatch_terminate_notification(const char *msg) { + notification_t n = { + NOTIF_FAILURE, cdtime(), "", "", OVS_EVENTS_PLUGIN, "", "", "", NULL}; + sstrncpy(n.message, msg, sizeof(n.message)); + sstrncpy(n.host, hostname_g, sizeof(n.host)); + plugin_dispatch_notification(&n); +} + +/* Get OVS DB interface information and stores it into + * ovs_events_iface_info_t structure */ +static int ovs_events_get_iface_info(yajl_val jobject, + ovs_events_iface_info_t *ifinfo) { + yajl_val jexternal_ids = NULL; + yajl_val jvalue = NULL; + yajl_val juuid = NULL; + const char *state = NULL; + + /* check YAJL type */ + if (!YAJL_IS_OBJECT(jobject)) + return -1; + + /* zero the interface info structure */ + memset(ifinfo, 0, sizeof(*ifinfo)); + + /* try to find external_ids, name and link_state fields */ + jexternal_ids = ovs_utils_get_value_by_key(jobject, "external_ids"); + if (jexternal_ids == NULL || ifinfo == NULL) + return -1; + + /* get iface-id from external_ids field */ + jvalue = ovs_utils_get_map_value(jexternal_ids, "iface-id"); + if (jvalue != NULL && YAJL_IS_STRING(jvalue)) + sstrncpy(ifinfo->ext_iface_id, YAJL_GET_STRING(jvalue), + sizeof(ifinfo->ext_iface_id)); + + /* get vm-uuid from external_ids field */ + jvalue = ovs_utils_get_map_value(jexternal_ids, "vm-uuid"); + if (jvalue != NULL && YAJL_IS_STRING(jvalue)) + sstrncpy(ifinfo->ext_vm_uuid, YAJL_GET_STRING(jvalue), + sizeof(ifinfo->ext_vm_uuid)); + + /* get interface uuid */ + jvalue = ovs_utils_get_value_by_key(jobject, "_uuid"); + if (jvalue == NULL || !YAJL_IS_ARRAY(jvalue) || + YAJL_GET_ARRAY(jvalue)->len != 2) + return -1; + juuid = YAJL_GET_ARRAY(jvalue)->values[1]; + if (juuid == NULL || !YAJL_IS_STRING(juuid)) + return -1; + sstrncpy(ifinfo->uuid, YAJL_GET_STRING(juuid), sizeof(ifinfo->uuid)); + + /* get interface name */ + jvalue = ovs_utils_get_value_by_key(jobject, "name"); + if (jvalue == NULL || !YAJL_IS_STRING(jvalue)) + return -1; + sstrncpy(ifinfo->name, YAJL_GET_STRING(jvalue), sizeof(ifinfo->name)); + + /* get OVS DB interface link status */ + jvalue = ovs_utils_get_value_by_key(jobject, "link_state"); + if (jvalue != NULL && ((state = YAJL_GET_STRING(jvalue)) != NULL)) { + /* convert OVS table link state to link status */ + if (strcmp(state, "up") == 0) + ifinfo->link_status = UP; + else if (strcmp(state, "down") == 0) + ifinfo->link_status = DOWN; + } + return 0; +} + +/* Process OVS DB update table event. It handles link status update event(s) + * and dispatches the value(s) to collectd if interface name matches one of + * interfaces specified in configuration file. + */ +static void ovs_events_table_update_cb(yajl_val jupdates) { + yajl_val jnew_val = NULL; + yajl_val jupdate = NULL; + yajl_val jrow_update = NULL; + ovs_events_iface_info_t ifinfo; + + /* JSON "Interface" table update example: + * --------------------------------- + * {"Interface": + * { + * "9adf1db2-29ca-4140-ab22-ae347a4484de": + * { + * "new": + * { + * "name":"br0", + * "link_state":"up" + * }, + * "old": + * { + * "link_state":"down" + * } + * } + * } + * } + */ + if (!YAJL_IS_OBJECT(jupdates) || !(YAJL_GET_OBJECT(jupdates)->len > 0)) { + ERROR(OVS_EVENTS_PLUGIN ": unexpected OVS DB update event received"); + return; + } + /* verify if this is a table event */ + jupdate = YAJL_GET_OBJECT(jupdates)->values[0]; + if (!YAJL_IS_OBJECT(jupdate)) { + ERROR(OVS_EVENTS_PLUGIN ": unexpected table update event received"); + return; + } + /* go through all row updates */ + for (size_t row_index = 0; row_index < YAJL_GET_OBJECT(jupdate)->len; + ++row_index) { + jrow_update = YAJL_GET_OBJECT(jupdate)->values[row_index]; + + /* check row update */ + jnew_val = ovs_utils_get_value_by_key(jrow_update, "new"); + if (jnew_val == NULL) { + ERROR(OVS_EVENTS_PLUGIN ": unexpected row update received"); + return; + } + /* get OVS DB interface information */ + if (ovs_events_get_iface_info(jnew_val, &ifinfo) < 0) { + ERROR(OVS_EVENTS_PLUGIN + " :unexpected interface information data received"); + return; + } + if (ovs_events_config_iface_exists(ifinfo.name) != 0) { + DEBUG("name=%s, uuid=%s, ext_iface_id=%s, ext_vm_uuid=%s", ifinfo.name, + ifinfo.uuid, ifinfo.ext_iface_id, ifinfo.ext_vm_uuid); + /* dispatch notification */ + ovs_events_dispatch_notification(&ifinfo); + } + } +} + +/* OVS DB reply callback. It parses reply, receives + * interface information and dispatches the info to + * collectd + */ +static void ovs_events_poll_result_cb(yajl_val jresult, yajl_val jerror) { + yajl_val *jvalues = NULL; + yajl_val jvalue = NULL; + ovs_events_iface_info_t ifinfo; + + if (!YAJL_IS_NULL(jerror)) { + ERROR(OVS_EVENTS_PLUGIN "error received by OVS DB server"); + return; + } + + /* result should be an array */ + if (!YAJL_IS_ARRAY(jresult)) { + ERROR(OVS_EVENTS_PLUGIN "invalid data (array is expected)"); + return; + } + + /* go through all rows and get interface info */ + jvalues = YAJL_GET_ARRAY(jresult)->values; + for (size_t i = 0; i < YAJL_GET_ARRAY(jresult)->len; i++) { + jvalue = ovs_utils_get_value_by_key(jvalues[i], "rows"); + if (jvalue == NULL || !YAJL_IS_ARRAY(jvalue)) { + ERROR(OVS_EVENTS_PLUGIN "invalid data (array of rows is expected)"); + return; + } + /* get interfaces info */ + for (size_t j = 0; j < YAJL_GET_ARRAY(jvalue)->len; j++) { + if (ovs_events_get_iface_info(YAJL_GET_ARRAY(jvalue)->values[j], + &ifinfo) < 0) { + ERROR(OVS_EVENTS_PLUGIN + "unexpected interface information data received"); + return; + } + DEBUG("name=%s, uuid=%s, ext_iface_id=%s, ext_vm_uuid=%s", ifinfo.name, + ifinfo.uuid, ifinfo.ext_iface_id, ifinfo.ext_vm_uuid); + ovs_events_link_status_submit(&ifinfo); + } + } +} + +/* Setup OVS DB table callback. It subscribes to OVS DB 'Interface' table + * to receive link status event(s). + */ +static void ovs_events_conn_initialize(ovs_db_t *pdb) { + const char tb_name[] = "Interface"; + const char *columns[] = {"_uuid", "external_ids", "name", "link_state", NULL}; + + /* register update link status event if needed */ + if (ovs_events_ctx.config.send_notification) { + int ret = ovs_db_table_cb_register(pdb, tb_name, columns, + ovs_events_table_update_cb, NULL, + OVS_DB_TABLE_CB_FLAG_MODIFY); + if (ret < 0) { + ERROR(OVS_EVENTS_PLUGIN ": register OVS DB update callback failed"); + return; + } + } + OVS_EVENTS_CTX_LOCK { ovs_events_ctx.is_db_available = 1; } + DEBUG(OVS_EVENTS_PLUGIN ": OVS DB connection has been initialized"); +} + +/* OVS DB terminate connection notification callback */ +static void ovs_events_conn_terminate() { + const char msg[] = "OVS DB connection has been lost"; + if (ovs_events_ctx.config.send_notification) + ovs_events_dispatch_terminate_notification(msg); + WARNING(OVS_EVENTS_PLUGIN ": %s", msg); + OVS_EVENTS_CTX_LOCK { ovs_events_ctx.is_db_available = 0; } +} + +/* Read OVS DB interface link status callback */ +static int ovs_events_plugin_read(__attribute__((unused)) user_data_t *u) { + _Bool is_connected = 0; + OVS_EVENTS_CTX_LOCK { is_connected = ovs_events_ctx.is_db_available; } + if (is_connected) + if (ovs_db_send_request(ovs_events_ctx.ovs_db, "transact", + ovs_events_ctx.ovs_db_select_params, + ovs_events_poll_result_cb) < 0) { + ERROR(OVS_EVENTS_PLUGIN ": get interface info failed"); + return -1; + } + return 0; +} + +/* Initialize OVS plugin */ +static int ovs_events_plugin_init(void) { + ovs_db_t *ovs_db = NULL; + ovs_db_callback_t cb = {.post_conn_init = ovs_events_conn_initialize, + .post_conn_terminate = ovs_events_conn_terminate}; + + DEBUG(OVS_EVENTS_PLUGIN ": OVS DB address=%s, service=%s, unix=%s", + ovs_events_ctx.config.ovs_db_node, ovs_events_ctx.config.ovs_db_serv, + ovs_events_ctx.config.ovs_db_unix); + + /* generate OVS DB select condition based on list on configured interfaces */ + ovs_events_ctx.ovs_db_select_params = ovs_events_get_select_params(); + if (ovs_events_ctx.ovs_db_select_params == NULL) { + ERROR(OVS_EVENTS_PLUGIN ": fail to get OVS DB select condition"); + goto ovs_events_failure; + } + + /* initialize OVS DB */ + ovs_db = ovs_db_init(ovs_events_ctx.config.ovs_db_node, + ovs_events_ctx.config.ovs_db_serv, + ovs_events_ctx.config.ovs_db_unix, &cb); + if (ovs_db == NULL) { + ERROR(OVS_EVENTS_PLUGIN ": fail to connect to OVS DB server"); + goto ovs_events_failure; + } + + /* store OVS DB handler */ + OVS_EVENTS_CTX_LOCK { ovs_events_ctx.ovs_db = ovs_db; } + + DEBUG(OVS_EVENTS_PLUGIN ": plugin has been initialized"); + return 0; + +ovs_events_failure: + ERROR(OVS_EVENTS_PLUGIN ": plugin initialize failed"); + /* release allocated memory */ + ovs_events_config_free(); + return -1; +} + +/* Shutdown OVS plugin */ +static int ovs_events_plugin_shutdown(void) { + /* destroy OVS DB */ + if (ovs_db_destroy(ovs_events_ctx.ovs_db)) + ERROR(OVS_EVENTS_PLUGIN ": OVSDB object destroy failed"); + + /* release memory allocated for config */ + ovs_events_config_free(); + + DEBUG(OVS_EVENTS_PLUGIN ": plugin has been destroyed"); + return 0; +} + +/* Register OVS plugin callbacks */ +void module_register(void) { + plugin_register_complex_config(OVS_EVENTS_PLUGIN, ovs_events_plugin_config); + plugin_register_init(OVS_EVENTS_PLUGIN, ovs_events_plugin_init); + plugin_register_shutdown(OVS_EVENTS_PLUGIN, ovs_events_plugin_shutdown); +} diff --git a/src/ovs_stats.c b/src/ovs_stats.c new file mode 100644 index 00000000..31af77c8 --- /dev/null +++ b/src/ovs_stats.c @@ -0,0 +1,990 @@ +/* + * collectd - src/ovs_stats.c + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Taras Chornyi + */ + +#include "common.h" + +#include "utils_ovs.h" /* OvS helpers */ + +/* Plugin name */ +static const char plugin_name[] = "ovs_stats"; + +typedef enum iface_counter { + not_supported = -1, + collisions, + rx_bytes, + rx_crc_err, + rx_dropped, + rx_errors, + rx_frame_err, + rx_over_err, + rx_packets, + tx_bytes, + tx_dropped, + tx_errors, + tx_packets, + rx_1_to_64_packets, + rx_65_to_127_packets, + rx_128_to_255_packets, + rx_256_to_511_packets, + rx_512_to_1023_packets, + rx_1024_to_1522_packets, + rx_1523_to_max_packets, + tx_1_to_64_packets, + tx_65_to_127_packets, + tx_128_to_255_packets, + tx_256_to_511_packets, + tx_512_to_1023_packets, + tx_1024_to_1522_packets, + tx_1523_to_max_packets, + tx_multicast_packets, + rx_broadcast_packets, + tx_broadcast_packets, + rx_undersized_errors, + rx_oversize_errors, + rx_fragmented_errors, + rx_jabber_errors, + __iface_counter_max +} iface_counter; + +#define IFACE_COUNTER_MAX (__iface_counter_max - 1) +#define IFACE_COUNTER_COUNT (__iface_counter_max) +#define PORT_NAME_SIZE_MAX 255 +#define UUID_SIZE 64 + +typedef struct port_s { + char name[PORT_NAME_SIZE_MAX]; /* Port name */ + char port_uuid[UUID_SIZE]; /* Port table _uuid */ + char iface_uuid[UUID_SIZE]; /* Interface table uuid */ + char ex_iface_id[UUID_SIZE]; /* External iface id */ + char ex_vm_id[UUID_SIZE]; /* External vm id */ + int64_t stats[IFACE_COUNTER_COUNT]; /* Port statistics */ + struct bridge_list_s *br; /* Pointer to bridge */ + struct port_s *next; /* Next port */ +} port_list_t; + +typedef struct bridge_list_s { + char *name; /* Bridge name */ + struct bridge_list_s *next; /* Next bridge*/ +} bridge_list_t; + +static const char *const iface_counter_table[IFACE_COUNTER_COUNT] = { + [collisions] = "collisions", + [rx_bytes] = "rx_bytes", + [rx_crc_err] = "rx_crc_err", + [rx_dropped] = "rx_dropped", + [rx_errors] = "rx_errors", + [rx_frame_err] = "rx_frame_err", + [rx_over_err] = "rx_over_err", + [rx_packets] = "rx_packets", + [tx_bytes] = "tx_bytes", + [tx_dropped] = "tx_dropped", + [tx_errors] = "tx_errors", + [tx_packets] = "tx_packets", + [rx_1_to_64_packets] = "rx_1_to_64_packets", + [rx_65_to_127_packets] = "rx_65_to_127_packets", + [rx_128_to_255_packets] = "rx_128_to_255_packets", + [rx_256_to_511_packets] = "rx_256_to_511_packets", + [rx_512_to_1023_packets] = "rx_512_to_1023_packets", + [rx_1024_to_1522_packets] = "rx_1024_to_1518_packets", + [rx_1523_to_max_packets] = "rx_1523_to_max_packets", + [tx_1_to_64_packets] = "tx_1_to_64_packets", + [tx_65_to_127_packets] = "tx_65_to_127_packets", + [tx_128_to_255_packets] = "tx_128_to_255_packets", + [tx_256_to_511_packets] = "tx_256_to_511_packets", + [tx_512_to_1023_packets] = "tx_512_to_1023_packets", + [tx_1024_to_1522_packets] = "tx_1024_to_1518_packets", + [tx_1523_to_max_packets] = "tx_1523_to_max_packets", + [tx_multicast_packets] = "tx_multicast_packets", + [rx_broadcast_packets] = "rx_broadcast_packets", + [tx_broadcast_packets] = "tx_broadcast_packets", + [rx_undersized_errors] = "rx_undersized_errors", + [rx_oversize_errors] = "rx_oversize_errors", + [rx_fragmented_errors] = "rx_fragmented_errors", + [rx_jabber_errors] = "rx_jabber_errors", +}; + +/* Entry into the list of network bridges */ +static bridge_list_t *g_bridge_list_head; + +/* Entry into the list of monitored network bridges */ +static bridge_list_t *g_monitored_bridge_list_head; + +/* entry into the list of network bridges */ +static port_list_t *g_port_list_head; + +/* lock for statistics cache */ +static pthread_mutex_t g_stats_lock; + +/* OvS DB socket */ +static ovs_db_t *g_ovs_db; + +/* OVS stats configuration data */ +struct ovs_stats_config_s { + char ovs_db_node[OVS_DB_ADDR_NODE_SIZE]; /* OVS DB node */ + char ovs_db_serv[OVS_DB_ADDR_SERVICE_SIZE]; /* OVS DB service */ + char ovs_db_unix[OVS_DB_ADDR_UNIX_SIZE]; /* OVS DB unix socket path */ +}; +typedef struct ovs_stats_config_s ovs_stats_config_t; + +static ovs_stats_config_t ovs_stats_cfg = { + .ovs_db_node = "localhost", /* use default OVS DB node */ + .ovs_db_serv = "6640", /* use default OVS DB service */ +}; + +static iface_counter ovs_stats_counter_name_to_type(const char *counter) { + iface_counter index = not_supported; + + if (counter == NULL) + return not_supported; + + for (int i = 0; i < IFACE_COUNTER_COUNT; i++) { + if (strncmp(iface_counter_table[i], counter, + strlen(iface_counter_table[i])) == 0) { + index = i; + break; + } + } + return index; +} + +static void ovs_stats_submit_one(const char *dev, const char *type, + const char *type_instance, derive_t value, + meta_data_t *meta) { + /* if counter is less than 0 - skip it*/ + if (value < 0) + return; + value_list_t vl = VALUE_LIST_INIT; + + vl.values = &(value_t){.derive = value}; + vl.values_len = 1; + vl.meta = meta; + + sstrncpy(vl.plugin, plugin_name, sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, dev, 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); +} + +static void ovs_stats_submit_two(const char *dev, const char *type, + const char *type_instance, derive_t rx, + derive_t tx, meta_data_t *meta) { + /* if counter is less than 0 - skip it*/ + if (rx < 0 || tx < 0) + return; + value_list_t vl = VALUE_LIST_INIT; + value_t values[] = {{.derive = rx}, {.derive = tx}}; + + vl.values = values; + vl.values_len = STATIC_ARRAY_SIZE(values); + vl.meta = meta; + + sstrncpy(vl.plugin, plugin_name, sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, dev, 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); +} + +static port_list_t *ovs_stats_get_port(const char *uuid) { + if (uuid == NULL) + return NULL; + + for (port_list_t *port = g_port_list_head; port != NULL; port = port->next) { + if (strncmp(port->port_uuid, uuid, strlen(port->port_uuid)) == 0) + return port; + } + return NULL; +} + +static port_list_t *ovs_stats_get_port_by_name(const char *name) { + if (name == NULL) + return NULL; + + for (port_list_t *port = g_port_list_head; port != NULL; port = port->next) + if ((strncmp(port->name, name, strlen(port->name)) == 0) && + strlen(name) == strlen(port->name)) + return port; + return NULL; +} + +/* Create or get port by port uuid */ +static port_list_t *ovs_stats_new_port(bridge_list_t *bridge, + const char *uuid) { + port_list_t *port = ovs_stats_get_port(uuid); + + if (port == NULL) { + port = (port_list_t *)calloc(1, sizeof(port_list_t)); + if (!port) { + ERROR("%s: Error allocating port", plugin_name); + return NULL; + } + memset(port->stats, -1, sizeof(int64_t[IFACE_COUNTER_COUNT])); + sstrncpy(port->port_uuid, uuid, sizeof(port->port_uuid)); + pthread_mutex_lock(&g_stats_lock); + port->next = g_port_list_head; + g_port_list_head = port; + pthread_mutex_unlock(&g_stats_lock); + } + if (bridge != NULL) { + pthread_mutex_lock(&g_stats_lock); + port->br = bridge; + pthread_mutex_unlock(&g_stats_lock); + } + return port; +} + +/* Get bridge by name*/ +static bridge_list_t *ovs_stats_get_bridge(bridge_list_t *head, + const char *name) { + if (name == NULL) + return NULL; + + for (bridge_list_t *bridge = head; bridge != NULL; bridge = bridge->next) { + if ((strncmp(bridge->name, name, strlen(bridge->name)) == 0) && + strlen(name) == strlen(bridge->name)) + return bridge; + } + return NULL; +} + +/* Delete bridge */ +static int ovs_stats_del_bridge(yajl_val bridge) { + const char *old[] = {"old", NULL}; + const char *name[] = {"name", NULL}; + + yajl_val row; + + if (bridge && YAJL_IS_OBJECT(bridge)) { + row = yajl_tree_get(bridge, old, yajl_t_object); + if (row && YAJL_IS_OBJECT(row)) { + yajl_val br_name = yajl_tree_get(row, name, yajl_t_string); + if (br_name && YAJL_IS_STRING(br_name)) { + bridge_list_t *prev_br = g_bridge_list_head; + for (bridge_list_t *br = g_bridge_list_head; br != NULL; + prev_br = br, br = br->next) { + if ((strncmp(br->name, br_name->u.string, strlen(br->name)) == 0) && + strlen(br->name) == strlen(br_name->u.string)) { + if (br == g_bridge_list_head) + g_bridge_list_head = br->next; + else + prev_br->next = br->next; + sfree(br->name); + sfree(br); + break; + } + } + } + } + } else + WARNING("%s: Incorrect data for deleting bridge", plugin_name); + return 0; +} + +/* Update Bridge. Create bridge ports*/ +static int ovs_stats_update_bridge(yajl_val bridge) { + const char *new[] = {"new", NULL}; + const char *name[] = {"name", NULL}; + const char *ports[] = {"ports", NULL}; + bridge_list_t *br = NULL; + + if (bridge && YAJL_IS_OBJECT(bridge)) { + yajl_val row = yajl_tree_get(bridge, new, yajl_t_object); + if (row && YAJL_IS_OBJECT(row)) { + yajl_val br_name = yajl_tree_get(row, name, yajl_t_string); + yajl_val br_ports = yajl_tree_get(row, ports, yajl_t_array); + if (br_name && YAJL_IS_STRING(br_name)) { + br = ovs_stats_get_bridge(g_bridge_list_head, YAJL_GET_STRING(br_name)); + pthread_mutex_lock(&g_stats_lock); + if (br == NULL) { + br = (bridge_list_t *)calloc(1, sizeof(bridge_list_t)); + if (!br) { + ERROR("%s: Error allocating memory for bridge", plugin_name); + return -1; + } + char *tmp = YAJL_GET_STRING(br_name); + + if (tmp != NULL) + br->name = strdup(tmp); + if (br->name == NULL) { + sfree(br); + pthread_mutex_unlock(&g_stats_lock); + return -1; + } + br->next = g_bridge_list_head; + g_bridge_list_head = br; + } + pthread_mutex_unlock(&g_stats_lock); + } + if (br_ports && YAJL_IS_ARRAY(br_ports)) { + char *tmp = YAJL_GET_STRING(br_ports->u.array.values[0]); + if (tmp != NULL && strcmp("set", tmp) == 0) { + yajl_val *array = YAJL_GET_ARRAY(br_ports)->values; + size_t array_len = YAJL_GET_ARRAY(br_ports)->len; + if (array != NULL && array_len > 0 && YAJL_IS_ARRAY(array[1])) { + yajl_val *ports_arr = YAJL_GET_ARRAY(array[1])->values; + size_t ports_num = YAJL_GET_ARRAY(array[1])->len; + for (size_t i = 0; i < ports_num && ports_arr != NULL; i++) + ovs_stats_new_port( + br, YAJL_GET_STRING(ports_arr[i]->u.array.values[1])); + } + } else + ovs_stats_new_port(br, YAJL_GET_STRING(br_ports->u.array.values[1])); + } + } + } else { + ERROR("Incorrect JSON Bridge data"); + return -1; + } + return 0; +} + +/* Handle JSON with Bridge Table change event */ +static void ovs_stats_bridge_table_change_cb(yajl_val jupdates) { + /* Bridge Table update example JSON data + { + "Bridge": { + "bb1f8965-5775-46d9-b820-236ca8edbedc": { + "new": { + "name": "br0", + "ports": [ + "set", + [ + [ + "uuid", + "117f1a07-7ef0-458a-865c-ec7fbb85bc01" + ], + [ + "uuid", + "12fd8bdc-e950-4281-aaa9-46e185658f79" + ] + ] + ] + } + } + } + } + */ + const char *path[] = {"Bridge", NULL}; + + yajl_val bridges = yajl_tree_get(jupdates, path, yajl_t_object); + + if (bridges && YAJL_IS_OBJECT(bridges)) { + for (size_t i = 0; i < YAJL_GET_OBJECT(bridges)->len; i++) { + yajl_val bridge = YAJL_GET_OBJECT(bridges)->values[i]; + ovs_stats_update_bridge(bridge); + } + } +} + +/* Handle Bridge Table delete event */ +static void ovs_stats_bridge_table_delete_cb(yajl_val jupdates) { + const char *path[] = {"Bridge", NULL}; + yajl_val bridges = yajl_tree_get(jupdates, path, yajl_t_object); + yajl_val bridge; + if (bridges && YAJL_IS_OBJECT(bridges)) { + pthread_mutex_lock(&g_stats_lock); + for (size_t i = 0; i < YAJL_GET_OBJECT(bridges)->len; i++) { + bridge = YAJL_GET_OBJECT(bridges)->values[i]; + ovs_stats_del_bridge(bridge); + } + pthread_mutex_unlock(&g_stats_lock); + } + return; +} + +/* Handle JSON with Bridge table initial values */ +static void ovs_stats_bridge_table_result_cb(yajl_val jresult, + yajl_val jerror) { + if (YAJL_IS_NULL(jerror)) + ovs_stats_bridge_table_change_cb(jresult); + else + ERROR("%s: Error received from OvSDB. Table: Bridge", plugin_name); + return; +} + +/* Update port name */ +static int ovs_stats_update_port(const char *uuid, yajl_val port) { + const char *new[] = {"new", NULL}; + const char *name[] = {"name", NULL}; + yajl_val row; + port_list_t *portentry = NULL; + if (port && YAJL_IS_OBJECT(port)) { + row = yajl_tree_get(port, new, yajl_t_object); + if (row && YAJL_IS_OBJECT(row)) { + yajl_val port_name = yajl_tree_get(row, name, yajl_t_string); + if (port_name && YAJL_IS_STRING(port_name)) { + portentry = ovs_stats_get_port(uuid); + if (portentry == NULL) + portentry = ovs_stats_new_port(NULL, uuid); + if (portentry) { + pthread_mutex_lock(&g_stats_lock); + sstrncpy(portentry->name, YAJL_GET_STRING(port_name), + sizeof(portentry->name)); + pthread_mutex_unlock(&g_stats_lock); + } + } + } + } else { + ERROR("Incorrect JSON Port data"); + return -1; + } + return 0; +} + +/* Delete port from global port list */ +static int ovs_stats_del_port(const char *uuid) { + port_list_t *prev_port = g_port_list_head; + for (port_list_t *port = g_port_list_head; port != NULL; + prev_port = port, port = port->next) { + if (strncmp(port->port_uuid, uuid, strlen(port->port_uuid)) == 0) { + if (port == g_port_list_head) + g_port_list_head = port->next; + else + prev_port->next = port->next; + sfree(port); + break; + } + } + return 0; +} + +/* Handle JSON with Port Table change event */ +static void ovs_stats_port_table_change_cb(yajl_val jupdates) { + /* Port Table update example JSON data + { + "Port": { + "ab107d6f-28a1-4257-b1cc-5b742821db8a": { + "new": { + "name": "br1", + "interfaces": [ + "uuid", + "33a289a0-1d34-4e46-a3c2-3e4066fbecc6" + ] + } + } + } + } + */ + const char *path[] = {"Port", NULL}; + yajl_val ports = yajl_tree_get(jupdates, path, yajl_t_object); + yajl_val port; + if (ports && YAJL_IS_OBJECT(ports)) { + for (size_t i = 0; i < YAJL_GET_OBJECT(ports)->len; i++) { + port = YAJL_GET_OBJECT(ports)->values[i]; + ovs_stats_update_port(YAJL_GET_OBJECT(ports)->keys[i], port); + } + } + return; +} + +/* Handle JSON with Port table initial values */ +static void ovs_stats_port_table_result_cb(yajl_val jresult, yajl_val jerror) { + if (YAJL_IS_NULL(jerror)) + ovs_stats_port_table_change_cb(jresult); + else + ERROR("%s: Error received from OvSDB. Table: Port", plugin_name); + return; +} + +/* Handle Port Table delete event */ +static void ovs_stats_port_table_delete_cb(yajl_val jupdates) { + const char *path[] = {"Port", NULL}; + yajl_val ports = yajl_tree_get(jupdates, path, yajl_t_object); + pthread_mutex_lock(&g_stats_lock); + if (ports && YAJL_IS_OBJECT(ports)) + for (size_t i = 0; i < YAJL_GET_OBJECT(ports)->len; i++) { + ovs_stats_del_port(YAJL_GET_OBJECT(ports)->keys[i]); + } + pthread_mutex_unlock(&g_stats_lock); + return; +} + +/* Update interface statistics */ +static int ovs_stats_update_iface_stats(port_list_t *port, yajl_val stats) { + yajl_val stat; + iface_counter counter_index = 0; + char *counter_name = NULL; + int64_t counter_value = 0; + if (stats && YAJL_IS_ARRAY(stats)) + for (size_t i = 0; i < YAJL_GET_ARRAY(stats)->len; i++) { + stat = YAJL_GET_ARRAY(stats)->values[i]; + if (!YAJL_IS_ARRAY(stat)) + return -1; + counter_name = YAJL_GET_STRING(YAJL_GET_ARRAY(stat)->values[0]); + counter_index = ovs_stats_counter_name_to_type(counter_name); + counter_value = YAJL_GET_INTEGER(YAJL_GET_ARRAY(stat)->values[1]); + if (counter_index == not_supported) + continue; + port->stats[counter_index] = counter_value; + } + + return 0; +} + +/* Update interface external_ids */ +static int ovs_stats_update_iface_ext_ids(port_list_t *port, yajl_val ext_ids) { + yajl_val ext_id; + char *key; + char *value; + + if (ext_ids && YAJL_IS_ARRAY(ext_ids)) + for (size_t i = 0; i < YAJL_GET_ARRAY(ext_ids)->len; i++) { + ext_id = YAJL_GET_ARRAY(ext_ids)->values[i]; + if (!YAJL_IS_ARRAY(ext_id)) + return -1; + key = YAJL_GET_STRING(YAJL_GET_ARRAY(ext_id)->values[0]); + value = YAJL_GET_STRING(YAJL_GET_ARRAY(ext_id)->values[1]); + if (key && value) { + if (strncmp(key, "iface-id", strlen(key)) == 0) + sstrncpy(port->ex_iface_id, value, sizeof(port->ex_iface_id)); + else if (strncmp(key, "vm-uuid", strlen(key)) == 0) + sstrncpy(port->ex_vm_id, value, sizeof(port->ex_vm_id)); + } + } + + return 0; +} + +/* Get interface statistic and external_ids */ +static int ovs_stats_update_iface(yajl_val iface) { + yajl_val row; + port_list_t *port = NULL; + if (iface && YAJL_IS_OBJECT(iface)) { + row = ovs_utils_get_value_by_key(iface, "new"); + if (row && YAJL_IS_OBJECT(row)) { + yajl_val iface_name = ovs_utils_get_value_by_key(row, "name"); + yajl_val iface_stats = ovs_utils_get_value_by_key(row, "statistics"); + yajl_val iface_ext_ids = ovs_utils_get_value_by_key(row, "external_ids"); + yajl_val iface_uuid = ovs_utils_get_value_by_key(row, "_uuid"); + if (iface_name && YAJL_IS_STRING(iface_name)) { + port = ovs_stats_get_port_by_name(YAJL_GET_STRING(iface_name)); + if (port == NULL) + return 0; + } + /* + * { + "statistics": [ + "map", + [ + [ + "collisions", + 0 + ], + . . . + [ + "tx_packets", + 0 + ] + ] + ] + } + Check that statistics is an array with 2 elements + */ + if (iface_stats && YAJL_IS_ARRAY(iface_stats) && + YAJL_GET_ARRAY(iface_stats)->len == 2) + ovs_stats_update_iface_stats(port, + YAJL_GET_ARRAY(iface_stats)->values[1]); + if (iface_ext_ids && YAJL_IS_ARRAY(iface_ext_ids)) + ovs_stats_update_iface_ext_ids( + port, YAJL_GET_ARRAY(iface_ext_ids)->values[1]); + if (iface_uuid && YAJL_IS_ARRAY(iface_uuid) && + YAJL_GET_ARRAY(iface_uuid)->len == 2) + sstrncpy(port->iface_uuid, + YAJL_GET_STRING(YAJL_GET_ARRAY(iface_uuid)->values[1]), + sizeof(port->iface_uuid)); + } + } else { + ERROR("Incorrect JSON Port data"); + return -1; + } + return 0; +} + +/* Handle JSON with Interface Table change event */ +static void ovs_stats_interface_table_change_cb(yajl_val jupdates) { + /* Interface Table update example JSON data + { + "Interface": { + "33a289a0-1d34-4e46-a3c2-3e4066fbecc6": { + "new": { + "name": "br1", + "statistics": [ + "map", + [ + [ + "collisions", + 0 + ], + [ + "rx_bytes", + 0 + ], + . . . + [ + "tx_packets", + 12617 + ] + ] + ], + "_uuid": [ + "uuid", + "33a289a0-1d34-4e46-a3c2-3e4066fbecc6" + ] + "external_ids": [ + "map", + [ + [ + "attached-mac", + "fa:16:3e:7c:1c:4b" + ], + [ + "iface-id", + "a61b7e2b-6951-488a-b4c6-6e91343960b2" + ], + [ + "iface-status", + "active" + ] + ] + ] + } + } + } + } + */ + const char *path[] = {"Interface", NULL}; + yajl_val ports = yajl_tree_get(jupdates, path, yajl_t_object); + pthread_mutex_lock(&g_stats_lock); + if (ports && YAJL_IS_OBJECT(ports)) + for (size_t i = 0; i < YAJL_GET_OBJECT(ports)->len; i++) + ovs_stats_update_iface(YAJL_GET_OBJECT(ports)->values[i]); + pthread_mutex_unlock(&g_stats_lock); + return; +} + +/* Handle JSON with Interface table initial values */ +static void ovs_stats_interface_table_result_cb(yajl_val jresult, + yajl_val jerror) { + if (YAJL_IS_NULL(jerror)) + ovs_stats_interface_table_change_cb(jresult); + else + ERROR("%s: Error received from OvSDB. Table: Interface", plugin_name); + return; +} + +/* Setup OVS DB table callbacks */ +static void ovs_stats_initialize(ovs_db_t *pdb) { + const char *bridge_columns[] = {"name", "ports", NULL}; + const char *port_columns[] = {"name", "interfaces", NULL}; + const char *interface_columns[] = {"name", "statistics", "_uuid", + "external_ids", NULL}; + + /* subscribe to a tables */ + ovs_db_table_cb_register(pdb, "Bridge", bridge_columns, + ovs_stats_bridge_table_change_cb, + ovs_stats_bridge_table_result_cb, + OVS_DB_TABLE_CB_FLAG_INITIAL | + OVS_DB_TABLE_CB_FLAG_INSERT | + OVS_DB_TABLE_CB_FLAG_MODIFY); + + ovs_db_table_cb_register(pdb, "Bridge", bridge_columns, + ovs_stats_bridge_table_delete_cb, NULL, + OVS_DB_TABLE_CB_FLAG_DELETE); + + ovs_db_table_cb_register(pdb, "Port", port_columns, + ovs_stats_port_table_change_cb, + ovs_stats_port_table_result_cb, + OVS_DB_TABLE_CB_FLAG_INITIAL | + OVS_DB_TABLE_CB_FLAG_INSERT | + OVS_DB_TABLE_CB_FLAG_MODIFY); + + ovs_db_table_cb_register(pdb, "Port", port_columns, + ovs_stats_port_table_delete_cb, NULL, + OVS_DB_TABLE_CB_FLAG_DELETE); + + ovs_db_table_cb_register(pdb, "Interface", interface_columns, + ovs_stats_interface_table_change_cb, + ovs_stats_interface_table_result_cb, + OVS_DB_TABLE_CB_FLAG_INITIAL | + OVS_DB_TABLE_CB_FLAG_INSERT | + OVS_DB_TABLE_CB_FLAG_MODIFY); +} + +/* Check if bridge is configured to be monitored in config file */ +static int ovs_stats_is_monitored_bridge(const char *br_name) { + /* if no bridges are configured, return true */ + if (g_monitored_bridge_list_head == NULL) + return 1; + + /* check if given bridge exists */ + if (ovs_stats_get_bridge(g_monitored_bridge_list_head, br_name) != NULL) + return 1; + + return 0; +} + +/* Delete all ports from port list */ +static void ovs_stats_free_port_list(port_list_t *head) { + for (port_list_t *i = head; i != NULL;) { + port_list_t *del = i; + i = i->next; + sfree(del); + } +} + +/* Delete all bridges from bridge list */ +static void ovs_stats_free_bridge_list(bridge_list_t *head) { + for (bridge_list_t *i = head; i != NULL;) { + bridge_list_t *del = i; + i = i->next; + sfree(del->name); + sfree(del); + } +} + +/* Handle OVSDB lost connection callback */ +static void ovs_stats_conn_terminate() { + WARNING("Lost connection to OVSDB server"); + pthread_mutex_lock(&g_stats_lock); + ovs_stats_free_bridge_list(g_bridge_list_head); + g_bridge_list_head = NULL; + ovs_stats_free_port_list(g_port_list_head); + g_port_list_head = NULL; + pthread_mutex_unlock(&g_stats_lock); +} + +/* Parse plugin configuration file and store the config + * in allocated memory. Returns negative value in case of error. + */ +static int ovs_stats_plugin_config(oconfig_item_t *ci) { + bridge_list_t *bridge; + char *br_name; + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("Address", child->key) == 0) { + if (cf_util_get_string_buffer(child, ovs_stats_cfg.ovs_db_node, + OVS_DB_ADDR_NODE_SIZE) != 0) { + ERROR("%s: parse '%s' option failed", plugin_name, child->key); + return -1; + } + } else if (strcasecmp("Port", child->key) == 0) { + if (cf_util_get_string_buffer(child, ovs_stats_cfg.ovs_db_serv, + OVS_DB_ADDR_SERVICE_SIZE) != 0) { + ERROR("%s: parse '%s' option failed", plugin_name, child->key); + return -1; + } + } else if (strcasecmp("Socket", child->key) == 0) { + if (cf_util_get_string_buffer(child, ovs_stats_cfg.ovs_db_unix, + OVS_DB_ADDR_UNIX_SIZE) != 0) { + ERROR("%s: parse '%s' option failed", plugin_name, child->key); + return -1; + } + } else if (strcasecmp("Bridges", child->key) == 0) { + for (int j = 0; j < child->values_num; j++) { + /* check value type */ + if (child->values[j].type != OCONFIG_TYPE_STRING) { + ERROR("%s: Wrong bridge name [idx=%d]. " + "Bridge name should be string", + plugin_name, j); + goto cleanup_fail; + } + /* get value */ + if ((br_name = strdup(child->values[j].value.string)) == NULL) { + ERROR("%s: strdup() copy bridge name fail", plugin_name); + goto cleanup_fail; + } + if ((bridge = ovs_stats_get_bridge(g_monitored_bridge_list_head, + br_name)) == NULL) { + if ((bridge = calloc(1, sizeof(bridge_list_t))) == NULL) { + ERROR("%s: Error allocating memory for bridge", plugin_name); + goto cleanup_fail; + } else { + pthread_mutex_lock(&g_stats_lock); + /* store bridge name */ + bridge->name = br_name; + bridge->next = g_monitored_bridge_list_head; + g_monitored_bridge_list_head = bridge; + pthread_mutex_unlock(&g_stats_lock); + DEBUG("%s: found monitored interface \"%s\"", plugin_name, br_name); + } + } + } + } else { + WARNING("%s: option '%s' not allowed here", plugin_name, child->key); + goto cleanup_fail; + } + } + return 0; + +cleanup_fail: + ovs_stats_free_bridge_list(g_monitored_bridge_list_head); + return -1; +} + +/* Initialize OvS Stats plugin*/ +static int ovs_stats_plugin_init(void) { + ovs_db_callback_t cb = {.post_conn_init = ovs_stats_initialize, + .post_conn_terminate = ovs_stats_conn_terminate}; + + INFO("%s: Connecting to OVS DB using address=%s, service=%s, unix=%s", + plugin_name, ovs_stats_cfg.ovs_db_node, ovs_stats_cfg.ovs_db_serv, + ovs_stats_cfg.ovs_db_unix); + /* connect to OvS DB */ + if ((g_ovs_db = ovs_db_init (ovs_stats_cfg.ovs_db_node, + ovs_stats_cfg.ovs_db_serv, + ovs_stats_cfg.ovs_db_unix, &cb)) == NULL) { + ERROR("%s: plugin: failed to connect to OvS DB server", plugin_name); + return -1; + } + int err = pthread_mutex_init(&g_stats_lock, NULL); + if (err < 0) { + ERROR("%s: plugin: failed to initialize cache lock", plugin_name); + ovs_db_destroy(g_ovs_db); + return -1; + } + return 0; +} + +/* OvS stats read callback. Read bridge/port information and submit it*/ +static int ovs_stats_plugin_read(__attribute__((unused)) user_data_t *ud) { + bridge_list_t *bridge; + port_list_t *port; + char devname[PORT_NAME_SIZE_MAX * 2]; + + pthread_mutex_lock(&g_stats_lock); + for (bridge = g_bridge_list_head; bridge != NULL; bridge = bridge->next) { + if (ovs_stats_is_monitored_bridge(bridge->name)) { + for (port = g_port_list_head; port != NULL; port = port->next) + if (port->br == bridge) { + if (strlen(port->name) == 0) + /* Skip port w/o name. This is possible when read callback + * is called after Interface Table update callback but before + * Port table Update callback. Will add this port on next read */ + continue; + meta_data_t *meta = meta_data_create(); + if (meta != NULL) { + meta_data_add_string(meta, "uuid", port->iface_uuid); + if (strlen(port->ex_vm_id)) + meta_data_add_string(meta, "vm-uuid", port->ex_vm_id); + if (strlen(port->ex_iface_id)) + meta_data_add_string(meta, "iface-id", port->ex_iface_id); + } + snprintf(devname, sizeof(devname), "%s.%s", bridge->name, port->name); + ovs_stats_submit_one(devname, "if_collisions", NULL, + port->stats[collisions], meta); + ovs_stats_submit_two(devname, "if_dropped", NULL, + port->stats[rx_dropped], port->stats[tx_dropped], + meta); + ovs_stats_submit_two(devname, "if_errors", NULL, + port->stats[rx_errors], port->stats[tx_errors], + meta); + ovs_stats_submit_two(devname, "if_packets", NULL, + port->stats[rx_packets], port->stats[tx_packets], + meta); + ovs_stats_submit_one(devname, "if_rx_errors", "crc", + port->stats[rx_crc_err], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "frame", + port->stats[rx_frame_err], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "over", + port->stats[rx_over_err], meta); + ovs_stats_submit_one(devname, "if_rx_octets", NULL, + port->stats[rx_bytes], meta); + ovs_stats_submit_one(devname, "if_tx_octets", NULL, + port->stats[tx_bytes], meta); + ovs_stats_submit_two(devname, "if_packets", "1_to_64_packets", + port->stats[rx_1_to_64_packets], + port->stats[tx_1_to_64_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "65_to_127_packets", + port->stats[rx_65_to_127_packets], + port->stats[tx_65_to_127_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "128_to_255_packets", + port->stats[rx_128_to_255_packets], + port->stats[tx_128_to_255_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "256_to_511_packets", + port->stats[rx_256_to_511_packets], + port->stats[tx_256_to_511_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "512_to_1023_packets", + port->stats[rx_512_to_1023_packets], + port->stats[tx_512_to_1023_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "1024_to_1518_packets", + port->stats[rx_1024_to_1522_packets], + port->stats[tx_1024_to_1522_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "1523_to_max_packets", + port->stats[rx_1523_to_max_packets], + port->stats[tx_1523_to_max_packets], meta); + ovs_stats_submit_two(devname, "if_packets", "broadcast_packets", + port->stats[rx_broadcast_packets], + port->stats[tx_broadcast_packets], meta); + ovs_stats_submit_one(devname, "if_multicast", "tx_multicast_packets", + port->stats[tx_multicast_packets], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "rx_undersized_errors", + port->stats[rx_undersized_errors], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "rx_oversize_errors", + port->stats[rx_oversize_errors], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "rx_fragmented_errors", + port->stats[rx_fragmented_errors], meta); + ovs_stats_submit_one(devname, "if_rx_errors", "rx_jabber_errors", + port->stats[rx_jabber_errors], meta); + + meta_data_destroy(meta); + } + } else + continue; + } + pthread_mutex_unlock(&g_stats_lock); + return 0; +} + +/* Shutdown OvS Stats plugin */ +static int ovs_stats_plugin_shutdown(void) { + pthread_mutex_lock(&g_stats_lock); + DEBUG("OvS Statistics plugin shutting down"); + ovs_db_destroy(g_ovs_db); + ovs_stats_free_bridge_list(g_bridge_list_head); + ovs_stats_free_bridge_list(g_monitored_bridge_list_head); + ovs_stats_free_port_list(g_port_list_head); + pthread_mutex_unlock(&g_stats_lock); + pthread_mutex_destroy(&g_stats_lock); + return 0; +} + +/* Register OvS Stats plugin callbacks */ +void module_register(void) { + plugin_register_complex_config(plugin_name, ovs_stats_plugin_config); + plugin_register_init(plugin_name, ovs_stats_plugin_init); + plugin_register_complex_read(NULL, plugin_name, ovs_stats_plugin_read, 0, + NULL); + plugin_register_shutdown(plugin_name, ovs_stats_plugin_shutdown); +} diff --git a/src/perl.c b/src/perl.c index ea53fbf3..e922badf 100644 --- a/src/perl.c +++ b/src/perl.c @@ -38,9 +38,7 @@ #undef DONT_POISON_SPRINTF_YET -#if HAVE_STDBOOL_H #include -#endif #include #include @@ -887,8 +885,8 @@ static char *get_module_name(char *buf, size_t buf_len, const char *module) { else status = ssnprintf(buf, buf_len, "%s::%s", base_name, module); if ((status < 0) || ((unsigned int)status >= buf_len)) - return (NULL); - return (buf); + return NULL; + return buf; } /* char *get_module_name */ /* @@ -2499,7 +2497,7 @@ static int perl_config_loadplugin(pTHX_ oconfig_item_t *ci) { if (NULL == get_module_name(module_name, sizeof(module_name), value)) { log_err("Invalid module name %s", value); - return (1); + return 1; } if (0 != init_pi(perl_argc, perl_argv)) @@ -2719,5 +2717,3 @@ void module_register(void) { plugin_register_complex_config("perl", perl_config); return; } /* void module_register (void) */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/pf.c b/src/pf.c index 533dffed..82adc53b 100644 --- a/src/pf.c +++ b/src/pf.c @@ -86,7 +86,7 @@ static int pf_read(void) { char errbuf[1024]; ERROR("pf plugin: Unable to open %s: %s", pf_device, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } status = ioctl(fd, DIOCGETSTATUS, &state); @@ -95,14 +95,14 @@ static int pf_read(void) { ERROR("pf plugin: ioctl(DIOCGETSTATUS) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (-1); + return -1; } close(fd); if (!state.running) { WARNING("pf plugin: PF is not running."); - return (-1); + return -1; } for (int i = 0; i < PFRES_MAX; i++) @@ -121,7 +121,7 @@ static int pf_read(void) { pf_submit("pf_states", "current", (uint32_t)state.states, /* is gauge = */ 1); - return (0); + return 0; } /* int pf_read */ void module_register(void) { plugin_register_read("pf", pf_read); } diff --git a/src/pinba.c b/src/pinba.c index 7fd23a02..57ccc7ab 100644 --- a/src/pinba.c +++ b/src/pinba.c @@ -141,7 +141,7 @@ static derive_t float_counter_get(const float_counter_t *fc, /* {{{ */ ret = (derive_t)(fc->i * factor); ret += (derive_t)(fc->n / (1000000000 / factor)); - return (ret); + return ret; } /* }}} derive_t float_counter_get */ static void strset(char **str, const char *new) /* {{{ */ @@ -218,7 +218,7 @@ static unsigned int service_statnode_collect(pinba_statnode_t *res, /* {{{ */ /* reset node */ node->mem_peak = NAN; - return (index + 1); + return index + 1; } /* }}} unsigned int service_statnode_collect */ static void service_statnode_process(pinba_statnode_t *node, /* {{{ */ @@ -263,7 +263,7 @@ static void service_process_request(Pinba__Request *request) /* {{{ */ static int pb_del_socket(pinba_socket_t *s, /* {{{ */ nfds_t index) { if (index >= s->fd_num) - return (EINVAL); + return EINVAL; close(s->fd[index].fd); s->fd[index].fd = -1; @@ -275,7 +275,7 @@ static int pb_del_socket(pinba_socket_t *s, /* {{{ */ } s->fd_num--; - return (0); + return 0; } /* }}} int pb_del_socket */ static int pb_add_socket(pinba_socket_t *s, /* {{{ */ @@ -289,7 +289,7 @@ static int pb_add_socket(pinba_socket_t *s, /* {{{ */ "%i sockets. Please complain to the collectd developers so we can " "raise the limit.", PINBA_MAX_SOCKETS); - return (-1); + return -1; } fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); @@ -297,7 +297,7 @@ static int pb_add_socket(pinba_socket_t *s, /* {{{ */ char errbuf[1024]; ERROR("pinba plugin: socket(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (0); + return 0; } tmp = 1; @@ -314,7 +314,7 @@ static int pb_add_socket(pinba_socket_t *s, /* {{{ */ ERROR("pinba plugin: bind(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (0); + return 0; } s->fd[s->fd_num].fd = fd; @@ -322,7 +322,7 @@ static int pb_add_socket(pinba_socket_t *s, /* {{{ */ s->fd[s->fd_num].revents = 0; s->fd_num++; - return (0); + return 0; } /* }}} int pb_add_socket */ static pinba_socket_t *pinba_socket_open(const char *node, /* {{{ */ @@ -344,7 +344,7 @@ static pinba_socket_t *pinba_socket_open(const char *node, /* {{{ */ status = getaddrinfo(node, service, &ai_hints, &ai_list); if (status != 0) { ERROR("pinba plugin: getaddrinfo(3) failed: %s", gai_strerror(status)); - return (NULL); + return NULL; } assert(ai_list != NULL); @@ -352,7 +352,7 @@ static pinba_socket_t *pinba_socket_open(const char *node, /* {{{ */ if (s == NULL) { freeaddrinfo(ai_list); ERROR("pinba plugin: calloc failed."); - return (NULL); + return NULL; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -370,7 +370,7 @@ static pinba_socket_t *pinba_socket_open(const char *node, /* {{{ */ s = NULL; } - return (s); + return s; } /* }}} pinba_socket_open */ static void pinba_socket_free(pinba_socket_t *socket) /* {{{ */ @@ -395,12 +395,12 @@ static int pinba_process_stats_packet(const uint8_t *buffer, /* {{{ */ request = pinba__request__unpack(NULL, buffer_size, buffer); if (!request) - return (-1); + return -1; service_process_request(request); pinba__request__free_unpacked(request, NULL); - return (0); + return 0; } /* }}} int pinba_process_stats_packet */ static int pinba_udp_read_callback_fn(int sock) /* {{{ */ @@ -426,10 +426,10 @@ static int pinba_udp_read_callback_fn(int sock) /* {{{ */ WARNING("pinba plugin: recvfrom(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } else if (status == 0) { DEBUG("pinba plugin: recvfrom(2) returned unexpected status zero."); - return (-1); + return -1; } else /* if (status > 0) */ { assert(((size_t)status) < buffer_size); @@ -439,13 +439,13 @@ static int pinba_udp_read_callback_fn(int sock) /* {{{ */ status = pinba_process_stats_packet(buffer, buffer_size); if (status != 0) DEBUG("pinba plugin: Parsing packet failed."); - return (status); + return status; } } /* while (42) */ /* not reached */ assert(23 == 42); - return (-1); + return -1; } /* }}} void pinba_udp_read_callback_fn */ static int receive_loop(void) /* {{{ */ @@ -455,7 +455,7 @@ static int receive_loop(void) /* {{{ */ s = pinba_socket_open(conf_node, conf_service); if (s == NULL) { ERROR("pinba plugin: Collector thread is exiting prematurely."); - return (-1); + return -1; } while (!collector_thread_do_shutdown) { @@ -477,7 +477,7 @@ static int receive_loop(void) /* {{{ */ ERROR("pinba plugin: poll(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); pinba_socket_free(s); - return (-1); + return -1; } for (nfds_t i = 0; i < s->fd_num; i++) { @@ -493,7 +493,7 @@ static int receive_loop(void) /* {{{ */ pinba_socket_free(s); s = NULL; - return (0); + return 0; } /* }}} int receive_loop */ static void *collector_thread(void *arg) /* {{{ */ @@ -503,7 +503,7 @@ static void *collector_thread(void *arg) /* {{{ */ memset(&collector_thread_id, 0, sizeof(collector_thread_id)); collector_thread_running = 0; pthread_exit(NULL); - return (NULL); + return NULL; } /* }}} void *collector_thread */ /* @@ -519,7 +519,7 @@ static int pinba_config_view(const oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &name); if (status != 0) - return (status); + return status; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -547,7 +547,7 @@ static int pinba_config_view(const oconfig_item_t *ci) /* {{{ */ sfree(server); sfree(script); - return (status); + return status; } /* }}} int pinba_config_view */ static int plugin_config(oconfig_item_t *ci) /* {{{ */ @@ -571,7 +571,7 @@ static int plugin_config(oconfig_item_t *ci) /* {{{ */ pthread_mutex_unlock(&stat_nodes_lock); - return (0); + return 0; } /* }}} int pinba_config */ static int plugin_init(void) /* {{{ */ @@ -587,7 +587,7 @@ static int plugin_init(void) /* {{{ */ } if (collector_thread_running) - return (0); + return 0; status = plugin_thread_create(&collector_thread_id, /* attrs = */ NULL, collector_thread, @@ -596,11 +596,11 @@ static int plugin_init(void) /* {{{ */ char errbuf[1024]; ERROR("pinba plugin: pthread_create(3) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } collector_thread_running = 1; - return (0); + return 0; } /* }}} */ static int plugin_shutdown(void) /* {{{ */ @@ -622,7 +622,7 @@ static int plugin_shutdown(void) /* {{{ */ collector_thread_do_shutdown = 0; } /* if (collector_thread_running) */ - return (0); + return 0; } /* }}} int plugin_shutdown */ static int plugin_submit(const pinba_statnode_t *res) /* {{{ */ @@ -663,7 +663,7 @@ static int plugin_submit(const pinba_statnode_t *res) /* {{{ */ sstrncpy(vl.type_instance, "peak", sizeof(vl.type_instance)); plugin_dispatch_values(&vl); - return (0); + return 0; } /* }}} int plugin_submit */ static int plugin_read(void) /* {{{ */ @@ -685,5 +685,3 @@ void module_register(void) /* {{{ */ plugin_register_read("pinba", plugin_read); plugin_register_shutdown("pinba", plugin_shutdown); } /* }}} void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/ping.c b/src/ping.c index 82de59f0..6e056e46 100644 --- a/src/ping.c +++ b/src/ping.c @@ -219,7 +219,7 @@ static int ping_dispatch_all(pingobj_t *pingobj) /* {{{ */ } /* }}} ping_max_missed */ } /* }}} for (iter) */ - return (0); + return 0; } /* }}} int ping_dispatch_all */ static void *ping_thread(void *arg) /* {{{ */ @@ -242,7 +242,7 @@ static void *ping_thread(void *arg) /* {{{ */ ERROR("ping plugin: ping_construct failed."); ping_thread_error = 1; pthread_mutex_unlock(&ping_lock); - return ((void *)-1); + return (void *)-1; } if (ping_source != NULL) @@ -278,7 +278,7 @@ static void *ping_thread(void *arg) /* {{{ */ ERROR("ping plugin: No host could be added to ping object. Giving up."); ping_thread_error = 1; pthread_mutex_unlock(&ping_lock); - return ((void *)-1); + return (void *)-1; } /* Set up `ts_int' */ @@ -342,7 +342,7 @@ static void *ping_thread(void *arg) /* {{{ */ pthread_mutex_unlock(&ping_lock); ping_destroy(pingobj); - return ((void *)0); + return (void *)0; } /* }}} void *ping_thread */ static int start_thread(void) /* {{{ */ @@ -353,7 +353,7 @@ static int start_thread(void) /* {{{ */ if (ping_thread_loop != 0) { pthread_mutex_unlock(&ping_lock); - return (0); + return 0; } ping_thread_loop = 1; @@ -364,11 +364,11 @@ static int start_thread(void) /* {{{ */ ping_thread_loop = 0; ERROR("ping plugin: Starting thread failed."); pthread_mutex_unlock(&ping_lock); - return (-1); + return -1; } pthread_mutex_unlock(&ping_lock); - return (0); + return 0; } /* }}} int start_thread */ static int stop_thread(void) /* {{{ */ @@ -379,7 +379,7 @@ static int stop_thread(void) /* {{{ */ if (ping_thread_loop == 0) { pthread_mutex_unlock(&ping_lock); - return (-1); + return -1; } ping_thread_loop = 0; @@ -397,14 +397,14 @@ static int stop_thread(void) /* {{{ */ ping_thread_error = 0; pthread_mutex_unlock(&ping_lock); - return (status); + return status; } /* }}} int stop_thread */ static int ping_init(void) /* {{{ */ { if (hostlist_head == NULL) { NOTICE("ping plugin: No hosts have been configured."); - return (-1); + return -1; } if (ping_timeout > ping_interval) { @@ -427,7 +427,7 @@ static int ping_init(void) /* {{{ */ } #endif - return (start_thread()); + return start_thread(); } /* }}} int ping_init */ static int config_set_string(const char *name, /* {{{ */ @@ -439,13 +439,13 @@ static int config_set_string(const char *name, /* {{{ */ char errbuf[1024]; ERROR("ping plugin: Setting `%s' to `%s' failed: strdup failed: %s", name, value, sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } if (*var != NULL) free(*var); *var = tmp; - return (0); + return 0; } /* }}} int config_set_string */ static int ping_config(const char *key, const char *value) /* {{{ */ @@ -459,7 +459,7 @@ static int ping_config(const char *key, const char *value) /* {{{ */ char errbuf[1024]; ERROR("ping plugin: malloc failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } host = strdup(value); @@ -468,7 +468,7 @@ static int ping_config(const char *key, const char *value) /* {{{ */ sfree(hl); ERROR("ping plugin: strdup failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (1); + return 1; } hl->host = host; @@ -482,13 +482,13 @@ static int ping_config(const char *key, const char *value) /* {{{ */ } else if (strcasecmp(key, "SourceAddress") == 0) { int status = config_set_string(key, &ping_source, value); if (status != 0) - return (status); + return status; } #ifdef HAVE_OPING_1_3 else if (strcasecmp(key, "Device") == 0) { int status = config_set_string(key, &ping_device, value); if (status != 0) - return (status); + return status; } #endif else if (strcasecmp(key, "TTL") == 0) { @@ -514,7 +514,7 @@ static int ping_config(const char *key, const char *value) /* {{{ */ ping_data = malloc(size + 1); if (ping_data == NULL) { ERROR("ping plugin: malloc failed."); - return (1); + return 1; } /* Note: By default oping is using constant string @@ -546,10 +546,10 @@ static int ping_config(const char *key, const char *value) /* {{{ */ if (ping_max_missed < 0) INFO("ping plugin: MaxMissed < 0, disabled re-resolving of hosts"); } else { - return (-1); + return -1; } - return (0); + return 0; } /* }}} int ping_config */ static void submit(const char *host, const char *type, /* {{{ */ @@ -581,7 +581,7 @@ static int ping_read(void) /* {{{ */ start_thread(); - return (-1); + return -1; } /* if (ping_thread_error != 0) */ for (hostlist_t *hl = hostlist_head; hl != NULL; hl = hl->next) /* {{{ */ @@ -642,7 +642,7 @@ static int ping_read(void) /* {{{ */ submit(hl->host, "ping_droprate", droprate); } /* }}} for (hl = hostlist_head; hl != NULL; hl = hl->next) */ - return (0); + return 0; } /* }}} int ping_read */ static int ping_shutdown(void) /* {{{ */ @@ -651,7 +651,7 @@ static int ping_shutdown(void) /* {{{ */ INFO("ping plugin: Shutting down thread."); if (stop_thread() < 0) - return (-1); + return -1; hl = hostlist_head; while (hl != NULL) { @@ -670,7 +670,7 @@ static int ping_shutdown(void) /* {{{ */ ping_data = NULL; } - return (0); + return 0; } /* }}} int ping_shutdown */ void module_register(void) { @@ -679,5 +679,3 @@ void module_register(void) { plugin_register_read("ping", ping_read); plugin_register_shutdown("ping", ping_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/postgresql.c b/src/postgresql.c index 2af89886..d0c0ae13 100644 --- a/src/postgresql.c +++ b/src/postgresql.c @@ -407,7 +407,7 @@ static PGresult *c_psql_exec_query_params(c_psql_database_t *db, udb_query_t *q, char interval[64]; if ((data == NULL) || (data->params_num == 0)) - return (c_psql_exec_query_noparams(db, q)); + return c_psql_exec_query_noparams(db, q); assert(db->max_params_num >= data->params_num); @@ -438,8 +438,7 @@ static PGresult *c_psql_exec_query_params(c_psql_database_t *db, udb_query_t *q, } return PQexecParams(db->conn, udb_query_get_statement(q), data->params_num, - NULL, (const char *const *)params, NULL, NULL, - /* return text data */ 0); + NULL, (const char *const*)params, NULL, NULL, 0); } /* c_psql_exec_query_params */ /* db->db_lock must be locked when calling this function */ @@ -1009,7 +1008,7 @@ static int config_query_param_add(udb_query_t *q, oconfig_item_t *ci) { } data->params_num++; - return (0); + return 0; } /* config_query_param_add */ static int config_query_callback(udb_query_t *q, oconfig_item_t *ci) { @@ -1018,7 +1017,7 @@ static int config_query_callback(udb_query_t *q, oconfig_item_t *ci) { log_err("Option not allowed within a Query block: `%s'", ci->key); - return (-1); + return -1; } /* config_query_callback */ static int config_add_writer(oconfig_item_t *ci, c_psql_writer_t *src_writers, @@ -1265,5 +1264,3 @@ void module_register(void) { plugin_register_complex_config("postgresql", c_psql_config); plugin_register_shutdown("postgresql", c_psql_shutdown); } /* module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/powerdns.c b/src/powerdns.c index f2149ef2..0b08b298 100644 --- a/src/powerdns.c +++ b/src/powerdns.c @@ -395,7 +395,7 @@ static int powerdns_get_data_dgram(list_item_t *item, /* {{{ */ sd = socket(PF_UNIX, item->socktype, 0); if (sd < 0) { FUNC_ERROR("socket"); - return (-1); + return -1; } sa_unix.sun_family = AF_UNIX; @@ -407,7 +407,7 @@ static int powerdns_get_data_dgram(list_item_t *item, /* {{{ */ if ((status != 0) && (errno != ENOENT)) { SOCK_ERROR("unlink", sa_unix.sun_path); close(sd); - return (-1); + return -1; } do /* while (0) */ @@ -465,13 +465,13 @@ static int powerdns_get_data_dgram(list_item_t *item, /* {{{ */ unlink(sa_unix.sun_path); if (status != 0) - return (-1); + return -1; assert(buffer_size > 0); buffer = malloc(buffer_size); if (buffer == NULL) { FUNC_ERROR("malloc"); - return (-1); + return -1; } memcpy(buffer, temp, buffer_size - 1); @@ -480,7 +480,7 @@ static int powerdns_get_data_dgram(list_item_t *item, /* {{{ */ *ret_buffer = buffer; *ret_buffer_size = buffer_size; - return (0); + return 0; } /* }}} int powerdns_get_data_dgram */ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ @@ -496,7 +496,7 @@ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ sd = socket(PF_UNIX, item->socktype, 0); if (sd < 0) { FUNC_ERROR("socket"); - return (-1); + return -1; } struct timeval timeout; @@ -506,7 +506,7 @@ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ if (status != 0) { FUNC_ERROR("setsockopt"); close(sd); - return (-1); + return -1; } status = @@ -514,7 +514,7 @@ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ if (status != 0) { SOCK_ERROR("connect", item->sockaddr.sun_path); close(sd); - return (-1); + return -1; } /* strlen + 1, because we need to send the terminating NULL byte, too. */ @@ -523,7 +523,7 @@ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ if (status < 0) { SOCK_ERROR("send", item->sockaddr.sun_path); close(sd); - return (-1); + return -1; } while (42) { @@ -558,18 +558,18 @@ static int powerdns_get_data_stream(list_item_t *item, /* {{{ */ *ret_buffer_size = buffer_size; } - return (status); + return status; } /* }}} int powerdns_get_data_stream */ static int powerdns_get_data(list_item_t *item, char **ret_buffer, size_t *ret_buffer_size) { if (item->socktype == SOCK_DGRAM) - return (powerdns_get_data_dgram(item, ret_buffer, ret_buffer_size)); + return powerdns_get_data_dgram(item, ret_buffer, ret_buffer_size); else if (item->socktype == SOCK_STREAM) - return (powerdns_get_data_stream(item, ret_buffer, ret_buffer_size)); + return powerdns_get_data_stream(item, ret_buffer, ret_buffer_size); else { ERROR("powerdns plugin: Unknown socket type: %i", (int)item->socktype); - return (-1); + return -1; } } /* int powerdns_get_data */ @@ -592,12 +592,12 @@ static int powerdns_read_server(list_item_t *item) /* {{{ */ item->command = strdup(SERVER_COMMAND); if (item->command == NULL) { ERROR("powerdns plugin: strdup failed."); - return (-1); + return -1; } status = powerdns_get_data(item, &buffer, &buffer_size); if (status != 0) - return (-1); + return -1; if (item->fields_num != 0) { fields = (const char *const *)item->fields; @@ -640,7 +640,7 @@ static int powerdns_read_server(list_item_t *item) /* {{{ */ sfree(buffer); - return (0); + return 0; } /* }}} int powerdns_read_server */ /* @@ -656,7 +656,7 @@ static int powerdns_update_recursor_command(list_item_t *li) /* {{{ */ int status; if (li == NULL) - return (0); + return 0; if (li->fields_num < 1) { sstrncpy(buffer, RECURSOR_COMMAND, sizeof(buffer)); @@ -667,7 +667,7 @@ static int powerdns_update_recursor_command(list_item_t *li) /* {{{ */ /* seperator = */ " "); if (status < 0) { ERROR("powerdns plugin: strjoin failed."); - return (-1); + return -1; } buffer[sizeof(buffer) - 1] = 0; size_t len = strlen(buffer); @@ -682,10 +682,10 @@ static int powerdns_update_recursor_command(list_item_t *li) /* {{{ */ li->command = strdup(buffer); if (li->command == NULL) { ERROR("powerdns plugin: strdup failed."); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int powerdns_update_recursor_command */ static int powerdns_read_recursor(list_item_t *item) /* {{{ */ @@ -706,7 +706,7 @@ static int powerdns_read_recursor(list_item_t *item) /* {{{ */ status = powerdns_update_recursor_command(item); if (status != 0) { ERROR("powerdns plugin: powerdns_update_recursor_command failed."); - return (-1); + return -1; } DEBUG("powerdns plugin: powerdns_read_recursor: item->command = %s;", @@ -717,14 +717,14 @@ static int powerdns_read_recursor(list_item_t *item) /* {{{ */ status = powerdns_get_data(item, &buffer, &buffer_size); if (status != 0) { ERROR("powerdns plugin: powerdns_get_data failed."); - return (-1); + return -1; } keys_list = strdup(item->command); if (keys_list == NULL) { FUNC_ERROR("strdup"); sfree(buffer); - return (-1); + return -1; } key_saveptr = NULL; @@ -747,7 +747,7 @@ static int powerdns_read_recursor(list_item_t *item) /* {{{ */ sfree(buffer); sfree(keys_list); - return (0); + return 0; } /* }}} int powerdns_read_recursor */ static int powerdns_config_add_collect(list_item_t *li, /* {{{ */ @@ -757,21 +757,21 @@ static int powerdns_config_add_collect(list_item_t *li, /* {{{ */ if (ci->values_num < 1) { WARNING("powerdns plugin: The `Collect' option needs " "at least one argument."); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING("powerdns plugin: Only string arguments are allowed to " "the `Collect' option."); - return (-1); + return -1; } temp = realloc(li->fields, sizeof(char *) * (li->fields_num + ci->values_num)); if (temp == NULL) { WARNING("powerdns plugin: realloc failed."); - return (-1); + return -1; } li->fields = temp; @@ -787,7 +787,7 @@ static int powerdns_config_add_collect(list_item_t *li, /* {{{ */ /* Invalidate a previously computed command */ sfree(li->command); - return (0); + return 0; } /* }}} int powerdns_config_add_collect */ static int powerdns_config_add_server(oconfig_item_t *ci) /* {{{ */ @@ -800,20 +800,20 @@ static int powerdns_config_add_server(oconfig_item_t *ci) /* {{{ */ if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("powerdns plugin: `%s' needs exactly one string argument.", ci->key); - return (-1); + return -1; } item = calloc(1, sizeof(*item)); if (item == NULL) { ERROR("powerdns plugin: calloc failed."); - return (-1); + return -1; } item->instance = strdup(ci->values[0].value.string); if (item->instance == NULL) { ERROR("powerdns plugin: strdup failed."); sfree(item); - return (-1); + return -1; } /* @@ -832,7 +832,7 @@ static int powerdns_config_add_server(oconfig_item_t *ci) /* {{{ */ } else { /* We must never get here.. */ assert(0); - return (-1); + return -1; } status = 0; @@ -879,13 +879,13 @@ static int powerdns_config_add_server(oconfig_item_t *ci) /* {{{ */ if (status != 0) { sfree(socket_temp); sfree(item); - return (-1); + return -1; } DEBUG("powerdns plugin: Add server: instance = %s;", item->instance); sfree(socket_temp); - return (0); + return 0; } /* }}} int powerdns_config_add_server */ static int powerdns_config(oconfig_item_t *ci) /* {{{ */ @@ -897,7 +897,7 @@ static int powerdns_config(oconfig_item_t *ci) /* {{{ */ if (list == NULL) { ERROR("powerdns plugin: `llist_create' failed."); - return (-1); + return -1; } } @@ -915,7 +915,7 @@ static int powerdns_config(oconfig_item_t *ci) /* {{{ */ } else { char *temp = strdup(option->values[0].value.string); if (temp == NULL) - return (1); + return 1; sfree(local_sockpath); local_sockpath = temp; } @@ -924,7 +924,7 @@ static int powerdns_config(oconfig_item_t *ci) /* {{{ */ } } /* for (i = 0; i < ci->children_num; i++) */ - return (0); + return 0; } /* }}} int powerdns_config */ static int powerdns_read(void) { @@ -933,12 +933,12 @@ static int powerdns_read(void) { item->func(item); } - return (0); + return 0; } /* static int powerdns_read */ static int powerdns_shutdown(void) { if (list == NULL) - return (0); + return 0; for (llentry_t *e = llist_head(list); e != NULL; e = e->next) { list_item_t *item = (list_item_t *)e->value; @@ -952,7 +952,7 @@ static int powerdns_shutdown(void) { llist_destroy(list); list = NULL; - return (0); + return 0; } /* static int powerdns_shutdown */ void module_register(void) { @@ -960,5 +960,3 @@ void module_register(void) { plugin_register_read("powerdns", powerdns_read); plugin_register_shutdown("powerdns", powerdns_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 fdm=marker : */ diff --git a/src/processes.c b/src/processes.c index 87c96c88..82a48590 100644 --- a/src/processes.c +++ b/src/processes.c @@ -32,6 +32,7 @@ * Manuel Sanmartin * Clément Stenac * Cosmin Ioiart + * Pavel Rochnyack **/ #include "collectd.h" @@ -159,12 +160,14 @@ #endif #endif -typedef struct procstat_entry_s { +#define PROCSTAT_NAME_LEN 256 +typedef struct process_entry_s { unsigned long id; - unsigned long age; + char name[PROCSTAT_NAME_LEN]; unsigned long num_proc; unsigned long num_lwp; + unsigned long num_fd; unsigned long vmem_size; unsigned long vmem_rss; unsigned long vmem_data; @@ -188,10 +191,31 @@ typedef struct procstat_entry_s { derive_t cswitch_invol; _Bool has_cswitch; + _Bool has_fd; +} process_entry_t; + +typedef struct procstat_entry_s { + unsigned long id; + unsigned long age; + + derive_t vmem_minflt_counter; + derive_t vmem_majflt_counter; + + derive_t cpu_user_counter; + derive_t cpu_system_counter; + + /* io data */ + derive_t io_rchar; + derive_t io_wchar; + derive_t io_syscr; + derive_t io_syscw; + + derive_t cswitch_vol; + derive_t cswitch_invol; + struct procstat_entry_s *next; } procstat_entry_t; -#define PROCSTAT_NAME_LEN 256 typedef struct procstat { char name[PROCSTAT_NAME_LEN]; #if HAVE_REGEX_H @@ -200,6 +224,7 @@ typedef struct procstat { unsigned long num_proc; unsigned long num_lwp; + unsigned long num_fd; unsigned long vmem_size; unsigned long vmem_rss; unsigned long vmem_data; @@ -221,6 +246,9 @@ typedef struct procstat { derive_t cswitch_vol; derive_t cswitch_invol; + _Bool report_fd_num; + _Bool report_ctx_switch; + struct procstat *next; struct procstat_entry_s *instances; } procstat_t; @@ -229,6 +257,7 @@ static procstat_t *list_head_g = NULL; static _Bool want_init = 1; static _Bool report_ctx_switch = 0; +static _Bool report_fd_num = 0; #if HAVE_THREAD_INFO static mach_port_t port_host_self; @@ -240,7 +269,7 @@ static mach_msg_type_number_t pset_list_len; #elif KERNEL_LINUX static long pagesize_g; -static void ps_fill_details(const procstat_t *ps, procstat_entry_t *entry); +static void ps_fill_details(const procstat_t *ps, process_entry_t *entry); /* #endif KERNEL_LINUX */ #elif HAVE_LIBKVM_GETPROCS && \ @@ -265,7 +294,7 @@ int getargs(void *processBuffer, int bufferLen, char *argsBuffer, int argsLen); /* put name of process from config to list_head_g tree * list_head_g is a list of 'procstat_t' structs with * processes names we want to watch */ -static void ps_list_register(const char *name, const char *regexp) { +static procstat_t *ps_list_register(const char *name, const char *regexp) { procstat_t *new; procstat_t *ptr; int status; @@ -273,10 +302,20 @@ static void ps_list_register(const char *name, const char *regexp) { new = calloc(1, sizeof(*new)); if (new == NULL) { ERROR("processes plugin: ps_list_register: calloc failed."); - return; + return NULL; } sstrncpy(new->name, name, sizeof(new->name)); + new->io_rchar = -1; + new->io_wchar = -1; + new->io_syscr = -1; + new->io_syscw = -1; + new->cswitch_vol = -1; + new->cswitch_invol = -1; + + new->report_fd_num = report_fd_num; + new->report_ctx_switch = report_ctx_switch; + #if HAVE_REGEX_H if (regexp != NULL) { DEBUG("ProcessMatch: adding \"%s\" as criteria to process %s.", regexp, @@ -285,7 +324,7 @@ static void ps_list_register(const char *name, const char *regexp) { if (new->re == NULL) { ERROR("processes plugin: ps_list_register: malloc failed."); sfree(new); - return; + return NULL; } status = regcomp(new->re, regexp, REG_EXTENDED | REG_NOSUB); @@ -294,7 +333,7 @@ static void ps_list_register(const char *name, const char *regexp) { regexp); sfree(new->re); sfree(new); - return; + return NULL; } } #else @@ -305,7 +344,7 @@ static void ps_list_register(const char *name, const char *regexp) { "has been disabled at compile time.", regexp); sfree(new); - return; + return NULL; } #endif @@ -320,7 +359,7 @@ static void ps_list_register(const char *name, const char *regexp) { sfree(new->re); #endif sfree(new); - return; + return NULL; } if (ptr->next == NULL) @@ -331,6 +370,8 @@ static void ps_list_register(const char *name, const char *regexp) { list_head_g = new; else ptr->next = new; + + return new; } /* void ps_list_register */ /* try to match name against entry, returns 1 if success */ @@ -352,13 +393,13 @@ static int ps_list_match(const char *name, const char *cmdline, /* pmatch = */ NULL, /* eflags = */ 0); if (status == 0) - return (1); + return 1; } else #endif if (strcmp(ps->name, name) == 0) - return (1); + return 1; - return (0); + return 0; } /* int ps_list_match */ static void ps_update_counter(derive_t *group_counter, derive_t *curr_counter, @@ -375,13 +416,16 @@ static void ps_update_counter(derive_t *group_counter, derive_t *curr_counter, else curr_value = new_counter - *curr_counter; + if (*group_counter == -1) + *group_counter = 0; + *curr_counter = new_counter; *group_counter += curr_value; } /* add process entry to 'instances' of process 'name' (or refresh it) */ static void ps_list_add(const char *name, const char *cmdline, - procstat_entry_t *entry) { + process_entry_t *entry) { procstat_entry_t *pse; if (entry->id == 0) @@ -416,35 +460,32 @@ static void ps_list_add(const char *name, const char *cmdline, } pse->age = 0; - pse->num_proc = entry->num_proc; - pse->num_lwp = entry->num_lwp; - pse->vmem_size = entry->vmem_size; - pse->vmem_rss = entry->vmem_rss; - pse->vmem_data = entry->vmem_data; - pse->vmem_code = entry->vmem_code; - pse->stack_size = entry->stack_size; - pse->io_rchar = entry->io_rchar; - pse->io_wchar = entry->io_wchar; - pse->io_syscr = entry->io_syscr; - pse->io_syscw = entry->io_syscw; - pse->cswitch_vol = entry->cswitch_vol; - pse->cswitch_invol = entry->cswitch_invol; - - ps->num_proc += pse->num_proc; - ps->num_lwp += pse->num_lwp; - ps->vmem_size += pse->vmem_size; - ps->vmem_rss += pse->vmem_rss; - ps->vmem_data += pse->vmem_data; - ps->vmem_code += pse->vmem_code; - ps->stack_size += pse->stack_size; - - ps->io_rchar += ((pse->io_rchar == -1) ? 0 : pse->io_rchar); - ps->io_wchar += ((pse->io_wchar == -1) ? 0 : pse->io_wchar); - ps->io_syscr += ((pse->io_syscr == -1) ? 0 : pse->io_syscr); - ps->io_syscw += ((pse->io_syscw == -1) ? 0 : pse->io_syscw); - - ps->cswitch_vol += ((pse->cswitch_vol == -1) ? 0 : pse->cswitch_vol); - ps->cswitch_invol += ((pse->cswitch_invol == -1) ? 0 : pse->cswitch_invol); + + ps->num_proc += entry->num_proc; + ps->num_lwp += entry->num_lwp; + ps->num_fd += entry->num_fd; + ps->vmem_size += entry->vmem_size; + ps->vmem_rss += entry->vmem_rss; + ps->vmem_data += entry->vmem_data; + ps->vmem_code += entry->vmem_code; + ps->stack_size += entry->stack_size; + + if ((entry->io_rchar != -1) && (entry->io_wchar != -1)) { + ps_update_counter(&ps->io_rchar, &pse->io_rchar, entry->io_rchar); + ps_update_counter(&ps->io_wchar, &pse->io_wchar, entry->io_wchar); + } + + if ((entry->io_syscr != -1) && (entry->io_syscw != -1)) { + ps_update_counter(&ps->io_syscr, &pse->io_syscr, entry->io_syscr); + ps_update_counter(&ps->io_syscw, &pse->io_syscw, entry->io_syscw); + } + + if ((entry->cswitch_vol != -1) && (entry->cswitch_vol != -1)) { + ps_update_counter(&ps->cswitch_vol, &pse->cswitch_vol, + entry->cswitch_vol); + ps_update_counter(&ps->cswitch_invol, &pse->cswitch_invol, + entry->cswitch_invol); + } ps_update_counter(&ps->vmem_minflt_counter, &pse->vmem_minflt_counter, entry->vmem_minflt_counter); @@ -466,17 +507,12 @@ static void ps_list_reset(void) { for (procstat_t *ps = list_head_g; ps != NULL; ps = ps->next) { ps->num_proc = 0; ps->num_lwp = 0; + ps->num_fd = 0; ps->vmem_size = 0; ps->vmem_rss = 0; ps->vmem_data = 0; ps->vmem_code = 0; ps->stack_size = 0; - ps->io_rchar = -1; - ps->io_wchar = -1; - ps->io_syscr = -1; - ps->io_syscw = -1; - ps->cswitch_vol = -1; - ps->cswitch_invol = -1; pse_prev = NULL; pse = ps->instances; @@ -504,6 +540,20 @@ static void ps_list_reset(void) { } /* for (ps = list_head_g; ps != NULL; ps = ps->next) */ } +static void ps_tune_instance(oconfig_item_t *ci, procstat_t *ps) { + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *c = ci->children + i; + + if (strcasecmp(c->key, "CollectContextSwitch") == 0) + cf_util_get_boolean(c, &ps->report_ctx_switch); + else if (strcasecmp(c->key, "CollectFileDescriptor") == 0) + cf_util_get_boolean(c, &ps->report_fd_num); + else { + ERROR("processes plugin: Option `%s' not allowed here.", c->key); + } + } /* for (ci->children) */ +} /* void ps_tune_instance */ + /* put all pre-defined 'Process' names from config to list_head_g tree */ static int ps_config(oconfig_item_t *ci) { #if KERNEL_LINUX @@ -512,6 +562,8 @@ static int ps_config(oconfig_item_t *ci) { const size_t max_procname_len = MAXCOMLEN - 1; #endif + procstat_t *ps; + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; @@ -523,13 +575,6 @@ static int ps_config(oconfig_item_t *ci) { continue; } - if (c->children_num != 0) { - WARNING("processes plugin: the `Process' config option " - "does not expect any child elements -- ignoring " - "content (%i elements) of the block.", - c->children_num, c->values[0].value.string); - } - #if KERNEL_LINUX || KERNEL_SOLARIS || KERNEL_FREEBSD if (strlen(c->values[0].value.string) > max_procname_len) { WARNING("processes plugin: this platform has a %zu character limit " @@ -539,7 +584,10 @@ static int ps_config(oconfig_item_t *ci) { } #endif - ps_list_register(c->values[0].value.string, NULL); + ps = ps_list_register(c->values[0].value.string, NULL); + + if (c->children_num != 0 && ps != NULL) + ps_tune_instance(c, ps); } else if (strcasecmp(c->key, "ProcessMatch") == 0) { if ((c->values_num != 2) || (OCONFIG_TYPE_STRING != c->values[0].type) || (OCONFIG_TYPE_STRING != c->values[1].type)) { @@ -549,18 +597,15 @@ static int ps_config(oconfig_item_t *ci) { continue; } - if (c->children_num != 0) { - WARNING("processes plugin: the `ProcessMatch' config option " - "does not expect any child elements -- ignoring " - "content (%i elements) of the " - "block.", - c->children_num, c->values[0].value.string, - c->values[1].value.string); - } + ps = ps_list_register(c->values[0].value.string, + c->values[1].value.string); - ps_list_register(c->values[0].value.string, c->values[1].value.string); + if (c->children_num != 0 && ps != NULL) + ps_tune_instance(c, ps); } else if (strcasecmp(c->key, "CollectContextSwitch") == 0) { cf_util_get_boolean(c, &report_ctx_switch); + } else if (strcasecmp(c->key, "CollectFileDescriptor") == 0) { + cf_util_get_boolean(c, &report_fd_num); } else { ERROR("processes plugin: The `%s' configuration option is not " "understood and will be ignored.", @@ -569,7 +614,7 @@ static int ps_config(oconfig_item_t *ci) { } } - return (0); + return 0; } static int ps_init(void) { @@ -591,7 +636,7 @@ static int ps_init(void) { ERROR("host_processor_sets failed: %s\n", mach_error_string(status)); pset_list = NULL; pset_list_len = 0; - return (-1); + return -1; } /* #endif HAVE_THREAD_INFO */ @@ -610,7 +655,7 @@ static int ps_init(void) { pagesize = getpagesize(); #endif /* HAVE_PROCINFO_H */ - return (0); + return 0; } /* int ps_init */ /* submit global state (e.g.: qty of zombies, running, etc..) */ @@ -695,7 +740,14 @@ static void ps_submit_proc_list(procstat_t *ps) { plugin_dispatch_values(&vl); } - if (report_ctx_switch) { + if (ps->num_fd > 0) { + sstrncpy(vl.type, "file_handles", sizeof(vl.type)); + vl.values[0].gauge = ps->num_fd; + vl.values_len = 1; + plugin_dispatch_values(&vl); + } + + if ((ps->cswitch_vol != -1) && (ps->cswitch_invol != -1)) { sstrncpy(vl.type, "contextswitch", sizeof(vl.type)); sstrncpy(vl.type_instance, "voluntary", sizeof(vl.type_instance)); vl.values[0].derive = ps->cswitch_vol; @@ -709,7 +761,7 @@ static void ps_submit_proc_list(procstat_t *ps) { plugin_dispatch_values(&vl); } - DEBUG("name = %s; num_proc = %lu; num_lwp = %lu; " + DEBUG("name = %s; num_proc = %lu; num_lwp = %lu; num_fd = %lu; " "vmem_size = %lu; vmem_rss = %lu; vmem_data = %lu; " "vmem_code = %lu; " "vmem_minflt_counter = %" PRIi64 "; vmem_majflt_counter = %" PRIi64 "; " @@ -717,8 +769,8 @@ static void ps_submit_proc_list(procstat_t *ps) { "io_rchar = %" PRIi64 "; io_wchar = %" PRIi64 "; " "io_syscr = %" PRIi64 "; io_syscw = %" PRIi64 "; " "cswitch_vol = %" PRIi64 "; cswitch_invol = %" PRIi64 ";", - ps->name, ps->num_proc, ps->num_lwp, ps->vmem_size, ps->vmem_rss, - ps->vmem_data, ps->vmem_code, ps->vmem_minflt_counter, + ps->name, ps->num_proc, ps->num_lwp, ps->num_fd, ps->vmem_size, + ps->vmem_rss, ps->vmem_data, ps->vmem_code, ps->vmem_minflt_counter, ps->vmem_majflt_counter, ps->cpu_user_counter, ps->cpu_system_counter, ps->io_rchar, ps->io_wchar, ps->io_syscr, ps->io_syscw, ps->cswitch_vol, ps->cswitch_invol); @@ -741,7 +793,7 @@ static void ps_submit_fork_rate(derive_t value) { /* ------- additional functions for KERNEL_LINUX/HAVE_THREAD_INFO ------- */ #if KERNEL_LINUX -static int ps_read_tasks_status(procstat_entry_t *ps) { +static int ps_read_tasks_status(process_entry_t *ps) { char dirname[64]; DIR *dh; char filename[64]; @@ -757,7 +809,7 @@ static int ps_read_tasks_status(procstat_entry_t *ps) { if ((dh = opendir(dirname)) == NULL) { DEBUG("Failed to open directory `%s'", dirname); - return (-1); + return -1; } while ((ent = readdir(dh)) != NULL) { @@ -811,11 +863,11 @@ static int ps_read_tasks_status(procstat_entry_t *ps) { ps->cswitch_vol = cswitch_vol; ps->cswitch_invol = cswitch_invol; - return (0); + return 0; } /* int *ps_read_tasks_status */ /* Read data from /proc/pid/status */ -static procstat_t *ps_read_status(long pid, procstat_t *ps) { +static int ps_read_status(long pid, process_entry_t *ps) { FILE *fh; char buffer[1024]; char filename[64]; @@ -828,7 +880,7 @@ static procstat_t *ps_read_status(long pid, procstat_t *ps) { ssnprintf(filename, sizeof(filename), "/proc/%li/status", pid); if ((fh = fopen(filename, "r")) == NULL) - return (NULL); + return -1; while (fgets(buffer, sizeof(buffer), fh) != NULL) { unsigned long tmp; @@ -868,10 +920,10 @@ static procstat_t *ps_read_status(long pid, procstat_t *ps) { if (threads != 0) ps->num_lwp = threads; - return (ps); -} /* procstat_t *ps_read_vmem */ + return 0; +} /* int *ps_read_status */ -static int ps_read_io(procstat_entry_t *ps) { +static int ps_read_io(process_entry_t *ps) { FILE *fh; char buffer[1024]; char filename[64]; @@ -880,8 +932,10 @@ static int ps_read_io(procstat_entry_t *ps) { int numfields; ssnprintf(filename, sizeof(filename), "/proc/%li/io", ps->id); - if ((fh = fopen(filename, "r")) == NULL) - return (-1); + if ((fh = fopen(filename, "r")) == NULL) { + DEBUG("ps_read_io: Failed to open file `%s'", filename); + return -1; + } while (fgets(buffer, sizeof(buffer), fh) != NULL) { derive_t *val = NULL; @@ -917,35 +971,55 @@ static int ps_read_io(procstat_entry_t *ps) { char errbuf[1024]; WARNING("processes: fclose: %s", sstrerror(errno, errbuf, sizeof(errbuf))); } - return (0); + return 0; } /* int ps_read_io (...) */ -static void ps_fill_details(const procstat_t *ps, procstat_entry_t *entry) { - if (entry->has_io == 0 && ps_read_io(entry) != 0) { - /* no io data */ - entry->io_rchar = -1; - entry->io_wchar = -1; - entry->io_syscr = -1; - entry->io_syscw = -1; +static int ps_count_fd(int pid) { + char dirname[64]; + DIR *dh; + struct dirent *ent; + int count = 0; + + ssnprintf(dirname, sizeof(dirname), "/proc/%i/fd", pid); - DEBUG("ps_read_process: not get io data for pid %li", entry->id); + if ((dh = opendir(dirname)) == NULL) { + DEBUG("Failed to open directory `%s'", dirname); + return -1; } - entry->has_io = 1; + while ((ent = readdir(dh)) != NULL) { + if (!isdigit((int)ent->d_name[0])) + continue; + else + count++; + } + closedir(dh); + + return (count >= 1) ? count : 1; +} /* int ps_count_fd (pid) */ - if (report_ctx_switch) { - if (entry->has_cswitch == 0 && ps_read_tasks_status(entry) != 0) { - entry->cswitch_vol = -1; - entry->cswitch_invol = -1; +static void ps_fill_details(const procstat_t *ps, process_entry_t *entry) { + if (entry->has_io == 0) { + ps_read_io(entry); + entry->has_io = 1; + } - DEBUG("ps_read_tasks_status: not get context " - "switch data for pid %li", - entry->id); + if (ps->report_ctx_switch) { + if (entry->has_cswitch == 0) { + ps_read_tasks_status(entry); + entry->has_cswitch = 1; } - entry->has_cswitch = 1; + } + + if (ps->report_fd_num) { + int num_fd; + if (entry->has_fd == 0 && (num_fd = ps_count_fd(entry->id)) > 0) { + entry->num_fd = num_fd; + } + entry->has_fd = 1; } } /* void ps_fill_details (...) */ -static int ps_read_process(long pid, procstat_t *ps, char *state) { +static int ps_read_process(long pid, process_entry_t *ps, char *state) { char filename[64]; char buffer[1024]; @@ -967,13 +1041,11 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { ssize_t status; - memset(ps, 0, sizeof(procstat_t)); - ssnprintf(filename, sizeof(filename), "/proc/%li/stat", pid); status = read_file_contents(filename, buffer, sizeof(buffer) - 1); if (status <= 0) - return (-1); + return -1; buffer_len = (size_t)status; buffer[buffer_len] = 0; @@ -995,7 +1067,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { if (name_start_pos >= name_end_pos) { ERROR("processes plugin: name_start_pos = %zu >= name_end_pos = %zu", name_start_pos, name_end_pos); - return (-1); + return -1; } name_len = (name_end_pos - name_start_pos) - 1; @@ -1005,7 +1077,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { sstrncpy(ps->name, &buffer[name_start_pos + 1], name_len + 1); if ((buffer_len - name_end_pos) < 2) - return (-1); + return -1; buffer_ptr = &buffer[name_end_pos + 2]; fields_len = strsplit(buffer_ptr, fields, STATIC_ARRAY_SIZE(fields)); @@ -1013,7 +1085,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { DEBUG("processes plugin: ps_read_process (pid = %li):" " `%s' has only %i fields..", pid, filename, fields_len); - return (-1); + return -1; } *state = fields[0][0]; @@ -1023,7 +1095,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { ps->num_proc = 0; } else { ps->num_lwp = strtoul(fields[17], /* endptr = */ NULL, /* base = */ 10); - if ((ps_read_status(pid, ps)) == NULL) { + if ((ps_read_status(pid, ps)) != 0) { /* No VMem data */ ps->vmem_data = -1; ps->vmem_code = -1; @@ -1039,7 +1111,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { DEBUG("processes plugin: This is only a zombie: pid = %li; " "name = %s;", pid, ps->name); - return (0); + return 0; } cpu_user_counter = atoll(fields[11]); @@ -1068,8 +1140,17 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { ps->vmem_rss = (unsigned long)vmem_rss; ps->stack_size = (unsigned long)stack_size; + /* no data by default. May be filled by ps_fill_details () */ + ps->io_rchar = -1; + ps->io_wchar = -1; + ps->io_syscr = -1; + ps->io_syscw = -1; + + ps->cswitch_vol = -1; + ps->cswitch_invol = -1; + /* success */ - return (0); + return 0; } /* int ps_read_process (...) */ static char *ps_get_cmdline(long pid, char *name, char *buf, size_t buf_len) { @@ -1176,7 +1257,7 @@ static int read_fork_rate(void) { char errbuf[1024]; ERROR("processes plugin: fopen (/proc/stat) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), proc_stat) != NULL) { @@ -1200,10 +1281,10 @@ static int read_fork_rate(void) { fclose(proc_stat); if (!value_valid) - return (-1); + return -1; ps_submit_fork_rate(value.derive); - return (0); + return 0; } #endif /*KERNEL_LINUX */ @@ -1223,13 +1304,13 @@ static char *ps_get_cmdline(long pid, "while reading \"%s\": " "Returned %zd but expected %zu.", path, status, buffer_size); - return (NULL); + return NULL; } info.pr_psargs[sizeof(info.pr_psargs) - 1] = 0; sstrncpy(buffer, info.pr_psargs, buffer_size); - return (buffer); + return buffer; } /* }}} int ps_get_cmdline */ /* @@ -1239,7 +1320,7 @@ static char *ps_get_cmdline(long pid, * The values for input and ouput chars are calculated "by hand" * Added a few "solaris" specific process states as well */ -static int ps_read_process(long pid, procstat_t *ps, char *state) { +static int ps_read_process(long pid, process_entry_t *ps, char *state) { char filename[64]; char f_psinfo[64], f_usage[64]; char *buffer; @@ -1274,7 +1355,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { sfree(myStatus); sfree(myInfo); sfree(myUsage); - return (0); + return 0; } else { ps->num_proc = 1; ps->num_lwp = myInfo->pr_nlwp; @@ -1304,6 +1385,11 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { ps->stack_size = myStatus->pr_stksize; /* + * TODO: File descriptor count for Solaris + */ + ps->num_fd = 0; + + /* * Calculating input/ouput chars * Formula used is total chars / total blocks => chars/block * then convert input/output blocks to chars @@ -1346,7 +1432,7 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) { sfree(myInfo); sfree(myUsage); - return (0); + return 0; } /* @@ -1359,7 +1445,7 @@ static int read_fork_rate(void) { derive_t result = 0; if (kc == NULL) - return (-1); + return -1; for (kstat_t *ksp_chain = kc->kc_chain; ksp_chain != NULL; ksp_chain = ksp_chain->ks_next) { @@ -1377,7 +1463,7 @@ static int read_fork_rate(void) { } ps_submit_fork_rate(result); - return (0); + return 0; } #endif /* KERNEL_SOLARIS */ @@ -1394,12 +1480,12 @@ static int mach_get_task_name(task_t t, int *pid, char *name, mib[2] = KERN_PROC_PID; if (pid_for_task(t, pid) != KERN_SUCCESS) - return (-1); + return -1; mib[3] = *pid; kp_size = sizeof(kp); if (sysctl(mib, 4, &kp, &kp_size, NULL, 0) != 0) - return (-1); + return -1; if (name_max_len > (MAXCOMLEN + 1)) name_max_len = MAXCOMLEN + 1; @@ -1413,7 +1499,7 @@ static int mach_get_task_name(task_t t, int *pid, char *name, * `top' does it, because it is a lot of work and only used when * debugging. -octo */ - return (0); + return 0; } #endif /* HAVE_THREAD_INFO */ /* ------- end of additional functions for KERNEL_LINUX/HAVE_THREAD_INFO ------- @@ -1444,7 +1530,7 @@ static int ps_read(void) { int blocked = 0; procstat_t *ps; - procstat_entry_t pse; + process_entry_t pse; ps_list_reset(); @@ -1526,6 +1612,14 @@ static int ps_read(void) { pse.vmem_data = 0; pse.vmem_code = 0; + pse.io_rchar = -1; + pse.io_wchar = -1; + pse.io_syscr = -1; + pse.io_syscw = -1; + + /* File descriptor count not implemented */ + pse.num_fd = 0; + pse.vmem_minflt_counter = task_events_info.cow_faults; pse.vmem_majflt_counter = task_events_info.faults; @@ -1657,8 +1751,7 @@ static int ps_read(void) { char cmdline[CMDLINE_BUFFER_SIZE]; int status; - procstat_t ps; - procstat_entry_t pse; + process_entry_t pse; char state; running = sleeping = zombies = stopped = paging = blocked = 0; @@ -1667,7 +1760,7 @@ static int ps_read(void) { if ((proc = opendir("/proc")) == NULL) { char errbuf[1024]; ERROR("Cannot open `/proc': %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while ((ent = readdir(proc)) != NULL) { @@ -1677,38 +1770,15 @@ static int ps_read(void) { if ((pid = atol(ent->d_name)) < 1) continue; - status = ps_read_process(pid, &ps, &state); + memset(&pse, 0, sizeof(pse)); + pse.id = pid; + + status = ps_read_process(pid, &pse, &state); if (status != 0) { DEBUG("ps_read_process failed: %i", status); continue; } - memset(&pse, 0, sizeof(pse)); - pse.id = pid; - pse.age = 0; - - pse.num_proc = ps.num_proc; - pse.num_lwp = ps.num_lwp; - pse.vmem_size = ps.vmem_size; - pse.vmem_rss = ps.vmem_rss; - pse.vmem_data = ps.vmem_data; - pse.vmem_code = ps.vmem_code; - pse.stack_size = ps.stack_size; - - pse.vmem_minflt_counter = ps.vmem_minflt_counter; - pse.vmem_majflt_counter = ps.vmem_majflt_counter; - - pse.cpu_user_counter = ps.cpu_user_counter; - pse.cpu_system_counter = ps.cpu_system_counter; - - pse.io_rchar = ps.io_rchar; - pse.io_wchar = ps.io_wchar; - pse.io_syscr = ps.io_syscr; - pse.io_syscw = ps.io_syscw; - - pse.cswitch_vol = ps.cswitch_vol; - pse.cswitch_invol = ps.cswitch_invol; - switch (state) { case 'R': running++; @@ -1730,8 +1800,8 @@ static int ps_read(void) { break; } - ps_list_add(ps.name, ps_get_cmdline(pid, ps.name, cmdline, sizeof(cmdline)), - &pse); + ps_list_add(pse.name, + ps_get_cmdline(pid, pse.name, cmdline, sizeof(cmdline)), &pse); } closedir(proc); @@ -1764,7 +1834,7 @@ static int ps_read(void) { struct kinfo_proc *proc_ptr = NULL; int count; /* returns number of processes */ - procstat_entry_t pse; + process_entry_t pse; ps_list_reset(); @@ -1772,7 +1842,7 @@ static int ps_read(void) { kd = kvm_openfiles(NULL, "/dev/null", NULL, 0, errbuf); if (kd == NULL) { ERROR("processes plugin: Cannot open kvm interface: %s", errbuf); - return (0); + return 0; } /* Get the list of processes. */ @@ -1781,7 +1851,7 @@ static int ps_read(void) { ERROR("processes plugin: Cannot get kvm processes list: %s", kvm_geterr(kd)); kvm_close(kd); - return (0); + return 0; } /* Iterate through the processes in kinfo_proc */ @@ -1814,8 +1884,8 @@ static int ps_read(void) { } } /* if (process has argument list) */ + memset(&pse, 0, sizeof(pse)); pse.id = procs[i].ki_pid; - pse.age = 0; pse.num_proc = 1; pse.num_lwp = procs[i].ki_numthreads; @@ -1850,6 +1920,9 @@ static int ps_read(void) { pse.io_syscr = -1; pse.io_syscw = -1; + /* file descriptor count not implemented */ + pse.num_fd = 0; + /* context switch counters not implemented */ pse.cswitch_vol = -1; pse.cswitch_invol = -1; @@ -1911,15 +1984,15 @@ static int ps_read(void) { struct kinfo_proc *proc_ptr = NULL; int count; /* returns number of processes */ - procstat_entry_t pse; + process_entry_t pse; ps_list_reset(); /* Open the kvm interface, get a descriptor */ - kd = kvm_open(NULL, NULL, NULL, 0, errbuf); + kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf); if (kd == NULL) { ERROR("processes plugin: Cannot open kvm interface: %s", errbuf); - return (0); + return 0; } /* Get the list of processes. */ @@ -1928,7 +2001,7 @@ static int ps_read(void) { ERROR("processes plugin: Cannot get kvm processes list: %s", kvm_geterr(kd)); kvm_close(kd); - return (0); + return 0; } /* Iterate through the processes in kinfo_proc */ @@ -1963,7 +2036,6 @@ static int ps_read(void) { memset(&pse, 0, sizeof(pse)); pse.id = procs[i].p_pid; - pse.age = 0; pse.num_proc = 1; pse.num_lwp = 1; /* XXX: accumulate p_tid values for a single p_pid ? */ @@ -1987,6 +2059,9 @@ static int ps_read(void) { pse.io_syscr = -1; pse.io_syscw = -1; + /* file descriptor count not implemented */ + pse.num_fd = 0; + /* context switch counters not implemented */ pse.cswitch_vol = -1; pse.cswitch_invol = -1; @@ -2045,7 +2120,7 @@ static int ps_read(void) { pid_t pindex = 0; int nprocs; - procstat_entry_t pse; + process_entry_t pse; ps_list_reset(); while ((nprocs = getprocs64(procentry, sizeof(struct procentry64), @@ -2085,8 +2160,9 @@ static int ps_read(void) { } } + memset(&pse, 0, sizeof(pse)); + pse.id = procentry[i].pi_pid; - pse.age = 0; pse.num_lwp = procentry[i].pi_thcount; pse.num_proc = 1; @@ -2136,7 +2212,7 @@ static int ps_read(void) { pse.vmem_size = procentry[i].pi_tsize + procentry[i].pi_dvm * pagesize; pse.vmem_rss = (procentry[i].pi_drss + procentry[i].pi_trss) * pagesize; - /* Not supported */ + /* Not supported/implemented */ pse.vmem_data = 0; pse.vmem_code = 0; pse.stack_size = 0; @@ -2146,6 +2222,8 @@ static int ps_read(void) { pse.io_syscr = -1; pse.io_syscw = -1; + pse.num_fd = 0; + pse.cswitch_vol = -1; pse.cswitch_invol = -1; @@ -2194,12 +2272,11 @@ static int ps_read(void) { proc = opendir("/proc"); if (proc == NULL) - return (-1); + return -1; while ((ent = readdir(proc)) != NULL) { long pid; - struct procstat ps; - procstat_entry_t pse; + process_entry_t pse; char *endptr; if (!isdigit((int)ent->d_name[0])) @@ -2209,38 +2286,15 @@ static int ps_read(void) { if (*endptr != 0) /* value didn't completely parse as a number */ continue; - status = ps_read_process(pid, &ps, &state); + memset(&pse, 0, sizeof(pse)); + pse.id = pid; + + status = ps_read_process(pid, &pse, &state); if (status != 0) { DEBUG("ps_read_process failed: %i", status); continue; } - memset(&pse, 0, sizeof(pse)); - pse.id = pid; - pse.age = 0; - - pse.num_proc = ps.num_proc; - pse.num_lwp = ps.num_lwp; - pse.vmem_size = ps.vmem_size; - pse.vmem_rss = ps.vmem_rss; - pse.vmem_data = ps.vmem_data; - pse.vmem_code = ps.vmem_code; - pse.stack_size = ps.stack_size; - - pse.vmem_minflt_counter = ps.vmem_minflt_counter; - pse.vmem_majflt_counter = ps.vmem_majflt_counter; - - pse.cpu_user_counter = ps.cpu_user_counter; - pse.cpu_system_counter = ps.cpu_system_counter; - - pse.io_rchar = ps.io_rchar; - pse.io_wchar = ps.io_wchar; - pse.io_syscr = ps.io_syscr; - pse.io_syscw = ps.io_syscw; - - pse.cswitch_vol = -1; - pse.cswitch_invol = -1; - switch (state) { case 'R': running++; @@ -2268,8 +2322,8 @@ static int ps_read(void) { break; } - ps_list_add(ps.name, ps_get_cmdline(pid, ps.name, cmdline, sizeof(cmdline)), - &pse); + ps_list_add(pse.name, + ps_get_cmdline(pid, pse.name, cmdline, sizeof(cmdline)), &pse); } /* while(readdir) */ closedir(proc); @@ -2290,7 +2344,7 @@ static int ps_read(void) { want_init = 0; - return (0); + return 0; } /* int ps_read */ void module_register(void) { diff --git a/src/protocols.c b/src/protocols.c index 64735e60..32e98243 100644 --- a/src/protocols.c +++ b/src/protocols.c @@ -89,7 +89,7 @@ static int read_file(const char *path) { if (fh == NULL) { ERROR("protocols plugin: fopen (%s) failed: %s.", path, sstrerror(errno, key_buffer, sizeof(key_buffer))); - return (-1); + return -1; } status = -1; @@ -169,7 +169,7 @@ static int read_file(const char *path) { fclose(fh); - return (status); + return status; } /* int read_file */ static int protocols_read(void) { @@ -185,9 +185,9 @@ static int protocols_read(void) { success++; if (success == 0) - return (-1); + return -1; - return (0); + return 0; } /* int protocols_read */ static int protocols_config(const char *key, const char *value) { @@ -202,10 +202,10 @@ static int protocols_config(const char *key, const char *value) { invert = 0; ignorelist_set_invert(values_list, invert); } else { - return (-1); + return -1; } - return (0); + return 0; } /* int protocols_config */ void module_register(void) { @@ -213,5 +213,3 @@ void module_register(void) { config_keys_num); plugin_register_read("protocols", protocols_read); } /* void module_register */ - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/python.c b/src/python.c index c6ee5544..b106e45c 100644 --- a/src/python.c +++ b/src/python.c @@ -784,8 +784,8 @@ static PyObject *cpy_register_write(PyObject *self, PyObject *args, static PyObject *cpy_register_notification(PyObject *self, PyObject *args, PyObject *kwds) { return cpy_register_generic_userdata((void *)plugin_register_notification, - (void *)cpy_notification_callback, args, - kwds); + (void *)cpy_notification_callback, + args, kwds); } static PyObject *cpy_register_flush(PyObject *self, PyObject *args, @@ -944,7 +944,8 @@ static PyObject *cpy_unregister_read(PyObject *self, PyObject *arg) { } static PyObject *cpy_unregister_write(PyObject *self, PyObject *arg) { - return cpy_unregister_generic_userdata(plugin_unregister_write, arg, "write"); + return cpy_unregister_generic_userdata(plugin_unregister_write, arg, + "write"); } static PyObject *cpy_unregister_notification(PyObject *self, PyObject *arg) { @@ -953,7 +954,8 @@ static PyObject *cpy_unregister_notification(PyObject *self, PyObject *arg) { } static PyObject *cpy_unregister_flush(PyObject *self, PyObject *arg) { - return cpy_unregister_generic_userdata(plugin_unregister_flush, arg, "flush"); + return cpy_unregister_generic_userdata(plugin_unregister_flush, arg, + "flush"); } static PyObject *cpy_unregister_shutdown(PyObject *self, PyObject *arg) { @@ -1397,7 +1399,7 @@ static int cpy_config(oconfig_item_t *ci) { status = 1; } } - return (status); + return status; } void module_register(void) { diff --git a/src/redis.c b/src/redis.c index 7875c7ea..05225b5b 100644 --- a/src/redis.c +++ b/src/redis.c @@ -36,6 +36,7 @@ #define REDIS_DEF_PASSWD "" #define REDIS_DEF_PORT 6379 #define REDIS_DEF_TIMEOUT 2000 +#define REDIS_DEF_DB_COUNT 16 #define MAX_REDIS_NODE_NAME 64 #define MAX_REDIS_PASSWD_LENGTH 512 #define MAX_REDIS_VAL_SIZE 256 @@ -89,13 +90,13 @@ static int redis_node_add(const redis_node_t *rn) /* {{{ */ if (rn_ptr != NULL) { ERROR("redis plugin: A node with the name `%s' already exists.", rn->name); - return (-1); + return -1; } rn_copy = malloc(sizeof(*rn_copy)); if (rn_copy == NULL) { ERROR("redis plugin: malloc failed adding redis_node to the tree."); - return (-1); + return -1; } memcpy(rn_copy, rn, sizeof(*rn_copy)); @@ -112,7 +113,7 @@ static int redis_node_add(const redis_node_t *rn) /* {{{ */ rn_ptr->next = rn_copy; } - return (0); + return 0; } /* }}} */ static redis_query_t *redis_config_query(oconfig_item_t *ci) /* {{{ */ @@ -170,7 +171,7 @@ static int redis_config_node(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string_buffer(ci, rn.name, sizeof(rn.name)); if (status != 0) - return (status); + return status; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -207,9 +208,9 @@ static int redis_config_node(oconfig_item_t *ci) /* {{{ */ } if (status != 0) - return (status); + return status; - return (redis_node_add(&rn)); + return redis_node_add(&rn); } /* }}} int redis_config_node */ static int redis_config(oconfig_item_t *ci) /* {{{ */ @@ -227,10 +228,10 @@ static int redis_config(oconfig_item_t *ci) /* {{{ */ if (nodes_head == NULL) { ERROR("redis plugin: No valid node configuration could be found."); - return (ENOENT); + return ENOENT; } - return (0); + return 0; } /* }}} */ __attribute__((nonnull(2))) static void @@ -263,7 +264,7 @@ static int redis_init(void) /* {{{ */ if (nodes_head == NULL) redis_node_add(&rn); - return (0); + return 0; } /* }}} int redis_init */ static int redis_handle_info(char *node, char const *info_line, @@ -284,13 +285,13 @@ static int redis_handle_info(char *node, char const *info_line, if (parse_value(buf, &val, ds_type) == -1) { WARNING("redis plugin: Unable to parse field `%s'.", field_name); - return (-1); + return -1; } redis_submit(node, type, type_instance, val); - return (0); + return 0; } - return (-1); + return -1; } /* }}} int redis_handle_info */ @@ -304,17 +305,17 @@ static int redis_handle_query(redisContext *rh, redis_node_t *rn, ds = plugin_get_ds(rq->type); if (!ds) { ERROR("redis plugin: DataSet `%s' not defined.", rq->type); - return (-1); + return -1; } if (ds->ds_num != 1) { ERROR("redis plugin: DS `%s' has too many types.", rq->type); - return (-1); + return -1; } if ((rr = redisCommand(rh, rq->query)) == NULL) { WARNING("redis plugin: unable to carry out query `%s'.", rq->query); - return (-1); + return -1; } switch (rr->type) { @@ -338,13 +339,13 @@ static int redis_handle_query(redisContext *rh, redis_node_t *rn, if (parse_value(rr->str, &val, ds->ds[0].type) == -1) { WARNING("redis plugin: Unable to parse field `%s'.", rq->type); freeReplyObject(rr); - return (-1); + return -1; } break; default: WARNING("redis plugin: Cannot coerce redis type."); freeReplyObject(rr); - return (-1); + return -1; } redis_submit(rn->name, rq->type, @@ -353,6 +354,45 @@ static int redis_handle_query(redisContext *rh, redis_node_t *rn, return 0; } /* }}} int redis_handle_query */ +static int redis_db_stats(char *node, char const *info_line) /* {{{ */ +{ + /* redis_db_stats parses and dispatches Redis database statistics, + * currently the number of keys for each database. + * info_line needs to have the following format: + * db0:keys=4,expires=0,avg_ttl=0 + */ + + for (int db = 0; db < REDIS_DEF_DB_COUNT; db++) { + static char buf[MAX_REDIS_VAL_SIZE]; + static char field_name[11]; + static char db_id[3]; + value_t val; + char *str; + int i; + + ssnprintf(field_name, sizeof(field_name), "db%d:keys=", db); + + str = strstr(info_line, field_name); + if (!str) + continue; + + str += strlen(field_name); + for (i = 0; (*str && isdigit((int)*str)); i++, str++) + buf[i] = *str; + buf[i] = '\0'; + + if (parse_value(buf, &val, DS_TYPE_GAUGE) != 0) { + WARNING("redis plugin: Unable to parse field `%s'.", field_name); + return -1; + } + + ssnprintf(db_id, sizeof(db_id), "%d", db); + redis_submit(node, "records", db_id, val); + } + return 0; + +} /* }}} int redis_db_stats */ + static int redis_read(void) /* {{{ */ { for (redis_node_t *rn = nodes_head; rn != NULL; rn = rn->next) { @@ -429,6 +469,8 @@ static int redis_read(void) /* {{{ */ redis_handle_info(rn->name, rr->str, "total_bytes", "output", "total_net_output_bytes", DS_TYPE_DERIVE); + redis_db_stats(rn->name, rr->str); + for (redis_query_t *rq = rn->queries; rq != NULL; rq = rq->next) redis_handle_query(rh, rn, rq); @@ -451,5 +493,3 @@ void module_register(void) /* {{{ */ * X elements */ } /* }}} */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/routeros.c b/src/routeros.c index 07493c75..ba92b0b2 100644 --- a/src/routeros.c +++ b/src/routeros.c @@ -92,10 +92,10 @@ static int handle_interface(__attribute__((unused)) const ros_interface_t *i, void *user_data) { if ((i == NULL) || (user_data == NULL)) - return (EINVAL); + return EINVAL; submit_interface(user_data, i); - return (0); + return 0; } /* }}} int handle_interface */ static void cr_submit_gauge(cr_data_t *rd, const char *type, /* {{{ */ @@ -174,10 +174,10 @@ static int handle_regtable(__attribute__((unused)) const ros_registration_table_t *r, void *user_data) { if ((r == NULL) || (user_data == NULL)) - return (EINVAL); + return EINVAL; submit_regtable(user_data, r); - return (0); + return 0; } /* }}} int handle_regtable */ #if ROS_VERSION >= ROS_VERSION_ENCODE(1, 1, 0) @@ -188,7 +188,7 @@ static int handle_system_resource(__attribute__((unused)) cr_data_t *rd; if ((r == NULL) || (user_data == NULL)) - return (EINVAL); + return EINVAL; rd = user_data; if (rd->collect_cpu_load) @@ -212,7 +212,7 @@ static int handle_system_resource(__attribute__((unused)) cr_submit_gauge(rd, "gauge", "bad_blocks", (gauge_t)r->bad_blocks); } - return (0); + return 0; } /* }}} int handle_system_resource */ #endif @@ -222,11 +222,11 @@ static int cr_read(user_data_t *user_data) /* {{{ */ cr_data_t *rd; if (user_data == NULL) - return (EINVAL); + return EINVAL; rd = user_data->data; if (rd == NULL) - return (EINVAL); + return EINVAL; if (rd->connection == NULL) { rd->connection = @@ -235,7 +235,7 @@ static int cr_read(user_data_t *user_data) /* {{{ */ char errbuf[128]; ERROR("routeros plugin: ros_connect failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } assert(rd->connection != NULL); @@ -249,7 +249,7 @@ static int cr_read(user_data_t *user_data) /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); ros_disconnect(rd->connection); rd->connection = NULL; - return (-1); + return -1; } } @@ -262,7 +262,7 @@ static int cr_read(user_data_t *user_data) /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); ros_disconnect(rd->connection); rd->connection = NULL; - return (-1); + return -1; } } @@ -277,12 +277,12 @@ static int cr_read(user_data_t *user_data) /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); ros_disconnect(rd->connection); rd->connection = NULL; - return (-1); + return -1; } } #endif - return (0); + return 0; } /* }}} int cr_read */ static void cr_free_data(cr_data_t *ptr) /* {{{ */ @@ -309,7 +309,7 @@ static int cr_config_router(oconfig_item_t *ci) /* {{{ */ router_data = calloc(1, sizeof(*router_data)); if (router_data == NULL) - return (-1); + return -1; router_data->connection = NULL; router_data->node = NULL; router_data->service = NULL; @@ -389,7 +389,7 @@ static int cr_config_router(oconfig_item_t *ci) /* {{{ */ if (status != 0) cr_free_data(router_data); - return (status); + return status; } /* }}} int cr_config_router */ static int cr_config(oconfig_item_t *ci) { @@ -403,11 +403,9 @@ static int cr_config(oconfig_item_t *ci) { } } - return (0); + return 0; } /* }}} int cr_config */ void module_register(void) { plugin_register_complex_config("routeros", cr_config); } /* void module_register */ - -/* vim: set sw=2 noet fdm=marker : */ diff --git a/src/rrdcached.c b/src/rrdcached.c index 6eb67d4f..4efb1f0c 100644 --- a/src/rrdcached.c +++ b/src/rrdcached.c @@ -77,7 +77,7 @@ static int value_list_to_string(char *buffer, int buffer_len, t = CDTIME_T_TO_TIME_T(vl->time); status = ssnprintf(buffer, buffer_len, "%lu", (unsigned long)t); if ((status < 1) || (status >= buffer_len)) - return (-1); + return -1; offset = status; for (size_t i = 0; i < ds->ds_num; i++) { @@ -85,7 +85,7 @@ static int value_list_to_string(char *buffer, int buffer_len, (ds->ds[i].type != DS_TYPE_GAUGE) && (ds->ds[i].type != DS_TYPE_DERIVE) && (ds->ds[i].type != DS_TYPE_ABSOLUTE)) - return (-1); + return -1; if (ds->ds[i].type == DS_TYPE_COUNTER) { status = ssnprintf(buffer + offset, buffer_len - offset, ":%llu", @@ -102,12 +102,12 @@ static int value_list_to_string(char *buffer, int buffer_len, } if ((status < 1) || (status >= (buffer_len - offset))) - return (-1); + return -1; offset += status; } /* for ds->ds_num */ - return (0); + return 0; } /* int value_list_to_string */ static int value_list_to_filename(char *buffer, size_t buffer_size, @@ -120,7 +120,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, size_t datadir_len = strlen(datadir) + 1; if (datadir_len >= buffer_size) - return (ENOMEM); + return ENOMEM; sstrncpy(buffer, datadir, buffer_size); buffer[datadir_len - 1] = '/'; @@ -132,7 +132,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, status = FORMAT_VL(buffer, buffer_size, vl); if (status != 0) - return (status); + return status; len = strlen(buffer); assert(len < buffer_size); @@ -140,10 +140,10 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, buffer_size -= len; if (buffer_size <= sizeof(suffix)) - return (ENOMEM); + return ENOMEM; memcpy(buffer, suffix, sizeof(suffix)); - return (0); + return 0; } /* int value_list_to_filename */ static int rc_config_get_int_positive(oconfig_item_t const *ci, int *ret) { @@ -152,12 +152,12 @@ static int rc_config_get_int_positive(oconfig_item_t const *ci, int *ret) { status = cf_util_get_int(ci, &tmp); if (status != 0) - return (status); + return status; if (tmp < 0) - return (EINVAL); + return EINVAL; *ret = tmp; - return (0); + return 0; } /* int rc_config_get_int_positive */ static int rc_config_get_xff(oconfig_item_t const *ci, double *ret) { @@ -167,38 +167,38 @@ static int rc_config_get_xff(oconfig_item_t const *ci, double *ret) { ERROR("rrdcached plugin: The \"%s\" needs exactly one numeric argument " "in the range [0.0, 1.0)", ci->key); - return (EINVAL); + return EINVAL; } value = ci->values[0].value.number; if ((value >= 0.0) && (value < 1.0)) { *ret = value; - return (0); + return 0; } ERROR("rrdcached plugin: The \"%s\" needs exactly one numeric argument " "in the range [0.0, 1.0)", ci->key); - return (EINVAL); + return EINVAL; } /* int rc_config_get_xff */ static int rc_config_add_timespan(int timespan) { int *tmp; if (timespan <= 0) - return (EINVAL); + return EINVAL; tmp = realloc(rrdcreate_config.timespans, sizeof(*rrdcreate_config.timespans) * (rrdcreate_config.timespans_num + 1)); if (tmp == NULL) - return (ENOMEM); + return ENOMEM; rrdcreate_config.timespans = tmp; rrdcreate_config.timespans[rrdcreate_config.timespans_num] = timespan; rrdcreate_config.timespans_num++; - return (0); + return 0; } /* int rc_config_add_timespan */ static int rc_config(oconfig_item_t *ci) { @@ -258,7 +258,7 @@ static int rc_config(oconfig_item_t *ci) { plugin_register_write("rrdcached", rc_write, /* user_data = */ NULL); plugin_register_flush("rrdcached", rc_flush, /* user_data = */ NULL); } - return (0); + return 0; } /* int rc_config */ static int try_reconnect(void) { @@ -272,13 +272,13 @@ static int try_reconnect(void) { ERROR("rrdcached plugin: Failed to reconnect to RRDCacheD " "at %s: %s (status=%d)", daemon_address, rrd_get_error(), status); - return (-1); + return -1; } INFO("rrdcached plugin: Successfully reconnected to RRDCacheD " "at %s", daemon_address); - return (0); + return 0; } /* int try_reconnect */ static int rc_read(void) { @@ -291,10 +291,10 @@ static int rc_read(void) { vl.values_len = 1; if (daemon_address == NULL) - return (-1); + return -1; if (!config_collect_stats) - return (-1); + return -1; if ((strncmp("unix:", daemon_address, strlen("unix:")) != 0) && (daemon_address[0] != '/')) @@ -307,7 +307,7 @@ static int rc_read(void) { ERROR("rrdcached plugin: Failed to connect to RRDCacheD " "at %s: %s (status=%d)", daemon_address, rrd_get_error(), status); - return (-1); + return -1; } while (42) { @@ -328,7 +328,7 @@ static int rc_read(void) { ERROR("rrdcached plugin: rrdc_stats_get failed: %s (status=%i).", rrd_get_error(), status); - return (-1); + return -1; } for (rrdc_stats_t *ptr = head; ptr != NULL; ptr = ptr->next) { @@ -376,14 +376,14 @@ static int rc_read(void) { rrdc_stats_free(head); - return (0); + return 0; } /* int rc_read */ static int rc_init(void) { if (config_collect_stats) plugin_register_read("rrdcached", rc_read); - return (0); + return 0; } /* int rc_init */ static int rc_write(const data_set_t *ds, const value_list_t *vl, @@ -397,22 +397,22 @@ static int rc_write(const data_set_t *ds, const value_list_t *vl, if (daemon_address == NULL) { ERROR("rrdcached plugin: daemon_address == NULL."); plugin_unregister_write("rrdcached"); - return (-1); + return -1; } if (strcmp(ds->type, vl->type) != 0) { ERROR("rrdcached plugin: DS type does not match value list type"); - return (-1); + return -1; } if (value_list_to_filename(filename, sizeof(filename), vl) != 0) { ERROR("rrdcached plugin: value_list_to_filename failed."); - return (-1); + return -1; } if (value_list_to_string(values, sizeof(values), ds, vl) != 0) { ERROR("rrdcached plugin: value_list_to_string failed."); - return (-1); + return -1; } values_array[0] = values; @@ -427,15 +427,15 @@ static int rc_write(const data_set_t *ds, const value_list_t *vl, char errbuf[1024]; ERROR("rrdcached plugin: stat (%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } status = cu_rrd_create_file(filename, ds, vl, &rrdcreate_config); if (status != 0) { ERROR("rrdcached plugin: cu_rrd_create_file (%s) failed.", filename); - return (-1); + return -1; } else if (rrdcreate_config.async) - return (0); + return 0; } } @@ -445,7 +445,7 @@ static int rc_write(const data_set_t *ds, const value_list_t *vl, ERROR("rrdcached plugin: Failed to connect to RRDCacheD " "at %s: %s (status=%d)", daemon_address, rrd_get_error(), status); - return (-1); + return -1; } while (42) { @@ -465,10 +465,10 @@ static int rc_write(const data_set_t *ds, const value_list_t *vl, ERROR("rrdcached plugin: rrdc_update (%s, [%s], 1) failed: %s (status=%i)", filename, values_array[0], rrd_get_error(), status); - return (-1); + return -1; } - return (0); + return 0; } /* int rc_write */ static int rc_flush(__attribute__((unused)) cdtime_t timeout, /* {{{ */ @@ -479,7 +479,7 @@ static int rc_flush(__attribute__((unused)) cdtime_t timeout, /* {{{ */ _Bool retried = 0; if (identifier == NULL) - return (EINVAL); + return EINVAL; if (datadir != NULL) ssnprintf(filename, sizeof(filename), "%s/%s.rrd", datadir, identifier); @@ -492,7 +492,7 @@ static int rc_flush(__attribute__((unused)) cdtime_t timeout, /* {{{ */ ERROR("rrdcached plugin: Failed to connect to RRDCacheD " "at %s: %s (status=%d)", daemon_address, rrd_get_error(), status); - return (-1); + return -1; } while (42) { @@ -512,16 +512,16 @@ static int rc_flush(__attribute__((unused)) cdtime_t timeout, /* {{{ */ ERROR("rrdcached plugin: rrdc_flush (%s) failed: %s (status=%i).", filename, rrd_get_error(), status); - return (-1); + return -1; } DEBUG("rrdcached plugin: rrdc_flush (%s): Success.", filename); - return (0); + return 0; } /* }}} int rc_flush */ static int rc_shutdown(void) { rrdc_disconnect(); - return (0); + return 0; } /* int rc_shutdown */ void module_register(void) { @@ -529,7 +529,3 @@ void module_register(void) { plugin_register_init("rrdcached", rc_init); plugin_register_shutdown("rrdcached", rc_shutdown); } /* void module_register */ - -/* - * vim: set sw=2 sts=2 et : - */ diff --git a/src/rrdtool.c b/src/rrdtool.c index e29d637d..5a71ebe8 100644 --- a/src/rrdtool.c +++ b/src/rrdtool.c @@ -122,7 +122,7 @@ static int srrd_update(char *filename, char *template, int argc, rrd_get_error()); } - return (status); + return status; } /* int srrd_update */ /* #endif HAVE_THREADSAFE_LIBRRD */ @@ -140,7 +140,7 @@ static int srrd_update(char *filename, char *template, int argc, new_argv = malloc((new_argc + 1) * sizeof(*new_argv)); if (new_argv == NULL) { ERROR("rrdtool plugin: malloc failed."); - return (-1); + return -1; } new_argv[0] = "update"; @@ -163,7 +163,7 @@ static int srrd_update(char *filename, char *template, int argc, sfree(new_argv); - return (status); + return status; } /* int srrd_update */ #endif /* !HAVE_THREADSAFE_LIBRRD */ @@ -179,7 +179,7 @@ static int value_list_to_string_multiple(char *buffer, int buffer_len, tt = CDTIME_T_TO_TIME_T(vl->time); status = ssnprintf(buffer, buffer_len, "%u", (unsigned int)tt); if ((status < 1) || (status >= buffer_len)) - return (-1); + return -1; offset = status; for (size_t i = 0; i < ds->ds_num; i++) { @@ -187,7 +187,7 @@ static int value_list_to_string_multiple(char *buffer, int buffer_len, (ds->ds[i].type != DS_TYPE_GAUGE) && (ds->ds[i].type != DS_TYPE_DERIVE) && (ds->ds[i].type != DS_TYPE_ABSOLUTE)) - return (-1); + return -1; if (ds->ds[i].type == DS_TYPE_COUNTER) status = ssnprintf(buffer + offset, buffer_len - offset, ":%llu", @@ -203,12 +203,12 @@ static int value_list_to_string_multiple(char *buffer, int buffer_len, vl->values[i].absolute); if ((status < 1) || (status >= (buffer_len - offset))) - return (-1); + return -1; offset += status; } /* for ds->ds_num */ - return (0); + return 0; } /* int value_list_to_string_multiple */ static int value_list_to_string(char *buffer, int buffer_len, @@ -217,7 +217,7 @@ static int value_list_to_string(char *buffer, int buffer_len, time_t tt; if (ds->ds_num != 1) - return (value_list_to_string_multiple(buffer, buffer_len, ds, vl)); + return value_list_to_string_multiple(buffer, buffer_len, ds, vl); tt = CDTIME_T_TO_TIME_T(vl->time); switch (ds->ds[0].type) { @@ -238,13 +238,13 @@ static int value_list_to_string(char *buffer, int buffer_len, vl->values[0].absolute); break; default: - return (EINVAL); + return EINVAL; } if ((status < 1) || (status >= buffer_len)) - return (ENOMEM); + return ENOMEM; - return (0); + return 0; } /* int value_list_to_string */ static int value_list_to_filename(char *buffer, size_t buffer_size, @@ -257,7 +257,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, size_t datadir_len = strlen(datadir) + 1; if (datadir_len >= buffer_size) - return (ENOMEM); + return ENOMEM; sstrncpy(buffer, datadir, buffer_size); buffer[datadir_len - 1] = '/'; @@ -269,7 +269,7 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, status = FORMAT_VL(buffer, buffer_size, vl); if (status != 0) - return (status); + return status; len = strlen(buffer); assert(len < buffer_size); @@ -277,10 +277,10 @@ static int value_list_to_filename(char *buffer, size_t buffer_size, buffer_size -= len; if (buffer_size <= sizeof(suffix)) - return (ENOMEM); + return ENOMEM; memcpy(buffer, suffix, sizeof(suffix)); - return (0); + return 0; } /* int value_list_to_filename */ static void *rrd_queue_thread(void __attribute__((unused)) * data) { @@ -418,7 +418,7 @@ static void *rrd_queue_thread(void __attribute__((unused)) * data) { } /* while (42) */ pthread_exit((void *)0); - return ((void *)0); + return (void *)0; } /* void *rrd_queue_thread */ static int rrd_queue_enqueue(const char *filename, rrd_queue_t **head, @@ -427,12 +427,12 @@ static int rrd_queue_enqueue(const char *filename, rrd_queue_t **head, queue_entry = malloc(sizeof(*queue_entry)); if (queue_entry == NULL) - return (-1); + return -1; queue_entry->filename = strdup(filename); if (queue_entry->filename == NULL) { free(queue_entry); - return (-1); + return -1; } queue_entry->next = NULL; @@ -448,7 +448,7 @@ static int rrd_queue_enqueue(const char *filename, rrd_queue_t **head, pthread_cond_signal(&queue_cond); pthread_mutex_unlock(&queue_lock); - return (0); + return 0; } /* int rrd_queue_enqueue */ static int rrd_queue_dequeue(const char *filename, rrd_queue_t **head, @@ -471,7 +471,7 @@ static int rrd_queue_dequeue(const char *filename, rrd_queue_t **head, if (this == NULL) { pthread_mutex_unlock(&queue_lock); - return (-1); + return -1; } if (prev == NULL) @@ -487,7 +487,7 @@ static int rrd_queue_dequeue(const char *filename, rrd_queue_t **head, sfree(this->filename); sfree(this); - return (0); + return 0; } /* int rrd_queue_dequeue */ /* XXX: You must hold "cache_lock" when calling this function! */ @@ -568,7 +568,7 @@ static int rrd_cache_flush_identifier(cdtime_t timeout, if (identifier == NULL) { rrd_cache_flush(timeout); - return (0); + return 0; } now = cdtime(); @@ -584,7 +584,7 @@ static int rrd_cache_flush_identifier(cdtime_t timeout, INFO("rrdtool plugin: rrd_cache_flush_identifier: " "c_avl_get (%s) failed. Does that file really exist?", key); - return (status); + return status; } if (rc->flags == FLAG_FLUSHQ) { @@ -602,7 +602,7 @@ static int rrd_cache_flush_identifier(cdtime_t timeout, rc->flags = FLAG_FLUSHQ; } - return (status); + return status; } /* int rrd_cache_flush_identifier */ static int64_t rrd_get_random_variation(void) { @@ -610,7 +610,7 @@ static int64_t rrd_get_random_variation(void) { long max; if (random_timeout == 0) - return (0); + return 0; /* Assure that "cache_timeout + random_variation" is never negative. */ if (random_timeout > cache_timeout) { @@ -622,7 +622,7 @@ static int64_t rrd_get_random_variation(void) { max = (long)(random_timeout / 2); min = max - ((long)random_timeout); - return ((int64_t)cdrand_range(min, max)); + return (int64_t)cdrand_range(min, max); } /* int64_t rrd_get_random_variation */ static int rrd_cache_insert(const char *filename, const char *value, @@ -638,7 +638,7 @@ static int rrd_cache_insert(const char *filename, const char *value, if (cache == NULL) { pthread_mutex_unlock(&cache_lock); WARNING("rrdtool plugin: cache == NULL."); - return (-1); + return -1; } c_avl_get(cache, filename, (void *)&rc); @@ -647,7 +647,7 @@ static int rrd_cache_insert(const char *filename, const char *value, rc = malloc(sizeof(*rc)); if (rc == NULL) { pthread_mutex_unlock(&cache_lock); - return (-1); + return -1; } rc->values_num = 0; rc->values = NULL; @@ -664,7 +664,7 @@ static int rrd_cache_insert(const char *filename, const char *value, DEBUG("rrdtool plugin: (rc->last_value = %" PRIu64 ") " ">= (value_time = %" PRIu64 ")", rc->last_value, value_time); - return (-1); + return -1; } values_new = @@ -683,7 +683,7 @@ static int rrd_cache_insert(const char *filename, const char *value, sfree(cache_key); sfree(rc->values); sfree(rc); - return (-1); + return -1; } rc->values = values_new; @@ -710,7 +710,7 @@ static int rrd_cache_insert(const char *filename, const char *value, sfree(rc->values[0]); sfree(rc->values); sfree(rc); - return (-1); + return -1; } c_avl_insert(cache, cache_key, rc); @@ -744,7 +744,7 @@ static int rrd_cache_insert(const char *filename, const char *value, pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } /* int rrd_cache_insert */ static int rrd_cache_destroy(void) /* {{{ */ @@ -758,7 +758,7 @@ static int rrd_cache_destroy(void) /* {{{ */ if (cache == NULL) { pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } while (c_avl_pick(cache, &key, &value) == 0) { @@ -791,7 +791,7 @@ static int rrd_cache_destroy(void) /* {{{ */ } pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } /* }}} int rrd_cache_destroy */ static int rrd_compare_numeric(const void *a_ptr, const void *b_ptr) { @@ -799,11 +799,11 @@ static int rrd_compare_numeric(const void *a_ptr, const void *b_ptr) { int b = *((int *)b_ptr); if (a < b) - return (-1); + return -1; else if (a > b) - return (1); + return 1; else - return (0); + return 0; } /* int rrd_compare_numeric */ static int rrd_write(const data_set_t *ds, const value_list_t *vl, @@ -814,7 +814,7 @@ static int rrd_write(const data_set_t *ds, const value_list_t *vl, int status; if (do_shutdown) - return (0); + return 0; if (0 != strcmp(ds->type, vl->type)) { ERROR("rrdtool plugin: DS type does not match value list type"); @@ -822,32 +822,32 @@ static int rrd_write(const data_set_t *ds, const value_list_t *vl, } if (value_list_to_filename(filename, sizeof(filename), vl) != 0) - return (-1); + return -1; if (value_list_to_string(values, sizeof(values), ds, vl) != 0) - return (-1); + return -1; if (stat(filename, &statbuf) == -1) { if (errno == ENOENT) { status = cu_rrd_create_file(filename, ds, vl, &rrdcreate_config); if (status != 0) - return (-1); + return -1; else if (rrdcreate_config.async) - return (0); + return 0; } else { char errbuf[1024]; ERROR("stat(%s) failed: %s", filename, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } else if (!S_ISREG(statbuf.st_mode)) { ERROR("stat(%s): Not a regular file!", filename); - return (-1); + return -1; } status = rrd_cache_insert(filename, values, vl->time); - return (status); + return status; } /* int rrd_write */ static int rrd_flush(cdtime_t timeout, const char *identifier, @@ -856,13 +856,13 @@ static int rrd_flush(cdtime_t timeout, const char *identifier, if (cache == NULL) { pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } rrd_cache_flush_identifier(timeout, identifier); pthread_mutex_unlock(&cache_lock); - return (0); + return 0; } /* int rrd_flush */ static int rrd_config(const char *key, const char *value) { @@ -873,7 +873,7 @@ static int rrd_config(const char *key, const char *value) { "be greater than 0.\n"); ERROR("rrdtool: `CacheTimeout' must " "be greater than 0.\n"); - return (1); + return 1; } cache_timeout = DOUBLE_TO_CDTIME_T(tmp); } else if (strcasecmp("CacheFlush", key) == 0) { @@ -883,7 +883,7 @@ static int rrd_config(const char *key, const char *value) { "be greater than 0.\n"); ERROR("rrdtool: `CacheFlush' must " "be greater than 0.\n"); - return (1); + return 1; } cache_flush_timeout = tmp; } else if (strcasecmp("DataDir", key) == 0) { @@ -893,7 +893,7 @@ static int rrd_config(const char *key, const char *value) { tmp = strdup(value); if (tmp == NULL) { ERROR("rrdtool plugin: strdup failed."); - return (1); + return 1; } len = strlen(tmp); @@ -905,7 +905,7 @@ static int rrd_config(const char *key, const char *value) { if (len == 0) { ERROR("rrdtool plugin: Invalid \"DataDir\" option."); sfree(tmp); - return (1); + return 1; } if (datadir != NULL) { @@ -933,7 +933,7 @@ static int rrd_config(const char *key, const char *value) { "be greater than 0.\n"); ERROR("rrdtool: `RRARows' must " "be greater than 0.\n"); - return (1); + return 1; } rrdcreate_config.rrarows = tmp; } else if (strcasecmp("RRATimespan", key) == 0) { @@ -945,7 +945,7 @@ static int rrd_config(const char *key, const char *value) { value_copy = strdup(value); if (value_copy == NULL) - return (1); + return 1; dummy = value_copy; while ((ptr = strtok_r(dummy, ", \t", &saveptr)) != NULL) { @@ -957,7 +957,7 @@ static int rrd_config(const char *key, const char *value) { fprintf(stderr, "rrdtool: realloc failed.\n"); ERROR("rrdtool: realloc failed.\n"); free(value_copy); - return (1); + return 1; } rrdcreate_config.timespans = tmp_alloc; rrdcreate_config.timespans[rrdcreate_config.timespans_num] = atoi(ptr); @@ -978,7 +978,7 @@ static int rrd_config(const char *key, const char *value) { "be in the range 0 to 1 (exclusive)."); ERROR("rrdtool: `XFF' must " "be in the range 0 to 1 (exclusive)."); - return (1); + return 1; } rrdcreate_config.xff = tmp; } else if (strcasecmp("WritesPerSecond", key) == 0) { @@ -987,7 +987,7 @@ static int rrd_config(const char *key, const char *value) { if (wps < 0.0) { fprintf(stderr, "rrdtool: `WritesPerSecond' must be " "greater than or equal to zero."); - return (1); + return 1; } else if (wps == 0.0) { write_rate = 0.0; } else { @@ -1006,9 +1006,9 @@ static int rrd_config(const char *key, const char *value) { random_timeout = DOUBLE_TO_CDTIME_T(tmp); } } else { - return (-1); + return -1; } - return (0); + return 0; } /* int rrd_config */ static int rrd_shutdown(void) { @@ -1039,7 +1039,7 @@ static int rrd_shutdown(void) { rrd_cache_destroy(); - return (0); + return 0; } /* int rrd_shutdown */ static int rrd_init(void) { @@ -1047,7 +1047,7 @@ static int rrd_init(void) { int status; if (init_once != 0) - return (0); + return 0; init_once = 1; if (rrdcreate_config.heartbeat <= 0) @@ -1060,7 +1060,7 @@ static int rrd_init(void) { if (cache == NULL) { pthread_mutex_unlock(&cache_lock); ERROR("rrdtool plugin: c_avl_create failed."); - return (-1); + return -1; } cache_flush_last = cdtime(); @@ -1076,7 +1076,7 @@ static int rrd_init(void) { /* args = */ NULL, "rrdtool queue"); if (status != 0) { ERROR("rrdtool plugin: Cannot create queue-thread."); - return (-1); + return -1; } queue_thread_running = 1; @@ -1086,7 +1086,7 @@ static int rrd_init(void) { rrdcreate_config.heartbeat, rrdcreate_config.rrarows, rrdcreate_config.xff); - return (0); + return 0; } /* int rrd_init */ void module_register(void) { diff --git a/src/sensors.c b/src/sensors.c index 8f1824d0..ed87c30c 100644 --- a/src/sensors.c +++ b/src/sensors.c @@ -185,7 +185,7 @@ static int sensors_snprintf_chip_name(char *buf, size_t buf_size, chip->addr); } - return (status); + return status; } /* int sensors_snprintf_chip_name */ static int sensors_feature_name_to_type(const char *name) { @@ -193,9 +193,9 @@ static int sensors_feature_name_to_type(const char *name) { * it's a one time cost.. */ for (int i = 0; i < known_features_num; i++) if (strcasecmp(known_features[i].label, name) == 0) - return (known_features[i].type); + return known_features[i].type; - return (SENSOR_TYPE_UNKNOWN); + return SENSOR_TYPE_UNKNOWN; } /* int sensors_feature_name_to_type */ #endif @@ -216,7 +216,7 @@ static int sensors_config(const char *key, const char *value) { if (ignorelist_add(sensor_list, value)) { ERROR("sensors plugin: " "Cannot add value to ignorelist."); - return (1); + return 1; } } else if (strcasecmp(key, "IgnoreSelected") == 0) { ignorelist_set_invert(sensor_list, 1); @@ -229,10 +229,10 @@ static int sensors_config(const char *key, const char *value) { } #endif else { - return (-1); + return -1; } - return (0); + return 0; } static void sensors_free_features(void) { @@ -272,7 +272,7 @@ static int sensors_load_conf(void) { char errbuf[1024]; ERROR("sensors plugin: fopen(%s) failed: %s", conffile, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } } @@ -283,7 +283,7 @@ static int sensors_load_conf(void) { if (status != 0) { ERROR("sensors plugin: Cannot initialize sensors. " "Data will not be collected."); - return (-1); + return -1; } #if SENSORS_API_VERSION < 0x400 @@ -367,6 +367,9 @@ static int sensors_load_conf(void) { if ((feature->type != SENSORS_FEATURE_IN) && (feature->type != SENSORS_FEATURE_FAN) && (feature->type != SENSORS_FEATURE_TEMP) && +#if SENSORS_API_VERSION >= 0x402 + (feature->type != SENSORS_FEATURE_CURR) && +#endif (feature->type != SENSORS_FEATURE_POWER)) { DEBUG("sensors plugin: sensors_load_conf: " "Ignoring feature `%s', " @@ -383,6 +386,9 @@ static int sensors_load_conf(void) { if ((subfeature->type != SENSORS_SUBFEATURE_IN_INPUT) && (subfeature->type != SENSORS_SUBFEATURE_FAN_INPUT) && (subfeature->type != SENSORS_SUBFEATURE_TEMP_INPUT) && +#if SENSORS_API_VERSION >= 0x402 + (subfeature->type != SENSORS_SUBFEATURE_CURR_INPUT) && +#endif (subfeature->type != SENSORS_SUBFEATURE_POWER_INPUT)) continue; @@ -410,17 +416,17 @@ static int sensors_load_conf(void) { sensors_cleanup(); INFO("sensors plugin: lm_sensors reports no " "features. Data will not be collected."); - return (-1); + return -1; } - return (0); + return 0; } /* int sensors_load_conf */ static int sensors_shutdown(void) { sensors_free_features(); ignorelist_free(sensor_list); - return (0); + return 0; } /* int sensors_shutdown */ static void sensors_submit(const char *plugin_instance, const char *type, @@ -454,7 +460,7 @@ static void sensors_submit(const char *plugin_instance, const char *type, static int sensors_read(void) { if (sensors_load_conf() != 0) - return (-1); + return -1; #if SENSORS_API_VERSION < 0x400 for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) { @@ -513,6 +519,10 @@ static int sensors_read(void) { type = "temperature"; else if (fl->feature->type == SENSORS_FEATURE_POWER) type = "power"; +#if SENSORS_API_VERSION >= 0x402 + else if (fl->feature->type == SENSORS_FEATURE_CURR) + type = "current"; +#endif else continue; @@ -520,7 +530,7 @@ static int sensors_read(void) { } /* for fl = first_feature .. NULL */ #endif /* (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */ - return (0); + return 0; } /* int sensors_read */ void module_register(void) { diff --git a/src/serial.c b/src/serial.c index 5057fd3a..fda87870 100644 --- a/src/serial.c +++ b/src/serial.c @@ -54,7 +54,7 @@ static int serial_read(void) { (fh = fopen("/proc/tty/driver/ttyS", "r")) == NULL) { char errbuf[1024]; WARNING("serial: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -100,7 +100,7 @@ static int serial_read(void) { } fclose(fh); - return (0); + return 0; } /* int serial_read */ void module_register(void) { diff --git a/src/smart.c b/src/smart.c index 3188d1c8..0e4e192c 100644 --- a/src/smart.c +++ b/src/smart.c @@ -50,7 +50,7 @@ static int smart_config(const char *key, const char *value) { if (ignorelist == NULL) ignorelist = ignorelist_create(/* invert = */ 1); if (ignorelist == NULL) - return (1); + return 1; if (strcasecmp("Disk", key) == 0) { ignorelist_add(ignorelist, value); @@ -66,10 +66,10 @@ static int smart_config(const char *key, const char *value) { if (IS_TRUE(value)) use_serial = 1; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int smart_config */ static void smart_submit(const char *dev, const char *type, @@ -217,7 +217,7 @@ static int smart_read(void) { handle_udev = udev_new(); if (!handle_udev) { ERROR("smart plugin: unable to initialize udev."); - return (-1); + return -1; } enumerate = udev_enumerate_new(handle_udev); udev_enumerate_add_match_subsystem(enumerate, "block"); @@ -239,7 +239,7 @@ static int smart_read(void) { udev_enumerate_unref(enumerate); udev_unref(handle_udev); - return (0); + return 0; } /* int smart_read */ static int smart_init(void) { @@ -256,7 +256,7 @@ static int smart_init(void) { "running \"setcap cap_sys_rawio=ep\" on the collectd binary."); } #endif - return (0); + return 0; } /* int smart_init */ void module_register(void) { diff --git a/src/snmp.c b/src/snmp.c index 3bfec47d..77349f62 100644 --- a/src/snmp.c +++ b/src/snmp.c @@ -130,23 +130,23 @@ static void csnmp_oid_init(oid_t *dst, oid const *src, size_t n) { } static int csnmp_oid_compare(oid_t const *left, oid_t const *right) { - return ( - snmp_oid_compare(left->oid, left->oid_len, right->oid, right->oid_len)); + return snmp_oid_compare(left->oid, left->oid_len, right->oid, + right->oid_len); } static int csnmp_oid_suffix(oid_t *dst, oid_t const *src, oid_t const *root) { /* Make sure "src" is in "root"s subtree. */ if (src->oid_len <= root->oid_len) - return (EINVAL); + return EINVAL; if (snmp_oid_ncompare(root->oid, root->oid_len, src->oid, src->oid_len, /* n = */ root->oid_len) != 0) - return (EINVAL); + return EINVAL; memset(dst, 0, sizeof(*dst)); dst->oid_len = src->oid_len - root->oid_len; memcpy(dst->oid, &src->oid[root->oid_len], dst->oid_len * sizeof(dst->oid[0])); - return (0); + return 0; } static int csnmp_oid_to_string(char *buffer, size_t buffer_size, @@ -159,8 +159,7 @@ static int csnmp_oid_to_string(char *buffer, size_t buffer_size, oid_str_ptr[i] = oid_str[i]; } - return (strjoin(buffer, buffer_size, oid_str_ptr, o->oid_len, - /* separator = */ ".")); + return strjoin(buffer, buffer_size, oid_str_ptr, o->oid_len, "."); } static void csnmp_host_close_session(host_definition_t *host) /* {{{ */ @@ -241,14 +240,14 @@ static int csnmp_config_add_data_instance(data_definition_t *dd, if (!read_objid(buffer, dd->instance.oid.oid, &dd->instance.oid.oid_len)) { ERROR("snmp plugin: read_objid (%s) failed.", buffer); - return (-1); + return -1; } } else { /* Instance is a simple string */ sstrncpy(dd->instance.string, buffer, sizeof(dd->instance.string)); } - return (0); + return 0; } /* int csnmp_config_add_data_instance */ static int csnmp_config_add_data_instance_prefix(data_definition_t *dd, @@ -259,7 +258,7 @@ static int csnmp_config_add_data_instance_prefix(data_definition_t *dd, WARNING("snmp plugin: data %s: InstancePrefix is ignored when `Table' " "is set to `false'.", dd->name); - return (-1); + return -1; } status = cf_util_get_string(ci, &dd->instance_prefix); @@ -270,20 +269,20 @@ static int csnmp_config_add_data_values(data_definition_t *dd, oconfig_item_t *ci) { if (ci->values_num < 1) { WARNING("snmp plugin: `Values' needs at least one argument."); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING("snmp plugin: `Values' needs only string argument."); - return (-1); + return -1; } sfree(dd->values); dd->values_len = 0; dd->values = malloc(sizeof(*dd->values) * ci->values_num); if (dd->values == NULL) - return (-1); + return -1; dd->values_len = (size_t)ci->values_num; for (int i = 0; i < ci->values_num; i++) { @@ -296,22 +295,22 @@ static int csnmp_config_add_data_values(data_definition_t *dd, free(dd->values); dd->values = NULL; dd->values_len = 0; - return (-1); + return -1; } } - return (0); + return 0; } /* int csnmp_config_add_data_instance */ static int csnmp_config_add_data_blacklist(data_definition_t *dd, oconfig_item_t *ci) { if (ci->values_num < 1) - return (0); + return 0; for (int i = 0; i < ci->values_num; i++) { if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING("snmp plugin: `Ignore' needs only string argument."); - return (-1); + return -1; } } @@ -323,7 +322,7 @@ static int csnmp_config_add_data_blacklist(data_definition_t *dd, ci->values[i].value.string) != 0) { ERROR("snmp plugin: Can't allocate memory"); strarray_free(dd->ignores, dd->ignores_len); - return (ENOMEM); + return ENOMEM; } } return 0; @@ -333,12 +332,12 @@ static int csnmp_config_add_data_blacklist_match_inverted(data_definition_t *dd, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) { WARNING("snmp plugin: `InvertMatch' needs exactly one boolean argument."); - return (-1); + return -1; } dd->invert_match = ci->values[0].value.boolean ? 1 : 0; - return (0); + return 0; } /* int csnmp_config_add_data_blacklist_match_inverted */ static int csnmp_config_add_data(oconfig_item_t *ci) { @@ -347,12 +346,12 @@ static int csnmp_config_add_data(oconfig_item_t *ci) { dd = calloc(1, sizeof(*dd)); if (dd == NULL) - return (-1); + return -1; status = cf_util_get_string(ci, &dd->name); if (status != 0) { free(dd); - return (-1); + return -1; } dd->scale = 1.0; @@ -409,7 +408,7 @@ static int csnmp_config_add_data(oconfig_item_t *ci) { sfree(dd->values); sfree(dd->ignores); sfree(dd); - return (-1); + return -1; } DEBUG("snmp plugin: dd = { name = %s, type = %s, is_table = %s, values_len = " @@ -427,7 +426,7 @@ static int csnmp_config_add_data(oconfig_item_t *ci) { last->next = dd; } - return (0); + return 0; } /* int csnmp_config_add_data */ static int csnmp_config_add_host_version(host_definition_t *hd, @@ -437,18 +436,18 @@ static int csnmp_config_add_host_version(host_definition_t *hd, if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_NUMBER)) { WARNING("snmp plugin: The `Version' config option needs exactly one number " "argument."); - return (-1); + return -1; } version = (int)ci->values[0].value.number; if ((version < 1) || (version > 3)) { WARNING("snmp plugin: `Version' must either be `1', `2', or `3'."); - return (-1); + return -1; } hd->version = version; - return (0); + return 0; } /* int csnmp_config_add_host_address */ static int csnmp_config_add_host_collect(host_definition_t *host, @@ -459,20 +458,20 @@ static int csnmp_config_add_host_collect(host_definition_t *host, if (ci->values_num < 1) { WARNING("snmp plugin: `Collect' needs at least one argument."); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING("snmp plugin: All arguments to `Collect' must be strings."); - return (-1); + return -1; } data_list_len = host->data_list_len + ci->values_num; data_list = realloc(host->data_list, sizeof(data_definition_t *) * data_list_len); if (data_list == NULL) - return (-1); + return -1; host->data_list = data_list; for (int i = 0; i < ci->values_num; i++) { @@ -493,7 +492,7 @@ static int csnmp_config_add_host_collect(host_definition_t *host, host->data_list_len++; } /* for (values_num) */ - return (0); + return 0; } /* int csnmp_config_add_host_collect */ static int csnmp_config_add_host_auth_protocol(host_definition_t *hd, @@ -514,13 +513,13 @@ static int csnmp_config_add_host_auth_protocol(host_definition_t *hd, } else { WARNING("snmp plugin: The `AuthProtocol' config option must be `MD5' or " "`SHA'."); - return (-1); + return -1; } DEBUG("snmp plugin: host = %s; host->auth_protocol = %s;", hd->name, hd->auth_protocol == usmHMACMD5AuthProtocol ? "MD5" : "SHA"); - return (0); + return 0; } /* int csnmp_config_add_host_auth_protocol */ static int csnmp_config_add_host_priv_protocol(host_definition_t *hd, @@ -541,13 +540,13 @@ static int csnmp_config_add_host_priv_protocol(host_definition_t *hd, } else { WARNING("snmp plugin: The `PrivProtocol' config option must be `AES' or " "`DES'."); - return (-1); + return -1; } DEBUG("snmp plugin: host = %s; host->priv_protocol = %s;", hd->name, hd->priv_protocol == usmAESPrivProtocol ? "AES" : "DES"); - return (0); + return 0; } /* int csnmp_config_add_host_priv_protocol */ static int csnmp_config_add_host_security_level(host_definition_t *hd, @@ -568,13 +567,13 @@ static int csnmp_config_add_host_security_level(host_definition_t *hd, else { WARNING("snmp plugin: The `SecurityLevel' config option must be " "`noAuthNoPriv', `authNoPriv', or `authPriv'."); - return (-1); + return -1; } DEBUG("snmp plugin: host = %s; host->security_level = %d;", hd->name, hd->security_level); - return (0); + return 0; } /* int csnmp_config_add_host_security_level */ static int csnmp_config_add_host(oconfig_item_t *ci) { @@ -586,7 +585,7 @@ static int csnmp_config_add_host(oconfig_item_t *ci) { hd = calloc(1, sizeof(*hd)); if (hd == NULL) - return (-1); + return -1; hd->version = 2; C_COMPLAIN_INIT(&hd->complaint); @@ -697,7 +696,7 @@ static int csnmp_config_add_host(oconfig_item_t *ci) { if (status != 0) { csnmp_host_definition_destroy(hd); - return (-1); + return -1; } DEBUG("snmp plugin: hd = { name = %s, address = %s, community = %s, version " @@ -714,10 +713,10 @@ static int csnmp_config_add_host(oconfig_item_t *ci) { if (status != 0) { ERROR("snmp plugin: Registering complex read function failed."); csnmp_host_definition_destroy(hd); - return (-1); + return -1; } - return (0); + return 0; } /* int csnmp_config_add_host */ static int csnmp_config(oconfig_item_t *ci) { @@ -734,7 +733,7 @@ static int csnmp_config(oconfig_item_t *ci) { } } /* for (ci->children) */ - return (0); + return 0; } /* int csnmp_config */ /* }}} End of the config stuff. Now the interesting part begins */ @@ -944,7 +943,7 @@ static value_t csnmp_value_list_to_value(struct variable_list *vl, int type, ret.gauge = NAN; } - return (ret); + return ret; } /* value_t csnmp_value_list_to_value */ /* csnmp_strvbcopy_hexstring converts the bit string contained in "vb" to a hex @@ -1004,7 +1003,7 @@ static int csnmp_strvbcopy(char *dst, /* {{{ */ (uint8_t)vb->val.string[2], (uint8_t)vb->val.string[3]); } else { dst[0] = 0; - return (EINVAL); + return EINVAL; } num_chars = dst_size - 1; @@ -1014,7 +1013,7 @@ static int csnmp_strvbcopy(char *dst, /* {{{ */ for (size_t i = 0; i < num_chars; i++) { /* Check for control characters. */ if ((unsigned char)src[i] < 32) - return (csnmp_strvbcopy_hexstring(dst, vb, dst_size)); + return csnmp_strvbcopy_hexstring(dst, vb, dst_size); dst[i] = src[i]; } dst[num_chars] = 0; @@ -1042,21 +1041,21 @@ static int csnmp_instance_list_add(csnmp_list_instances_t **head, vb = vb->next_variable) /* do nothing */; if (vb == NULL) - return (-1); + return -1; csnmp_oid_init(&vb_name, vb->name, vb->name_length); il = calloc(1, sizeof(*il)); if (il == NULL) { ERROR("snmp plugin: calloc failed."); - return (-1); + return -1; } il->next = NULL; status = csnmp_oid_suffix(&il->suffix, &vb_name, &dd->instance.oid); if (status != 0) { sfree(il); - return (status); + return status; } /* Get instance name */ @@ -1104,7 +1103,7 @@ static int csnmp_instance_list_add(csnmp_list_instances_t **head, (*tail)->next = il; *tail = il; - return (0); + return 0; } /* int csnmp_instance_list_add */ static int csnmp_dispatch_table(host_definition_t *host, @@ -1115,7 +1114,7 @@ static int csnmp_dispatch_table(host_definition_t *host, value_list_t vl = VALUE_LIST_INIT; csnmp_list_instances_t *instance_list_ptr; - csnmp_table_values_t **value_table_ptr; + csnmp_table_values_t *value_table_ptr[data->values_len]; size_t i; _Bool have_more; @@ -1124,27 +1123,16 @@ static int csnmp_dispatch_table(host_definition_t *host, ds = plugin_get_ds(data->type); if (!ds) { ERROR("snmp plugin: DataSet `%s' not defined.", data->type); - return (-1); + return -1; } assert(ds->ds_num == data->values_len); assert(data->values_len > 0); instance_list_ptr = instance_list; - value_table_ptr = calloc(data->values_len, sizeof(*value_table_ptr)); - if (value_table_ptr == NULL) - return (-1); for (i = 0; i < data->values_len; i++) value_table_ptr[i] = value_table[i]; - vl.values_len = data->values_len; - vl.values = malloc(sizeof(*vl.values) * vl.values_len); - if (vl.values == NULL) { - ERROR("snmp plugin: malloc failed."); - sfree(value_table_ptr); - return (-1); - } - sstrncpy(vl.host, host->name, sizeof(vl.host)); sstrncpy(vl.plugin, "snmp", sizeof(vl.plugin)); @@ -1163,8 +1151,8 @@ static int csnmp_dispatch_table(host_definition_t *host, memcpy(¤t_suffix, &instance_list_ptr->suffix, sizeof(current_suffix)); - } else /* no instance configured */ - { + } else { + /* no instance configured */ csnmp_table_values_t *ptr = value_table_ptr[0]; if (ptr == NULL) { have_more = 0; @@ -1238,6 +1226,10 @@ static int csnmp_dispatch_table(host_definition_t *host, data->instance_prefix, temp); } + vl.values_len = data->values_len; + value_t values[vl.values_len]; + vl.values = values; + for (i = 0; i < data->values_len; i++) vl.values[i] = value_table_ptr[i]->value; @@ -1248,15 +1240,16 @@ static int csnmp_dispatch_table(host_definition_t *host, if (vl.type_instance[0] != '\0') plugin_dispatch_values(&vl); + /* prevent leakage of pointer to local variable. */ + vl.values_len = 0; + vl.values = NULL; + if (instance_list != NULL) instance_list_ptr = instance_list_ptr->next; else value_table_ptr[0] = value_table_ptr[0]->next; } /* while (have_more) */ - sfree(vl.values); - sfree(value_table_ptr); - return (0); } /* int csnmp_dispatch_table */ @@ -1292,20 +1285,20 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { if (host->sess_handle == NULL) { DEBUG("snmp plugin: csnmp_read_table: host->sess_handle == NULL"); - return (-1); + return -1; } ds = plugin_get_ds(data->type); if (!ds) { ERROR("snmp plugin: DataSet `%s' not defined.", data->type); - return (-1); + return -1; } if (ds->ds_num != data->values_len) { ERROR("snmp plugin: DataSet `%s' requires %zu values, but config talks " "about %zu", data->type, ds->ds_num, data->values_len); - return (-1); + return -1; } assert(data->values_len > 0); @@ -1328,7 +1321,7 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { ERROR("snmp plugin: csnmp_read_table: calloc failed."); sfree(value_list_head); sfree(value_list_tail); - return (-1); + return -1; } instance_list_head = NULL; @@ -1517,7 +1510,7 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { sfree(value_list_head); sfree(value_list_tail); - return (0); + return 0; } /* int csnmp_read_table */ static int csnmp_read_value(host_definition_t *host, data_definition_t *data) { @@ -1536,26 +1529,26 @@ static int csnmp_read_value(host_definition_t *host, data_definition_t *data) { if (host->sess_handle == NULL) { DEBUG("snmp plugin: csnmp_read_value: host->sess_handle == NULL"); - return (-1); + return -1; } ds = plugin_get_ds(data->type); if (!ds) { ERROR("snmp plugin: DataSet `%s' not defined.", data->type); - return (-1); + return -1; } if (ds->ds_num != data->values_len) { ERROR("snmp plugin: DataSet `%s' requires %zu values, but config talks " "about %zu", data->type, ds->ds_num, data->values_len); - return (-1); + return -1; } vl.values_len = ds->ds_num; vl.values = malloc(sizeof(*vl.values) * vl.values_len); if (vl.values == NULL) - return (-1); + return -1; for (i = 0; i < vl.values_len; i++) { if (ds->ds[i].type == DS_TYPE_COUNTER) vl.values[i].counter = 0; @@ -1574,7 +1567,7 @@ static int csnmp_read_value(host_definition_t *host, data_definition_t *data) { if (req == NULL) { ERROR("snmp plugin: snmp_pdu_create failed."); sfree(vl.values); - return (-1); + return -1; } for (i = 0; i < data->values_len; i++) @@ -1596,7 +1589,7 @@ static int csnmp_read_value(host_definition_t *host, data_definition_t *data) { sfree(vl.values); csnmp_host_close_session(host); - return (-1); + return -1; } for (vb = res->variables; vb != NULL; vb = vb->next_variable) { @@ -1620,7 +1613,7 @@ static int csnmp_read_value(host_definition_t *host, data_definition_t *data) { plugin_dispatch_values(&vl); sfree(vl.values); - return (0); + return 0; } /* int csnmp_read_value */ static int csnmp_read_host(user_data_t *ud) { @@ -1638,7 +1631,7 @@ static int csnmp_read_host(user_data_t *ud) { csnmp_host_open_session(host); if (host->sess_handle == NULL) - return (-1); + return -1; success = 0; for (i = 0; i < host->data_list_len; i++) { @@ -1654,15 +1647,15 @@ static int csnmp_read_host(user_data_t *ud) { } if (success == 0) - return (-1); + return -1; - return (0); + return 0; } /* int csnmp_read_host */ static int csnmp_init(void) { call_snmp_init_once(); - return (0); + return 0; } /* int csnmp_init */ static int csnmp_shutdown(void) { @@ -1687,7 +1680,7 @@ static int csnmp_shutdown(void) { data_this = data_next; } - return (0); + return 0; } /* int csnmp_shutdown */ void module_register(void) { @@ -1695,7 +1688,3 @@ void module_register(void) { plugin_register_init("snmp", csnmp_init); plugin_register_shutdown("snmp", csnmp_shutdown); } /* void module_register */ - -/* - * vim: shiftwidth=2 softtabstop=2 tabstop=8 fdm=marker - */ diff --git a/src/snmp_agent.c b/src/snmp_agent.c new file mode 100644 index 00000000..d7aea2d2 --- /dev/null +++ b/src/snmp_agent.c @@ -0,0 +1,1576 @@ +/** + * collectd - src/snmp_agent.c + * + * Copyright(c) 2017 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Roman Korynkevych + * Serhiy Pshyk + **/ + +#include "collectd.h" + +#include "common.h" +#include "utils_avltree.h" +#include "utils_cache.h" +#include "utils_llist.h" + +#include + +#include + +#include + +#define PLUGIN_NAME "snmp_agent" +#define ERR_BUF_SIZE 1024 +#define TYPE_STRING -1 + +#ifndef MIN +#define MIN(x, y) ((x) < (y) ? (x) : (y)) +#endif + +struct oid_s { + oid oid[MAX_OID_LEN]; + size_t oid_len; + u_char type; +}; +typedef struct oid_s oid_t; + +struct table_definition_s { + char *name; + oid_t index_oid; + oid_t size_oid; + llist_t *columns; + c_avl_tree_t *instance_index; + c_avl_tree_t *index_instance; +}; +typedef struct table_definition_s table_definition_t; + +struct data_definition_s { + char *name; + char *plugin; + char *plugin_instance; + char *type; + char *type_instance; + const table_definition_t *table; + _Bool is_instance; + oid_t *oids; + size_t oids_len; + double scale; + double shift; +}; +typedef struct data_definition_s data_definition_t; + +struct snmp_agent_ctx_s { + pthread_t thread; + pthread_mutex_t lock; + pthread_mutex_t agentx_lock; + struct tree *tp; + + llist_t *tables; + llist_t *scalars; +}; +typedef struct snmp_agent_ctx_s snmp_agent_ctx_t; + +static snmp_agent_ctx_t *g_agent = NULL; + +#define CHECK_DD_TYPE(_dd, _p, _pi, _t, _ti) \ + (_dd->plugin ? !strcmp(_dd->plugin, _p) : 0) && \ + (_dd->plugin_instance ? !strcmp(_dd->plugin_instance, _pi) : 1) && \ + (_dd->type ? !strcmp(_dd->type, _t) : 0) && \ + (_dd->type_instance ? !strcmp(_dd->type_instance, _ti) : 1) + +static void *snmp_agent_thread_run(void *arg); +static int snmp_agent_register_oid(oid_t *oid, Netsnmp_Node_Handler *handler); +static int snmp_agent_set_vardata(void *dst_buf, size_t *dst_buf_len, + u_char asn_type, double scale, double shift, + const void *value, size_t len, int type); +static int snmp_agent_unregister_oid_index(oid_t *oid, int index); + +static u_char snmp_agent_get_asn_type(oid *oid, size_t oid_len) { + struct tree *node = get_tree(oid, oid_len, g_agent->tp); + + return (node != NULL) ? mib_to_asn_type(node->type) : 0; +} + +static char *snmp_agent_get_oid_name(oid *oid, size_t oid_len) { + struct tree *node = get_tree(oid, oid_len, g_agent->tp); + + return (node != NULL) ? node->label : NULL; +} + +static int snmp_agent_oid_to_string(char *buf, size_t buf_size, + oid_t const *o) { + char oid_str[MAX_OID_LEN][16]; + char *oid_str_ptr[MAX_OID_LEN]; + + for (size_t i = 0; i < o->oid_len; i++) { + ssnprintf(oid_str[i], sizeof(oid_str[i]), "%lu", (unsigned long)o->oid[i]); + oid_str_ptr[i] = oid_str[i]; + } + + return strjoin(buf, buf_size, oid_str_ptr, o->oid_len, "."); +} + +static void snmp_agent_dump_data(void) { +#if COLLECT_DEBUG + char oid_str[DATA_MAX_NAME_LEN]; + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + DEBUG(PLUGIN_NAME ": Table:"); + DEBUG(PLUGIN_NAME ": Name: %s", td->name); + if (td->index_oid.oid_len != 0) { + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &td->index_oid); + DEBUG(PLUGIN_NAME ": IndexOID: %s", oid_str); + } + if (td->size_oid.oid_len != 0) { + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &td->size_oid); + DEBUG(PLUGIN_NAME ": SizeOID: %s", oid_str); + } + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + DEBUG(PLUGIN_NAME ": Column:"); + DEBUG(PLUGIN_NAME ": Name: %s", dd->name); + if (dd->plugin) + DEBUG(PLUGIN_NAME ": Plugin: %s", dd->plugin); + if (dd->plugin_instance) + DEBUG(PLUGIN_NAME ": PluginInstance: %s", dd->plugin_instance); + if (dd->is_instance) + DEBUG(PLUGIN_NAME ": Instance: true"); + if (dd->type) + DEBUG(PLUGIN_NAME ": Type: %s", dd->type); + if (dd->type_instance) + DEBUG(PLUGIN_NAME ": TypeInstance: %s", dd->type_instance); + for (size_t i = 0; i < dd->oids_len; i++) { + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &dd->oids[i]); + DEBUG(PLUGIN_NAME ": OID[%d]: %s", i, oid_str); + } + DEBUG(PLUGIN_NAME ": Scale: %g", dd->scale); + DEBUG(PLUGIN_NAME ": Shift: %g", dd->shift); + } + } + + for (llentry_t *e = llist_head(g_agent->scalars); e != NULL; e = e->next) { + data_definition_t *dd = e->value; + + DEBUG(PLUGIN_NAME ": Scalar:"); + DEBUG(PLUGIN_NAME ": Name: %s", dd->name); + if (dd->plugin) + DEBUG(PLUGIN_NAME ": Plugin: %s", dd->plugin); + if (dd->plugin_instance) + DEBUG(PLUGIN_NAME ": PluginInstance: %s", dd->plugin_instance); + if (dd->is_instance) + DEBUG(PLUGIN_NAME ": Instance: true"); + if (dd->type) + DEBUG(PLUGIN_NAME ": Type: %s", dd->type); + if (dd->type_instance) + DEBUG(PLUGIN_NAME ": TypeInstance: %s", dd->type_instance); + for (size_t i = 0; i < dd->oids_len; i++) { + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &dd->oids[i]); + DEBUG(PLUGIN_NAME ": OID[%d]: %s", i, oid_str); + } + DEBUG(PLUGIN_NAME ": Scale: %g", dd->scale); + DEBUG(PLUGIN_NAME ": Shift: %g", dd->shift); + } +#endif /* COLLECT_DEBUG */ +} + +static int snmp_agent_validate_data(void) { + + snmp_agent_dump_data(); + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + if (!dd->plugin) { + ERROR(PLUGIN_NAME ": Plugin not defined for '%s'.'%s'", td->name, + dd->name); + return -EINVAL; + } + + if (dd->plugin_instance) { + ERROR(PLUGIN_NAME ": PluginInstance should not be defined for table " + "data type '%s'.'%s'", + td->name, dd->name); + return -EINVAL; + } + + if (dd->oids_len == 0) { + ERROR(PLUGIN_NAME ": No OIDs defined for '%s'.'%s'", td->name, + dd->name); + return -EINVAL; + } + + if (dd->is_instance) { + + if (dd->type || dd->type_instance) { + ERROR(PLUGIN_NAME ": Type and TypeInstance are not valid for " + "instance data '%s'.'%s'", + td->name, dd->name); + return -EINVAL; + } + + if (dd->oids_len > 1) { + ERROR( + PLUGIN_NAME + ": Only one OID should be specified for instance data '%s'.'%s'", + td->name, dd->name); + return -EINVAL; + } + } else { + + if (!dd->type) { + ERROR(PLUGIN_NAME ": Type not defined for data '%s'.'%s'", td->name, + dd->name); + return -EINVAL; + } + } + } + } + + for (llentry_t *e = llist_head(g_agent->scalars); e != NULL; e = e->next) { + data_definition_t *dd = e->value; + + if (!dd->plugin) { + ERROR(PLUGIN_NAME ": Plugin not defined for '%s'", dd->name); + return -EINVAL; + } + + if (dd->oids_len == 0) { + ERROR(PLUGIN_NAME ": No OIDs defined for '%s'", dd->name); + return -EINVAL; + } + + if (dd->is_instance) { + ERROR(PLUGIN_NAME + ": Instance flag can't be specified for scalar data '%s'", + dd->name); + return -EINVAL; + } + + if (!dd->type) { + ERROR(PLUGIN_NAME ": Type not defined for data '%s'", dd->name); + return -EINVAL; + } + } + + return 0; +} + +static void snmp_agent_generate_oid2string(oid_t *oid, size_t offset, char *key) { + int key_len = oid->oid[offset]; + int i; + + for (i = 0; i < key_len && offset < oid->oid_len; i++) + key[i] = oid->oid[++offset]; + + key[i] = '\0'; +} + +static int snmp_agent_generate_string2oid(oid_t *oid, const char *key) { + int key_len = strlen(key); + + oid->oid[oid->oid_len++] = key_len; + for (int i = 0; i < key_len; i++) { + oid->oid[oid->oid_len++] = key[i]; + if (oid->oid_len >= MAX_OID_LEN) { + ERROR(PLUGIN_NAME ": Conversion key string %s to OID failed", key); + return -EINVAL; + } + } + + return 0; +} + +static int snmp_agent_register_oid_string(oid_t *oid, const char *key, + Netsnmp_Node_Handler *handler) { + oid_t new_oid; + + memcpy(&new_oid, oid, sizeof(*oid)); + int ret = snmp_agent_generate_string2oid(&new_oid, key); + if (ret != 0) + return ret; + + return snmp_agent_register_oid(&new_oid, handler); +} + +static int snmp_agent_unregister_oid_string(oid_t *oid, const char *key) { + oid_t new_oid; + + memcpy(&new_oid, oid, sizeof(*oid)); + int ret = snmp_agent_generate_string2oid(&new_oid, key); + if (ret != 0) + return ret; + + return unregister_mib(new_oid.oid, new_oid.oid_len); +} + +static int snmp_agent_table_row_remove(table_definition_t *td, + const char *instance) { + int *index = NULL; + char *ins = NULL; + + if (td->index_oid.oid_len) { + if ((c_avl_get(td->instance_index, instance, (void **)&index) != 0) || + (c_avl_get(td->index_instance, index, (void **)&ins) != 0)) + return 0; + } else { + if (c_avl_get(td->instance_index, instance, (void **)&ins) != 0) + return 0; + } + + pthread_mutex_lock(&g_agent->agentx_lock); + + if (td->index_oid.oid_len) + snmp_agent_unregister_oid_index(&td->index_oid, *index); + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + for (size_t i = 0; i < dd->oids_len; i++) + if (td->index_oid.oid_len) + snmp_agent_unregister_oid_index(&dd->oids[i], *index); + else + snmp_agent_unregister_oid_string(&dd->oids[i], ins); + } + + pthread_mutex_unlock(&g_agent->agentx_lock); + + DEBUG(PLUGIN_NAME ": Removed row for '%s' table [%d, %s]", td->name, + (index != NULL) ? *index : -1, ins); + + notification_t n = { + .severity = NOTIF_WARNING, .time = cdtime(), .plugin = PLUGIN_NAME}; + sstrncpy(n.host, hostname_g, sizeof(n.host)); + sstrncpy(n.plugin_instance, ins, sizeof(n.plugin_instance)); + ssnprintf(n.message, sizeof(n.message), + "Removed data row from table %s instance %s index %d", td->name, + ins, (index != NULL) ? *index : -1); + plugin_dispatch_notification(&n); + + if (td->index_oid.oid_len) { + c_avl_remove(td->index_instance, index, NULL, (void **)&ins); + c_avl_remove(td->instance_index, instance, NULL, (void **)&index); + sfree(index); + sfree(ins); + } else { + c_avl_remove(td->instance_index, instance, NULL, (void **)&ins); + sfree(ins); + } + + return 0; +} + +static int snmp_agent_clear_missing(const value_list_t *vl, + __attribute__((unused)) user_data_t *ud) { + if (vl == NULL) + return -EINVAL; + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + if (!dd->is_instance) { + if (CHECK_DD_TYPE(dd, vl->plugin, vl->plugin_instance, vl->type, + vl->type_instance)) { + snmp_agent_table_row_remove(td, vl->plugin_instance); + return 0; + } + } + } + } + + return 0; +} + +static void snmp_agent_free_data(data_definition_t **dd) { + + if (dd == NULL || *dd == NULL) + return; + + /* unregister scalar type OID */ + if ((*dd)->table == NULL) { + for (size_t i = 0; i < (*dd)->oids_len; i++) + unregister_mib((*dd)->oids[i].oid, (*dd)->oids[i].oid_len); + } + if (!(*dd)->table->index_oid.oid_len) { + char *instance; + + c_avl_iterator_t *iter = c_avl_get_iterator((*dd)->table->instance_index); + while (c_avl_iterator_next(iter, (void *)&instance, (void *)&instance) == + 0) { + for (size_t i = 0; i < (*dd)->oids_len; i++) + snmp_agent_unregister_oid_string(&(*dd)->oids[i], instance); + } + c_avl_iterator_destroy(iter); + } else { + /* unregister all table OIDs */ + int *index; + char *value; + + c_avl_iterator_t *iter = c_avl_get_iterator((*dd)->table->index_instance); + while (c_avl_iterator_next(iter, (void *)&index, (void *)&value) == 0) { + for (size_t i = 0; i < (*dd)->oids_len; i++) + snmp_agent_unregister_oid_index(&(*dd)->oids[i], *index); + } + c_avl_iterator_destroy(iter); + } + + sfree((*dd)->name); + sfree((*dd)->plugin); + sfree((*dd)->plugin_instance); + sfree((*dd)->type); + sfree((*dd)->type_instance); + sfree((*dd)->oids); + + sfree(*dd); + + return; +} + +static void snmp_agent_free_table(table_definition_t **td) { + + if (td == NULL || *td == NULL) + return; + + if ((*td)->size_oid.oid_len) + unregister_mib((*td)->size_oid.oid, (*td)->size_oid.oid_len); + + if ((*td)->index_oid.oid_len) { + int *index; + char *value; + + c_avl_iterator_t *iter = c_avl_get_iterator((*td)->index_instance); + while (c_avl_iterator_next(iter, (void *)&index, (void *)&value) == 0) + snmp_agent_unregister_oid_index(&(*td)->index_oid, *index); + + c_avl_iterator_destroy(iter); + } + + for (llentry_t *de = llist_head((*td)->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + snmp_agent_free_data(&dd); + } + + llist_destroy((*td)->columns); + + void *key = NULL; + void *value = NULL; + + /* index_instance and instance_index contain the same pointers */ + c_avl_destroy((*td)->index_instance); + (*td)->index_instance = NULL; + + if ((*td)->instance_index != NULL) { + while (c_avl_pick((*td)->instance_index, &key, &value) == 0) { + if (key != value) + sfree(key); + sfree(value); + } + c_avl_destroy((*td)->instance_index); + (*td)->instance_index = NULL; + } + + sfree((*td)->name); + sfree(*td); + + return; +} + +static int snmp_agent_form_reply(struct netsnmp_request_info_s *requests, + data_definition_t *dd, char *instance, + int oid_index) { + char name[DATA_MAX_NAME_LEN]; + format_name(name, sizeof(name), hostname_g, dd->plugin, + instance ? instance : dd->plugin_instance, dd->type, + dd->type_instance); + DEBUG(PLUGIN_NAME ": Identifier '%s'", name); + + value_t *values; + size_t values_num; + const data_set_t *ds = plugin_get_ds(dd->type); + if (ds == NULL) { + ERROR(PLUGIN_NAME ": Data set not found for '%s' type", dd->type); + return SNMP_NOSUCHINSTANCE; + } + + int ret = uc_get_value_by_name(name, &values, &values_num); + + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to get value for '%s'", name); + return SNMP_NOSUCHINSTANCE; + } + + assert(ds->ds_num == values_num); + assert(oid_index < (int)values_num); + + char data[DATA_MAX_NAME_LEN]; + size_t data_len = sizeof(data); + ret = snmp_agent_set_vardata( + data, &data_len, dd->oids[oid_index].type, dd->scale, dd->shift, + &values[oid_index], sizeof(values[oid_index]), ds->ds[oid_index].type); + + sfree(values); + + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to convert '%s' value to snmp data", name); + return SNMP_NOSUCHINSTANCE; + } + + requests->requestvb->type = dd->oids[oid_index].type; + snmp_set_var_typed_value(requests->requestvb, requests->requestvb->type, + (const u_char *)data, data_len); + + return SNMP_ERR_NOERROR; +} + +static int +snmp_agent_table_oid_handler(struct netsnmp_mib_handler_s *handler, + struct netsnmp_handler_registration_s *reginfo, + struct netsnmp_agent_request_info_s *reqinfo, + struct netsnmp_request_info_s *requests) { + + if (reqinfo->mode != MODE_GET && reqinfo->mode != MODE_GETNEXT) { + DEBUG(PLUGIN_NAME ": Not supported request mode (%d)", reqinfo->mode); + return SNMP_ERR_NOERROR; + } + + pthread_mutex_lock(&g_agent->lock); + + oid_t oid; + memcpy(oid.oid, requests->requestvb->name, + sizeof(oid.oid[0]) * requests->requestvb->name_length); + oid.oid_len = requests->requestvb->name_length; + +#if COLLECT_DEBUG + char oid_str[DATA_MAX_NAME_LEN]; + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &oid); + DEBUG(PLUGIN_NAME ": Get request received for table OID '%s'", oid_str); +#endif + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + for (size_t i = 0; i < dd->oids_len; i++) { + int ret = snmp_oid_ncompare(oid.oid, oid.oid_len, dd->oids[i].oid, + dd->oids[i].oid_len, + MIN(oid.oid_len, dd->oids[i].oid_len)); + if (ret != 0) + continue; + + char *instance; + + if (!td->index_oid.oid_len) { + char key[MAX_OID_LEN]; + + memset(key, 0, sizeof(key)); + snmp_agent_generate_oid2string( + &oid, MIN(oid.oid_len, dd->oids[i].oid_len), key); + + ret = c_avl_get(td->instance_index, key, (void **)&instance); + if (ret != 0) { + DEBUG(PLUGIN_NAME ": Nonexisting index string '%s' requested", key); + pthread_mutex_unlock(&g_agent->lock); + return SNMP_NOSUCHINSTANCE; + } + } else { + int index = oid.oid[oid.oid_len - 1]; + + ret = c_avl_get(td->index_instance, &index, (void **)&instance); + if (ret != 0) { + DEBUG(PLUGIN_NAME ": Nonexisting index '%d' requested", index); + pthread_mutex_unlock(&g_agent->lock); + return SNMP_NOSUCHINSTANCE; + } + } + + if (dd->is_instance) { + requests->requestvb->type = ASN_OCTET_STR; + snmp_set_var_typed_value(requests->requestvb, + requests->requestvb->type, (const u_char *)instance, + strlen((instance))); + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_ERR_NOERROR; + } + + ret = snmp_agent_form_reply(requests, dd, instance, i); + + pthread_mutex_unlock(&g_agent->lock); + + return ret; + } + } + } + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_NOSUCHINSTANCE; +} + +static int snmp_agent_table_index_oid_handler( + struct netsnmp_mib_handler_s *handler, + struct netsnmp_handler_registration_s *reginfo, + struct netsnmp_agent_request_info_s *reqinfo, + struct netsnmp_request_info_s *requests) { + + if (reqinfo->mode != MODE_GET && reqinfo->mode != MODE_GETNEXT) { + DEBUG(PLUGIN_NAME ": Not supported request mode (%d)", reqinfo->mode); + return SNMP_ERR_NOERROR; + } + + pthread_mutex_lock(&g_agent->lock); + + oid_t oid; + memcpy(oid.oid, requests->requestvb->name, + sizeof(oid.oid[0]) * requests->requestvb->name_length); + oid.oid_len = requests->requestvb->name_length; + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + if (td->index_oid.oid_len && + (snmp_oid_ncompare(oid.oid, oid.oid_len, td->index_oid.oid, + td->index_oid.oid_len, + MIN(oid.oid_len, td->index_oid.oid_len)) == 0)) { + + DEBUG(PLUGIN_NAME ": Handle '%s' table index OID", td->name); + + int index = oid.oid[oid.oid_len - 1]; + + int ret = c_avl_get(td->index_instance, &index, &(void *){NULL}); + if (ret != 0) { + /* nonexisting index requested */ + pthread_mutex_unlock(&g_agent->lock); + return SNMP_NOSUCHINSTANCE; + } + + requests->requestvb->type = ASN_INTEGER; + snmp_set_var_typed_value(requests->requestvb, requests->requestvb->type, + (const u_char *)&index, sizeof(index)); + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_ERR_NOERROR; + } + } + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_NOSUCHINSTANCE; +} + +static int snmp_agent_table_size_oid_handler( + struct netsnmp_mib_handler_s *handler, + struct netsnmp_handler_registration_s *reginfo, + struct netsnmp_agent_request_info_s *reqinfo, + struct netsnmp_request_info_s *requests) { + + if (reqinfo->mode != MODE_GET && reqinfo->mode != MODE_GETNEXT) { + DEBUG(PLUGIN_NAME ": Not supported request mode (%d)", reqinfo->mode); + return SNMP_ERR_NOERROR; + } + + pthread_mutex_lock(&g_agent->lock); + + oid_t oid; + memcpy(oid.oid, requests->requestvb->name, + sizeof(oid.oid[0]) * requests->requestvb->name_length); + oid.oid_len = requests->requestvb->name_length; + + DEBUG(PLUGIN_NAME ": Get request received for table size OID"); + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + if (td->size_oid.oid_len && + (snmp_oid_ncompare(oid.oid, oid.oid_len, td->size_oid.oid, + td->size_oid.oid_len, + MIN(oid.oid_len, td->size_oid.oid_len)) == 0)) { + DEBUG(PLUGIN_NAME ": Handle '%s' table size OID", td->name); + + long size = c_avl_size(td->index_instance); + + requests->requestvb->type = td->size_oid.type; + snmp_set_var_typed_value(requests->requestvb, requests->requestvb->type, + (const u_char *)&size, sizeof(size)); + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_ERR_NOERROR; + } + } + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_NOSUCHINSTANCE; +} + +static int +snmp_agent_scalar_oid_handler(struct netsnmp_mib_handler_s *handler, + struct netsnmp_handler_registration_s *reginfo, + struct netsnmp_agent_request_info_s *reqinfo, + struct netsnmp_request_info_s *requests) { + + if (reqinfo->mode != MODE_GET && reqinfo->mode != MODE_GETNEXT) { + DEBUG(PLUGIN_NAME ": Not supported request mode (%d)", reqinfo->mode); + return SNMP_ERR_NOERROR; + } + + pthread_mutex_lock(&g_agent->lock); + + oid_t oid; + memcpy(oid.oid, requests->requestvb->name, + sizeof(oid.oid[0]) * requests->requestvb->name_length); + oid.oid_len = requests->requestvb->name_length; + +#if COLLECT_DEBUG + char oid_str[DATA_MAX_NAME_LEN]; + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), &oid); + DEBUG(PLUGIN_NAME ": Get request received for scalar OID '%s'", oid_str); +#endif + + for (llentry_t *de = llist_head(g_agent->scalars); de != NULL; + de = de->next) { + data_definition_t *dd = de->value; + + for (size_t i = 0; i < dd->oids_len; i++) { + + int ret = snmp_oid_compare(oid.oid, oid.oid_len, dd->oids[i].oid, + dd->oids[i].oid_len); + if (ret != 0) + continue; + + ret = snmp_agent_form_reply(requests, dd, NULL, i); + + pthread_mutex_unlock(&g_agent->lock); + + return ret; + } + } + + pthread_mutex_unlock(&g_agent->lock); + + return SNMP_NOSUCHINSTANCE; +} + +static int snmp_agent_register_table_oids(void) { + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + if (td->size_oid.oid_len != 0) { + td->size_oid.type = + snmp_agent_get_asn_type(td->size_oid.oid, td->size_oid.oid_len); + td->size_oid.oid_len++; + int ret = snmp_agent_register_oid(&td->size_oid, + snmp_agent_table_size_oid_handler); + if (ret != 0) + return ret; + } + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + for (size_t i = 0; i < dd->oids_len; i++) { + dd->oids[i].type = + snmp_agent_get_asn_type(dd->oids[i].oid, dd->oids[i].oid_len); + } + } + } + + return 0; +} + +static int snmp_agent_register_scalar_oids(void) { + + for (llentry_t *e = llist_head(g_agent->scalars); e != NULL; e = e->next) { + data_definition_t *dd = e->value; + + for (size_t i = 0; i < dd->oids_len; i++) { + + dd->oids[i].type = + snmp_agent_get_asn_type(dd->oids[i].oid, dd->oids[i].oid_len); + + int ret = + snmp_agent_register_oid(&dd->oids[i], snmp_agent_scalar_oid_handler); + if (ret != 0) + return ret; + } + } + + return 0; +} + +static int snmp_agent_config_data_oids(data_definition_t *dd, + oconfig_item_t *ci) { + if (ci->values_num < 1) { + WARNING(PLUGIN_NAME ": `OIDs' needs at least one argument"); + return -EINVAL; + } + + for (int i = 0; i < ci->values_num; i++) + if (ci->values[i].type != OCONFIG_TYPE_STRING) { + WARNING(PLUGIN_NAME ": `OIDs' needs only string argument"); + return -EINVAL; + } + + if (dd->oids != NULL) + sfree(dd->oids); + dd->oids_len = 0; + dd->oids = calloc(ci->values_num, sizeof(*dd->oids)); + if (dd->oids == NULL) + return -ENOMEM; + dd->oids_len = (size_t)ci->values_num; + + for (int i = 0; i < ci->values_num; i++) { + dd->oids[i].oid_len = MAX_OID_LEN; + + if (NULL == snmp_parse_oid(ci->values[i].value.string, dd->oids[i].oid, + &dd->oids[i].oid_len)) { + ERROR(PLUGIN_NAME ": snmp_parse_oid (%s) failed", + ci->values[i].value.string); + sfree(dd->oids); + dd->oids_len = 0; + return -1; + } + } + + return 0; +} + +static int snmp_agent_config_table_size_oid(table_definition_t *td, + oconfig_item_t *ci) { + if (ci->values_num < 1) { + WARNING(PLUGIN_NAME ": `TableSizeOID' is empty"); + return -EINVAL; + } + + if (ci->values[0].type != OCONFIG_TYPE_STRING) { + WARNING(PLUGIN_NAME ": `TableSizeOID' needs only string argument"); + return -EINVAL; + } + + td->size_oid.oid_len = MAX_OID_LEN; + + if (NULL == snmp_parse_oid(ci->values[0].value.string, td->size_oid.oid, + &td->size_oid.oid_len)) { + ERROR(PLUGIN_NAME ": Failed to parse table size OID (%s)", + ci->values[0].value.string); + td->size_oid.oid_len = 0; + return -EINVAL; + } + + return 0; +} + +static int snmp_agent_config_table_index_oid(table_definition_t *td, + oconfig_item_t *ci) { + + if (ci->values_num < 1) { + WARNING(PLUGIN_NAME ": `IndexOID' is empty"); + return -EINVAL; + } + + if (ci->values[0].type != OCONFIG_TYPE_STRING) { + WARNING(PLUGIN_NAME ": `IndexOID' needs only string argument"); + return -EINVAL; + } + + td->index_oid.oid_len = MAX_OID_LEN; + + if (NULL == snmp_parse_oid(ci->values[0].value.string, td->index_oid.oid, + &td->index_oid.oid_len)) { + ERROR(PLUGIN_NAME ": Failed to parse table index OID (%s)", + ci->values[0].value.string); + td->index_oid.oid_len = 0; + return -EINVAL; + } + + return 0; +} + +static int snmp_agent_config_table_data(table_definition_t *td, + oconfig_item_t *ci) { + data_definition_t *dd; + int ret = 0; + + assert(ci != NULL); + + dd = calloc(1, sizeof(*dd)); + if (dd == NULL) { + ERROR(PLUGIN_NAME ": Failed to allocate memory for table data definition"); + return -ENOMEM; + } + + ret = cf_util_get_string(ci, &dd->name); + if (ret != 0) { + sfree(dd); + return -1; + } + + dd->scale = 1.0; + dd->shift = 0.0; + + dd->table = td; + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *option = ci->children + i; + + if (strcasecmp("Instance", option->key) == 0) + ret = cf_util_get_boolean(option, &dd->is_instance); + else if (strcasecmp("Plugin", option->key) == 0) + ret = cf_util_get_string(option, &dd->plugin); + else if (strcasecmp("PluginInstance", option->key) == 0) + ret = cf_util_get_string(option, &dd->plugin_instance); + else if (strcasecmp("Type", option->key) == 0) + ret = cf_util_get_string(option, &dd->type); + else if (strcasecmp("TypeInstance", option->key) == 0) + ret = cf_util_get_string(option, &dd->type_instance); + else if (strcasecmp("Shift", option->key) == 0) + ret = cf_util_get_double(option, &dd->shift); + else if (strcasecmp("Scale", option->key) == 0) + ret = cf_util_get_double(option, &dd->scale); + else if (strcasecmp("OIDs", option->key) == 0) + ret = snmp_agent_config_data_oids(dd, option); + else { + WARNING(PLUGIN_NAME ": Option `%s' not allowed here", option->key); + ret = -1; + } + + if (ret != 0) { + snmp_agent_free_data(&dd); + return -1; + } + } + + llentry_t *entry = llentry_create(dd->name, dd); + if (entry == NULL) { + snmp_agent_free_data(&dd); + return -ENOMEM; + } + + llist_append(td->columns, entry); + + return 0; +} + +static int snmp_agent_config_data(oconfig_item_t *ci) { + data_definition_t *dd; + int ret = 0; + + assert(ci != NULL); + + dd = calloc(1, sizeof(*dd)); + if (dd == NULL) { + ERROR(PLUGIN_NAME ": Failed to allocate memory for data definition"); + return -ENOMEM; + } + + ret = cf_util_get_string(ci, &dd->name); + if (ret != 0) { + free(dd); + return -1; + } + + dd->scale = 1.0; + dd->shift = 0.0; + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *option = ci->children + i; + + if (strcasecmp("Instance", option->key) == 0) + ret = cf_util_get_boolean(option, &dd->is_instance); + else if (strcasecmp("Plugin", option->key) == 0) + ret = cf_util_get_string(option, &dd->plugin); + else if (strcasecmp("PluginInstance", option->key) == 0) + ret = cf_util_get_string(option, &dd->plugin_instance); + else if (strcasecmp("Type", option->key) == 0) + ret = cf_util_get_string(option, &dd->type); + else if (strcasecmp("TypeInstance", option->key) == 0) + ret = cf_util_get_string(option, &dd->type_instance); + else if (strcasecmp("Shift", option->key) == 0) + ret = cf_util_get_double(option, &dd->shift); + else if (strcasecmp("Scale", option->key) == 0) + ret = cf_util_get_double(option, &dd->scale); + else if (strcasecmp("OIDs", option->key) == 0) + ret = snmp_agent_config_data_oids(dd, option); + else { + WARNING(PLUGIN_NAME ": Option `%s' not allowed here", option->key); + ret = -1; + } + + if (ret != 0) { + snmp_agent_free_data(&dd); + return -1; + } + } + + llentry_t *entry = llentry_create(dd->name, dd); + if (entry == NULL) { + snmp_agent_free_data(&dd); + return -ENOMEM; + } + + llist_append(g_agent->scalars, entry); + + return 0; +} + +static int num_compare(const int *a, const int *b) { + assert((a != NULL) && (b != NULL)); + if (*a < *b) + return -1; + else if (*a > *b) + return 1; + else + return 0; +} + +static int snmp_agent_config_table(oconfig_item_t *ci) { + table_definition_t *td; + int ret = 0; + + assert(ci != NULL); + + td = calloc(1, sizeof(*td)); + if (td == NULL) { + ERROR(PLUGIN_NAME ": Failed to allocate memory for table definition"); + return -ENOMEM; + } + + ret = cf_util_get_string(ci, &td->name); + if (ret != 0) { + sfree(td); + return -1; + } + + td->columns = llist_create(); + if (td->columns == NULL) { + ERROR(PLUGIN_NAME ": Failed to allocate memory for columns list"); + snmp_agent_free_table(&td); + return -ENOMEM; + } + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *option = ci->children + i; + + if (strcasecmp("IndexOID", option->key) == 0) + ret = snmp_agent_config_table_index_oid(td, option); + else if (strcasecmp("SizeOID", option->key) == 0) + ret = snmp_agent_config_table_size_oid(td, option); + else if (strcasecmp("Data", option->key) == 0) + ret = snmp_agent_config_table_data(td, option); + else { + WARNING(PLUGIN_NAME ": Option `%s' not allowed here", option->key); + ret = -1; + } + + if (ret != 0) { + snmp_agent_free_table(&td); + return -ENOMEM; + } + } + + llentry_t *entry = llentry_create(td->name, td); + if (entry == NULL) { + snmp_agent_free_table(&td); + return -ENOMEM; + } + + td->instance_index = + c_avl_create((int (*)(const void *, const void *))strcmp); + if (td->instance_index == NULL) { + snmp_agent_free_table(&td); + return -ENOMEM; + } + + td->index_instance = + c_avl_create((int (*)(const void *, const void *))num_compare); + if (td->index_instance == NULL) { + snmp_agent_free_table(&td); + return -ENOMEM; + } + + llist_append(g_agent->tables, entry); + + return 0; +} + +static int snmp_agent_get_value_from_ds_type(const value_t *val, int type, + double scale, double shift, + long *value) { + switch (type) { + case DS_TYPE_COUNTER: + *value = (long)((val->counter * scale) + shift); + break; + case DS_TYPE_ABSOLUTE: + *value = (long)((val->absolute * scale) + shift); + break; + case DS_TYPE_DERIVE: + *value = (long)((val->derive * scale) + shift); + break; + case DS_TYPE_GAUGE: + *value = (long)((val->gauge * scale) + shift); + break; + case TYPE_STRING: + break; + default: + ERROR(PLUGIN_NAME ": Unknown data source type: %i", type); + return -EINVAL; + } + + return 0; +} + +static int snmp_agent_set_vardata(void *data, size_t *data_len, u_char asn_type, + double scale, double shift, const void *value, + size_t len, int type) { + + int ret; + netsnmp_vardata var; + const value_t *val; + long new_value = 0; + + val = value; + var.string = (u_char *)data; + + ret = snmp_agent_get_value_from_ds_type(val, type, scale, shift, &new_value); + if (ret != 0) + return ret; + + switch (asn_type) { + case ASN_INTEGER: + case ASN_UINTEGER: + case ASN_COUNTER: + case ASN_TIMETICKS: + case ASN_GAUGE: + if (*data_len < sizeof(*var.integer)) + return -EINVAL; + *var.integer = new_value; + *data_len = sizeof(*var.integer); + break; + case ASN_COUNTER64: + if (*data_len < sizeof(*var.counter64)) + return -EINVAL; + var.counter64->high = (u_long)((int64_t)new_value >> 32); + var.counter64->low = (u_long)((int64_t)new_value & 0xFFFFFFFF); + *data_len = sizeof(*var.counter64); + break; + case ASN_OCTET_STR: + if (type == DS_TYPE_GAUGE) { + char buf[DATA_MAX_NAME_LEN]; + snprintf(buf, sizeof(buf), "%.2f", val->gauge); + if (*data_len < strlen(buf)) + return -EINVAL; + *data_len = strlen(buf); + memcpy(var.string, buf, *data_len); + } else { + ERROR(PLUGIN_NAME ": Failed to convert %d ds type to %d asn type", type, + asn_type); + return -EINVAL; + } + break; + default: + ERROR(PLUGIN_NAME ": Failed to convert %d ds type to %d asn type", type, + asn_type); + return -EINVAL; + } + + return 0; +} + +static int snmp_agent_register_oid_index(oid_t *oid, int index, + Netsnmp_Node_Handler *handler) { + oid_t new_oid; + memcpy(&new_oid, oid, sizeof(*oid)); + new_oid.oid[new_oid.oid_len++] = index; + return snmp_agent_register_oid(&new_oid, handler); +} + +static int snmp_agent_unregister_oid_index(oid_t *oid, int index) { + oid_t new_oid; + memcpy(&new_oid, oid, sizeof(*oid)); + new_oid.oid[new_oid.oid_len++] = index; + return unregister_mib(new_oid.oid, new_oid.oid_len); +} + +static int snmp_agent_update_index(table_definition_t *td, + const char *instance) { + + if (c_avl_get(td->instance_index, instance, NULL) == 0) + return 0; + + int ret; + int *index = NULL; + char *ins; + + ins = strdup(instance); + if (ins == NULL) + return -ENOMEM; + + /* need to generate index for the table */ + if (td->index_oid.oid_len) { + index = calloc(1, sizeof(*index)); + if (index == NULL) { + sfree(ins); + return -ENOMEM; + } + + *index = c_avl_size(td->instance_index) + 1; + + ret = c_avl_insert(td->instance_index, ins, index); + if (ret != 0) { + sfree(ins); + sfree(index); + return ret; + } + + ret = c_avl_insert(td->index_instance, index, ins); + if (ret < 0) { + DEBUG(PLUGIN_NAME ": Failed to update index_instance for '%s' table", + td->name); + c_avl_remove(td->instance_index, ins, NULL, (void **)&index); + sfree(ins); + sfree(index); + return ret; + } + + ret = snmp_agent_register_oid_index(&td->index_oid, *index, + snmp_agent_table_index_oid_handler); + if (ret != 0) + return ret; + } else { + /* instance as a key is required for any table */ + ret = c_avl_insert(td->instance_index, ins, ins); + if (ret != 0) { + sfree(ins); + return ret; + } + } + + /* register new oids for all columns */ + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + for (size_t i = 0; i < dd->oids_len; i++) { + if (td->index_oid.oid_len) { + ret = snmp_agent_register_oid_index(&dd->oids[i], *index, + snmp_agent_table_oid_handler); + } else { + ret = snmp_agent_register_oid_string(&dd->oids[i], ins, + snmp_agent_table_oid_handler); + } + + if (ret != 0) + return ret; + } + } + + DEBUG(PLUGIN_NAME ": Updated index for '%s' table [%d, %s]", td->name, + (index != NULL) ? *index : -1, ins); + + notification_t n = { + .severity = NOTIF_OKAY, .time = cdtime(), .plugin = PLUGIN_NAME}; + sstrncpy(n.host, hostname_g, sizeof(n.host)); + sstrncpy(n.plugin_instance, ins, sizeof(n.plugin_instance)); + ssnprintf(n.message, sizeof(n.message), + "Data row added to table %s instance %s index %d", td->name, ins, + (index != NULL) ? *index : -1); + plugin_dispatch_notification(&n); + + return 0; +} + +static int snmp_agent_write(value_list_t const *vl) { + + if (vl == NULL) + return -EINVAL; + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) { + table_definition_t *td = te->value; + + for (llentry_t *de = llist_head(td->columns); de != NULL; de = de->next) { + data_definition_t *dd = de->value; + + if (!dd->is_instance) { + if (CHECK_DD_TYPE(dd, vl->plugin, vl->plugin_instance, vl->type, + vl->type_instance)) { + snmp_agent_update_index(td, vl->plugin_instance); + return 0; + } + } + } + } + + return 0; +} + +static int snmp_agent_collect(const data_set_t *ds, const value_list_t *vl, + user_data_t __attribute__((unused)) * user_data) { + + pthread_mutex_lock(&g_agent->lock); + + snmp_agent_write(vl); + + pthread_mutex_unlock(&g_agent->lock); + + return 0; +} + +static int snmp_agent_preinit(void) { + if (g_agent != NULL) { + /* already initialized if config callback was called before init callback */ + return 0; + } + + g_agent = calloc(1, sizeof(*g_agent)); + if (g_agent == NULL) { + ERROR(PLUGIN_NAME ": Failed to allocate memory for snmp agent context"); + return -ENOMEM; + } + + g_agent->tables = llist_create(); + g_agent->scalars = llist_create(); + + int err; + /* make us a agentx client. */ + err = netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, + 1); + if (err != 0) { + ERROR(PLUGIN_NAME ": Failed to set agent role (%d)", err); + return -1; + } + + /* + * For SNMP debug purposes uses snmp_set_do_debugging(1); + */ + + /* initialize the agent library */ + err = init_agent(PLUGIN_NAME); + if (err != 0) { + ERROR(PLUGIN_NAME ": Failed to initialize the agent library (%d)", err); + return -1; + } + + init_snmp(PLUGIN_NAME); + + g_agent->tp = read_all_mibs(); + + return 0; +} + +static int snmp_agent_init(void) { + int ret; + + ret = snmp_agent_preinit(); + if (ret != 0) + return ret; + + ret = snmp_agent_register_scalar_oids(); + if (ret != 0) + return ret; + + ret = snmp_agent_register_table_oids(); + if (ret != 0) + return ret; + + /* create a second thread to listen for requests from AgentX*/ + ret = pthread_create(&g_agent->thread, NULL, &snmp_agent_thread_run, NULL); + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to create a separate thread, err %u", ret); + return ret; + } + + ret = pthread_mutex_init(&g_agent->lock, NULL); + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to initialize mutex, err %u", ret); + return ret; + } + + ret = pthread_mutex_init(&g_agent->agentx_lock, NULL); + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to initialize AgentX mutex, err %u", ret); + return ret; + } + + return 0; +} + +static void *snmp_agent_thread_run(void __attribute__((unused)) * arg) { + INFO(PLUGIN_NAME ": Thread is up and running"); + + for (;;) { + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + + pthread_mutex_lock(&g_agent->agentx_lock); + agent_check_and_process(0); /* 0 == don't block */ + pthread_mutex_unlock(&g_agent->agentx_lock); + + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + usleep(10); + } + + pthread_exit(0); +} + +static int snmp_agent_register_oid(oid_t *oid, Netsnmp_Node_Handler *handler) { + netsnmp_handler_registration *reg; + char *oid_name = snmp_agent_get_oid_name(oid->oid, oid->oid_len - 1); + char oid_str[DATA_MAX_NAME_LEN]; + + snmp_agent_oid_to_string(oid_str, sizeof(oid_str), oid); + + if (oid_name == NULL) { + WARNING(PLUGIN_NAME + ": Skipped registration: OID (%s) is not found in main tree", + oid_str); + return 0; + } + + reg = netsnmp_create_handler_registration(oid_name, handler, oid->oid, + oid->oid_len, HANDLER_CAN_RONLY); + if (reg == NULL) { + ERROR(PLUGIN_NAME ": Failed to create handler registration for OID (%s)", + oid_str); + return -1; + } + + pthread_mutex_lock(&g_agent->agentx_lock); + + if (netsnmp_register_instance(reg) != MIB_REGISTERED_OK) { + ERROR(PLUGIN_NAME ": Failed to register handler for OID (%s)", oid_str); + pthread_mutex_unlock(&g_agent->agentx_lock); + return -1; + } + + pthread_mutex_unlock(&g_agent->agentx_lock); + + DEBUG(PLUGIN_NAME ": Registered handler for OID (%s)", oid_str); + + return 0; +} + +static int snmp_agent_free_config(void) { + + if (g_agent == NULL) + return -EINVAL; + + for (llentry_t *te = llist_head(g_agent->tables); te != NULL; te = te->next) + snmp_agent_free_table((table_definition_t **)&te->value); + llist_destroy(g_agent->tables); + + for (llentry_t *de = llist_head(g_agent->scalars); de != NULL; de = de->next) + snmp_agent_free_data((data_definition_t **)&de->value); + llist_destroy(g_agent->scalars); + + return 0; +} + +static int snmp_agent_shutdown(void) { + int ret = 0; + + DEBUG(PLUGIN_NAME ": snmp_agent_shutdown"); + + if (g_agent == NULL) { + ERROR(PLUGIN_NAME ": snmp_agent_shutdown: plugin not initialized"); + return -EINVAL; + } + + if (pthread_cancel(g_agent->thread) != 0) + ERROR(PLUGIN_NAME ": snmp_agent_shutdown: failed to cancel the thread"); + + if (pthread_join(g_agent->thread, NULL) != 0) + ERROR(PLUGIN_NAME ": snmp_agent_shutdown: failed to join the thread"); + + snmp_agent_free_config(); + + snmp_shutdown(PLUGIN_NAME); + + pthread_mutex_destroy(&g_agent->lock); + pthread_mutex_destroy(&g_agent->agentx_lock); + + sfree(g_agent); + + return ret; +} + +static int snmp_agent_config(oconfig_item_t *ci) { + + int ret = snmp_agent_preinit(); + + if (ret != 0) { + sfree(g_agent); + return -EINVAL; + } + + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("Data", child->key) == 0) { + ret = snmp_agent_config_data(child); + } else if (strcasecmp("Table", child->key) == 0) { + ret = snmp_agent_config_table(child); + } else { + ERROR(PLUGIN_NAME ": Unknown configuration option `%s'", child->key); + ret = (-EINVAL); + } + + if (ret != 0) { + ERROR(PLUGIN_NAME ": Failed to parse configuration"); + snmp_agent_free_config(); + snmp_shutdown(PLUGIN_NAME); + sfree(g_agent); + return -EINVAL; + } + } + + ret = snmp_agent_validate_data(); + if (ret != 0) { + ERROR(PLUGIN_NAME ": Invalid configuration provided"); + snmp_agent_free_config(); + snmp_shutdown(PLUGIN_NAME); + sfree(g_agent); + return -EINVAL; + } + + return 0; +} + +void module_register(void) { + plugin_register_init(PLUGIN_NAME, snmp_agent_init); + plugin_register_complex_config(PLUGIN_NAME, snmp_agent_config); + plugin_register_write(PLUGIN_NAME, snmp_agent_collect, NULL); + plugin_register_missing(PLUGIN_NAME, snmp_agent_clear_missing, NULL); + plugin_register_shutdown(PLUGIN_NAME, snmp_agent_shutdown); +} diff --git a/src/statsd.c b/src/statsd.c index 47e01d80..e1b52cbc 100644 --- a/src/statsd.c +++ b/src/statsd.c @@ -107,7 +107,7 @@ static statsd_metric_t *statsd_metric_lookup_unsafe(char const *name, /* {{{ */ key[0] = 's'; break; default: - return (NULL); + return NULL; } key[1] = ':'; @@ -115,19 +115,19 @@ static statsd_metric_t *statsd_metric_lookup_unsafe(char const *name, /* {{{ */ status = c_avl_get(metrics_tree, key, (void *)&metric); if (status == 0) - return (metric); + return metric; key_copy = strdup(key); if (key_copy == NULL) { ERROR("statsd plugin: strdup failed."); - return (NULL); + return NULL; } metric = calloc(1, sizeof(*metric)); if (metric == NULL) { ERROR("statsd plugin: calloc failed."); sfree(key_copy); - return (NULL); + return NULL; } metric->type = type; @@ -139,10 +139,10 @@ static statsd_metric_t *statsd_metric_lookup_unsafe(char const *name, /* {{{ */ ERROR("statsd plugin: c_avl_insert failed."); sfree(key_copy); sfree(metric); - return (NULL); + return NULL; } - return (metric); + return metric; } /* }}} statsd_metric_lookup_unsafe */ static int statsd_metric_set(char const *name, double value, /* {{{ */ @@ -154,7 +154,7 @@ static int statsd_metric_set(char const *name, double value, /* {{{ */ metric = statsd_metric_lookup_unsafe(name, type); if (metric == NULL) { pthread_mutex_unlock(&metrics_lock); - return (-1); + return -1; } metric->value = value; @@ -162,7 +162,7 @@ static int statsd_metric_set(char const *name, double value, /* {{{ */ pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_metric_set */ static int statsd_metric_add(char const *name, double delta, /* {{{ */ @@ -174,7 +174,7 @@ static int statsd_metric_add(char const *name, double delta, /* {{{ */ metric = statsd_metric_lookup_unsafe(name, type); if (metric == NULL) { pthread_mutex_unlock(&metrics_lock); - return (-1); + return -1; } metric->value += delta; @@ -182,7 +182,7 @@ static int statsd_metric_add(char const *name, double delta, /* {{{ */ pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_metric_add */ static void statsd_metric_free(statsd_metric_t *metric) /* {{{ */ @@ -217,9 +217,9 @@ static int statsd_parse_value(char const *str, value_t *ret_value) /* {{{ */ ret_value->gauge = (gauge_t)strtod(str, &endptr); if ((str == endptr) || ((endptr != NULL) && (*endptr != 0))) - return (-1); + return -1; - return (0); + return 0; } /* }}} int statsd_parse_value */ static int statsd_handle_counter(char const *name, /* {{{ */ @@ -229,27 +229,27 @@ static int statsd_handle_counter(char const *name, /* {{{ */ int status; if ((extra != NULL) && (extra[0] != '@')) - return (-1); + return -1; scale.gauge = 1.0; if (extra != NULL) { status = statsd_parse_value(extra + 1, &scale); if (status != 0) - return (status); + return status; if (!isfinite(scale.gauge) || (scale.gauge <= 0.0) || (scale.gauge > 1.0)) - return (-1); + return -1; } value.gauge = 1.0; status = statsd_parse_value(value_str, &value); if (status != 0) - return (status); + return status; /* Changes to the counter are added to (statsd_metric_t*)->value. ->counter is * only updated in statsd_metric_submit_unsafe(). */ - return (statsd_metric_add(name, (double)(value.gauge / scale.gauge), - STATSD_COUNTER)); + return statsd_metric_add(name, (double)(value.gauge / scale.gauge), + STATSD_COUNTER); } /* }}} int statsd_handle_counter */ static int statsd_handle_gauge(char const *name, /* {{{ */ @@ -260,12 +260,12 @@ static int statsd_handle_gauge(char const *name, /* {{{ */ value.gauge = 0; status = statsd_parse_value(value_str, &value); if (status != 0) - return (status); + return status; if ((value_str[0] == '+') || (value_str[0] == '-')) - return (statsd_metric_add(name, (double)value.gauge, STATSD_GAUGE)); + return statsd_metric_add(name, (double)value.gauge, STATSD_GAUGE); else - return (statsd_metric_set(name, (double)value.gauge, STATSD_GAUGE)); + return statsd_metric_set(name, (double)value.gauge, STATSD_GAUGE); } /* }}} int statsd_handle_gauge */ static int statsd_handle_timer(char const *name, /* {{{ */ @@ -277,22 +277,22 @@ static int statsd_handle_timer(char const *name, /* {{{ */ int status; if ((extra != NULL) && (extra[0] != '@')) - return (-1); + return -1; scale.gauge = 1.0; if (extra != NULL) { status = statsd_parse_value(extra + 1, &scale); if (status != 0) - return (status); + return status; if (!isfinite(scale.gauge) || (scale.gauge <= 0.0) || (scale.gauge > 1.0)) - return (-1); + return -1; } value_ms.derive = 0; status = statsd_parse_value(value_str, &value_ms); if (status != 0) - return (status); + return status; value = MS_TO_CDTIME_T(value_ms.gauge / scale.gauge); @@ -301,21 +301,21 @@ static int statsd_handle_timer(char const *name, /* {{{ */ metric = statsd_metric_lookup_unsafe(name, STATSD_TIMER); if (metric == NULL) { pthread_mutex_unlock(&metrics_lock); - return (-1); + return -1; } if (metric->latency == NULL) metric->latency = latency_counter_create(); if (metric->latency == NULL) { pthread_mutex_unlock(&metrics_lock); - return (-1); + return -1; } latency_counter_add(metric->latency, value); metric->updates_num++; pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_handle_timer */ static int statsd_handle_set(char const *name, /* {{{ */ @@ -329,7 +329,7 @@ static int statsd_handle_set(char const *name, /* {{{ */ metric = statsd_metric_lookup_unsafe(name, STATSD_SET); if (metric == NULL) { pthread_mutex_unlock(&metrics_lock); - return (-1); + return -1; } /* Make sure metric->set exists. */ @@ -339,14 +339,14 @@ static int statsd_handle_set(char const *name, /* {{{ */ if (metric->set == NULL) { pthread_mutex_unlock(&metrics_lock); ERROR("statsd plugin: c_avl_create failed."); - return (-1); + return -1; } set_key = strdup(set_key_orig); if (set_key == NULL) { pthread_mutex_unlock(&metrics_lock); ERROR("statsd plugin: strdup failed."); - return (-1); + return -1; } status = c_avl_insert(metric->set, set_key, /* value = */ NULL); @@ -356,7 +356,7 @@ static int statsd_handle_set(char const *name, /* {{{ */ ERROR("statsd plugin: c_avl_insert (\"%s\") failed with status %i.", set_key, status); sfree(set_key); - return (-1); + return -1; } else if (status > 0) /* key already exists */ { sfree(set_key); @@ -365,7 +365,7 @@ static int statsd_handle_set(char const *name, /* {{{ */ metric->updates_num++; pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_handle_set */ static int statsd_parse_line(char *buffer) /* {{{ */ @@ -377,13 +377,13 @@ static int statsd_parse_line(char *buffer) /* {{{ */ type = strchr(name, '|'); if (type == NULL) - return (-1); + return -1; *type = 0; type++; value = strrchr(name, ':'); if (value == NULL) - return (-1); + return -1; *value = 0; value++; @@ -394,20 +394,20 @@ static int statsd_parse_line(char *buffer) /* {{{ */ } if (strcmp("c", type) == 0) - return (statsd_handle_counter(name, value, extra)); + return statsd_handle_counter(name, value, extra); else if (strcmp("ms", type) == 0) - return (statsd_handle_timer(name, value, extra)); + return statsd_handle_timer(name, value, extra); /* extra is only valid for counters and timers */ if (extra != NULL) - return (-1); + return -1; if (strcmp("g", type) == 0) - return (statsd_handle_gauge(name, value)); + return statsd_handle_gauge(name, value); else if (strcmp("s", type) == 0) - return (statsd_handle_set(name, value)); + return statsd_handle_set(name, value); else - return (-1); + return -1; } /* }}} void statsd_parse_line */ static void statsd_parse_buffer(char *buffer) /* {{{ */ @@ -484,7 +484,7 @@ static int statsd_network_init(struct pollfd **ret_fds, /* {{{ */ if (status != 0) { ERROR("statsd plugin: getaddrinfo (\"%s\", \"%s\") failed: %s", node, service, gai_strerror(status)); - return (status); + return status; } for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; @@ -538,12 +538,12 @@ static int statsd_network_init(struct pollfd **ret_fds, /* {{{ */ if (fds_num == 0) { ERROR("statsd plugin: Unable to create listening socket for [%s]:%s.", (node != NULL) ? node : "::", service); - return (ENOENT); + return ENOENT; } *ret_fds = fds; *ret_fds_num = fds_num; - return (0); + return 0; } /* }}} int statsd_network_init */ static void *statsd_network_thread(void *args) /* {{{ */ @@ -585,7 +585,7 @@ static void *statsd_network_thread(void *args) /* {{{ */ close(fds[i].fd); sfree(fds); - return ((void *)0); + return (void *)0; } /* }}} void *statsd_network_thread */ static int statsd_config_timer_percentile(oconfig_item_t *ci) /* {{{ */ @@ -596,26 +596,26 @@ static int statsd_config_timer_percentile(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_double(ci, &percent); if (status != 0) - return (status); + return status; if ((percent <= 0.0) || (percent >= 100)) { ERROR("statsd plugin: The value for \"%s\" must be between 0 and 100, " "exclusively.", ci->key); - return (ERANGE); + return ERANGE; } tmp = realloc(conf_timer_percentile, sizeof(*conf_timer_percentile) * (conf_timer_percentile_num + 1)); if (tmp == NULL) { ERROR("statsd plugin: realloc failed."); - return (ENOMEM); + return ENOMEM; } conf_timer_percentile = tmp; conf_timer_percentile[conf_timer_percentile_num] = percent; conf_timer_percentile_num++; - return (0); + return 0; } /* }}} int statsd_config_timer_percentile */ static int statsd_config(oconfig_item_t *ci) /* {{{ */ @@ -652,7 +652,7 @@ static int statsd_config(oconfig_item_t *ci) /* {{{ */ child->key); } - return (0); + return 0; } /* }}} int statsd_config */ static int statsd_init(void) /* {{{ */ @@ -672,14 +672,14 @@ static int statsd_init(void) /* {{{ */ pthread_mutex_unlock(&metrics_lock); ERROR("statsd plugin: pthread_create failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (status); + return status; } } network_thread_running = 1; pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_init */ /* Must hold metrics_lock when calling this function. */ @@ -689,17 +689,17 @@ static int statsd_metric_clear_set_unsafe(statsd_metric_t *metric) /* {{{ */ void *value; if ((metric == NULL) || (metric->type != STATSD_SET)) - return (EINVAL); + return EINVAL; if (metric->set == NULL) - return (0); + return 0; while (c_avl_pick(metric->set, &key, &value) == 0) { sfree(key); sfree(value); } - return (0); + return 0; } /* }}} int statsd_metric_clear_set_unsafe */ /* Must hold metrics_lock when calling this function. */ @@ -785,7 +785,7 @@ static int statsd_metric_submit_unsafe(char const *name, } latency_counter_reset(metric->latency); - return (0); + return 0; } else if (metric->type == STATSD_SET) { if (metric->set == NULL) vl.values[0].gauge = 0.0; @@ -815,7 +815,7 @@ static int statsd_metric_submit_unsafe(char const *name, vl.values[0].derive = metric->counter; } - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } /* }}} int statsd_metric_submit_unsafe */ static int statsd_read(void) /* {{{ */ @@ -831,7 +831,7 @@ static int statsd_read(void) /* {{{ */ if (metrics_tree == NULL) { pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } iter = c_avl_get_iterator(metrics_tree); @@ -876,7 +876,7 @@ static int statsd_read(void) /* {{{ */ strarray_free(to_be_deleted, to_be_deleted_num); - return (0); + return 0; } /* }}} int statsd_read */ static int statsd_shutdown(void) /* {{{ */ @@ -905,7 +905,7 @@ static int statsd_shutdown(void) /* {{{ */ pthread_mutex_unlock(&metrics_lock); - return (0); + return 0; } /* }}} int statsd_shutdown */ void module_register(void) { @@ -914,5 +914,3 @@ void module_register(void) { plugin_register_read("statsd", statsd_read); plugin_register_shutdown("statsd", statsd_shutdown); } - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/swap.c b/src/swap.c index cbe1ab11..746ba51a 100644 --- a/src/swap.c +++ b/src/swap.c @@ -140,7 +140,7 @@ static int swap_config(oconfig_item_t *ci) /* {{{ */ WARNING("swap plugin: Unknown config option: \"%s\"", child->key); } - return (0); + return 0; } /* }}} int swap_config */ static int swap_init(void) /* {{{ */ @@ -172,7 +172,7 @@ static int swap_init(void) /* {{{ */ if (kvm_obj == NULL) { ERROR("swap plugin: kvm_openfiles failed, %s", errbuf); - return (-1); + return -1; } /* #endif HAVE_LIBKVM_GETSWAPINFO */ @@ -184,7 +184,7 @@ static int swap_init(void) /* {{{ */ pagesize = getpagesize(); #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* }}} int swap_init */ static void swap_submit_usage(char const *plugin_instance, /* {{{ */ @@ -234,7 +234,7 @@ static int swap_read_separate(void) /* {{{ */ char errbuf[1024]; WARNING("swap plugin: fopen (/proc/swaps) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -273,7 +273,7 @@ static int swap_read_separate(void) /* {{{ */ fclose(fh); - return (0); + return 0; } /* }}} int swap_read_separate */ static int swap_read_combined(void) /* {{{ */ @@ -291,7 +291,7 @@ static int swap_read_combined(void) /* {{{ */ char errbuf[1024]; WARNING("swap plugin: fopen (/proc/meminfo) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -313,7 +313,7 @@ static int swap_read_combined(void) /* {{{ */ fclose(fh); if (isnan(swap_total) || isnan(swap_free)) - return (ENOENT); + return ENOENT; /* Some systems, OpenVZ for example, don't provide SwapCached. */ if (isnan(swap_cached)) @@ -323,12 +323,12 @@ static int swap_read_combined(void) /* {{{ */ assert(!isnan(swap_used)); if (swap_used < 0.0) - return (EINVAL); + return EINVAL; swap_submit_usage(NULL, swap_used * 1024.0, swap_free * 1024.0, isnan(swap_cached) ? NULL : "cached", isnan(swap_cached) ? NAN : swap_cached * 1024.0); - return (0); + return 0; } /* }}} int swap_read_combined */ static int swap_read_io(void) /* {{{ */ @@ -349,7 +349,7 @@ static int swap_read_io(void) /* {{{ */ if (fh == NULL) { char errbuf[1024]; WARNING("swap: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } else old_kernel = 1; } @@ -386,7 +386,7 @@ static int swap_read_io(void) /* {{{ */ fclose(fh); if (have_data != 0x03) - return (ENOENT); + return ENOENT; if (report_bytes) { swap_in = swap_in * pagesize; @@ -396,7 +396,7 @@ static int swap_read_io(void) /* {{{ */ swap_submit_derive("in", swap_in); swap_submit_derive("out", swap_out); - return (0); + return 0; } /* }}} int swap_read_io */ static int swap_read(void) /* {{{ */ @@ -408,7 +408,7 @@ static int swap_read(void) /* {{{ */ swap_read_io(); - return (0); + return 0; } /* }}} int swap_read */ /* #endif KERNEL_LINUX */ @@ -435,7 +435,7 @@ static int swap_read_kstat(void) /* {{{ */ char errbuf[1024]; ERROR("swap plugin: swapctl failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* @@ -464,7 +464,7 @@ static int swap_read_kstat(void) /* {{{ */ swap_avail = (gauge_t)((ai.ani_max - ai.ani_resv) * pagesize); swap_submit_usage(NULL, swap_alloc, swap_avail, "reserved", swap_resv); - return (0); + return 0; } /* }}} int swap_read_kstat */ /* #endif 0 && HAVE_LIBKSTAT */ @@ -483,15 +483,15 @@ static int swap_read(void) /* {{{ */ swap_num = swapctl(SC_GETNSWP, NULL); if (swap_num < 0) { ERROR("swap plugin: swapctl (SC_GETNSWP) failed with status %i.", swap_num); - return (-1); + return -1; } else if (swap_num == 0) - return (0); + return 0; /* Allocate and initialize the swaptbl_t structure */ s = malloc(swap_num * sizeof(swapent_t) + sizeof(struct swaptable)); if (s == NULL) { ERROR("swap plugin: malloc failed."); - return (-1); + return -1; } /* Memory to store the path names. We only use these paths when the @@ -501,7 +501,7 @@ static int swap_read(void) /* {{{ */ if (s_paths == NULL) { ERROR("swap plugin: calloc failed."); sfree(s); - return (-1); + return -1; } for (int i = 0; i < swap_num; i++) s->swt_ent[i].ste_path = s_paths + (i * PATH_MAX); @@ -514,7 +514,7 @@ static int swap_read(void) /* {{{ */ sstrerror(errno, errbuf, sizeof(errbuf))); sfree(s_paths); sfree(s); - return (-1); + return -1; } else if (swap_num < status) { /* more elements returned than requested */ ERROR("swap plugin: I allocated memory for %i structure%s, " @@ -523,7 +523,7 @@ static int swap_read(void) /* {{{ */ swap_num, (swap_num == 1) ? "" : "s", status); sfree(s_paths); sfree(s); - return (-1); + return -1; } else if (swap_num > status) /* less elements returned than requested */ swap_num = status; @@ -558,7 +558,7 @@ static int swap_read(void) /* {{{ */ total, avail); sfree(s_paths); sfree(s); - return (-1); + return -1; } /* If the "separate" option was specified (report_by_device == 1), all @@ -568,7 +568,7 @@ static int swap_read(void) /* {{{ */ sfree(s_paths); sfree(s); - return (0); + return 0; } /* }}} int swap_read */ /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */ @@ -585,21 +585,21 @@ static int swap_read(void) /* {{{ */ swap_num = swapctl(SWAP_NSWAP, NULL, 0); if (swap_num < 0) { ERROR("swap plugin: swapctl (SWAP_NSWAP) failed with status %i.", swap_num); - return (-1); + return -1; } else if (swap_num == 0) - return (0); + return 0; swap_entries = calloc(swap_num, sizeof(*swap_entries)); if (swap_entries == NULL) { ERROR("swap plugin: calloc failed."); - return (-1); + return -1; } status = swapctl(SWAP_STATS, swap_entries, swap_num); if (status != swap_num) { ERROR("swap plugin: swapctl (SWAP_STATS) failed with status %i.", status); sfree(swap_entries); - return (-1); + return -1; } #if defined(DEV_BSIZE) && (DEV_BSIZE > 0) @@ -623,13 +623,13 @@ static int swap_read(void) /* {{{ */ "swap plugin: Total swap space (%g) is less than used swap space (%g).", total, used); sfree(swap_entries); - return (-1); + return -1; } swap_submit_usage(NULL, used, total - used, NULL, NAN); sfree(swap_entries); - return (0); + return 0; } /* }}} int swap_read */ /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_THREE_ARGS */ @@ -648,13 +648,13 @@ static int swap_read(void) /* {{{ */ sw_usage_len = sizeof(struct xsw_usage); if (sysctl(mib, mib_len, &sw_usage, &sw_usage_len, NULL, 0) != 0) - return (-1); + return -1; /* The returned values are bytes. */ swap_submit_usage(NULL, (gauge_t)sw_usage.xsu_used, (gauge_t)sw_usage.xsu_avail, NULL, NAN); - return (0); + return 0; } /* }}} int swap_read */ /* #endif VM_SWAPUSAGE */ @@ -668,12 +668,12 @@ static int swap_read(void) /* {{{ */ gauge_t total; if (kvm_obj == NULL) - return (-1); + return -1; /* only one structure => only get the grand total, no details */ status = kvm_getswapinfo(kvm_obj, &data_s, 1, 0); if (status == -1) - return (-1); + return -1; total = (gauge_t)data_s.ksw_total; used = (gauge_t)data_s.ksw_used; @@ -683,7 +683,7 @@ static int swap_read(void) /* {{{ */ swap_submit_usage(NULL, used, total - used, NULL, NAN); - return (0); + return 0; } /* }}} int swap_read */ /* #endif HAVE_LIBKVM_GETSWAPINFO */ @@ -694,11 +694,11 @@ static int swap_read(void) /* {{{ */ swap = sg_get_swap_stats(); if (swap == NULL) - return (-1); + return -1; swap_submit_usage(NULL, (gauge_t)swap->used, (gauge_t)swap->free, NULL, NAN); - return (0); + return 0; } /* }}} int swap_read */ /* #endif HAVE_LIBSTATGRAB */ @@ -718,7 +718,7 @@ static int swap_read(void) /* {{{ */ char errbuf[1024]; WARNING("swap plugin: perfstat_memory_total failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } total = (gauge_t)(pmemory.pgsp_total * pagesize); @@ -729,7 +729,7 @@ static int swap_read(void) /* {{{ */ swap_submit_derive("in", (derive_t)pmemory.pgspins * pagesize); swap_submit_derive("out", (derive_t)pmemory.pgspouts * pagesize); - return (0); + return 0; } /* }}} int swap_read */ #endif /* HAVE_PERFSTAT */ @@ -738,5 +738,3 @@ void module_register(void) { plugin_register_init("swap", swap_init); plugin_register_read("swap", swap_read); } /* void module_register */ - -/* vim: set fdm=marker : */ diff --git a/src/syslog.c b/src/syslog.c index 6d326ff1..8192d6a1 100644 --- a/src/syslog.c +++ b/src/syslog.c @@ -51,15 +51,15 @@ static int sl_config(const char *key, const char *value) { if (log_level < 0) { log_level = LOG_INFO; ERROR("syslog: invalid loglevel [%s] defaulting to 'info'", value); - return (1); + return 1; } } else if (strcasecmp(key, "NotifyLevel") == 0) { notif_severity = parse_notif_severity(value); if (notif_severity < 0) - return (1); + return 1; } - return (0); + return 0; } /* int sl_config */ static void sl_log(int severity, const char *msg, @@ -73,7 +73,7 @@ static void sl_log(int severity, const char *msg, static int sl_shutdown(void) { closelog(); - return (0); + return 0; } static int sl_notification(const notification_t *n, @@ -85,7 +85,7 @@ static int sl_notification(const notification_t *n, int status; if (n->severity > notif_severity) - return (0); + return 0; switch (n->severity) { case NOTIF_FAILURE: @@ -109,9 +109,9 @@ static int sl_notification(const notification_t *n, do { \ status = ssnprintf(&buf[offset], sizeof(buf) - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (sizeof(buf) - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -137,7 +137,7 @@ static int sl_notification(const notification_t *n, sl_log(log_severity, buf, NULL); - return (0); + return 0; } /* int sl_notification */ void module_register(void) { diff --git a/src/table.c b/src/table.c index 3e8feada..578e019e 100644 --- a/src/table.c +++ b/src/table.c @@ -520,5 +520,3 @@ void module_register(void) { plugin_register_complex_config("table", tbl_config); plugin_register_init("table", tbl_init); } /* module_register */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/tail.c b/src/tail.c index bb4eb30b..1b720b83 100644 --- a/src/tail.c +++ b/src/tail.c @@ -66,7 +66,7 @@ static int ctail_config_add_match_dstype(ctail_config_match_t *cm, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("tail plugin: `DSType' needs exactly one string argument."); - return (-1); + return -1; } char const *ds_type = ci->values[0].value.string; @@ -93,7 +93,7 @@ static int ctail_config_add_match_dstype(ctail_config_match_t *cm, int status = latency_config(&cm->latency, ci, "tail"); if (status != 0) - return (status); + return status; } else if (strncasecmp("Counter", ds_type, strlen("Counter")) == 0) { cm->flags = UTILS_MATCH_DS_TYPE_COUNTER; if (strcasecmp("CounterSet", ds_type) == 0) @@ -127,10 +127,10 @@ static int ctail_config_add_match_dstype(ctail_config_match_t *cm, if (cm->flags == 0) { WARNING("tail plugin: `%s' is not a valid argument to `DSType'.", ci->values[0].value.string); - return (-1); + return -1; } - return (0); + return 0; } /* int ctail_config_add_match_dstype */ static int ctail_config_add_match(cu_tail_match_t *tm, @@ -204,7 +204,7 @@ static int ctail_config_add_match(cu_tail_match_t *tm, sfree(cm.type_instance); latency_config_free(cm.latency); - return (status); + return status; } /* int ctail_config_add_match */ static int ctail_config_add_file(oconfig_item_t *ci) { @@ -215,14 +215,14 @@ static int ctail_config_add_file(oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("tail plugin: `File' needs exactly one string argument."); - return (-1); + return -1; } tm = tail_match_create(ci->values[0].value.string); if (tm == NULL) { ERROR("tail plugin: tail_match_create (%s) failed.", ci->values[0].value.string); - return (-1); + return -1; } for (int i = 0; i < ci->children_num; i++) { @@ -253,7 +253,7 @@ static int ctail_config_add_file(oconfig_item_t *ci) { ERROR("tail plugin: No (valid) matches found for file `%s'.", ci->values[0].value.string); tail_match_destroy(tm); - return (-1); + return -1; } else { cu_tail_match_t **temp; @@ -262,7 +262,7 @@ static int ctail_config_add_file(oconfig_item_t *ci) { if (temp == NULL) { ERROR("tail plugin: realloc failed."); tail_match_destroy(tm); - return (-1); + return -1; } tail_match_list = temp; @@ -271,7 +271,7 @@ static int ctail_config_add_file(oconfig_item_t *ci) { tail_match_list_num++; } - return (0); + return 0; } /* int ctail_config_add_file */ static int ctail_config(oconfig_item_t *ci) { @@ -285,7 +285,7 @@ static int ctail_config(oconfig_item_t *ci) { } } /* for (i = 0; i < ci->children_num; i++) */ - return (0); + return 0; } /* int ctail_config */ static int ctail_read(user_data_t *ud) { @@ -294,10 +294,10 @@ static int ctail_read(user_data_t *ud) { status = tail_match_read((cu_tail_match_t *)ud->data); if (status != 0) { ERROR("tail plugin: tail_match_read failed."); - return (-1); + return -1; } - return (0); + return 0; } /* int ctail_read */ static int ctail_init(void) { @@ -305,7 +305,7 @@ static int ctail_init(void) { if (tail_match_list_num == 0) { WARNING("tail plugin: File list is empty. Returning an error."); - return (-1); + return -1; } for (size_t i = 0; i < tail_match_list_num; i++) { @@ -318,7 +318,7 @@ static int ctail_init(void) { }); } - return (0); + return 0; } /* int ctail_init */ static int ctail_shutdown(void) { @@ -329,7 +329,7 @@ static int ctail_shutdown(void) { sfree(tail_match_list); tail_match_list_num = 0; - return (0); + return 0; } /* int ctail_shutdown */ void module_register(void) { @@ -337,5 +337,3 @@ void module_register(void) { plugin_register_init("tail", ctail_init); plugin_register_shutdown("tail", ctail_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/tail_csv.c b/src/tail_csv.c index b1a3292d..d512a52e 100644 --- a/src/tail_csv.c +++ b/src/tail_csv.c @@ -77,7 +77,7 @@ static int tcsv_submit(instance_definition_t *id, metric_definition_t *md, vl.time = t; vl.interval = id->interval; - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } static cdtime_t parse_time(char const *tbuf) { @@ -87,9 +87,9 @@ static cdtime_t parse_time(char const *tbuf) { errno = 0; t = strtod(tbuf, &endptr); if ((errno != 0) || (endptr == NULL) || (endptr[0] != 0)) - return (cdtime()); + return cdtime(); - return (DOUBLE_TO_CDTIME_T(t)); + return DOUBLE_TO_CDTIME_T(t); } static int tcsv_read_metric(instance_definition_t *id, metric_definition_t *md, @@ -99,23 +99,23 @@ static int tcsv_read_metric(instance_definition_t *id, metric_definition_t *md, int status; if (md->data_source_type == -1) - return (EINVAL); + return EINVAL; assert(md->value_from >= 0); if (((size_t)md->value_from) >= fields_num) - return (EINVAL); + return EINVAL; status = parse_value(fields[md->value_from], &v, md->data_source_type); if (status != 0) - return (status); + return status; if (id->time_from >= 0) { if (((size_t)id->time_from) >= fields_num) - return (EINVAL); + return EINVAL; t = parse_time(fields[id->time_from]); } - return (tcsv_submit(id, md, v, t)); + return tcsv_submit(id, md, v, t); } static _Bool tcsv_check_index(ssize_t index, size_t fields_num, @@ -128,7 +128,7 @@ static _Bool tcsv_check_index(ssize_t index, size_t fields_num, ERROR("tail_csv plugin: Metric \"%s\": Request for index %zd when " "only %zu fields are available.", name, index, fields_num); - return (0); + return 0; } static int tcsv_read_buffer(instance_definition_t *id, char *buffer, @@ -152,7 +152,7 @@ static int tcsv_read_buffer(instance_definition_t *id, char *buffer, /* Ignore empty lines. */ if ((buffer_size == 0) || (buffer[0] == '#')) - return (0); + return 0; /* Count the number of fields. */ metrics_num = 1; @@ -165,14 +165,14 @@ static int tcsv_read_buffer(instance_definition_t *id, char *buffer, ERROR("tail_csv plugin: last line of `%s' does not contain " "enough values.", id->path); - return (-1); + return -1; } /* Create a list of all values */ metrics = calloc(metrics_num, sizeof(*metrics)); if (metrics == NULL) { ERROR("tail_csv plugin: calloc failed."); - return (ENOMEM); + return ENOMEM; } ptr = buffer; @@ -201,7 +201,7 @@ static int tcsv_read_buffer(instance_definition_t *id, char *buffer, /* Free up resources */ sfree(metrics); - return (0); + return 0; } static int tcsv_read(user_data_t *ud) { @@ -212,7 +212,7 @@ static int tcsv_read(user_data_t *ud) { id->tail = cu_tail_create(id->path); if (id->tail == NULL) { ERROR("tail_csv plugin: cu_tail_create (\"%s\") failed.", id->path); - return (-1); + return -1; } } @@ -226,7 +226,7 @@ static int tcsv_read(user_data_t *ud) { ERROR("tail_csv plugin: File \"%s\": cu_tail_readline failed " "with status %i.", id->path, status); - return (-1); + return -1; } buffer_len = strlen(buffer); @@ -236,7 +236,7 @@ static int tcsv_read(user_data_t *ud) { tcsv_read_buffer(id, buffer, buffer_len); } - return (0); + return 0; } static void tcsv_metric_definition_destroy(void *arg) { @@ -263,18 +263,18 @@ static int tcsv_config_get_index(oconfig_item_t *ci, ssize_t *ret_index) { WARNING("tail_csv plugin: The \"%s\" config option needs exactly one " "integer argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].value.number < 0) { WARNING("tail_csv plugin: The \"%s\" config option must be positive " "(or zero).", ci->key); - return (-1); + return -1; } *ret_index = (ssize_t)ci->values[0].value.number; - return (0); + return 0; } /* Parse metric */ @@ -284,7 +284,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci) { md = calloc(1, sizeof(*md)); if (md == NULL) - return (-1); + return -1; md->name = NULL; md->type = NULL; md->instance = NULL; @@ -295,7 +295,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci) { status = cf_util_get_string(ci, &md->name); if (status != 0) { sfree(md); - return (-1); + return -1; } for (int i = 0; i < ci->children_num; ++i) { @@ -318,7 +318,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci) { if (status != 0) { tcsv_metric_definition_destroy(md); - return (-1); + return -1; } /* Verify all necessary options have been set. */ @@ -331,7 +331,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci) { } if (status != 0) { tcsv_metric_definition_destroy(md); - return (status); + return status; } if (metric_head == NULL) @@ -344,7 +344,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci) { last->next = md; } - return (0); + return 0; } static void tcsv_instance_definition_destroy(void *arg) { @@ -373,14 +373,14 @@ static int tcsv_config_add_instance_collect(instance_definition_t *id, if (ci->values_num < 1) { WARNING("tail_csv plugin: The `Collect' config option needs at least one " "argument."); - return (-1); + return -1; } metric_list_size = id->metric_list_len + (size_t)ci->values_num; metric_list = realloc(id->metric_list, sizeof(*id->metric_list) * metric_list_size); if (metric_list == NULL) - return (-1); + return -1; id->metric_list = metric_list; for (int i = 0; i < ci->values_num; i++) { @@ -406,7 +406,7 @@ static int tcsv_config_add_instance_collect(instance_definition_t *id, id->metric_list_len++; } - return (0); + return 0; } /* block */ @@ -419,7 +419,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { id = calloc(1, sizeof(*id)); if (id == NULL) - return (-1); + return -1; id->instance = NULL; id->path = NULL; id->metric_list = NULL; @@ -429,7 +429,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { status = cf_util_get_string(ci, &id->path); if (status != 0) { sfree(id); - return (status); + return status; } /* Use default interval. */ @@ -458,7 +458,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { if (status != 0) { tcsv_instance_definition_destroy(id); - return (-1); + return -1; } /* Verify all necessary options have been set. */ @@ -472,7 +472,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { if (status != 0) { tcsv_instance_definition_destroy(id); - return (-1); + return -1; } ssnprintf(cb_name, sizeof(cb_name), "tail_csv/%s", id->path); @@ -485,10 +485,10 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { if (status != 0) { ERROR("tail_csv plugin: Registering complex read function failed."); tcsv_instance_definition_destroy(id); - return (-1); + return -1; } - return (0); + return 0; } /* Parse blocks */ @@ -504,7 +504,7 @@ static int tcsv_config(oconfig_item_t *ci) { child->key); } - return (0); + return 0; } /* int tcsv_config */ static int tcsv_init(void) { /* {{{ */ @@ -512,7 +512,7 @@ static int tcsv_init(void) { /* {{{ */ metric_definition_t *md; if (have_init) - return (0); + return 0; for (md = metric_head; md != NULL; md = md->next) { data_set_t const *ds; @@ -536,14 +536,14 @@ static int tcsv_init(void) { /* {{{ */ md->data_source_type = ds->ds->type; } - return (0); + return 0; } /* }}} int tcsv_init */ static int tcsv_shutdown(void) { tcsv_metric_definition_destroy(metric_head); metric_head = NULL; - return (0); + return 0; } void module_register(void) { @@ -551,5 +551,3 @@ void module_register(void) { plugin_register_init("tail_csv", tcsv_init); plugin_register_shutdown("tail_csv", tcsv_shutdown); } - -/* vim: set sw=4 sts=4 et : */ diff --git a/src/tape.c b/src/tape.c index 3f4bb55b..debb1d28 100644 --- a/src/tape.c +++ b/src/tape.c @@ -40,7 +40,7 @@ static int tape_init(void) { numtape = 0; if (kc == NULL) - return (-1); + return -1; for (numtape = 0, ksp_chain = kc->kc_chain; (numtape < MAX_NUMTAPE) && (ksp_chain != NULL); @@ -52,7 +52,7 @@ static int tape_init(void) { ksp[numtape++] = ksp_chain; } - return (0); + return 0; } /* int tape_init */ static void tape_submit(const char *plugin_instance, const char *type, @@ -94,10 +94,10 @@ static int tape_read(void) { static kstat_io_t kio; if (kc == NULL) - return (-1); + return -1; if (numtape <= 0) - return (-1); + return -1; for (int i = 0; i < numtape; i++) { if (kstat_read(kc, ksp[i], &kio) == -1) @@ -112,7 +112,7 @@ static int tape_read(void) { } } - return (0); + return 0; } void module_register(void) { diff --git a/src/target_notification.c b/src/target_notification.c index dc93b98b..2041510f 100644 --- a/src/target_notification.c +++ b/src/target_notification.c @@ -43,7 +43,7 @@ static int tn_config_add_severity(tn_data_t *data, /* {{{ */ ERROR("Target `notification': The `%s' option requires exactly one string " "argument.", ci->key); - return (-1); + return -1; } if ((strcasecmp("FAILURE", ci->values[0].value.string) == 0) || @@ -61,7 +61,7 @@ static int tn_config_add_severity(tn_data_t *data, /* {{{ */ data->severity = NOTIF_FAILURE; } - return (0); + return 0; } /* }}} int tn_config_add_severity */ static int tn_config_add_string(char **dest, /* {{{ */ @@ -69,32 +69,32 @@ static int tn_config_add_string(char **dest, /* {{{ */ char *temp; if (dest == NULL) - return (-EINVAL); + return -EINVAL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { ERROR("Target `notification': The `%s' option requires exactly one string " "argument.", ci->key); - return (-1); + return -1; } if (ci->values[0].value.string[0] == 0) { ERROR( "Target `notification': The `%s' option does not accept empty strings.", ci->key); - return (-1); + return -1; } temp = sstrdup(ci->values[0].value.string); if (temp == NULL) { ERROR("tn_config_add_string: sstrdup failed."); - return (-1); + return -1; } free(*dest); *dest = temp; - return (0); + return 0; } /* }}} int tn_config_add_string */ static int tn_destroy(void **user_data) /* {{{ */ @@ -102,16 +102,16 @@ static int tn_destroy(void **user_data) /* {{{ */ tn_data_t *data; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) - return (0); + return 0; sfree(data->message); sfree(data); - return (0); + return 0; } /* }}} int tn_destroy */ static int tn_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -122,7 +122,7 @@ static int tn_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ data = calloc(1, sizeof(*data)); if (data == NULL) { ERROR("tn_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } data->message = NULL; @@ -168,11 +168,11 @@ static int tn_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { tn_destroy((void *)&data); - return (status); + return status; } *user_data = data; - return (0); + return 0; } /* }}} int tn_create */ static int tn_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -186,12 +186,12 @@ static int tn_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ int rates_failed; if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) { ERROR("Target `notification': Invoke: `data' is NULL."); - return (-EINVAL); + return -EINVAL; } /* Initialize the structure. */ @@ -249,7 +249,7 @@ static int tn_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ plugin_dispatch_notification(&n); - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int tn_invoke */ void module_register(void) { @@ -260,5 +260,3 @@ void module_register(void) { tproc.invoke = tn_invoke; fc_register_target("notification", tproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/target_replace.c b/src/target_replace.c index b43a025b..66fc98d4 100644 --- a/src/target_replace.c +++ b/src/target_replace.c @@ -68,16 +68,16 @@ static char *tr_strdup(const char *orig) /* {{{ */ char *dest; if (orig == NULL) - return (NULL); + return NULL; sz = strlen(orig) + 1; dest = malloc(sz); if (dest == NULL) - return (NULL); + return NULL; memcpy(dest, orig, sz); - return (dest); + return dest; } /* }}} char *tr_strdup */ static void tr_action_destroy(tr_action_t *act) /* {{{ */ @@ -115,20 +115,20 @@ static int tr_config_add_action(tr_action_t **dest, /* {{{ */ int status; if (dest == NULL) - return (-EINVAL); + return -EINVAL; if ((ci->values_num != 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) || (ci->values[1].type != OCONFIG_TYPE_STRING)) { ERROR("Target `replace': The `%s' option requires exactly two string " "arguments.", ci->key); - return (-1); + return -1; } act = calloc(1, sizeof(*act)); if (act == NULL) { ERROR("tr_config_add_action: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } act->replacement = NULL; @@ -144,14 +144,14 @@ static int tr_config_add_action(tr_action_t **dest, /* {{{ */ "failed: %s.", ci->values[0].value.string, errbuf); sfree(act); - return (-EINVAL); + return -EINVAL; } act->replacement = tr_strdup(ci->values[1].value.string); if (act->replacement == NULL) { ERROR("tr_config_add_action: tr_strdup failed."); tr_action_destroy(act); - return (-ENOMEM); + return -ENOMEM; } /* Insert action at end of list. */ @@ -167,7 +167,7 @@ static int tr_config_add_action(tr_action_t **dest, /* {{{ */ prev->next = act; } - return (0); + return 0; } /* }}} int tr_config_add_action */ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ @@ -177,7 +177,7 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ int status; if (dest == NULL) - return (-EINVAL); + return -EINVAL; if (should_delete) { if ((ci->values_num != 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) || @@ -185,7 +185,7 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ ERROR("Target `replace': The `%s' option requires exactly two string " "arguments.", ci->key); - return (-1); + return -1; } } else { if ((ci->values_num != 3) || (ci->values[0].type != OCONFIG_TYPE_STRING) || @@ -194,7 +194,7 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ ERROR("Target `replace': The `%s' option requires exactly three string " "arguments.", ci->key); - return (-1); + return -1; } } @@ -202,13 +202,13 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ ERROR("Target `replace': The `%s' option does not accept empty string as " "first argument.", ci->key); - return (-1); + return -1; } act = calloc(1, sizeof(*act)); if (act == NULL) { ERROR("tr_config_add_meta_action: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } act->key = NULL; @@ -225,14 +225,14 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ ci->values[1].value.string, errbuf); sfree(act->key); sfree(act); - return (-EINVAL); + return -EINVAL; } act->key = tr_strdup(ci->values[0].value.string); if (act->key == NULL) { ERROR("tr_config_add_meta_action: tr_strdup failed."); tr_meta_data_action_destroy(act); - return (-ENOMEM); + return -ENOMEM; } if (!should_delete) { @@ -240,7 +240,7 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ if (act->replacement == NULL) { ERROR("tr_config_add_meta_action: tr_strdup failed."); tr_meta_data_action_destroy(act); - return (-ENOMEM); + return -ENOMEM; } } @@ -257,7 +257,7 @@ static int tr_config_add_meta_action(tr_meta_data_action_t **dest, /* {{{ */ prev->next = act; } - return (0); + return 0; } /* }}} int tr_config_add_meta_action */ static int tr_action_invoke(tr_action_t *act_head, /* {{{ */ @@ -268,7 +268,7 @@ static int tr_action_invoke(tr_action_t *act_head, /* {{{ */ regmatch_t matches[8] = {[0] = {0}}; if (act_head == NULL) - return (-EINVAL); + return -EINVAL; sstrncpy(buffer, buffer_in, sizeof(buffer)); @@ -308,13 +308,13 @@ static int tr_action_invoke(tr_action_t *act_head, /* {{{ */ if ((may_be_empty == 0) && (buffer[0] == 0)) { WARNING("Target `replace': Replacement resulted in an empty string, " "which is not allowed for this buffer (`host' or `plugin')."); - return (0); + return 0; } DEBUG("target_replace plugin: tr_action_invoke: -> buffer = %s;", buffer); sstrncpy(buffer_in, buffer, buffer_in_size); - return (0); + return 0; } /* }}} int tr_action_invoke */ static int tr_meta_data_action_invoke(/* {{{ */ @@ -324,10 +324,10 @@ static int tr_meta_data_action_invoke(/* {{{ */ regmatch_t matches[8] = {[0] = {0}}; if (act_head == NULL) - return (-EINVAL); + return -EINVAL; if ((*dest) == NULL) /* nothing to do */ - return (0); + return 0; for (tr_meta_data_action_t *act = act_head; act != NULL; act = act->next) { char temp[DATA_MAX_NAME_LEN]; @@ -351,7 +351,7 @@ static int tr_meta_data_action_invoke(/* {{{ */ if (meta_data_status != 0) { ERROR("Target `replace': Unable to retrieve metadata value for `%s'.", act->key); - return (meta_data_status); + return meta_data_status; } DEBUG("target_replace plugin: tr_meta_data_action_invoke: `%s' " @@ -401,7 +401,7 @@ static int tr_meta_data_action_invoke(/* {{{ */ if ((result = meta_data_create()) == NULL) { ERROR("Target `replace': failed to create metadata for `%s'.", act->key); sfree(value); - return (-ENOMEM); + return -ENOMEM; } meta_data_status = meta_data_add_string(result, act->key, temp); @@ -410,7 +410,7 @@ static int tr_meta_data_action_invoke(/* {{{ */ act->key); meta_data_destroy(result); sfree(value); - return (meta_data_status); + return meta_data_status; } meta_data_clone_merge(dest, result); @@ -418,7 +418,7 @@ static int tr_meta_data_action_invoke(/* {{{ */ sfree(value); } /* for (act = act_head; act != NULL; act = act->next) */ - return (0); + return 0; } /* }}} int tr_meta_data_action_invoke */ static int tr_destroy(void **user_data) /* {{{ */ @@ -426,11 +426,11 @@ static int tr_destroy(void **user_data) /* {{{ */ tr_data_t *data; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) - return (0); + return 0; tr_action_destroy(data->host); tr_action_destroy(data->plugin); @@ -440,7 +440,7 @@ static int tr_destroy(void **user_data) /* {{{ */ tr_meta_data_action_destroy(data->meta); sfree(data); - return (0); + return 0; } /* }}} int tr_destroy */ static int tr_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -451,7 +451,7 @@ static int tr_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ data = calloc(1, sizeof(*data)); if (data == NULL) { ERROR("tr_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } data->host = NULL; @@ -516,11 +516,11 @@ static int tr_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { tr_destroy((void *)&data); - return (status); + return status; } *user_data = data; - return (0); + return 0; } /* }}} int tr_create */ static int tr_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -529,12 +529,12 @@ static int tr_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ tr_data_t *data; if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) { ERROR("Target `replace': Invoke: `data' is NULL."); - return (-EINVAL); + return -EINVAL; } if (data->meta != NULL) { @@ -550,7 +550,7 @@ static int tr_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ /* HANDLE_FIELD (type, 0); */ HANDLE_FIELD(type_instance, 1); - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int tr_invoke */ void module_register(void) { @@ -561,5 +561,3 @@ void module_register(void) { tproc.invoke = tr_invoke; fc_register_target("replace", tproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/target_scale.c b/src/target_scale.c index 347d6272..8ec53d48 100644 --- a/src/target_scale.c +++ b/src/target_scale.c @@ -120,7 +120,7 @@ static int ts_invoke_counter(const data_set_t *ds, value_list_t *vl, /* {{{ */ uc_meta_data_add_unsigned_int(vl, key_int_counter, int_counter); uc_meta_data_add_double(vl, key_int_fraction, int_fraction); - return (0); + return 0; } /* }}} int ts_invoke_counter */ static int ts_invoke_gauge(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -130,7 +130,7 @@ static int ts_invoke_gauge(const data_set_t *ds, value_list_t *vl, /* {{{ */ if (!isnan(data->offset)) vl->values[dsrc_index].gauge += data->offset; - return (0); + return 0; } /* }}} int ts_invoke_gauge */ static int ts_invoke_derive(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -217,7 +217,7 @@ static int ts_invoke_derive(const data_set_t *ds, value_list_t *vl, /* {{{ */ uc_meta_data_add_signed_int(vl, key_int_derive, int_derive); uc_meta_data_add_double(vl, key_int_fraction, int_fraction); - return (0); + return 0; } /* }}} int ts_invoke_derive */ static int ts_invoke_absolute(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -260,7 +260,7 @@ static int ts_invoke_absolute(const data_set_t *ds, value_list_t *vl, /* {{{ */ /* Update to the new absolute value */ uc_meta_data_add_double(vl, key_int_fraction, int_fraction); - return (0); + return 0; } /* }}} int ts_invoke_absolute */ static int ts_config_set_double(double *ret, oconfig_item_t *ci) /* {{{ */ @@ -269,13 +269,13 @@ static int ts_config_set_double(double *ret, oconfig_item_t *ci) /* {{{ */ WARNING("scale target: The `%s' config option needs " "exactly one numeric argument.", ci->key); - return (-1); + return -1; } *ret = ci->values[0].value.number; DEBUG("ts_config_set_double: *ret = %g", *ret); - return (0); + return 0; } /* }}} int ts_config_set_double */ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ @@ -286,7 +286,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ /* Check number of arbuments. */ if (ci->values_num < 1) { ERROR("`value' match: `%s' needs at least one argument.", ci->key); - return (-1); + return -1; } /* Check type of arguments */ @@ -299,7 +299,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ ci->key, i + 1, (ci->values[i].type == OCONFIG_TYPE_BOOLEAN) ? "truth value" : "number"); - return (-1); + return -1; } /* Allocate space for the char pointers */ @@ -307,7 +307,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ temp = realloc(data->data_sources, new_data_sources_num * sizeof(char *)); if (temp == NULL) { ERROR("`value' match: realloc failed."); - return (-1); + return -1; } data->data_sources = temp; @@ -327,7 +327,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ data->data_sources_num++; } - return (0); + return 0; } /* }}} int ts_config_add_data_source */ static int ts_destroy(void **user_data) /* {{{ */ @@ -335,7 +335,7 @@ static int ts_destroy(void **user_data) /* {{{ */ ts_data_t *data; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; data = (ts_data_t *)*user_data; @@ -348,7 +348,7 @@ static int ts_destroy(void **user_data) /* {{{ */ sfree(data); *user_data = NULL; - return (0); + return 0; } /* }}} int ts_destroy */ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -359,7 +359,7 @@ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ data = calloc(1, sizeof(*data)); if (data == NULL) { ERROR("ts_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } data->factor = NAN; @@ -399,11 +399,11 @@ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { ts_destroy((void *)&data); - return (status); + return status; } *user_data = data; - return (0); + return 0; } /* }}} int ts_create */ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -412,12 +412,12 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ ts_data_t *data; if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) { ERROR("Target `scale': Invoke: `data' is NULL."); - return (-EINVAL); + return -EINVAL; } for (size_t i = 0; i < ds->ds_num; i++) { @@ -446,7 +446,7 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ ds->ds[i].type); } - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int ts_invoke */ void module_register(void) { @@ -457,5 +457,3 @@ void module_register(void) { tproc.invoke = ts_invoke; fc_register_target("scale", tproc); } /* module_register */ - -/* vim: set sw=2 ts=2 tw=78 fdm=marker : */ diff --git a/src/target_set.c b/src/target_set.c index a40273c0..e3ec2692 100644 --- a/src/target_set.c +++ b/src/target_set.c @@ -70,13 +70,13 @@ static int ts_util_get_key_and_string_wo_strdup(const oconfig_item_t *ci, ERROR("ts_util_get_key_and_string_wo_strdup: The %s option requires " "exactly two string arguments.", ci->key); - return (-1); + return -1; } *ret_key = ci->values[0].value.string; *ret_string = ci->values[1].value.string; - return (0); + return 0; } /* }}} int ts_util_get_key_and_string_wo_strdup */ static int ts_config_add_string(char **dest, /* {{{ */ @@ -86,17 +86,17 @@ static int ts_config_add_string(char **dest, /* {{{ */ status = cf_util_get_string(ci, &tmp); if (status != 0) - return (status); + return status; if (!may_be_empty && (strlen(tmp) == 0)) { ERROR("Target `set': The `%s' option does not accept empty strings.", ci->key); sfree(tmp); - return (-1); + return -1; } *dest = tmp; - return (0); + return 0; } /* }}} int ts_config_add_string */ static int ts_config_add_meta(meta_data_t **dest, /* {{{ */ @@ -107,31 +107,31 @@ static int ts_config_add_meta(meta_data_t **dest, /* {{{ */ status = ts_util_get_key_and_string_wo_strdup(ci, &key, &string); if (status != 0) - return (status); + return status; if (strlen(key) == 0) { ERROR("Target `set': The `%s' option does not accept empty string as " "first argument.", ci->key); - return (-1); + return -1; } if (!may_be_empty && (strlen(string) == 0)) { ERROR("Target `set': The `%s' option does not accept empty string as " "second argument.", ci->key); - return (-1); + return -1; } if ((*dest) == NULL) { /* Create a new meta_data_t */ if ((*dest = meta_data_create()) == NULL) { ERROR("Target `set': failed to create a meta data for `%s'.", ci->key); - return (-ENOMEM); + return -ENOMEM; } } - return (meta_data_add_string(*dest, key, string)); + return meta_data_add_string(*dest, key, string); } /* }}} int ts_config_add_meta */ static int ts_config_add_meta_delete(ts_key_list_t **dest, /* {{{ */ @@ -141,12 +141,12 @@ static int ts_config_add_meta_delete(ts_key_list_t **dest, /* {{{ */ entry = calloc(1, sizeof(*entry)); if (entry == NULL) { ERROR("ts_config_add_meta_delete: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } if (cf_util_get_string(ci, &entry->key) != 0) { ts_key_list_free(entry); - return (-1); /* An error has already been reported. */ + return -1; /* An error has already been reported. */ } if (strlen(entry->key) == 0) { @@ -154,13 +154,13 @@ static int ts_config_add_meta_delete(ts_key_list_t **dest, /* {{{ */ "first argument.", ci->key); ts_key_list_free(entry); - return (-1); + return -1; } entry->next = *dest; *dest = entry; - return (0); + return 0; } /* }}} int ts_config_add_meta_delete */ static void ts_subst(char *dest, size_t size, const char *string, /* {{{ */ @@ -210,11 +210,11 @@ static int ts_destroy(void **user_data) /* {{{ */ ts_data_t *data; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) - return (0); + return 0; free(data->host); free(data->plugin); @@ -225,7 +225,7 @@ static int ts_destroy(void **user_data) /* {{{ */ ts_key_list_free(data->meta_delete); free(data); - return (0); + return 0; } /* }}} int ts_destroy */ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ @@ -236,7 +236,7 @@ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ data = calloc(1, sizeof(*data)); if (data == NULL) { ERROR("ts_create: calloc failed."); - return (-ENOMEM); + return -ENOMEM; } data->host = NULL; @@ -315,11 +315,11 @@ static int ts_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ if (status != 0) { ts_destroy((void *)&data); - return (status); + return status; } *user_data = data; - return (0); + return 0; } /* }}} int ts_create */ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ @@ -330,12 +330,12 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ meta_data_t *new_meta = NULL; if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) - return (-EINVAL); + return -EINVAL; data = *user_data; if (data == NULL) { ERROR("Target `set': Invoke: `data' is NULL."); - return (-EINVAL); + return -EINVAL; } orig = *vl; @@ -347,7 +347,7 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ if ((new_meta = meta_data_create()) == NULL) { ERROR("Target `set': failed to create replacement metadata."); - return (-ENOMEM); + return -ENOMEM; } meta_entries = meta_data_toc(data->meta, &meta_toc); @@ -362,7 +362,7 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ key); strarray_free(meta_toc, (size_t)meta_entries); meta_data_destroy(new_meta); - return (status); + return status; } ts_subst(temp, sizeof(temp), string, &orig); @@ -378,7 +378,7 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ ERROR("Target `set': Unable to set metadata value `%s'.", key); strarray_free(meta_toc, (size_t)meta_entries); meta_data_destroy(new_meta); - return (status); + return status; } } @@ -409,7 +409,7 @@ static int ts_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ meta_data_delete(vl->meta, l->key); } - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int ts_invoke */ void module_register(void) { @@ -420,5 +420,3 @@ void module_register(void) { tproc.invoke = ts_invoke; fc_register_target("set", tproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/target_v5upgrade.c b/src/target_v5upgrade.c index 54e37e16..90f8e005 100644 --- a/src/target_v5upgrade.c +++ b/src/target_v5upgrade.c @@ -56,7 +56,7 @@ static int v5_df(const data_set_t *ds, value_list_t *vl) /* {{{ */ /* Can't upgrade if both instances have been set. */ if ((vl->plugin_instance[0] != 0) && (vl->type_instance[0] != 0)) - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -83,7 +83,7 @@ static int v5_df(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_df */ /* @@ -96,10 +96,10 @@ static int v5_df(const data_set_t *ds, value_list_t *vl) /* {{{ */ static int v5_interface(const data_set_t *ds, value_list_t *vl) /* {{{ */ { if ((vl->plugin_instance[0] != 0) || (vl->type_instance[0] == 0)) - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; v5_swap_instances(vl); - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int v5_interface */ /* @@ -113,7 +113,7 @@ static int v5_mysql_qcache(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 5) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -153,7 +153,7 @@ static int v5_mysql_qcache(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_mysql_qcache */ /* @@ -167,7 +167,7 @@ static int v5_mysql_threads(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 4) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -201,7 +201,7 @@ static int v5_mysql_threads(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_mysql_threads */ /* @@ -216,14 +216,14 @@ static int v5_zfs_arc_counts(const data_set_t *ds, value_list_t *vl) /* {{{ */ _Bool is_hits; if (vl->values_len != 4) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; if (strcmp("hits", vl->type_instance) == 0) is_hits = 1; else if (strcmp("misses", vl->type_instance) == 0) is_hits = 0; else - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -258,7 +258,7 @@ static int v5_zfs_arc_counts(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_zfs_arc_counts */ /* @@ -271,7 +271,7 @@ static int v5_zfs_arc_l2_bytes(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 2) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -295,7 +295,7 @@ static int v5_zfs_arc_l2_bytes(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_zfs_arc_l2_bytes */ /* @@ -309,7 +309,7 @@ static int v5_zfs_arc_l2_size(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 1) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -331,7 +331,7 @@ static int v5_zfs_arc_l2_size(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_zfs_arc_l2_size */ /* @@ -345,7 +345,7 @@ static int v5_zfs_arc_ratio(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 1) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -368,7 +368,7 @@ static int v5_zfs_arc_ratio(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_zfs_arc_ratio */ /* @@ -382,7 +382,7 @@ static int v5_zfs_arc_size(const data_set_t *ds, value_list_t *vl) /* {{{ */ value_list_t new_vl; if (vl->values_len != 4) - return (FC_TARGET_STOP); + return FC_TARGET_STOP; /* Copy everything: Time, interval, host, ... */ memcpy(&new_vl, vl, sizeof(new_vl)); @@ -401,46 +401,46 @@ static int v5_zfs_arc_size(const data_set_t *ds, value_list_t *vl) /* {{{ */ plugin_dispatch_values(&new_vl); /* Abort processing */ - return (FC_TARGET_STOP); + return FC_TARGET_STOP; } /* }}} int v5_zfs_arc_size */ static int v5_destroy(void **user_data) /* {{{ */ { - return (0); + return 0; } /* }}} int v5_destroy */ static int v5_create(const oconfig_item_t *ci, void **user_data) /* {{{ */ { *user_data = NULL; - return (0); + return 0; } /* }}} int v5_create */ static int v5_invoke(const data_set_t *ds, value_list_t *vl, /* {{{ */ notification_meta_t __attribute__((unused)) * *meta, void __attribute__((unused)) * *user_data) { if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) - return (-EINVAL); + return -EINVAL; if (strcmp("df", vl->type) == 0) - return (v5_df(ds, vl)); + return v5_df(ds, vl); else if (strcmp("interface", vl->plugin) == 0) - return (v5_interface(ds, vl)); + return v5_interface(ds, vl); else if (strcmp("mysql_qcache", vl->type) == 0) - return (v5_mysql_qcache(ds, vl)); + return v5_mysql_qcache(ds, vl); else if (strcmp("mysql_threads", vl->type) == 0) - return (v5_mysql_threads(ds, vl)); + return v5_mysql_threads(ds, vl); else if (strcmp("arc_counts", vl->type) == 0) - return (v5_zfs_arc_counts(ds, vl)); + return v5_zfs_arc_counts(ds, vl); else if (strcmp("arc_l2_bytes", vl->type) == 0) - return (v5_zfs_arc_l2_bytes(ds, vl)); + return v5_zfs_arc_l2_bytes(ds, vl); else if (strcmp("arc_l2_size", vl->type) == 0) - return (v5_zfs_arc_l2_size(ds, vl)); + return v5_zfs_arc_l2_size(ds, vl); else if (strcmp("arc_ratio", vl->type) == 0) - return (v5_zfs_arc_ratio(ds, vl)); + return v5_zfs_arc_ratio(ds, vl); else if (strcmp("arc_size", vl->type) == 0) - return (v5_zfs_arc_size(ds, vl)); + return v5_zfs_arc_size(ds, vl); - return (FC_TARGET_CONTINUE); + return FC_TARGET_CONTINUE; } /* }}} int v5_invoke */ void module_register(void) { @@ -451,5 +451,3 @@ void module_register(void) { tproc.invoke = v5_invoke; fc_register_target("v5upgrade", tproc); } /* module_register */ - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/tcpconns.c b/src/tcpconns.c index 7036d08b..f12ce5c6 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -62,11 +62,15 @@ #include "common.h" #include "plugin.h" -#if defined(__OpenBSD__) || defined(__NetBSD__) +#if defined(__OpenBSD__) +#define HAVE_KVM_GETFILES 1 +#endif + +#if defined(__NetBSD__) #undef HAVE_SYSCTLBYNAME /* force HAVE_LIBKVM_NLIST path */ #endif -#if !KERNEL_LINUX && !HAVE_SYSCTLBYNAME && !HAVE_LIBKVM_NLIST && !KERNEL_AIX +#if !KERNEL_LINUX && !HAVE_SYSCTLBYNAME && !HAVE_KVM_GETFILES && !HAVE_LIBKVM_NLIST && !KERNEL_AIX #error "No applicable input method." #endif @@ -105,15 +109,27 @@ #include /* #endif HAVE_SYSCTLBYNAME */ -/* This is for OpenBSD and NetBSD. */ +#elif HAVE_KVM_GETFILES +#include +#include +#define _KERNEL /* for DTYPE_SOCKET */ +#include +#undef _KERNEL + +#include + +#include +/* #endif HAVE_KVM_GETFILES */ + +/* This is for NetBSD. */ #elif HAVE_LIBKVM_NLIST #include #include #include #include +#include #include #include -#include #include #include #include @@ -169,6 +185,19 @@ static const char *tcp_state[] = {"CLOSED", "LISTEN", "SYN_SENT", #define TCP_STATE_MAX 10 /* #endif HAVE_SYSCTLBYNAME */ +#elif HAVE_KVM_GETFILES +static const char *tcp_state[] = {"CLOSED", "LISTEN", "SYN_SENT", + "SYN_RECV", "ESTABLISHED", "CLOSE_WAIT", + "FIN_WAIT1", "CLOSING", "LAST_ACK", + "FIN_WAIT2", "TIME_WAIT"}; + +#define TCP_STATE_LISTEN 1 +#define TCP_STATE_MIN 0 +#define TCP_STATE_MAX 10 + +static kvm_t *kvmd; +/* #endif HAVE_KVM_GETFILES */ + #elif HAVE_LIBKVM_NLIST static const char *tcp_state[] = {"CLOSED", "LISTEN", "SYN_SENT", "SYN_RECV", "ESTABLISHED", "CLOSE_WAIT", @@ -327,14 +356,14 @@ static port_entry_t *conn_get_port_entry(uint16_t port, int create) { if ((ret == NULL) && (create != 0)) { ret = calloc(1, sizeof(*ret)); if (ret == NULL) - return (NULL); + return NULL; ret->port = port; ret->next = port_list_head; port_list_head = ret; } - return (ret); + return ret; } /* port_entry_t *conn_get_port_entry */ /* Removes ports that were added automatically due to the `ListeningPorts' @@ -388,7 +417,7 @@ static int conn_handle_ports(uint16_t port_local, uint16_t port_remote, NOTICE("tcpconns plugin: Ignoring connection with " "unknown state 0x%02" PRIx8 ".", state); - return (-1); + return -1; } count_total[state]++; @@ -411,7 +440,7 @@ static int conn_handle_ports(uint16_t port_local, uint16_t port_remote, if (pe != NULL) pe->count_remote[state]++; - return (0); + return 0; } /* int conn_handle_ports */ #if KERNEL_LINUX @@ -430,7 +459,7 @@ static int conn_read_netlink(void) { ERROR("tcpconns plugin: conn_read_netlink: socket(AF_NETLINK, SOCK_RAW, " "NETLINK_INET_DIAG) failed: %s", sstrerror(errno, buf, sizeof(buf))); - return (-1); + return -1; } struct sockaddr_nl nladdr = {.nl_family = AF_NETLINK}; @@ -462,7 +491,7 @@ static int conn_read_netlink(void) { ERROR("tcpconns plugin: conn_read_netlink: sendmsg(2) failed: %s", sstrerror(errno, buf, sizeof(buf))); close(fd); - return (-1); + return -1; } iov.iov_base = buf; @@ -486,12 +515,12 @@ static int conn_read_netlink(void) { ERROR("tcpconns plugin: conn_read_netlink: recvmsg(2) failed: %s", sstrerror(errno, buf, sizeof(buf))); close(fd); - return (-1); + return -1; } else if (status == 0) { close(fd); DEBUG("tcpconns plugin: conn_read_netlink: Unexpected zero-sized " "reply from netlink socket."); - return (0); + return 0; } h = (struct nlmsghdr *)buf; @@ -503,7 +532,7 @@ static int conn_read_netlink(void) { if (h->nlmsg_type == NLMSG_DONE) { close(fd); - return (0); + return 0; } else if (h->nlmsg_type == NLMSG_ERROR) { struct nlmsgerr *msg_error; @@ -512,7 +541,7 @@ static int conn_read_netlink(void) { msg_error->error); close(fd); - return (1); + return 1; } r = NLMSG_DATA(h); @@ -526,9 +555,9 @@ static int conn_read_netlink(void) { } /* while (1) */ /* Not reached because the while() loop above handles the exit condition. */ - return (0); + return 0; #else - return (1); + return 1; #endif /* HAVE_STRUCT_LINUX_INET_DIAG_REQ */ } /* int conn_read_netlink */ @@ -550,40 +579,40 @@ static int conn_handle_line(char *buffer) { while ((buffer_len > 0) && (buffer[buffer_len - 1] < 32)) buffer[--buffer_len] = '\0'; if (buffer_len <= 0) - return (-1); + return -1; fields_len = strsplit(buffer, fields, STATIC_ARRAY_SIZE(fields)); if (fields_len < 12) { DEBUG("tcpconns plugin: Got %i fields, expected at least 12.", fields_len); - return (-1); + return -1; } port_local_str = strchr(fields[1], ':'); port_remote_str = strchr(fields[2], ':'); if ((port_local_str == NULL) || (port_remote_str == NULL)) - return (-1); + return -1; port_local_str++; port_remote_str++; if ((*port_local_str == '\0') || (*port_remote_str == '\0')) - return (-1); + return -1; endptr = NULL; port_local = (uint16_t)strtol(port_local_str, &endptr, 16); if ((endptr == NULL) || (*endptr != '\0')) - return (-1); + return -1; endptr = NULL; port_remote = (uint16_t)strtol(port_remote_str, &endptr, 16); if ((endptr == NULL) || (*endptr != '\0')) - return (-1); + return -1; endptr = NULL; state = (uint8_t)strtol(fields[3], &endptr, 16); if ((endptr == NULL) || (*endptr != '\0')) - return (-1); + return -1; - return (conn_handle_ports(port_local, port_remote, state)); + return conn_handle_ports(port_local, port_remote, state); } /* int conn_handle_line */ static int conn_read_file(const char *file) { @@ -592,7 +621,7 @@ static int conn_read_file(const char *file) { fh = fopen(file, "r"); if (fh == NULL) - return (-1); + return -1; while (fgets(buffer, sizeof(buffer), fh) != NULL) { conn_handle_line(buffer); @@ -600,7 +629,7 @@ static int conn_read_file(const char *file) { fclose(fh); - return (0); + return 0; } /* int conn_read_file */ /* #endif KERNEL_LINUX */ @@ -623,13 +652,13 @@ static int conn_config(const char *key, const char *value) { if ((port < 1) || (port > 65535)) { ERROR("tcpconns plugin: Invalid port: %i", port); - return (1); + return 1; } pe = conn_get_port_entry((uint16_t)port, 1 /* create */); if (pe == NULL) { ERROR("tcpconns plugin: conn_get_port_entry failed."); - return (1); + return 1; } if (strcasecmp(key, "LocalPort") == 0) @@ -642,10 +671,10 @@ static int conn_config(const char *key, const char *value) { else port_collect_total = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int conn_config */ #if KERNEL_LINUX @@ -653,7 +682,7 @@ static int conn_init(void) { if (port_collect_total == 0 && port_list_head == NULL) port_collect_listening = 1; - return (0); + return 0; } /* int conn_init */ static int conn_read(void) { @@ -690,16 +719,16 @@ static int conn_read(void) { linux_source = SRC_PROC; /* return success here to avoid the "plugin failed" message. */ - return (0); + return 0; } } if (status == 0) conn_submit_all(); else - return (status); + return status; - return (0); + return 0; } /* int conn_read */ /* #endif KERNEL_LINUX */ @@ -719,26 +748,26 @@ static int conn_read(void) { status = sysctlbyname("net.inet.tcp.pcblist", NULL, &buffer_len, 0, 0); if (status < 0) { ERROR("tcpconns plugin: sysctlbyname failed."); - return (-1); + return -1; } buffer = malloc(buffer_len); if (buffer == NULL) { ERROR("tcpconns plugin: malloc failed."); - return (-1); + return -1; } status = sysctlbyname("net.inet.tcp.pcblist", buffer, &buffer_len, 0, 0); if (status < 0) { ERROR("tcpconns plugin: sysctlbyname failed."); sfree(buffer); - return (-1); + return -1; } if (buffer_len <= sizeof(struct xinpgen)) { ERROR("tcpconns plugin: (buffer_len <= sizeof (struct xinpgen))"); sfree(buffer); - return (-1); + return -1; } in_orig = (struct xinpgen *)buffer; @@ -777,10 +806,53 @@ static int conn_read(void) { conn_submit_all(); - return (0); + return 0; } /* int conn_read */ /* #endif HAVE_SYSCTLBYNAME */ +#elif HAVE_KVM_GETFILES + +static int conn_init(void) { + char buf[_POSIX2_LINE_MAX]; + + kvmd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, buf); + if (kvmd == NULL) { + ERROR("tcpconns plugin: kvm_openfiles failed: %s", buf); + return -1; + } + + return 0; +} /* int conn_init */ + +static int conn_read(void) { + struct kinfo_file *kf; + int i, fcnt; + + conn_reset_port_entry(); + + kf = kvm_getfiles(kvmd, KERN_FILE_BYFILE, DTYPE_SOCKET, + sizeof(*kf), &fcnt); + if (kf == NULL) { + ERROR("tcpconns plugin: kvm_getfiles failed."); + return -1; + } + + for (i = 0; i < fcnt; i++) { + if (kf[i].so_protocol != IPPROTO_TCP) + continue; + if (kf[i].inp_fport == 0) + continue; + conn_handle_ports(ntohs(kf[i].inp_lport), ntohs(kf[i].inp_fport), + kf[i].t_state); + } + + conn_submit_all(); + + return 0; +} +/* int conn_read */ +/* #endif HAVE_KVM_GETFILES */ + #elif HAVE_LIBKVM_NLIST static int kread(u_long addr, void *buf, int size) { int status; @@ -789,9 +861,9 @@ static int kread(u_long addr, void *buf, int size) { if (status != size) { ERROR("tcpconns plugin: kvm_read failed (got %i, expected %i): %s\n", status, size, kvm_geterr(kvmd)); - return (-1); + return -1; } - return (0); + return 0; } /* int kread */ static int conn_init(void) { @@ -804,25 +876,25 @@ static int conn_init(void) { kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, buf); if (kvmd == NULL) { ERROR("tcpconns plugin: kvm_openfiles failed: %s", buf); - return (-1); + return -1; } status = kvm_nlist(kvmd, nl); if (status < 0) { ERROR("tcpconns plugin: kvm_nlist failed with status %i.", status); - return (-1); + return -1; } if (nl[N_TCBTABLE].n_type == 0) { ERROR("tcpconns plugin: Error looking up kernel's namelist: " "N_TCBTABLE is invalid."); - return (-1); + return -1; } inpcbtable_off = (u_long)nl[N_TCBTABLE].n_value; inpcbtable_ptr = (struct inpcbtable *)nl[N_TCBTABLE].n_value; - return (0); + return 0; } /* int conn_init */ static int conn_read(void) { @@ -841,7 +913,7 @@ static int conn_read(void) { /* Read the pcbtable from the kernel */ status = kread(inpcbtable_off, &table, sizeof(table)); if (status != 0) - return (-1); + return -1; #if defined(__OpenBSD__) || \ (defined(__NetBSD_Version__) && __NetBSD_Version__ > 699002700) @@ -861,7 +933,7 @@ static int conn_read(void) { /* Read the pcb pointed to by `next' into `inpcb' */ status = kread((u_long)next, &inpcb, sizeof(inpcb)); if (status != 0) - return (-1); + return -1; /* Advance `next' */ #if defined(__OpenBSD__) || \ @@ -887,14 +959,14 @@ static int conn_read(void) { status = kread((u_long)inpcb.inp_ppcb, &tcpcb, sizeof(tcpcb)); if (status != 0) - return (-1); + return -1; conn_handle_ports(ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state); } /* while (next != head) */ conn_submit_all(); - return (0); + return 0; } /* #endif HAVE_LIBKVM_NLIST */ @@ -912,27 +984,27 @@ static int conn_read(void) { size = netinfo(NETINFO_TCP, 0, 0, 0); if (size < 0) { ERROR("tcpconns plugin: netinfo failed return: %i", size); - return (-1); + return -1; } if (size == 0) - return (0); + return 0; if ((size - sizeof(struct netinfo_header)) % sizeof(struct netinfo_conn)) { ERROR("tcpconns plugin: invalid buffer size"); - return (-1); + return -1; } data = malloc(size); if (data == NULL) { ERROR("tcpconns plugin: malloc failed"); - return (-1); + return -1; } if (netinfo(NETINFO_TCP, data, &size, 0) < 0) { ERROR("tcpconns plugin: netinfo failed"); free(data); - return (-1); + return -1; } header = (struct netinfo_header *)data; @@ -947,7 +1019,7 @@ static int conn_read(void) { conn_submit_all(); - return (0); + return 0; } #endif /* KERNEL_AIX */ @@ -964,7 +1036,3 @@ void module_register(void) { #endif plugin_register_read("tcpconns", conn_read); } /* void module_register */ - -/* - * vim: set shiftwidth=2 softtabstop=2 tabstop=8 fdm=marker : - */ diff --git a/src/teamspeak2.c b/src/teamspeak2.c index 960d6464..a26d16e3 100644 --- a/src/teamspeak2.c +++ b/src/teamspeak2.c @@ -71,14 +71,14 @@ static int tss2_add_vserver(int vserver_port) { /* Check port range */ if ((vserver_port <= 0) || (vserver_port > 65535)) { ERROR("teamspeak2 plugin: VServer port is invalid: %i", vserver_port); - return (-1); + return -1; } /* Allocate memory */ entry = calloc(1, sizeof(*entry)); if (entry == NULL) { ERROR("teamspeak2 plugin: calloc failed."); - return (-1); + return -1; } /* Save data */ @@ -100,7 +100,7 @@ static int tss2_add_vserver(int vserver_port) { INFO("teamspeak2 plugin: Registered new vserver: %i", vserver_port); - return (0); + return 0; } /* int tss2_add_vserver */ static void tss2_submit_gauge(const char *plugin_instance, const char *type, @@ -182,7 +182,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { *ret_read_fh = global_read_fh; if (ret_write_fh != NULL) *ret_write_fh = global_write_fh; - return (0); + return 0; } /* Get all addrs for this hostname */ @@ -195,7 +195,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { &ai_hints, &ai_head); if (status != 0) { ERROR("teamspeak2 plugin: getaddrinfo failed: %s", gai_strerror(status)); - return (-1); + return -1; } /* Try all given hosts until we can connect to one */ @@ -231,7 +231,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { /* Check if we really got connected */ if (sd < 0) - return (-1); + return -1; /* Create file objects from sockets */ global_read_fh = fdopen(sd, "r"); @@ -240,7 +240,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { ERROR("teamspeak2 plugin: fdopen failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(sd); - return (-1); + return -1; } global_write_fh = fdopen(sd, "w"); @@ -249,7 +249,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { ERROR("teamspeak2 plugin: fdopen failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); tss2_close_socket(); - return (-1); + return -1; } { /* Check that the server correctly identifies itself. */ @@ -270,7 +270,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { "to server. Expected ``[TS]'', got ``%s''.", buffer); tss2_close_socket(); - return (-1); + return -1; } DEBUG("teamspeak2 plugin: Server send correct banner, connected!"); } @@ -280,7 +280,7 @@ static int tss2_get_socket(FILE **ret_read_fh, FILE **ret_write_fh) { *ret_read_fh = global_read_fh; if (ret_write_fh != NULL) *ret_write_fh = global_write_fh; - return (0); + return 0; } /* int tss2_get_socket */ static int tss2_send_request(FILE *fh, const char *request) { @@ -293,11 +293,11 @@ static int tss2_send_request(FILE *fh, const char *request) { if (status < 0) { ERROR("teamspeak2 plugin: fputs failed."); tss2_close_socket(); - return (-1); + return -1; } fflush(fh); - return (0); + return 0; } /* int tss2_send_request */ static int tss2_receive_line(FILE *fh, char *buffer, int buffer_size) { @@ -316,11 +316,11 @@ static int tss2_receive_line(FILE *fh, char *buffer, int buffer_size) { ERROR("teamspeak2 plugin: fgets failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); tss2_close_socket(); - return (-1); + return -1; } buffer[buffer_size - 1] = 0; - return (0); + return 0; } /* int tss2_receive_line */ static int tss2_select_vserver(FILE *read_fh, FILE *write_fh, @@ -338,26 +338,26 @@ static int tss2_select_vserver(FILE *read_fh, FILE *write_fh, status = tss2_send_request(write_fh, command); if (status != 0) { ERROR("teamspeak2 plugin: tss2_send_request (%s) failed.", command); - return (-1); + return -1; } /* Get answer */ status = tss2_receive_line(read_fh, response, sizeof(response)); if (status != 0) { ERROR("teamspeak2 plugin: tss2_receive_line failed."); - return (-1); + return -1; } response[sizeof(response) - 1] = 0; /* Check answer */ if ((strncasecmp("OK", response, 2) == 0) && ((response[2] == 0) || (response[2] == '\n') || (response[2] == '\r'))) - return (0); + return 0; ERROR("teamspeak2 plugin: Command ``%s'' failed. " "Response received from server was: ``%s''.", command, response); - return (-1); + return -1; } /* int tss2_select_vserver */ static int tss2_vserver_gapl(FILE *read_fh, FILE *write_fh, @@ -373,7 +373,7 @@ static int tss2_vserver_gapl(FILE *read_fh, FILE *write_fh, status = tss2_send_request(write_fh, "gapl\r\n"); if (status != 0) { ERROR("teamspeak2 plugin: tss2_send_request (gapl) failed."); - return (-1); + return -1; } while (42) { @@ -387,7 +387,7 @@ static int tss2_vserver_gapl(FILE *read_fh, FILE *write_fh, read_fh = NULL; write_fh = NULL; ERROR("teamspeak2 plugin: tss2_receive_line failed."); - return (-1); + return -1; } buffer[sizeof(buffer) - 1] = 0; @@ -418,7 +418,7 @@ static int tss2_vserver_gapl(FILE *read_fh, FILE *write_fh, break; } else if (strncasecmp("ERROR", buffer, 5) == 0) { ERROR("teamspeak2 plugin: Server returned an error: %s", buffer); - return (-1); + return -1; } else { WARNING("teamspeak2 plugin: Server returned unexpected string: %s", buffer); @@ -426,7 +426,7 @@ static int tss2_vserver_gapl(FILE *read_fh, FILE *write_fh, } *ret_value = packet_loss; - return (0); + return 0; } /* int tss2_vserver_gapl */ static int tss2_read_vserver(vserver_list_t *vserver) { @@ -455,7 +455,7 @@ static int tss2_read_vserver(vserver_list_t *vserver) { status = tss2_get_socket(&read_fh, &write_fh); if (status != 0) { ERROR("teamspeak2 plugin: tss2_get_socket failed."); - return (-1); + return -1; } if (vserver == NULL) { @@ -469,14 +469,14 @@ static int tss2_read_vserver(vserver_list_t *vserver) { /* Select the server */ status = tss2_select_vserver(read_fh, write_fh, vserver); if (status != 0) - return (status); + return status; status = tss2_send_request(write_fh, "si\r\n"); } if (status != 0) { ERROR("teamspeak2 plugin: tss2_send_request failed."); - return (-1); + return -1; } /* Loop until break */ @@ -616,8 +616,8 @@ static int tss2_read_vserver(vserver_list_t *vserver) { tss2_submit_gauge(plugin_instance, "gauge", "servers", servers); if (valid == 0) - return (-1); - return (0); + return -1; + return 0; } /* int tss2_read_vserver */ static int tss2_config(const char *key, const char *value) { @@ -630,7 +630,7 @@ static int tss2_config(const char *key, const char *value) { temp = strdup(value); if (temp == NULL) { ERROR("teamspeak2 plugin: strdup failed."); - return (1); + return 1; } sfree(config_host); config_host = temp; @@ -640,7 +640,7 @@ static int tss2_config(const char *key, const char *value) { temp = strdup(value); if (temp == NULL) { ERROR("teamspeak2 plugin: strdup failed."); - return (1); + return 1; } sfree(config_port); config_port = temp; @@ -650,10 +650,10 @@ static int tss2_config(const char *key, const char *value) { status = tss2_add_vserver(atoi(value)); if (status != 0) - return (1); + return 1; } else { /* Unknown variable found */ - return (-1); + return -1; } return 0; @@ -690,8 +690,8 @@ static int tss2_read(void) { } if (success == 0) - return (-1); - return (0); + return -1; + return 0; } /* int tss2_read */ static int tss2_shutdown(void) { @@ -716,7 +716,7 @@ static int tss2_shutdown(void) { sfree(config_host); sfree(config_port); - return (0); + return 0; } /* int tss2_shutdown */ void module_register(void) { @@ -728,5 +728,3 @@ void module_register(void) { plugin_register_read("teamspeak2", tss2_read); plugin_register_shutdown("teamspeak2", tss2_shutdown); } /* void module_register */ - -/* vim: set sw=4 ts=4 : */ diff --git a/src/ted.c b/src/ted.c index cccb3dbb..94b4e3ab 100644 --- a/src/ted.c +++ b/src/ted.c @@ -39,8 +39,7 @@ #include "common.h" #include "plugin.h" -#if HAVE_TERMIOS_H && HAVE_SYS_IOCTL_H && HAVE_MATH_H -#include +#if HAVE_TERMIOS_H && HAVE_SYS_IOCTL_H #include #include #else @@ -90,7 +89,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { status = write(fd, pkt_request, sizeof(pkt_request)); if (status <= 0) { ERROR("ted plugin: swrite failed."); - return (-1); + return -1; } /* Loop until we find the end of the package */ @@ -105,7 +104,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { { WARNING("ted plugin: Timeout while waiting for file descriptor " "to become ready."); - return (-1); + return -1; } else if ((status < 0) && ((errno == EAGAIN) || (errno == EINTR))) { /* Some signal or something. Start over.. */ continue; @@ -113,7 +112,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { char errbuf[1024]; ERROR("ted plugin: select failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } receive_buffer_length = read(fd, receive_buffer, sizeof(receive_buffer)); @@ -123,15 +122,15 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { continue; ERROR("ted plugin: read(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } else if (receive_buffer_length == 0) { /* Should we close the FD in this case? */ WARNING("ted plugin: Received EOF from file descriptor."); - return (-1); + return -1; } else if (((size_t)receive_buffer_length) > sizeof(receive_buffer)) { ERROR("ted plugin: read(2) returned invalid value %zi.", receive_buffer_length); - return (-1); + return -1; } /* @@ -176,7 +175,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { /* Check for errors inside the loop. */ if ((end_flag == 0) || (package_buffer_pos != EXPECTED_PACKAGE_LENGTH)) - return (-1); + return -1; /* * Power is at positions 247 and 248 (LSB first) in [10kW]. @@ -191,7 +190,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) { ((int)package_buffer[251])); /* success */ - return (0); + return 0; } /* int ted_read_value */ static int ted_open_device(void) { @@ -199,7 +198,7 @@ static int ted_open_device(void) { struct termios options; if (fd >= 0) - return (0); + return 0; dev = DEFAULT_DEVICE; if (conf_device != NULL) @@ -208,7 +207,7 @@ static int ted_open_device(void) { fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); if (fd < 0) { ERROR("ted plugin: Unable to open device %s.", dev); - return (-1); + return -1; } /* Get the current options for the port... */ @@ -225,7 +224,7 @@ static int ted_open_device(void) { tcsetattr(fd, TCSANOW, &options); INFO("ted plugin: Successfully opened %s.", dev); - return (0); + return 0; } /* int ted_open_device */ static void ted_submit(const char *type, double value) { @@ -249,15 +248,15 @@ static int ted_config(const char *key, const char *value) { tmp = atoi(value); if (tmp < 0) { WARNING("ted plugin: Invalid retry count: %i", tmp); - return (1); + return 1; } conf_retries = tmp; } else { ERROR("ted plugin: Unknown config option: %s", key); - return (-1); + return -1; } - return (0); + return 0; } /* int ted_config */ static int ted_read(void) { @@ -267,7 +266,7 @@ static int ted_read(void) { status = ted_open_device(); if (status != 0) - return (-1); + return -1; power = NAN; voltage = NAN; @@ -278,12 +277,12 @@ static int ted_read(void) { } if (status != 0) - return (-1); + return -1; ted_submit("power", power); ted_submit("voltage", voltage); - return (0); + return 0; } /* int ted_read */ static int ted_shutdown(void) { @@ -292,7 +291,7 @@ static int ted_shutdown(void) { fd = -1; } - return (0); + return 0; } /* int ted_shutdown */ void module_register(void) { @@ -300,5 +299,3 @@ void module_register(void) { plugin_register_read("ted", ted_read); plugin_register_shutdown("ted", ted_shutdown); } /* void module_register */ - -/* vim: set sw=4 et : */ diff --git a/src/testing.h b/src/testing.h index 42f45ce6..d3da9db4 100644 --- a/src/testing.h +++ b/src/testing.h @@ -71,7 +71,7 @@ static int check_count__ = 0; if (strcmp(expect, got__) != 0) { \ printf("not ok %i - %s = \"%s\", want \"%s\"\n", ++check_count__, \ #actual, got__, expect); \ - return (-1); \ + return -1; \ } \ printf("ok %i - %s = \"%s\"\n", ++check_count__, #actual, got__); \ } while (0) @@ -83,7 +83,7 @@ static int check_count__ = 0; if (got__ != want__) { \ printf("not ok %i - %s = %d, want %d\n", ++check_count__, #actual, \ got__, want__); \ - return (-1); \ + return -1; \ } \ printf("ok %i - %s = %d\n", ++check_count__, #actual, got__); \ } while (0) @@ -95,7 +95,7 @@ static int check_count__ = 0; if (got__ != want__) { \ printf("not ok %i - %s = %" PRIu64 ", want %" PRIu64 "\n", \ ++check_count__, #actual, got__, want__); \ - return (-1); \ + return -1; \ } \ printf("ok %i - %s = %" PRIu64 "\n", ++check_count__, #actual, got__); \ } while (0) @@ -104,15 +104,16 @@ static int check_count__ = 0; do { \ double want__ = (double)expect; \ double got__ = (double)actual; \ - if (isnan(want__) && !isnan(got__)) { \ + if ((isnan(want__) && !isnan(got__)) || \ + (!isnan(want__) && isnan(got__))) { \ printf("not ok %i - %s = %.15g, want %.15g\n", ++check_count__, #actual, \ got__, want__); \ - return (-1); \ + return -1; \ } else if (!isnan(want__) && (((want__ - got__) < -DBL_PRECISION) || \ ((want__ - got__) > DBL_PRECISION))) { \ printf("not ok %i - %s = %.15g, want %.15g\n", ++check_count__, #actual, \ got__, want__); \ - return (-1); \ + return -1; \ } \ printf("ok %i - %s = %.15g\n", ++check_count__, #actual, got__); \ } while (0) diff --git a/src/thermal.c b/src/thermal.c index fbae6cc1..48157552 100644 --- a/src/thermal.c +++ b/src/thermal.c @@ -78,7 +78,7 @@ static int thermal_sysfs_device_read(const char __attribute__((unused)) * dir, success = 1; } - return (success ? 0 : -1); + return success ? 0 : -1; } static int thermal_procfs_device_read(const char __attribute__((unused)) * dir, @@ -168,13 +168,11 @@ static int thermal_config(const char *key, const char *value) { } static int thermal_sysfs_read(void) { - return walk_directory(dirname_sysfs, thermal_sysfs_device_read, - /* user_data = */ NULL, /* include hidden */ 0); + return walk_directory(dirname_sysfs, thermal_sysfs_device_read, NULL, 0); } static int thermal_procfs_read(void) { - return walk_directory(dirname_procfs, thermal_procfs_device_read, - /* user_data = */ NULL, /* include hidden */ 0); + return walk_directory(dirname_procfs, thermal_procfs_device_read, NULL, 0); } static int thermal_init(void) { diff --git a/src/threshold.c b/src/threshold.c index 743db28d..72e922e9 100644 --- a/src/threshold.c +++ b/src/threshold.c @@ -55,20 +55,20 @@ static int ut_threshold_add(const threshold_t *th) { /* {{{ */ if (format_name(name, sizeof(name), th->host, th->plugin, th->plugin_instance, th->type, th->type_instance) != 0) { ERROR("ut_threshold_add: format_name failed."); - return (-1); + return -1; } name_copy = strdup(name); if (name_copy == NULL) { ERROR("ut_threshold_add: strdup failed."); - return (-1); + return -1; } th_copy = malloc(sizeof(*th_copy)); if (th_copy == NULL) { sfree(name_copy); ERROR("ut_threshold_add: malloc failed."); - return (-1); + return -1; } memcpy(th_copy, th, sizeof(threshold_t)); @@ -100,7 +100,7 @@ static int ut_threshold_add(const threshold_t *th) { /* {{{ */ sfree(th_copy); } - return (status); + return status; } /* }}} int ut_threshold_add */ /* @@ -113,26 +113,26 @@ static int ut_config_type_datasource(threshold_t *th, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `DataSource' option needs exactly one " "string argument."); - return (-1); + return -1; } sstrncpy(th->data_source, ci->values[0].value.string, sizeof(th->data_source)); - return (0); + return 0; } /* int ut_config_type_datasource */ static int ut_config_type_instance(threshold_t *th, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `Instance' option needs exactly one " "string argument."); - return (-1); + return -1; } sstrncpy(th->type_instance, ci->values[0].value.string, sizeof(th->type_instance)); - return (0); + return 0; } /* int ut_config_type_instance */ static int ut_config_type_max(threshold_t *th, oconfig_item_t *ci) { @@ -140,7 +140,7 @@ static int ut_config_type_max(threshold_t *th, oconfig_item_t *ci) { WARNING("threshold values: The `%s' option needs exactly one " "number argument.", ci->key); - return (-1); + return -1; } if (strcasecmp(ci->key, "WarningMax") == 0) @@ -148,7 +148,7 @@ static int ut_config_type_max(threshold_t *th, oconfig_item_t *ci) { else th->failure_max = ci->values[0].value.number; - return (0); + return 0; } /* int ut_config_type_max */ static int ut_config_type_min(threshold_t *th, oconfig_item_t *ci) { @@ -156,7 +156,7 @@ static int ut_config_type_min(threshold_t *th, oconfig_item_t *ci) { WARNING("threshold values: The `%s' option needs exactly one " "number argument.", ci->key); - return (-1); + return -1; } if (strcasecmp(ci->key, "WarningMin") == 0) @@ -164,7 +164,7 @@ static int ut_config_type_min(threshold_t *th, oconfig_item_t *ci) { else th->failure_min = ci->values[0].value.number; - return (0); + return 0; } /* int ut_config_type_min */ static int ut_config_type_hits(threshold_t *th, oconfig_item_t *ci) { @@ -172,12 +172,12 @@ static int ut_config_type_hits(threshold_t *th, oconfig_item_t *ci) { WARNING("threshold values: The `%s' option needs exactly one " "number argument.", ci->key); - return (-1); + return -1; } th->hits = ci->values[0].value.number; - return (0); + return 0; } /* int ut_config_type_hits */ static int ut_config_type_hysteresis(threshold_t *th, oconfig_item_t *ci) { @@ -185,12 +185,12 @@ static int ut_config_type_hysteresis(threshold_t *th, oconfig_item_t *ci) { WARNING("threshold values: The `%s' option needs exactly one " "number argument.", ci->key); - return (-1); + return -1; } th->hysteresis = ci->values[0].value.number; - return (0); + return 0; } /* int ut_config_type_hysteresis */ static int ut_config_type(const threshold_t *th_orig, oconfig_item_t *ci) { @@ -200,12 +200,12 @@ static int ut_config_type(const threshold_t *th_orig, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `Type' block needs exactly one string " "argument."); - return (-1); + return -1; } if (ci->children_num < 1) { WARNING("threshold values: The `Type' block needs at least one option."); - return (-1); + return -1; } memcpy(&th, th_orig, sizeof(th)); @@ -261,20 +261,20 @@ static int ut_config_type(const threshold_t *th_orig, oconfig_item_t *ci) { status = ut_threshold_add(&th); } - return (status); + return status; } /* int ut_config_type */ static int ut_config_plugin_instance(threshold_t *th, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `Instance' option needs exactly one " "string argument."); - return (-1); + return -1; } sstrncpy(th->plugin_instance, ci->values[0].value.string, sizeof(th->plugin_instance)); - return (0); + return 0; } /* int ut_config_plugin_instance */ static int ut_config_plugin(const threshold_t *th_orig, oconfig_item_t *ci) { @@ -284,13 +284,13 @@ static int ut_config_plugin(const threshold_t *th_orig, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `Plugin' block needs exactly one string " "argument."); - return (-1); + return -1; } if (ci->children_num < 1) { WARNING("threshold values: The `Plugin' block needs at least one nested " "block."); - return (-1); + return -1; } memcpy(&th, th_orig, sizeof(th)); @@ -314,7 +314,7 @@ static int ut_config_plugin(const threshold_t *th_orig, oconfig_item_t *ci) { break; } - return (status); + return status; } /* int ut_config_plugin */ static int ut_config_host(const threshold_t *th_orig, oconfig_item_t *ci) { @@ -324,13 +324,13 @@ static int ut_config_host(const threshold_t *th_orig, oconfig_item_t *ci) { if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("threshold values: The `Host' block needs exactly one string " "argument."); - return (-1); + return -1; } if (ci->children_num < 1) { WARNING("threshold values: The `Host' block needs at least one nested " "block."); - return (-1); + return -1; } memcpy(&th, th_orig, sizeof(th)); @@ -354,7 +354,7 @@ static int ut_config_host(const threshold_t *th_orig, oconfig_item_t *ci) { break; } - return (status); + return status; } /* int ut_config_host */ /* * End of the functions used to configure threshold values. @@ -392,7 +392,7 @@ static int ut_report_state(const data_set_t *ds, const value_list_t *vl, DEBUG("ut_report_state: th->hits = %d, uc_get_hits = %d", th->hits, uc_get_hits(ds, vl)); (void)uc_inc_hits(ds, vl, 1); /* increase hit counter */ - return (0); + return 0; } } /* end check hits */ @@ -402,9 +402,9 @@ static int ut_report_state(const data_set_t *ds, const value_list_t *vl, * state is `okay', then only report if `persist_ok` flag is set. */ if (state == state_old) { if ((th->flags & UT_FLAG_PERSIST) == 0) - return (0); + return 0; else if ((state == STATE_OKAY) && ((th->flags & UT_FLAG_PERSIST_OK) == 0)) - return (0); + return 0; } if (state != state_old) @@ -522,7 +522,7 @@ static int ut_report_state(const data_set_t *ds, const value_list_t *vl, plugin_dispatch_notification(&n); plugin_notification_meta_free(n.meta); - return (0); + return 0; } /* }}} int ut_report_state */ /* @@ -547,7 +547,7 @@ static int ut_check_one_data_source( if (ds != NULL) { ds_name = ds->ds[ds_index].name; if ((th->data_source[0] != 0) && (strcmp(ds_name, th->data_source) != 0)) - return (STATE_OKAY); + return STATE_OKAY; } if ((th->flags & UT_FLAG_INVERT) != 0) { @@ -604,12 +604,12 @@ static int ut_check_one_data_source( } if (is_failure != 0) - return (STATE_ERROR); + return STATE_ERROR; if (is_warning != 0) - return (STATE_WARNING); + return STATE_WARNING; - return (STATE_OKAY); + return STATE_OKAY; } /* }}} int ut_check_one_data_source */ /* @@ -674,7 +674,7 @@ static int ut_check_one_threshold(const data_set_t *ds, const value_list_t *vl, if (ret_ds_index != NULL) *ret_ds_index = ds_index; - return (ret); + return ret; } /* }}} int ut_check_one_threshold */ /* @@ -698,7 +698,7 @@ static int ut_check_threshold(const data_set_t *ds, const value_list_t *vl, int worst_ds_index = -1; if (threshold_tree == NULL) - return (0); + return 0; /* Is this lock really necessary? So far, thresholds are only inserted at * startup. -octo */ @@ -706,13 +706,13 @@ static int ut_check_threshold(const data_set_t *ds, const value_list_t *vl, th = threshold_search(vl); pthread_mutex_unlock(&threshold_lock); if (th == NULL) - return (0); + return 0; DEBUG("ut_check_threshold: Found matching threshold(s)"); values = uc_get_rate(ds, vl); if (values == NULL) - return (0); + return 0; while (th != NULL) { int ds_index = -1; @@ -721,7 +721,7 @@ static int ut_check_threshold(const data_set_t *ds, const value_list_t *vl, if (status < 0) { ERROR("ut_check_threshold: ut_check_one_threshold failed."); sfree(values); - return (-1); + return -1; } if (worst_state < status) { @@ -738,12 +738,12 @@ static int ut_check_threshold(const data_set_t *ds, const value_list_t *vl, if (status != 0) { ERROR("ut_check_threshold: ut_report_state failed."); sfree(values); - return (-1); + return -1; } sfree(values); - return (0); + return 0; } /* }}} int ut_check_threshold */ /* @@ -760,12 +760,12 @@ static int ut_missing(const value_list_t *vl, cdtime_t now; if (threshold_tree == NULL) - return (0); + return 0; th = threshold_search(vl); /* dispatch notifications for "interesting" values only */ if ((th == NULL) || ((th->flags & UT_FLAG_INTERESTING) == 0)) - return (0); + return 0; now = cdtime(); missing_time = now - vl->time; @@ -779,7 +779,7 @@ static int ut_missing(const value_list_t *vl, plugin_dispatch_notification(&n); - return (0); + return 0; } /* }}} int ut_missing */ static int ut_config(oconfig_item_t *ci) { /* {{{ */ @@ -790,7 +790,7 @@ static int ut_config(oconfig_item_t *ci) { /* {{{ */ threshold_tree = c_avl_create((int (*)(const void *, const void *))strcmp); if (threshold_tree == NULL) { ERROR("ut_config: c_avl_create failed."); - return (-1); + return -1; } } @@ -828,11 +828,9 @@ static int ut_config(oconfig_item_t *ci) { /* {{{ */ /* user data = */ NULL); } - return (status); + return status; } /* }}} int um_config */ void module_register(void) { plugin_register_complex_config("threshold", ut_config); } - -/* vim: set sw=2 ts=8 sts=2 tw=78 et fdm=marker : */ diff --git a/src/tokyotyrant.c b/src/tokyotyrant.c index cb366d38..1534f51e 100644 --- a/src/tokyotyrant.c +++ b/src/tokyotyrant.c @@ -45,7 +45,7 @@ static int tt_config(const char *key, const char *value) { temp = strdup(value); if (temp == NULL) { ERROR("tokyotyrant plugin: Host strdup failed."); - return (1); + return 1; } sfree(config_host); config_host = temp; @@ -55,16 +55,16 @@ static int tt_config(const char *key, const char *value) { temp = strdup(value); if (temp == NULL) { ERROR("tokyotyrant plugin: Port strdup failed."); - return (1); + return 1; } sfree(config_port); config_port = temp; } else { ERROR("tokyotyrant plugin: error: unrecognized configuration key %s", key); - return (-1); + return -1; } - return (0); + return 0; } static void printerr(void) { @@ -116,7 +116,7 @@ static int tt_read(void) { tt_open_db(); if (rdb == NULL) - return (-1); + return -1; rnum = tcrdbrnum(rdb); tt_submit(rnum, "records"); @@ -124,7 +124,7 @@ static int tt_read(void) { size = tcrdbsize(rdb); tt_submit(size, "file_size"); - return (0); + return 0; } static int tt_shutdown(void) { @@ -135,13 +135,13 @@ static int tt_shutdown(void) { if (!tcrdbclose(rdb)) { printerr(); tcrdbdel(rdb); - return (1); + return 1; } tcrdbdel(rdb); rdb = NULL; } - return (0); + return 0; } void module_register(void) { @@ -150,5 +150,3 @@ void module_register(void) { plugin_register_read("tokyotyrant", tt_read); plugin_register_shutdown("tokyotyrant", tt_shutdown); } - -/* vim: set sw=8 ts=8 tw=78 : */ diff --git a/src/turbostat.c b/src/turbostat.c index 62bd92b1..45c8bd70 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1118,7 +1118,7 @@ for_all_proc_cpus(int(func)(unsigned int)) { retval = func(cpu_num); if (retval) { fclose(fp); - return (retval); + return retval; } } fclose(fp); diff --git a/src/types.db b/src/types.db index 68551875..c9838e16 100644 --- a/src/types.db +++ b/src/types.db @@ -26,7 +26,7 @@ clock_last_meas value:GAUGE:0:U clock_last_update value:GAUGE:U:U clock_mode value:GAUGE:0:U clock_reachability value:GAUGE:0:U -clock_skew_ppm value:GAUGE:-2:2 +clock_skew_ppm value:GAUGE:0:1000000 clock_state value:GAUGE:0:U clock_stratum value:GAUGE:0:U compression uncompressed:DERIVE:0:U, compressed:DERIVE:0:U @@ -37,6 +37,7 @@ contextswitch value:DERIVE:0:U count value:GAUGE:0:U counter value:COUNTER:U:U cpu value:DERIVE:0:U +cpu_affinity value:GAUGE:0:1 cpufreq value:GAUGE:0:U current value:GAUGE:U:U current_connections value:GAUGE:0:U @@ -47,6 +48,7 @@ df used:GAUGE:0:1125899906842623, free:GAUGE:0:112589990684 df_complex value:GAUGE:0:U df_inodes value:GAUGE:0:U dilution_of_precision value:GAUGE:0:U +disk_error value:GAUGE:0:U disk_io_time io_time:DERIVE:0:U, weighted_io_time:DERIVE:0:U disk_latency read:GAUGE:0:U, write:GAUGE:0:U disk_merged read:DERIVE:0:U, write:DERIVE:0:U @@ -70,6 +72,7 @@ dns_response value:DERIVE:0:U dns_transfer value:DERIVE:0:U dns_update value:DERIVE:0:U dns_zops value:DERIVE:0:U +domain_state state:GAUGE:0:U, reason:GAUGE:0:U drbd_resource value:DERIVE:0:U duration seconds:GAUGE:0:U email_check value:GAUGE:0:U @@ -89,7 +92,7 @@ filter_result value:DERIVE:0:U flow value:GAUGE:0:U fork_rate value:DERIVE:0:U frequency value:GAUGE:0:U -frequency_error value:GAUGE:-2:2 +frequency_error value:GAUGE:-1000000:1000000 frequency_offset value:GAUGE:-1000000:1000000 fscache_stat value:DERIVE:0:U gauge value:GAUGE:U:U @@ -119,6 +122,7 @@ ipc value:GAUGE:0:U ipt_bytes value:DERIVE:0:U ipt_packets value:DERIVE:0:U irq value:DERIVE:0:U +job_stats value:DERIVE:0:U latency value:GAUGE:0:U links value:GAUGE:0:U load shortterm:GAUGE:0:5000, midterm:GAUGE:0:5000, longterm:GAUGE:0:5000 @@ -168,6 +172,7 @@ pending_operations value:GAUGE:0:U percent value:GAUGE:0:100.1 percent_bytes value:GAUGE:0:100.1 percent_inodes value:GAUGE:0:100.1 +perf value:DERIVE:0:U pf_counters value:DERIVE:0:U pf_limits value:DERIVE:0:U pf_source value:DERIVE:0:U diff --git a/src/unixsock.c b/src/unixsock.c index 32fa9bc7..00b930e6 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -78,7 +78,7 @@ static int us_open_socket(void) { char errbuf[1024]; ERROR("unixsock plugin: socket failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } sa.sun_family = AF_UNIX; @@ -107,7 +107,7 @@ static int us_open_socket(void) { ERROR("unixsock plugin: bind failed: %s", errbuf); close(sock_fd); sock_fd = -1; - return (-1); + return -1; } status = chmod(sa.sun_path, sock_perms); @@ -117,7 +117,7 @@ static int us_open_socket(void) { sstrerror(errno, errbuf, sizeof(errbuf))); close(sock_fd); sock_fd = -1; - return (-1); + return -1; } status = listen(sock_fd, 8); @@ -127,7 +127,7 @@ static int us_open_socket(void) { sstrerror(errno, errbuf, sizeof(errbuf))); close(sock_fd); sock_fd = -1; - return (-1); + return -1; } do { @@ -160,7 +160,7 @@ static int us_open_socket(void) { } } while (0); - return (0); + return 0; } /* int us_open_socket */ static void *us_handle_client(void *arg) { @@ -191,7 +191,7 @@ static void *us_handle_client(void *arg) { close(fdin); close(fdout); pthread_exit((void *)1); - return ((void *)1); + return (void *)1; } fhout = fdopen(fdout, "w"); @@ -202,7 +202,7 @@ static void *us_handle_client(void *arg) { fclose(fhin); /* this closes fdin as well */ close(fdout); pthread_exit((void *)1); - return ((void *)1); + return (void *)1; } /* change output buffer to line buffered mode */ @@ -213,7 +213,7 @@ static void *us_handle_client(void *arg) { fclose(fhin); fclose(fhout); pthread_exit((void *)1); - return ((void *)0); + return (void *)0; } while (42) { @@ -253,7 +253,7 @@ static void *us_handle_client(void *arg) { fclose(fhin); fclose(fhout); pthread_exit((void *)1); - return ((void *)1); + return (void *)1; } if (strcasecmp(fields[0], "getval") == 0) { @@ -283,7 +283,7 @@ static void *us_handle_client(void *arg) { fclose(fhout); pthread_exit((void *)0); - return ((void *)0); + return (void *)0; } /* void *us_handle_client */ static void *us_server_thread(void __attribute__((unused)) * arg) { @@ -351,21 +351,21 @@ static void *us_server_thread(void __attribute__((unused)) * arg) { sstrerror(errno, errbuf, sizeof(errbuf))); } - return ((void *)0); + return (void *)0; } /* void *us_server_thread */ static int us_config(const char *key, const char *val) { if (strcasecmp(key, "SocketFile") == 0) { char *new_sock_file = strdup(val); if (new_sock_file == NULL) - return (1); + return 1; sfree(sock_file); sock_file = new_sock_file; } else if (strcasecmp(key, "SocketGroup") == 0) { char *new_sock_group = strdup(val); if (new_sock_group == NULL) - return (1); + return 1; sfree(sock_group); sock_group = new_sock_group; @@ -377,10 +377,10 @@ static int us_config(const char *key, const char *val) { else delete_socket = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int us_config */ static int us_init(void) { @@ -390,7 +390,7 @@ static int us_init(void) { /* Initialize only once. */ if (have_init != 0) - return (0); + return 0; have_init = 1; loop = 1; @@ -401,10 +401,10 @@ static int us_init(void) { char errbuf[1024]; ERROR("unixsock plugin: pthread_create failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } - return (0); + return 0; } /* int us_init */ static int us_shutdown(void) { @@ -421,7 +421,7 @@ static int us_shutdown(void) { plugin_unregister_init("unixsock"); plugin_unregister_shutdown("unixsock"); - return (0); + return 0; } /* int us_shutdown */ void module_register(void) { @@ -429,5 +429,3 @@ void module_register(void) { plugin_register_init("unixsock", us_init); plugin_register_shutdown("unixsock", us_shutdown); } /* void module_register (void) */ - -/* vim: set sw=4 ts=4 sts=4 tw=78 : */ diff --git a/src/uptime.c b/src/uptime.c index 96a227d9..2be9d79d 100644 --- a/src/uptime.c +++ b/src/uptime.c @@ -99,7 +99,7 @@ static int uptime_init(void) /* {{{ */ char errbuf[1024]; ERROR("uptime plugin: Cannot open " STAT_FILE ": %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, 1024, fh) != NULL) { @@ -116,7 +116,7 @@ static int uptime_init(void) /* {{{ */ /* loop done, check if no value has been found/read */ if (ret != 1) { ERROR("uptime plugin: No value read from " STAT_FILE ""); - return (-1); + return -1; } boottime = (time_t)starttime; @@ -124,7 +124,7 @@ static int uptime_init(void) /* {{{ */ if (boottime == 0) { ERROR("uptime plugin: btime read from " STAT_FILE ", " "but `boottime' is zero!"); - return (-1); + return -1; } /* #endif KERNEL_LINUX */ @@ -139,24 +139,24 @@ static int uptime_init(void) /* {{{ */ * went fine. */ if (kc == NULL) { ERROR("uptime plugin: kstat chain control structure not available."); - return (-1); + return -1; } ksp = kstat_lookup(kc, "unix", 0, "system_misc"); if (ksp == NULL) { ERROR("uptime plugin: Cannot find unix:0:system_misc kstat."); - return (-1); + return -1; } if (kstat_read(kc, ksp, NULL) < 0) { ERROR("uptime plugin: kstat_read failed."); - return (-1); + return -1; } knp = (kstat_named_t *)kstat_data_lookup(ksp, "boot_time"); if (knp == NULL) { ERROR("uptime plugin: kstat_data_lookup (boot_time) failed."); - return (-1); + return -1; } boottime = (time_t)knp->value.ui32; @@ -164,7 +164,7 @@ static int uptime_init(void) /* {{{ */ if (boottime == 0) { ERROR("uptime plugin: kstat_data_lookup returned success, " "but `boottime' is zero!"); - return (-1); + return -1; } /* #endif HAVE_LIBKSTAT */ @@ -183,7 +183,7 @@ static int uptime_init(void) /* {{{ */ char errbuf[1024]; ERROR("uptime plugin: No value read from sysctl interface: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } boottime = boottv.tv_sec; @@ -191,7 +191,7 @@ static int uptime_init(void) /* {{{ */ if (boottime == 0) { ERROR("uptime plugin: sysctl(3) returned success, " "but `boottime' is zero!"); - return (-1); + return -1; } /* #endif HAVE_SYS_SYSCTL_H */ @@ -205,7 +205,7 @@ static int uptime_init(void) /* {{{ */ char errbuf[1024]; ERROR("uptime plugin: perfstat_cpu_total: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } hertz = sysconf(_SC_CLK_TCK); @@ -215,7 +215,7 @@ static int uptime_init(void) /* {{{ */ boottime = time(NULL) - cputotal.lbolt / hertz; #endif /* HAVE_PERFSTAT */ - return (0); + return 0; } /* }}} int uptime_init */ static int uptime_read(void) { @@ -229,7 +229,7 @@ static int uptime_read(void) { uptime_submit(uptime); - return (0); + return 0; } void module_register(void) { diff --git a/src/users.c b/src/users.c index ff8c047a..6bc7cc34 100644 --- a/src/users.c +++ b/src/users.c @@ -101,7 +101,7 @@ static int users_read(void) { us = sg_get_user_stats(); #endif if (us == NULL) - return (-1); + return -1; users_submit((gauge_t) #if HAVE_LIBSTATGRAB_0_90 @@ -115,7 +115,7 @@ static int users_read(void) { #error "No applicable input method." #endif - return (0); + return 0; } /* int users_read */ void module_register(void) { diff --git a/src/utils_cmd_flush.c b/src/utils_cmd_flush.c index a8de21a6..b180a501 100644 --- a/src/utils_cmd_flush.c +++ b/src/utils_cmd_flush.c @@ -39,7 +39,7 @@ cmd_status_t cmd_parse_flush(size_t argc, char **argv, cmd_flush_t *ret_flush, if ((ret_flush == NULL) || (opts == NULL)) { errno = EINVAL; cmd_error(CMD_ERROR, err, "Invalid arguments to cmd_parse_flush."); - return (CMD_ERROR); + return CMD_ERROR; } for (size_t i = 0; i < argc; i++) { @@ -54,7 +54,7 @@ cmd_status_t cmd_parse_flush(size_t argc, char **argv, cmd_flush_t *ret_flush, if (status == CMD_NO_OPTION) cmd_error(CMD_PARSE_ERROR, err, "Invalid option string `%s'.", argv[i]); cmd_destroy_flush(ret_flush); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } if (strcasecmp("plugin", opt_key) == 0) { @@ -66,7 +66,7 @@ cmd_status_t cmd_parse_flush(size_t argc, char **argv, cmd_flush_t *ret_flush, if (id == NULL) { cmd_error(CMD_ERROR, err, "realloc failed."); cmd_destroy_flush(ret_flush); - return (CMD_ERROR); + return CMD_ERROR; } ret_flush->identifiers = id; @@ -77,7 +77,7 @@ cmd_status_t cmd_parse_flush(size_t argc, char **argv, cmd_flush_t *ret_flush, opts->identifier_default_host) != 0) { cmd_error(CMD_PARSE_ERROR, err, "Invalid identifier `%s'.", opt_value); cmd_destroy_flush(ret_flush); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } } else if (strcasecmp("timeout", opt_key) == 0) { char *endptr; @@ -91,18 +91,18 @@ cmd_status_t cmd_parse_flush(size_t argc, char **argv, cmd_flush_t *ret_flush, cmd_error(CMD_PARSE_ERROR, err, "Invalid value for option `timeout': %s", opt_value); cmd_destroy_flush(ret_flush); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } else if (ret_flush->timeout < 0.0) { ret_flush->timeout = 0.0; } } else { cmd_error(CMD_PARSE_ERROR, err, "Cannot parse option `%s'.", opt_key); cmd_destroy_flush(ret_flush); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } } - return (CMD_OK); + return CMD_OK; } /* cmd_status_t cmd_parse_flush */ cmd_status_t cmd_handle_flush(FILE *fh, char *buffer) { @@ -114,18 +114,18 @@ cmd_status_t cmd_handle_flush(FILE *fh, char *buffer) { int status; if ((fh == NULL) || (buffer == NULL)) - return (-1); + return -1; DEBUG("utils_cmd_flush: cmd_handle_flush (fh = %p, buffer = %s);", (void *)fh, buffer); if ((status = cmd_parse(buffer, &cmd, NULL, &err)) != CMD_OK) - return (status); + return status; if (cmd.type != CMD_FLUSH) { cmd_error(CMD_UNKNOWN_COMMAND, &err, "Unexpected command: `%s'.", CMD_TO_STRING(cmd.type)); cmd_destroy(&cmd); - return (CMD_UNKNOWN_COMMAND); + return CMD_UNKNOWN_COMMAND; } for (size_t i = 0; (i == 0) || (i < cmd.cmd.flush.plugins_num); i++) { @@ -136,23 +136,21 @@ cmd_status_t cmd_handle_flush(FILE *fh, char *buffer) { for (size_t j = 0; (j == 0) || (j < cmd.cmd.flush.identifiers_num); j++) { char *identifier = NULL; - char buffer[1024]; - int status; + char buf[1024]; if (cmd.cmd.flush.identifiers_num != 0) { identifier_t *id = cmd.cmd.flush.identifiers + j; - if (format_name(buffer, sizeof(buffer), id->host, id->plugin, + if (format_name(buf, sizeof(buf), id->host, id->plugin, id->plugin_instance, id->type, id->type_instance) != 0) { error++; continue; } - identifier = buffer; + identifier = buf; } - status = plugin_flush(plugin, DOUBLE_TO_CDTIME_T(cmd.cmd.flush.timeout), - identifier); - if (status == 0) + if (plugin_flush(plugin, DOUBLE_TO_CDTIME_T(cmd.cmd.flush.timeout), + identifier) == 0) success++; else error++; @@ -162,7 +160,7 @@ cmd_status_t cmd_handle_flush(FILE *fh, char *buffer) { cmd_error(CMD_OK, &err, "Done: %i successful, %i errors", success, error); cmd_destroy(&cmd); - return (0); + return 0; #undef PRINT_TO_SOCK } /* cmd_status_t cmd_handle_flush */ @@ -177,5 +175,3 @@ void cmd_destroy_flush(cmd_flush_t *flush) { sfree(flush->identifiers); flush->identifiers_num = 0; } /* void cmd_destroy_flush */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/utils_cmd_flush.h b/src/utils_cmd_flush.h index d9b4e1b2..129aa85e 100644 --- a/src/utils_cmd_flush.h +++ b/src/utils_cmd_flush.h @@ -40,5 +40,3 @@ cmd_status_t cmd_handle_flush(FILE *fh, char *buffer); void cmd_destroy_flush(cmd_flush_t *flush); #endif /* UTILS_CMD_FLUSH_H */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/utils_cmd_getthreshold.c b/src/utils_cmd_getthreshold.c index 926375d6..78f9a75a 100644 --- a/src/utils_cmd_getthreshold.c +++ b/src/utils_cmd_getthreshold.c @@ -59,7 +59,7 @@ int handle_getthreshold(FILE *fh, char *buffer) { size_t i; if ((fh == NULL) || (buffer == NULL)) - return (-1); + return -1; DEBUG("utils_cmd_getthreshold: handle_getthreshold (fh = %p, buffer = %s);", (void *)fh, buffer); @@ -68,26 +68,26 @@ int handle_getthreshold(FILE *fh, char *buffer) { status = parse_string(&buffer, &command); if (status != 0) { print_to_socket(fh, "-1 Cannot parse command.\n"); - return (-1); + return -1; } assert(command != NULL); if (strcasecmp("GETTHRESHOLD", command) != 0) { print_to_socket(fh, "-1 Unexpected command: `%s'.\n", command); - return (-1); + return -1; } identifier = NULL; status = parse_string(&buffer, &identifier); if (status != 0) { print_to_socket(fh, "-1 Cannot parse identifier.\n"); - return (-1); + return -1; } assert(identifier != NULL); if (*buffer != 0) { print_to_socket(fh, "-1 Garbage after end of command: %s\n", buffer); - return (-1); + return -1; } /* parse_identifier() modifies its first argument, @@ -101,7 +101,7 @@ int handle_getthreshold(FILE *fh, char *buffer) { DEBUG("handle_getthreshold: Cannot parse identifier `%s'.", identifier); print_to_socket(fh, "-1 Cannot parse identifier `%s'.\n", identifier); sfree(identifier_copy); - return (-1); + return -1; } value_list_t vl = {.values = NULL}; @@ -118,10 +118,10 @@ int handle_getthreshold(FILE *fh, char *buffer) { if (status == ENOENT) { print_to_socket(fh, "-1 No threshold found for identifier %s\n", identifier); - return (0); + return 0; } else if (status != 0) { print_to_socket(fh, "-1 Error while looking up threshold: %i\n", status); - return (-1); + return -1; } /* Lets count the number of lines we'll return. */ @@ -179,7 +179,5 @@ int handle_getthreshold(FILE *fh, char *buffer) { if (threshold.hits > 1) print_to_socket(fh, "Hits: %i\n", threshold.hits); - return (0); + return 0; } /* int handle_getthreshold */ - -/* vim: set sw=2 sts=2 ts=8 et : */ diff --git a/src/utils_cmd_getthreshold.h b/src/utils_cmd_getthreshold.h index dd4e5cf8..78700ee2 100644 --- a/src/utils_cmd_getthreshold.h +++ b/src/utils_cmd_getthreshold.h @@ -32,5 +32,3 @@ int handle_getthreshold(FILE *fh, char *buffer); #endif /* UTILS_CMD_GETTHRESHOLD_H */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_cmd_getval.c b/src/utils_cmd_getval.c index c23650b3..59046f69 100644 --- a/src/utils_cmd_getval.c +++ b/src/utils_cmd_getval.c @@ -43,7 +43,7 @@ cmd_status_t cmd_parse_getval(size_t argc, char **argv, if ((ret_getval == NULL) || (opts == NULL)) { errno = EINVAL; cmd_error(CMD_ERROR, err, "Invalid arguments to cmd_parse_getval."); - return (CMD_ERROR); + return CMD_ERROR; } if (argc != 1) { @@ -52,7 +52,7 @@ cmd_status_t cmd_parse_getval(size_t argc, char **argv, else cmd_error(CMD_PARSE_ERROR, err, "Garbage after identifier: `%s'.", argv[1]); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } /* parse_identifier() modifies its first argument, @@ -68,11 +68,11 @@ cmd_status_t cmd_parse_getval(size_t argc, char **argv, cmd_error(CMD_PARSE_ERROR, err, "Cannot parse identifier `%s'.", identifier_copy); sfree(identifier_copy); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } ret_getval->raw_identifier = identifier_copy; - return (CMD_OK); + return CMD_OK; } /* cmd_status_t cmd_parse_getval */ #define print_to_socket(fh, ...) \ @@ -97,18 +97,18 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer) { const data_set_t *ds; if ((fh == NULL) || (buffer == NULL)) - return (-1); + return -1; DEBUG("utils_cmd_getval: cmd_handle_getval (fh = %p, buffer = %s);", (void *)fh, buffer); if ((status = cmd_parse(buffer, &cmd, NULL, &err)) != CMD_OK) - return (status); + return status; if (cmd.type != CMD_GETVAL) { cmd_error(CMD_UNKNOWN_COMMAND, &err, "Unexpected command: `%s'.", CMD_TO_STRING(cmd.type)); cmd_destroy(&cmd); - return (CMD_UNKNOWN_COMMAND); + return CMD_UNKNOWN_COMMAND; } ds = plugin_get_ds(cmd.cmd.getval.identifier.type); @@ -118,7 +118,7 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer) { cmd_error(CMD_ERROR, &err, "Type `%s' is unknown.\n", cmd.cmd.getval.identifier.type); cmd_destroy(&cmd); - return (-1); + return -1; } values = NULL; @@ -128,7 +128,7 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer) { if (status != 0) { cmd_error(CMD_ERROR, &err, "No such value."); cmd_destroy(&cmd); - return (CMD_ERROR); + return CMD_ERROR; } if (ds->ds_num != values_num) { @@ -138,7 +138,7 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer) { cmd_error(CMD_ERROR, &err, "Error reading value from cache."); sfree(values); cmd_destroy(&cmd); - return (CMD_ERROR); + return CMD_ERROR; } print_to_socket(fh, "%zu Value%s found\n", values_num, @@ -155,7 +155,7 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer) { sfree(values); cmd_destroy(&cmd); - return (CMD_OK); + return CMD_OK; } /* cmd_status_t cmd_handle_getval */ void cmd_destroy_getval(cmd_getval_t *getval) { @@ -164,5 +164,3 @@ void cmd_destroy_getval(cmd_getval_t *getval) { sfree(getval->raw_identifier); } /* void cmd_destroy_getval */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_cmd_getval.h b/src/utils_cmd_getval.h index 8d488b31..5c03fa4c 100644 --- a/src/utils_cmd_getval.h +++ b/src/utils_cmd_getval.h @@ -41,5 +41,3 @@ cmd_status_t cmd_handle_getval(FILE *fh, char *buffer); void cmd_destroy_getval(cmd_getval_t *getval); #endif /* UTILS_CMD_GETVAL_H */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_cmd_listval.c b/src/utils_cmd_listval.c index f8638893..36406305 100644 --- a/src/utils_cmd_listval.c +++ b/src/utils_cmd_listval.c @@ -42,10 +42,10 @@ cmd_status_t cmd_parse_listval(size_t argc, char **argv, if (argc != 0) { cmd_error(CMD_PARSE_ERROR, err, "Garbage after end of command: `%s'.", argv[0]); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } - return (CMD_OK); + return CMD_OK; } /* cmd_status_t cmd_parse_listval */ #define free_everything_and_return(status) \ @@ -56,7 +56,7 @@ cmd_status_t cmd_parse_listval(size_t argc, char **argv, } \ sfree(names); \ sfree(times); \ - return (status); \ + return status; \ } while (0) #define print_to_socket(fh, ...) \ @@ -83,7 +83,7 @@ cmd_status_t cmd_handle_listval(FILE *fh, char *buffer) { buffer); if ((status = cmd_parse(buffer, &cmd, NULL, &err)) != CMD_OK) - return (status); + return status; if (cmd.type != CMD_LISTVAL) { cmd_error(CMD_UNKNOWN_COMMAND, &err, "Unexpected command: `%s'.", CMD_TO_STRING(cmd.type)); @@ -108,5 +108,3 @@ cmd_status_t cmd_handle_listval(FILE *fh, char *buffer) { void cmd_destroy_listval(cmd_listval_t *listval __attribute__((unused))) { /* nothing to do */ } /* void cmd_destroy_listval */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_cmd_listval.h b/src/utils_cmd_listval.h index 8a4e8c8b..6abdeee3 100644 --- a/src/utils_cmd_listval.h +++ b/src/utils_cmd_listval.h @@ -41,5 +41,3 @@ cmd_status_t cmd_handle_listval(FILE *fh, char *buffer); void cmd_destroy_listval(cmd_listval_t *listval); #endif /* UTILS_CMD_LISTVAL_H */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_cmd_putnotif.c b/src/utils_cmd_putnotif.c index 0edfbb86..0085c62b 100644 --- a/src/utils_cmd_putnotif.c +++ b/src/utils_cmd_putnotif.c @@ -51,9 +51,9 @@ static int set_option_severity(notification_t *n, const char *value) { else if (strcasecmp(value, "Okay") == 0) n->severity = NOTIF_OKAY; else - return (-1); + return -1; - return (0); + return 0; } /* int set_option_severity */ static int set_option_time(notification_t *n, const char *value) { @@ -66,17 +66,17 @@ static int set_option_time(notification_t *n, const char *value) { || (endptr == value) /* Invalid string */ || (endptr == NULL) /* This should not happen */ || (*endptr != 0)) /* Trailing chars */ - return (-1); + return -1; n->time = DOUBLE_TO_CDTIME_T(tmp); - return (0); + return 0; } /* int set_option_time */ static int set_option(notification_t *n, const char *option, const char *value) { if ((n == NULL) || (option == NULL) || (value == NULL)) - return (-1); + return -1; DEBUG("utils_cmd_putnotif: set_option (option = %s, value = %s);", option, value); @@ -85,18 +85,18 @@ static int set_option(notification_t *n, const char *option, if (option[0] != '\0' && option[1] == ':') { /* Refuse empty key */ if (option[2] == '\0') - return (1); + return 1; if (option[0] == 's') return plugin_notification_meta_add_string(n, option + 2, value); else - return (1); + return 1; } if (strcasecmp("severity", option) == 0) - return (set_option_severity(n, value)); + return set_option_severity(n, value); else if (strcasecmp("time", option) == 0) - return (set_option_time(n, value)); + return set_option_time(n, value); else if (strcasecmp("message", option) == 0) sstrncpy(n->message, value, sizeof(n->message)); else if (strcasecmp("host", option) == 0) @@ -110,9 +110,9 @@ static int set_option(notification_t *n, const char *option, else if (strcasecmp("type_instance", option) == 0) sstrncpy(n->type_instance, value, sizeof(n->type_instance)); else - return (1); + return 1; - return (0); + return 0; } /* int set_option */ int handle_putnotif(FILE *fh, char *buffer) { @@ -121,7 +121,7 @@ int handle_putnotif(FILE *fh, char *buffer) { int status; if ((fh == NULL) || (buffer == NULL)) - return (-1); + return -1; DEBUG("utils_cmd_putnotif: handle_putnotif (fh = %p, buffer = %s);", (void *)fh, buffer); @@ -130,13 +130,13 @@ int handle_putnotif(FILE *fh, char *buffer) { status = parse_string(&buffer, &command); if (status != 0) { print_to_socket(fh, "-1 Cannot parse command.\n"); - return (-1); + return -1; } assert(command != NULL); if (strcasecmp("PUTNOTIF", command) != 0) { print_to_socket(fh, "-1 Unexpected command: `%s'.\n", command); - return (-1); + return -1; } status = 0; @@ -178,7 +178,5 @@ int handle_putnotif(FILE *fh, char *buffer) { print_to_socket(fh, "0 Success\n"); } - return (0); + return 0; } /* int handle_putnotif */ - -/* vim: set shiftwidth=2 softtabstop=2 tabstop=8 : */ diff --git a/src/utils_cmd_putnotif.h b/src/utils_cmd_putnotif.h index af0b93e0..7ad0f1a5 100644 --- a/src/utils_cmd_putnotif.h +++ b/src/utils_cmd_putnotif.h @@ -31,6 +31,4 @@ int handle_putnotif(FILE *fh, char *buffer); -/* vim: set shiftwidth=2 softtabstop=2 tabstop=8 : */ - #endif /* UTILS_CMD_PUTNOTIF_H */ diff --git a/src/utils_cmd_putval.c b/src/utils_cmd_putval.c index f1fe6d76..718425b0 100644 --- a/src/utils_cmd_putval.c +++ b/src/utils_cmd_putval.c @@ -37,7 +37,7 @@ static int set_option(value_list_t *vl, const char *key, const char *value) { if ((vl == NULL) || (key == NULL) || (value == NULL)) - return (-1); + return -1; if (strcasecmp("interval", key) == 0) { double tmp; @@ -50,9 +50,9 @@ static int set_option(value_list_t *vl, const char *key, const char *value) { if ((errno == 0) && (endptr != NULL) && (endptr != value) && (tmp > 0.0)) vl->interval = DOUBLE_TO_CDTIME_T(tmp); } else - return (1); + return 1; - return (0); + return 0; } /* int set_option */ /* @@ -81,12 +81,12 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, if ((ret_putval == NULL) || (opts == NULL)) { errno = EINVAL; cmd_error(CMD_ERROR, err, "Invalid arguments to cmd_parse_putval."); - return (CMD_ERROR); + return CMD_ERROR; } if (argc < 2) { cmd_error(CMD_PARSE_ERROR, err, "Missing identifier and/or value-list."); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } identifier = argv[0]; @@ -103,7 +103,7 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, cmd_error(CMD_PARSE_ERROR, err, "Cannot parse identifier `%s'.", identifier_copy); sfree(identifier_copy); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } if ((strlen(hostname) >= sizeof(vl.host)) || @@ -114,7 +114,7 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, (strlen(type_instance) >= sizeof(vl.type_instance)))) { cmd_error(CMD_PARSE_ERROR, err, "Identifier too long."); sfree(identifier_copy); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } sstrncpy(vl.host, hostname, sizeof(vl.host)); @@ -129,7 +129,7 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, if (ds == NULL) { cmd_error(CMD_PARSE_ERROR, err, "1 Type `%s' isn't defined.", type); sfree(identifier_copy); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } hostname = NULL; @@ -143,7 +143,7 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, cmd_error(CMD_ERROR, err, "malloc failed."); cmd_destroy_putval(ret_putval); sfree(vl.values); - return (CMD_ERROR); + return CMD_ERROR; } /* All the remaining fields are part of the option list. */ @@ -210,7 +210,7 @@ cmd_status_t cmd_parse_putval(size_t argc, char **argv, if (result != CMD_OK) cmd_destroy_putval(ret_putval); - return (result); + return result; } /* cmd_status_t cmd_parse_putval */ void cmd_destroy_putval(cmd_putval_t *putval) { @@ -239,12 +239,12 @@ cmd_status_t cmd_handle_putval(FILE *fh, char *buffer) { (void *)fh, buffer); if ((status = cmd_parse(buffer, &cmd, NULL, &err)) != CMD_OK) - return (status); + return status; if (cmd.type != CMD_PUTVAL) { cmd_error(CMD_UNKNOWN_COMMAND, &err, "Unexpected command: `%s'.", CMD_TO_STRING(cmd.type)); cmd_destroy(&cmd); - return (CMD_UNKNOWN_COMMAND); + return CMD_UNKNOWN_COMMAND; } for (size_t i = 0; i < cmd.cmd.putval.vl_num; ++i) @@ -256,7 +256,7 @@ cmd_status_t cmd_handle_putval(FILE *fh, char *buffer) { (cmd.cmd.putval.vl_num == 1) ? "value has" : "values have"); cmd_destroy(&cmd); - return (CMD_OK); + return CMD_OK; } /* int cmd_handle_putval */ int cmd_create_putval(char *ret, size_t ret_len, /* {{{ */ @@ -267,13 +267,13 @@ int cmd_create_putval(char *ret, size_t ret_len, /* {{{ */ status = FORMAT_VL(buffer_ident, sizeof(buffer_ident), vl); if (status != 0) - return (status); + return status; escape_string(buffer_ident, sizeof(buffer_ident)); status = format_values(buffer_values, sizeof(buffer_values), ds, vl, /* store rates = */ 0); if (status != 0) - return (status); + return status; escape_string(buffer_values, sizeof(buffer_values)); ssnprintf(ret, ret_len, "PUTVAL %s interval=%.3f %s", buffer_ident, @@ -281,5 +281,5 @@ int cmd_create_putval(char *ret, size_t ret_len, /* {{{ */ : CDTIME_T_TO_DOUBLE(plugin_get_interval()), buffer_values); - return (0); + return 0; } /* }}} int cmd_create_putval */ diff --git a/src/utils_cmds.c b/src/utils_cmds.c index 3ea7c9d0..97702251 100644 --- a/src/utils_cmds.c +++ b/src/utils_cmds.c @@ -72,7 +72,7 @@ static cmd_status_t cmd_split(char *buffer, size_t *ret_len, char ***ret_fields, fields = malloc((estimate + 1) * sizeof(*fields)); if (fields == NULL) { cmd_error(CMD_ERROR, err, "malloc failed."); - return (CMD_ERROR); + return CMD_ERROR; } #define END_FIELD() \ @@ -130,7 +130,7 @@ static cmd_status_t cmd_split(char *buffer, size_t *ret_len, char ***ret_fields, if (string[1] == '\0') { free(fields); cmd_error(CMD_PARSE_ERROR, err, "Backslash at end of string."); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } /* un-escape the next character; skip backslash */ @@ -148,7 +148,7 @@ static cmd_status_t cmd_split(char *buffer, size_t *ret_len, char ***ret_fields, if (in_quotes) { free(fields); cmd_error(CMD_PARSE_ERROR, err, "Unterminated quoted string."); - return (CMD_PARSE_ERROR); + return CMD_PARSE_ERROR; } #undef NEW_FIELD @@ -161,7 +161,7 @@ static cmd_status_t cmd_split(char *buffer, size_t *ret_len, char ***ret_fields, *ret_fields = fields; else free(fields); - return (CMD_OK); + return CMD_OK; } /* int cmd_split */ /* @@ -215,12 +215,12 @@ cmd_status_t cmd_parsev(size_t argc, char **argv, cmd_t *ret_cmd, } else { ret_cmd->type = CMD_UNKNOWN; cmd_error(CMD_UNKNOWN_COMMAND, err, "Unknown command `%s'.", command); - return (CMD_UNKNOWN_COMMAND); + return CMD_UNKNOWN_COMMAND; } if (status != CMD_OK) ret_cmd->type = CMD_UNKNOWN; - return (status); + return status; } /* cmd_status_t cmd_parsev */ cmd_status_t cmd_parse(char *buffer, cmd_t *ret_cmd, const cmd_options_t *opts, @@ -234,7 +234,7 @@ cmd_status_t cmd_parse(char *buffer, cmd_t *ret_cmd, const cmd_options_t *opts, status = cmd_parsev(fields_num, fields, ret_cmd, opts, err); free(fields); - return (status); + return status; } /* cmd_status_t cmd_parse */ void cmd_destroy(cmd_t *cmd) { @@ -267,7 +267,7 @@ cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value, if (field == NULL) { errno = EINVAL; cmd_error(CMD_ERROR, err, "Invalid argument to cmd_parse_option."); - return (CMD_ERROR); + return CMD_ERROR; } key = value = field; @@ -276,7 +276,7 @@ cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value, value++; if ((value[0] != '=') || (value == key)) { /* Whether this is a fatal error is up to the caller. */ - return (CMD_NO_OPTION); + return CMD_NO_OPTION; } *value = '\0'; value++; @@ -286,7 +286,7 @@ cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value, if (ret_value != NULL) *ret_value = value; - return (CMD_OK); + return CMD_OK; } /* cmd_status_t cmd_parse_option */ void cmd_error_fh(void *ud, cmd_status_t status, const char *format, @@ -309,5 +309,3 @@ void cmd_error_fh(void *ud, cmd_status_t status, const char *format, fflush(fh); } /* void cmd_error_fh */ - -/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ diff --git a/src/utils_cmds_test.c b/src/utils_cmds_test.c index b540146d..bb35ce8c 100644 --- a/src/utils_cmds_test.c +++ b/src/utils_cmds_test.c @@ -215,7 +215,7 @@ DEF_TEST(parse) { free(input); } - return (test_result); + return test_result; } int main(int argc, char **argv) { diff --git a/src/utils_db_query.c b/src/utils_db_query.c index 9a582272..41f40d9c 100644 --- a/src/utils_db_query.c +++ b/src/utils_db_query.c @@ -100,20 +100,20 @@ static int udb_config_set_string(char **ret_string, /* {{{ */ WARNING("db query utils: The `%s' config option " "needs exactly one string argument.", ci->key); - return (-1); + return -1; } string = strdup(ci->values[0].value.string); if (string == NULL) { ERROR("db query utils: strdup failed."); - return (-1); + return -1; } if (*ret_string != NULL) free(*ret_string); *ret_string = string; - return (0); + return 0; } /* }}} int udb_config_set_string */ static int udb_config_add_string(char ***ret_array, /* {{{ */ @@ -125,7 +125,7 @@ static int udb_config_add_string(char ***ret_array, /* {{{ */ WARNING("db query utils: The `%s' config option " "needs at least one argument.", ci->key); - return (-1); + return -1; } for (int i = 0; i < ci->values_num; i++) { @@ -133,7 +133,7 @@ static int udb_config_add_string(char ***ret_array, /* {{{ */ WARNING("db query utils: Argument %i to the `%s' option " "is not a string.", i + 1, ci->key); - return (-1); + return -1; } } @@ -141,7 +141,7 @@ static int udb_config_add_string(char ***ret_array, /* {{{ */ array = realloc(*ret_array, sizeof(char *) * (array_len + ci->values_num)); if (array == NULL) { ERROR("db query utils: realloc failed."); - return (-1); + return -1; } *ret_array = array; @@ -150,13 +150,13 @@ static int udb_config_add_string(char ***ret_array, /* {{{ */ if (array[array_len] == NULL) { ERROR("db query utils: strdup failed."); *ret_array_len = array_len; - return (-1); + return -1; } array_len++; } *ret_array_len = array_len; - return (0); + return 0; } /* }}} int udb_config_add_string */ static int udb_config_set_uint(unsigned int *ret_value, /* {{{ */ @@ -167,15 +167,15 @@ static int udb_config_set_uint(unsigned int *ret_value, /* {{{ */ WARNING("db query utils: The `%s' config option " "needs exactly one numeric argument.", ci->key); - return (-1); + return -1; } tmp = ci->values[0].value.number; if ((tmp < 0.0) || (tmp > ((double)UINT_MAX))) - return (-ERANGE); + return -ERANGE; *ret_value = (unsigned int)(tmp + .5); - return (0); + return 0; } /* }}} int udb_config_set_uint */ /* @@ -195,7 +195,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ vl.values = calloc(r->values_num, sizeof(*vl.values)); if (vl.values == NULL) { ERROR("db query utils: calloc failed."); - return (-1); + return -1; } vl.values_len = r_area->ds->ds_num; @@ -207,7 +207,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ value_str, DS_TYPE_TO_STRING(r_area->ds->ds[i].type)); errno = EINVAL; free(vl.values); - return (-1); + return -1; } } @@ -241,7 +241,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ ERROR( "udb_result_submit: creating type_instance failed with status %d.", status); - return (status); + return status; } } else { char tmp[DATA_MAX_NAME_LEN]; @@ -252,7 +252,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ ERROR( "udb_result_submit: creating type_instance failed with status %d.", status); - return (status); + return status; } tmp[sizeof(tmp) - 1] = 0; @@ -268,7 +268,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ vl.meta = meta_data_create(); if (vl.meta == NULL) { ERROR("db query utils:: meta_data_create failed."); - return (-ENOMEM); + return -ENOMEM; } for (size_t i = 0; i < r->metadata_num; i++) { @@ -278,7 +278,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ ERROR("db query utils:: meta_data_add_string failed."); meta_data_destroy(vl.meta); vl.meta = NULL; - return (status); + return status; } } } @@ -291,7 +291,7 @@ static int udb_result_submit(udb_result_t *r, /* {{{ */ vl.meta = NULL; } sfree(vl.values); - return (0); + return 0; } /* }}} void udb_result_submit */ static void udb_result_finish_result(udb_result_t const *r, /* {{{ */ @@ -334,7 +334,7 @@ static int udb_result_prepare_result(udb_result_t const *r, /* {{{ */ udb_result_preparation_area_t *prep_area, char **column_names, size_t column_num) { if ((r == NULL) || (prep_area == NULL)) - return (-EINVAL); + return -EINVAL; #define BAIL_OUT(status) \ prep_area->ds = NULL; \ @@ -472,7 +472,7 @@ static int udb_result_prepare_result(udb_result_t const *r, /* {{{ */ } /* }}} for (i = 0; i < r->metadata_num; i++) */ #undef BAIL_OUT - return (0); + return 0; } /* }}} int udb_result_prepare_result */ static void udb_result_free(udb_result_t *r) /* {{{ */ @@ -514,7 +514,7 @@ static int udb_result_create(const char *query_name, /* {{{ */ r = calloc(1, sizeof(*r)); if (r == NULL) { ERROR("db query utils: calloc failed."); - return (-1); + return -1; } r->type = NULL; r->instance_prefix = NULL; @@ -568,7 +568,7 @@ static int udb_result_create(const char *query_name, /* {{{ */ if (status != 0) { udb_result_free(r); - return (-1); + return -1; } /* If all went well, add this result to the list of results. */ @@ -584,7 +584,7 @@ static int udb_result_create(const char *query_name, /* {{{ */ last->next = r; } - return (0); + return 0; } /* }}} int udb_result_create */ /* @@ -617,20 +617,20 @@ int udb_query_create(udb_query_t ***ret_query_list, /* {{{ */ int status; if ((ret_query_list == NULL) || (ret_query_list_len == NULL)) - return (-EINVAL); + return -EINVAL; query_list = *ret_query_list; query_list_len = *ret_query_list_len; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("db query utils: The `Query' block " "needs exactly one string argument."); - return (-1); + return -1; } q = calloc(1, sizeof(*q)); if (q == NULL) { ERROR("db query utils: calloc failed."); - return (-1); + return -1; } q->min_version = 0; q->max_version = UINT_MAX; @@ -641,7 +641,7 @@ int udb_query_create(udb_query_t ***ret_query_list, /* {{{ */ status = udb_config_set_string(&q->name, ci); if (status != 0) { sfree(q); - return (status); + return status; } /* Fill the `udb_query_t' structure.. */ @@ -708,13 +708,13 @@ int udb_query_create(udb_query_t ***ret_query_list, /* {{{ */ if (status != 0) { udb_query_free_one(q); - return (-1); + return -1; } *ret_query_list = query_list; *ret_query_list_len = query_list_len; - return (0); + return 0; } /* }}} int udb_query_create */ void udb_query_free(udb_query_t **query_list, size_t query_list_len) /* {{{ */ @@ -739,7 +739,7 @@ int udb_query_pick_from_list_by_name(const char *name, /* {{{ */ (dst_list_len == NULL)) { ERROR("db query utils: udb_query_pick_from_list_by_name: " "Invalid argument."); - return (-EINVAL); + return -EINVAL; } num_added = 0; @@ -754,7 +754,7 @@ int udb_query_pick_from_list_by_name(const char *name, /* {{{ */ tmp_list = realloc(*dst_list, (tmp_list_len + 1) * sizeof(udb_query_t *)); if (tmp_list == NULL) { ERROR("db query utils: realloc failed."); - return (-ENOMEM); + return -ENOMEM; } tmp_list[tmp_list_len] = src_list[i]; @@ -770,12 +770,12 @@ int udb_query_pick_from_list_by_name(const char *name, /* {{{ */ ERROR("db query utils: Cannot find query `%s'. Make sure the " "block is above the database definition!", name); - return (-ENOENT); + return -ENOENT; } else { DEBUG("db query utils: Added %i versions of query `%s'.", num_added, name); } - return (0); + return 0; } /* }}} int udb_query_pick_from_list_by_name */ int udb_query_pick_from_list(oconfig_item_t *ci, /* {{{ */ @@ -787,35 +787,35 @@ int udb_query_pick_from_list(oconfig_item_t *ci, /* {{{ */ (dst_list_len == NULL)) { ERROR("db query utils: udb_query_pick_from_list: " "Invalid argument."); - return (-EINVAL); + return -EINVAL; } if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { ERROR("db query utils: The `%s' config option " "needs exactly one string argument.", ci->key); - return (-1); + return -1; } name = ci->values[0].value.string; - return (udb_query_pick_from_list_by_name(name, src_list, src_list_len, - dst_list, dst_list_len)); + return udb_query_pick_from_list_by_name(name, src_list, src_list_len, + dst_list, dst_list_len); } /* }}} int udb_query_pick_from_list */ const char *udb_query_get_name(udb_query_t *q) /* {{{ */ { if (q == NULL) - return (NULL); + return NULL; - return (q->name); + return q->name; } /* }}} const char *udb_query_get_name */ const char *udb_query_get_statement(udb_query_t *q) /* {{{ */ { if (q == NULL) - return (NULL); + return NULL; - return (q->statement); + return q->statement; } /* }}} const char *udb_query_get_statement */ void udb_query_set_user_data(udb_query_t *q, void *user_data) /* {{{ */ @@ -829,20 +829,20 @@ void udb_query_set_user_data(udb_query_t *q, void *user_data) /* {{{ */ void *udb_query_get_user_data(udb_query_t *q) /* {{{ */ { if (q == NULL) - return (NULL); + return NULL; - return (q->user_data); + return q->user_data; } /* }}} void *udb_query_get_user_data */ int udb_query_check_version(udb_query_t *q, unsigned int version) /* {{{ */ { if (q == NULL) - return (-EINVAL); + return -EINVAL; if ((version < q->min_version) || (version > q->max_version)) - return (0); + return 0; - return (1); + return 1; } /* }}} int udb_query_check_version */ void udb_query_finish_result(udb_query_t const *q, /* {{{ */ @@ -878,14 +878,14 @@ int udb_query_handle_result(udb_query_t const *q, /* {{{ */ int status; if ((q == NULL) || (prep_area == NULL)) - return (-EINVAL); + return -EINVAL; if ((prep_area->column_num < 1) || (prep_area->host == NULL) || (prep_area->plugin == NULL) || (prep_area->db_name == NULL)) { ERROR("db query utils: Query `%s': Query is not prepared; " "can't handle result.", q->name); - return (-EINVAL); + return -EINVAL; } #if defined(COLLECT_DEBUG) && COLLECT_DEBUG /* {{{ */ @@ -910,10 +910,10 @@ int udb_query_handle_result(udb_query_t const *q, /* {{{ */ ERROR("db query utils: udb_query_handle_result (%s, %s): " "All results failed.", prep_area->db_name, q->name); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int udb_query_handle_result */ int udb_query_prepare_result(udb_query_t const *q, /* {{{ */ @@ -926,7 +926,7 @@ int udb_query_prepare_result(udb_query_t const *q, /* {{{ */ int status; if ((q == NULL) || (prep_area == NULL)) - return (-EINVAL); + return -EINVAL; udb_query_finish_result(q, prep_area); @@ -942,7 +942,7 @@ int udb_query_prepare_result(udb_query_t const *q, /* {{{ */ ERROR("db query utils: Query `%s': Prepare failed: Out of memory.", q->name); udb_query_finish_result(q, prep_area); - return (-ENOMEM); + return -ENOMEM; } #if defined(COLLECT_DEBUG) && COLLECT_DEBUG @@ -971,7 +971,7 @@ int udb_query_prepare_result(udb_query_t const *q, /* {{{ */ "Column `%s' from `PluginInstanceFrom' could not be found.", q->plugin_instance_from); udb_query_finish_result(q, prep_area); - return (-ENOENT); + return -ENOENT; } } /* }}} */ @@ -983,17 +983,17 @@ int udb_query_prepare_result(udb_query_t const *q, /* {{{ */ "preparation areas.", q->name); udb_query_finish_result(q, prep_area); - return (-EINVAL); + return -EINVAL; } status = udb_result_prepare_result(r, r_area, column_names, column_num); if (status != 0) { udb_query_finish_result(q, prep_area); - return (status); + return status; } } - return (0); + return 0; } /* }}} int udb_query_prepare_result */ udb_query_preparation_area_t * @@ -1029,7 +1029,7 @@ udb_query_allocate_preparation_area(udb_query_t *q) /* {{{ */ next_r_area = &r_area->next; } - return (q_area); + return q_area; } /* }}} udb_query_preparation_area_t *udb_query_allocate_preparation_area */ void udb_query_delete_preparation_area( @@ -1059,5 +1059,3 @@ void udb_query_delete_preparation_area( free(q_area); } /* }}} void udb_query_delete_preparation_area */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_db_query.h b/src/utils_db_query.h index 8f069185..4d6129a1 100644 --- a/src/utils_db_query.h +++ b/src/utils_db_query.h @@ -83,4 +83,3 @@ udb_query_allocate_preparation_area(udb_query_t *q); void udb_query_delete_preparation_area(udb_query_preparation_area_t *q_area); #endif /* UTILS_DB_QUERY_H */ -/* vim: set sw=2 sts=2 et : */ diff --git a/src/utils_dns.c b/src/utils_dns.c index a4a5784b..37fa930f 100644 --- a/src/utils_dns.c +++ b/src/utils_dns.c @@ -185,16 +185,16 @@ static int cmp_in6_addr(const struct in6_addr *a, const struct in6_addr *b) { break; if (i >= 16) - return (0); + return 0; - return (a->s6_addr[i] > b->s6_addr[i] ? 1 : -1); + return a->s6_addr[i] > b->s6_addr[i] ? 1 : -1; } /* int cmp_addrinfo */ static inline int ignore_list_match(const struct in6_addr *addr) { for (ip_list_t *ptr = IgnoreList; ptr != NULL; ptr = ptr->next) if (cmp_in6_addr(addr, &ptr->addr) == 0) - return (1); - return (0); + return 1; + return 0; } /* int ignore_list_match */ static void ignore_list_add(const struct in6_addr *addr) { @@ -416,7 +416,7 @@ static int handle_ipv6(struct ip6_hdr *ipv6, int len) { uint16_t payload_len; if (0 > len) - return (0); + return 0; offset = sizeof(struct ip6_hdr); nexthdr = ipv6->ip6_nxt; @@ -424,7 +424,7 @@ static int handle_ipv6(struct ip6_hdr *ipv6, int len) { payload_len = ntohs(ipv6->ip6_plen); if (ignore_list_match(&c_src_addr)) - return (0); + return 0; /* Parse extension headers. This only handles the standard headers, as * defined in RFC 2460, correctly. Fragments are discarded. */ @@ -440,11 +440,11 @@ static int handle_ipv6(struct ip6_hdr *ipv6, int len) { /* Catch broken packets */ if ((offset + sizeof(struct ip6_ext)) > (unsigned int)len) - return (0); + return 0; /* Cannot handle fragments. */ if (IPPROTO_FRAGMENT == nexthdr) - return (0); + return 0; memcpy(&ext_hdr, (char *)ipv6 + offset, sizeof(struct ip6_ext)); nexthdr = ext_hdr.ip6e_nxt; @@ -452,7 +452,7 @@ static int handle_ipv6(struct ip6_hdr *ipv6, int len) { /* This header is longer than the packets payload.. WTF? */ if (ext_hdr_len > payload_len) - return (0); + return 0; offset += ext_hdr_len; payload_len -= ext_hdr_len; @@ -461,23 +461,23 @@ static int handle_ipv6(struct ip6_hdr *ipv6, int len) { /* Catch broken and empty packets */ if (((offset + payload_len) > (unsigned int)len) || (payload_len == 0) || (payload_len > PCAP_SNAPLEN)) - return (0); + return 0; if (IPPROTO_UDP != nexthdr) - return (0); + return 0; memcpy(buf, (char *)ipv6 + offset, payload_len); if (handle_udp((struct udphdr *)buf, payload_len) == 0) - return (0); + return 0; - return (1); /* Success */ + return 1; /* Success */ } /* int handle_ipv6 */ /* #endif HAVE_IPV6 */ #else /* if !HAVE_IPV6 */ static int handle_ipv6(__attribute__((unused)) void *pkg, __attribute__((unused)) int len) { - return (0); + return 0; } #endif /* !HAVE_IPV6 */ @@ -488,14 +488,14 @@ static int handle_ip(const struct ip *ip, int len) { struct in6_addr c_dst_addr; if (ip->ip_v == 6) - return (handle_ipv6((void *)ip, len)); + return handle_ipv6((void *)ip, len); in6_addr_from_buffer(&c_src_addr, &ip->ip_src.s_addr, sizeof(ip->ip_src.s_addr), AF_INET); in6_addr_from_buffer(&c_dst_addr, &ip->ip_dst.s_addr, sizeof(ip->ip_dst.s_addr), AF_INET); if (ignore_list_match(&c_src_addr)) - return (0); + return 0; if (IPPROTO_UDP != ip->ip_p) return 0; memcpy(buf, ((char *)ip) + offset, len - offset); @@ -577,7 +577,7 @@ static int handle_ether(const u_char *pkt, int len) { return 0; memcpy(buf, pkt, len); if (ETHERTYPE_IPV6 == etype) - return (handle_ipv6((void *)buf, len)); + return handle_ipv6((void *)buf, len); else return handle_ip((struct ip *)buf, len); } @@ -594,7 +594,7 @@ static int handle_linux_sll(const u_char *pkt, int len) { uint16_t etype; if ((0 > len) || ((unsigned int)len < sizeof(struct sll_header))) - return (0); + return 0; hdr = (struct sll_header *)pkt; pkt = (u_char *)(hdr + 1); @@ -606,7 +606,7 @@ static int handle_linux_sll(const u_char *pkt, int len) { return 0; if (ETHERTYPE_IPV6 == etype) - return (handle_ipv6((void *)pkt, len)); + return handle_ipv6((void *)pkt, len); else return handle_ip((struct ip *)pkt, len); } @@ -669,251 +669,251 @@ const char *qtype_str(int t) { switch (t) { #if (defined(__NAMESER)) && (__NAMESER >= 19991001) case ns_t_a: - return ("A"); + return "A"; case ns_t_ns: - return ("NS"); + return "NS"; case ns_t_md: - return ("MD"); + return "MD"; case ns_t_mf: - return ("MF"); + return "MF"; case ns_t_cname: - return ("CNAME"); + return "CNAME"; case ns_t_soa: - return ("SOA"); + return "SOA"; case ns_t_mb: - return ("MB"); + return "MB"; case ns_t_mg: - return ("MG"); + return "MG"; case ns_t_mr: - return ("MR"); + return "MR"; case ns_t_null: - return ("NULL"); + return "NULL"; case ns_t_wks: - return ("WKS"); + return "WKS"; case ns_t_ptr: - return ("PTR"); + return "PTR"; case ns_t_hinfo: - return ("HINFO"); + return "HINFO"; case ns_t_minfo: - return ("MINFO"); + return "MINFO"; case ns_t_mx: - return ("MX"); + return "MX"; case ns_t_txt: - return ("TXT"); + return "TXT"; case ns_t_rp: - return ("RP"); + return "RP"; case ns_t_afsdb: - return ("AFSDB"); + return "AFSDB"; case ns_t_x25: - return ("X25"); + return "X25"; case ns_t_isdn: - return ("ISDN"); + return "ISDN"; case ns_t_rt: - return ("RT"); + return "RT"; case ns_t_nsap: - return ("NSAP"); + return "NSAP"; case ns_t_nsap_ptr: - return ("NSAP-PTR"); + return "NSAP-PTR"; case ns_t_sig: - return ("SIG"); + return "SIG"; case ns_t_key: - return ("KEY"); + return "KEY"; case ns_t_px: - return ("PX"); + return "PX"; case ns_t_gpos: - return ("GPOS"); + return "GPOS"; case ns_t_aaaa: - return ("AAAA"); + return "AAAA"; case ns_t_loc: - return ("LOC"); + return "LOC"; case ns_t_nxt: - return ("NXT"); + return "NXT"; case ns_t_eid: - return ("EID"); + return "EID"; case ns_t_nimloc: - return ("NIMLOC"); + return "NIMLOC"; case ns_t_srv: - return ("SRV"); + return "SRV"; case ns_t_atma: - return ("ATMA"); + return "ATMA"; case ns_t_naptr: - return ("NAPTR"); + return "NAPTR"; case ns_t_opt: - return ("OPT"); + return "OPT"; #if __NAMESER >= 19991006 case ns_t_kx: - return ("KX"); + return "KX"; case ns_t_cert: - return ("CERT"); + return "CERT"; case ns_t_a6: - return ("A6"); + return "A6"; case ns_t_dname: - return ("DNAME"); + return "DNAME"; case ns_t_sink: - return ("SINK"); + return "SINK"; case ns_t_tsig: - return ("TSIG"); + return "TSIG"; #endif #if __NAMESER >= 20090302 case ns_t_apl: - return ("APL"); + return "APL"; case ns_t_ds: - return ("DS"); + return "DS"; case ns_t_sshfp: - return ("SSHFP"); + return "SSHFP"; case ns_t_ipseckey: - return ("IPSECKEY"); + return "IPSECKEY"; case ns_t_rrsig: - return ("RRSIG"); + return "RRSIG"; case ns_t_nsec: - return ("NSEC"); + return "NSEC"; case ns_t_dnskey: - return ("DNSKEY"); + return "DNSKEY"; case ns_t_dhcid: - return ("DHCID"); + return "DHCID"; case ns_t_nsec3: - return ("NSEC3"); + return "NSEC3"; case ns_t_nsec3param: - return ("NSEC3PARAM"); + return "NSEC3PARAM"; case ns_t_hip: - return ("HIP"); + return "HIP"; case ns_t_spf: - return ("SPF"); + return "SPF"; case ns_t_ixfr: - return ("IXFR"); + return "IXFR"; #endif case ns_t_axfr: - return ("AXFR"); + return "AXFR"; case ns_t_mailb: - return ("MAILB"); + return "MAILB"; case ns_t_maila: - return ("MAILA"); + return "MAILA"; case ns_t_any: - return ("ANY"); + return "ANY"; #if __NAMESER >= 19991006 case ns_t_zxfr: - return ("ZXFR"); + return "ZXFR"; #endif #if __NAMESER >= 20090302 case ns_t_dlv: - return ("DLV"); + return "DLV"; #endif /* #endif __NAMESER >= 19991001 */ #elif (defined(__BIND)) && (__BIND >= 19950621) case T_A: - return ("A"); /* 1 ... */ + return "A"; /* 1 ... */ case T_NS: - return ("NS"); + return "NS"; case T_MD: - return ("MD"); + return "MD"; case T_MF: - return ("MF"); + return "MF"; case T_CNAME: - return ("CNAME"); + return "CNAME"; case T_SOA: - return ("SOA"); + return "SOA"; case T_MB: - return ("MB"); + return "MB"; case T_MG: - return ("MG"); + return "MG"; case T_MR: - return ("MR"); + return "MR"; case T_NULL: - return ("NULL"); + return "NULL"; case T_WKS: - return ("WKS"); + return "WKS"; case T_PTR: - return ("PTR"); + return "PTR"; case T_HINFO: - return ("HINFO"); + return "HINFO"; case T_MINFO: - return ("MINFO"); + return "MINFO"; case T_MX: - return ("MX"); + return "MX"; case T_TXT: - return ("TXT"); + return "TXT"; case T_RP: - return ("RP"); + return "RP"; case T_AFSDB: - return ("AFSDB"); + return "AFSDB"; case T_X25: - return ("X25"); + return "X25"; case T_ISDN: - return ("ISDN"); + return "ISDN"; case T_RT: - return ("RT"); + return "RT"; case T_NSAP: - return ("NSAP"); + return "NSAP"; case T_NSAP_PTR: - return ("NSAP_PTR"); + return "NSAP_PTR"; case T_SIG: - return ("SIG"); + return "SIG"; case T_KEY: - return ("KEY"); + return "KEY"; case T_PX: - return ("PX"); + return "PX"; case T_GPOS: - return ("GPOS"); + return "GPOS"; case T_AAAA: - return ("AAAA"); + return "AAAA"; case T_LOC: - return ("LOC"); + return "LOC"; case T_NXT: - return ("NXT"); + return "NXT"; case T_EID: - return ("EID"); + return "EID"; case T_NIMLOC: - return ("NIMLOC"); + return "NIMLOC"; case T_SRV: - return ("SRV"); + return "SRV"; case T_ATMA: - return ("ATMA"); + return "ATMA"; case T_NAPTR: - return ("NAPTR"); /* ... 35 */ + return "NAPTR"; /* ... 35 */ #if (__BIND >= 19960801) case T_KX: - return ("KX"); /* 36 ... */ + return "KX"; /* 36 ... */ case T_CERT: - return ("CERT"); + return "CERT"; case T_A6: - return ("A6"); + return "A6"; case T_DNAME: - return ("DNAME"); + return "DNAME"; case T_SINK: - return ("SINK"); + return "SINK"; case T_OPT: - return ("OPT"); + return "OPT"; case T_APL: - return ("APL"); + return "APL"; case T_DS: - return ("DS"); + return "DS"; case T_SSHFP: - return ("SSHFP"); + return "SSHFP"; case T_RRSIG: - return ("RRSIG"); + return "RRSIG"; case T_NSEC: - return ("NSEC"); + return "NSEC"; case T_DNSKEY: - return ("DNSKEY"); /* ... 48 */ + return "DNSKEY"; /* ... 48 */ case T_TKEY: - return ("TKEY"); /* 249 */ + return "TKEY"; /* 249 */ #endif /* __BIND >= 19960801 */ case T_TSIG: - return ("TSIG"); /* 250 ... */ + return "TSIG"; /* 250 ... */ case T_IXFR: - return ("IXFR"); + return "IXFR"; case T_AXFR: - return ("AXFR"); + return "AXFR"; case T_MAILB: - return ("MAILB"); + return "MAILB"; case T_MAILA: - return ("MAILA"); + return "MAILA"; case T_ANY: - return ("ANY"); /* ... 255 */ + return "ANY"; /* ... 255 */ #endif /* __BIND >= 19950621 */ default: ssnprintf(buf, sizeof(buf), "#%i", t); - return (buf); + return buf; } /* switch (t) */ } @@ -941,65 +941,65 @@ const char *rcode_str(int rcode) { switch (rcode) { #if (defined(__NAMESER)) && (__NAMESER >= 19991006) case ns_r_noerror: - return ("NOERROR"); + return "NOERROR"; case ns_r_formerr: - return ("FORMERR"); + return "FORMERR"; case ns_r_servfail: - return ("SERVFAIL"); + return "SERVFAIL"; case ns_r_nxdomain: - return ("NXDOMAIN"); + return "NXDOMAIN"; case ns_r_notimpl: - return ("NOTIMPL"); + return "NOTIMPL"; case ns_r_refused: - return ("REFUSED"); + return "REFUSED"; case ns_r_yxdomain: - return ("YXDOMAIN"); + return "YXDOMAIN"; case ns_r_yxrrset: - return ("YXRRSET"); + return "YXRRSET"; case ns_r_nxrrset: - return ("NXRRSET"); + return "NXRRSET"; case ns_r_notauth: - return ("NOTAUTH"); + return "NOTAUTH"; case ns_r_notzone: - return ("NOTZONE"); + return "NOTZONE"; case ns_r_max: - return ("MAX"); + return "MAX"; case ns_r_badsig: - return ("BADSIG"); + return "BADSIG"; case ns_r_badkey: - return ("BADKEY"); + return "BADKEY"; case ns_r_badtime: - return ("BADTIME"); + return "BADTIME"; /* #endif __NAMESER >= 19991006 */ #elif (defined(__BIND)) && (__BIND >= 19950621) case NOERROR: - return ("NOERROR"); + return "NOERROR"; case FORMERR: - return ("FORMERR"); + return "FORMERR"; case SERVFAIL: - return ("SERVFAIL"); + return "SERVFAIL"; case NXDOMAIN: - return ("NXDOMAIN"); + return "NXDOMAIN"; case NOTIMP: - return ("NOTIMP"); + return "NOTIMP"; case REFUSED: - return ("REFUSED"); + return "REFUSED"; #if defined(YXDOMAIN) && defined(NXRRSET) case YXDOMAIN: - return ("YXDOMAIN"); + return "YXDOMAIN"; case YXRRSET: - return ("YXRRSET"); + return "YXRRSET"; case NXRRSET: - return ("NXRRSET"); + return "NXRRSET"; case NOTAUTH: - return ("NOTAUTH"); + return "NOTAUTH"; case NOTZONE: - return ("NOTZONE"); + return "NOTZONE"; #endif /* RFC2136 rcodes */ #endif /* __BIND >= 19950621 */ default: ssnprintf(buf, sizeof(buf), "RCode%i", rcode); - return (buf); + return buf; } } /* const char *rcode_str (int rcode) */ @@ -1169,6 +1169,3 @@ main(int argc, char *argv[]) return 0; } /* static int main(int argc, char *argv[]) */ #endif -/* - * vim:shiftwidth=4:tabstop=8:softtabstop=4 - */ diff --git a/src/utils_dpdk.c b/src/utils_dpdk.c new file mode 100644 index 00000000..3a30438d --- /dev/null +++ b/src/utils_dpdk.c @@ -0,0 +1,872 @@ +/* + * collectd - src/utils_dpdk.c + * MIT License + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Maryam Tahhan + * Harry van Haaren + * Taras Chornyi + * Serhiy Pshyk + * Krzysztof Matczak + */ + +#include "collectd.h" + +#include +#include +#include + +#include +#include +#include + +#include "common.h" +#include "utils_dpdk.h" + +#define DPDK_DEFAULT_RTE_CONFIG "/var/run/.rte_config" +#define DPDK_EAL_ARGC 5 +#define DPDK_MAX_BUFFER_SIZE (4096 * 4) +#define DPDK_CDM_DEFAULT_TIMEOUT 10000 + +enum DPDK_HELPER_STATUS { + DPDK_HELPER_NOT_INITIALIZED = 0, + DPDK_HELPER_INITIALIZING, + DPDK_HELPER_WAITING_ON_PRIMARY, + DPDK_HELPER_INITIALIZING_EAL, + DPDK_HELPER_ALIVE_SENDING_EVENTS, + DPDK_HELPER_GRACEFUL_QUIT, +}; + +#define DPDK_HELPER_TRACE(_name) \ + DEBUG("%s:%s:%d pid=%ld", _name, __FUNCTION__, __LINE__, (long)getpid()) + +struct dpdk_helper_ctx_s { + + dpdk_eal_config_t eal_config; + int eal_initialized; + + size_t shm_size; + const char *shm_name; + + sem_t sema_cmd_start; + sem_t sema_cmd_complete; + cdtime_t cmd_wait_time; + + pid_t pid; + int pipes[2]; + int status; + + int cmd; + int cmd_result; + + char priv_data[]; +}; + +static int dpdk_shm_init(const char *name, size_t size, void **map); +static void dpdk_shm_cleanup(const char *name, size_t size, void *map); + +static int dpdk_helper_spawn(dpdk_helper_ctx_t *phc); +static int dpdk_helper_worker(dpdk_helper_ctx_t *phc); +static int dpdk_helper_eal_init(dpdk_helper_ctx_t *phc); +static int dpdk_helper_cmd_wait(dpdk_helper_ctx_t *phc, pid_t ppid); +static int dpdk_helper_exit_command(dpdk_helper_ctx_t *phc, + enum DPDK_HELPER_STATUS status); +static int dpdk_helper_exit(dpdk_helper_ctx_t *phc, + enum DPDK_HELPER_STATUS status); +static int dpdk_helper_status_check(dpdk_helper_ctx_t *phc); +static void dpdk_helper_config_default(dpdk_helper_ctx_t *phc); +static const char *dpdk_helper_status_str(enum DPDK_HELPER_STATUS status); + +static void dpdk_helper_config_default(dpdk_helper_ctx_t *phc) { + if (phc == NULL) + return; + + DPDK_HELPER_TRACE(phc->shm_name); + + ssnprintf(phc->eal_config.coremask, DATA_MAX_NAME_LEN, "%s", "0xf"); + ssnprintf(phc->eal_config.memory_channels, DATA_MAX_NAME_LEN, "%s", "1"); + ssnprintf(phc->eal_config.process_type, DATA_MAX_NAME_LEN, "%s", "secondary"); + ssnprintf(phc->eal_config.file_prefix, DATA_MAX_NAME_LEN, "%s", + DPDK_DEFAULT_RTE_CONFIG); +} + +int dpdk_helper_eal_config_set(dpdk_helper_ctx_t *phc, dpdk_eal_config_t *ec) { + if (phc == NULL) { + ERROR("Invalid argument (phc)"); + return -EINVAL; + } + + DPDK_HELPER_TRACE(phc->shm_name); + + if (ec == NULL) { + ERROR("Invalid argument (ec)"); + return -EINVAL; + } + + memcpy(&phc->eal_config, ec, sizeof(phc->eal_config)); + + return 0; +} + +int dpdk_helper_eal_config_get(dpdk_helper_ctx_t *phc, dpdk_eal_config_t *ec) { + if (phc == NULL) { + ERROR("Invalid argument (phc)"); + return -EINVAL; + } + + DPDK_HELPER_TRACE(phc->shm_name); + + if (ec == NULL) { + ERROR("Invalid argument (ec)"); + return -EINVAL; + } + + memcpy(ec, &phc->eal_config, sizeof(*ec)); + + return 0; +} + +int dpdk_helper_eal_config_parse(dpdk_helper_ctx_t *phc, oconfig_item_t *ci) { + DPDK_HELPER_TRACE(phc->shm_name); + + if (phc == NULL) { + ERROR("Invalid argument (phc)"); + return -EINVAL; + } + + if (ci == NULL) { + ERROR("Invalid argument (ci)"); + return -EINVAL; + } + + int status = 0; + for (int i = 0; i < ci->children_num; i++) { + oconfig_item_t *child = ci->children + i; + if (strcasecmp("Coremask", child->key) == 0) { + status = cf_util_get_string_buffer(child, phc->eal_config.coremask, + sizeof(phc->eal_config.coremask)); + DEBUG("dpdk_common: EAL:Coremask %s", phc->eal_config.coremask); + } else if (strcasecmp("MemoryChannels", child->key) == 0) { + status = + cf_util_get_string_buffer(child, phc->eal_config.memory_channels, + sizeof(phc->eal_config.memory_channels)); + DEBUG("dpdk_common: EAL:Memory Channels %s", + phc->eal_config.memory_channels); + } else if (strcasecmp("SocketMemory", child->key) == 0) { + status = cf_util_get_string_buffer(child, phc->eal_config.socket_memory, + sizeof(phc->eal_config.socket_memory)); + DEBUG("dpdk_common: EAL:Socket memory %s", phc->eal_config.socket_memory); + } else if (strcasecmp("ProcessType", child->key) == 0) { + status = cf_util_get_string_buffer(child, phc->eal_config.process_type, + sizeof(phc->eal_config.process_type)); + DEBUG("dpdk_common: EAL:Process type %s", phc->eal_config.process_type); + } else if ((strcasecmp("FilePrefix", child->key) == 0) && + (child->values[0].type == OCONFIG_TYPE_STRING)) { + ssnprintf(phc->eal_config.file_prefix, DATA_MAX_NAME_LEN, + "/var/run/.%s_config", child->values[0].value.string); + DEBUG("dpdk_common: EAL:File prefix %s", phc->eal_config.file_prefix); + } else { + ERROR("dpdk_common: Invalid '%s' configuration option", child->key); + status = -EINVAL; + } + + if (status != 0) { + ERROR("dpdk_common: Parsing EAL configuration failed"); + break; + } + } + + return status; +} + +static int dpdk_shm_init(const char *name, size_t size, void **map) { + DPDK_HELPER_TRACE(name); + + char errbuf[ERR_BUF_SIZE]; + + int fd = shm_open(name, O_CREAT | O_TRUNC | O_RDWR, 0666); + if (fd < 0) { + WARNING("dpdk_shm_init: Failed to open %s as SHM:%s", name, + sstrerror(errno, errbuf, sizeof(errbuf))); + *map = NULL; + return -1; + } + + int ret = ftruncate(fd, size); + if (ret != 0) { + WARNING("dpdk_shm_init: Failed to resize SHM:%s", + sstrerror(errno, errbuf, sizeof(errbuf))); + close(fd); + *map = NULL; + dpdk_shm_cleanup(name, size, NULL); + return -1; + } + + *map = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (*map == MAP_FAILED) { + WARNING("dpdk_shm_init:Failed to mmap SHM:%s", + sstrerror(errno, errbuf, sizeof(errbuf))); + close(fd); + *map = NULL; + dpdk_shm_cleanup(name, size, NULL); + return -1; + } + /* File descriptor no longer needed for shared memory operations */ + close(fd); + memset(*map, 0, size); + + return 0; +} + +static void dpdk_shm_cleanup(const char *name, size_t size, void *map) { + DPDK_HELPER_TRACE(name); + char errbuf[ERR_BUF_SIZE]; + + if (map != NULL) { + if (munmap(map, size)) + ERROR("munmap failure %s", sstrerror(errno, errbuf, sizeof(errbuf))); + } + + if (shm_unlink(name)) + ERROR("shm_unlink failure %s", sstrerror(errno, errbuf, sizeof(errbuf))); +} + +void *dpdk_helper_priv_get(dpdk_helper_ctx_t *phc) { + if (phc) + return phc->priv_data; + + return NULL; +} + +int dpdk_helper_data_size_get(dpdk_helper_ctx_t *phc) { + if (phc == NULL) { + DPDK_CHILD_LOG("Invalid argument(phc)\n"); + return -EINVAL; + } + + return phc->shm_size - sizeof(dpdk_helper_ctx_t); +} + +int dpdk_helper_init(const char *name, size_t data_size, + dpdk_helper_ctx_t **pphc) { + dpdk_helper_ctx_t *phc = NULL; + size_t shm_size = sizeof(dpdk_helper_ctx_t) + data_size; + char errbuf[ERR_BUF_SIZE]; + + if (pphc == NULL) { + ERROR("%s:Invalid argument(pphc)", __FUNCTION__); + return -EINVAL; + } + + if (name == NULL) { + ERROR("%s:Invalid argument(name)", __FUNCTION__); + return -EINVAL; + } + + DPDK_HELPER_TRACE(name); + + /* Allocate dpdk_helper_ctx_t and + * initialize a POSIX SHared Memory (SHM) object. + */ + int err = dpdk_shm_init(name, shm_size, (void **)&phc); + if (err != 0) { + return -errno; + } + + err = sem_init(&phc->sema_cmd_start, 1, 0); + if (err != 0) { + ERROR("sema_cmd_start semaphore init failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + int errno_m = errno; + dpdk_shm_cleanup(name, shm_size, (void *)phc); + return -errno_m; + } + + err = sem_init(&phc->sema_cmd_complete, 1, 0); + if (err != 0) { + ERROR("sema_cmd_complete semaphore init failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + sem_destroy(&phc->sema_cmd_start); + int errno_m = errno; + dpdk_shm_cleanup(name, shm_size, (void *)phc); + return -errno_m; + } + + phc->shm_size = shm_size; + phc->shm_name = name; + + dpdk_helper_config_default(phc); + + *pphc = phc; + + return 0; +} + +int dpdk_helper_shutdown(dpdk_helper_ctx_t *phc) { + if (phc == NULL) { + ERROR("%s:Invalid argument(phc)", __FUNCTION__); + return -EINVAL; + } + + DPDK_HELPER_TRACE(phc->shm_name); + + close(phc->pipes[1]); + + if (phc->status != DPDK_HELPER_NOT_INITIALIZED) { + dpdk_helper_exit_command(phc, DPDK_HELPER_GRACEFUL_QUIT); + } + + sem_destroy(&phc->sema_cmd_start); + sem_destroy(&phc->sema_cmd_complete); + dpdk_shm_cleanup(phc->shm_name, phc->shm_size, (void *)phc); + + return 0; +} + +static int dpdk_helper_spawn(dpdk_helper_ctx_t *phc) { + char errbuf[ERR_BUF_SIZE]; + if (phc == NULL) { + ERROR("Invalid argument(phc)"); + return -EINVAL; + } + + DPDK_HELPER_TRACE(phc->shm_name); + + phc->eal_initialized = 0; + phc->cmd_wait_time = MS_TO_CDTIME_T(DPDK_CDM_DEFAULT_TIMEOUT); + + /* + * Create a pipe for helper stdout back to collectd. This is necessary for + * logging EAL failures, as rte_eal_init() calls rte_panic(). + */ + if (phc->pipes[1]) { + DEBUG("dpdk_helper_spawn: collectd closing helper pipe %d", phc->pipes[1]); + } else { + DEBUG("dpdk_helper_spawn: collectd helper pipe %d, not closing", + phc->pipes[1]); + } + + if (pipe(phc->pipes) != 0) { + DEBUG("dpdk_helper_spawn: Could not create helper pipe: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + return -1; + } + + int pipe0_flags = fcntl(phc->pipes[0], F_GETFL, 0); + int pipe1_flags = fcntl(phc->pipes[1], F_GETFL, 0); + if (pipe0_flags == -1 || pipe1_flags == -1) { + WARNING("dpdk_helper_spawn: error setting up pipe flags: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + int pipe0_err = fcntl(phc->pipes[0], F_SETFL, pipe1_flags | O_NONBLOCK); + int pipe1_err = fcntl(phc->pipes[1], F_SETFL, pipe0_flags | O_NONBLOCK); + if (pipe0_err == -1 || pipe1_err == -1) { + WARNING("dpdk_helper_spawn: error setting up pipes: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + + pid_t pid = fork(); + if (pid > 0) { + phc->pid = pid; + close(phc->pipes[1]); + DEBUG("%s:dpdk_helper_spawn: helper pid %lu", phc->shm_name, + (long)phc->pid); + } else if (pid == 0) { + /* Replace stdout with a pipe to collectd. */ + close(phc->pipes[0]); + close(STDOUT_FILENO); + dup2(phc->pipes[1], STDOUT_FILENO); + DPDK_CHILD_TRACE(phc->shm_name); + dpdk_helper_worker(phc); + exit(0); + } else { + ERROR("dpdk_helper_start: Failed to fork helper process: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + return -1; + } + + return 0; +} + +static int dpdk_helper_exit(dpdk_helper_ctx_t *phc, + enum DPDK_HELPER_STATUS status) { + DPDK_CHILD_LOG("%s:%s:%d %s\n", phc->shm_name, __FUNCTION__, __LINE__, + dpdk_helper_status_str(status)); + + close(phc->pipes[1]); + + phc->status = status; + + exit(0); + + return 0; +} + +static int dpdk_helper_exit_command(dpdk_helper_ctx_t *phc, + enum DPDK_HELPER_STATUS status) { + char errbuf[ERR_BUF_SIZE]; + DPDK_HELPER_TRACE(phc->shm_name); + + close(phc->pipes[1]); + + if (phc->status == DPDK_HELPER_ALIVE_SENDING_EVENTS) { + phc->status = status; + DEBUG("%s:%s:%d %s", phc->shm_name, __FUNCTION__, __LINE__, + dpdk_helper_status_str(status)); + + int ret = dpdk_helper_command(phc, DPDK_CMD_QUIT, NULL, 0); + if (ret != 0) { + DEBUG("%s:%s:%d kill helper (pid=%lu)", phc->shm_name, __FUNCTION__, + __LINE__, (long)phc->pid); + + int err = kill(phc->pid, SIGKILL); + if (err) { + ERROR("%s error sending kill to helper: %s", __FUNCTION__, + sstrerror(errno, errbuf, sizeof(errbuf))); + } + } + } else { + + DEBUG("%s:%s:%d kill helper (pid=%lu)", phc->shm_name, __FUNCTION__, + __LINE__, (long)phc->pid); + + int err = kill(phc->pid, SIGKILL); + if (err) { + ERROR("%s error sending kill to helper: %s", __FUNCTION__, + sstrerror(errno, errbuf, sizeof(errbuf))); + } + } + + return 0; +} + +static int dpdk_helper_eal_init(dpdk_helper_ctx_t *phc) { + phc->status = DPDK_HELPER_INITIALIZING_EAL; + DPDK_CHILD_LOG("%s:%s:%d DPDK_HELPER_INITIALIZING_EAL (start)\n", + phc->shm_name, __FUNCTION__, __LINE__); + + char *argp[DPDK_EAL_ARGC * 2 + 1]; + int argc = 0; + + /* EAL config must be initialized */ + assert(phc->eal_config.coremask[0] != 0); + assert(phc->eal_config.memory_channels[0] != 0); + assert(phc->eal_config.process_type[0] != 0); + assert(phc->eal_config.file_prefix[0] != 0); + + argp[argc++] = "collectd-dpdk"; + + argp[argc++] = "-c"; + argp[argc++] = phc->eal_config.coremask; + + argp[argc++] = "-n"; + argp[argc++] = phc->eal_config.memory_channels; + + if (strcasecmp(phc->eal_config.socket_memory, "") != 0) { + argp[argc++] = "--socket-mem"; + argp[argc++] = phc->eal_config.socket_memory; + } + + if (strcasecmp(phc->eal_config.file_prefix, DPDK_DEFAULT_RTE_CONFIG) != 0) { + argp[argc++] = "--file-prefix"; + argp[argc++] = phc->eal_config.file_prefix; + } + + argp[argc++] = "--proc-type"; + argp[argc++] = phc->eal_config.process_type; + + assert(argc <= (DPDK_EAL_ARGC * 2 + 1)); + + int ret = rte_eal_init(argc, argp); + + if (ret < 0) { + + phc->eal_initialized = 0; + + DPDK_CHILD_LOG("dpdk_helper_eal_init: ERROR initializing EAL ret=%d\n", + ret); + + printf("dpdk_helper_eal_init: EAL arguments: "); + for (int i = 0; i < argc; i++) { + printf("%s ", argp[i]); + } + printf("\n"); + + return ret; + } + + phc->eal_initialized = 1; + + DPDK_CHILD_LOG("%s:%s:%d DPDK_HELPER_INITIALIZING_EAL (done)\n", + phc->shm_name, __FUNCTION__, __LINE__); + + return 0; +} + +static int dpdk_helper_cmd_wait(dpdk_helper_ctx_t *phc, pid_t ppid) { + DPDK_CHILD_TRACE(phc->shm_name); + + struct timespec ts; + cdtime_t now = cdtime(); + cdtime_t cmd_wait_time = MS_TO_CDTIME_T(1500) + phc->cmd_wait_time * 2; + ts = CDTIME_T_TO_TIMESPEC(now + cmd_wait_time); + + int ret = sem_timedwait(&phc->sema_cmd_start, &ts); + DPDK_CHILD_LOG("%s:%s:%d pid=%lu got sema_cmd_start (ret=%d, errno=%d)\n", + phc->shm_name, __FUNCTION__, __LINE__, (long)getpid(), ret, + errno); + + if (phc->cmd == DPDK_CMD_QUIT) { + DPDK_CHILD_LOG("%s:%s:%d pid=%lu exiting\n", phc->shm_name, __FUNCTION__, + __LINE__, (long)getpid()); + exit(0); + } else if (ret == -1 && errno == ETIMEDOUT) { + if (phc->status == DPDK_HELPER_ALIVE_SENDING_EVENTS) { + DPDK_CHILD_LOG("%s:dpdk_helper_cmd_wait: sem timedwait()" + " timeout, did collectd terminate?\n", + phc->shm_name); + dpdk_helper_exit(phc, DPDK_HELPER_GRACEFUL_QUIT); + } + } +#if COLLECT_DEBUG + int val = 0; + if (sem_getvalue(&phc->sema_cmd_start, &val) == 0) + DPDK_CHILD_LOG("%s:%s:%d pid=%lu wait sema_cmd_start (value=%d)\n", + phc->shm_name, __FUNCTION__, __LINE__, (long)getpid(), val); +#endif + + /* Parent PID change means collectd died so quit the helper process. */ + if (ppid != getppid()) { + DPDK_CHILD_LOG("dpdk_helper_cmd_wait: parent PID changed, quitting.\n"); + dpdk_helper_exit(phc, DPDK_HELPER_GRACEFUL_QUIT); + } + + /* Checking for DPDK primary process. */ + if (!rte_eal_primary_proc_alive(phc->eal_config.file_prefix)) { + if (phc->eal_initialized) { + DPDK_CHILD_LOG( + "%s:dpdk_helper_cmd_wait: no primary alive but EAL initialized:" + " quitting.\n", + phc->shm_name); + dpdk_helper_exit(phc, DPDK_HELPER_NOT_INITIALIZED); + } + + phc->status = DPDK_HELPER_WAITING_ON_PRIMARY; + DPDK_CHILD_LOG("%s:%s:%d DPDK_HELPER_WAITING_ON_PRIMARY\n", phc->shm_name, + __FUNCTION__, __LINE__); + + return -1; + } + + if (!phc->eal_initialized) { + int ret = dpdk_helper_eal_init(phc); + if (ret != 0) { + DPDK_CHILD_LOG("Error initializing EAL\n"); + dpdk_helper_exit(phc, DPDK_HELPER_NOT_INITIALIZED); + } + phc->status = DPDK_HELPER_ALIVE_SENDING_EVENTS; + DPDK_CHILD_LOG("%s:%s:%d DPDK_HELPER_ALIVE_SENDING_EVENTS\n", phc->shm_name, + __FUNCTION__, __LINE__); + return -1; + } + + return 0; +} + +static int dpdk_helper_worker(dpdk_helper_ctx_t *phc) { + DPDK_CHILD_TRACE(phc->shm_name); + + pid_t ppid = getppid(); + + while (1) { + if (dpdk_helper_cmd_wait(phc, ppid) == 0) { + DPDK_CHILD_LOG("%s:%s:%d DPDK command handle (cmd=%d, pid=%lu)\n", + phc->shm_name, __FUNCTION__, __LINE__, phc->cmd, + (long)getpid()); + phc->cmd_result = dpdk_helper_command_handler(phc, phc->cmd); + } else { + phc->cmd_result = -1; + } + + /* now kick collectd to get results */ + int err = sem_post(&phc->sema_cmd_complete); + DPDK_CHILD_LOG("%s:%s:%d post sema_cmd_complete (pid=%lu)\n", phc->shm_name, + __FUNCTION__, __LINE__, (long)getpid()); + if (err) { + char errbuf[ERR_BUF_SIZE]; + DPDK_CHILD_LOG("dpdk_helper_worker: error posting sema_cmd_complete " + "semaphore (%s)\n", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + +#if COLLECT_DEBUG + int val = 0; + if (sem_getvalue(&phc->sema_cmd_complete, &val) == 0) + DPDK_CHILD_LOG("%s:%s:%d pid=%lu sema_cmd_complete (value=%d)\n", + phc->shm_name, __FUNCTION__, __LINE__, (long)getpid(), + val); +#endif + + } /* while(1) */ + + return 0; +} + +static const char *dpdk_helper_status_str(enum DPDK_HELPER_STATUS status) { + switch (status) { + case DPDK_HELPER_ALIVE_SENDING_EVENTS: + return "DPDK_HELPER_ALIVE_SENDING_EVENTS"; + case DPDK_HELPER_WAITING_ON_PRIMARY: + return "DPDK_HELPER_WAITING_ON_PRIMARY"; + case DPDK_HELPER_INITIALIZING: + return "DPDK_HELPER_INITIALIZING"; + case DPDK_HELPER_INITIALIZING_EAL: + return "DPDK_HELPER_INITIALIZING_EAL"; + case DPDK_HELPER_GRACEFUL_QUIT: + return "DPDK_HELPER_GRACEFUL_QUIT"; + case DPDK_HELPER_NOT_INITIALIZED: + return "DPDK_HELPER_NOT_INITIALIZED"; + default: + return "UNKNOWN"; + } +} + +static int dpdk_helper_status_check(dpdk_helper_ctx_t *phc) { + DEBUG("%s:%s:%d pid=%u %s", phc->shm_name, __FUNCTION__, __LINE__, getpid(), + dpdk_helper_status_str(phc->status)); + char errbuf[ERR_BUF_SIZE]; + + if (phc->status == DPDK_HELPER_GRACEFUL_QUIT) { + return 0; + } else if (phc->status == DPDK_HELPER_NOT_INITIALIZED) { + phc->status = DPDK_HELPER_INITIALIZING; + DEBUG("%s:%s:%d DPDK_HELPER_INITIALIZING", phc->shm_name, __FUNCTION__, + __LINE__); + int err = dpdk_helper_spawn(phc); + if (err) { + ERROR("dpdkstat: error spawning helper %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + return -1; + } + + pid_t ws = waitpid(phc->pid, NULL, WNOHANG); + if (ws != 0) { + phc->status = DPDK_HELPER_INITIALIZING; + DEBUG("%s:%s:%d DPDK_HELPER_INITIALIZING", phc->shm_name, __FUNCTION__, + __LINE__); + int err = dpdk_helper_spawn(phc); + if (err) { + ERROR("dpdkstat: error spawning helper %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + return -1; + } + + if (phc->status == DPDK_HELPER_INITIALIZING_EAL) { + return -1; + } + + return 0; +} + +static void dpdk_helper_check_pipe(dpdk_helper_ctx_t *phc) { + char buf[DPDK_MAX_BUFFER_SIZE]; + char out[DPDK_MAX_BUFFER_SIZE]; + + /* non blocking check on helper logging pipe */ + struct pollfd fds = { + .fd = phc->pipes[0], .events = POLLIN, + }; + int data_avail = poll(&fds, 1, 0); + if (data_avail < 0) { + if (errno != EINTR || errno != EAGAIN) { + char errbuf[ERR_BUF_SIZE]; + ERROR("%s: poll(2) failed: %s", phc->shm_name, + sstrerror(errno, errbuf, sizeof(errbuf))); + } + } + while (data_avail) { + int nbytes = read(phc->pipes[0], buf, sizeof(buf)); + if (nbytes <= 0) + break; + sstrncpy(out, buf, nbytes); + DEBUG("%s: helper process:\n%s", phc->shm_name, out); + } +} + +int dpdk_helper_command(dpdk_helper_ctx_t *phc, enum DPDK_CMD cmd, int *result, + cdtime_t cmd_wait_time) { + if (phc == NULL) { + ERROR("Invalid argument(phc)"); + return -EINVAL; + } + + DEBUG("%s:%s:%d pid=%lu, cmd=%d", phc->shm_name, __FUNCTION__, __LINE__, + (long)getpid(), cmd); + + phc->cmd_wait_time = cmd_wait_time; + + int ret = dpdk_helper_status_check(phc); + + dpdk_helper_check_pipe(phc); + + if (ret != 0) { + return ret; + } + + DEBUG("%s: DPDK command execute (cmd=%d)", phc->shm_name, cmd); + + phc->cmd_result = 0; + phc->cmd = cmd; + + /* kick helper to process command */ + int err = sem_post(&phc->sema_cmd_start); + if (err) { + char errbuf[ERR_BUF_SIZE]; + ERROR("dpdk_helper_worker: error posting sema_cmd_start semaphore (%s)", + sstrerror(errno, errbuf, sizeof(errbuf))); + } + +#if COLLECT_DEBUG + int val = 0; + if (sem_getvalue(&phc->sema_cmd_start, &val) == 0) + DEBUG("%s:dpdk_helper_command: post sema_cmd_start (value=%d)", + phc->shm_name, val); +#endif + + if (phc->cmd != DPDK_CMD_QUIT) { + + /* wait for helper to complete processing */ + struct timespec ts; + cdtime_t now = cdtime(); + + if (phc->status != DPDK_HELPER_ALIVE_SENDING_EVENTS) { + cmd_wait_time = MS_TO_CDTIME_T(DPDK_CDM_DEFAULT_TIMEOUT); + } + + ts = CDTIME_T_TO_TIMESPEC(now + cmd_wait_time); + ret = sem_timedwait(&phc->sema_cmd_complete, &ts); + if (ret == -1 && errno == ETIMEDOUT) { + DPDK_HELPER_TRACE(phc->shm_name); + DEBUG("%s:sema_cmd_start: timeout in collectd thread: is a DPDK Primary " + "running?", + phc->shm_name); + return -ETIMEDOUT; + } + +#if COLLECT_DEBUG + val = 0; + if (sem_getvalue(&phc->sema_cmd_complete, &val) == 0) + DEBUG("%s:dpdk_helper_command: wait sema_cmd_complete (value=%d)", + phc->shm_name, val); +#endif + + if (result) { + *result = phc->cmd_result; + } + } + + dpdk_helper_check_pipe(phc); + + DEBUG("%s: DPDK command complete (cmd=%d, result=%d)", phc->shm_name, + phc->cmd, phc->cmd_result); + + return 0; +} + +uint64_t strtoull_safe(const char *str, int *err) { + uint64_t val = 0; + char *endptr; + int res = 0; + + val = strtoull(str, &endptr, 16); + if (*endptr) { + ERROR("%s Failed to parse the value %s, endptr=%c", __FUNCTION__, str, + *endptr); + res = -EINVAL; + } + if (err != NULL) + *err = res; + return val; +} + +uint128_t str_to_uint128(const char *str, int len) { + uint128_t lcore_mask; + int err = 0; + + memset(&lcore_mask, 0, sizeof(lcore_mask)); + + if (len <= 2 || strncmp(str, "0x", 2) != 0) { + ERROR("%s Value %s should be represened in hexadecimal format", + __FUNCTION__, str); + return lcore_mask; + } + /* If str is <= 64 bit long ('0x' + 16 chars = 18 chars) then + * conversion is straightforward. Otherwise str is splitted into 64b long + * blocks */ + if (len <= 18) { + lcore_mask.low = strtoull_safe(str, &err); + if (err) + return lcore_mask; + } else { + char low_str[DATA_MAX_NAME_LEN]; + char high_str[DATA_MAX_NAME_LEN]; + + memset(high_str, 0, sizeof(high_str)); + memset(low_str, 0, sizeof(low_str)); + + strncpy(high_str, str, len - 16); + strncpy(low_str, str + len - 16, 16); + + lcore_mask.low = strtoull_safe(low_str, &err); + if (err) + return lcore_mask; + + lcore_mask.high = strtoull_safe(high_str, &err); + if (err) { + lcore_mask.low = 0; + return lcore_mask; + } + } + return lcore_mask; +} + +uint8_t dpdk_helper_eth_dev_count() { + uint8_t ports = rte_eth_dev_count(); + if (ports == 0) { + ERROR( + "%s:%d: No DPDK ports available. Check bound devices to DPDK driver.\n", + __FUNCTION__, __LINE__); + return ports; + } + + if (ports > RTE_MAX_ETHPORTS) { + ERROR("%s:%d: Number of DPDK ports (%u) is greater than " + "RTE_MAX_ETHPORTS=%d. Ignoring extra ports\n", + __FUNCTION__, __LINE__, ports, RTE_MAX_ETHPORTS); + ports = RTE_MAX_ETHPORTS; + } + + return ports; +} diff --git a/src/utils_dpdk.h b/src/utils_dpdk.h new file mode 100644 index 00000000..f97a6b51 --- /dev/null +++ b/src/utils_dpdk.h @@ -0,0 +1,89 @@ +/* + * collectd - src/utils_dpdk.h + * MIT License + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Maryam Tahhan + * Harry van Haaren + * Taras Chornyi + * Serhiy Pshyk + * Krzysztof Matczak + */ + +#ifndef UTILS_DPDK_H +#define UTILS_DPDK_H + +#include + +#define ERR_BUF_SIZE 1024 + +enum DPDK_CMD { + DPDK_CMD_NONE = 0, + DPDK_CMD_QUIT, + DPDK_CMD_INIT, + DPDK_CMD_GET_STATS, + DPDK_CMD_GET_EVENTS, + __DPDK_CMD_LAST, +}; + +struct dpdk_eal_config_s { + char coremask[DATA_MAX_NAME_LEN]; + char memory_channels[DATA_MAX_NAME_LEN]; + char socket_memory[DATA_MAX_NAME_LEN]; + char process_type[DATA_MAX_NAME_LEN]; + char file_prefix[DATA_MAX_NAME_LEN]; +}; +typedef struct dpdk_eal_config_s dpdk_eal_config_t; + +struct uint128_s { + u_int64_t high; + u_int64_t low; +}; +typedef struct uint128_s uint128_t; + +typedef struct dpdk_helper_ctx_s dpdk_helper_ctx_t; + +int dpdk_helper_init(const char *name, size_t data_size, + dpdk_helper_ctx_t **pphc); +int dpdk_helper_shutdown(dpdk_helper_ctx_t *phc); +int dpdk_helper_eal_config_parse(dpdk_helper_ctx_t *phc, oconfig_item_t *ci); +int dpdk_helper_eal_config_set(dpdk_helper_ctx_t *phc, dpdk_eal_config_t *ec); +int dpdk_helper_eal_config_get(dpdk_helper_ctx_t *phc, dpdk_eal_config_t *ec); +int dpdk_helper_command(dpdk_helper_ctx_t *phc, enum DPDK_CMD cmd, int *result, + cdtime_t cmd_wait_time); +void *dpdk_helper_priv_get(dpdk_helper_ctx_t *phc); +int dpdk_helper_data_size_get(dpdk_helper_ctx_t *phc); +uint8_t dpdk_helper_eth_dev_count(); + +/* forward declaration of handler function that is called by helper from + * child process. not implemented in helper. must be provided by client. */ +int dpdk_helper_command_handler(dpdk_helper_ctx_t *phc, enum DPDK_CMD cmd); + +uint128_t str_to_uint128(const char *str, int len); + +/* logging functions that should be used in child process */ +#define DPDK_CHILD_LOG(...) fprintf(stdout, __VA_ARGS__) +#define DPDK_CHILD_TRACE(_name) \ + fprintf(stdout, "%s:%s:%d pid=%u\n", _name, __FUNCTION__, __LINE__, getpid()) + +#endif /* UTILS_DPDK_H */ diff --git a/src/utils_fbhash.c b/src/utils_fbhash.c index ecc56740..366b44b8 100644 --- a/src/utils_fbhash.c +++ b/src/utils_fbhash.c @@ -74,7 +74,7 @@ static int fbh_read_file(fbhash_t *h) /* {{{ */ fh = fopen(h->filename, "r"); if (fh == NULL) - return (-1); + return -1; fl.l_type = F_RDLCK; fl.l_whence = SEEK_SET; @@ -83,13 +83,13 @@ static int fbh_read_file(fbhash_t *h) /* {{{ */ status = fcntl(fileno(fh), F_SETLK, &fl); if (status != 0) { fclose(fh); - return (-1); + return -1; } tree = c_avl_create((int (*)(const void *, const void *))strcmp); if (tree == NULL) { fclose(fh); - return (-1); + return -1; } /* Read `fh' into `tree' */ @@ -162,7 +162,7 @@ static int fbh_read_file(fbhash_t *h) /* {{{ */ fbh_free_tree(h->tree); h->tree = tree; - return (0); + return 0; } /* }}} int fbh_read_file */ static int fbh_check_file(fbhash_t *h) /* {{{ */ @@ -172,16 +172,16 @@ static int fbh_check_file(fbhash_t *h) /* {{{ */ status = stat(h->filename, &statbuf); if (status != 0) - return (-1); + return -1; if (h->mtime >= statbuf.st_mtime) - return (0); + return 0; status = fbh_read_file(h); if (status == 0) h->mtime = statbuf.st_mtime; - return (status); + return status; } /* }}} int fbh_check_file */ /* @@ -193,16 +193,16 @@ fbhash_t *fbh_create(const char *file) /* {{{ */ int status; if (file == NULL) - return (NULL); + return NULL; h = calloc(1, sizeof(*h)); if (h == NULL) - return (NULL); + return NULL; h->filename = strdup(file); if (h->filename == NULL) { free(h); - return (NULL); + return NULL; } h->mtime = 0; @@ -212,10 +212,10 @@ fbhash_t *fbh_create(const char *file) /* {{{ */ if (status != 0) { fbh_destroy(h); free(h); - return (NULL); + return NULL; } - return (h); + return h; } /* }}} fbhash_t *fbh_create */ void fbh_destroy(fbhash_t *h) /* {{{ */ @@ -235,7 +235,7 @@ char *fbh_get(fbhash_t *h, const char *key) /* {{{ */ int status; if ((h == NULL) || (key == NULL)) - return (NULL); + return NULL; value = NULL; value_copy = NULL; @@ -253,7 +253,5 @@ char *fbh_get(fbhash_t *h, const char *key) /* {{{ */ pthread_mutex_unlock(&h->lock); - return (value_copy); + return value_copy; } /* }}} char *fbh_get */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_fbhash.h b/src/utils_fbhash.h index 79e9c00f..fcd6e925 100644 --- a/src/utils_fbhash.h +++ b/src/utils_fbhash.h @@ -48,5 +48,3 @@ void fbh_destroy(fbhash_t *h); char *fbh_get(fbhash_t *h, const char *key); #endif /* UTILS_FBHASH_H */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_format_graphite.c b/src/utils_format_graphite.c index 9c7d96f1..f124ba10 100644 --- a/src/utils_format_graphite.c +++ b/src/utils_format_graphite.c @@ -48,9 +48,9 @@ static int gr_format_values(char *ret, size_t ret_len, int ds_num, do { \ status = ssnprintf(ret + offset, ret_len - offset, __VA_ARGS__); \ if (status < 1) { \ - return (-1); \ + return -1; \ } else if (((size_t)status) >= (ret_len - offset)) { \ - return (-1); \ + return -1; \ } else \ offset += ((size_t)status); \ } while (0) @@ -68,12 +68,12 @@ static int gr_format_values(char *ret, size_t ret_len, int ds_num, else { ERROR("gr_format_values plugin: Unknown data source type: %i", ds->ds[ds_num].type); - return (-1); + return -1; } #undef BUFFER_ADD - return (0); + return 0; } static void gr_copy_escape_part(char *dst, const char *src, size_t dst_len, @@ -161,7 +161,7 @@ static int gr_format_name(char *ret, int ret_len, value_list_t const *vl, ssnprintf(ret, ret_len, "%s%s%s.%s.%s", prefix, n_host, postfix, tmp_plugin, tmp_type); - return (0); + return 0; } static void escape_graphite_string(char *buffer, char escape_char) { @@ -204,7 +204,7 @@ int format_graphite(char *buffer, size_t buffer_size, data_set_t const *ds, if (status != 0) { ERROR("format_graphite: error with gr_format_name"); sfree(rates); - return (status); + return status; } escape_graphite_string(key, escape_char); @@ -214,7 +214,7 @@ int format_graphite(char *buffer, size_t buffer_size, data_set_t const *ds, if (status != 0) { ERROR("format_graphite: error with gr_format_values"); sfree(rates); - return (status); + return status; } /* Compute the graphite command */ @@ -226,21 +226,19 @@ int format_graphite(char *buffer, size_t buffer_size, data_set_t const *ds, "Need %zu bytes.", message_len + 1); sfree(rates); - return (-ENOMEM); + return -ENOMEM; } /* Append it in case we got multiple data set */ if ((buffer_pos + message_len) >= buffer_size) { ERROR("format_graphite: target buffer too small"); sfree(rates); - return (-ENOMEM); + return -ENOMEM; } memcpy((void *)(buffer + buffer_pos), message, message_len); buffer_pos += message_len; buffer[buffer_pos] = '\0'; } sfree(rates); - return (status); + return status; } /* int format_graphite */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_format_graphite_test.c b/src/utils_format_graphite_test.c index 415a283e..a82142fa 100644 --- a/src/utils_format_graphite_test.c +++ b/src/utils_format_graphite_test.c @@ -49,12 +49,12 @@ static data_set_t ds_double = { DEF_TEST(metric_name) { struct { - char *plugin_instance; - char *type_instance; - char *prefix; - char *suffix; + const char *plugin_instance; + const char *type_instance; + const char *prefix; + const char *suffix; unsigned int flags; - char *want_name; + const char *want_name; } cases[] = { { .want_name = "example@com.test.single", @@ -157,8 +157,35 @@ DEF_TEST(metric_name) { return 0; } +DEF_TEST(null_termination) { + value_list_t vl = { + .values = &(value_t){.gauge = 1337}, + .values_len = 1, + .time = TIME_T_TO_CDTIME_T_STATIC(1480063672), + .interval = TIME_T_TO_CDTIME_T_STATIC(10), + .host = "example.com", + .plugin = "test", + .type = "single", + }; + char const *want = "example_com.test.single 1337 1480063672\r\n"; + + char buffer[128]; + for (size_t i = 0; i < sizeof(buffer); i++) + buffer[i] = (char)i; + + EXPECT_EQ_INT(0, format_graphite(buffer, sizeof(buffer), &ds_single, &vl, + NULL, NULL, '_', 0)); + EXPECT_EQ_STR(want, buffer); + EXPECT_EQ_INT(0, buffer[strlen(want)]); + for (size_t i = strlen(want) + 1; i < sizeof(buffer); i++) + EXPECT_EQ_INT((int)i, (int)buffer[i]); + + return 0; +} + int main(void) { RUN_TEST(metric_name); + RUN_TEST(null_termination); END_TEST; } diff --git a/src/utils_format_json.c b/src/utils_format_json.c index 0a95a86d..67aebbaf 100644 --- a/src/utils_format_json.c +++ b/src/utils_format_json.c @@ -48,10 +48,10 @@ static int json_escape_string(char *buffer, size_t buffer_size, /* {{{ */ size_t dst_pos; if ((buffer == NULL) || (string == NULL)) - return (-EINVAL); + return -EINVAL; if (buffer_size < 3) - return (-ENOMEM); + return -ENOMEM; dst_pos = 0; @@ -59,7 +59,7 @@ static int json_escape_string(char *buffer, size_t buffer_size, /* {{{ */ do { \ if (dst_pos >= (buffer_size - 1)) { \ buffer[buffer_size - 1] = 0; \ - return (-ENOMEM); \ + return -ENOMEM; \ } \ buffer[dst_pos] = (c); \ dst_pos++; \ @@ -81,7 +81,7 @@ static int json_escape_string(char *buffer, size_t buffer_size, /* {{{ */ #undef BUFFER_ADD - return (0); + return 0; } /* }}} int json_escape_string */ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ @@ -98,10 +98,10 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) { \ sfree(rates); \ - return (-1); \ + return -1; \ } else if (((size_t)status) >= (buffer_size - offset)) { \ sfree(rates); \ - return (-ENOMEM); \ + return -ENOMEM; \ } else \ offset += ((size_t)status); \ } while (0) @@ -122,7 +122,7 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ if (rates == NULL) { WARNING("utils_format_json: uc_get_rate failed."); sfree(rates); - return (-1); + return -1; } if (isfinite(rates[i])) @@ -138,7 +138,7 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ else { ERROR("format_json: Unknown data source type: %i", ds->ds[i].type); sfree(rates); - return (-1); + return -1; } } /* for ds->ds_num */ BUFFER_ADD("]"); @@ -147,7 +147,7 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_json: values_to_json: buffer = %s;", buffer); sfree(rates); - return (0); + return 0; } /* }}} int values_to_json */ static int dstypes_to_json(char *buffer, size_t buffer_size, /* {{{ */ @@ -161,9 +161,9 @@ static int dstypes_to_json(char *buffer, size_t buffer_size, /* {{{ */ int status; \ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -181,7 +181,7 @@ static int dstypes_to_json(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_json: dstypes_to_json: buffer = %s;", buffer); - return (0); + return 0; } /* }}} int dstypes_to_json */ static int dsnames_to_json(char *buffer, size_t buffer_size, /* {{{ */ @@ -195,9 +195,9 @@ static int dsnames_to_json(char *buffer, size_t buffer_size, /* {{{ */ int status; \ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -215,7 +215,7 @@ static int dsnames_to_json(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_json: dsnames_to_json: buffer = %s;", buffer); - return (0); + return 0; } /* }}} int dsnames_to_json */ static int meta_data_keys_to_json(char *buffer, size_t buffer_size, /* {{{ */ @@ -230,9 +230,9 @@ static int meta_data_keys_to_json(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -274,14 +274,14 @@ static int meta_data_keys_to_json(char *buffer, size_t buffer_size, /* {{{ */ } /* for (keys) */ if (offset == 0) - return (ENOENT); + return ENOENT; buffer[0] = '{'; /* replace leading ',' */ BUFFER_ADD("}"); #undef BUFFER_ADD - return (0); + return 0; } /* }}} int meta_data_keys_to_json */ static int meta_data_to_json(char *buffer, size_t buffer_size, /* {{{ */ @@ -291,11 +291,11 @@ static int meta_data_to_json(char *buffer, size_t buffer_size, /* {{{ */ int status; if ((buffer == NULL) || (buffer_size == 0) || (meta == NULL)) - return (EINVAL); + return EINVAL; status = meta_data_toc(meta, &keys); if (status <= 0) - return (status); + return status; keys_num = (size_t)status; status = meta_data_keys_to_json(buffer, buffer_size, meta, keys, keys_num); @@ -320,9 +320,9 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -333,17 +333,17 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ status = values_to_json(temp, sizeof(temp), ds, vl, store_rates); if (status != 0) - return (status); + return status; BUFFER_ADD("\"values\":%s", temp); status = dstypes_to_json(temp, sizeof(temp), ds); if (status != 0) - return (status); + return status; BUFFER_ADD(",\"dstypes\":%s", temp); status = dsnames_to_json(temp, sizeof(temp), ds); if (status != 0) - return (status); + return status; BUFFER_ADD(",\"dsnames\":%s", temp); BUFFER_ADD(",\"time\":%.3f", CDTIME_T_TO_DOUBLE(vl->time)); @@ -353,7 +353,7 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = json_escape_string(temp, sizeof(temp), (value)); \ if (status != 0) \ - return (status); \ + return status; \ BUFFER_ADD(",\"%s\":%s", (key), temp); \ } while (0) @@ -368,7 +368,7 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ memset(meta_buffer, 0, sizeof(meta_buffer)); status = meta_data_to_json(meta_buffer, sizeof(meta_buffer), vl->meta); if (status != 0) - return (status); + return status; BUFFER_ADD(",\"meta\":%s", meta_buffer); } /* if (vl->meta != NULL) */ @@ -380,7 +380,7 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_json: value_list_to_json: buffer = %s;", buffer); - return (0); + return 0; } /* }}} int value_list_to_json */ static int format_json_value_list_nocheck(char *buffer, /* {{{ */ @@ -394,14 +394,14 @@ static int format_json_value_list_nocheck(char *buffer, /* {{{ */ status = value_list_to_json(temp, sizeof(temp), ds, vl, store_rates); if (status != 0) - return (status); + return status; temp_size = strlen(temp); memcpy(buffer + (*ret_buffer_fill), temp, temp_size + 1); (*ret_buffer_fill) += temp_size; (*ret_buffer_free) -= temp_size; - return (0); + return 0; } /* }}} int format_json_value_list_nocheck */ int format_json_initialize(char *buffer, /* {{{ */ @@ -411,7 +411,7 @@ int format_json_initialize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; buffer_fill = *ret_buffer_fill; buffer_free = *ret_buffer_free; @@ -420,13 +420,13 @@ int format_json_initialize(char *buffer, /* {{{ */ buffer_fill = 0; if (buffer_free < 3) - return (-ENOMEM); + return -ENOMEM; memset(buffer, 0, buffer_free); *ret_buffer_fill = buffer_fill; *ret_buffer_free = buffer_free; - return (0); + return 0; } /* }}} int format_json_initialize */ int format_json_finalize(char *buffer, /* {{{ */ @@ -435,15 +435,15 @@ int format_json_finalize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 2) - return (-ENOMEM); + return -ENOMEM; /* Replace the leading comma added in `value_list_to_json' with a square * bracket. */ if (buffer[0] != ',') - return (-EINVAL); + return -EINVAL; buffer[0] = '['; pos = *ret_buffer_fill; @@ -453,7 +453,7 @@ int format_json_finalize(char *buffer, /* {{{ */ (*ret_buffer_fill)++; (*ret_buffer_free)--; - return (0); + return 0; } /* }}} int format_json_finalize */ int format_json_value_list(char *buffer, /* {{{ */ @@ -462,14 +462,14 @@ int format_json_value_list(char *buffer, /* {{{ */ int store_rates) { if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL) || (ds == NULL) || (vl == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 3) - return (-ENOMEM); + return -ENOMEM; - return (format_json_value_list_nocheck(buffer, ret_buffer_fill, - ret_buffer_free, ds, vl, store_rates, - (*ret_buffer_free) - 2)); + return format_json_value_list_nocheck(buffer, ret_buffer_fill, + ret_buffer_free, ds, vl, store_rates, + (*ret_buffer_free) - 2); } /* }}} int format_json_value_list */ #if HAVE_LIBYAJL @@ -478,7 +478,7 @@ static int json_add_string(yajl_gen g, char const *str) /* {{{ */ if (str == NULL) return (int)yajl_gen_null(g); - return (int)yajl_gen_string(g, (unsigned char const *)str, + return (int)yajl_gen_string(g, (const unsigned char *)str, (unsigned int)strlen(str)); } /* }}} int json_add_string */ @@ -685,5 +685,3 @@ int format_json_notification(char *buffer, size_t buffer_size, /* {{{ */ return ENOTSUP; } /* }}} int format_json_notification */ #endif - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_format_kairosdb.c b/src/utils_format_kairosdb.c index 4c25d188..4378d7ff 100644 --- a/src/utils_format_kairosdb.c +++ b/src/utils_format_kairosdb.c @@ -59,10 +59,10 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ size_t dst_pos; if ((buffer == NULL) || (string == NULL)) - return (-EINVAL); + return -EINVAL; if (buffer_size < 3) - return (-ENOMEM); + return -ENOMEM; dst_pos = 0; @@ -70,7 +70,7 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ do { \ if (dst_pos >= (buffer_size - 1)) { \ buffer[buffer_size - 1] = 0; \ - return (-ENOMEM); \ + return -ENOMEM; \ } \ buffer[dst_pos] = (c); \ dst_pos++; \ @@ -89,7 +89,7 @@ static int kairosdb_escape_string(char *buffer, size_t buffer_size, /* {{{ */ #undef BUFFER_ADD - return (0); + return 0; } /* }}} int kairosdb_escape_string */ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ @@ -106,10 +106,10 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) { \ sfree(rates); \ - return (-1); \ + return -1; \ } else if (((size_t)status) >= (buffer_size - offset)) { \ sfree(rates); \ - return (-ENOMEM); \ + return -ENOMEM; \ } else \ offset += ((size_t)status); \ } while (0) @@ -125,7 +125,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ "%s|%s|%s|%s|%s", vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); - return (-1); + return -1; } } else if (store_rates) { if (rates == NULL) @@ -135,7 +135,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); - return (-1); + return -1; } if (isfinite(rates[ds_idx])) { @@ -148,7 +148,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ vl->plugin, vl->plugin_instance, vl->type, vl->type_instance, ds->ds[ds_idx].name); sfree(rates); - return (-1); + return -1; } } else if (ds->ds[ds_idx].type == DS_TYPE_COUNTER) { BUFFER_ADD("[["); @@ -168,7 +168,7 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ } else { ERROR("format_kairosdb: Unknown data source type: %i", ds->ds[ds_idx].type); sfree(rates); - return (-1); + return -1; } BUFFER_ADD("]]"); @@ -176,12 +176,14 @@ static int values_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_kairosdb: values_to_kairosdb: buffer = %s;", buffer); sfree(rates); - return (0); + return 0; } /* }}} int values_to_kairosdb */ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ const data_set_t *ds, const value_list_t *vl, - int store_rates) { + int store_rates, + char const *const *http_attrs, + size_t http_attrs_num, int data_ttl) { char temp[512]; size_t offset = 0; int status; @@ -192,9 +194,9 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ - return (-1); \ + return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ - return (-ENOMEM); \ + return -ENOMEM; \ else \ offset += ((size_t)status); \ } while (0) @@ -203,7 +205,7 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ do { \ status = kairosdb_escape_string(temp, sizeof(temp), (value)); \ if (status != 0) \ - return (status); \ + return status; \ BUFFER_ADD(",\"%s\": %s", (key), temp); \ } while (0) @@ -218,7 +220,7 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ status = values_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates, i); if (status != 0) - return (status); + return status; BUFFER_ADD("\", \"datapoints\": %s", temp); @@ -228,9 +230,17 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ memset(temp, 0, sizeof(temp)); + if (data_ttl != 0) + BUFFER_ADD(", \"ttl\": %i", data_ttl); + BUFFER_ADD(", \"tags\":\{"); BUFFER_ADD("\"host\": \"%s\"", vl->host); + for (size_t j = 0; j < http_attrs_num; j += 2) { + BUFFER_ADD(", \"%s\":", http_attrs[j]); + BUFFER_ADD(" \"%s\"", http_attrs[j + 1]); + } + if (strlen(vl->plugin_instance)) BUFFER_ADD_KEYVAL("plugin_instance", vl->plugin_instance); BUFFER_ADD_KEYVAL("type", vl->type); @@ -246,26 +256,28 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */ DEBUG("format_kairosdb: value_list_to_kairosdb: buffer = %s;", buffer); - return (0); + return 0; } /* }}} int value_list_to_kairosdb */ static int format_kairosdb_value_list_nocheck( char *buffer, /* {{{ */ size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds, - const value_list_t *vl, int store_rates, size_t temp_size) { + const value_list_t *vl, int store_rates, size_t temp_size, + char const *const *http_attrs, size_t http_attrs_num, int data_ttl) { char temp[temp_size]; int status; - status = value_list_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates); + status = value_list_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates, + http_attrs, http_attrs_num, data_ttl); if (status != 0) - return (status); + return status; temp_size = strlen(temp); memcpy(buffer + (*ret_buffer_fill), temp, temp_size + 1); (*ret_buffer_fill) += temp_size; (*ret_buffer_free) -= temp_size; - return (0); + return 0; } /* }}} int format_kairosdb_value_list_nocheck */ int format_kairosdb_initialize(char *buffer, /* {{{ */ @@ -276,7 +288,7 @@ int format_kairosdb_initialize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; buffer_fill = *ret_buffer_fill; buffer_free = *ret_buffer_free; @@ -285,13 +297,13 @@ int format_kairosdb_initialize(char *buffer, /* {{{ */ buffer_fill = 0; if (buffer_free < 3) - return (-ENOMEM); + return -ENOMEM; memset(buffer, 0, buffer_free); *ret_buffer_fill = buffer_fill; *ret_buffer_free = buffer_free; - return (0); + return 0; } /* }}} int format_kairosdb_initialize */ int format_kairosdb_finalize(char *buffer, /* {{{ */ @@ -300,15 +312,15 @@ int format_kairosdb_finalize(char *buffer, /* {{{ */ if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 2) - return (-ENOMEM); + return -ENOMEM; /* Replace the leading comma added in `value_list_to_kairosdb' with a square * bracket. */ if (buffer[0] != ',') - return (-EINVAL); + return -EINVAL; buffer[0] = '['; pos = *ret_buffer_fill; @@ -318,23 +330,27 @@ int format_kairosdb_finalize(char *buffer, /* {{{ */ (*ret_buffer_fill)++; (*ret_buffer_free)--; - return (0); + return 0; } /* }}} int format_kairosdb_finalize */ int format_kairosdb_value_list(char *buffer, /* {{{ */ size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds, const value_list_t *vl, - int store_rates) { + int store_rates, char const *const *http_attrs, + size_t http_attrs_num, int data_ttl) { if ((buffer == NULL) || (ret_buffer_fill == NULL) || (ret_buffer_free == NULL) || (ds == NULL) || (vl == NULL)) - return (-EINVAL); + return -EINVAL; if (*ret_buffer_free < 3) - return (-ENOMEM); - - return (format_kairosdb_value_list_nocheck( - buffer, ret_buffer_fill, ret_buffer_free, ds, vl, store_rates, - (*ret_buffer_free) - 2)); + return -ENOMEM; + + return format_kairosdb_value_list_nocheck(buffer, ret_buffer_fill, + ret_buffer_free, ds, vl, + store_rates, + (*ret_buffer_free) - 2, + http_attrs, http_attrs_num, + data_ttl); } /* }}} int format_kairosdb_value_list */ /* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_format_kairosdb.h b/src/utils_format_kairosdb.h index 9174318d..3a4c7c77 100644 --- a/src/utils_format_kairosdb.h +++ b/src/utils_format_kairosdb.h @@ -39,7 +39,9 @@ int format_kairosdb_initialize(char *buffer, size_t *ret_buffer_fill, size_t *ret_buffer_free); int format_kairosdb_value_list(char *buffer, size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds, - const value_list_t *vl, int store_rates); + const value_list_t *vl, int store_rates, + char const *const *http_attrs, + size_t http_attrs_num, int data_ttl); int format_kairosdb_finalize(char *buffer, size_t *ret_buffer_fill, size_t *ret_buffer_free); diff --git a/src/utils_ignorelist.c b/src/utils_ignorelist.c new file mode 100644 index 00000000..29b2af21 --- /dev/null +++ b/src/utils_ignorelist.c @@ -0,0 +1,309 @@ +/** + * collectd - src/utils_ignorelist.c + * Copyright (C) 2006 Lubos Stanek + * Copyright (C) 2008 Florian Forster + * + * This program is free software; you can redistribute it and/ + * or modify it under the terms of the GNU General Public Li- + * cence as published by the Free Software Foundation; either + * version 2 of the Licence, or any later version. + * + * This program is distributed in the hope that it will be use- + * ful, but WITHOUT ANY WARRANTY; without even the implied war- + * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public Licence 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 + * + * Authors: + * Lubos Stanek + * Florian Forster + **/ +/** + * ignorelist handles plugin's list of configured collectable + * entries with global ignore action + **/ +/** + * Usage: + * + * Define plugin's global pointer variable of type ignorelist_t: + * ignorelist_t *myconfig_ignore; + * If you know the state of the global ignore (IgnoreSelected), + * allocate the variable with: + * myconfig_ignore = ignorelist_create (YourKnownIgnore); + * If you do not know the state of the global ignore, + * initialize the global variable and set the ignore flag later: + * myconfig_ignore = ignorelist_init (); + * Append single entries in your cf_register'ed callback function: + * ignorelist_add (myconfig_ignore, newentry); + * When you hit the IgnoreSelected config option, + * offer it to the list: + * ignorelist_ignore (myconfig_ignore, instantly_got_value_of_ignore); + * That is all for the ignorelist initialization. + * Later during read and write (plugin's registered functions) get + * the information whether this entry would be collected or not: + * if (ignorelist_match (myconfig_ignore, thisentry)) + * return; + **/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include "common.h" +#include "plugin.h" +#include "utils_ignorelist.h" + +/* + * private prototypes + */ +struct ignorelist_item_s { +#if HAVE_REGEX_H + regex_t *rmatch; /* regular expression entry identification */ +#endif + char *smatch; /* string entry identification */ + struct ignorelist_item_s *next; +}; +typedef struct ignorelist_item_s ignorelist_item_t; + +struct ignorelist_s { + int ignore; /* ignore entries */ + ignorelist_item_t *head; /* pointer to the first entry */ +}; + +/* *** *** *** ********************************************* *** *** *** */ +/* *** *** *** *** *** *** private functions *** *** *** *** *** *** */ +/* *** *** *** ********************************************* *** *** *** */ + +static inline void ignorelist_append(ignorelist_t *il, + ignorelist_item_t *item) { + assert((il != NULL) && (item != NULL)); + + item->next = il->head; + il->head = item; +} + +#if HAVE_REGEX_H +static int ignorelist_append_regex(ignorelist_t *il, const char *re_str) { + regex_t *re; + ignorelist_item_t *entry; + int status; + + re = calloc(1, sizeof(*re)); + if (re == NULL) { + ERROR("ignorelist_append_regex: calloc failed."); + return ENOMEM; + } + + status = regcomp(re, re_str, REG_EXTENDED); + if (status != 0) { + char errbuf[1024]; + (void)regerror(status, re, errbuf, sizeof(errbuf)); + ERROR("utils_ignorelist: regcomp failed: %s", errbuf); + ERROR("ignorelist_append_regex: Compiling regular expression \"%s\" " + "failed: %s", + re_str, errbuf); + sfree(re); + return status; + } + + entry = calloc(1, sizeof(*entry)); + if (entry == NULL) { + ERROR("ignorelist_append_regex: calloc failed."); + regfree(re); + sfree(re); + return ENOMEM; + } + entry->rmatch = re; + + ignorelist_append(il, entry); + return 0; +} /* int ignorelist_append_regex */ +#endif + +static int ignorelist_append_string(ignorelist_t *il, const char *entry) { + ignorelist_item_t *new; + + /* create new entry */ + if ((new = calloc(1, sizeof(*new))) == NULL) { + ERROR("cannot allocate new entry"); + return 1; + } + new->smatch = sstrdup(entry); + + /* append new entry */ + ignorelist_append(il, new); + + return 0; +} /* int ignorelist_append_string(ignorelist_t *il, const char *entry) */ + +#if HAVE_REGEX_H +/* + * check list for entry regex match + * return 1 if found + */ +static int ignorelist_match_regex(ignorelist_item_t *item, const char *entry) { + assert((item != NULL) && (item->rmatch != NULL) && (entry != NULL) && + (strlen(entry) > 0)); + + /* match regex */ + if (regexec(item->rmatch, entry, 0, NULL, 0) == 0) + return 1; + + return 0; +} /* int ignorelist_match_regex (ignorelist_item_t *item, const char *entry) */ +#endif + +/* + * check list for entry string match + * return 1 if found + */ +static int ignorelist_match_string(ignorelist_item_t *item, const char *entry) { + assert((item != NULL) && (item->smatch != NULL) && (entry != NULL) && + (strlen(entry) > 0)); + + if (strcmp(entry, item->smatch) == 0) + return 1; + + return 0; +} /* int ignorelist_match_string (ignorelist_item_t *item, const char *entry) */ + +/* *** *** *** ******************************************** *** *** *** */ +/* *** *** *** *** *** *** public functions *** *** *** *** *** *** */ +/* *** *** *** ******************************************** *** *** *** */ + +/* + * create the ignorelist_t with known ignore state + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_create(int invert) { + ignorelist_t *il; + + il = calloc(1, sizeof(*il)); + if (il == NULL) + return NULL; + + /* + * ->ignore == 0 => collect + * ->ignore == 1 => ignore + */ + il->ignore = invert ? 0 : 1; + + return il; +} /* ignorelist_t *ignorelist_create (int ignore) */ + +/* + * free memory used by ignorelist_t + */ +void ignorelist_free(ignorelist_t *il) { + ignorelist_item_t *this; + ignorelist_item_t *next; + + if (il == NULL) + return; + + for (this = il->head; this != NULL; this = next) { + next = this->next; +#if HAVE_REGEX_H + if (this->rmatch != NULL) { + regfree(this->rmatch); + sfree(this->rmatch); + this->rmatch = NULL; + } +#endif + if (this->smatch != NULL) { + sfree(this->smatch); + this->smatch = NULL; + } + sfree(this); + } + + sfree(il); +} /* void ignorelist_destroy (ignorelist_t *il) */ + +/* + * set ignore state of the ignorelist_t + */ +void ignorelist_set_invert(ignorelist_t *il, int invert) { + if (il == NULL) { + DEBUG("ignore call with ignorelist_t == NULL"); + return; + } + + il->ignore = invert ? 0 : 1; +} /* void ignorelist_set_invert (ignorelist_t *il, int ignore) */ + +/* + * append entry into ignorelist_t + * return 0 for success + */ +int ignorelist_add(ignorelist_t *il, const char *entry) { + size_t len; + + if (il == NULL) { + DEBUG("add called with ignorelist_t == NULL"); + return 1; + } + + len = strlen(entry); + + /* append nothing */ + if (len == 0) { + DEBUG("not appending: empty entry"); + return 1; + } + +#if HAVE_REGEX_H + /* regex string is enclosed in "/.../" */ + if ((len > 2) && (entry[0] == '/') && entry[len - 1] == '/') { + char *copy; + int status; + + /* skip leading slash */ + copy = strdup(entry + 1); + if (copy == NULL) + return ENOMEM; + + /* trim trailing slash */ + copy[strlen(copy) - 1] = 0; + + status = ignorelist_append_regex(il, copy); + sfree(copy); + return status; + } +#endif + + return ignorelist_append_string(il, entry); +} /* int ignorelist_add (ignorelist_t *il, const char *entry) */ + +/* + * check list for entry + * return 1 for ignored entry + */ +int ignorelist_match(ignorelist_t *il, const char *entry) { + /* if no entries, collect all */ + if ((il == NULL) || (il->head == NULL)) + return 0; + + if ((entry == NULL) || (strlen(entry) == 0)) + return 0; + + /* traverse list and check entries */ + for (ignorelist_item_t *traverse = il->head; traverse != NULL; + traverse = traverse->next) { +#if HAVE_REGEX_H + if (traverse->rmatch != NULL) { + if (ignorelist_match_regex(traverse, entry)) + return il->ignore; + } else +#endif + { + if (ignorelist_match_string(traverse, entry)) + return il->ignore; + } + } /* for traverse */ + + return 1 - il->ignore; +} /* int ignorelist_match (ignorelist_t *il, const char *entry) */ diff --git a/src/utils_ignorelist.h b/src/utils_ignorelist.h new file mode 100644 index 00000000..a7fa86d5 --- /dev/null +++ b/src/utils_ignorelist.h @@ -0,0 +1,69 @@ +/** + * collectd - src/utils_ignorelist.h + * Copyright (C) 2006 Lubos Stanek + * + * This program is free software; you can redistribute it and/ + * or modify it under the terms of the GNU General Public Li- + * cence as published by the Free Software Foundation; either + * version 2 of the Licence, or any later version. + * + * This program is distributed in the hope that it will be use- + * ful, but WITHOUT ANY WARRANTY; without even the implied war- + * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public Licence 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 + * + * Authors: + * Lubos Stanek + **/ +/** + * ignorelist handles plugin's list of configured collectable + * entries with global ignore action + **/ + +#ifndef UTILS_IGNORELIST_H +#define UTILS_IGNORELIST_H 1 + +#include "collectd.h" + +#if HAVE_REGEX_H +#include +#endif + +/* public prototypes */ + +struct ignorelist_s; +typedef struct ignorelist_s ignorelist_t; + +/* + * create the ignorelist_t with known ignore state + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_create(int invert); + +/* + * free memory used by ignorelist_t + */ +void ignorelist_free(ignorelist_t *il); + +/* + * set ignore state of the ignorelist_t + */ +void ignorelist_set_invert(ignorelist_t *il, int invert); + +/* + * append entry to ignorelist_t + * returns zero on success, non-zero upon failure. + */ +int ignorelist_add(ignorelist_t *il, const char *entry); + +/* + * check list for entry + * return 1 for ignored entry + */ +int ignorelist_match(ignorelist_t *il, const char *entry); + +#endif /* UTILS_IGNORELIST_H */ diff --git a/src/utils_latency.c b/src/utils_latency.c index f0311e84..625fc42e 100644 --- a/src/utils_latency.c +++ b/src/utils_latency.c @@ -119,11 +119,11 @@ latency_counter_t *latency_counter_create(void) /* {{{ */ lc = calloc(1, sizeof(*lc)); if (lc == NULL) - return (NULL); + return NULL; lc->bin_width = HISTOGRAM_DEFAULT_BIN_WIDTH; latency_counter_reset(lc); - return (lc); + return lc; } /* }}} latency_counter_t *latency_counter_create */ void latency_counter_destroy(latency_counter_t *lc) /* {{{ */ @@ -198,29 +198,29 @@ void latency_counter_reset(latency_counter_t *lc) /* {{{ */ cdtime_t latency_counter_get_min(latency_counter_t *lc) /* {{{ */ { if (lc == NULL) - return (0); - return (lc->min); + return 0; + return lc->min; } /* }}} cdtime_t latency_counter_get_min */ cdtime_t latency_counter_get_max(latency_counter_t *lc) /* {{{ */ { if (lc == NULL) - return (0); - return (lc->max); + return 0; + return lc->max; } /* }}} cdtime_t latency_counter_get_max */ cdtime_t latency_counter_get_sum(latency_counter_t *lc) /* {{{ */ { if (lc == NULL) - return (0); - return (lc->sum); + return 0; + return lc->sum; } /* }}} cdtime_t latency_counter_get_sum */ size_t latency_counter_get_num(latency_counter_t *lc) /* {{{ */ { if (lc == NULL) - return (0); - return (lc->num); + return 0; + return lc->num; } /* }}} size_t latency_counter_get_num */ cdtime_t latency_counter_get_average(latency_counter_t *lc) /* {{{ */ @@ -228,10 +228,10 @@ cdtime_t latency_counter_get_average(latency_counter_t *lc) /* {{{ */ double average; if ((lc == NULL) || (lc->num == 0)) - return (0); + return 0; average = CDTIME_T_TO_DOUBLE(lc->sum) / ((double)lc->num); - return (DOUBLE_TO_CDTIME_T(average)); + return DOUBLE_TO_CDTIME_T(average); } /* }}} cdtime_t latency_counter_get_average */ cdtime_t latency_counter_get_percentile(latency_counter_t *lc, /* {{{ */ @@ -245,7 +245,7 @@ cdtime_t latency_counter_get_percentile(latency_counter_t *lc, /* {{{ */ size_t i; if ((lc == NULL) || (lc->num == 0) || !((percent > 0.0) && (percent < 100.0))) - return (0); + return 0; /* Find index i so that at least "percent" events are within i+1 ms. */ percent_upper = 0.0; @@ -264,13 +264,13 @@ cdtime_t latency_counter_get_percentile(latency_counter_t *lc, /* {{{ */ } if (i >= HISTOGRAM_NUM_BINS) - return (0); + return 0; assert(percent_upper >= percent); assert(percent_lower < percent); if (i == 0) - return (lc->bin_width); + return lc->bin_width; latency_lower = ((cdtime_t)i) * lc->bin_width; p = (percent - percent_lower) / (percent_upper - percent_lower); @@ -280,19 +280,19 @@ cdtime_t latency_counter_get_percentile(latency_counter_t *lc, /* {{{ */ DEBUG("latency_counter_get_percentile: latency_interpolated = %.3f", CDTIME_T_TO_DOUBLE(latency_interpolated)); - return (latency_interpolated); + return latency_interpolated; } /* }}} cdtime_t latency_counter_get_percentile */ double latency_counter_get_rate(const latency_counter_t *lc, /* {{{ */ cdtime_t lower, cdtime_t upper, const cdtime_t now) { if ((lc == NULL) || (lc->num == 0)) - return (NAN); + return NAN; if (upper && (upper < lower)) - return (NAN); + return NAN; if (lower == upper) - return (0); + return 0; /* Buckets have an exclusive lower bound and an inclusive upper bound. That * means that the first bucket, index 0, represents (0-bin_width]. That means @@ -305,7 +305,7 @@ double latency_counter_get_rate(const latency_counter_t *lc, /* {{{ */ /* lower is greater than the longest latency observed => rate is zero. */ if (lower_bin >= HISTOGRAM_NUM_BINS) - return (0); + return 0; cdtime_t upper_bin = HISTOGRAM_NUM_BINS - 1; if (upper) @@ -342,5 +342,3 @@ double latency_counter_get_rate(const latency_counter_t *lc, /* {{{ */ return sum / (CDTIME_T_TO_DOUBLE(now - lc->start_time)); } /* }}} double latency_counter_get_rate */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_latency.h b/src/utils_latency.h index 85493e1a..9d878dab 100644 --- a/src/utils_latency.h +++ b/src/utils_latency.h @@ -61,5 +61,3 @@ cdtime_t latency_counter_get_percentile(latency_counter_t *lc, double percent); */ double latency_counter_get_rate(const latency_counter_t *lc, cdtime_t lower, cdtime_t upper, const cdtime_t now); - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/utils_latency_config.c b/src/utils_latency_config.c index 674e2752..d0832cbc 100644 --- a/src/utils_latency_config.c +++ b/src/utils_latency_config.c @@ -91,7 +91,7 @@ static int latency_config_add_bucket(latency_config_t *conf, oconfig_item_t *ci, DOUBLE_TO_CDTIME_T(ci->values[1].value.number); conf->buckets_num++; - return (0); + return 0; } /* int latency_config_add_bucket */ int latency_config(latency_config_t *conf, oconfig_item_t *ci, diff --git a/src/utils_latency_test.c b/src/utils_latency_test.c index ef29d8bd..427a1592 100644 --- a/src/utils_latency_test.c +++ b/src/utils_latency_test.c @@ -232,5 +232,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/utils_lua.c b/src/utils_lua.c index dcb84afa..4e570ff3 100644 --- a/src/utils_lua.c +++ b/src/utils_lua.c @@ -35,7 +35,7 @@ static int ltoc_values(lua_State *L, /* {{{ */ const data_set_t *ds, value_t *ret_values) { if (!lua_istable(L, -1)) { WARNING("ltoc_values: not a table"); - return (-1); + return -1; } /* Push initial key */ @@ -60,10 +60,10 @@ static int ltoc_values(lua_State *L, /* {{{ */ WARNING("ltoc_values: invalid size for datasource \"%s\": expected %zu, " "got %zu", ds->type, ds->ds_num, i); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int ltoc_values */ static int ltoc_table_values(lua_State *L, int idx, /* {{{ */ @@ -78,7 +78,7 @@ static int ltoc_table_values(lua_State *L, int idx, /* {{{ */ "value, not a table.", lua_typename(L, lua_type(L, -1))); lua_pop(L, 1); - return (-1); + return -1; } vl->values_len = ds->ds_num; @@ -87,7 +87,7 @@ static int ltoc_table_values(lua_State *L, int idx, /* {{{ */ ERROR("utils_lua: calloc failed."); vl->values_len = 0; lua_pop(L, 1); - return (-1); + return -1; } int status = ltoc_values(L, ds, vl->values); @@ -99,7 +99,7 @@ static int ltoc_table_values(lua_State *L, int idx, /* {{{ */ sfree(vl->values); } - return (status); + return status; } /* }}} int ltoc_table_values */ static int luaC_pushvalues(lua_State *L, const data_set_t *ds, @@ -114,7 +114,7 @@ static int luaC_pushvalues(lua_State *L, const data_set_t *ds, lua_settable(L, -3); } - return (0); + return 0; } /* }}} int luaC_pushvalues */ static int luaC_pushdstypes(lua_State *L, const data_set_t *ds) /* {{{ */ @@ -126,7 +126,7 @@ static int luaC_pushdstypes(lua_State *L, const data_set_t *ds) /* {{{ */ lua_settable(L, -3); } - return (0); + return 0; } /* }}} int luaC_pushdstypes */ static int luaC_pushdsnames(lua_State *L, const data_set_t *ds) /* {{{ */ @@ -138,7 +138,7 @@ static int luaC_pushdsnames(lua_State *L, const data_set_t *ds) /* {{{ */ lua_settable(L, -3); } - return (0); + return 0; } /* }}} int luaC_pushdsnames */ /* @@ -147,21 +147,21 @@ static int luaC_pushdsnames(lua_State *L, const data_set_t *ds) /* {{{ */ cdtime_t luaC_tocdtime(lua_State *L, int idx) /* {{{ */ { if (!lua_isnumber(L, /* stack pos = */ idx)) - return (0); + return 0; double d = lua_tonumber(L, idx); - return (DOUBLE_TO_CDTIME_T(d)); + return DOUBLE_TO_CDTIME_T(d); } /* }}} int ltoc_table_cdtime */ int luaC_tostringbuffer(lua_State *L, int idx, /* {{{ */ char *buffer, size_t buffer_size) { const char *str = lua_tostring(L, idx); if (str == NULL) - return (-1); + return -1; sstrncpy(buffer, str, buffer_size); - return (0); + return 0; } /* }}} int luaC_tostringbuffer */ value_t luaC_tovalue(lua_State *L, int idx, int ds_type) /* {{{ */ @@ -169,7 +169,7 @@ value_t luaC_tovalue(lua_State *L, int idx, int ds_type) /* {{{ */ value_t v = {0}; if (!lua_isnumber(L, idx)) - return (v); + return v; if (ds_type == DS_TYPE_GAUGE) v.gauge = (gauge_t)lua_tonumber(L, /* stack pos = */ -1); @@ -180,7 +180,7 @@ value_t luaC_tovalue(lua_State *L, int idx, int ds_type) /* {{{ */ else if (ds_type == DS_TYPE_ABSOLUTE) v.absolute = (absolute_t)lua_tointeger(L, /* stack pos = */ -1); - return (v); + return v; } /* }}} value_t luaC_tovalue */ value_list_t *luaC_tovaluelist(lua_State *L, int idx) /* {{{ */ @@ -197,13 +197,13 @@ value_list_t *luaC_tovaluelist(lua_State *L, int idx) /* {{{ */ /* Check that idx is in the valid range */ if ((idx < 1) || (idx > lua_gettop(L))) { DEBUG("luaC_tovaluelist: idx(%d), top(%d)", idx, stack_top_before); - return (NULL); + return NULL; } value_list_t *vl = calloc(1, sizeof(*vl)); if (vl == NULL) { DEBUG("luaC_tovaluelist: calloc failed"); - return (NULL); + return NULL; } /* Push initial key */ @@ -243,20 +243,20 @@ value_list_t *luaC_tovaluelist(lua_State *L, int idx) /* {{{ */ if (ds == NULL) { INFO("utils_lua: Unable to lookup type \"%s\".", vl->type); sfree(vl); - return (NULL); + return NULL; } int status = ltoc_table_values(L, idx, ds, vl); if (status != 0) { WARNING("utils_lua: ltoc_table_values failed."); sfree(vl); - return (NULL); + return NULL; } #if COLLECT_DEBUG assert(stack_top_before == lua_gettop(L)); #endif - return (vl); + return vl; } /* }}} value_list_t *luaC_tovaluelist */ int luaC_pushcdtime(lua_State *L, cdtime_t t) /* {{{ */ @@ -264,7 +264,7 @@ int luaC_pushcdtime(lua_State *L, cdtime_t t) /* {{{ */ double d = CDTIME_T_TO_DOUBLE(t); lua_pushnumber(L, (lua_Number)d); - return (0); + return 0; } /* }}} int luaC_pushcdtime */ int luaC_pushvalue(lua_State *L, value_t v, int ds_type) /* {{{ */ @@ -278,8 +278,8 @@ int luaC_pushvalue(lua_State *L, value_t v, int ds_type) /* {{{ */ else if (ds_type == DS_TYPE_ABSOLUTE) lua_pushinteger(L, (lua_Integer)v.absolute); else - return (-1); - return (0); + return -1; + return 0; } /* }}} int luaC_pushvalue */ int luaC_pushvaluelist(lua_State *L, const data_set_t *ds, @@ -315,7 +315,5 @@ int luaC_pushvaluelist(lua_State *L, const data_set_t *ds, luaC_pushcdtime(L, vl->interval); lua_setfield(L, -2, "interval"); - return (0); + return 0; } /* }}} int luaC_pushvaluelist */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_lua.h b/src/utils_lua.h index 8ff507c7..61d9070e 100644 --- a/src/utils_lua.h +++ b/src/utils_lua.h @@ -53,4 +53,3 @@ int luaC_pushvaluelist(lua_State *L, const data_set_t *ds, const value_list_t *vl); #endif /* UTILS_LUA_H */ -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_match.c b/src/utils_match.c index 11b3f74f..df70fbec 100644 --- a/src/utils_match.c +++ b/src/utils_match.c @@ -55,21 +55,21 @@ static char *match_substr(const char *str, int begin, int end) { size_t ret_len; if ((begin < 0) || (end < 0) || (begin >= end)) - return (NULL); + return NULL; if ((size_t)end > (strlen(str) + 1)) { ERROR("utils_match: match_substr: `end' points after end of string."); - return (NULL); + return NULL; } ret_len = end - begin; ret = malloc(ret_len + 1); if (ret == NULL) { ERROR("utils_match: match_substr: malloc failed."); - return (NULL); + return NULL; } sstrncpy(ret, str + begin, ret_len + 1); - return (ret); + return ret; } /* char *match_substr */ static int default_callback(const char __attribute__((unused)) * str, @@ -84,20 +84,20 @@ static int default_callback(const char __attribute__((unused)) * str, if (data->ds_type & UTILS_MATCH_CF_GAUGE_INC) { data->value.gauge = isnan(data->value.gauge) ? 1 : data->value.gauge + 1; data->values_num++; - return (0); + return 0; } if (matches_num < 2) - return (-1); + return -1; value = (gauge_t)strtod(matches[1], &endptr); if (matches[1] == endptr) - return (-1); + return -1; if (data->ds_type & UTILS_MATCH_CF_GAUGE_DIST) { latency_counter_add(data->latency, DOUBLE_TO_CDTIME_T(value)); data->values_num++; - return (0); + return 0; } if ((data->values_num == 0) || @@ -117,7 +117,7 @@ static int default_callback(const char __attribute__((unused)) * str, data->value.gauge += value; } else { ERROR("utils_match: default_callback: obj->ds_type is invalid!"); - return (-1); + return -1; } data->values_num++; @@ -128,15 +128,15 @@ static int default_callback(const char __attribute__((unused)) * str, if (data->ds_type & UTILS_MATCH_CF_COUNTER_INC) { data->value.counter++; data->values_num++; - return (0); + return 0; } if (matches_num < 2) - return (-1); + return -1; value = (counter_t)strtoull(matches[1], &endptr, 0); if (matches[1] == endptr) - return (-1); + return -1; if (data->ds_type & UTILS_MATCH_CF_COUNTER_SET) data->value.counter = value; @@ -144,7 +144,7 @@ static int default_callback(const char __attribute__((unused)) * str, data->value.counter += value; else { ERROR("utils_match: default_callback: obj->ds_type is invalid!"); - return (-1); + return -1; } data->values_num++; @@ -155,15 +155,15 @@ static int default_callback(const char __attribute__((unused)) * str, if (data->ds_type & UTILS_MATCH_CF_DERIVE_INC) { data->value.derive++; data->values_num++; - return (0); + return 0; } if (matches_num < 2) - return (-1); + return -1; value = (derive_t)strtoll(matches[1], &endptr, 0); if (matches[1] == endptr) - return (-1); + return -1; if (data->ds_type & UTILS_MATCH_CF_DERIVE_SET) data->value.derive = value; @@ -171,7 +171,7 @@ static int default_callback(const char __attribute__((unused)) * str, data->value.derive += value; else { ERROR("utils_match: default_callback: obj->ds_type is invalid!"); - return (-1); + return -1; } data->values_num++; @@ -180,26 +180,26 @@ static int default_callback(const char __attribute__((unused)) * str, char *endptr = NULL; if (matches_num < 2) - return (-1); + return -1; value = (absolute_t)strtoull(matches[1], &endptr, 0); if (matches[1] == endptr) - return (-1); + return -1; if (data->ds_type & UTILS_MATCH_CF_ABSOLUTE_SET) data->value.absolute = value; else { ERROR("utils_match: default_callback: obj->ds_type is invalid!"); - return (-1); + return -1; } data->values_num++; } else { ERROR("utils_match: default_callback: obj->ds_type is invalid!"); - return (-1); + return -1; } - return (0); + return 0; } /* int default_callback */ static void match_simple_free(void *data) { @@ -227,13 +227,13 @@ match_create_callback(const char *regex, const char *excluderegex, obj = calloc(1, sizeof(*obj)); if (obj == NULL) - return (NULL); + return NULL; status = regcomp(&obj->regex, regex, REG_EXTENDED | REG_NEWLINE); if (status != 0) { ERROR("Compiling the regular expression \"%s\" failed.", regex); sfree(obj); - return (NULL); + return NULL; } obj->flags |= UTILS_MATCH_FLAGS_REGEX; @@ -243,7 +243,7 @@ match_create_callback(const char *regex, const char *excluderegex, ERROR("Compiling the excluding regular expression \"%s\" failed.", excluderegex); sfree(obj); - return (NULL); + return NULL; } obj->flags |= UTILS_MATCH_FLAGS_EXCLUDE_REGEX; } @@ -252,7 +252,7 @@ match_create_callback(const char *regex, const char *excluderegex, obj->user_data = user_data; obj->free = free_user_data; - return (obj); + return obj; } /* cu_match_t *match_create_callback */ cu_match_t *match_create_simple(const char *regex, const char *excluderegex, @@ -262,7 +262,7 @@ cu_match_t *match_create_simple(const char *regex, const char *excluderegex, user_data = calloc(1, sizeof(*user_data)); if (user_data == NULL) - return (NULL); + return NULL; user_data->ds_type = match_ds_type; if ((match_ds_type & UTILS_MATCH_DS_TYPE_GAUGE) && @@ -271,7 +271,7 @@ cu_match_t *match_create_simple(const char *regex, const char *excluderegex, if (user_data->latency == NULL) { ERROR("match_create_simple(): latency_counter_create() failed."); free(user_data); - return (NULL); + return NULL; } } @@ -282,9 +282,9 @@ cu_match_t *match_create_simple(const char *regex, const char *excluderegex, latency_counter_destroy(user_data->latency); sfree(user_data); - return (NULL); + return NULL; } - return (obj); + return obj; } /* cu_match_t *match_create_simple */ void match_value_reset(cu_match_value_t *mv) { @@ -320,7 +320,7 @@ int match_apply(cu_match_t *obj, const char *str) { size_t matches_num; if ((obj == NULL) || (str == NULL)) - return (-1); + return -1; if (obj->flags & UTILS_MATCH_FLAGS_EXCLUDE_REGEX) { status = @@ -329,7 +329,7 @@ int match_apply(cu_match_t *obj, const char *str) { /* Regex did match, so exclude this line */ if (status == 0) { DEBUG("ExludeRegex matched, don't count that line\n"); - return (0); + return 0; } } @@ -338,7 +338,7 @@ int match_apply(cu_match_t *obj, const char *str) { /* Regex did not match */ if (status != 0) - return (0); + return 0; for (matches_num = 0; matches_num < STATIC_ARRAY_SIZE(matches); matches_num++) { @@ -366,13 +366,11 @@ int match_apply(cu_match_t *obj, const char *str) { sfree(matches[i]); } - return (status); + return status; } /* int match_apply */ void *match_get_user_data(cu_match_t *obj) { if (obj == NULL) - return (NULL); - return (obj->user_data); + return NULL; + return obj->user_data; } /* void *match_get_user_data */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_match.h b/src/utils_match.h index 1383530c..1cff1eb7 100644 --- a/src/utils_match.h +++ b/src/utils_match.h @@ -177,5 +177,3 @@ int match_apply(cu_match_t *obj, const char *str); void *match_get_user_data(cu_match_t *obj); #endif /* UTILS_MATCH_H */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_mount.c b/src/utils_mount.c index 87f26df0..bbc4c209 100644 --- a/src/utils_mount.c +++ b/src/utils_mount.c @@ -270,11 +270,11 @@ static void uuidcache_init(void) { static unsigned char fromhex(char c) { if (isdigit((int)c)) { - return (c - '0'); + return c - '0'; } else if (islower((int)c)) { - return (c - 'a' + 10); + return c - 'a' + 10; } else { - return (c - 'A' + 10); + return c - 'A' + 10; } } @@ -335,7 +335,7 @@ static char *get_device_name(const char *optstr) { char *rc; if (optstr == NULL) { - return (NULL); + return NULL; } else if (strncmp(optstr, "UUID=", 5) == 0) { DEBUG("utils_mount: TODO: check UUID= code!"); rc = get_spec_by_uuid(optstr + 5); @@ -401,7 +401,7 @@ static cu_mount_t *cu_mount_listmntent(void) { last->next = NULL; } /* for(p = mntlist; p; p = p->next) */ - return (last); + return last; } /* cu_mount_t *cu_mount_listmntent(void) */ /* #endif HAVE_LISTMNTENT */ @@ -435,11 +435,11 @@ static cu_mount_t *cu_mount_getfsstat(void) { DEBUG("utils_mount: getv?fsstat failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); #endif /* COLLECT_DEBUG */ - return (NULL); + return NULL; } if ((buf = calloc(bufsize, sizeof(*buf))) == NULL) - return (NULL); + return NULL; /* The bufsize needs to be passed in bytes. Really. This is not in the * manpage.. -octo */ @@ -451,7 +451,7 @@ static cu_mount_t *cu_mount_getfsstat(void) { sstrerror(errno, errbuf, sizeof(errbuf))); #endif /* COLLECT_DEBUG */ free(buf); - return (NULL); + return NULL; } for (int i = 0; i < num; i++) { @@ -478,7 +478,7 @@ static cu_mount_t *cu_mount_getfsstat(void) { free(buf); - return (first); + return first; } /* #endif HAVE_GETVFSSTAT || HAVE_GETFSSTAT */ @@ -498,7 +498,7 @@ static cu_mount_t *cu_mount_gen_getmntent(void) { char errbuf[1024]; ERROR("fopen (%s): %s", COLLECTD_MNTTAB, sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } while (getmntent(fp, &mt) == 0) { @@ -525,7 +525,7 @@ static cu_mount_t *cu_mount_gen_getmntent(void) { fclose(fp); - return (first); + return first; } /* static cu_mount_t *cu_mount_gen_getmntent (void) */ /* #endif HAVE_TWO_GETMNTENT || HAVE_GEN_GETMNTENT || HAVE_SUN_GETMNTENT */ @@ -549,7 +549,7 @@ static cu_mount_t *cu_mount_getmntent(void) { char errbuf[1024]; ERROR("setmntent (%s): %s", COLLECTD_MNTTAB, sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } while (getmntent_r(fp, &me, mntbuf, sizeof(mntbuf))) { @@ -580,9 +580,9 @@ static cu_mount_t *cu_mount_getmntent(void) { endmntent(fp); - DEBUG("utils_mount: return (0x%p)", (void *)first); + DEBUG("utils_mount: return 0x%p", (void *)first); - return (first); + return first; } /* HAVE_GETMNTENT_R */ #elif HAVE_ONE_GETMNTENT @@ -600,7 +600,7 @@ static cu_mount_t *cu_mount_getmntent(void) { char errbuf[1024]; ERROR("setmntent (%s): %s", COLLECTD_MNTTAB, sstrerror(errno, errbuf, sizeof(errbuf))); - return (NULL); + return NULL; } while ((me = getmntent(fp)) != NULL) { @@ -631,9 +631,9 @@ static cu_mount_t *cu_mount_getmntent(void) { endmntent(fp); - DEBUG("utils_mount: return (0x%p)", (void *)first); + DEBUG("utils_mount: return 0x%p", (void *)first); - return (first); + return first; } #endif /* HAVE_ONE_GETMNTENT */ @@ -647,7 +647,7 @@ cu_mount_t *cu_mount_getlist(cu_mount_t **list) { cu_mount_t *last = NULL; if (list == NULL) - return (NULL); + return NULL; if (*list != NULL) { first = *list; @@ -681,7 +681,7 @@ cu_mount_t *cu_mount_getlist(cu_mount_t **list) { while ((last != NULL) && (last->next != NULL)) last = last->next; - return (last); + return last; } /* cu_mount_t *cu_mount_getlist(cu_mount_t **list) */ void cu_mount_freelist(cu_mount_t *list) { diff --git a/src/utils_mount_test.c b/src/utils_mount_test.c index 695038dd..ca65950e 100644 --- a/src/utils_mount_test.c +++ b/src/utils_mount_test.c @@ -75,7 +75,7 @@ DEF_TEST(cu_mount_checkoption) { OK(NULL == cu_mount_checkoption(line_bool, "tw", 1)); OK(NULL == cu_mount_checkoption(line_bool, "thr", 1)); - return (0); + return 0; } DEF_TEST(cu_mount_getoptionvalue) { char line_opts[] = "foo=one,bar=two,qux=three"; @@ -100,7 +100,7 @@ DEF_TEST(cu_mount_getoptionvalue) { OK(NULL == (v = cu_mount_getoptionvalue(line_bool, "four"))); sfree(v); - return (0); + return 0; } int main(void) { @@ -109,5 +109,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/utils_ovs.c b/src/utils_ovs.c new file mode 100644 index 00000000..2f7baea0 --- /dev/null +++ b/src/utils_ovs.c @@ -0,0 +1,1379 @@ +/** + * collectd - src/utils_ovs.c + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Volodymyr Mytnyk + **/ + +/* clang-format off */ +/* + * OVS DB API internal architecture diagram + * +------------------------------------------------------------------------------+ + * |OVS plugin |OVS utils | + * | | +------------------------+ | + * | | | echo handler | JSON request/ | + * | | +--+ (ovs_db_table_echo_cb) +<---+---------+ update event/ | + * | | | | | | | result | + * | | | +------------------------+ | | | + * | | | | +----+---+--------+ | + * | +----------+ | | +------------------------+ | | | | | + * | | update | | | | update handler | | | YAJL | JSON | | + * | | callback +<-------+(ovs_db_table_update_cp)+<---+ | parser | reader | | + * | +----------+ | | | | | | | | | + * | | | +------------------------+ | +--------+---+----+ | + * | | | | ^ | + * | +----------+ | | +------------------------+ | | | + * | | result | | | | result handler | | | | + * | | callback +<-------+ (ovs_db_result_cb) +<---+ JSON raw | | + * | +----------+ | | | | data | | + * | | | +------------------------+ | | + * | | | | | + * | | | +------------------+ +------------+----+ | + * | +----------+ | | |thread| | |thread| | | + * | | init | | | | | reconnect | | | + * | | callback +<---------+ EVENT WORKER +<------------+ POLL WORKER | | + * | +----------+ | | +------------------+ +--------+--------+ | + * | | | ^ | + * +----------------+-------------------------------------------------------------+ + * | | + * JSON|echo reply raw|data + * v v + * +-------------------+----------------------------------------------+-----------+ + * | TCP/UNIX socket | + * +------------------------------------------------------------------------------- + */ +/* clang-format on */ + +/* collectd headers */ +#include "collectd.h" + +#include "common.h" + +/* private headers */ +#include "utils_ovs.h" + +/* system libraries */ +#if HAVE_NETDB_H +#include +#endif +#if HAVE_ARPA_INET_H +#include +#endif +#if HAVE_POLL_H +#include +#endif +#if HAVE_SYS_UN_H +#include +#endif + +#include + +#define OVS_ERROR(fmt, ...) \ + do { \ + ERROR("ovs_utils: " fmt, ##__VA_ARGS__); \ + } while (0) +#define OVS_DEBUG(fmt, ...) \ + do { \ + DEBUG("%s:%d:%s(): " fmt, __FILE__, __LINE__, __FUNCTION__, \ + ##__VA_ARGS__); \ + } while (0) + +#define OVS_DB_POLL_TIMEOUT 1 /* poll receive timeout (sec) */ +#define OVS_DB_POLL_READ_BLOCK_SIZE 512 /* read block size (bytes) */ +#define OVS_DB_DEFAULT_DB_NAME "Open_vSwitch" + +#define OVS_DB_EVENT_TIMEOUT 5 /* event thread timeout (sec) */ +#define OVS_DB_EVENT_TERMINATE 1 +#define OVS_DB_EVENT_CONN_ESTABLISHED 2 +#define OVS_DB_EVENT_CONN_TERMINATED 3 + +#define OVS_DB_POLL_STATE_RUNNING 1 +#define OVS_DB_POLL_STATE_EXITING 2 + +#define OVS_DB_SEND_REQ_TIMEOUT 5 /* send request timeout (sec) */ + +#define OVS_YAJL_CALL(func, ...) \ + do { \ + yajl_gen_ret = yajl_gen_status_ok; \ + if ((yajl_gen_ret = func(__VA_ARGS__)) != yajl_gen_status_ok) \ + goto yajl_gen_failure; \ + } while (0) +#define OVS_YAJL_ERROR_BUFFER_SIZE 1024 +#define OVS_ERROR_BUFF_SIZE 512 +#define OVS_UID_STR_SIZE 17 /* 64-bit HEX string len + '\0' */ + +/* JSON reader internal data */ +struct ovs_json_reader_s { + char *buff_ptr; + size_t buff_size; + size_t buff_offset; + size_t json_offset; +}; +typedef struct ovs_json_reader_s ovs_json_reader_t; + +/* Result callback declaration */ +struct ovs_result_cb_s { + sem_t sync; + ovs_db_result_cb_t call; +}; +typedef struct ovs_result_cb_s ovs_result_cb_t; + +/* Table callback declaration */ +struct ovs_table_cb_s { + ovs_db_table_cb_t call; +}; +typedef struct ovs_table_cb_s ovs_table_cb_t; + +/* Callback declaration */ +struct ovs_callback_s { + uint64_t uid; + union { + ovs_result_cb_t result; + ovs_table_cb_t table; + }; + struct ovs_callback_s *next; + struct ovs_callback_s *prev; +}; +typedef struct ovs_callback_s ovs_callback_t; + +/* Event thread data declaration */ +struct ovs_event_thread_s { + pthread_t tid; + pthread_mutex_t mutex; + pthread_cond_t cond; + int value; +}; +typedef struct ovs_event_thread_s ovs_event_thread_t; + +/* Poll thread data declaration */ +struct ovs_poll_thread_s { + pthread_t tid; + pthread_mutex_t mutex; + int state; +}; +typedef struct ovs_poll_thread_s ovs_poll_thread_t; + +/* OVS DB internal data declaration */ +struct ovs_db_s { + ovs_poll_thread_t poll_thread; + ovs_event_thread_t event_thread; + pthread_mutex_t mutex; + ovs_callback_t *remote_cb; + ovs_db_callback_t cb; + char service[OVS_DB_ADDR_SERVICE_SIZE]; + char node[OVS_DB_ADDR_NODE_SIZE]; + char unix_path[OVS_DB_ADDR_NODE_SIZE]; + int sock; +}; + +/* Global variables */ +static uint64_t ovs_uid = 0; +static pthread_mutex_t ovs_uid_mutex = PTHREAD_MUTEX_INITIALIZER; + +/* Post an event to event thread. + * Possible events are: + * OVS_DB_EVENT_TERMINATE + * OVS_DB_EVENT_CONN_ESTABLISHED + * OVS_DB_EVENT_CONN_TERMINATED + */ +static void ovs_db_event_post(ovs_db_t *pdb, int event) { + pthread_mutex_lock(&pdb->event_thread.mutex); + pdb->event_thread.value = event; + pthread_mutex_unlock(&pdb->event_thread.mutex); + pthread_cond_signal(&pdb->event_thread.cond); +} + +/* Check if POLL thread is still running. Returns + * 1 if running otherwise 0 is returned */ +static _Bool ovs_db_poll_is_running(ovs_db_t *pdb) { + int state = 0; + pthread_mutex_lock(&pdb->poll_thread.mutex); + state = pdb->poll_thread.state; + pthread_mutex_unlock(&pdb->poll_thread.mutex); + return state == OVS_DB_POLL_STATE_RUNNING; +} + +/* Generate unique identifier (UID). It is used by OVS DB API + * to set "id" field for any OVS DB JSON request. */ +static uint64_t ovs_uid_generate() { + uint64_t new_uid; + pthread_mutex_lock(&ovs_uid_mutex); + new_uid = ++ovs_uid; + pthread_mutex_unlock(&ovs_uid_mutex); + return new_uid; +} + +/* + * Callback API. These function are used to store + * registered callbacks in OVS DB API. + */ + +/* Add new callback into OVS DB object */ +static void ovs_db_callback_add(ovs_db_t *pdb, ovs_callback_t *new_cb) { + pthread_mutex_lock(&pdb->mutex); + if (pdb->remote_cb) + pdb->remote_cb->prev = new_cb; + new_cb->next = pdb->remote_cb; + new_cb->prev = NULL; + pdb->remote_cb = new_cb; + pthread_mutex_unlock(&pdb->mutex); +} + +/* Remove callback from OVS DB object */ +static void ovs_db_callback_remove(ovs_db_t *pdb, ovs_callback_t *del_cb) { + pthread_mutex_lock(&pdb->mutex); + ovs_callback_t *pre_cb = del_cb->prev; + ovs_callback_t *next_cb = del_cb->next; + + if (next_cb) + next_cb->prev = del_cb->prev; + + if (pre_cb) + pre_cb->next = del_cb->next; + else + pdb->remote_cb = del_cb->next; + + free(del_cb); + pthread_mutex_unlock(&pdb->mutex); +} + +/* Remove all callbacks form OVS DB object */ +static void ovs_db_callback_remove_all(ovs_db_t *pdb) { + pthread_mutex_lock(&pdb->mutex); + for (ovs_callback_t *del_cb = pdb->remote_cb; pdb->remote_cb; + del_cb = pdb->remote_cb) { + pdb->remote_cb = del_cb->next; + free(del_cb); + } + pdb->remote_cb = NULL; + pthread_mutex_unlock(&pdb->mutex); +} + +/* Get/find callback in OVS DB object by UID. Returns pointer + * to requested callback otherwise NULL is returned. + * + * IMPORTANT NOTE: + * The OVS DB mutex MUST be locked by the caller + * to make sure that returned callback is still valid. + */ +static ovs_callback_t *ovs_db_callback_get(ovs_db_t *pdb, uint64_t uid) { + for (ovs_callback_t *cb = pdb->remote_cb; cb != NULL; cb = cb->next) + if (cb->uid == uid) + return cb; + return NULL; +} + +/* Send all requested data to the socket. Returns 0 if + * ALL request data has been sent otherwise negative value + * is returned */ +static int ovs_db_data_send(const ovs_db_t *pdb, const char *data, size_t len) { + ssize_t nbytes = 0; + size_t rem = len; + size_t off = 0; + + while (rem > 0) { + if ((nbytes = send(pdb->sock, data + off, rem, 0)) <= 0) + return -1; + rem -= (size_t)nbytes; + off += (size_t)nbytes; + } + return 0; +} + +/* + * YAJL (Yet Another JSON Library) helper functions + * Documentation (https://lloyd.github.io/yajl/) + */ + +/* Add null-terminated string into YAJL generator handle (JSON object). + * Similar function to yajl_gen_string() but takes null-terminated string + * instead of string and its length. + * + * jgen - YAJL generator handle allocated by yajl_gen_alloc() + * string - Null-terminated string + */ +static yajl_gen_status ovs_yajl_gen_tstring(yajl_gen hander, + const char *string) { + return yajl_gen_string(hander, (const unsigned char *)string, + strlen(string)); +} + +/* Add YAJL value into YAJL generator handle (JSON object) + * + * jgen - YAJL generator handle allocated by yajl_gen_alloc() + * jval - YAJL value usually returned by yajl_tree_get() + */ +static yajl_gen_status ovs_yajl_gen_val(yajl_gen jgen, yajl_val jval) { + size_t array_len = 0; + yajl_val *jvalues = NULL; + yajl_val jobj_value = NULL; + const char *obj_key = NULL; + size_t obj_len = 0; + yajl_gen_status yajl_gen_ret = yajl_gen_status_ok; + + if (jval == NULL) + return yajl_gen_generation_complete; + + if (YAJL_IS_STRING(jval)) + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, YAJL_GET_STRING(jval)); + else if (YAJL_IS_DOUBLE(jval)) + OVS_YAJL_CALL(yajl_gen_double, jgen, YAJL_GET_DOUBLE(jval)); + else if (YAJL_IS_INTEGER(jval)) + OVS_YAJL_CALL(yajl_gen_double, jgen, YAJL_GET_INTEGER(jval)); + else if (YAJL_IS_TRUE(jval)) + OVS_YAJL_CALL(yajl_gen_bool, jgen, 1); + else if (YAJL_IS_FALSE(jval)) + OVS_YAJL_CALL(yajl_gen_bool, jgen, 0); + else if (YAJL_IS_NULL(jval)) + OVS_YAJL_CALL(yajl_gen_null, jgen); + else if (YAJL_IS_ARRAY(jval)) { + /* create new array and add all elements into the array */ + array_len = YAJL_GET_ARRAY(jval)->len; + jvalues = YAJL_GET_ARRAY(jval)->values; + OVS_YAJL_CALL(yajl_gen_array_open, jgen); + for (size_t i = 0; i < array_len; i++) + OVS_YAJL_CALL(ovs_yajl_gen_val, jgen, jvalues[i]); + OVS_YAJL_CALL(yajl_gen_array_close, jgen); + } else if (YAJL_IS_OBJECT(jval)) { + /* create new object and add all elements into the object */ + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + obj_len = YAJL_GET_OBJECT(jval)->len; + for (size_t i = 0; i < obj_len; i++) { + obj_key = YAJL_GET_OBJECT(jval)->keys[i]; + jobj_value = YAJL_GET_OBJECT(jval)->values[i]; + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, obj_key); + OVS_YAJL_CALL(ovs_yajl_gen_val, jgen, jobj_value); + } + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + } else { + OVS_ERROR("%s() unsupported value type %d (skip)", __FUNCTION__, + (int)(jval)->type); + goto yajl_gen_failure; + } + return yajl_gen_status_ok; + +yajl_gen_failure: + OVS_ERROR("%s() error to generate value", __FUNCTION__); + return yajl_gen_ret; +} + +/* OVS DB echo request handler. When OVS DB sends + * "echo" request to the client, client should generate + * "echo" replay with the same content received in the + * request */ +static int ovs_db_table_echo_cb(const ovs_db_t *pdb, yajl_val jnode) { + yajl_val jparams; + yajl_val jid; + yajl_gen jgen; + size_t resp_len = 0; + const char *resp = NULL; + const char *params_path[] = {"params", NULL}; + const char *id_path[] = {"id", NULL}; + yajl_gen_status yajl_gen_ret; + + if ((jgen = yajl_gen_alloc(NULL)) == NULL) + return -1; + + /* check & get request attributes */ + if ((jparams = yajl_tree_get(jnode, params_path, yajl_t_array)) == NULL || + ((jid = yajl_tree_get(jnode, id_path, yajl_t_any)) == NULL)) { + OVS_ERROR("parse echo request failed"); + goto yajl_gen_failure; + } + + /* generate JSON echo response */ + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "result"); + OVS_YAJL_CALL(ovs_yajl_gen_val, jgen, jparams); + + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "error"); + OVS_YAJL_CALL(yajl_gen_null, jgen); + + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "id"); + OVS_YAJL_CALL(ovs_yajl_gen_val, jgen, jid); + + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + OVS_YAJL_CALL(yajl_gen_get_buf, jgen, (const unsigned char **)&resp, + &resp_len); + + /* send the response */ + OVS_DEBUG("response: %s", resp); + if (ovs_db_data_send(pdb, resp, resp_len) < 0) { + OVS_ERROR("send echo reply failed"); + goto yajl_gen_failure; + } + /* clean up and return success */ + yajl_gen_clear(jgen); + return 0; + +yajl_gen_failure: + /* release memory */ + yajl_gen_clear(jgen); + return -1; +} + +/* Get OVS DB registered callback by YAJL val. The YAJL + * value should be YAJL string (UID). Returns NULL if + * callback hasn't been found. See also ovs_db_callback_get() + * description for addition info. + */ +static ovs_callback_t *ovs_db_table_callback_get(ovs_db_t *pdb, yajl_val jid) { + char *endptr = NULL; + const char *suid = NULL; + uint64_t uid; + + if (jid && YAJL_IS_STRING(jid)) { + suid = YAJL_GET_STRING(jid); + uid = (uint64_t)strtoul(suid, &endptr, 16); + if (*endptr == '\0' && uid) + return ovs_db_callback_get(pdb, uid); + } + + return NULL; +} + +/* OVS DB table update event handler. + * This callback is called by POLL thread if OVS DB + * table update callback is received from the DB + * server. Once registered callback found, it's called + * by this handler. */ +static int ovs_db_table_update_cb(ovs_db_t *pdb, yajl_val jnode) { + ovs_callback_t *cb = NULL; + yajl_val jvalue; + yajl_val jparams; + yajl_val jtable_updates; + const char *params_path[] = {"params", NULL}; + const char *id_path[] = {"id", NULL}; + + /* check & get request attributes */ + if ((jparams = yajl_tree_get(jnode, params_path, yajl_t_array)) == NULL || + (yajl_tree_get(jnode, id_path, yajl_t_null) == NULL)) { + OVS_ERROR("invalid OVS DB request received"); + return -1; + } + + /* check array length: [, ] */ + if ((YAJL_GET_ARRAY(jparams) == NULL) || + (YAJL_GET_ARRAY(jparams)->len != 2)) { + OVS_ERROR("invalid OVS DB request received"); + return -1; + } + + jvalue = YAJL_GET_ARRAY(jparams)->values[0]; + jtable_updates = YAJL_GET_ARRAY(jparams)->values[1]; + if ((!YAJL_IS_OBJECT(jtable_updates)) || (!YAJL_IS_STRING(jvalue))) { + OVS_ERROR("invalid OVS DB request id or table update received"); + return -1; + } + + /* find registered callback based on */ + pthread_mutex_lock(&pdb->mutex); + cb = ovs_db_table_callback_get(pdb, jvalue); + if (cb == NULL || cb->table.call == NULL) { + OVS_ERROR("No OVS DB table update callback found"); + pthread_mutex_unlock(&pdb->mutex); + return -1; + } + + /* call registered callback */ + cb->table.call(jtable_updates); + pthread_mutex_unlock(&pdb->mutex); + return 0; +} + +/* OVS DB result request handler. + * This callback is called by POLL thread if OVS DB + * result reply is received from the DB server. + * Once registered callback found, it's called + * by this handler. */ +static int ovs_db_result_cb(ovs_db_t *pdb, yajl_val jnode) { + ovs_callback_t *cb = NULL; + yajl_val jresult; + yajl_val jerror; + yajl_val jid; + const char *result_path[] = {"result", NULL}; + const char *error_path[] = {"error", NULL}; + const char *id_path[] = {"id", NULL}; + + jresult = yajl_tree_get(jnode, result_path, yajl_t_any); + jerror = yajl_tree_get(jnode, error_path, yajl_t_any); + jid = yajl_tree_get(jnode, id_path, yajl_t_string); + + /* check & get result attributes */ + if (!jresult || !jerror || !jid) + return -1; + + /* try to find registered callback */ + pthread_mutex_lock(&pdb->mutex); + cb = ovs_db_table_callback_get(pdb, jid); + if (cb != NULL && cb->result.call != NULL) { + /* call registered callback */ + cb->result.call(jresult, jerror); + /* unlock owner of the reply */ + sem_post(&cb->result.sync); + } + + pthread_mutex_unlock(&pdb->mutex); + return 0; +} + +/* Handle JSON data (one request) and call + * appropriate event OVS DB handler. Currently, + * update callback 'ovs_db_table_update_cb' and + * result callback 'ovs_db_result_cb' is supported. + */ +static int ovs_db_json_data_process(ovs_db_t *pdb, const char *data, + size_t len) { + const char *method = NULL; + char yajl_errbuf[OVS_YAJL_ERROR_BUFFER_SIZE]; + const char *method_path[] = {"method", NULL}; + const char *result_path[] = {"result", NULL}; + char *sjson = NULL; + yajl_val jnode, jval; + + /* duplicate the data to make null-terminated string + * required for yajl_tree_parse() */ + if ((sjson = calloc(1, len + 1)) == NULL) + return -1; + + sstrncpy(sjson, data, len + 1); + OVS_DEBUG("[len=%zu] %s", len, sjson); + + /* parse json data */ + jnode = yajl_tree_parse(sjson, yajl_errbuf, sizeof(yajl_errbuf)); + if (jnode == NULL) { + OVS_ERROR("yajl_tree_parse() %s", yajl_errbuf); + sfree(sjson); + return -1; + } + + /* get method name */ + if ((jval = yajl_tree_get(jnode, method_path, yajl_t_string)) != NULL) { + if ((method = YAJL_GET_STRING(jval)) == NULL) { + yajl_tree_free(jnode); + sfree(sjson); + return -1; + } + if (strcmp("echo", method) == 0) { + /* echo request from the server */ + if (ovs_db_table_echo_cb(pdb, jnode) < 0) + OVS_ERROR("handle echo request failed"); + } else if (strcmp("update", method) == 0) { + /* update notification */ + if (ovs_db_table_update_cb(pdb, jnode) < 0) + OVS_ERROR("handle update notification failed"); + } + } else if ((jval = yajl_tree_get(jnode, result_path, yajl_t_any)) != NULL) { + /* result notification */ + if (ovs_db_result_cb(pdb, jnode) < 0) + OVS_ERROR("handle result reply failed"); + } else + OVS_ERROR("connot find method or result failed"); + + /* release memory */ + yajl_tree_free(jnode); + sfree(sjson); + return 0; +} + +/* + * JSON reader implementation. + * + * This module process raw JSON data (byte stream) and + * returns fully-fledged JSON data which can be processed + * (parsed) by YAJL later. + */ + +/* Allocate JSON reader instance */ +static ovs_json_reader_t *ovs_json_reader_alloc() { + ovs_json_reader_t *jreader = NULL; + + if ((jreader = calloc(sizeof(ovs_json_reader_t), 1)) == NULL) + return NULL; + + return jreader; +} + +/* Push raw data into into the JSON reader for processing */ +static int ovs_json_reader_push_data(ovs_json_reader_t *jreader, + const char *data, size_t data_len) { + char *new_buff = NULL; + size_t available = jreader->buff_size - jreader->buff_offset; + + /* check/update required memory space */ + if (available < data_len) { + OVS_DEBUG("Reallocate buffer [size=%d, available=%d required=%d]", + (int)jreader->buff_size, (int)available, (int)data_len); + + /* allocate new chunk of memory */ + new_buff = realloc(jreader->buff_ptr, (jreader->buff_size + data_len)); + if (new_buff == NULL) + return -1; + + /* point to new allocated memory */ + jreader->buff_ptr = new_buff; + jreader->buff_size += data_len; + } + + /* store input data */ + memcpy(jreader->buff_ptr + jreader->buff_offset, data, data_len); + jreader->buff_offset += data_len; + return 0; +} + +/* Pop one fully-fledged JSON if already exists. Returns 0 if + * completed JSON already exists otherwise negative value is + * returned */ +static int ovs_json_reader_pop(ovs_json_reader_t *jreader, + const char **json_ptr, size_t *json_len_ptr) { + size_t nbraces = 0; + size_t json_len = 0; + char *json = NULL; + + /* search open/close brace */ + for (size_t i = jreader->json_offset; i < jreader->buff_offset; i++) { + if (jreader->buff_ptr[i] == '{') { + nbraces++; + } else if (jreader->buff_ptr[i] == '}') + if (nbraces) + if (!(--nbraces)) { + /* JSON data */ + *json_ptr = jreader->buff_ptr + jreader->json_offset; + *json_len_ptr = json_len + 1; + jreader->json_offset = i + 1; + return 0; + } + + /* increase JSON data length */ + if (nbraces) + json_len++; + } + + if (jreader->json_offset) { + if (jreader->json_offset < jreader->buff_offset) { + /* shift data to the beginning of the buffer + * and zero rest of the buffer data */ + json = &jreader->buff_ptr[jreader->json_offset]; + json_len = jreader->buff_offset - jreader->json_offset; + for (size_t i = 0; i < jreader->buff_size; i++) + jreader->buff_ptr[i] = ((i < json_len) ? (json[i]) : (0)); + jreader->buff_offset = json_len; + } else + /* reset the buffer */ + jreader->buff_offset = 0; + + /* data is at the beginning of the buffer */ + jreader->json_offset = 0; + } + + return -1; +} + +/* Reset JSON reader. It is useful when start processing + * new raw data. E.g.: in case of lost stream connection. + */ +static void ovs_json_reader_reset(ovs_json_reader_t *jreader) { + if (jreader) { + jreader->buff_offset = 0; + jreader->json_offset = 0; + } +} + +/* Release internal data allocated for JSON reader */ +static void ovs_json_reader_free(ovs_json_reader_t *jreader) { + if (jreader) { + free(jreader->buff_ptr); + free(jreader); + } +} + +/* Reconnect to OVS DB and call the OVS DB post connection init callback + * if connection has been established. + */ +static void ovs_db_reconnect(ovs_db_t *pdb) { + const char *node_info = pdb->node; + struct addrinfo *result; + + if (pdb->unix_path[0] != '\0') { + /* use UNIX socket instead of INET address */ + node_info = pdb->unix_path; + result = calloc(1, sizeof(struct addrinfo)); + struct sockaddr_un *sa_unix = calloc(1, sizeof(struct sockaddr_un)); + if (result == NULL || sa_unix == NULL) { + sfree(result); + sfree(sa_unix); + return; + } + result->ai_family = AF_UNIX; + result->ai_socktype = SOCK_STREAM; + result->ai_addrlen = sizeof(*sa_unix); + result->ai_addr = (struct sockaddr *)sa_unix; + sa_unix->sun_family = result->ai_family; + sstrncpy(sa_unix->sun_path, pdb->unix_path, sizeof(sa_unix->sun_path)); + } else { + /* inet socket address */ + struct addrinfo hints; + + /* setup criteria for selecting the socket address */ + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + + /* get socket addresses */ + int ret = getaddrinfo(pdb->node, pdb->service, &hints, &result); + if (ret != 0) { + OVS_ERROR("getaddrinfo(): %s", gai_strerror(ret)); + return; + } + } + /* try to connect to the server */ + for (struct addrinfo *rp = result; rp != NULL; rp = rp->ai_next) { + char errbuff[OVS_ERROR_BUFF_SIZE]; + int sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (sock < 0) { + sstrerror(errno, errbuff, sizeof(errbuff)); + OVS_DEBUG("socket(): %s", errbuff); + continue; + } + if (connect(sock, rp->ai_addr, rp->ai_addrlen) < 0) { + close(sock); + sstrerror(errno, errbuff, sizeof(errbuff)); + OVS_DEBUG("connect(): %s [family=%d]", errbuff, rp->ai_family); + } else { + /* send notification to event thread */ + ovs_db_event_post(pdb, OVS_DB_EVENT_CONN_ESTABLISHED); + pdb->sock = sock; + break; + } + } + + if (pdb->sock < 0) + OVS_ERROR("connect to \"%s\" failed", node_info); + + freeaddrinfo(result); +} + +/* POLL worker thread. + * It listens on OVS DB connection for incoming + * requests/reply/events etc. Also, it reconnects to OVS DB + * if connection has been lost. + */ +static void *ovs_poll_worker(void *arg) { + ovs_db_t *pdb = (ovs_db_t *)arg; /* pointer to OVS DB */ + ovs_json_reader_t *jreader = NULL; + struct pollfd poll_fd = { + .fd = pdb->sock, .events = POLLIN | POLLPRI, .revents = 0, + }; + + /* create JSON reader instance */ + if ((jreader = ovs_json_reader_alloc()) == NULL) { + OVS_ERROR("initialize json reader failed"); + return NULL; + } + + /* poll data */ + while (ovs_db_poll_is_running(pdb)) { + char errbuff[OVS_ERROR_BUFF_SIZE]; + poll_fd.fd = pdb->sock; + int poll_ret = poll(&poll_fd, 1, /* ms */ OVS_DB_POLL_TIMEOUT * 1000); + if (poll_ret < 0) { + sstrerror(errno, errbuff, sizeof(errbuff)); + OVS_ERROR("poll(): %s", errbuff); + break; + } else if (poll_ret == 0) { + OVS_DEBUG("poll(): timeout"); + if (pdb->sock < 0) + /* invalid fd, so try to reconnect */ + ovs_db_reconnect(pdb); + continue; + } + if (poll_fd.revents & POLLNVAL) { + /* invalid file descriptor, clean-up */ + ovs_db_callback_remove_all(pdb); + ovs_json_reader_reset(jreader); + /* setting poll FD to -1 tells poll() call to ignore this FD. + * In that case poll() call will return timeout all the time */ + pdb->sock = (-1); + } else if ((poll_fd.revents & POLLERR) || (poll_fd.revents & POLLHUP)) { + /* connection is broken */ + close(poll_fd.fd); + ovs_db_event_post(pdb, OVS_DB_EVENT_CONN_TERMINATED); + OVS_ERROR("poll() peer closed its end of the channel"); + } else if ((poll_fd.revents & POLLIN) || (poll_fd.revents & POLLPRI)) { + /* read incoming data */ + char buff[OVS_DB_POLL_READ_BLOCK_SIZE]; + ssize_t nbytes = recv(poll_fd.fd, buff, sizeof(buff), 0); + if (nbytes < 0) { + sstrerror(errno, errbuff, sizeof(errbuff)); + OVS_ERROR("recv(): %s", errbuff); + /* read error? Try to reconnect */ + close(poll_fd.fd); + continue; + } else if (nbytes == 0) { + close(poll_fd.fd); + ovs_db_event_post(pdb, OVS_DB_EVENT_CONN_TERMINATED); + OVS_ERROR("recv() peer has performed an orderly shutdown"); + continue; + } + /* read incoming data */ + size_t json_len = 0; + const char *json = NULL; + OVS_DEBUG("recv(): received %zd bytes of data", nbytes); + ovs_json_reader_push_data(jreader, buff, nbytes); + while (!ovs_json_reader_pop(jreader, &json, &json_len)) + /* process JSON data */ + ovs_db_json_data_process(pdb, json, json_len); + } + } + + OVS_DEBUG("poll thread has been completed"); + ovs_json_reader_free(jreader); + return NULL; +} + +/* EVENT worker thread. + * Perform task based on incoming events. This + * task can be done asynchronously which allows to + * handle OVS DB callback like 'init_cb'. + */ +static void *ovs_event_worker(void *arg) { + ovs_db_t *pdb = (ovs_db_t *)arg; + + while (pdb->event_thread.value != OVS_DB_EVENT_TERMINATE) { + /* wait for an event */ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += (OVS_DB_EVENT_TIMEOUT); + int ret = pthread_cond_timedwait(&pdb->event_thread.cond, + &pdb->event_thread.mutex, &ts); + if (!ret) { + /* handle the event */ + OVS_DEBUG("handle event %d", pdb->event_thread.value); + switch (pdb->event_thread.value) { + case OVS_DB_EVENT_CONN_ESTABLISHED: + if (pdb->cb.post_conn_init) + pdb->cb.post_conn_init(pdb); + break; + case OVS_DB_EVENT_CONN_TERMINATED: + if (pdb->cb.post_conn_terminate) + pdb->cb.post_conn_terminate(); + break; + default: + OVS_DEBUG("unknown event received"); + break; + } + } else if (ret == ETIMEDOUT) { + /* wait timeout */ + OVS_DEBUG("no event received (timeout)"); + continue; + } else { + /* unexpected error */ + OVS_ERROR("pthread_cond_timedwait() failed"); + break; + } + } + + OVS_DEBUG("event thread has been completed"); + return NULL; +} + +/* Initialize EVENT thread */ +static int ovs_db_event_thread_init(ovs_db_t *pdb) { + pdb->event_thread.tid = (pthread_t)-1; + /* init event thread condition variable */ + if (pthread_cond_init(&pdb->event_thread.cond, NULL)) { + return -1; + } + /* init event thread mutex */ + if (pthread_mutex_init(&pdb->event_thread.mutex, NULL)) { + pthread_cond_destroy(&pdb->event_thread.cond); + return -1; + } + /* Hold the event thread mutex. It ensures that no events + * will be lost while thread is still starting. Once event + * thread is started and ready to accept events, it will release + * the mutex */ + if (pthread_mutex_lock(&pdb->event_thread.mutex)) { + pthread_mutex_destroy(&pdb->event_thread.mutex); + pthread_cond_destroy(&pdb->event_thread.cond); + return -1; + } + /* start event thread */ + pthread_t tid; + if (plugin_thread_create(&tid, NULL, ovs_event_worker, pdb, + "utils_ovs:event") != 0) { + pthread_mutex_unlock(&pdb->event_thread.mutex); + pthread_mutex_destroy(&pdb->event_thread.mutex); + pthread_cond_destroy(&pdb->event_thread.cond); + return -1; + } + pdb->event_thread.tid = tid; + return 0; +} + +/* Destroy EVENT thread */ +static int ovs_db_event_thread_destroy(ovs_db_t *pdb) { + if (pdb->event_thread.tid == (pthread_t)-1) + /* already destroyed */ + return 0; + ovs_db_event_post(pdb, OVS_DB_EVENT_TERMINATE); + if (pthread_join(pdb->event_thread.tid, NULL) != 0) + return -1; + /* Event thread always holds the thread mutex when + * performs some task (handles event) and releases it when + * while sleeping. Thus, if event thread exits, the mutex + * remains locked */ + pthread_mutex_unlock(&pdb->event_thread.mutex); + pthread_mutex_destroy(&pdb->event_thread.mutex); + pthread_cond_destroy(&pdb->event_thread.cond); + pdb->event_thread.tid = (pthread_t)-1; + return 0; +} + +/* Initialize POLL thread */ +static int ovs_db_poll_thread_init(ovs_db_t *pdb) { + pdb->poll_thread.tid = (pthread_t)-1; + /* init event thread mutex */ + if (pthread_mutex_init(&pdb->poll_thread.mutex, NULL)) { + return -1; + } + /* start poll thread */ + pthread_t tid; + pdb->poll_thread.state = OVS_DB_POLL_STATE_RUNNING; + if (plugin_thread_create(&tid, NULL, ovs_poll_worker, pdb, + "utils_ovs:poll") != 0) { + pthread_mutex_destroy(&pdb->poll_thread.mutex); + return -1; + } + pdb->poll_thread.tid = tid; + return 0; +} + +/* Destroy POLL thread */ +static int ovs_db_poll_thread_destroy(ovs_db_t *pdb) { + if (pdb->poll_thread.tid == (pthread_t)-1) + /* already destroyed */ + return 0; + /* change thread state */ + pthread_mutex_lock(&pdb->poll_thread.mutex); + pdb->poll_thread.state = OVS_DB_POLL_STATE_EXITING; + pthread_mutex_unlock(&pdb->poll_thread.mutex); + /* join the thread */ + if (pthread_join(pdb->poll_thread.tid, NULL) != 0) + return -1; + pthread_mutex_destroy(&pdb->poll_thread.mutex); + pdb->poll_thread.tid = (pthread_t)-1; + return 0; +} + +/* + * Public OVS DB API implementation + */ + +ovs_db_t *ovs_db_init(const char *node, const char *service, + const char *unix_path, ovs_db_callback_t *cb) { + /* sanity check */ + if (node == NULL || service == NULL || unix_path == NULL) + return NULL; + + /* allocate db data & fill it */ + ovs_db_t *pdb = pdb = calloc(1, sizeof(*pdb)); + if (pdb == NULL) + return NULL; + + /* store the OVS DB address */ + sstrncpy(pdb->node, node, sizeof(pdb->node)); + sstrncpy(pdb->service, service, sizeof(pdb->service)); + sstrncpy(pdb->unix_path, unix_path, sizeof(pdb->unix_path)); + + /* setup OVS DB callbacks */ + if (cb) + pdb->cb = *cb; + + /* init OVS DB mutex attributes */ + pthread_mutexattr_t mutex_attr; + if (pthread_mutexattr_init(&mutex_attr)) { + OVS_ERROR("OVS DB mutex attribute init failed"); + sfree(pdb); + return NULL; + } + /* set OVS DB mutex as recursive */ + if (pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE)) { + OVS_ERROR("Failed to set OVS DB mutex as recursive"); + pthread_mutexattr_destroy(&mutex_attr); + sfree(pdb); + return NULL; + } + /* init OVS DB mutex */ + if (pthread_mutex_init(&pdb->mutex, &mutex_attr)) { + OVS_ERROR("OVS DB mutex init failed"); + pthread_mutexattr_destroy(&mutex_attr); + sfree(pdb); + return NULL; + } + /* destroy mutex attributes */ + pthread_mutexattr_destroy(&mutex_attr); + + /* init event thread */ + if (ovs_db_event_thread_init(pdb) < 0) { + ovs_db_destroy(pdb); + return NULL; + } + + /* init polling thread */ + pdb->sock = -1; + if (ovs_db_poll_thread_init(pdb) < 0) { + ovs_db_destroy(pdb); + return NULL; + } + return pdb; +} + +int ovs_db_send_request(ovs_db_t *pdb, const char *method, const char *params, + ovs_db_result_cb_t cb) { + int ret = 0; + yajl_gen_status yajl_gen_ret; + yajl_val jparams; + yajl_gen jgen; + ovs_callback_t *new_cb = NULL; + uint64_t uid; + char uid_buff[OVS_UID_STR_SIZE]; + const char *req = NULL; + size_t req_len = 0; + struct timespec ts; + + /* sanity check */ + if (!pdb || !method || !params) + return -1; + + if ((jgen = yajl_gen_alloc(NULL)) == NULL) + return -1; + + /* try to parse params */ + if ((jparams = yajl_tree_parse(params, NULL, 0)) == NULL) { + OVS_ERROR("params is not a JSON string"); + yajl_gen_clear(jgen); + return -1; + } + + /* generate method field */ + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "method"); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, method); + + /* generate params field */ + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "params"); + OVS_YAJL_CALL(ovs_yajl_gen_val, jgen, jparams); + yajl_tree_free(jparams); + + /* generate id field */ + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "id"); + uid = ovs_uid_generate(); + ssnprintf(uid_buff, sizeof(uid_buff), "%" PRIX64, uid); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, uid_buff); + + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + + if (cb) { + /* register result callback */ + if ((new_cb = calloc(1, sizeof(ovs_callback_t))) == NULL) + goto yajl_gen_failure; + + /* add new callback to front */ + sem_init(&new_cb->result.sync, 0, 0); + new_cb->result.call = cb; + new_cb->uid = uid; + ovs_db_callback_add(pdb, new_cb); + } + + /* send the request */ + OVS_YAJL_CALL(yajl_gen_get_buf, jgen, (const unsigned char **)&req, &req_len); + OVS_DEBUG("%s", req); + if (!ovs_db_data_send(pdb, req, req_len)) { + if (cb) { + /* wait for result */ + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += OVS_DB_SEND_REQ_TIMEOUT; + if (sem_timedwait(&new_cb->result.sync, &ts) < 0) { + OVS_ERROR("%s() no replay received within %d sec", __FUNCTION__, + OVS_DB_SEND_REQ_TIMEOUT); + ret = (-1); + } + } + } else { + OVS_ERROR("ovs_db_data_send() failed"); + ret = (-1); + } + +yajl_gen_failure: + if (new_cb) { + /* destroy callback */ + sem_destroy(&new_cb->result.sync); + ovs_db_callback_remove(pdb, new_cb); + } + + /* release memory */ + yajl_gen_clear(jgen); + return (yajl_gen_ret != yajl_gen_status_ok) ? (-1) : ret; +} + +int ovs_db_table_cb_register(ovs_db_t *pdb, const char *tb_name, + const char **tb_column, + ovs_db_table_cb_t update_cb, + ovs_db_result_cb_t result_cb, unsigned int flags) { + yajl_gen jgen; + yajl_gen_status yajl_gen_ret; + ovs_callback_t *new_cb = NULL; + char uid_str[OVS_UID_STR_SIZE]; + char *params; + size_t params_len; + int ovs_db_ret = 0; + + /* sanity check */ + if (pdb == NULL || tb_name == NULL || update_cb == NULL) + return -1; + + /* allocate new update callback */ + if ((new_cb = calloc(1, sizeof(ovs_callback_t))) == NULL) + return -1; + + /* init YAJL generator */ + if ((jgen = yajl_gen_alloc(NULL)) == NULL) { + sfree(new_cb); + return -1; + } + + /* add new callback to front */ + new_cb->table.call = update_cb; + new_cb->uid = ovs_uid_generate(); + ovs_db_callback_add(pdb, new_cb); + + /* make update notification request + * [, , ] */ + OVS_YAJL_CALL(yajl_gen_array_open, jgen); + { + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, OVS_DB_DEFAULT_DB_NAME); + + /* uid string */ + ssnprintf(uid_str, sizeof(uid_str), "%" PRIX64, new_cb->uid); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, uid_str); + + /* */ + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + { + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, tb_name); + OVS_YAJL_CALL(yajl_gen_array_open, jgen); + { + /* */ + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + { + if (tb_column) { + /* columns within the table to be monitored */ + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "columns"); + OVS_YAJL_CALL(yajl_gen_array_open, jgen); + for (; *tb_column; tb_column++) + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, *tb_column); + OVS_YAJL_CALL(yajl_gen_array_close, jgen); + } + /* specify select option */ + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "select"); + { + OVS_YAJL_CALL(yajl_gen_map_open, jgen); + { + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "initial"); + OVS_YAJL_CALL(yajl_gen_bool, jgen, + flags & OVS_DB_TABLE_CB_FLAG_INITIAL); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "insert"); + OVS_YAJL_CALL(yajl_gen_bool, jgen, + flags & OVS_DB_TABLE_CB_FLAG_INSERT); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "delete"); + OVS_YAJL_CALL(yajl_gen_bool, jgen, + flags & OVS_DB_TABLE_CB_FLAG_DELETE); + OVS_YAJL_CALL(ovs_yajl_gen_tstring, jgen, "modify"); + OVS_YAJL_CALL(yajl_gen_bool, jgen, + flags & OVS_DB_TABLE_CB_FLAG_MODIFY); + } + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + } + } + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + } + OVS_YAJL_CALL(yajl_gen_array_close, jgen); + } + OVS_YAJL_CALL(yajl_gen_map_close, jgen); + } + OVS_YAJL_CALL(yajl_gen_array_close, jgen); + + /* make a request to subscribe to given table */ + OVS_YAJL_CALL(yajl_gen_get_buf, jgen, (const unsigned char **)¶ms, + ¶ms_len); + if (ovs_db_send_request(pdb, "monitor", params, result_cb) < 0) { + OVS_ERROR("Failed to subscribe to \"%s\" table", tb_name); + ovs_db_ret = (-1); + } + +yajl_gen_failure: + /* release memory */ + yajl_gen_clear(jgen); + return ovs_db_ret; +} + +int ovs_db_destroy(ovs_db_t *pdb) { + int ovs_db_ret = 0; + int ret = 0; + + /* sanity check */ + if (pdb == NULL) + return -1; + + /* try to lock the structure before releasing */ + if ((ret = pthread_mutex_lock(&pdb->mutex))) { + OVS_ERROR("pthread_mutex_lock() DB mutex lock failed (%d)", ret); + return -1; + } + + /* stop poll thread */ + if (ovs_db_event_thread_destroy(pdb) < 0) { + OVS_ERROR("destroy poll thread failed"); + ovs_db_ret = (-1); + } + + /* stop event thread */ + if (ovs_db_poll_thread_destroy(pdb) < 0) { + OVS_ERROR("stop event thread failed"); + ovs_db_ret = (-1); + } + + /* unsubscribe callbacks */ + ovs_db_callback_remove_all(pdb); + + /* close connection */ + if (pdb->sock >= 0) + close(pdb->sock); + + /* release DB handler */ + pthread_mutex_unlock(&pdb->mutex); + pthread_mutex_destroy(&pdb->mutex); + sfree(pdb); + return ovs_db_ret; +} + +/* + * Public OVS utils API implementation + */ + +/* Get YAJL value by key from YAJL dictionary + * + * EXAMPLE: + * { + * "key_a" : + * "key_b" : + * } + */ +yajl_val ovs_utils_get_value_by_key(yajl_val jval, const char *key) { + const char *obj_key = NULL; + + /* check params */ + if (!YAJL_IS_OBJECT(jval) || (key == NULL)) + return NULL; + + /* find a value by key */ + for (size_t i = 0; i < YAJL_GET_OBJECT(jval)->len; i++) { + obj_key = YAJL_GET_OBJECT(jval)->keys[i]; + if (strcmp(obj_key, key) == 0) + return YAJL_GET_OBJECT(jval)->values[i]; + } + + return NULL; +} + +/* Get OVS DB map value by given map key + * + * FROM RFC7047: + * + * + * A 2-element JSON array that represents a pair within a database + * map. The first element is an that represents the key, and + * the second element is an that represents the value. + * + * + * A 2-element JSON array that represents a database map value. The + * first element of the array must be the string "map", and the + * second element must be an array of zero or more s giving the + * values in the map. All of the s must have the same key and + * value types. + * + * EXAMPLE: + * [ + * "map", [ + * [ "key_a", ], [ "key_b", ], ... + * ] + * ] + */ +yajl_val ovs_utils_get_map_value(yajl_val jval, const char *key) { + size_t map_len = 0; + size_t array_len = 0; + yajl_val *map_values = NULL; + yajl_val *array_values = NULL; + const char *str_val = NULL; + + /* check YAJL array */ + if (!YAJL_IS_ARRAY(jval) || (key == NULL)) + return NULL; + + /* check a database map value (2-element, first one should be a string */ + array_len = YAJL_GET_ARRAY(jval)->len; + array_values = YAJL_GET_ARRAY(jval)->values; + if ((array_len != 2) || (!YAJL_IS_STRING(array_values[0])) || + (!YAJL_IS_ARRAY(array_values[1]))) + return NULL; + + /* check first element of the array */ + str_val = YAJL_GET_STRING(array_values[0]); + if (strcmp("map", str_val) != 0) + return NULL; + + /* try to find map value by map key */ + map_len = YAJL_GET_ARRAY(array_values[1])->len; + map_values = YAJL_GET_ARRAY(array_values[1])->values; + for (size_t i = 0; i < map_len; i++) { + /* check YAJL array */ + if (!YAJL_IS_ARRAY(map_values[i])) + break; + + /* check a database pair value (2-element, first one represents a key + * and it should be a string in our case */ + array_len = YAJL_GET_ARRAY(map_values[i])->len; + array_values = YAJL_GET_ARRAY(map_values[i])->values; + if ((array_len != 2) || (!YAJL_IS_STRING(array_values[0]))) + break; + + /* return map value if given key equals map key */ + str_val = YAJL_GET_STRING(array_values[0]); + if (strcmp(key, str_val) == 0) + return array_values[1]; + } + return NULL; +} diff --git a/src/utils_ovs.h b/src/utils_ovs.h new file mode 100644 index 00000000..52c2f915 --- /dev/null +++ b/src/utils_ovs.h @@ -0,0 +1,236 @@ +/** + * collectd - src/utils_ovs.h + * + * Copyright(c) 2016 Intel Corporation. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Volodymyr Mytnyk + * + * Description: + * The OVS util module provides the following features: + * - Implements the OVS DB communication transport specified + * by RFC7047: + * * Connect/disconnect to OVS DB; + * * Recovery mechanism in case of OVS DB connection lost; + * * Subscription mechanism to OVS DB table update events + * (insert/modify/delete); + * * Send custom JSON request to OVS DB (poll table data, etc.) + * * Handling of echo request from OVS DB server to verify the + * liveness of the connection. + * - Provides YAJL helpers functions. + * + * OVS DB API User Guide: + * All OVS DB function/structure names begins from 'ovs_db_*' prefix. To + * start using OVS DB API, client (plugin) should initialize the OVS DB + * object (`ovs_db_t') by calling `ovs_db_init' function. It initializes + * internal data and creates two main workers (threads). The result of the + * function is a pointer to new OVS DB object which can be used by other + * OVS DB API later and must be released by `ovs_db_destroy' function if + * the object isn't needed anymore. + * Once OVS DB API is initialized, the `init_cb' callback is called if + * the connection to OVS DB has been established. This callback is called + * every time the OVS DB is reconnected. So, if the client registers table + * update event callbacks or does any other OVS DB setup that can be lost + * after OVS DB reconnecting, it should be done in `init_cb' callback. + * The `ovs_db_table_cb_register` function is used to register OVS DB + * table update event callback and receive the table update notification + * when requested event occurs (registered callback is called). See + * function API for more info. + * To send custom JSON-RPC request to OVS DB, the `ovs_db_send_request' + * function is used. Please note, that connection to OVS DB should be + * established otherwise the function will return error. + * To verify the liveness of established connection, the OVS DB server + * sends echo request to the client with a given interval. The OVS utils + * takes care about this request and handles it properly. + **/ + +#ifndef UTILS_OVS_H +#define UTILS_OVS_H + +#include +#include + +/* Forward declaration */ +typedef struct ovs_db_s ovs_db_t; + +/* OVS DB callback type declaration */ +typedef void (*ovs_db_table_cb_t)(yajl_val jupdates); +typedef void (*ovs_db_result_cb_t)(yajl_val jresult, yajl_val jerror); + +/* OVS DB structures */ +struct ovs_db_callback_s { + /* + * This callback is called when OVS DB connection + * has been established and ready to use. Client + * can use this callback to configure OVS DB, e.g. + * to subscribe to table update notification or poll + * some OVS DB data. This field can be NULL. + */ + void (*post_conn_init)(ovs_db_t *pdb); + /* + * This callback is called when OVS DB connection + * has been lost. This field can be NULL. + */ + void (*post_conn_terminate)(void); +}; +typedef struct ovs_db_callback_s ovs_db_callback_t; + +/* OVS DB defines */ +#define OVS_DB_ADDR_NODE_SIZE 256 +#define OVS_DB_ADDR_SERVICE_SIZE 128 +#define OVS_DB_ADDR_UNIX_SIZE 108 + +/* OVS DB prototypes */ + +/* + * NAME + * ovs_db_init + * + * DESCRIPTION + * Initialize OVS DB internal data. The `ovs_db_destroy' function + * shall destroy the returned object. + * + * PARAMETERS + * `node' OVS DB Address. + * `service' OVS DB service name. + * `unix' OVS DB unix socket path. + * `cb' OVS DB callbacks. + * + * RETURN VALUE + * New ovs_db_t object upon success or NULL if an error occurred. + */ +ovs_db_t *ovs_db_init(const char *node, const char *service, + const char *unix_path, ovs_db_callback_t *cb); + +/* + * NAME + * ovs_db_destroy + * + * DESCRIPTION + * Destroy OVS DB object referenced by `pdb'. + * + * PARAMETERS + * `pdb' Pointer to OVS DB object. + * + * RETURN VALUE + * Zero upon success or non-zero if an error occurred. + */ +int ovs_db_destroy(ovs_db_t *pdb); + +/* + * NAME + * ovs_db_send_request + * + * DESCRIPTION + * Send JSON request to OVS DB server. + * + * PARAMETERS + * `pdb' Pointer to OVS DB object. + * `method' Request method name. + * `params' Method params to be sent (JSON value as a string). + * `cb' Result callback of the request. If NULL, the request + * is sent asynchronously. + * + * RETURN VALUE + * Zero upon success or non-zero if an error occurred. + */ +int ovs_db_send_request(ovs_db_t *pdb, const char *method, const char *params, + ovs_db_result_cb_t cb); + +/* callback types */ +#define OVS_DB_TABLE_CB_FLAG_INITIAL 0x01U +#define OVS_DB_TABLE_CB_FLAG_INSERT 0x02U +#define OVS_DB_TABLE_CB_FLAG_DELETE 0x04U +#define OVS_DB_TABLE_CB_FLAG_MODIFY 0x08U +#define OVS_DB_TABLE_CB_FLAG_ALL 0x0FU + +/* + * NAME + * ovs_db_table_cb_register + * + * DESCRIPTION + * Subscribe a callback on OVS DB table event. It allows to + * receive notifications (`update_cb' callback is called) of + * changes to requested table. + * + * PARAMETERS + * `pdb' Pointer to OVS DB object. + * `tb_name' OVS DB Table name to be monitored. + * `tb_column' OVS DB Table columns to be monitored. Last + * element in the array should be NULL. + * `update_cb' Callback function that is called when + * requested table columns are changed. + * `cb' Result callback of the request. If NULL, the call + * becomes asynchronous. + * Useful, if OVS_DB_TABLE_CB_FLAG_INITIAL is set. + * `flags' Bit mask of: + * OVS_DB_TABLE_CB_FLAG_INITIAL Receive initial values in + * result callback. + * OVS_DB_TABLE_CB_FLAG_INSERT Receive table insert events. + * OVS_DB_TABLE_CB_FLAG_DELETE Receive table remove events. + * OVS_DB_TABLE_CB_FLAG_MODIFY Receive table update events. + * OVS_DB_TABLE_CB_FLAG_ALL Receive all events. + * + * RETURN VALUE + * Zero upon success or non-zero if an error occurred. + */ +int ovs_db_table_cb_register(ovs_db_t *pdb, const char *tb_name, + const char **tb_column, + ovs_db_table_cb_t update_cb, + ovs_db_result_cb_t result_cb, unsigned int flags); + +/* + * OVS utils API + */ + +/* + * NAME + * ovs_utils_get_value_by_key + * + * DESCRIPTION + * Get YAJL value by object name. + * + * PARAMETERS + * `jval' YAJL object value. + * `key' Object key name. + * + * RETURN VALUE + * YAJL value upon success or NULL if key not found. + */ +yajl_val ovs_utils_get_value_by_key(yajl_val jval, const char *key); + +/* + * NAME + * ovs_utils_get_map_value + * + * DESCRIPTION + * Get OVS DB map value by given map key (rfc7047, "Notation" section). + * + * PARAMETERS + * `jval' A 2-element YAJL array that represents a OVS DB map value. + * `key' OVS DB map key name. + * + * RETURN VALUE + * YAJL value upon success or NULL if key not found. + */ +yajl_val ovs_utils_get_map_value(yajl_val jval, const char *key); + +#endif diff --git a/src/utils_parse_option.c b/src/utils_parse_option.c index ba37f03e..005715c9 100644 --- a/src/utils_parse_option.c +++ b/src/utils_parse_option.c @@ -39,7 +39,7 @@ int parse_string(char **ret_buffer, char **ret_string) { while (isspace((int)*string)) string++; if (*string == 0) - return (1); + return 1; /* A quoted string */ if (*string == '"') { @@ -47,7 +47,7 @@ int parse_string(char **ret_buffer, char **ret_string) { string++; if (*string == 0) - return (1); + return 1; dst = string; buffer = string; @@ -57,7 +57,7 @@ int parse_string(char **ret_buffer, char **ret_string) { buffer++; /* Catch a backslash at the end of buffer */ if (*buffer == 0) - return (-1); + return -1; } *dst = *buffer; buffer++; @@ -65,7 +65,7 @@ int parse_string(char **ret_buffer, char **ret_string) { } /* No quote sign has been found */ if (*buffer == 0) - return (-1); + return -1; *dst = 0; dst++; @@ -74,7 +74,7 @@ int parse_string(char **ret_buffer, char **ret_string) { /* Check for trailing spaces. */ if ((*buffer != 0) && !isspace((int)*buffer)) - return (-1); + return -1; } else /* an unquoted string */ { buffer = string; @@ -93,7 +93,7 @@ int parse_string(char **ret_buffer, char **ret_string) { *ret_buffer = buffer; *ret_string = string; - return (0); + return 0; } /* int parse_string */ /* @@ -120,23 +120,23 @@ int parse_option(char **ret_buffer, char **ret_key, char **ret_value) { while (isspace((int)*key)) key++; if (*key == 0) - return (1); + return 1; /* Look for the equal sign */ buffer = key; while (isalnum((int)*buffer) || *buffer == '_' || *buffer == ':') buffer++; if ((*buffer != '=') || (buffer == key)) - return (1); + return 1; *buffer = 0; buffer++; /* Empty values must be written as "" */ if (isspace((int)*buffer) || (*buffer == 0)) - return (-1); + return -1; status = parse_string(&buffer, &value); if (status != 0) - return (-1); + return -1; /* NB: parse_string will have eaten up all trailing spaces. */ @@ -144,7 +144,5 @@ int parse_option(char **ret_buffer, char **ret_key, char **ret_value) { *ret_key = key; *ret_value = value; - return (0); + return 0; } /* int parse_option */ - -/* vim: set sw=2 ts=8 tw=78 et : */ diff --git a/src/utils_parse_option.h b/src/utils_parse_option.h index a638e694..3dd0a792 100644 --- a/src/utils_parse_option.h +++ b/src/utils_parse_option.h @@ -31,5 +31,3 @@ int parse_string(char **ret_buffer, char **ret_string); int parse_option(char **ret_buffer, char **ret_key, char **ret_value); #endif /* UTILS_PARSE_OPTION */ - -/* vim: set sw=2 ts=8 tw=78 et : */ diff --git a/src/utils_rrdcreate.c b/src/utils_rrdcreate.c index 750d2656..86f7f3fb 100644 --- a/src/utils_rrdcreate.c +++ b/src/utils_rrdcreate.c @@ -97,7 +97,7 @@ static srrd_create_args_t *srrd_create_args_create(const char *filename, args = calloc(1, sizeof(*args)); if (args == NULL) { ERROR("srrd_create_args_create: calloc failed."); - return (NULL); + return NULL; } args->filename = NULL; args->pdp_step = pdp_step; @@ -108,14 +108,14 @@ static srrd_create_args_t *srrd_create_args_create(const char *filename, if (args->filename == NULL) { ERROR("srrd_create_args_create: strdup failed."); srrd_create_args_destroy(args); - return (NULL); + return NULL; } args->argv = calloc((size_t)(argc + 1), sizeof(*args->argv)); if (args->argv == NULL) { ERROR("srrd_create_args_create: calloc failed."); srrd_create_args_destroy(args); - return (NULL); + return NULL; } for (args->argc = 0; args->argc < argc; args->argc++) { @@ -123,13 +123,13 @@ static srrd_create_args_t *srrd_create_args_create(const char *filename, if (args->argv[args->argc] == NULL) { ERROR("srrd_create_args_create: strdup failed."); srrd_create_args_destroy(args); - return (NULL); + return NULL; } } assert(args->argc == argc); args->argv[args->argc] = NULL; - return (args); + return args; } /* srrd_create_args_t *srrd_create_args_create */ /* * * * * * * * * * @@ -154,12 +154,12 @@ static int rra_get(char ***ret, const value_list_t *vl, /* {{{ */ if (cfg->rrarows <= 0) { *ret = NULL; - return (-1); + return -1; } if ((cfg->xff < 0) || (cfg->xff >= 1.0)) { *ret = NULL; - return (-1); + return -1; } if (cfg->stepsize > 0) @@ -168,7 +168,7 @@ static int rra_get(char ***ret, const value_list_t *vl, /* {{{ */ ss = (int)CDTIME_T_TO_TIME_T(vl->interval); if (ss <= 0) { *ret = NULL; - return (-1); + return -1; } /* Use the configured timespans or fall back to the built-in defaults */ @@ -184,7 +184,7 @@ static int rra_get(char ***ret, const value_list_t *vl, /* {{{ */ assert(rra_max > 0); if ((rra_def = calloc(rra_max + 1, sizeof(*rra_def))) == NULL) - return (-1); + return -1; rra_num = 0; cdp_len = 0; @@ -222,11 +222,11 @@ static int rra_get(char ***ret, const value_list_t *vl, /* {{{ */ if (rra_num <= 0) { sfree(rra_def); - return (0); + return 0; } *ret = rra_def; - return (rra_num); + return rra_num; } /* }}} int rra_get */ static void ds_free(int ds_num, char **ds_def) /* {{{ */ @@ -254,7 +254,7 @@ static int ds_get(char ***ret, /* {{{ */ char errbuf[1024]; ERROR("rrdtool plugin: calloc failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } for (ds_num = 0; ds_num < ds->ds_num; ds_num++) { @@ -300,16 +300,16 @@ static int ds_get(char ***ret, /* {{{ */ if (ds_num != ds->ds_num) { ds_free(ds_num, ds_def); - return (-1); + return -1; } if (ds_num == 0) { sfree(ds_def); - return (0); + return 0; } *ret = ds_def; - return (ds_num); + return ds_num; } /* }}} int ds_get */ #if HAVE_THREADSAFE_LIBRRD @@ -320,7 +320,7 @@ static int srrd_create(const char *filename, /* {{{ */ char *filename_copy; if ((filename == NULL) || (argv == NULL)) - return (-EINVAL); + return -EINVAL; /* Some versions of librrd don't have the `const' qualifier for the first * argument, so we have to copy the pointer here to avoid warnings. It sucks, @@ -328,7 +328,7 @@ static int srrd_create(const char *filename, /* {{{ */ filename_copy = strdup(filename); if (filename_copy == NULL) { ERROR("srrd_create: strdup failed."); - return (-ENOMEM); + return -ENOMEM; } optind = 0; /* bug in librrd? */ @@ -343,7 +343,7 @@ static int srrd_create(const char *filename, /* {{{ */ sfree(filename_copy); - return (status); + return status; } /* }}} int srrd_create */ /* #endif HAVE_THREADSAFE_LIBRRD */ @@ -363,7 +363,7 @@ static int srrd_create(const char *filename, /* {{{ */ new_argv = malloc((new_argc + 1) * sizeof(*new_argv)); if (new_argv == NULL) { ERROR("rrdtool plugin: malloc failed."); - return (-1); + return -1; } if (last_up == 0) @@ -396,7 +396,7 @@ static int srrd_create(const char *filename, /* {{{ */ sfree(new_argv); - return (status); + return status; } /* }}} int srrd_create */ #endif /* !HAVE_THREADSAFE_LIBRRD */ @@ -414,26 +414,26 @@ static int lock_file(char const *filename) /* {{{ */ if (ptr != NULL) { pthread_mutex_unlock(&async_creation_lock); - return (EEXIST); + return EEXIST; } status = stat(filename, &sb); if ((status == 0) || (errno != ENOENT)) { pthread_mutex_unlock(&async_creation_lock); - return (EEXIST); + return EEXIST; } ptr = malloc(sizeof(*ptr)); if (ptr == NULL) { pthread_mutex_unlock(&async_creation_lock); - return (ENOMEM); + return ENOMEM; } ptr->filename = strdup(filename); if (ptr->filename == NULL) { pthread_mutex_unlock(&async_creation_lock); sfree(ptr); - return (ENOMEM); + return ENOMEM; } ptr->next = async_creation_list; @@ -441,7 +441,7 @@ static int lock_file(char const *filename) /* {{{ */ pthread_mutex_unlock(&async_creation_lock); - return (0); + return 0; } /* }}} int lock_file */ static int unlock_file(char const *filename) /* {{{ */ @@ -460,7 +460,7 @@ static int unlock_file(char const *filename) /* {{{ */ if (this == NULL) { pthread_mutex_unlock(&async_creation_lock); - return (ENOENT); + return ENOENT; } if (prev == NULL) { @@ -477,7 +477,7 @@ static int unlock_file(char const *filename) /* {{{ */ sfree(this->filename); sfree(this); - return (0); + return 0; } /* }}} int unlock_file */ static void *srrd_create_thread(void *targs) /* {{{ */ @@ -494,7 +494,7 @@ static void *srrd_create_thread(void *targs) /* {{{ */ else ERROR("srrd_create_thread: Unable to lock file \"%s\".", args->filename); srrd_create_args_destroy(args); - return (0); + return 0; } ssnprintf(tmpfile, sizeof(tmpfile), "%s.async", args->filename); @@ -507,7 +507,7 @@ static void *srrd_create_thread(void *targs) /* {{{ */ unlink(tmpfile); unlock_file(args->filename); srrd_create_args_destroy(args); - return (0); + return 0; } status = rename(tmpfile, args->filename); @@ -518,7 +518,7 @@ static void *srrd_create_thread(void *targs) /* {{{ */ unlink(tmpfile); unlock_file(args->filename); srrd_create_args_destroy(args); - return (0); + return 0; } DEBUG("srrd_create_thread: Successfully created RRD file \"%s\".", @@ -527,7 +527,7 @@ static void *srrd_create_thread(void *targs) /* {{{ */ unlock_file(args->filename); srrd_create_args_destroy(args); - return (0); + return 0; } /* }}} void *srrd_create_thread */ static int srrd_create_async(const char *filename, /* {{{ */ @@ -542,19 +542,19 @@ static int srrd_create_async(const char *filename, /* {{{ */ args = srrd_create_args_create(filename, pdp_step, last_up, argc, argv); if (args == NULL) - return (-1); + return -1; status = pthread_attr_init(&attr); if (status != 0) { srrd_create_args_destroy(args); - return (-1); + return -1; } status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (status != 0) { pthread_attr_destroy(&attr); srrd_create_args_destroy(args); - return (-1); + return -1; } status = pthread_create(&thread, &attr, srrd_create_thread, args); @@ -564,12 +564,12 @@ static int srrd_create_async(const char *filename, /* {{{ */ sstrerror(status, errbuf, sizeof(errbuf))); pthread_attr_destroy(&attr); srrd_create_args_destroy(args); - return (status); + return status; } pthread_attr_destroy(&attr); /* args is freed in srrd_create_thread(). */ - return (0); + return 0; } /* }}} int srrd_create_async */ /* @@ -589,17 +589,17 @@ int cu_rrd_create_file(const char *filename, /* {{{ */ unsigned long stepsize; if (check_create_dir(filename)) - return (-1); + return -1; if ((rra_num = rra_get(&rra_def, vl, cfg)) < 1) { ERROR("cu_rrd_create_file failed: Could not calculate RRAs"); - return (-1); + return -1; } if ((ds_num = ds_get(&ds_def, ds, vl, cfg)) < 1) { ERROR("cu_rrd_create_file failed: Could not calculate DSes"); rra_free(rra_num, rra_def); - return (-1); + return -1; } argc = ds_num + rra_num; @@ -610,7 +610,7 @@ int cu_rrd_create_file(const char *filename, /* {{{ */ sstrerror(errno, errbuf, sizeof(errbuf))); rra_free(rra_num, rra_def); ds_free(ds_num, ds_def); - return (-1); + return -1; } memcpy(argv, ds_def, ds_num * sizeof(char *)); @@ -662,7 +662,5 @@ int cu_rrd_create_file(const char *filename, /* {{{ */ ds_free(ds_num, ds_def); rra_free(rra_num, rra_def); - return (status); + return status; } /* }}} int cu_rrd_create_file */ - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_rrdcreate.h b/src/utils_rrdcreate.h index 9bc67aed..d5f9a12a 100644 --- a/src/utils_rrdcreate.h +++ b/src/utils_rrdcreate.h @@ -51,5 +51,3 @@ int cu_rrd_create_file(const char *filename, const data_set_t *ds, const value_list_t *vl, const rrdcreate_config_t *cfg); #endif /* UTILS_RRDCREATE_H */ - -/* vim: set sw=2 sts=2 et : */ diff --git a/src/utils_tail.c b/src/utils_tail.c index 565a224c..cdab6a77 100644 --- a/src/utils_tail.c +++ b/src/utils_tail.c @@ -52,7 +52,7 @@ static int cu_tail_reopen(cu_tail_t *obj) { char errbuf[1024]; ERROR("utils_tail: stat (%s) failed: %s", obj->file, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } /* The file is already open.. */ @@ -67,11 +67,11 @@ static int cu_tail_reopen(cu_tail_t *obj) { sstrerror(errno, errbuf, sizeof(errbuf))); fclose(obj->fh); obj->fh = NULL; - return (-1); + return -1; } } memcpy(&obj->stat, &stat_buf, sizeof(struct stat)); - return (1); + return 1; } /* Seek to the end if we re-open the same file again or the file opened @@ -84,7 +84,7 @@ static int cu_tail_reopen(cu_tail_t *obj) { char errbuf[1024]; ERROR("utils_tail: fopen (%s) failed: %s", obj->file, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } if (seek_end != 0) { @@ -94,7 +94,7 @@ static int cu_tail_reopen(cu_tail_t *obj) { ERROR("utils_tail: fseek (%s) failed: %s", obj->file, sstrerror(errno, errbuf, sizeof(errbuf))); fclose(fh); - return (-1); + return -1; } } @@ -103,7 +103,7 @@ static int cu_tail_reopen(cu_tail_t *obj) { obj->fh = fh; memcpy(&obj->stat, &stat_buf, sizeof(struct stat)); - return (0); + return 0; } /* int cu_tail_reopen */ cu_tail_t *cu_tail_create(const char *file) { @@ -111,17 +111,17 @@ cu_tail_t *cu_tail_create(const char *file) { obj = calloc(1, sizeof(*obj)); if (obj == NULL) - return (NULL); + return NULL; obj->file = strdup(file); if (obj->file == NULL) { free(obj); - return (NULL); + return NULL; } obj->fh = NULL; - return (obj); + return obj; } /* cu_tail_t *cu_tail_create */ int cu_tail_destroy(cu_tail_t *obj) { @@ -130,7 +130,7 @@ int cu_tail_destroy(cu_tail_t *obj) { free(obj->file); free(obj); - return (0); + return 0; } /* int cu_tail_destroy */ int cu_tail_readline(cu_tail_t *obj, char *buf, int buflen) { @@ -138,13 +138,13 @@ int cu_tail_readline(cu_tail_t *obj, char *buf, int buflen) { if (buflen < 1) { ERROR("utils_tail: cu_tail_readline: buflen too small: %i bytes.", buflen); - return (-1); + return -1; } if (obj->fh == NULL) { status = cu_tail_reopen(obj); if (status < 0) - return (status); + return status; } assert(obj->fh != NULL); @@ -153,7 +153,7 @@ int cu_tail_readline(cu_tail_t *obj, char *buf, int buflen) { clearerr(obj->fh); if (fgets(buf, buflen, obj->fh) != NULL) { buf[buflen - 1] = 0; - return (0); + return 0; } /* Check if we encountered an error */ @@ -168,18 +168,18 @@ int cu_tail_readline(cu_tail_t *obj, char *buf, int buflen) { status = cu_tail_reopen(obj); /* error -> return with error */ if (status < 0) - return (status); + return status; /* file end reached and file not reopened -> nothing more to read */ else if (status > 0) { buf[0] = 0; - return (0); + return 0; } /* If we get here: file was re-opened and there may be more to read.. Let's * try again. */ if (fgets(buf, buflen, obj->fh) != NULL) { buf[buflen - 1] = 0; - return (0); + return 0; } if (ferror(obj->fh) != 0) { @@ -188,12 +188,12 @@ int cu_tail_readline(cu_tail_t *obj, char *buf, int buflen) { sstrerror(errno, errbuf, sizeof(errbuf))); fclose(obj->fh); obj->fh = NULL; - return (-1); + return -1; } /* EOf, well, apparently the new file is empty.. */ buf[0] = 0; - return (0); + return 0; } /* int cu_tail_readline */ int cu_tail_read(cu_tail_t *obj, char *buf, int buflen, tailfunc_t *callback, diff --git a/src/utils_tail_match.c b/src/utils_tail_match.c index 505c6937..f046f6b1 100644 --- a/src/utils_tail_match.c +++ b/src/utils_tail_match.c @@ -76,7 +76,7 @@ static int simple_submit_match(cu_match_t *match, void *user_data) { match_value = (cu_match_value_t *)match_get_user_data(match); if (match_value == NULL) - return (-1); + return -1; if ((match_value->ds_type & UTILS_MATCH_DS_TYPE_GAUGE) && (match_value->values_num == 0)) @@ -96,7 +96,7 @@ static int simple_submit_match(cu_match_t *match, void *user_data) { plugin_dispatch_values(&vl); match_value_reset(match_value); - return (0); + return 0; } /* int simple_submit_match */ static int latency_submit_match(cu_match_t *match, void *user_data) { @@ -106,7 +106,7 @@ static int latency_submit_match(cu_match_t *match, void *user_data) { match_value = (cu_match_value_t *)match_get_user_data(match); if (match_value == NULL) - return (-1); + return -1; sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, data->plugin, sizeof(vl.plugin)); @@ -167,7 +167,7 @@ static int latency_submit_match(cu_match_t *match, void *user_data) { match_value->values_num = 0; latency_counter_reset(match_value->latency); - return (0); + return 0; } /* int latency_submit_match */ static int tail_callback(void *data, char *buf, @@ -177,7 +177,7 @@ static int tail_callback(void *data, char *buf, for (size_t i = 0; i < obj->matches_num; i++) match_apply(obj->matches[i].match, buf); - return (0); + return 0; } /* int tail_callback */ static void tail_match_simple_free(void *data) { @@ -194,15 +194,15 @@ cu_tail_match_t *tail_match_create(const char *filename) { obj = calloc(1, sizeof(*obj)); if (obj == NULL) - return (NULL); + return NULL; obj->tail = cu_tail_create(filename); if (obj->tail == NULL) { sfree(obj); - return (NULL); + return NULL; } - return (obj); + return obj; } /* cu_tail_match_t *tail_match_create */ void tail_match_destroy(cu_tail_match_t *obj) { @@ -240,7 +240,7 @@ int tail_match_add_match(cu_tail_match_t *obj, cu_match_t *match, temp = realloc(obj->matches, sizeof(cu_tail_match_match_t) * (obj->matches_num + 1)); if (temp == NULL) - return (-1); + return -1; obj->matches = temp; obj->matches_num++; @@ -254,7 +254,7 @@ int tail_match_add_match(cu_tail_match_t *obj, cu_match_t *match, temp->submit = submit_match; temp->free = free_user_data; - return (0); + return 0; } /* int tail_match_add_match */ int tail_match_add_match_simple(cu_tail_match_t *obj, const char *regex, @@ -269,12 +269,12 @@ int tail_match_add_match_simple(cu_tail_match_t *obj, const char *regex, match = match_create_simple(regex, excluderegex, ds_type); if (match == NULL) - return (-1); + return -1; user_data = calloc(1, sizeof(*user_data)); if (user_data == NULL) { match_destroy(match); - return (-1); + return -1; } sstrncpy(user_data->plugin, plugin, sizeof(user_data->plugin)); @@ -311,7 +311,7 @@ out: match_destroy(match); } - return (status); + return status; } /* int tail_match_add_match_simple */ int tail_match_read(cu_tail_match_t *obj) { @@ -322,7 +322,7 @@ int tail_match_read(cu_tail_match_t *obj) { (void *)obj); if (status != 0) { ERROR("tail_match: cu_tail_read failed."); - return (status); + return status; } for (size_t i = 0; i < obj->matches_num; i++) { @@ -334,7 +334,5 @@ int tail_match_read(cu_tail_match_t *obj) { (*lt_match->submit)(lt_match->match, lt_match->user_data); } - return (0); + return 0; } /* int tail_match_read */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_tail_match.h b/src/utils_tail_match.h index 09e3d402..03b70e93 100644 --- a/src/utils_tail_match.h +++ b/src/utils_tail_match.h @@ -137,5 +137,3 @@ int tail_match_add_match_simple(cu_tail_match_t *obj, const char *regex, * Zero on success, nonzero on failure. */ int tail_match_read(cu_tail_match_t *obj); - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/utils_vl_lookup.c b/src/utils_vl_lookup.c index 8bcaf408..76c0674b 100644 --- a/src/utils_vl_lookup.c +++ b/src/utils_vl_lookup.c @@ -115,19 +115,19 @@ static _Bool lu_part_matches(part_match_t const *match, /* {{{ */ if (match->is_regex) { /* Short cut popular catch-all regex. */ if (strcmp(".*", match->str) == 0) - return (1); + return 1; int status = regexec(&match->regex, str, /* nmatch = */ 0, /* pmatch = */ NULL, /* flags = */ 0); if (status == 0) - return (1); + return 1; else - return (0); + return 0; } else if (strcmp(match->str, str) == 0) - return (1); + return 1; else - return (0); + return 0; } /* }}} _Bool lu_part_matches */ static int lu_copy_ident_to_match_part(part_match_t *match_part, /* {{{ */ @@ -138,7 +138,7 @@ static int lu_copy_ident_to_match_part(part_match_t *match_part, /* {{{ */ if ((len < 3) || (ident_part[0] != '/') || (ident_part[len - 1] != '/')) { sstrncpy(match_part->str, ident_part, sizeof(match_part->str)); match_part->is_regex = 0; - return (0); + return 0; } /* Copy string without the leading slash. */ @@ -154,11 +154,11 @@ static int lu_copy_ident_to_match_part(part_match_t *match_part, /* {{{ */ regerror(status, &match_part->regex, errbuf, sizeof(errbuf)); ERROR("utils_vl_lookup: Compiling regular expression \"%s\" failed: %s", match_part->str, errbuf); - return (EINVAL); + return EINVAL; } match_part->is_regex = 1; - return (0); + return 0; } /* }}} int lu_copy_ident_to_match_part */ static int lu_copy_ident_to_match(identifier_match_t *match, /* {{{ */ @@ -172,7 +172,7 @@ static int lu_copy_ident_to_match(identifier_match_t *match, /* {{{ */ do { \ int status = lu_copy_ident_to_match_part(&match->field, ident->field); \ if (status != 0) \ - return (status); \ + return status; \ } while (0) COPY_FIELD(host); @@ -183,7 +183,7 @@ static int lu_copy_ident_to_match(identifier_match_t *match, /* {{{ */ #undef COPY_FIELD - return (0); + return 0; } /* }}} int lu_copy_ident_to_match */ /* user_class->lock must be held when calling this function */ @@ -195,7 +195,7 @@ static void *lu_create_user_obj(lookup_t *obj, /* {{{ */ user_obj = calloc(1, sizeof(*user_obj)); if (user_obj == NULL) { ERROR("utils_vl_lookup: calloc failed."); - return (NULL); + return NULL; } user_obj->next = NULL; @@ -203,7 +203,7 @@ static void *lu_create_user_obj(lookup_t *obj, /* {{{ */ if (user_obj->user_obj == NULL) { sfree(user_obj); WARNING("utils_vl_lookup: User-provided constructor failed."); - return (NULL); + return NULL; } #define COPY_FIELD(field, group_mask) \ @@ -233,7 +233,7 @@ static void *lu_create_user_obj(lookup_t *obj, /* {{{ */ last->next = user_obj; } - return (user_obj); + return user_obj; } /* }}} void *lu_create_user_obj */ /* user_class->lock must be held when calling this function */ @@ -259,10 +259,10 @@ static user_obj_t *lu_find_user_obj(user_class_t *user_class, /* {{{ */ (strcmp(vl->type_instance, ptr->ident.type_instance) != 0)) continue; - return (ptr); + return ptr; } - return (NULL); + return NULL; } /* }}} user_obj_t *lu_find_user_obj */ static int lu_handle_user_class(lookup_t *obj, /* {{{ */ @@ -280,7 +280,7 @@ static int lu_handle_user_class(lookup_t *obj, /* {{{ */ vl->plugin_instance) || !lu_part_matches(&user_class->match.plugin, vl->plugin) || !lu_part_matches(&user_class->match.host, vl->host)) - return (1); + return 1; pthread_mutex_lock(&user_class->lock); user_obj = lu_find_user_obj(user_class, vl); @@ -290,7 +290,7 @@ static int lu_handle_user_class(lookup_t *obj, /* {{{ */ user_obj = lu_create_user_obj(obj, ds, vl, user_class); if (user_obj == NULL) { pthread_mutex_unlock(&user_class->lock); - return (-1); + return -1; } } pthread_mutex_unlock(&user_class->lock); @@ -301,12 +301,12 @@ static int lu_handle_user_class(lookup_t *obj, /* {{{ */ status); /* Returning a negative value means: abort! */ if (status < 0) - return (status); + return status; else - return (1); + return 1; } - return (0); + return 0; } /* }}} int lu_handle_user_class */ static int lu_handle_user_class_list(lookup_t *obj, /* {{{ */ @@ -321,12 +321,12 @@ static int lu_handle_user_class_list(lookup_t *obj, /* {{{ */ status = lu_handle_user_class(obj, ds, vl, &ptr->entry); if (status < 0) - return (status); + return status; else if (status == 0) retval++; } - return (retval); + return retval; } /* }}} int lu_handle_user_class_list */ static by_type_entry_t *lu_search_by_type(lookup_t *obj, /* {{{ */ @@ -338,22 +338,22 @@ static by_type_entry_t *lu_search_by_type(lookup_t *obj, /* {{{ */ status = c_avl_get(obj->by_type_tree, type, (void *)&by_type); if (status == 0) - return (by_type); + return by_type; if (!allocate_if_missing) - return (NULL); + return NULL; type_copy = strdup(type); if (type_copy == NULL) { ERROR("utils_vl_lookup: strdup failed."); - return (NULL); + return NULL; } by_type = calloc(1, sizeof(*by_type)); if (by_type == NULL) { ERROR("utils_vl_lookup: calloc failed."); sfree(type_copy); - return (NULL); + return NULL; } by_type->wildcard_plugin_list = NULL; @@ -363,7 +363,7 @@ static by_type_entry_t *lu_search_by_type(lookup_t *obj, /* {{{ */ ERROR("utils_vl_lookup: c_avl_create failed."); sfree(by_type); sfree(type_copy); - return (NULL); + return NULL; } status = c_avl_insert(obj->by_type_tree, @@ -374,10 +374,10 @@ static by_type_entry_t *lu_search_by_type(lookup_t *obj, /* {{{ */ c_avl_destroy(by_type->by_plugin_tree); sfree(by_type); sfree(type_copy); - return (NULL); + return NULL; } - return (by_type); + return by_type; } /* }}} by_type_entry_t *lu_search_by_type */ static int lu_add_by_plugin(by_type_entry_t *by_type, /* {{{ */ @@ -391,7 +391,7 @@ static int lu_add_by_plugin(by_type_entry_t *by_type, /* {{{ */ if (match->plugin.is_regex) { if (by_type->wildcard_plugin_list == NULL) { by_type->wildcard_plugin_list = user_class_list; - return (0); + return 0; } ptr = by_type->wildcard_plugin_list; @@ -410,7 +410,7 @@ static int lu_add_by_plugin(by_type_entry_t *by_type, /* {{{ */ if (plugin_copy == NULL) { ERROR("utils_vl_lookup: strdup failed."); sfree(user_class_list); - return (ENOMEM); + return ENOMEM; } status = @@ -420,9 +420,9 @@ static int lu_add_by_plugin(by_type_entry_t *by_type, /* {{{ */ plugin_copy, status); sfree(plugin_copy); sfree(user_class_list); - return (status); + return status; } else { - return (0); + return 0; } } /* if (plugin not yet in tree) */ } /* if (plugin is not wildcard) */ @@ -433,7 +433,7 @@ static int lu_add_by_plugin(by_type_entry_t *by_type, /* {{{ */ ptr = ptr->next; ptr->next = user_class_list; - return (0); + return 0; } /* }}} int lu_add_by_plugin */ static void lu_destroy_user_obj(lookup_t *obj, /* {{{ */ @@ -522,14 +522,14 @@ lookup_t *lookup_create(lookup_class_callback_t cb_user_class, /* {{{ */ lookup_t *obj = calloc(1, sizeof(*obj)); if (obj == NULL) { ERROR("utils_vl_lookup: calloc failed."); - return (NULL); + return NULL; } obj->by_type_tree = c_avl_create((int (*)(const void *, const void *))strcmp); if (obj->by_type_tree == NULL) { ERROR("utils_vl_lookup: c_avl_create failed."); sfree(obj); - return (NULL); + return NULL; } obj->cb_user_class = cb_user_class; @@ -537,7 +537,7 @@ lookup_t *lookup_create(lookup_class_callback_t cb_user_class, /* {{{ */ obj->cb_free_class = cb_free_class; obj->cb_free_obj = cb_free_obj; - return (obj); + return obj; } /* }}} lookup_t *lookup_create */ void lookup_destroy(lookup_t *obj) /* {{{ */ @@ -574,12 +574,12 @@ int lookup_add(lookup_t *obj, /* {{{ */ by_type = lu_search_by_type(obj, ident->type, /* allocate = */ 1); if (by_type == NULL) - return (-1); + return -1; user_class_obj = calloc(1, sizeof(*user_class_obj)); if (user_class_obj == NULL) { ERROR("utils_vl_lookup: calloc failed."); - return (ENOMEM); + return ENOMEM; } pthread_mutex_init(&user_class_obj->entry.lock, /* attr = */ NULL); user_class_obj->entry.user_class = user_class; @@ -587,7 +587,7 @@ int lookup_add(lookup_t *obj, /* {{{ */ user_class_obj->entry.user_obj_list = NULL; user_class_obj->next = NULL; - return (lu_add_by_plugin(by_type, user_class_obj)); + return lu_add_by_plugin(by_type, user_class_obj); } /* }}} int lookup_add */ /* returns the number of successful calls to the callback function */ @@ -599,18 +599,18 @@ int lookup_search(lookup_t *obj, /* {{{ */ int status; if ((obj == NULL) || (ds == NULL) || (vl == NULL)) - return (-EINVAL); + return -EINVAL; by_type = lu_search_by_type(obj, vl->type, /* allocate = */ 0); if (by_type == NULL) - return (0); + return 0; status = c_avl_get(by_type->by_plugin_tree, vl->plugin, (void *)&user_class_list); if (status == 0) { status = lu_handle_user_class_list(obj, ds, vl, user_class_list); if (status < 0) - return (status); + return status; retval += status; } @@ -618,9 +618,9 @@ int lookup_search(lookup_t *obj, /* {{{ */ status = lu_handle_user_class_list(obj, ds, vl, by_type->wildcard_plugin_list); if (status < 0) - return (status); + return status; retval += status; } - return (retval); + return retval; } /* }}} lookup_search */ diff --git a/src/utils_vl_lookup_test.c b/src/utils_vl_lookup_test.c index 776a520a..058015ed 100644 --- a/src/utils_vl_lookup_test.c +++ b/src/utils_vl_lookup_test.c @@ -53,9 +53,9 @@ static int lookup_obj_callback(data_set_t const *ds, value_list_t const *vl, memcpy(&last_obj_ident, obj, sizeof(last_obj_ident)); if (strcmp(obj->plugin_instance, "failure") == 0) - return (-1); + return -1; - return (0); + return 0; } static void *lookup_class_callback(data_set_t const *ds, value_list_t const *vl, @@ -77,7 +77,7 @@ static void *lookup_class_callback(data_set_t const *ds, value_list_t const *vl, have_new_obj = 1; - return ((void *)obj); + return (void *)obj; } static int checked_lookup_add(lookup_t *obj, /* {{{ */ @@ -123,7 +123,7 @@ static int checked_lookup_search(lookup_t *obj, char const *host, have_new_obj = 0; status = lookup_search(obj, ds, &vl); - return (status); + return status; } DEF_TEST(group_by_specific_host) { @@ -142,7 +142,7 @@ DEF_TEST(group_by_specific_host) { /* expect new = */ 0); lookup_destroy(obj); - return (0); + return 0; } DEF_TEST(group_by_any_host) { @@ -170,7 +170,7 @@ DEF_TEST(group_by_any_host) { /* expect new = */ 0); lookup_destroy(obj); - return (0); + return 0; } DEF_TEST(multiple_lookups) { @@ -198,7 +198,7 @@ DEF_TEST(multiple_lookups) { assert(status == 2); lookup_destroy(obj); - return (0); + return 0; } DEF_TEST(regex) { @@ -228,7 +228,7 @@ DEF_TEST(regex) { /* expect new = */ 1); lookup_destroy(obj); - return (0); + return 0; } int main(int argc, char **argv) /* {{{ */ diff --git a/src/uuid.c b/src/uuid.c index 89c9e7dd..4846841b 100644 --- a/src/uuid.c +++ b/src/uuid.c @@ -33,10 +33,6 @@ #include #endif -#if HAVE_LIBHAL_H -#include -#endif - #define UUID_RAW_LENGTH 16 #define UUID_PRINTABLE_COMPACT_LENGTH (UUID_RAW_LENGTH * 2) #define UUID_PRINTABLE_NORMAL_LENGTH (UUID_PRINTABLE_COMPACT_LENGTH + 4) @@ -49,19 +45,19 @@ static int looks_like_a_uuid(const char *uuid) { int len; if (!uuid) - return (0); + return 0; len = strlen(uuid); if (len < UUID_PRINTABLE_COMPACT_LENGTH) - return (0); + return 0; while (*uuid) { if (!isxdigit((int)*uuid) && *uuid != '-') - return (0); + return 0; uuid++; } - return (1); + return 1; } static char *uuid_parse_dmidecode(FILE *file) { @@ -86,9 +82,9 @@ static char *uuid_parse_dmidecode(FILE *file) { if (!looks_like_a_uuid(fields[1])) continue; - return (strdup(fields[1])); + return strdup(fields[1]); } - return (NULL); + return NULL; } static char *uuid_get_from_dmidecode(void) { @@ -96,12 +92,12 @@ static char *uuid_get_from_dmidecode(void) { char *uuid; if (!dmidecode) - return (NULL); + return NULL; uuid = uuid_parse_dmidecode(dmidecode); pclose(dmidecode); - return (uuid); + return uuid; } #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) @@ -110,7 +106,7 @@ static char *uuid_get_from_sysctlbyname(const char *name) { size_t len = sizeof(uuid); if (sysctlbyname(name, &uuid, &len, NULL, 0) == -1) return NULL; - return (strdup(uuid)); + return strdup(uuid); } #elif defined(__OpenBSD__) static char *uuid_get_from_sysctl(void) { @@ -123,53 +119,7 @@ static char *uuid_get_from_sysctl(void) { if (sysctl(mib, 2, uuid, &len, NULL, 0) == -1) return NULL; - return (strdup(uuid)); -} -#endif - -#if HAVE_LIBHAL_H - -#define UUID_PATH "/org/freedesktop/Hal/devices/computer" -#define UUID_PROPERTY "smbios.system.uuid" - -static char *uuid_get_from_hal(void) { - LibHalContext *ctx; - - DBusError error; - DBusConnection *con; - - dbus_error_init(&error); - - if (!(con = dbus_bus_get(DBUS_BUS_SYSTEM, &error))) - goto bailout_nobus; - - ctx = libhal_ctx_new(); - libhal_ctx_set_dbus_connection(ctx, con); - - if (!libhal_ctx_init(ctx, &error)) - goto bailout; - - if (!libhal_device_property_exists(ctx, UUID_PATH, UUID_PROPERTY, &error)) - goto bailout; - - char *uuid = - libhal_device_get_property_string(ctx, UUID_PATH, UUID_PROPERTY, &error); - if (looks_like_a_uuid(uuid)) - return (uuid); - -bailout : { - DBusError ctxerror; - dbus_error_init(&ctxerror); - if (!(libhal_ctx_shutdown(ctx, &ctxerror))) - dbus_error_free(&ctxerror); -} - - libhal_ctx_free(ctx); - -bailout_nobus: - if (dbus_error_is_set(&error)) - dbus_error_free(&error); - return (NULL); + return strdup(uuid); } #endif @@ -179,16 +129,16 @@ static char *uuid_get_from_file(const char *path) { file = fopen(path, "r"); if (file == NULL) - return (NULL); + return NULL; if (!fgets(uuid, sizeof(uuid), file)) { fclose(file); - return (NULL); + return NULL; } fclose(file); strstripnewline(uuid); - return (strdup(uuid)); + return strdup(uuid); } static char *uuid_get_local(void) { @@ -196,52 +146,47 @@ static char *uuid_get_local(void) { /* Check /etc/uuid / UUIDFile before any other method. */ if ((uuid = uuid_get_from_file(uuidfile ? uuidfile : "/etc/uuid")) != NULL) - return (uuid); + return uuid; #if defined(__APPLE__) if ((uuid = uuid_get_from_sysctlbyname("kern.uuid")) != NULL) - return (uuid); + return uuid; #elif defined(__FreeBSD__) if ((uuid = uuid_get_from_sysctlbyname("kern.hostuuid")) != NULL) - return (uuid); + return uuid; #elif defined(__NetBSD__) if ((uuid = uuid_get_from_sysctlbyname("machdep.dmi.system-uuid")) != NULL) - return (uuid); + return uuid; #elif defined(__OpenBSD__) if ((uuid = uuid_get_from_sysctl()) != NULL) - return (uuid); + return uuid; #elif defined(__linux__) if ((uuid = uuid_get_from_file("/sys/class/dmi/id/product_uuid")) != NULL) - return (uuid); -#endif - -#if HAVE_LIBHAL_H - if ((uuid = uuid_get_from_hal()) != NULL) - return (uuid); + return uuid; #endif if ((uuid = uuid_get_from_dmidecode()) != NULL) - return (uuid); + return uuid; #if defined(__linux__) if ((uuid = uuid_get_from_file("/sys/hypervisor/uuid")) != NULL) - return (uuid); + return uuid; #endif - return (NULL); + return NULL; } static int uuid_config(const char *key, const char *value) { if (strcasecmp(key, "UUIDFile") == 0) { char *tmp = strdup(value); if (tmp == NULL) - return (-1); + return -1; sfree(uuidfile); uuidfile = tmp; - return (0); + return 0; } - return (1); + return 1; } static int uuid_init(void) { @@ -250,11 +195,11 @@ static int uuid_init(void) { if (uuid) { sstrncpy(hostname_g, uuid, DATA_MAX_NAME_LEN); sfree(uuid); - return (0); + return 0; } WARNING("uuid: could not read UUID using any known method"); - return (0); + return 0; } void module_register(void) { @@ -262,17 +207,3 @@ void module_register(void) { STATIC_ARRAY_SIZE(config_keys)); plugin_register_init("uuid", uuid_init); } - -/* - * vim: set tabstop=4: - * vim: set shiftwidth=4: - * vim: set expandtab: - */ -/* - * Local variables: - * indent-tabs-mode: nil - * c-indent-level: 4 - * c-basic-offset: 4 - * tab-width: 4 - * End: - */ diff --git a/src/valgrind.FreeBSD.suppress b/src/valgrind.FreeBSD.suppress index 7a238173..862085d7 100644 --- a/src/valgrind.FreeBSD.suppress +++ b/src/valgrind.FreeBSD.suppress @@ -2,7 +2,6 @@ strlen_bogus_invalid_read_after_strdup Memcheck:Addr4 fun:parse_value - fun:parse_values ... fun:main } diff --git a/src/varnish.c b/src/varnish.c index 41b60d85..1a71d8ce 100644 --- a/src/varnish.c +++ b/src/varnish.c @@ -106,23 +106,25 @@ static int varnish_submit(const char *plugin_instance, /* {{{ */ if (type_instance != NULL) sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } /* }}} int varnish_submit */ static int varnish_submit_gauge(const char *plugin_instance, /* {{{ */ const char *category, const char *type, const char *type_instance, uint64_t gauge_value) { - return (varnish_submit(plugin_instance, category, type, type_instance, - (value_t){.gauge = (gauge_t)gauge_value})); + return varnish_submit(plugin_instance, category, type, type_instance, (value_t){ + .gauge=(gauge_t)gauge_value, + }); } /* }}} int varnish_submit_gauge */ static int varnish_submit_derive(const char *plugin_instance, /* {{{ */ const char *category, const char *type, const char *type_instance, uint64_t derive_value) { - return (varnish_submit(plugin_instance, category, type, type_instance, - (value_t){.derive = (derive_t)derive_value})); + return varnish_submit(plugin_instance, category, type, type_instance, (value_t){ + .derive=(derive_t)derive_value, + }); } /* }}} int varnish_submit_derive */ #if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 @@ -135,7 +137,7 @@ static int varnish_monitor(void *priv, const char *name; if (pt == NULL) - return (0); + return 0; conf = priv; @@ -144,14 +146,14 @@ static int varnish_monitor(void *priv, name = pt->desc->name; if (strcmp(class, "MAIN") != 0) - return (0); + return 0; #elif HAVE_VARNISH_V3 class = pt->class; name = pt->name; if (strcmp(class, "") != 0) - return (0); + return 0; #endif val = *(const volatile uint64_t *)pt->ptr; @@ -170,21 +172,21 @@ static int varnish_monitor(void *priv, if (conf->collect_connections) { if (strcmp(name, "client_conn") == 0) - return varnish_submit_derive(conf->instance, "connections", "connections", - "accepted", val); + return varnish_submit_derive(conf->instance, "connections", + "connections", "accepted", val); else if (strcmp(name, "client_drop") == 0) - return varnish_submit_derive(conf->instance, "connections", "connections", - "dropped", val); + return varnish_submit_derive(conf->instance, "connections", + "connections", "dropped", val); else if (strcmp(name, "client_req") == 0) - return varnish_submit_derive(conf->instance, "connections", "connections", - "received", val); + return varnish_submit_derive(conf->instance, "connections", + "connections", "received", val); } #ifdef HAVE_VARNISH_V3 if (conf->collect_dirdns) { if (strcmp(name, "dir_dns_lookups") == 0) - return varnish_submit_derive(conf->instance, "dirdns", "cache_operation", - "lookups", val); + return varnish_submit_derive(conf->instance, "dirdns", + "cache_operation", "lookups", val); else if (strcmp(name, "dir_dns_failed") == 0) return varnish_submit_derive(conf->instance, "dirdns", "cache_result", "failed", val); @@ -439,26 +441,26 @@ static int varnish_monitor(void *priv, return varnish_submit_gauge(conf->instance, "sms", "requests", "outstanding", val); else if (strcmp(name, "sms_nbytes") == 0) - return varnish_submit_gauge(conf->instance, "sms", "bytes", "outstanding", - val); + return varnish_submit_gauge(conf->instance, "sms", "bytes", + "outstanding", val); else if (strcmp(name, "sms_balloc") == 0) return varnish_submit_derive(conf->instance, "sms", "total_bytes", "allocated", val); else if (strcmp(name, "sms_bfree") == 0) - return varnish_submit_derive(conf->instance, "sms", "total_bytes", "free", - val); + return varnish_submit_derive(conf->instance, "sms", "total_bytes", + "free", val); } if (conf->collect_struct) { if (strcmp(name, "n_sess_mem") == 0) - return varnish_submit_gauge(conf->instance, "struct", "current_sessions", - "sess_mem", val); + return varnish_submit_gauge(conf->instance, "struct", + "current_sessions", "sess_mem", val); else if (strcmp(name, "n_sess") == 0) - return varnish_submit_gauge(conf->instance, "struct", "current_sessions", - "sess", val); + return varnish_submit_gauge(conf->instance, "struct", + "current_sessions", "sess", val); else if (strcmp(name, "n_object") == 0) - return varnish_submit_gauge(conf->instance, "struct", "objects", "object", - val); + return varnish_submit_gauge(conf->instance, "struct", "objects", + "object", val); else if (strcmp(name, "n_vampireobject") == 0) return varnish_submit_gauge(conf->instance, "struct", "objects", "vampireobject", val); @@ -493,14 +495,14 @@ static int varnish_monitor(void *priv, return varnish_submit_derive(conf->instance, "totals", "total_requests", "requests", val); else if (strcmp(name, "s_pipe") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "pipe", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "pipe", val); else if (strcmp(name, "s_pass") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "pass", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "pass", val); else if (strcmp(name, "s_fetch") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "fetches", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "fetches", val); else if (strcmp(name, "s_synth") == 0) return varnish_submit_derive(conf->instance, "totals", "total_bytes", "synth", val); @@ -526,8 +528,8 @@ static int varnish_monitor(void *priv, return varnish_submit_derive(conf->instance, "totals", "total_bytes", "pipe_out", val); else if (strcmp(name, "n_purges") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "purges", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "purges", val); else if (strcmp(name, "s_hdrbytes") == 0) return varnish_submit_derive(conf->instance, "totals", "total_bytes", "header-bytes", val); @@ -535,11 +537,11 @@ static int varnish_monitor(void *priv, return varnish_submit_derive(conf->instance, "totals", "total_bytes", "body-bytes", val); else if (strcmp(name, "n_gzip") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "gzip", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "gzip", val); else if (strcmp(name, "n_gunzip") == 0) - return varnish_submit_derive(conf->instance, "totals", "total_operations", - "gunzip", val); + return varnish_submit_derive(conf->instance, "totals", + "total_operations", "gunzip", val); } if (conf->collect_uptime) { @@ -556,8 +558,8 @@ static int varnish_monitor(void *priv, return varnish_submit_gauge(conf->instance, "vcl", "vcl", "avail_vcl", val); else if (strcmp(name, "n_vcl_discard") == 0) - return varnish_submit_gauge(conf->instance, "vcl", "vcl", "discarded_vcl", - val); + return varnish_submit_gauge(conf->instance, "vcl", "vcl", + "discarded_vcl", val); else if (strcmp(name, "vmods") == 0) return varnish_submit_gauge(conf->instance, "vcl", "objects", "vmod", val); @@ -598,17 +600,17 @@ static int varnish_monitor(void *priv, return varnish_submit_derive(conf->instance, "workers", "total_threads", "dropped", val); else if (strcmp(name, "n_wrk_queue") == 0) - return varnish_submit_derive(conf->instance, "workers", "total_requests", - "queued", val); + return varnish_submit_derive(conf->instance, "workers", + "total_requests", "queued", val); else if (strcmp(name, "n_wrk_overflow") == 0) - return varnish_submit_derive(conf->instance, "workers", "total_requests", - "overflowed", val); + return varnish_submit_derive(conf->instance, "workers", + "total_requests", "overflowed", val); else if (strcmp(name, "n_wrk_queued") == 0) - return varnish_submit_derive(conf->instance, "workers", "total_requests", - "queued", val); + return varnish_submit_derive(conf->instance, "workers", + "total_requests", "queued", val); else if (strcmp(name, "n_wrk_lqueue") == 0) - return varnish_submit_derive(conf->instance, "workers", "total_requests", - "queue_length", val); + return varnish_submit_derive(conf->instance, "workers", + "total_requests", "queue_length", val); } #if HAVE_VARNISH_V4 @@ -629,7 +631,7 @@ static int varnish_monitor(void *priv, } #endif - return (0); + return 0; } /* }}} static int varnish_monitor */ #else /* if HAVE_VARNISH_V2 */ @@ -981,7 +983,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ user_config_t *conf; if ((ud == NULL) || (ud->data == NULL)) - return (EINVAL); + return EINVAL; conf = ud->data; @@ -999,7 +1001,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ ERROR("varnish plugin: VSM_n_Arg (\"%s\") failed " "with status %i.", conf->instance, status); - return (-1); + return -1; } } @@ -1012,7 +1014,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ VSM_Delete(vd); ERROR("varnish plugin: Unable to open connection."); - return (-1); + return -1; } #if HAVE_VARNISH_V3 @@ -1024,7 +1026,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ VSM_Delete(vd); ERROR("varnish plugin: Unable to get statistics."); - return (-1); + return -1; } #if HAVE_VARNISH_V3 @@ -1034,7 +1036,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ #endif VSM_Delete(vd); - return (0); + return 0; } /* }}} */ #else /* if HAVE_VARNISH_V2 */ static int varnish_read(user_data_t *ud) /* {{{ */ @@ -1044,7 +1046,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ user_config_t *conf; if ((ud == NULL) || (ud->data == NULL)) - return (EINVAL); + return EINVAL; conf = ud->data; @@ -1052,12 +1054,12 @@ static int varnish_read(user_data_t *ud) /* {{{ */ if (stats == NULL) { ERROR("Varnish plugin : unable to load statistics"); - return (-1); + return -1; } varnish_monitor(conf, stats); - return (0); + return 0; } /* }}} */ #endif @@ -1075,7 +1077,7 @@ static void varnish_config_free(void *ptr) /* {{{ */ static int varnish_config_apply_default(user_config_t *conf) /* {{{ */ { if (conf == NULL) - return (EINVAL); + return EINVAL; conf->collect_backend = 1; conf->collect_cache = 1; @@ -1110,7 +1112,7 @@ static int varnish_config_apply_default(user_config_t *conf) /* {{{ */ conf->collect_vsm = 0; #endif - return (0); + return 0; } /* }}} int varnish_config_apply_default */ static int varnish_init(void) /* {{{ */ @@ -1118,11 +1120,11 @@ static int varnish_init(void) /* {{{ */ user_config_t *conf; if (have_instance) - return (0); + return 0; conf = calloc(1, sizeof(*conf)); if (conf == NULL) - return (ENOMEM); + return ENOMEM; /* Default settings: */ conf->instance = NULL; @@ -1137,7 +1139,7 @@ static int varnish_init(void) /* {{{ */ .data = conf, .free_func = varnish_config_free, }); - return (0); + return 0; } /* }}} int varnish_init */ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ @@ -1147,7 +1149,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ conf = calloc(1, sizeof(*conf)); if (conf == NULL) - return (ENOMEM); + return ENOMEM; conf->instance = NULL; varnish_config_apply_default(conf); @@ -1158,7 +1160,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(ci, &conf->instance); if (status != 0) { sfree(conf); - return (status); + return status; } assert(conf->instance != NULL); @@ -1170,7 +1172,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ WARNING("Varnish plugin: \"Instance\" blocks accept only " "one argument."); sfree(conf); - return (EINVAL); + return EINVAL; } for (int i = 0; i < ci->children_num; i++) { @@ -1290,7 +1292,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ "instance \"%s\". Disabling this instance.", (conf->instance == NULL) ? "localhost" : conf->instance); sfree(conf); - return (EINVAL); + return EINVAL; } ssnprintf(callback_name, sizeof(callback_name), "varnish/%s", @@ -1306,7 +1308,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ have_instance = 1; - return (0); + return 0; } /* }}} int varnish_config_instance */ static int varnish_config(oconfig_item_t *ci) /* {{{ */ @@ -1323,7 +1325,7 @@ static int varnish_config(oconfig_item_t *ci) /* {{{ */ } } - return (0); + return 0; } /* }}} int varnish_config */ void module_register(void) /* {{{ */ @@ -1331,5 +1333,3 @@ void module_register(void) /* {{{ */ plugin_register_complex_config("varnish", varnish_config); plugin_register_init("varnish", varnish_init); } /* }}} */ - -/* vim: set sw=8 noet fdm=marker : */ diff --git a/src/virt.c b/src/virt.c index c3c07a0d..14095df4 100644 --- a/src/virt.c +++ b/src/virt.c @@ -17,6 +17,7 @@ * * Authors: * Richard W.M. Jones + * Przemyslaw Szczerbik **/ #include "collectd.h" @@ -32,10 +33,63 @@ #include #include #include +#include /* Plugin name */ #define PLUGIN_NAME "virt" +#ifdef LIBVIR_CHECK_VERSION + +#if LIBVIR_CHECK_VERSION(0, 9, 2) +#define HAVE_DOM_REASON 1 +#endif + +#if LIBVIR_CHECK_VERSION(0, 9, 5) +#define HAVE_BLOCK_STATS_FLAGS 1 +#define HAVE_DOM_REASON_PAUSED_SHUTTING_DOWN 1 +#endif + +#if LIBVIR_CHECK_VERSION(0, 9, 10) +#define HAVE_DISK_ERR 1 +#endif + +#if LIBVIR_CHECK_VERSION(0, 9, 11) +#define HAVE_CPU_STATS 1 +#define HAVE_DOM_STATE_PMSUSPENDED 1 +#define HAVE_DOM_REASON_RUNNING_WAKEUP 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 0, 1) +#define HAVE_DOM_REASON_PAUSED_SNAPSHOT 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 1, 1) +#define HAVE_DOM_REASON_PAUSED_CRASHED 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 2, 9) +#define HAVE_JOB_STATS 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 2, 10) +#define HAVE_DOM_REASON_CRASHED 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 2, 11) +#define HAVE_FS_INFO 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 2, 15) +#define HAVE_DOM_REASON_PAUSED_STARTING_UP 1 +#endif + +#if LIBVIR_CHECK_VERSION(1, 3, 3) +#define HAVE_PERF_STATS 1 +#define HAVE_DOM_REASON_POSTCOPY 1 +#endif + +#endif /* LIBVIR_CHECK_VERSION */ + static const char *config_keys[] = {"Connection", "RefreshInterval", @@ -52,14 +106,148 @@ static const char *config_keys[] = {"Connection", "PluginInstanceFormat", + "Instances", + "ExtraStats", NULL}; + +const char *domain_states[] = { + [VIR_DOMAIN_NOSTATE] = "no state", + [VIR_DOMAIN_RUNNING] = "the domain is running", + [VIR_DOMAIN_BLOCKED] = "the domain is blocked on resource", + [VIR_DOMAIN_PAUSED] = "the domain is paused by user", + [VIR_DOMAIN_SHUTDOWN] = "the domain is being shut down", + [VIR_DOMAIN_SHUTOFF] = "the domain is shut off", + [VIR_DOMAIN_CRASHED] = "the domain is crashed", +#ifdef HAVE_DOM_STATE_PMSUSPENDED + [VIR_DOMAIN_PMSUSPENDED] = + "the domain is suspended by guest power management", +#endif +}; + +#ifdef HAVE_DOM_REASON +#define DOMAIN_STATE_REASON_MAX_SIZE 20 +const char *domain_reasons[][DOMAIN_STATE_REASON_MAX_SIZE] = { + [VIR_DOMAIN_NOSTATE][VIR_DOMAIN_NOSTATE_UNKNOWN] = + "the reason is unknown", + + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_UNKNOWN] = + "the reason is unknown", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_BOOTED] = + "normal startup from boot", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_MIGRATED] = + "migrated from another host", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_RESTORED] = + "restored from a state file", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_FROM_SNAPSHOT] = + "restored from snapshot", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_UNPAUSED] = + "returned from paused state", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_MIGRATION_CANCELED] = + "returned from migration", + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_SAVE_CANCELED] = + "returned from failed save process", +#ifdef HAVE_DOM_REASON_RUNNING_WAKEUP + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_WAKEUP] = + "returned from pmsuspended due to wakeup event", +#endif +#ifdef HAVE_DOM_REASON_CRASHED + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_CRASHED] = + "resumed from crashed", +#endif +#ifdef HAVE_DOM_REASON_POSTCOPY + [VIR_DOMAIN_RUNNING][VIR_DOMAIN_RUNNING_POSTCOPY] = + "running in post-copy migration mode", +#endif + + [VIR_DOMAIN_BLOCKED][VIR_DOMAIN_BLOCKED_UNKNOWN] = + "the reason is unknown", + + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_UNKNOWN] = + "the reason is unknown", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_USER] = "paused on user request", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_MIGRATION] = + "paused for offline migration", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_SAVE] = "paused for save", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_DUMP] = + "paused for offline core dump", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_IOERROR] = + "paused due to a disk I/O error", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_WATCHDOG] = + "paused due to a watchdog event", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_FROM_SNAPSHOT] = + "paused after restoring from snapshot", +#ifdef HAVE_DOM_REASON_PAUSED_SHUTTING_DOWN + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_SHUTTING_DOWN] = + "paused during shutdown process", +#endif +#ifdef HAVE_DOM_REASON_PAUSED_SNAPSHOT + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_SNAPSHOT] = + "paused while creating a snapshot", +#endif +#ifdef HAVE_DOM_REASON_PAUSED_CRASHED + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_CRASHED] = + "paused due to a guest crash", +#endif +#ifdef HAVE_DOM_REASON_PAUSED_STARTING_UP + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_STARTING_UP] = + "the domain is being started", +#endif +#ifdef HAVE_DOM_REASON_POSTCOPY + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_POSTCOPY] = + "paused for post-copy migration", + [VIR_DOMAIN_PAUSED][VIR_DOMAIN_PAUSED_POSTCOPY_FAILED] = + "paused after failed post-copy", +#endif + + [VIR_DOMAIN_SHUTDOWN][VIR_DOMAIN_SHUTDOWN_UNKNOWN] = + "the reason is unknown", + [VIR_DOMAIN_SHUTDOWN][VIR_DOMAIN_SHUTDOWN_USER] = + "shutting down on user request", + + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_UNKNOWN] = + "the reason is unknown", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_SHUTDOWN] = "normal shutdown", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_DESTROYED] = "forced poweroff", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_CRASHED] = "domain crashed", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_MIGRATED] = + "migrated to another host", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_SAVED] = "saved to a file", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_FAILED] = + "domain failed to start", + [VIR_DOMAIN_SHUTOFF][VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT] = + "restored from a snapshot which was taken while domain was shutoff", + + [VIR_DOMAIN_CRASHED][VIR_DOMAIN_CRASHED_UNKNOWN] = + "the reason is unknown", +#ifdef VIR_DOMAIN_CRASHED_PANICKED + [VIR_DOMAIN_CRASHED][VIR_DOMAIN_CRASHED_PANICKED] = "domain panicked", +#endif + +#ifdef HAVE_DOM_STATE_PMSUSPENDED + [VIR_DOMAIN_PMSUSPENDED][VIR_DOMAIN_PMSUSPENDED_UNKNOWN] = + "the reason is unknown", +#endif +}; +#endif /* HAVE_DOM_REASON */ + #define NR_CONFIG_KEYS ((sizeof config_keys / sizeof config_keys[0]) - 1) +#define NANOSEC_IN_SEC 1e9 + +#define GET_STATS(_f, _name, ...) \ + do { \ + status = _f(__VA_ARGS__); \ + if (status != 0) \ + ERROR(PLUGIN_NAME ": Failed to get " _name); \ + } while (0) /* Connection. */ static virConnectPtr conn = 0; static char *conn_string = NULL; static c_complain_t conn_complain = C_COMPLAIN_INIT_STATIC; +/* Node information required for %CPU */ +static virNodeInfo nodeinfo; + /* Seconds between list refreshes, 0 disables completely. */ static int interval = 60; @@ -73,25 +261,12 @@ static ignorelist_t *il_interface_devices = NULL; static int ignore_device_match(ignorelist_t *, const char *domname, const char *devpath); -/* Actual list of domains found on last refresh. */ -static virDomainPtr *domains = NULL; -static int nr_domains = 0; - -static void free_domains(void); -static int add_domain(virDomainPtr dom); - /* Actual list of block devices found on last refresh. */ struct block_device { virDomainPtr dom; /* domain */ char *path; /* name of block device */ }; -static struct block_device *block_devices = NULL; -static int nr_block_devices = 0; - -static void free_block_devices(void); -static int add_block_device(virDomainPtr dom, const char *path); - /* Actual list of network interfaces found on last refresh. */ struct interface_device { virDomainPtr dom; /* domain */ @@ -100,12 +275,57 @@ struct interface_device { char *number; /* interface device number */ }; -static struct interface_device *interface_devices = NULL; -static int nr_interface_devices = 0; +typedef struct domain_s { + virDomainPtr ptr; + virDomainInfo info; +} domain_t; + +struct lv_read_state { + /* Actual list of domains found on last refresh. */ + domain_t *domains; + int nr_domains; + + struct block_device *block_devices; + int nr_block_devices; + + struct interface_device *interface_devices; + int nr_interface_devices; +}; + +static void free_domains(struct lv_read_state *state); +static int add_domain(struct lv_read_state *state, virDomainPtr dom); + +static void free_block_devices(struct lv_read_state *state); +static int add_block_device(struct lv_read_state *state, virDomainPtr dom, + const char *path); + +static void free_interface_devices(struct lv_read_state *state); +static int add_interface_device(struct lv_read_state *state, virDomainPtr dom, + const char *path, const char *address, + unsigned int number); + +#define METADATA_VM_PARTITION_URI "http://ovirt.org/ovirtmap/tag/1.0" +#define METADATA_VM_PARTITION_ELEMENT "tag" +#define METADATA_VM_PARTITION_PREFIX "ovirtmap" + +#define BUFFER_MAX_LEN 256 +#define PARTITION_TAG_MAX_LEN 32 + +struct lv_read_instance { + struct lv_read_state read_state; + char tag[PARTITION_TAG_MAX_LEN]; + size_t id; +}; + +struct lv_user_data { + struct lv_read_instance inst; + user_data_t ud; +}; -static void free_interface_devices(void); -static int add_interface_device(virDomainPtr dom, const char *path, - const char *address, unsigned int number); +#define NR_INSTANCES_DEFAULT 1 +#define NR_INSTANCES_MAX 128 +static int nr_instances = NR_INSTANCES_DEFAULT; +static struct lv_user_data lv_read_user_data[NR_INSTANCES_MAX]; /* HostnameFormat. */ #define HF_MAX_FIELDS 3 @@ -128,6 +348,58 @@ enum bd_field { target, source }; /* InterfaceFormat. */ enum if_field { if_address, if_name, if_number }; +/* ExtraStats */ +#define EX_STATS_MAX_FIELDS 15 +enum ex_stats { + ex_stats_none = 0, + ex_stats_disk = 1 << 0, + ex_stats_pcpu = 1 << 1, + ex_stats_cpu_util = 1 << 2, + ex_stats_domain_state = 1 << 3, +#ifdef HAVE_PERF_STATS + ex_stats_perf = 1 << 4, +#endif + ex_stats_vcpupin = 1 << 5, +#ifdef HAVE_DISK_ERR + ex_stats_disk_err = 1 << 6, +#endif +#ifdef HAVE_FS_INFO + ex_stats_fs_info = 1 << 7, +#endif +#ifdef HAVE_JOB_STATS + ex_stats_job_stats_completed = 1 << 8, + ex_stats_job_stats_background = 1 << 9, +#endif +}; + +static unsigned int extra_stats = ex_stats_none; + +struct ex_stats_item { + const char *name; + enum ex_stats flag; +}; +static const struct ex_stats_item ex_stats_table[] = { + {"disk", ex_stats_disk}, + {"pcpu", ex_stats_pcpu}, + {"cpu_util", ex_stats_cpu_util}, + {"domain_state", ex_stats_domain_state}, +#ifdef HAVE_PERF_STATS + {"perf", ex_stats_perf}, +#endif + {"vcpupin", ex_stats_vcpupin}, +#ifdef HAVE_DISK_ERR + {"disk_err", ex_stats_disk_err}, +#endif +#ifdef HAVE_FS_INFO + {"fs_info", ex_stats_fs_info}, +#endif +#ifdef HAVE_JOB_STATS + {"job_stats_completed", ex_stats_job_stats_completed}, + {"job_stats_background", ex_stats_job_stats_background}, +#endif + {NULL, ex_stats_none}, +}; + /* BlockDeviceFormatBasename */ _Bool blockdevice_format_basename = 0; static enum bd_field blockdevice_format = target; @@ -136,7 +408,72 @@ static enum if_field interface_format = if_name; /* Time that we last refreshed. */ static time_t last_refresh = (time_t)0; -static int refresh_lists(void); +static int refresh_lists(struct lv_read_instance *inst); + +struct lv_info { + virDomainInfo di; + unsigned long long total_user_cpu_time; + unsigned long long total_syst_cpu_time; +}; + +struct lv_block_info { + virDomainBlockStatsStruct bi; + + long long rd_total_times; + long long wr_total_times; + + long long fl_req; + long long fl_total_times; +}; + +static void init_block_info(struct lv_block_info *binfo) { + if (binfo == NULL) + return; + + binfo->bi.rd_req = -1; + binfo->bi.wr_req = -1; + binfo->bi.rd_bytes = -1; + binfo->bi.wr_bytes = -1; + + binfo->rd_total_times = -1; + binfo->wr_total_times = -1; + binfo->fl_req = -1; + binfo->fl_total_times = -1; +} + +#ifdef HAVE_BLOCK_STATS_FLAGS + +#define GET_BLOCK_INFO_VALUE(NAME, FIELD) \ + do { \ + if (!strcmp(param[i].field, NAME)) { \ + binfo->FIELD = param[i].value.l; \ + continue; \ + } \ + } while (0) + +static int get_block_info(struct lv_block_info *binfo, + virTypedParameterPtr param, int nparams) { + if (binfo == NULL || param == NULL) + return -1; + + for (int i = 0; i < nparams; ++i) { + /* ignore type. Everything must be LLONG anyway. */ + GET_BLOCK_INFO_VALUE("rd_operations", bi.rd_req); + GET_BLOCK_INFO_VALUE("wr_operations", bi.wr_req); + GET_BLOCK_INFO_VALUE("rd_bytes", bi.rd_bytes); + GET_BLOCK_INFO_VALUE("wr_bytes", bi.wr_bytes); + GET_BLOCK_INFO_VALUE("rd_total_times", rd_total_times); + GET_BLOCK_INFO_VALUE("wr_total_times", wr_total_times); + GET_BLOCK_INFO_VALUE("flush_operations", fl_req); + GET_BLOCK_INFO_VALUE("flush_total_times", fl_total_times); + } + + return 0; +} + +#undef GET_BLOCK_INFO_VALUE + +#endif /* HAVE_BLOCK_STATS_FLAGS */ /* ERROR(...) macro for virterrors. */ #define VIRT_ERROR(conn, s) \ @@ -147,6 +484,56 @@ static int refresh_lists(void); ERROR("%s: %s", (s), err->message); \ } while (0) +static void init_lv_info(struct lv_info *info) { + if (info != NULL) + memset(info, 0, sizeof(*info)); +} + +static int lv_domain_info(virDomainPtr dom, struct lv_info *info) { +#ifdef HAVE_CPU_STATS + virTypedParameterPtr param = NULL; + int nparams = 0; +#endif /* HAVE_CPU_STATS */ + int ret = virDomainGetInfo(dom, &(info->di)); + if (ret != 0) { + return ret; + } + +#ifdef HAVE_CPU_STATS + nparams = virDomainGetCPUStats(dom, NULL, 0, -1, 1, 0); + if (nparams < 0) { + VIRT_ERROR(conn, "getting the CPU params count"); + return -1; + } + + param = calloc(nparams, sizeof(virTypedParameter)); + if (param == NULL) { + ERROR("virt plugin: alloc(%i) for cpu parameters failed.", nparams); + return -1; + } + + ret = virDomainGetCPUStats(dom, param, nparams, -1, 1, 0); // total stats. + if (ret < 0) { + virTypedParamsClear(param, nparams); + sfree(param); + VIRT_ERROR(conn, "getting the disk params values"); + return -1; + } + + for (int i = 0; i < nparams; ++i) { + if (!strcmp(param[i].field, "user_time")) + info->total_user_cpu_time = param[i].value.ul; + else if (!strcmp(param[i].field, "system_time")) + info->total_syst_cpu_time = param[i].value.ul; + } + + virTypedParamsClear(param, nparams); + sfree(param); +#endif /* HAVE_CPU_STATS */ + + return 0; +} + static void init_value_list(value_list_t *vl, virDomainPtr dom) { int n; const char *name; @@ -219,6 +606,34 @@ static void init_value_list(value_list_t *vl, virDomainPtr dom) { } /* void init_value_list */ +static int init_notif(notification_t *notif, const virDomainPtr domain, + int severity, const char *msg, const char *type, + const char *type_instance) { + value_list_t vl = VALUE_LIST_INIT; + + if (!notif) { + ERROR(PLUGIN_NAME ": init_notif: NULL pointer"); + return -1; + } + + init_value_list(&vl, domain); + notification_init(notif, severity, msg, vl.host, vl.plugin, + vl.plugin_instance, type, type_instance); + notif->time = cdtime(); + return 0; +} + +static void submit_notif(const virDomainPtr domain, int severity, + const char *msg, const char *type, + const char *type_instance) { + notification_t notif; + + init_notif(¬if, domain, severity, msg, type, type_instance); + plugin_dispatch_notification(¬if); + if (notif.meta) + plugin_notification_meta_free(notif.meta); +} + static void submit(virDomainPtr dom, char const *type, char const *type_instance, value_t *values, size_t values_len) { @@ -235,7 +650,7 @@ static void submit(virDomainPtr dom, char const *type, plugin_dispatch_values(&vl); } -static void memory_submit(gauge_t value, virDomainPtr dom) { +static void memory_submit(virDomainPtr dom, gauge_t value) { submit(dom, "memory", "total", &(value_t){.gauge = value}, 1); } @@ -243,9 +658,10 @@ static void memory_stats_submit(gauge_t value, virDomainPtr dom, int tag_index) { static const char *tags[] = {"swap_in", "swap_out", "major_fault", "minor_fault", "unused", "available", - "actual_balloon", "rss"}; + "actual_balloon", "rss", "usable", + "last_update"}; - if ((tag_index < 0) || (tag_index >= STATIC_ARRAY_SIZE(tags))) { + if ((tag_index < 0) || (tag_index >= (int)STATIC_ARRAY_SIZE(tags))) { ERROR("virt plugin: Array index out of bounds: tag_index = %d", tag_index); return; } @@ -253,9 +669,62 @@ static void memory_stats_submit(gauge_t value, virDomainPtr dom, submit(dom, "memory", tags[tag_index], &(value_t){.gauge = value}, 1); } -static void cpu_submit(unsigned long long value, virDomainPtr dom, - const char *type) { - submit(dom, type, NULL, &(value_t){.derive = (derive_t)value}, 1); +static void submit_derive2(const char *type, derive_t v0, derive_t v1, + virDomainPtr dom, const char *devname) { + value_t values[] = { + {.derive = v0}, {.derive = v1}, + }; + + submit(dom, type, devname, values, STATIC_ARRAY_SIZE(values)); +} /* void submit_derive2 */ + +static void pcpu_submit(virDomainPtr dom, struct lv_info *info) { +#ifdef HAVE_CPU_STATS + if (extra_stats & ex_stats_pcpu) + submit_derive2("ps_cputime", info->total_user_cpu_time, + info->total_syst_cpu_time, dom, NULL); +#endif /* HAVE_CPU_STATS */ +} + +static double cpu_ns_to_percent(unsigned int node_cpus, + unsigned long long cpu_time_old, + unsigned long long cpu_time_new) { + double percent = 0.0; + unsigned long long cpu_time_diff = 0; + double time_diff_sec = CDTIME_T_TO_DOUBLE(plugin_get_interval()); + + if (node_cpus != 0 && time_diff_sec != 0 && cpu_time_old != 0) { + cpu_time_diff = cpu_time_new - cpu_time_old; + percent = ((double)(100 * cpu_time_diff)) / + (time_diff_sec * node_cpus * NANOSEC_IN_SEC); + } + + DEBUG(PLUGIN_NAME ": node_cpus=%u cpu_time_old=%llu cpu_time_new=%llu" + "cpu_time_diff=%llu time_diff_sec=%f percent=%f", + node_cpus, cpu_time_old, cpu_time_new, cpu_time_diff, time_diff_sec, + percent); + + return percent; +} + +static void cpu_submit(const domain_t *dom, unsigned long long cpuTime_new) { + + if (!dom) + return; + + if (extra_stats & ex_stats_cpu_util) { + /* Computing %CPU requires 2 samples of cpuTime */ + if (dom->info.cpuTime != 0 && cpuTime_new != 0) { + + submit(dom->ptr, "percent", "virt_cpu_total", + &(value_t){.gauge = cpu_ns_to_percent( + nodeinfo.cpus, dom->info.cpuTime, cpuTime_new)}, + 1); + } + } + + submit(dom->ptr, "virt_cpu_total", NULL, &(value_t){.derive = cpuTime_new}, + 1); } static void vcpu_submit(derive_t value, virDomainPtr dom, int vcpu_nr, @@ -263,24 +732,128 @@ static void vcpu_submit(derive_t value, virDomainPtr dom, int vcpu_nr, char type_instance[DATA_MAX_NAME_LEN]; ssnprintf(type_instance, sizeof(type_instance), "%d", vcpu_nr); - submit(dom, type, type_instance, &(value_t){.derive = value}, 1); } -static void submit_derive2(const char *type, derive_t v0, derive_t v1, - virDomainPtr dom, const char *devname) { - value_t values[] = { - {.derive = v0}, {.derive = v1}, - }; +static void disk_submit(struct lv_block_info *binfo, virDomainPtr dom, + const char *dev) { + char *dev_copy = strdup(dev); + const char *type_instance = dev_copy; - submit(dom, type, devname, values, STATIC_ARRAY_SIZE(values)); -} /* void submit_derive2 */ + if (!dev_copy) + return; -static int lv_init(void) { - if (virInitialize() != 0) - return -1; - else - return 0; + if (blockdevice_format_basename && blockdevice_format == source) + type_instance = basename(dev_copy); + + if (!type_instance) { + sfree(dev_copy); + return; + } + + char flush_type_instance[DATA_MAX_NAME_LEN]; + ssnprintf(flush_type_instance, sizeof(flush_type_instance), "flush-%s", + type_instance); + + if ((binfo->bi.rd_req != -1) && (binfo->bi.wr_req != -1)) + submit_derive2("disk_ops", (derive_t)binfo->bi.rd_req, + (derive_t)binfo->bi.wr_req, dom, type_instance); + + if ((binfo->bi.rd_bytes != -1) && (binfo->bi.wr_bytes != -1)) + submit_derive2("disk_octets", (derive_t)binfo->bi.rd_bytes, + (derive_t)binfo->bi.wr_bytes, dom, type_instance); + + if (extra_stats & ex_stats_disk) { + if ((binfo->rd_total_times != -1) && (binfo->wr_total_times != -1)) + submit_derive2("disk_time", (derive_t)binfo->rd_total_times, + (derive_t)binfo->wr_total_times, dom, type_instance); + + if (binfo->fl_req != -1) + submit(dom, "total_requests", flush_type_instance, + &(value_t){.derive = (derive_t)binfo->fl_req}, 1); + if (binfo->fl_total_times != -1) { + derive_t value = binfo->fl_total_times / 1000; // ns -> ms + submit(dom, "total_time_in_ms", flush_type_instance, + &(value_t){.derive = value}, 1); + } + } + + sfree(dev_copy); +} + +static unsigned int parse_ex_stats_flags(char **exstats, int numexstats) { + unsigned int ex_stats_flags = ex_stats_none; + for (int i = 0; i < numexstats; i++) { + for (int j = 0; ex_stats_table[j].name != NULL; j++) { + if (strcasecmp(exstats[i], ex_stats_table[j].name) == 0) { + DEBUG(PLUGIN_NAME " plugin: enabling extra stats for '%s'", + ex_stats_table[j].name); + ex_stats_flags |= ex_stats_table[j].flag; + break; + } + + if (ex_stats_table[j + 1].name == NULL) { + ERROR(PLUGIN_NAME ": Unmatched ExtraStats option: %s", exstats[i]); + } + } + } + return ex_stats_flags; +} + +static void domain_state_submit(virDomainPtr dom, int state, int reason) { + + if ((state < 0) || (state >= STATIC_ARRAY_SIZE(domain_states))) { + ERROR(PLUGIN_NAME ": Array index out of bounds: state=%d", state); + return; + } + + char msg[DATA_MAX_NAME_LEN]; + const char *state_str = domain_states[state]; +#ifdef HAVE_DOM_REASON + if ((reason < 0) || (reason >= STATIC_ARRAY_SIZE(domain_reasons[0]))) { + ERROR(PLUGIN_NAME ": Array index out of bounds: reason=%d", reason); + return; + } + + const char *reason_str = domain_reasons[state][reason]; + /* Array size for domain reasons is fixed, but different domain states can + * have different number of reasons. We need to check if reason was + * successfully parsed */ + if (!reason_str) { + ERROR(PLUGIN_NAME ": Invalid reason (%d) for domain state: %s", reason, + state_str); + return; + } +#else + const char *reason_str = "N/A"; +#endif + + ssnprintf(msg, sizeof(msg), "Domain state: %s. Reason: %s", state_str, + reason_str); + + int severity; + switch (state) { + case VIR_DOMAIN_NOSTATE: + case VIR_DOMAIN_RUNNING: + case VIR_DOMAIN_SHUTDOWN: + case VIR_DOMAIN_SHUTOFF: + severity = NOTIF_OKAY; + break; + case VIR_DOMAIN_BLOCKED: + case VIR_DOMAIN_PAUSED: +#ifdef DOM_STATE_PMSUSPENDED + case VIR_DOMAIN_PMSUSPENDED: +#endif + severity = NOTIF_WARNING; + break; + case VIR_DOMAIN_CRASHED: + severity = NOTIF_FAILURE; + break; + default: + ERROR(PLUGIN_NAME ": Unrecognized domain state (%d)", state); + return; + } + submit_notif(dom, severity, msg, "domain_state", NULL); } static int lv_config(const char *key, const char *value) { @@ -453,35 +1026,586 @@ static int lv_config(const char *key, const char *value) { return 0; } + if (strcasecmp(key, "Instances") == 0) { + char *eptr = NULL; + double val = strtod(value, &eptr); + + if (*eptr != '\0') { + ERROR(PLUGIN_NAME " plugin: Invalid value for Instances = '%s'", value); + return 1; + } + if (val <= 0) { + ERROR(PLUGIN_NAME " plugin: Instances <= 0 makes no sense."); + return 1; + } + if (val > NR_INSTANCES_MAX) { + ERROR(PLUGIN_NAME " plugin: Instances=%f > NR_INSTANCES_MAX=%i" + " use a lower setting or recompile the plugin.", + val, NR_INSTANCES_MAX); + return 1; + } + + nr_instances = (int)val; + DEBUG(PLUGIN_NAME " plugin: configured %i instances", nr_instances); + return 0; + } + + if (strcasecmp(key, "ExtraStats") == 0) { + char *localvalue = strdup(value); + if (localvalue != NULL) { + char *exstats[EX_STATS_MAX_FIELDS]; + int numexstats = + strsplit(localvalue, exstats, STATIC_ARRAY_SIZE(exstats)); + extra_stats = parse_ex_stats_flags(exstats, numexstats); + sfree(localvalue); + +#ifdef HAVE_JOB_STATS + if ((extra_stats & ex_stats_job_stats_completed) && + (extra_stats & ex_stats_job_stats_background)) { + ERROR(PLUGIN_NAME " plugin: Invalid job stats configuration. Only one " + "type of job statistics can be collected at the same " + "time"); + return 1; + } +#endif + } + } + /* Unrecognised option. */ return -1; } -static int lv_read(void) { - time_t t; - +static int lv_connect(void) { if (conn == NULL) { - /* `conn_string == NULL' is acceptable. */ - conn = virConnectOpenReadOnly(conn_string); +/* `conn_string == NULL' is acceptable */ +#ifdef HAVE_FS_INFO + /* virDomainGetFSInfo requires full read-write access connection */ + if (extra_stats & ex_stats_fs_info) + conn = virConnectOpen(conn_string); + else +#endif + conn = virConnectOpenReadOnly(conn_string); if (conn == NULL) { c_complain(LOG_ERR, &conn_complain, PLUGIN_NAME " plugin: Unable to connect: " - "virConnectOpenReadOnly failed."); + "virConnectOpen failed."); + return -1; + } + int status = virNodeGetInfo(conn, &nodeinfo); + if (status != 0) { + ERROR(PLUGIN_NAME ": virNodeGetInfo failed"); return -1; } } c_release(LOG_NOTICE, &conn_complain, PLUGIN_NAME " plugin: Connection established."); + return 0; +} + +static void lv_disconnect(void) { + if (conn != NULL) + virConnectClose(conn); + conn = NULL; + WARNING(PLUGIN_NAME " plugin: closed connection to libvirt"); +} + +static int lv_domain_block_info(virDomainPtr dom, const char *path, + struct lv_block_info *binfo) { +#ifdef HAVE_BLOCK_STATS_FLAGS + int nparams = 0; + if (virDomainBlockStatsFlags(dom, path, NULL, &nparams, 0) < 0 || + nparams <= 0) { + VIRT_ERROR(conn, "getting the disk params count"); + return -1; + } + + virTypedParameterPtr params = calloc((size_t)nparams, sizeof(*params)); + if (params == NULL) { + ERROR("virt plugin: alloc(%i) for block=%s parameters failed.", nparams, + path); + return -1; + } + + int rc = -1; + if (virDomainBlockStatsFlags(dom, path, params, &nparams, 0) < 0) { + VIRT_ERROR(conn, "getting the disk params values"); + } else { + rc = get_block_info(binfo, params, nparams); + } + + virTypedParamsClear(params, nparams); + sfree(params); + return rc; +#else + return virDomainBlockStats(dom, path, &(binfo->bi), sizeof(binfo->bi)); +#endif /* HAVE_BLOCK_STATS_FLAGS */ +} + +#ifdef HAVE_PERF_STATS +static void perf_submit(virDomainStatsRecordPtr stats) { + for (int i = 0; i < stats->nparams; ++i) { + /* Replace '.' with '_' in event field to match other metrics' naming + * convention */ + char *c = strchr(stats->params[i].field, '.'); + if (c) + *c = '_'; + submit(stats->dom, "perf", stats->params[i].field, + &(value_t){.derive = stats->params[i].value.ul}, 1); + } +} + +static int get_perf_events(virDomainPtr domain) { + virDomainStatsRecordPtr *stats = NULL; + /* virDomainListGetStats requires a NULL terminated list of domains */ + virDomainPtr domain_array[] = {domain, NULL}; + + int status = + virDomainListGetStats(domain_array, VIR_DOMAIN_STATS_PERF, &stats, 0); + if (status == -1) { + ERROR("virt plugin: virDomainListGetStats failed with status %i.", status); + return status; + } + + for (int i = 0; i < status; ++i) + perf_submit(stats[i]); + + virDomainStatsRecordListFree(stats); + return 0; +} +#endif /* HAVE_PERF_STATS */ + +static void vcpu_pin_submit(virDomainPtr dom, int max_cpus, int vcpu, + unsigned char *cpu_maps, int cpu_map_len) { + for (int cpu = 0; cpu < max_cpus; ++cpu) { + char type_instance[DATA_MAX_NAME_LEN]; + _Bool is_set = VIR_CPU_USABLE(cpu_maps, cpu_map_len, vcpu, cpu) ? 1 : 0; + + ssnprintf(type_instance, sizeof(type_instance), "vcpu_%d-cpu_%d", vcpu, + cpu); + submit(dom, "cpu_affinity", type_instance, &(value_t){.gauge = is_set}, 1); + } +} + +static int get_vcpu_stats(virDomainPtr domain, unsigned short nr_virt_cpu) { + int max_cpus = VIR_NODEINFO_MAXCPUS(nodeinfo); + int cpu_map_len = VIR_CPU_MAPLEN(max_cpus); + + virVcpuInfoPtr vinfo = calloc(nr_virt_cpu, sizeof(vinfo[0])); + if (vinfo == NULL) { + ERROR(PLUGIN_NAME " plugin: malloc failed."); + return -1; + } + + unsigned char *cpumaps = calloc(nr_virt_cpu, cpu_map_len); + if (cpumaps == NULL) { + ERROR(PLUGIN_NAME " plugin: malloc failed."); + sfree(vinfo); + return -1; + } + + int status = + virDomainGetVcpus(domain, vinfo, nr_virt_cpu, cpumaps, cpu_map_len); + if (status < 0) { + ERROR(PLUGIN_NAME " plugin: virDomainGetVcpus failed with status %i.", + status); + sfree(cpumaps); + sfree(vinfo); + return status; + } + + for (int i = 0; i < nr_virt_cpu; ++i) { + vcpu_submit(vinfo[i].cpuTime, domain, vinfo[i].number, "virt_vcpu"); + if (extra_stats & ex_stats_vcpupin) + vcpu_pin_submit(domain, max_cpus, i, cpumaps, cpu_map_len); + } + + sfree(cpumaps); + sfree(vinfo); + return 0; +} + +#ifdef HAVE_DOM_REASON +static int get_domain_state(virDomainPtr domain) { + int domain_state = 0; + int domain_reason = 0; + + int status = virDomainGetState(domain, &domain_state, &domain_reason, 0); + if (status != 0) { + ERROR(PLUGIN_NAME " plugin: virDomainGetState failed with status %i.", + status); + return status; + } + + domain_state_submit(domain, domain_state, domain_reason); + return status; +} +#endif /* HAVE_DOM_REASON */ + +static int get_memory_stats(virDomainPtr domain) { + virDomainMemoryStatPtr minfo = + calloc(VIR_DOMAIN_MEMORY_STAT_NR, sizeof(virDomainMemoryStatStruct)); + if (minfo == NULL) { + ERROR("virt plugin: malloc failed."); + return -1; + } + + int mem_stats = + virDomainMemoryStats(domain, minfo, VIR_DOMAIN_MEMORY_STAT_NR, 0); + if (mem_stats < 0) { + ERROR("virt plugin: virDomainMemoryStats failed with mem_stats %i.", + mem_stats); + sfree(minfo); + return mem_stats; + } + + for (int i = 0; i < mem_stats; i++) + memory_stats_submit((gauge_t)minfo[i].val * 1024, domain, minfo[i].tag); + + sfree(minfo); + return 0; +} + +#ifdef HAVE_DISK_ERR +static void disk_err_submit(virDomainPtr domain, + virDomainDiskErrorPtr disk_err) { + submit(domain, "disk_error", disk_err->disk, + &(value_t){.gauge = disk_err->error}, 1); +} + +static int get_disk_err(virDomainPtr domain) { + /* Get preferred size of disk errors array */ + int disk_err_count = virDomainGetDiskErrors(domain, NULL, 0, 0); + if (disk_err_count == -1) { + ERROR(PLUGIN_NAME + " plugin: failed to get preferred size of disk errors array"); + return -1; + } + + DEBUG(PLUGIN_NAME + " plugin: preferred size of disk errors array: %d for domain %s", + disk_err_count, virDomainGetName(domain)); + virDomainDiskError disk_err[disk_err_count]; + + disk_err_count = virDomainGetDiskErrors(domain, disk_err, disk_err_count, 0); + if (disk_err_count == -1) { + ERROR(PLUGIN_NAME " plugin: virDomainGetDiskErrors failed with status %d", + disk_err_count); + return -1; + } + + DEBUG(PLUGIN_NAME " plugin: detected %d disk errors in domain %s", + disk_err_count, virDomainGetName(domain)); + + for (int i = 0; i < disk_err_count; ++i) { + disk_err_submit(domain, &disk_err[i]); + sfree(disk_err[i].disk); + } + + return 0; +} +#endif /* HAVE_DISK_ERR */ + +static int get_block_stats(struct block_device *block_dev) { + + if (!block_dev) { + ERROR(PLUGIN_NAME " plugin: get_block_stats NULL pointer"); + return -1; + } + + struct lv_block_info binfo; + init_block_info(&binfo); + + if (lv_domain_block_info(block_dev->dom, block_dev->path, &binfo) < 0) { + ERROR(PLUGIN_NAME " plugin: lv_domain_block_info failed"); + return -1; + } + + disk_submit(&binfo, block_dev->dom, block_dev->path); + return 0; +} + +#ifdef HAVE_FS_INFO + +#define NM_ADD_ITEM(_fun, _name, _val) \ + do { \ + ret = _fun(¬if, _name, _val); \ + if (ret != 0) { \ + ERROR(PLUGIN_NAME " plugin: failed to add notification metadata"); \ + goto cleanup; \ + } \ + } while (0) + +#define NM_ADD_STR_ITEMS(_items, _size) \ + do { \ + for (int _i = 0; _i < _size; ++_i) { \ + DEBUG(PLUGIN_NAME \ + " plugin: Adding notification metadata name=%s value=%s", \ + _items[_i].name, _items[_i].value); \ + NM_ADD_ITEM(plugin_notification_meta_add_string, _items[_i].name, \ + _items[_i].value); \ + } \ + } while (0) + +static int fs_info_notify(virDomainPtr domain, virDomainFSInfoPtr fs_info) { + notification_t notif; + int ret = 0; + + /* Local struct, just for the purpose of this function. */ + typedef struct nm_str_item_s { + const char *name; + const char *value; + } nm_str_item_t; + + nm_str_item_t fs_dev_alias[fs_info->ndevAlias]; + nm_str_item_t fs_str_items[] = { + {.name = "mountpoint", .value = fs_info->mountpoint}, + {.name = "name", .value = fs_info->name}, + {.name = "fstype", .value = fs_info->fstype}}; + + for (int i = 0; i < fs_info->ndevAlias; ++i) { + fs_dev_alias[i].name = "devAlias"; + fs_dev_alias[i].value = fs_info->devAlias[i]; + } + + init_notif(¬if, domain, NOTIF_OKAY, "File system information", + "file_system", NULL); + NM_ADD_STR_ITEMS(fs_str_items, STATIC_ARRAY_SIZE(fs_str_items)); + NM_ADD_ITEM(plugin_notification_meta_add_unsigned_int, "ndevAlias", + fs_info->ndevAlias); + NM_ADD_STR_ITEMS(fs_dev_alias, fs_info->ndevAlias); + + plugin_dispatch_notification(¬if); + +cleanup: + if (notif.meta) + plugin_notification_meta_free(notif.meta); + return ret; +} + +#undef RETURN_ON_ERR +#undef NM_ADD_STR_ITEMS + +static int get_fs_info(virDomainPtr domain) { + virDomainFSInfoPtr *fs_info = NULL; + int ret = 0; + + int mount_points_cnt = virDomainGetFSInfo(domain, &fs_info, 0); + if (mount_points_cnt == -1) { + ERROR(PLUGIN_NAME " plugin: virDomainGetFSInfo failed: %d", + mount_points_cnt); + return mount_points_cnt; + } + + for (int i = 0; i < mount_points_cnt; ++i) { + if (fs_info_notify(domain, fs_info[i]) != 0) { + ERROR(PLUGIN_NAME " plugin: failed to send file system notification " + "for mount point %s", + fs_info[i]->mountpoint); + ret = -1; + } + virDomainFSInfoFree(fs_info[i]); + } + + sfree(fs_info); + return ret; +} + +#endif /* HAVE_FS_INFO */ + +#ifdef HAVE_JOB_STATS +static void job_stats_submit(virDomainPtr domain, virTypedParameterPtr param) { + value_t vl = {0}; + + if (param->type == VIR_TYPED_PARAM_INT) + vl.derive = param->value.i; + else if (param->type == VIR_TYPED_PARAM_UINT) + vl.derive = param->value.ui; + else if (param->type == VIR_TYPED_PARAM_LLONG) + vl.derive = param->value.l; + else if (param->type == VIR_TYPED_PARAM_ULLONG) + vl.derive = param->value.ul; + else if (param->type == VIR_TYPED_PARAM_DOUBLE) + vl.derive = param->value.d; + else if (param->type == VIR_TYPED_PARAM_BOOLEAN) + vl.derive = param->value.b; + else if (param->type == VIR_TYPED_PARAM_STRING) { + submit_notif(domain, NOTIF_OKAY, param->value.s, "job_stats", param->field); + return; + } else { + ERROR(PLUGIN_NAME " plugin: unrecognized virTypedParameterType"); + return; + } + + submit(domain, "job_stats", param->field, &vl, 1); +} + +static int get_job_stats(virDomainPtr domain) { + int ret = 0; + int job_type = 0; + int nparams = 0; + virTypedParameterPtr params = NULL; + int flags = (extra_stats & ex_stats_job_stats_completed) + ? VIR_DOMAIN_JOB_STATS_COMPLETED + : 0; + + ret = virDomainGetJobStats(domain, &job_type, ¶ms, &nparams, flags); + if (ret != 0) { + ERROR(PLUGIN_NAME " plugin: virDomainGetJobStats failed: %d", ret); + return ret; + } + + DEBUG(PLUGIN_NAME " plugin: job_type=%d nparams=%d", job_type, nparams); + + for (int i = 0; i < nparams; ++i) { + DEBUG(PLUGIN_NAME " plugin: param[%d] field=%s type=%d", i, params[i].field, + params[i].type); + job_stats_submit(domain, ¶ms[i]); + } + + virTypedParamsFree(params, nparams); + return ret; +} +#endif /* HAVE_JOB_STATS */ + +static int get_domain_metrics(domain_t *domain) { + struct lv_info info; + + if (!domain || !domain->ptr) { + ERROR(PLUGIN_NAME ": get_domain_metrics: NULL pointer"); + return -1; + } + + init_lv_info(&info); + int status = lv_domain_info(domain->ptr, &info); + if (status != 0) { + ERROR(PLUGIN_NAME " plugin: virDomainGetInfo failed with status %i.", + status); + return -1; + } + + if (extra_stats & ex_stats_domain_state) { +#ifdef HAVE_DOM_REASON + /* At this point we already know domain's state from virDomainGetInfo call, + * however it doesn't provide a reason for entering particular state. + * We need to get it from virDomainGetState. + */ + GET_STATS(get_domain_state, "domain reason", domain->ptr); +#else + /* virDomainGetState is not available. Submit 0, which corresponds to + * unknown reason. */ + domain_state_submit(domain->ptr, info.di.state, 0); +#endif + } + + /* Gather remaining stats only for running domains */ + if (info.di.state != VIR_DOMAIN_RUNNING) + return 0; + + pcpu_submit(domain->ptr, &info); + cpu_submit(domain, info.di.cpuTime); + + memory_submit(domain->ptr, (gauge_t)info.di.memory * 1024); + + GET_STATS(get_vcpu_stats, "vcpu stats", domain->ptr, info.di.nrVirtCpu); + GET_STATS(get_memory_stats, "memory stats", domain->ptr); + +#ifdef HAVE_PERF_STATS + if (extra_stats & ex_stats_perf) + GET_STATS(get_perf_events, "performance monitoring events", domain->ptr); +#endif + +#ifdef HAVE_FS_INFO + if (extra_stats & ex_stats_fs_info) + GET_STATS(get_fs_info, "file system info", domain->ptr); +#endif + +#ifdef HAVE_DISK_ERR + if (extra_stats & ex_stats_disk_err) + GET_STATS(get_disk_err, "disk errors", domain->ptr); +#endif + +#ifdef HAVE_JOB_STATS + if (extra_stats & + (ex_stats_job_stats_completed | ex_stats_job_stats_background)) + GET_STATS(get_job_stats, "job stats", domain->ptr); +#endif + + /* Update cached virDomainInfo. It has to be done after cpu_submit */ + memcpy(&domain->info, &info.di, sizeof(domain->info)); + return 0; +} + +static int get_if_dev_stats(struct interface_device *if_dev) { + virDomainInterfaceStatsStruct stats = {0}; + char *display_name = NULL; + + if (!if_dev) { + ERROR(PLUGIN_NAME " plugin: get_if_dev_stats: NULL pointer"); + return -1; + } + + switch (interface_format) { + case if_address: + display_name = if_dev->address; + break; + case if_number: + display_name = if_dev->number; + break; + case if_name: + default: + display_name = if_dev->path; + } + + if (virDomainInterfaceStats(if_dev->dom, if_dev->path, &stats, + sizeof(stats)) != 0) { + ERROR(PLUGIN_NAME " plugin: virDomainInterfaceStats failed"); + return -1; + } + + if ((stats.rx_bytes != -1) && (stats.tx_bytes != -1)) + submit_derive2("if_octets", (derive_t)stats.rx_bytes, + (derive_t)stats.tx_bytes, if_dev->dom, display_name); + + if ((stats.rx_packets != -1) && (stats.tx_packets != -1)) + submit_derive2("if_packets", (derive_t)stats.rx_packets, + (derive_t)stats.tx_packets, if_dev->dom, display_name); + + if ((stats.rx_errs != -1) && (stats.tx_errs != -1)) + submit_derive2("if_errors", (derive_t)stats.rx_errs, + (derive_t)stats.tx_errs, if_dev->dom, display_name); + + if ((stats.rx_drop != -1) && (stats.tx_drop != -1)) + submit_derive2("if_dropped", (derive_t)stats.rx_drop, + (derive_t)stats.tx_drop, if_dev->dom, display_name); + return 0; +} + +static int lv_read(user_data_t *ud) { + time_t t; + struct lv_read_instance *inst = NULL; + struct lv_read_state *state = NULL; + + if (ud->data == NULL) { + ERROR(PLUGIN_NAME " plugin: NULL userdata"); + return -1; + } + + inst = ud->data; + state = &inst->read_state; + + if (inst->id == 0) { + if (lv_connect() < 0) + return -1; + } time(&t); /* Need to refresh domain or device lists? */ if ((last_refresh == (time_t)0) || ((interval > 0) && ((last_refresh + interval) <= t))) { - if (refresh_lists() != 0) { - if (conn != NULL) - virConnectClose(conn); - conn = NULL; + if (refresh_lists(inst) != 0) { + if (inst->id == 0) + lv_disconnect(); return -1; } last_refresh = t; @@ -489,7 +1613,7 @@ static int lv_read(void) { #if 0 for (int i = 0; i < nr_domains; ++i) - fprintf (stderr, "domain %s\n", virDomainGetName (domains[i])); + fprintf (stderr, "domain %s\n", virDomainGetName (state->domains[i].ptr)); for (int i = 0; i < nr_block_devices; ++i) fprintf (stderr, "block device %d %s:%s\n", i, virDomainGetName (block_devices[i].dom), @@ -500,145 +1624,191 @@ static int lv_read(void) { interface_devices[i].path); #endif - /* Get CPU usage, memory, VCPU usage for each domain. */ - for (int i = 0; i < nr_domains; ++i) { - virDomainInfo info; - virVcpuInfoPtr vinfo = NULL; - virDomainMemoryStatPtr minfo = NULL; - int status; + /* Get domains' metrics */ + for (int i = 0; i < state->nr_domains; ++i) { + int status = get_domain_metrics(&state->domains[i]); + if (status != 0) + ERROR(PLUGIN_NAME " failed to get metrics for domain=%s", + virDomainGetName(state->domains[i].ptr)); + } - status = virDomainGetInfo(domains[i], &info); - if (status != 0) { - ERROR(PLUGIN_NAME " plugin: virDomainGetInfo failed with status %i.", - status); - continue; - } + /* Get block device stats for each domain. */ + for (int i = 0; i < state->nr_block_devices; ++i) { + int status = get_block_stats(&state->block_devices[i]); + if (status != 0) + ERROR(PLUGIN_NAME + " failed to get stats for block device (%s) in domain %s", + state->block_devices[i].path, + virDomainGetName(state->domains[i].ptr)); + } - if (info.state != VIR_DOMAIN_RUNNING) { - /* only gather stats for running domains */ - continue; - } + /* Get interface stats for each domain. */ + for (int i = 0; i < state->nr_interface_devices; ++i) { + int status = get_if_dev_stats(&state->interface_devices[i]); + if (status != 0) + ERROR(PLUGIN_NAME + " failed to get interface stats for device (%s) in domain %s", + state->interface_devices[i].path, + virDomainGetName(state->interface_devices[i].dom)); + } - cpu_submit(info.cpuTime, domains[i], "virt_cpu_total"); - memory_submit((gauge_t)info.memory * 1024, domains[i]); + return 0; +} - vinfo = malloc(info.nrVirtCpu * sizeof(vinfo[0])); - if (vinfo == NULL) { - ERROR(PLUGIN_NAME " plugin: malloc failed."); - continue; - } +static int lv_init_instance(size_t i, plugin_read_cb callback) { + struct lv_user_data *lv_ud = &(lv_read_user_data[i]); + struct lv_read_instance *inst = &(lv_ud->inst); - status = virDomainGetVcpus(domains[i], vinfo, info.nrVirtCpu, - /* cpu map = */ NULL, /* cpu map length = */ 0); - if (status < 0) { - ERROR(PLUGIN_NAME " plugin: virDomainGetVcpus failed with status %i.", - status); - sfree(vinfo); - continue; - } + memset(lv_ud, 0, sizeof(*lv_ud)); - for (int j = 0; j < info.nrVirtCpu; ++j) - vcpu_submit(vinfo[j].cpuTime, domains[i], vinfo[j].number, "virt_vcpu"); + ssnprintf(inst->tag, sizeof(inst->tag), "%s-%zu", PLUGIN_NAME, i); + inst->id = i; - sfree(vinfo); + user_data_t *ud = &(lv_ud->ud); + ud->data = inst; + ud->free_func = NULL; - minfo = - malloc(VIR_DOMAIN_MEMORY_STAT_NR * sizeof(virDomainMemoryStatStruct)); - if (minfo == NULL) { - ERROR("virt plugin: malloc failed."); - continue; - } + INFO(PLUGIN_NAME " plugin: reader %s initialized", inst->tag); + return plugin_register_complex_read(NULL, inst->tag, callback, 0, ud); +} - status = - virDomainMemoryStats(domains[i], minfo, VIR_DOMAIN_MEMORY_STAT_NR, 0); +static void lv_clean_read_state(struct lv_read_state *state) { + free_block_devices(state); + free_interface_devices(state); + free_domains(state); +} - if (status < 0) { - ERROR("virt plugin: virDomainMemoryStats failed with status %i.", status); - sfree(minfo); - continue; - } +static void lv_fini_instance(size_t i) { + struct lv_read_instance *inst = &(lv_read_user_data[i].inst); + struct lv_read_state *state = &(inst->read_state); - for (int j = 0; j < status; j++) { - memory_stats_submit((gauge_t)minfo[j].val * 1024, domains[i], - minfo[j].tag); - } + lv_clean_read_state(state); + INFO(PLUGIN_NAME " plugin: reader %s finalized", inst->tag); +} - sfree(minfo); - } +static int lv_init(void) { + if (virInitialize() != 0) + return -1; - /* Get block device stats for each domain. */ - for (int i = 0; i < nr_block_devices; ++i) { - struct _virDomainBlockStats stats; + if (lv_connect() != 0) + return -1; - if (virDomainBlockStats(block_devices[i].dom, block_devices[i].path, &stats, - sizeof stats) != 0) - continue; + DEBUG(PLUGIN_NAME " plugin: starting %i instances", nr_instances); - char *type_instance = NULL; - if (blockdevice_format_basename && blockdevice_format == source) - type_instance = strdup(basename(block_devices[i].path)); - else - type_instance = strdup(block_devices[i].path); + for (int i = 0; i < nr_instances; ++i) + lv_init_instance(i, lv_read); - if ((stats.rd_req != -1) && (stats.wr_req != -1)) - submit_derive2("disk_ops", (derive_t)stats.rd_req, (derive_t)stats.wr_req, - block_devices[i].dom, type_instance); + return 0; +} - if ((stats.rd_bytes != -1) && (stats.wr_bytes != -1)) - submit_derive2("disk_octets", (derive_t)stats.rd_bytes, - (derive_t)stats.wr_bytes, block_devices[i].dom, - type_instance); +/* + * returns 0 on success and <0 on error + */ +static int lv_domain_get_tag(xmlXPathContextPtr xpath_ctx, const char *dom_name, + char *dom_tag) { + char xpath_str[BUFFER_MAX_LEN] = {'\0'}; + xmlXPathObjectPtr xpath_obj = NULL; + xmlNodePtr xml_node = NULL; + int ret = -1; + int err; + + err = xmlXPathRegisterNs(xpath_ctx, + (const xmlChar *)METADATA_VM_PARTITION_PREFIX, + (const xmlChar *)METADATA_VM_PARTITION_URI); + if (err) { + ERROR(PLUGIN_NAME " plugin: xmlXpathRegisterNs(%s, %s) failed on domain %s", + METADATA_VM_PARTITION_PREFIX, METADATA_VM_PARTITION_URI, dom_name); + goto done; + } - sfree(type_instance); - } /* for (nr_block_devices) */ + ssnprintf(xpath_str, sizeof(xpath_str), "/domain/metadata/%s:%s/text()", + METADATA_VM_PARTITION_PREFIX, METADATA_VM_PARTITION_ELEMENT); + xpath_obj = xmlXPathEvalExpression((xmlChar *)xpath_str, xpath_ctx); + if (xpath_obj == NULL) { + ERROR(PLUGIN_NAME " plugin: xmlXPathEval(%s) failed on domain %s", + xpath_str, dom_name); + goto done; + } - /* Get interface stats for each domain. */ - for (int i = 0; i < nr_interface_devices; ++i) { - struct _virDomainInterfaceStats stats; - char *display_name = NULL; + if (xpath_obj->type != XPATH_NODESET) { + ERROR(PLUGIN_NAME " plugin: xmlXPathEval(%s) unexpected return type %d " + "(wanted %d) on domain %s", + xpath_str, xpath_obj->type, XPATH_NODESET, dom_name); + goto done; + } - switch (interface_format) { - case if_address: - display_name = interface_devices[i].address; - break; - case if_number: - display_name = interface_devices[i].number; - break; - case if_name: - default: - display_name = interface_devices[i].path; - } + /* + * from now on there is no real error, it's ok if a domain + * doesn't have the metadata partition tag. + */ + ret = 0; + if (xpath_obj->nodesetval == NULL || xpath_obj->nodesetval->nodeNr != 1) { + DEBUG(PLUGIN_NAME " plugin: xmlXPathEval(%s) return nodeset size=%i " + "expected=1 on domain %s", + xpath_str, + (xpath_obj->nodesetval == NULL) ? 0 : xpath_obj->nodesetval->nodeNr, + dom_name); + } else { + xml_node = xpath_obj->nodesetval->nodeTab[0]; + sstrncpy(dom_tag, (const char *)xml_node->content, PARTITION_TAG_MAX_LEN); + } - if (virDomainInterfaceStats(interface_devices[i].dom, - interface_devices[i].path, &stats, - sizeof stats) != 0) - continue; +done: + /* deregister to clean up */ + err = xmlXPathRegisterNs(xpath_ctx, + (const xmlChar *)METADATA_VM_PARTITION_PREFIX, NULL); + if (err) { + /* we can't really recover here */ + ERROR(PLUGIN_NAME + " plugin: deregistration of namespace %s failed for domain %s", + METADATA_VM_PARTITION_PREFIX, dom_name); + } + if (xpath_obj) + xmlXPathFreeObject(xpath_obj); - if ((stats.rx_bytes != -1) && (stats.tx_bytes != -1)) - submit_derive2("if_octets", (derive_t)stats.rx_bytes, - (derive_t)stats.tx_bytes, interface_devices[i].dom, - display_name); + return ret; +} - if ((stats.rx_packets != -1) && (stats.tx_packets != -1)) - submit_derive2("if_packets", (derive_t)stats.rx_packets, - (derive_t)stats.tx_packets, interface_devices[i].dom, - display_name); +static int is_known_tag(const char *dom_tag) { + for (int i = 0; i < nr_instances; ++i) + if (!strcmp(dom_tag, lv_read_user_data[i].inst.tag)) + return 1; + return 0; +} - if ((stats.rx_errs != -1) && (stats.tx_errs != -1)) - submit_derive2("if_errors", (derive_t)stats.rx_errs, - (derive_t)stats.tx_errs, interface_devices[i].dom, - display_name); +static int lv_instance_include_domain(struct lv_read_instance *inst, + const char *dom_name, + const char *dom_tag) { + if ((dom_tag[0] != '\0') && (strcmp(dom_tag, inst->tag) == 0)) + return 1; - if ((stats.rx_drop != -1) && (stats.tx_drop != -1)) - submit_derive2("if_dropped", (derive_t)stats.rx_drop, - (derive_t)stats.tx_drop, interface_devices[i].dom, - display_name); - } /* for (nr_interface_devices) */ + /* instance#0 will always be there, so it is in charge of extra duties */ + if (inst->id == 0) { + if (dom_tag[0] == '\0' || !is_known_tag(dom_tag)) { + DEBUG(PLUGIN_NAME " plugin#%s: refreshing domain %s " + "with unknown tag '%s'", + inst->tag, dom_name, dom_tag); + return 1; + } + } return 0; } -static int refresh_lists(void) { +/* + virConnectListAllDomains() appeared in 0.10.2 + Note that LIBVIR_CHECK_VERSION appeared a year later, so + in some systems which actually have virConnectListAllDomains() + we can't detect this. + */ +#ifdef LIBVIR_CHECK_VERSION +#if LIBVIR_CHECK_VERSION(0, 10, 2) +#define HAVE_LIST_ALL_DOMAINS 1 +#endif +#endif + +static int refresh_lists(struct lv_read_instance *inst) { + struct lv_read_state *state = &inst->read_state; int n; n = virConnectNumOfDomains(conn); @@ -647,7 +1817,14 @@ static int refresh_lists(void) { return -1; } + lv_clean_read_state(state); + if (n > 0) { +#ifdef HAVE_LIST_ALL_DOMAINS + virDomainPtr *domains; + n = virConnectListAllDomains(conn, &domains, + VIR_CONNECT_LIST_DOMAINS_ACTIVE); +#else int *domids; /* Get list of domains. */ @@ -658,31 +1835,38 @@ static int refresh_lists(void) { } n = virConnectListDomains(conn, domids, n); +#endif + if (n < 0) { VIRT_ERROR(conn, "reading list of domains"); +#ifndef HAVE_LIST_ALL_DOMAINS sfree(domids); +#endif return -1; } - free_block_devices(); - free_interface_devices(); - free_domains(); - /* Fetch each domain and add it to the list, unless ignore. */ for (int i = 0; i < n; ++i) { - virDomainPtr dom = NULL; const char *name; char *xml = NULL; xmlDocPtr xml_doc = NULL; xmlXPathContextPtr xpath_ctx = NULL; xmlXPathObjectPtr xpath_obj = NULL; + char tag[PARTITION_TAG_MAX_LEN] = {'\0'}; + virDomainInfo info; + int status; +#ifdef HAVE_LIST_ALL_DOMAINS + virDomainPtr dom = domains[i]; +#else + virDomainPtr dom = NULL; dom = virDomainLookupByID(conn, domids[i]); if (dom == NULL) { VIRT_ERROR(conn, "virDomainLookupByID"); /* Could be that the domain went away -- ignore it anyway. */ continue; } +#endif name = virDomainGetName(dom); if (name == NULL) { @@ -690,14 +1874,21 @@ static int refresh_lists(void) { goto cont; } - if (il_domains && ignorelist_match(il_domains, name) != 0) - goto cont; + status = virDomainGetInfo(dom, &info); + if (status != 0) { + ERROR(PLUGIN_NAME " plugin: virDomainGetInfo failed with status %i.", + status); + continue; + } - if (add_domain(dom) < 0) { - ERROR(PLUGIN_NAME " plugin: malloc failed."); - goto cont; + if (info.state != VIR_DOMAIN_RUNNING) { + DEBUG(PLUGIN_NAME " plugin: skipping inactive domain %s", name); + continue; } + if (il_domains && ignorelist_match(il_domains, name) != 0) + goto cont; + /* Get a list of devices for this domain. */ xml = virDomainGetXMLDesc(dom, 0); if (!xml) { @@ -714,11 +1905,24 @@ static int refresh_lists(void) { xpath_ctx = xmlXPathNewContext(xml_doc); + if (lv_domain_get_tag(xpath_ctx, name, tag) < 0) { + ERROR(PLUGIN_NAME " plugin: lv_domain_get_tag failed."); + goto cont; + } + + if (!lv_instance_include_domain(inst, name, tag)) + goto cont; + + if (add_domain(state, dom) < 0) { + ERROR(PLUGIN_NAME " plugin: malloc failed."); + goto cont; + } + /* Block devices. */ - char *bd_xmlpath = "/domain/devices/disk/target[@dev]"; + const char *bd_xmlpath = "/domain/devices/disk/target[@dev]"; if (blockdevice_format == source) bd_xmlpath = "/domain/devices/disk/source[@dev]"; - xpath_obj = xmlXPathEval((xmlChar *)bd_xmlpath, xpath_ctx); + xpath_obj = xmlXPathEval((const xmlChar *)bd_xmlpath, xpath_ctx); if (xpath_obj == NULL || xpath_obj->type != XPATH_NODESET || xpath_obj->nodesetval == NULL) @@ -739,7 +1943,7 @@ static int refresh_lists(void) { ignore_device_match(il_block_devices, name, path) != 0) goto cont2; - add_block_device(dom, path); + add_block_device(state, dom, path); cont2: if (path) xmlFree(path); @@ -785,7 +1989,7 @@ static int refresh_lists(void) { ignore_device_match(il_interface_devices, name, address) != 0)) goto cont3; - add_interface_device(dom, path, address, j + 1); + add_interface_device(state, dom, path, address, j + 1); cont3: if (path) xmlFree(path); @@ -803,60 +2007,74 @@ static int refresh_lists(void) { sfree(xml); } +#ifdef HAVE_LIST_ALL_DOMAINS + sfree(domains); +#else sfree(domids); +#endif } + DEBUG(PLUGIN_NAME " plugin#%s: refreshing" + " domains=%i block_devices=%i iface_devices=%i", + inst->tag, state->nr_domains, state->nr_block_devices, + state->nr_interface_devices); + return 0; } -static void free_domains(void) { - if (domains) { - for (int i = 0; i < nr_domains; ++i) - virDomainFree(domains[i]); - sfree(domains); +static void free_domains(struct lv_read_state *state) { + if (state->domains) { + for (int i = 0; i < state->nr_domains; ++i) + virDomainFree(state->domains[i].ptr); + sfree(state->domains); } - domains = NULL; - nr_domains = 0; + state->domains = NULL; + state->nr_domains = 0; } -static int add_domain(virDomainPtr dom) { - virDomainPtr *new_ptr; - int new_size = sizeof(domains[0]) * (nr_domains + 1); +static int add_domain(struct lv_read_state *state, virDomainPtr dom) { + domain_t *new_ptr; + int new_size = sizeof(state->domains[0]) * (state->nr_domains + 1); - if (domains) - new_ptr = realloc(domains, new_size); + if (state->domains) + new_ptr = realloc(state->domains, new_size); else new_ptr = malloc(new_size); if (new_ptr == NULL) return -1; - domains = new_ptr; - domains[nr_domains] = dom; - return nr_domains++; + state->domains = new_ptr; + state->domains[state->nr_domains].ptr = dom; + memset(&state->domains[state->nr_domains].info, 0, + sizeof(state->domains[state->nr_domains].info)); + + return state->nr_domains++; } -static void free_block_devices(void) { - if (block_devices) { - for (int i = 0; i < nr_block_devices; ++i) - sfree(block_devices[i].path); - sfree(block_devices); +static void free_block_devices(struct lv_read_state *state) { + if (state->block_devices) { + for (int i = 0; i < state->nr_block_devices; ++i) + sfree(state->block_devices[i].path); + sfree(state->block_devices); } - block_devices = NULL; - nr_block_devices = 0; + state->block_devices = NULL; + state->nr_block_devices = 0; } -static int add_block_device(virDomainPtr dom, const char *path) { +static int add_block_device(struct lv_read_state *state, virDomainPtr dom, + const char *path) { struct block_device *new_ptr; - int new_size = sizeof(block_devices[0]) * (nr_block_devices + 1); + int new_size = + sizeof(state->block_devices[0]) * (state->nr_block_devices + 1); char *path_copy; path_copy = strdup(path); if (!path_copy) return -1; - if (block_devices) - new_ptr = realloc(block_devices, new_size); + if (state->block_devices) + new_ptr = realloc(state->block_devices, new_size); else new_ptr = malloc(new_size); @@ -864,29 +2082,31 @@ static int add_block_device(virDomainPtr dom, const char *path) { sfree(path_copy); return -1; } - block_devices = new_ptr; - block_devices[nr_block_devices].dom = dom; - block_devices[nr_block_devices].path = path_copy; - return nr_block_devices++; + state->block_devices = new_ptr; + state->block_devices[state->nr_block_devices].dom = dom; + state->block_devices[state->nr_block_devices].path = path_copy; + return state->nr_block_devices++; } -static void free_interface_devices(void) { - if (interface_devices) { - for (int i = 0; i < nr_interface_devices; ++i) { - sfree(interface_devices[i].path); - sfree(interface_devices[i].address); - sfree(interface_devices[i].number); +static void free_interface_devices(struct lv_read_state *state) { + if (state->interface_devices) { + for (int i = 0; i < state->nr_interface_devices; ++i) { + sfree(state->interface_devices[i].path); + sfree(state->interface_devices[i].address); + sfree(state->interface_devices[i].number); } - sfree(interface_devices); + sfree(state->interface_devices); } - interface_devices = NULL; - nr_interface_devices = 0; + state->interface_devices = NULL; + state->nr_interface_devices = 0; } -static int add_interface_device(virDomainPtr dom, const char *path, - const char *address, unsigned int number) { +static int add_interface_device(struct lv_read_state *state, virDomainPtr dom, + const char *path, const char *address, + unsigned int number) { struct interface_device *new_ptr; - int new_size = sizeof(interface_devices[0]) * (nr_interface_devices + 1); + int new_size = + sizeof(state->interface_devices[0]) * (state->nr_interface_devices + 1); char *path_copy, *address_copy, number_string[15]; if ((path == NULL) || (address == NULL)) @@ -904,8 +2124,8 @@ static int add_interface_device(virDomainPtr dom, const char *path, snprintf(number_string, sizeof(number_string), "interface-%u", number); - if (interface_devices) - new_ptr = realloc(interface_devices, new_size); + if (state->interface_devices) + new_ptr = realloc(state->interface_devices, new_size); else new_ptr = malloc(new_size); @@ -914,12 +2134,13 @@ static int add_interface_device(virDomainPtr dom, const char *path, sfree(address_copy); return -1; } - interface_devices = new_ptr; - interface_devices[nr_interface_devices].dom = dom; - interface_devices[nr_interface_devices].path = path_copy; - interface_devices[nr_interface_devices].address = address_copy; - interface_devices[nr_interface_devices].number = strdup(number_string); - return nr_interface_devices++; + state->interface_devices = new_ptr; + state->interface_devices[state->nr_interface_devices].dom = dom; + state->interface_devices[state->nr_interface_devices].path = path_copy; + state->interface_devices[state->nr_interface_devices].address = address_copy; + state->interface_devices[state->nr_interface_devices].number = + strdup(number_string); + return state->nr_interface_devices++; } static int ignore_device_match(ignorelist_t *il, const char *domname, @@ -930,7 +2151,7 @@ static int ignore_device_match(ignorelist_t *il, const char *domname, if ((domname == NULL) || (devpath == NULL)) return 0; - n = sizeof(char) * (strlen(domname) + strlen(devpath) + 2); + n = strlen(domname) + strlen(devpath) + 2; name = malloc(n); if (name == NULL) { ERROR(PLUGIN_NAME " plugin: malloc failed."); @@ -943,13 +2164,11 @@ static int ignore_device_match(ignorelist_t *il, const char *domname, } static int lv_shutdown(void) { - free_block_devices(); - free_interface_devices(); - free_domains(); + for (int i = 0; i < nr_instances; ++i) { + lv_fini_instance(i); + } - if (conn != NULL) - virConnectClose(conn); - conn = NULL; + lv_disconnect(); ignorelist_free(il_domains); il_domains = NULL; @@ -964,10 +2183,5 @@ static int lv_shutdown(void) { void module_register(void) { plugin_register_config(PLUGIN_NAME, lv_config, config_keys, NR_CONFIG_KEYS); plugin_register_init(PLUGIN_NAME, lv_init); - plugin_register_read(PLUGIN_NAME, lv_read); plugin_register_shutdown(PLUGIN_NAME, lv_shutdown); } - -/* - * vim: shiftwidth=4 tabstop=8 softtabstop=4 expandtab fdm=marker - */ diff --git a/src/virt_test.c b/src/virt_test.c new file mode 100644 index 00000000..cb3cc254 --- /dev/null +++ b/src/virt_test.c @@ -0,0 +1,207 @@ +/** + * collectd - src/virt_test.c + * Copyright (C) 2016 Francesco Romani + * Based on + * collectd - src/ceph_test.c + * Copyright (C) 2015 Florian octo Forster + * + * 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 + * + * Authors: + * Florian octo Forster + **/ + +#include "virt.c" /* sic */ +#include "testing.h" + +#include + +static const char minimal_xml[] = + "" + "" + "" + " " + ""; + +static const char minimal_metadata_xml[] = + "" + "" + "" + " " + " virt-0" + " " + ""; + +struct xml_state { + xmlDocPtr xml_doc; + xmlXPathContextPtr xpath_ctx; + xmlXPathObjectPtr xpath_obj; + char tag[PARTITION_TAG_MAX_LEN]; +}; + +static int init_state(struct xml_state *st, const char *xml) { + memset(st, 0, sizeof(*st)); + + st->xml_doc = xmlReadDoc((const xmlChar *)xml, NULL, NULL, XML_PARSE_NONET); + if (st->xml_doc == NULL) { + return -1; + } + st->xpath_ctx = xmlXPathNewContext(st->xml_doc); + if (st->xpath_ctx == NULL) { + return -1; + } + return 0; +} + +static void fini_state(struct xml_state *st) { + if (st->xpath_ctx) { + xmlXPathFreeContext(st->xpath_ctx); + st->xpath_ctx = NULL; + } + if (st->xml_doc) { + xmlFreeDoc(st->xml_doc); + st->xml_doc = NULL; + } +} + +#define TAG "virt-0" + +DEF_TEST(lv_domain_get_tag_no_metadata_xml) { + int err; + struct xml_state st; + err = init_state(&st, minimal_xml); + EXPECT_EQ_INT(0, err); + + err = lv_domain_get_tag(st.xpath_ctx, "test", st.tag); + + EXPECT_EQ_INT(0, err); + EXPECT_EQ_STR("", st.tag); + + fini_state(&st); + return 0; +} + +DEF_TEST(lv_domain_get_tag_valid_xml) { + int err; + struct xml_state st; + err = init_state(&st, minimal_metadata_xml); + EXPECT_EQ_INT(0, err); + + err = lv_domain_get_tag(st.xpath_ctx, "test", st.tag); + + EXPECT_EQ_INT(0, err); + EXPECT_EQ_STR(TAG, st.tag); + + return 0; +} + +DEF_TEST(lv_default_instance_include_domain_without_tag) { + struct lv_read_instance *inst = NULL; + int ret; + + ret = lv_init_instance(0, lv_read); + inst = &(lv_read_user_data[0].inst); + EXPECT_EQ_STR("virt-0", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", ""); + EXPECT_EQ_INT(1, ret); + + lv_fini_instance(0); + return 0; +} + +DEF_TEST(lv_regular_instance_skip_domain_without_tag) { + struct lv_read_instance *inst = NULL; + int ret; + + ret = lv_init_instance(1, lv_read); + inst = &(lv_read_user_data[1].inst); + EXPECT_EQ_STR("virt-1", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", ""); + EXPECT_EQ_INT(0, ret); + + lv_fini_instance(0); + return 0; +} + +DEF_TEST(lv_include_domain_matching_tags) { + struct lv_read_instance *inst = NULL; + int ret; + + ret = lv_init_instance(0, lv_read); + inst = &(lv_read_user_data[0].inst); + EXPECT_EQ_STR("virt-0", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", "virt-0"); + EXPECT_EQ_INT(1, ret); + + ret = lv_init_instance(1, lv_read); + inst = &(lv_read_user_data[1].inst); + EXPECT_EQ_STR("virt-1", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", "virt-1"); + EXPECT_EQ_INT(1, ret); + + lv_fini_instance(0); + lv_fini_instance(1); + return 0; +} + +DEF_TEST(lv_default_instance_include_domain_with_unknown_tag) { + struct lv_read_instance *inst = NULL; + int ret; + + ret = lv_init_instance(0, lv_read); + inst = &(lv_read_user_data[0].inst); + EXPECT_EQ_STR("virt-0", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", "unknownFormat-tag"); + EXPECT_EQ_INT(1, ret); + + lv_fini_instance(0); + return 0; +} + +DEF_TEST(lv_regular_instance_skip_domain_with_unknown_tag) { + struct lv_read_instance *inst = NULL; + int ret; + + ret = lv_init_instance(1, lv_read); + inst = &(lv_read_user_data[1].inst); + EXPECT_EQ_STR("virt-1", inst->tag); + + ret = lv_instance_include_domain(inst, "testing", "unknownFormat-tag"); + EXPECT_EQ_INT(0, ret); + + lv_fini_instance(0); + return 0; +} +#undef TAG + +int main(void) { + RUN_TEST(lv_domain_get_tag_no_metadata_xml); + RUN_TEST(lv_domain_get_tag_valid_xml); + + RUN_TEST(lv_default_instance_include_domain_without_tag); + RUN_TEST(lv_regular_instance_skip_domain_without_tag); + RUN_TEST(lv_include_domain_matching_tags); + RUN_TEST(lv_default_instance_include_domain_with_unknown_tag); + RUN_TEST(lv_regular_instance_skip_domain_with_unknown_tag); + + END_TEST; +} + +/* vim: set sw=2 sts=2 et : */ diff --git a/src/vmem.c b/src/vmem.c index cd9e7d28..ffe1826a 100644 --- a/src/vmem.c +++ b/src/vmem.c @@ -79,10 +79,10 @@ static int vmem_config(const char *key, const char *value) { else verbose_output = 0; } else { - return (-1); + return -1; } - return (0); + return 0; } /* int vmem_config */ static int vmem_read(void) { @@ -107,7 +107,7 @@ static int vmem_read(void) { char errbuf[1024]; ERROR("vmem plugin: fopen (/proc/vmstat) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -253,12 +253,10 @@ static int vmem_read(void) { submit_two(NULL, "vmpage_io", "swap", pswpin, pswpout); #endif /* KERNEL_LINUX */ - return (0); + return 0; } /* int vmem_read */ void module_register(void) { plugin_register_config("vmem", vmem_config, config_keys, config_keys_num); plugin_register_read("vmem", vmem_read); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 : */ diff --git a/src/vserver.c b/src/vserver.c index c5a7fb33..a2ca0de5 100644 --- a/src/vserver.c +++ b/src/vserver.c @@ -49,7 +49,7 @@ static int vserver_init(void) { * What's the right thing to do, if there is no getpagesize ()? */ pagesize = getpagesize(); - return (0); + return 0; } /* static void vserver_init(void) */ static void traffic_submit(const char *plugin_instance, @@ -114,8 +114,8 @@ static derive_t vserver_get_sock_bytes(const char *s) { status = parse_value(s, &v, DS_TYPE_DERIVE); if (status != 0) - return (-1); - return (v.derive); + return -1; + return v.derive; } static int vserver_read(void) { @@ -127,7 +127,7 @@ static int vserver_read(void) { char errbuf[1024]; ERROR("vserver plugin: fopen (%s): %s", PROCDIR, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } while (42) { @@ -154,7 +154,7 @@ static int vserver_read(void) { ERROR("vserver plugin: failed to read directory %s: %s", PROCDIR, sstrerror(errno, errbuf, sizeof(errbuf))); closedir(proc); - return (-1); + return -1; } if (dent->d_name[0] == '.') @@ -314,12 +314,10 @@ static int vserver_read(void) { closedir(proc); - return (0); + return 0; } /* int vserver_read */ void module_register(void) { plugin_register_init("vserver", vserver_init); plugin_register_read("vserver", vserver_read); } /* void module_register(void) */ - -/* vim: set ts=4 sw=4 noexpandtab : */ diff --git a/src/wireless.c b/src/wireless.c index ae77ded8..5552be64 100644 --- a/src/wireless.c +++ b/src/wireless.c @@ -47,7 +47,7 @@ static double wireless_dbm_to_watt (double dbm) watt = pow (10.0, (dbm / 10.0)) / 1000.0; - return (watt); + return watt; } #endif @@ -69,7 +69,7 @@ static void wireless_submit(const char *plugin_instance, const char *type, static double wireless_percent_to_power(double quality) { assert((quality >= 0.0) && (quality <= 100.0)); - return ((quality * (POWER_MAX - POWER_MIN)) + POWER_MIN); + return (quality * (POWER_MAX - POWER_MIN)) + POWER_MIN; } /* double wireless_percent_to_power */ static int wireless_read(void) { @@ -92,7 +92,7 @@ static int wireless_read(void) { if ((fh = fopen(WIRELESS_PROC_FILE, "r")) == NULL) { char errbuf[1024]; WARNING("wireless: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } devices_found = 0; @@ -151,10 +151,10 @@ static int wireless_read(void) { /* If no wireless devices are present return an error, so the plugin * code delays our read function. */ if (devices_found == 0) - return (-1); + return -1; #endif /* KERNEL_LINUX */ - return (0); + return 0; } /* int wireless_read */ void module_register(void) { diff --git a/src/write_graphite.c b/src/write_graphite.c index b85ab470..206cdc2d 100644 --- a/src/write_graphite.c +++ b/src/write_graphite.c @@ -151,7 +151,7 @@ static int wg_send_buffer(struct wg_callback *cb) { ssize_t status; if (cb->sock_fd < 0) - return (-1); + return -1; status = swrite(cb->sock_fd, cb->send_buf, strlen(cb->send_buf)); if (status != 0) { @@ -166,10 +166,10 @@ static int wg_send_buffer(struct wg_callback *cb) { close(cb->sock_fd); cb->sock_fd = -1; - return (-1); + return -1; } - return (0); + return 0; } /* NOTE: You must hold cb->send_lock when calling this function! */ @@ -186,18 +186,18 @@ static int wg_flush_nolock(cdtime_t timeout, struct wg_callback *cb) { now = cdtime(); if ((cb->send_buf_init_time + timeout) > now) - return (0); + return 0; } if (cb->send_buf_fill == 0) { cb->send_buf_init_time = cdtime(); - return (0); + return 0; } status = wg_send_buffer(cb); wg_reset_buffer(cb); - return (status); + return status; } static int wg_callback_init(struct wg_callback *cb) { @@ -208,13 +208,13 @@ static int wg_callback_init(struct wg_callback *cb) { char connerr[1024] = ""; if (cb->sock_fd > 0) - return (0); + return 0; /* Don't try to reconnect too often. By default, one reconnection attempt * is made per second. */ now = cdtime(); if ((now - cb->last_connect_time) < WG_MIN_RECONNECT_INTERVAL) - return (EAGAIN); + return EAGAIN; cb->last_connect_time = now; struct addrinfo ai_hints = {.ai_family = AF_UNSPEC, @@ -229,7 +229,7 @@ static int wg_callback_init(struct wg_callback *cb) { if (status != 0) { ERROR("write_graphite plugin: getaddrinfo (%s, %s, %s) failed: %s", cb->node, cb->service, cb->protocol, gai_strerror(status)); - return (-1); + return -1; } assert(ai_list != NULL); @@ -270,7 +270,7 @@ static int wg_callback_init(struct wg_callback *cb) { "write_graphite plugin: Connecting to %s:%s via %s failed. " "The last error was: %s", cb->node, cb->service, cb->protocol, connerr); - return (-1); + return -1; } else { c_release(LOG_INFO, &cb->init_complaint, "write_graphite plugin: Successfully connected to %s:%s via %s.", @@ -285,7 +285,7 @@ static int wg_callback_init(struct wg_callback *cb) { else cb->reconnect_interval_reached = 0; - return (0); + return 0; } static void wg_callback_free(void *data) { @@ -324,7 +324,7 @@ static int wg_flush(cdtime_t timeout, int status; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; cb = user_data->data; @@ -335,14 +335,14 @@ static int wg_flush(cdtime_t timeout, if (status != 0) { /* An error message has already been printed. */ pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } } status = wg_flush_nolock(timeout, cb); pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } static int wg_send_message(char const *message, struct wg_callback *cb) { @@ -360,7 +360,7 @@ static int wg_send_message(char const *message, struct wg_callback *cb) { if (status != 0) { /* An error message has already been printed. */ pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } } @@ -368,7 +368,7 @@ static int wg_send_message(char const *message, struct wg_callback *cb) { status = wg_flush_nolock(/* timeout = */ 0, cb); if (status != 0) { pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } } @@ -389,7 +389,7 @@ static int wg_send_message(char const *message, struct wg_callback *cb) { pthread_mutex_unlock(&cb->send_lock); - return (0); + return 0; } static int wg_write_messages(const data_set_t *ds, const value_list_t *vl, @@ -406,14 +406,14 @@ static int wg_write_messages(const data_set_t *ds, const value_list_t *vl, status = format_graphite(buffer, sizeof(buffer), ds, vl, cb->prefix, cb->postfix, cb->escape_char, cb->format_flags); if (status != 0) /* error message has been printed already. */ - return (status); + return status; /* Send the message to graphite */ status = wg_send_message(buffer, cb); if (status != 0) /* error message has been printed already. */ - return (status); + return status; - return (0); + return 0; } /* int wg_write_messages */ static int wg_write(const data_set_t *ds, const value_list_t *vl, @@ -422,13 +422,13 @@ static int wg_write(const data_set_t *ds, const value_list_t *vl, int status; if (user_data == NULL) - return (EINVAL); + return EINVAL; cb = user_data->data; status = wg_write_messages(ds, vl, cb); - return (status); + return status; } static int config_set_char(char *dest, oconfig_item_t *ci) { @@ -437,12 +437,12 @@ static int config_set_char(char *dest, oconfig_item_t *ci) { status = cf_util_get_string_buffer(ci, buffer, sizeof(buffer)); if (status != 0) - return (status); + return status; if (buffer[0] == 0) { ERROR("write_graphite plugin: Cannot use an empty string for the " "\"EscapeCharacter\" option."); - return (-1); + return -1; } if (buffer[1] != 0) { @@ -453,7 +453,7 @@ static int config_set_char(char *dest, oconfig_item_t *ci) { *dest = buffer[0]; - return (0); + return 0; } static int wg_config_node(oconfig_item_t *ci) { @@ -464,7 +464,7 @@ static int wg_config_node(oconfig_item_t *ci) { cb = calloc(1, sizeof(*cb)); if (cb == NULL) { ERROR("write_graphite plugin: calloc failed."); - return (-1); + return -1; } cb->sock_fd = -1; cb->name = NULL; @@ -485,7 +485,7 @@ static int wg_config_node(oconfig_item_t *ci) { status = cf_util_get_string(ci, &cb->name); if (status != 0) { wg_callback_free(cb); - return (status); + return status; } } @@ -540,7 +540,7 @@ static int wg_config_node(oconfig_item_t *ci) { if (status != 0) { wg_callback_free(cb); - return (status); + return status; } /* FIXME: Legacy configuration syntax. */ @@ -558,7 +558,7 @@ static int wg_config_node(oconfig_item_t *ci) { plugin_register_flush(callback_name, wg_flush, &(user_data_t){.data = cb}); - return (0); + return 0; } static int wg_config(oconfig_item_t *ci) { @@ -577,11 +577,9 @@ static int wg_config(oconfig_item_t *ci) { } } - return (0); + return 0; } void module_register(void) { plugin_register_complex_config("write_graphite", wg_config); } - -/* vim: set sw=4 ts=4 sts=4 tw=78 et : */ diff --git a/src/write_http.c b/src/write_http.c index c1b3f0b0..d5c91d91 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -78,9 +78,14 @@ struct wh_callback_s { cdtime_t send_buffer_init_time; pthread_mutex_t send_lock; + + int data_ttl; }; typedef struct wh_callback_s wh_callback_t; +static char **http_attrs; +static size_t http_attrs_num; + static void wh_log_http_error(wh_callback_t *cb) { if (!cb->log_http_error) return; @@ -124,18 +129,18 @@ static int wh_post_nolock(wh_callback_t *cb, char const *data) /* {{{ */ "status %i: %s", status, cb->curl_errbuf); } - return (status); + return status; } /* }}} wh_post_nolock */ static int wh_callback_init(wh_callback_t *cb) /* {{{ */ { if (cb->curl != NULL) - return (0); + return 0; cb->curl = curl_easy_init(); if (cb->curl == NULL) { ERROR("curl plugin: curl_easy_init failed."); - return (-1); + return -1; } if (cb->low_speed_limit > 0 && cb->low_speed_time > 0) { @@ -182,7 +187,7 @@ static int wh_callback_init(wh_callback_t *cb) /* {{{ */ cb->credentials = malloc(credentials_size); if (cb->credentials == NULL) { ERROR("curl plugin: malloc failed."); - return (-1); + return -1; } ssnprintf(cb->credentials, credentials_size, "%s:%s", cb->user, @@ -210,7 +215,7 @@ static int wh_callback_init(wh_callback_t *cb) /* {{{ */ wh_reset_buffer(cb); - return (0); + return 0; } /* }}} int wh_callback_init */ static int wh_flush_nolock(cdtime_t timeout, wh_callback_t *cb) /* {{{ */ @@ -227,13 +232,13 @@ static int wh_flush_nolock(cdtime_t timeout, wh_callback_t *cb) /* {{{ */ now = cdtime(); if ((cb->send_buffer_init_time + timeout) > now) - return (0); + return 0; } if (cb->format == WH_FORMAT_COMMAND) { if (cb->send_buffer_fill == 0) { cb->send_buffer_init_time = cdtime(); - return (0); + return 0; } status = wh_post_nolock(cb, cb->send_buffer); @@ -241,7 +246,7 @@ static int wh_flush_nolock(cdtime_t timeout, wh_callback_t *cb) /* {{{ */ } else if (cb->format == WH_FORMAT_JSON || cb->format == WH_FORMAT_KAIROSDB) { if (cb->send_buffer_fill <= 2) { cb->send_buffer_init_time = cdtime(); - return (0); + return 0; } status = format_json_finalize(cb->send_buffer, &cb->send_buffer_fill, @@ -250,7 +255,7 @@ static int wh_flush_nolock(cdtime_t timeout, wh_callback_t *cb) /* {{{ */ ERROR("write_http: wh_flush_nolock: " "format_json_finalize failed."); wh_reset_buffer(cb); - return (status); + return status; } status = wh_post_nolock(cb, cb->send_buffer); @@ -259,10 +264,10 @@ static int wh_flush_nolock(cdtime_t timeout, wh_callback_t *cb) /* {{{ */ ERROR("write_http: wh_flush_nolock: " "Unknown format: %i", cb->format); - return (-1); + return -1; } - return (status); + return status; } /* }}} wh_flush_nolock */ static int wh_flush(cdtime_t timeout, /* {{{ */ @@ -272,7 +277,7 @@ static int wh_flush(cdtime_t timeout, /* {{{ */ int status; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; cb = user_data->data; @@ -281,13 +286,13 @@ static int wh_flush(cdtime_t timeout, /* {{{ */ if (wh_callback_init(cb) != 0) { ERROR("write_http plugin: wh_callback_init failed."); pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } status = wh_flush_nolock(timeout, cb); pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } /* }}} int wh_flush */ static void wh_callback_free(void *data) /* {{{ */ @@ -351,7 +356,7 @@ static int wh_write_command(const data_set_t *ds, status = FORMAT_VL(key, sizeof(key), vl); if (status != 0) { ERROR("write_http plugin: error with format_name"); - return (status); + return status; } escape_string(key, sizeof(key)); @@ -361,7 +366,7 @@ static int wh_write_command(const data_set_t *ds, if (status != 0) { ERROR("write_http plugin: error with " "wh_value_list_to_string"); - return (status); + return status; } command_len = (size_t)ssnprintf(command, sizeof(command), @@ -371,21 +376,21 @@ static int wh_write_command(const data_set_t *ds, ERROR("write_http plugin: Command buffer too small: " "Need %zu bytes.", command_len + 1); - return (-1); + return -1; } pthread_mutex_lock(&cb->send_lock); if (wh_callback_init(cb) != 0) { ERROR("write_http plugin: wh_callback_init failed."); pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } if (command_len >= cb->send_buffer_free) { status = wh_flush_nolock(/* timeout = */ 0, cb); if (status != 0) { pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } } assert(command_len < cb->send_buffer_free); @@ -407,7 +412,7 @@ static int wh_write_command(const data_set_t *ds, /* Check if we have enough space for this command. */ pthread_mutex_unlock(&cb->send_lock); - return (0); + return 0; } /* }}} int wh_write_command */ static int wh_write_json(const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -418,7 +423,7 @@ static int wh_write_json(const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (wh_callback_init(cb) != 0) { ERROR("write_http plugin: wh_callback_init failed."); pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } status = @@ -429,7 +434,7 @@ static int wh_write_json(const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (status != 0) { wh_reset_buffer(cb); pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } status = @@ -438,7 +443,7 @@ static int wh_write_json(const data_set_t *ds, const value_list_t *vl, /* {{{ */ } if (status != 0) { pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } DEBUG("write_http plugin: <%s> buffer %zu/%zu (%g%%)", cb->location, @@ -449,7 +454,7 @@ static int wh_write_json(const data_set_t *ds, const value_list_t *vl, /* {{{ */ /* Check if we have enough space for this command. */ pthread_mutex_unlock(&cb->send_lock); - return (0); + return 0; } /* }}} int wh_write_json */ static int wh_write_kairosdb(const data_set_t *ds, @@ -464,28 +469,30 @@ static int wh_write_kairosdb(const data_set_t *ds, if (status != 0) { ERROR("write_http plugin: wh_callback_init failed."); pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } } - status = format_kairosdb_value_list(cb->send_buffer, &cb->send_buffer_fill, - &cb->send_buffer_free, ds, vl, - cb->store_rates); + status = format_kairosdb_value_list( + cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, ds, vl, + cb->store_rates, (char const *const *)http_attrs, http_attrs_num, + cb->data_ttl); if (status == -ENOMEM) { status = wh_flush_nolock(/* timeout = */ 0, cb); if (status != 0) { wh_reset_buffer(cb); pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } - status = format_kairosdb_value_list(cb->send_buffer, &cb->send_buffer_fill, - &cb->send_buffer_free, ds, vl, - cb->store_rates); + status = format_kairosdb_value_list( + cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, ds, vl, + cb->store_rates, (char const *const *)http_attrs, http_attrs_num, + cb->data_ttl); } if (status != 0) { pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } DEBUG("write_http plugin: <%s> buffer %zu/%zu (%g%%)", cb->location, @@ -496,7 +503,7 @@ static int wh_write_kairosdb(const data_set_t *ds, /* Check if we have enough space for this command. */ pthread_mutex_unlock(&cb->send_lock); - return (0); + return 0; } /* }}} int wh_write_kairosdb */ static int wh_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -505,7 +512,7 @@ static int wh_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ int status; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; cb = user_data->data; assert(cb->send_metrics); @@ -521,7 +528,7 @@ static int wh_write(const data_set_t *ds, const value_list_t *vl, /* {{{ */ status = wh_write_command(ds, vl, cb); break; } - return (status); + return status; } /* }}} int wh_write */ static int wh_notify(notification_t const *n, user_data_t *ud) /* {{{ */ @@ -531,7 +538,7 @@ static int wh_notify(notification_t const *n, user_data_t *ud) /* {{{ */ int status; if ((ud == NULL) || (ud->data == NULL)) - return (EINVAL); + return EINVAL; cb = ud->data; assert(cb->send_notifications); @@ -546,13 +553,13 @@ static int wh_notify(notification_t const *n, user_data_t *ud) /* {{{ */ if (wh_callback_init(cb) != 0) { ERROR("write_http plugin: wh_callback_init failed."); pthread_mutex_unlock(&cb->send_lock); - return (-1); + return -1; } status = wh_post_nolock(cb, alert); pthread_mutex_unlock(&cb->send_lock); - return (status); + return status; } /* }}} int wh_notify */ static int config_set_format(wh_callback_t *cb, /* {{{ */ @@ -563,7 +570,7 @@ static int config_set_format(wh_callback_t *cb, /* {{{ */ WARNING("write_http plugin: The `%s' config option " "needs exactly one string argument.", ci->key); - return (-1); + return -1; } string = ci->values[0].value.string; @@ -575,10 +582,10 @@ static int config_set_format(wh_callback_t *cb, /* {{{ */ cb->format = WH_FORMAT_KAIROSDB; else { ERROR("write_http plugin: Invalid format string: %s", string); - return (-1); + return -1; } - return (0); + return 0; } /* }}} int config_set_format */ static int wh_config_append_string(const char *name, @@ -587,16 +594,16 @@ static int wh_config_append_string(const char *name, struct curl_slist *temp = NULL; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { WARNING("write_http plugin: `%s' needs exactly one string argument.", name); - return (-1); + return -1; } temp = curl_slist_append(*dest, ci->values[0].value.string); if (temp == NULL) - return (-1); + return -1; *dest = temp; - return (0); + return 0; } /* }}} int wh_config_append_string */ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ @@ -609,7 +616,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ cb = calloc(1, sizeof(*cb)); if (cb == NULL) { ERROR("write_http plugin: calloc failed."); - return (-1); + return -1; } cb->verify_peer = 1; cb->verify_host = 1; @@ -621,6 +628,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ cb->headers = NULL; cb->send_metrics = 1; cb->send_notifications = 0; + cb->data_ttl = 0; pthread_mutex_init(&cb->send_lock, /* attr = */ NULL); @@ -703,7 +711,36 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_boolean(child, &cb->log_http_error); else if (strcasecmp("Header", child->key) == 0) status = wh_config_append_string("Header", &cb->headers, child); - else { + else if (strcasecmp("Attribute", child->key) == 0) { + char *key = NULL; + char *val = NULL; + + if (child->values_num != 2) { + WARNING("write_http plugin: Attribute need both a key and a value."); + break; + } + if (child->values[0].type != OCONFIG_TYPE_STRING || + child->values[1].type != OCONFIG_TYPE_STRING) { + WARNING("write_http plugin: Attribute needs string arguments."); + break; + } + if ((key = strdup(child->values[0].value.string)) == NULL) { + WARNING("cannot allocate memory for attribute key."); + break; + } + if ((val = strdup(child->values[1].value.string)) == NULL) { + WARNING("cannot allocate memory for attribute value."); + sfree(key); + break; + } + strarray_add(&http_attrs, &http_attrs_num, key); + strarray_add(&http_attrs, &http_attrs_num, val); + DEBUG("write_http plugin: got attribute: %s => %s", key, val); + sfree(key); + sfree(val); + } else if (strcasecmp("TTL", child->key) == 0) { + status = cf_util_get_int(child, &cb->data_ttl); + } else { ERROR("write_http plugin: Invalid configuration " "option: %s.", child->key); @@ -716,13 +753,13 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ if (status != 0) { wh_callback_free(cb); - return (status); + return status; } if (cb->location == NULL) { ERROR("write_http plugin: no URL defined for instance '%s'", cb->name); wh_callback_free(cb); - return (-1); + return -1; } if (!cb->send_metrics && !cb->send_notifications) { @@ -730,7 +767,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ "are enabled for \"%s\".", cb->name); wh_callback_free(cb); - return (-1); + return -1; } if (cb->low_speed_limit > 0) @@ -749,7 +786,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ if (cb->send_buffer == NULL) { ERROR("write_http plugin: malloc(%zu) failed.", cb->send_buffer_size); wh_callback_free(cb); - return (-1); + return -1; } /* Nulls the buffer and sets ..._free and ..._fill. */ wh_reset_buffer(cb); @@ -774,7 +811,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */ user_data.free_func = NULL; } - return (0); + return 0; } /* }}} int wh_config_node */ static int wh_config(oconfig_item_t *ci) /* {{{ */ @@ -796,7 +833,7 @@ static int wh_config(oconfig_item_t *ci) /* {{{ */ } } - return (0); + return 0; } /* }}} int wh_config */ static int wh_init(void) /* {{{ */ @@ -804,7 +841,7 @@ static int wh_init(void) /* {{{ */ /* Call this while collectd is still single-threaded to avoid * initialization issues in libgcrypt. */ curl_global_init(CURL_GLOBAL_SSL); - return (0); + return 0; } /* }}} int wh_init */ void module_register(void) /* {{{ */ @@ -812,5 +849,3 @@ void module_register(void) /* {{{ */ plugin_register_complex_config("write_http", wh_config); plugin_register_init("write_http", wh_init); } /* }}} void module_register */ - -/* vim: set fdm=marker sw=8 ts=8 tw=78 et : */ diff --git a/src/write_kafka.c b/src/write_kafka.c index 306d92cc..ca400acb 100644 --- a/src/write_kafka.c +++ b/src/write_kafka.c @@ -113,12 +113,12 @@ static int kafka_handle(struct kafka_topic_context *ctx) /* {{{ */ rd_kafka_topic_conf_t *topic_conf; if (ctx->kafka != NULL && ctx->topic != NULL) - return (0); + return 0; if (ctx->kafka == NULL) { if ((conf = rd_kafka_conf_dup(ctx->kafka_conf)) == NULL) { ERROR("write_kafka plugin: cannot duplicate kafka config"); - return (1); + return 1; } if ((ctx->kafka = rd_kafka_new(RD_KAFKA_PRODUCER, conf, errbuf, @@ -158,7 +158,7 @@ static int kafka_handle(struct kafka_topic_context *ctx) /* {{{ */ rd_kafka_topic_name(ctx->topic)); } - return (0); + return 0; } /* }}} int kafka_handle */ @@ -481,7 +481,7 @@ static int kafka_config(oconfig_item_t *ci) /* {{{ */ } if (conf != NULL) rd_kafka_conf_destroy(conf); - return (0); + return 0; errout: if (conf != NULL) rd_kafka_conf_destroy(conf); diff --git a/src/write_log.c b/src/write_log.c index 2d34b21b..fdc99ef3 100644 --- a/src/write_log.c +++ b/src/write_log.c @@ -54,11 +54,11 @@ static int wl_write_graphite(const data_set_t *ds, const value_list_t *vl) { status = format_graphite(buffer, sizeof(buffer), ds, vl, NULL, NULL, '_', 0); if (status != 0) /* error message has been printed already. */ - return (status); + return status; INFO("write_log values:\n%s", buffer); - return (0); + return 0; } /* int wl_write_graphite */ static int wl_write_json(const data_set_t *ds, const value_list_t *vl) { @@ -78,7 +78,7 @@ static int wl_write_json(const data_set_t *ds, const value_list_t *vl) { INFO("write_log values:\n%s", buffer); - return (0); + return 0; } /* int wl_write_json */ static int wl_write(const data_set_t *ds, const value_list_t *vl, @@ -91,7 +91,7 @@ static int wl_write(const data_set_t *ds, const value_list_t *vl, status = wl_write_json(ds, vl); } - return (status); + return status; } static int wl_config(oconfig_item_t *ci) /* {{{ */ @@ -119,16 +119,16 @@ static int wl_config(oconfig_item_t *ci) /* {{{ */ else { ERROR("write_log plugin: Unknown format `%s' for option `%s'.", str, child->key); - return (-EINVAL); + return -EINVAL; } } else { ERROR("write_log plugin: Invalid configuration option: `%s'.", child->key); - return (-EINVAL); + return -EINVAL; } } - return (0); + return 0; } /* }}} int wl_config */ void module_register(void) { @@ -136,5 +136,3 @@ void module_register(void) { /* If config is supplied, the global wl_format will be set. */ plugin_register_write("write_log", wl_write, NULL); } - -/* vim: set sw=4 ts=4 sts=4 tw=78 et : */ diff --git a/src/write_mongodb.c b/src/write_mongodb.c index e175e1f3..e90900ec 100644 --- a/src/write_mongodb.c +++ b/src/write_mongodb.c @@ -3,6 +3,7 @@ * Copyright (C) 2010-2013 Florian Forster * Copyright (C) 2010 Akkarit Sangpetch * Copyright (C) 2012 Chris Lundquist + * Copyright (C) 2017 Saikrishna Arcot * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,6 +27,7 @@ * Florian Forster * Akkarit Sangpetch * Chris Lundquist + * Saikrishna Arcot **/ #include "collectd.h" @@ -34,17 +36,7 @@ #include "plugin.h" #include "utils_cache.h" -#if HAVE_STDINT_H -#define MONGO_HAVE_STDINT 1 -#else -#define MONGO_USE_LONG_LONG_INT 1 -#endif -#include - -#if (MONGO_MAJOR == 0) && (MONGO_MINOR < 8) -#define bson_alloc() bson_create() -#define bson_dealloc(b) bson_dispose(b) -#endif +#include struct wm_node_s { char name[DATA_MAX_NAME_LEN]; @@ -59,8 +51,10 @@ struct wm_node_s { char *passwd; _Bool store_rates; + _Bool connected; - mongo conn[1]; + mongoc_client_t *client; + mongoc_database_t *database; pthread_mutex_t lock; }; typedef struct wm_node_s wm_node_t; @@ -68,170 +62,222 @@ typedef struct wm_node_s wm_node_t; /* * Functions */ -static bson *wm_create_bson(const data_set_t *ds, /* {{{ */ - const value_list_t *vl, _Bool store_rates) { - bson *ret; +static bson_t *wm_create_bson(const data_set_t *ds, /* {{{ */ + const value_list_t *vl, _Bool store_rates) { + bson_t *ret; + bson_t subarray; gauge_t *rates; - ret = bson_alloc(); /* matched by bson_dealloc() */ - if (ret == NULL) { - ERROR("write_mongodb plugin: bson_create failed."); - return (NULL); + ret = bson_new(); + if (!ret) { + ERROR("write_mongodb plugin: bson_new failed."); + return NULL; } if (store_rates) { rates = uc_get_rate(ds, vl); if (rates == NULL) { ERROR("write_mongodb plugin: uc_get_rate() failed."); - return (NULL); + bson_destroy(ret); + return NULL; } } else { rates = NULL; } - bson_init(ret); /* matched by bson_destroy() */ - bson_append_date(ret, "time", (bson_date_t)CDTIME_T_TO_MS(vl->time)); - bson_append_string(ret, "host", vl->host); - bson_append_string(ret, "plugin", vl->plugin); - bson_append_string(ret, "plugin_instance", vl->plugin_instance); - bson_append_string(ret, "type", vl->type); - bson_append_string(ret, "type_instance", vl->type_instance); + BSON_APPEND_DATE_TIME(ret, "timestamp", CDTIME_T_TO_MS(vl->time)); + BSON_APPEND_UTF8(ret, "host", vl->host); + BSON_APPEND_UTF8(ret, "plugin", vl->plugin); + BSON_APPEND_UTF8(ret, "plugin_instance", vl->plugin_instance); + BSON_APPEND_UTF8(ret, "type", vl->type); + BSON_APPEND_UTF8(ret, "type_instance", vl->type_instance); - bson_append_start_array(ret, "values"); /* {{{ */ + BSON_APPEND_ARRAY_BEGIN(ret, "values", &subarray); /* {{{ */ for (int i = 0; i < ds->ds_num; i++) { char key[16]; ssnprintf(key, sizeof(key), "%i", i); if (ds->ds[i].type == DS_TYPE_GAUGE) - bson_append_double(ret, key, vl->values[i].gauge); + BSON_APPEND_DOUBLE(&subarray, key, vl->values[i].gauge); else if (store_rates) - bson_append_double(ret, key, (double)rates[i]); + BSON_APPEND_DOUBLE(&subarray, key, (double)rates[i]); else if (ds->ds[i].type == DS_TYPE_COUNTER) - bson_append_long(ret, key, vl->values[i].counter); + BSON_APPEND_INT64(&subarray, key, vl->values[i].counter); else if (ds->ds[i].type == DS_TYPE_DERIVE) - bson_append_long(ret, key, vl->values[i].derive); + BSON_APPEND_INT64(&subarray, key, vl->values[i].derive); else if (ds->ds[i].type == DS_TYPE_ABSOLUTE) - bson_append_long(ret, key, vl->values[i].absolute); - else - assert(23 == 42); + BSON_APPEND_INT64(&subarray, key, vl->values[i].absolute); + else { + ERROR("write_mongodb plugin: Unknown ds_type %d for index %d", + ds->ds[i].type, i); + bson_destroy(ret); + return NULL; + } } - bson_append_finish_array(ret); /* }}} values */ + bson_append_array_end(ret, &subarray); /* }}} values */ - bson_append_start_array(ret, "dstypes"); /* {{{ */ + BSON_APPEND_ARRAY_BEGIN(ret, "dstypes", &subarray); /* {{{ */ for (int i = 0; i < ds->ds_num; i++) { char key[16]; ssnprintf(key, sizeof(key), "%i", i); if (store_rates) - bson_append_string(ret, key, "gauge"); + BSON_APPEND_UTF8(&subarray, key, "gauge"); else - bson_append_string(ret, key, DS_TYPE_TO_STRING(ds->ds[i].type)); + BSON_APPEND_UTF8(&subarray, key, DS_TYPE_TO_STRING(ds->ds[i].type)); } - bson_append_finish_array(ret); /* }}} dstypes */ + bson_append_array_end(ret, &subarray); /* }}} dstypes */ - bson_append_start_array(ret, "dsnames"); /* {{{ */ + BSON_APPEND_ARRAY_BEGIN(ret, "dsnames", &subarray); /* {{{ */ for (int i = 0; i < ds->ds_num; i++) { char key[16]; ssnprintf(key, sizeof(key), "%i", i); - bson_append_string(ret, key, ds->ds[i].name); + BSON_APPEND_UTF8(&subarray, key, ds->ds[i].name); } - bson_append_finish_array(ret); /* }}} dsnames */ - - bson_finish(ret); + bson_append_array_end(ret, &subarray); /* }}} dsnames */ sfree(rates); - return (ret); + + size_t error_location; + if (!bson_validate(ret, BSON_VALIDATE_UTF8, &error_location)) { + ERROR("write_mongodb plugin: Error in generated BSON document " + "at byte %zu", + error_location); + bson_destroy(ret); + return NULL; + } + + return ret; } /* }}} bson *wm_create_bson */ +static int wm_initialize(wm_node_t *node) /* {{{ */ +{ + char *uri; + + if (node->connected) + return 0; + + INFO("write_mongodb plugin: Connecting to [%s]:%d", node->host, node->port); + + if ((node->db != NULL) && (node->user != NULL) && (node->passwd != NULL)) { + uri = ssnprintf_alloc("mongodb://%s:%s@%s:%d/?authSource=%s", node->user, + node->passwd, node->host, node->port, node->db); + if (uri == NULL) { + ERROR("write_mongodb plugin: Not enough memory to assemble " + "authentication string."); + mongoc_client_destroy(node->client); + node->client = NULL; + node->connected = 0; + return -1; + } + + node->client = mongoc_client_new(uri); + if (!node->client) { + ERROR("write_mongodb plugin: Authenticating to [%s]:%d for database " + "\"%s\" as user \"%s\" failed.", + node->host, node->port, node->db, node->user); + node->connected = 0; + sfree(uri); + return -1; + } + } else { + uri = ssnprintf_alloc("mongodb://%s:%d", node->host, node->port); + if (uri == NULL) { + ERROR("write_mongodb plugin: Not enough memory to assemble " + "authentication string."); + mongoc_client_destroy(node->client); + node->client = NULL; + node->connected = 0; + return -1; + } + + node->client = mongoc_client_new(uri); + if (!node->client) { + ERROR("write_mongodb plugin: Connecting to [%s]:%d failed.", node->host, + node->port); + node->connected = 0; + sfree(uri); + return -1; + } + sfree(uri); + } + + node->database = mongoc_client_get_database(node->client, "collectd"); + if (!node->database) { + ERROR("write_mongodb plugin: error creating/getting database"); + mongoc_client_destroy(node->client); + node->client = NULL; + node->connected = 0; + return -1; + } + + node->connected = 1; + return 0; +} /* }}} int wm_initialize */ + static int wm_write(const data_set_t *ds, /* {{{ */ const value_list_t *vl, user_data_t *ud) { wm_node_t *node = ud->data; - char collection_name[512]; - bson *bson_record; + mongoc_collection_t *collection = NULL; + bson_t *bson_record; + bson_error_t error; int status; - ssnprintf(collection_name, sizeof(collection_name), "collectd.%s", - vl->plugin); - bson_record = wm_create_bson(ds, vl, node->store_rates); - if (bson_record == NULL) - return (ENOMEM); + if (!bson_record) { + ERROR("write_mongodb plugin: error making insert bson"); + return -1; + } pthread_mutex_lock(&node->lock); - - if (!mongo_is_connected(node->conn)) { - INFO("write_mongodb plugin: Connecting to [%s]:%i", - (node->host != NULL) ? node->host : "localhost", - (node->port != 0) ? node->port : MONGO_DEFAULT_PORT); - status = mongo_connect(node->conn, node->host, node->port); - if (status != MONGO_OK) { - ERROR("write_mongodb plugin: Connecting to [%s]:%i failed.", - (node->host != NULL) ? node->host : "localhost", - (node->port != 0) ? node->port : MONGO_DEFAULT_PORT); - mongo_destroy(node->conn); - pthread_mutex_unlock(&node->lock); - return (-1); - } - - if ((node->db != NULL) && (node->user != NULL) && (node->passwd != NULL)) { - status = mongo_cmd_authenticate(node->conn, node->db, node->user, - node->passwd); - if (status != MONGO_OK) { - ERROR("write_mongodb plugin: Authenticating to [%s]%i for database " - "\"%s\" as user \"%s\" failed.", - (node->host != NULL) ? node->host : "localhost", - (node->port != 0) ? node->port : MONGO_DEFAULT_PORT, node->db, - node->user); - mongo_destroy(node->conn); - pthread_mutex_unlock(&node->lock); - return (-1); - } - } - - if (node->timeout > 0) { - status = mongo_set_op_timeout(node->conn, node->timeout); - if (status != MONGO_OK) { - WARNING("write_mongodb plugin: mongo_set_op_timeout(%i) failed: %s", - node->timeout, node->conn->errstr); - } - } + if (wm_initialize(node) < 0) { + ERROR("write_mongodb plugin: error making connection to server"); + pthread_mutex_unlock(&node->lock); + bson_destroy(bson_record); + return -1; } - /* Assert if the connection has been established */ - assert(mongo_is_connected(node->conn)); - -#if MONGO_MINOR >= 6 - /* There was an API change in 0.6.0 as linked below */ - /* https://github.com/mongodb/mongo-c-driver/blob/master/HISTORY.md */ - status = mongo_insert(node->conn, collection_name, bson_record, NULL); -#else - status = mongo_insert(node->conn, collection_name, bson_record); -#endif - - if (status != MONGO_OK) { - ERROR("write_mongodb plugin: error inserting record: %d", node->conn->err); - if (node->conn->err != MONGO_BSON_INVALID) - ERROR("write_mongodb plugin: %s", node->conn->errstr); - else - ERROR("write_mongodb plugin: Invalid BSON structure, error = %#x", - (unsigned int)bson_record->err); + collection = + mongoc_client_get_collection(node->client, "collectd", vl->plugin); + if (!collection) { + ERROR("write_mongodb plugin: error creating/getting collection"); + mongoc_database_destroy(node->database); + mongoc_client_destroy(node->client); + node->database = NULL; + node->client = NULL; + node->connected = 0; + pthread_mutex_unlock(&node->lock); + bson_destroy(bson_record); + return -1; + } - /* Disconnect except on data errors. */ - if ((node->conn->err != MONGO_BSON_INVALID) && - (node->conn->err != MONGO_BSON_NOT_FINISHED)) - mongo_destroy(node->conn); + status = mongoc_collection_insert(collection, MONGOC_INSERT_NONE, bson_record, + NULL, &error); + + if (!status) { + ERROR("write_mongodb plugin: error inserting record: %s", error.message); + mongoc_database_destroy(node->database); + mongoc_client_destroy(node->client); + node->database = NULL; + node->client = NULL; + node->connected = 0; + pthread_mutex_unlock(&node->lock); + bson_destroy(bson_record); + mongoc_collection_destroy(collection); + return -1; } + /* free our resource as not to leak memory */ + mongoc_collection_destroy(collection); + pthread_mutex_unlock(&node->lock); - /* free our resource as not to leak memory */ - bson_destroy(bson_record); /* matches bson_init() */ - bson_dealloc(bson_record); /* matches bson_alloc() */ + bson_destroy(bson_record); - return (0); + return 0; } /* }}} int wm_write */ static void wm_config_free(void *ptr) /* {{{ */ @@ -241,8 +287,11 @@ static void wm_config_free(void *ptr) /* {{{ */ if (node == NULL) return; - if (mongo_is_connected(node->conn)) - mongo_destroy(node->conn); + mongoc_database_destroy(node->database); + mongoc_client_destroy(node->client); + node->database = NULL; + node->client = NULL; + node->connected = 0; sfree(node->host); sfree(node); @@ -255,17 +304,23 @@ static int wm_config_node(oconfig_item_t *ci) /* {{{ */ node = calloc(1, sizeof(*node)); if (node == NULL) - return (ENOMEM); - mongo_init(node->conn); - node->host = NULL; + return ENOMEM; + mongoc_init(); + node->host = strdup("localhost"); + if (node->host == NULL) { + sfree(node); + return ENOMEM; + } + node->port = MONGOC_DEFAULT_PORT; node->store_rates = 1; pthread_mutex_init(&node->lock, /* attr = */ NULL); status = cf_util_get_string_buffer(ci, node->name, sizeof(node->name)); if (status != 0) { + sfree(node->host); sfree(node); - return (status); + return status; } for (int i = 0; i < ci->children_num; i++) { @@ -315,10 +370,11 @@ static int wm_config_node(oconfig_item_t *ci) /* {{{ */ ssnprintf(cb_name, sizeof(cb_name), "write_mongodb/%s", node->name); - status = plugin_register_write( - cb_name, wm_write, &(user_data_t){ - .data = node, .free_func = wm_config_free, - }); + status = + plugin_register_write(cb_name, wm_write, + &(user_data_t){ + .data = node, .free_func = wm_config_free, + }); INFO("write_mongodb plugin: registered write plugin %s %d", cb_name, status); } @@ -326,7 +382,7 @@ static int wm_config_node(oconfig_item_t *ci) /* {{{ */ if (status != 0) wm_config_free(node); - return (status); + return status; } /* }}} int wm_config_node */ static int wm_config(oconfig_item_t *ci) /* {{{ */ @@ -342,11 +398,9 @@ static int wm_config(oconfig_item_t *ci) /* {{{ */ child->key); } - return (0); + return 0; } /* }}} int wm_config */ void module_register(void) { plugin_register_complex_config("write_mongodb", wm_config); } - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/write_prometheus.c b/src/write_prometheus.c index de1c389c..52649984 100644 --- a/src/write_prometheus.c +++ b/src/write_prometheus.c @@ -599,8 +599,8 @@ static int metric_family_update(Io__Prometheus__Client__MetricFamily *fam, if (m == NULL) return -1; - return metric_update(m, vl->values[ds_index], ds->ds[ds_index].type, vl->time, - vl->interval); + return metric_update(m, vl->values[ds_index], ds->ds[ds_index].type, + vl->time, vl->interval); } /* metric_family_destroy frees the memory used by a metric family. */ @@ -875,5 +875,3 @@ void module_register() { /* user data = */ NULL); plugin_register_shutdown("write_prometheus", prom_shutdown); } - -/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/write_redis.c b/src/write_redis.c index 0a5c5df1..f7215b50 100644 --- a/src/write_redis.c +++ b/src/write_redis.c @@ -69,7 +69,7 @@ static int wr_write(const data_set_t *ds, /* {{{ */ status = FORMAT_VL(ident, sizeof(ident), vl); if (status != 0) - return (status); + return status; ssnprintf(key, sizeof(key), "%s%s", (node->prefix != NULL) ? node->prefix : REDIS_DEFAULT_PREFIX, ident); @@ -79,7 +79,7 @@ static int wr_write(const data_set_t *ds, /* {{{ */ value_ptr = &value[0]; status = format_values(value_ptr, value_size, ds, vl, node->store_rates); if (status != 0) - return (status); + return status; pthread_mutex_lock(&node->lock); @@ -92,14 +92,14 @@ static int wr_write(const data_set_t *ds, /* {{{ */ (node->host != NULL) ? node->host : "localhost", (node->port != 0) ? node->port : 6379); pthread_mutex_unlock(&node->lock); - return (-1); + return -1; } else if (node->conn->err) { ERROR( "write_redis plugin: Connecting to host \"%s\" (port %i) failed: %s", (node->host != NULL) ? node->host : "localhost", (node->port != 0) ? node->port : 6379, node->conn->errstr); pthread_mutex_unlock(&node->lock); - return (-1); + return -1; } rr = redisCommand(node->conn, "SELECT %d", node->database); @@ -140,7 +140,7 @@ static int wr_write(const data_set_t *ds, /* {{{ */ pthread_mutex_unlock(&node->lock); - return (0); + return 0; } /* }}} int wr_write */ static void wr_config_free(void *ptr) /* {{{ */ @@ -167,7 +167,7 @@ static int wr_config_node(oconfig_item_t *ci) /* {{{ */ node = calloc(1, sizeof(*node)); if (node == NULL) - return (ENOMEM); + return ENOMEM; node->host = NULL; node->port = 0; node->timeout.tv_sec = 0; @@ -182,7 +182,7 @@ static int wr_config_node(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string_buffer(ci, node->name, sizeof(node->name)); if (status != 0) { sfree(node); - return (status); + return status; } for (int i = 0; i < ci->children_num; i++) { @@ -230,7 +230,7 @@ static int wr_config_node(oconfig_item_t *ci) /* {{{ */ if (status != 0) wr_config_free(node); - return (status); + return status; } /* }}} int wr_config_node */ static int wr_config(oconfig_item_t *ci) /* {{{ */ @@ -246,11 +246,9 @@ static int wr_config(oconfig_item_t *ci) /* {{{ */ child->key); } - return (0); + return 0; } /* }}} int wr_config */ void module_register(void) { plugin_register_complex_config("write_redis", wr_config); } - -/* vim: set sw=2 sts=2 tw=78 et fdm=marker : */ diff --git a/src/write_riemann.c b/src/write_riemann.c index 3835a3d5..5bd0cf43 100644 --- a/src/write_riemann.c +++ b/src/write_riemann.c @@ -125,12 +125,12 @@ static int wrr_connect(struct riemann_host *host) /* {{{ */ static int wrr_disconnect(struct riemann_host *host) /* {{{ */ { if (!host->client) - return (0); + return 0; riemann_client_free(host->client); host->client = NULL; - return (0); + return 0; } /* }}} int wrr_disconnect */ /** @@ -214,6 +214,11 @@ wrr_notification_to_message(struct riemann_host *host, /* {{{ */ RIEMANN_EVENT_FIELD_SERVICE, &service_buffer[1], RIEMANN_EVENT_FIELD_NONE); +#if RCC_VERSION_NUMBER >= 0x010A00 + riemann_event_set(event, RIEMANN_EVENT_FIELD_TIME_MICROS, + (int64_t)CDTIME_T_TO_US(n->time)); +#endif + if (n->host[0] != 0) riemann_event_string_attribute_add(event, "host", n->host); if (n->plugin[0] != 0) @@ -259,13 +264,13 @@ wrr_notification_to_message(struct riemann_host *host, /* {{{ */ if (msg == NULL) { ERROR("write_riemann plugin: riemann_message_create_with_events() failed."); riemann_event_free(event); - return (NULL); + return NULL; } DEBUG("write_riemann plugin: Successfully created message for notification: " "host = \"%s\", service = \"%s\", state = \"%s\"", event->host, event->service, event->state); - return (msg); + return msg; } /* }}} riemann_message_t *wrr_notification_to_message */ static riemann_event_t * @@ -280,7 +285,7 @@ wrr_value_to_event(struct riemann_host const *host, /* {{{ */ event = riemann_event_new(); if (event == NULL) { ERROR("write_riemann plugin: riemann_event_new() failed."); - return (NULL); + return NULL; } format_name(name_buffer, sizeof(name_buffer), @@ -310,6 +315,11 @@ wrr_value_to_event(struct riemann_host const *host, /* {{{ */ vl->type, "ds_name", ds->ds[index].name, NULL, RIEMANN_EVENT_FIELD_SERVICE, service_buffer, RIEMANN_EVENT_FIELD_NONE); +#if RCC_VERSION_NUMBER >= 0x010A00 + riemann_event_set(event, RIEMANN_EVENT_FIELD_TIME_MICROS, + (int64_t)CDTIME_T_TO_US(vl->time)); +#endif + if (host->check_thresholds) { const char *state = NULL; @@ -388,7 +398,7 @@ wrr_value_to_event(struct riemann_host const *host, /* {{{ */ DEBUG("write_riemann plugin: Successfully created message for metric: " "host = \"%s\", service = \"%s\"", event->host, event->service); - return (event); + return event; } /* }}} riemann_event_t *wrr_value_to_event */ static riemann_message_t * @@ -403,7 +413,7 @@ wrr_value_list_to_message(struct riemann_host const *host, /* {{{ */ msg = riemann_message_new(); if (msg == NULL) { ERROR("write_riemann plugin: riemann_message_new failed."); - return (NULL); + return NULL; } if (host->store_rates) { @@ -411,7 +421,7 @@ wrr_value_list_to_message(struct riemann_host const *host, /* {{{ */ if (rates == NULL) { ERROR("write_riemann plugin: uc_get_rate failed."); riemann_message_free(msg); - return (NULL); + return NULL; } } @@ -422,13 +432,13 @@ wrr_value_list_to_message(struct riemann_host const *host, /* {{{ */ if (event == NULL) { riemann_message_free(msg); sfree(rates); - return (NULL); + return NULL; } riemann_message_append_events(msg, event, NULL); } sfree(rates); - return (msg); + return msg; } /* }}} riemann_message_t *wrr_value_list_to_message */ /* @@ -459,7 +469,7 @@ static int wrr_batch_flush(cdtime_t timeout, int status; if (user_data == NULL) - return (-EINVAL); + return -EINVAL; host = user_data->data; pthread_mutex_lock(&host->lock); @@ -539,7 +549,7 @@ static int wrr_notification(const notification_t *n, user_data_t *ud) /* {{{ */ */ msg = wrr_notification_to_message(host, n); if (msg == NULL) - return (-1); + return -1; status = wrr_send(host, msg); if (status != 0) @@ -552,7 +562,7 @@ static int wrr_notification(const notification_t *n, user_data_t *ud) /* {{{ */ "write_riemann plugin: riemann_client_send succeeded"); riemann_message_free(msg); - return (status); + return status; } /* }}} int wrr_notification */ static int wrr_write(const data_set_t *ds, /* {{{ */ @@ -575,7 +585,7 @@ static int wrr_write(const data_set_t *ds, /* {{{ */ } else { msg = wrr_value_list_to_message(host, ds, vl, statuses); if (msg == NULL) - return (-1); + return -1; status = wrr_send(host, msg); @@ -827,7 +837,7 @@ static int wrr_config_node(oconfig_item_t *ci) /* {{{ */ * holding a reference. */ pthread_mutex_unlock(&host->lock); wrr_free(host); - return (-1); + return -1; } host->reference_count--; @@ -853,21 +863,21 @@ static int wrr_config(oconfig_item_t *ci) /* {{{ */ if (child->values_num != 2) { WARNING("riemann attributes need both a key and a value."); - return (-1); + return -1; } if (child->values[0].type != OCONFIG_TYPE_STRING || child->values[1].type != OCONFIG_TYPE_STRING) { WARNING("riemann attribute needs string arguments."); - return (-1); + return -1; } if ((key = strdup(child->values[0].value.string)) == NULL) { WARNING("cannot allocate memory for attribute key."); - return (-1); + return -1; } if ((val = strdup(child->values[1].value.string)) == NULL) { WARNING("cannot allocate memory for attribute value."); sfree(key); - return (-1); + return -1; } strarray_add(&riemann_attrs, &riemann_attrs_num, key); strarray_add(&riemann_attrs, &riemann_attrs_num, val); @@ -889,11 +899,9 @@ static int wrr_config(oconfig_item_t *ci) /* {{{ */ child->key); } } - return (0); + return 0; } /* }}} int wrr_config */ void module_register(void) { plugin_register_complex_config("write_riemann", wrr_config); } - -/* vim: set sw=8 sts=8 ts=8 noet : */ diff --git a/src/write_riemann_threshold.c b/src/write_riemann_threshold.c index 452c2910..35f3814a 100644 --- a/src/write_riemann_threshold.c +++ b/src/write_riemann_threshold.c @@ -34,8 +34,6 @@ #include "utils_threshold.h" #include "write_riemann_threshold.h" -#include - /* * Threshold management * ==================== @@ -65,7 +63,7 @@ static int ut_check_one_data_source( if (ds != NULL) { ds_name = ds->ds[ds_index].name; if ((th->data_source[0] != 0) && (strcmp(ds_name, th->data_source) != 0)) - return (STATE_OKAY); + return STATE_OKAY; } if ((th->flags & UT_FLAG_INVERT) != 0) { @@ -83,7 +81,7 @@ static int ut_check_one_data_source( ((th->failure_min + th->hysteresis) < values[ds_index])) || (!isnan(th->failure_max) && ((th->failure_max - th->hysteresis) > values[ds_index]))) - return (STATE_OKAY); + return STATE_OKAY; else is_failure++; case STATE_WARNING: @@ -91,7 +89,7 @@ static int ut_check_one_data_source( ((th->warning_min + th->hysteresis) < values[ds_index])) || (!isnan(th->warning_max) && ((th->warning_max - th->hysteresis) > values[ds_index]))) - return (STATE_OKAY); + return STATE_OKAY; else is_warning++; } @@ -106,12 +104,12 @@ static int ut_check_one_data_source( } if (is_failure != 0) - return (STATE_ERROR); + return STATE_ERROR; if (is_warning != 0) - return (STATE_WARNING); + return STATE_WARNING; - return (STATE_OKAY); + return STATE_OKAY; } /* }}} int ut_check_one_data_source */ /* @@ -172,7 +170,7 @@ static int ut_check_one_threshold(const data_set_t *ds, const value_list_t *vl, } } /* for (ds->ds_num) */ - return (ret); + return ret; } /* }}} int ut_check_one_threshold */ /* @@ -202,20 +200,20 @@ int write_riemann_threshold_check(const data_set_t *ds, const value_list_t *vl, th = threshold_search(vl); pthread_mutex_unlock(&threshold_lock); if (th == NULL) - return (0); + return 0; DEBUG("ut_check_threshold: Found matching threshold(s)"); values = uc_get_rate(ds, vl); if (values == NULL) - return (0); + return 0; while (th != NULL) { status = ut_check_one_threshold(ds, vl, th, values, statuses); if (status < 0) { ERROR("ut_check_threshold: ut_check_one_threshold failed."); sfree(values); - return (-1); + return -1; } th = th->next; @@ -223,7 +221,5 @@ int write_riemann_threshold_check(const data_set_t *ds, const value_list_t *vl, sfree(values); - return (0); + return 0; } /* }}} int ut_check_threshold */ - -/* vim: set sw=2 ts=8 sts=2 tw=78 et fdm=marker : */ diff --git a/src/write_sensu.c b/src/write_sensu.c index 72ed6bc0..56acb638 100644 --- a/src/write_sensu.c +++ b/src/write_sensu.c @@ -132,7 +132,7 @@ static int add_str_to_list(struct str_list *strs, ERROR("write_sensu plugin: Unable to alloc memory"); return -1; } - strs->strs = realloc(strs->strs, sizeof(char *) * (strs->nb_strs + 1)); + strs->strs = realloc(strs->strs, strs->nb_strs + 1); if (strs->strs == NULL) { strs->strs = old_strs_ptr; free(newstr); @@ -231,7 +231,7 @@ static char *build_json_str_list(const char *tag, char *ret_str = NULL; char *temp_str; if (list->nb_strs == 0) { - ret_str = malloc(sizeof(char)); + ret_str = malloc(1); if (ret_str == NULL) { ERROR("write_sensu plugin: Unable to alloc memory"); return NULL; @@ -278,7 +278,7 @@ static int sensu_format_name2(char *ret, int ret_len, const char *hostname, do { \ size_t l = strlen(str); \ if (l >= buffer_size) \ - return (ENOBUFS); \ + return ENOBUFS; \ memcpy(buffer, (str), l); \ buffer += l; \ buffer_size -= l; \ @@ -304,7 +304,7 @@ static int sensu_format_name2(char *ret, int ret_len, const char *hostname, buffer[0] = 0; #undef APPEND - return (0); + return 0; } /* int sensu_format_name2 */ static void in_place_replace_sensu_name_reserved(char *orig_name) /* {{{ */ @@ -1248,5 +1248,3 @@ static int sensu_config(oconfig_item_t *ci) /* {{{ */ void module_register(void) { plugin_register_complex_config("write_sensu", sensu_config); } - -/* vim: set sw=8 sts=8 ts=8 noet : */ diff --git a/src/write_tsdb.c b/src/write_tsdb.c index 0c87c473..1a1cd648 100644 --- a/src/write_tsdb.c +++ b/src/write_tsdb.c @@ -45,8 +45,8 @@ #include "common.h" #include "plugin.h" - #include "utils_cache.h" +#include "utils_random.h" #include @@ -71,6 +71,8 @@ * Private variables */ struct wt_callback { + struct addrinfo *ai; + cdtime_t ai_last_update; int sock_fd; char *node; @@ -86,8 +88,15 @@ struct wt_callback { cdtime_t send_buf_init_time; pthread_mutex_t send_lock; + + _Bool connect_failed_log_enabled; + int connect_dns_failed_attempts_remaining; + cdtime_t next_random_ttl; }; +static cdtime_t resolve_interval = 0; +static cdtime_t resolve_jitter = 0; + /* * Functions */ @@ -144,9 +153,16 @@ static int wt_flush_nolock(cdtime_t timeout, struct wt_callback *cb) { return status; } +static cdtime_t new_random_ttl() { + if (resolve_jitter == 0) + return 0; + + return (cdtime_t)cdrand_range(0, (long)resolve_jitter); +} + static int wt_callback_init(struct wt_callback *cb) { - struct addrinfo *ai_list; int status; + cdtime_t now; const char *node = cb->node ? cb->node : WT_DEFAULT_NODE; const char *service = cb->service ? cb->service : WT_DEFAULT_SERVICE; @@ -154,28 +170,68 @@ static int wt_callback_init(struct wt_callback *cb) { if (cb->sock_fd > 0) return 0; - struct addrinfo ai_hints = {.ai_family = AF_UNSPEC, - .ai_flags = AI_ADDRCONFIG, - .ai_socktype = SOCK_STREAM}; + now = cdtime(); + if (cb->ai) { + /* When we are here, we still have the IP in cache. + * If we have remaining attempts without calling the DNS, we update the + * last_update date so we keep the info until next time. + * If there is no more attempts, we need to flush the cache. + */ + + if ((cb->ai_last_update + resolve_interval + cb->next_random_ttl) < now) { + cb->next_random_ttl = new_random_ttl(); + if (cb->connect_dns_failed_attempts_remaining > 0) { + /* Warning : this is run under send_lock mutex. + * This is why we do not use another mutex here. + * */ + cb->ai_last_update = now; + cb->connect_dns_failed_attempts_remaining--; + } else { + freeaddrinfo(cb->ai); + cb->ai = NULL; + } + } + } - status = getaddrinfo(node, service, &ai_hints, &ai_list); - if (status != 0) { - ERROR("write_tsdb plugin: getaddrinfo (%s, %s) failed: %s", node, service, - gai_strerror(status)); - return -1; + if (cb->ai == NULL) { + if ((cb->ai_last_update + resolve_interval + cb->next_random_ttl) >= now) { + DEBUG("write_tsdb plugin: too many getaddrinfo(%s, %s) failures", node, + service); + return -1; + } + cb->ai_last_update = now; + cb->next_random_ttl = new_random_ttl(); + + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM, + }; + + status = getaddrinfo(node, service, &ai_hints, &cb->ai); + if (status != 0) { + if (cb->ai) { + freeaddrinfo(cb->ai); + cb->ai = NULL; + } + if (cb->connect_failed_log_enabled) { + ERROR("write_tsdb plugin: getaddrinfo(%s, %s) failed: %s", node, + service, gai_strerror(status)); + cb->connect_failed_log_enabled = 0; + } + return -1; + } } - assert(ai_list != NULL); - for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; - ai_ptr = ai_ptr->ai_next) { - cb->sock_fd = - socket(ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); + assert(cb->ai != NULL); + for (struct addrinfo *ai = cb->ai; ai != NULL; ai = ai->ai_next) { + cb->sock_fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (cb->sock_fd < 0) continue; set_sock_opts(cb->sock_fd); - status = connect(cb->sock_fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen); + status = connect(cb->sock_fd, ai->ai_addr, ai->ai_addrlen); if (status != 0) { close(cb->sock_fd); cb->sock_fd = -1; @@ -185,8 +241,6 @@ static int wt_callback_init(struct wt_callback *cb) { break; } - freeaddrinfo(ai_list); - if (cb->sock_fd < 0) { char errbuf[1024]; ERROR("write_tsdb plugin: Connecting to %s:%s failed. " @@ -195,6 +249,12 @@ static int wt_callback_init(struct wt_callback *cb) { return -1; } + if (0 == cb->connect_failed_log_enabled) { + WARNING("write_tsdb plugin: Connecting to %s:%s succeeded.", node, service); + cb->connect_failed_log_enabled = 1; + } + cb->connect_dns_failed_attempts_remaining = 1; + wt_reset_buffer(cb); return 0; @@ -522,10 +582,8 @@ static int wt_config_tsd(oconfig_item_t *ci) { return -1; } cb->sock_fd = -1; - cb->node = NULL; - cb->service = NULL; - cb->host_tags = NULL; - cb->store_rates = 0; + cb->connect_failed_log_enabled = 1; + cb->next_random_ttl = new_random_ttl(); pthread_mutex_init(&cb->send_lock, NULL); @@ -564,11 +622,18 @@ static int wt_config_tsd(oconfig_item_t *ci) { } static int wt_config(oconfig_item_t *ci) { + if ((resolve_interval == 0) && (resolve_jitter == 0)) + resolve_interval = resolve_jitter = plugin_get_interval(); + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp("Node", child->key) == 0) wt_config_tsd(child); + else if (strcasecmp("ResolveInterval", child->key) == 0) + cf_util_get_cdtime(child, &resolve_interval); + else if (strcasecmp("ResolveJitter", child->key) == 0) + cf_util_get_cdtime(child, &resolve_jitter); else { ERROR("write_tsdb plugin: Invalid configuration " "option: %s.", @@ -582,5 +647,3 @@ static int wt_config(oconfig_item_t *ci) { void module_register(void) { plugin_register_complex_config("write_tsdb", wt_config); } - -/* vim: set sw=4 ts=4 sts=4 tw=78 et : */ diff --git a/src/xencpu.c b/src/xencpu.c index 01904b28..bf178647 100644 --- a/src/xencpu.c +++ b/src/xencpu.c @@ -51,7 +51,7 @@ static int xencpu_init(void) { xc_handle = xc_interface_open(XC_INTERFACE_INIT_ARGS); if (!xc_handle) { ERROR("xencpu: xc_interface_open() failed"); - return (-1); + return -1; } xc_physinfo_t *physinfo; @@ -60,14 +60,14 @@ static int xencpu_init(void) { if (physinfo == NULL) { ERROR("xencpu plugin: calloc() for physinfo failed."); xc_interface_close(xc_handle); - return (ENOMEM); + return ENOMEM; } if (xc_physinfo(xc_handle, physinfo) < 0) { ERROR("xencpu plugin: xc_physinfo() failed"); xc_interface_close(xc_handle); free(physinfo); - return (-1); + return -1; } num_cpus = physinfo->nr_cpus; @@ -79,7 +79,7 @@ static int xencpu_init(void) { if (cpu_info == NULL) { ERROR("xencpu plugin: calloc() for num_cpus failed."); xc_interface_close(xc_handle); - return (ENOMEM); + return ENOMEM; } cpu_states = calloc(num_cpus, sizeof(value_to_rate_state_t)); @@ -87,10 +87,10 @@ static int xencpu_init(void) { ERROR("xencpu plugin: calloc() for cpu_states failed."); xc_interface_close(xc_handle); free(cpu_info); - return (ENOMEM); + return ENOMEM; } - return (0); + return 0; } /* static int xencpu_init */ static int xencpu_shutdown(void) { @@ -126,7 +126,7 @@ static int xencpu_read(void) { if (rc < 0) { ERROR("xencpu: xc_getcpuinfo() Failed: %d %s\n", rc, xc_strerror(xc_handle, errno)); - return (-1); + return -1; } int status; @@ -140,7 +140,7 @@ static int xencpu_read(void) { } } - return (0); + return 0; } /* static int xencpu_read */ void module_register(void) { diff --git a/src/xmms.c b/src/xmms.c index 87e3564f..3e3a3c3c 100644 --- a/src/xmms.c +++ b/src/xmms.c @@ -50,23 +50,19 @@ static int cxmms_read(void) { gint nch; if (!xmms_remote_is_running(xmms_session)) - return (0); + return 0; xmms_remote_get_info(xmms_session, &rate, &freq, &nch); if ((freq == 0) || (nch == 0)) - return (-1); + return -1; cxmms_submit("bitrate", rate); cxmms_submit("frequency", freq); - return (0); + return 0; } /* int read */ void module_register(void) { plugin_register_read("xmms", cxmms_read); } /* void module_register */ - -/* - * vim: shiftwidth=2:softtabstop=2:textwidth=78 - */ diff --git a/src/zfs_arc.c b/src/zfs_arc.c index af5130aa..cf858f8f 100644 --- a/src/zfs_arc.c +++ b/src/zfs_arc.c @@ -75,12 +75,11 @@ static long long get_zfs_value(kstat_t *ksp, const char *key) { e = llist_search(ksp, key); if (e == NULL) { - ERROR("zfs_arc plugin: `llist_search` failed for key: '%s'.", key); - return (-1); + return -1; } v = e->value; - return ((long long)v->derive); + return (long long)v->derive; } static void free_zfs_values(kstat_t *ksp) { @@ -100,7 +99,7 @@ extern kstat_ctl_t *kc; static long long get_zfs_value(kstat_t *ksp, char *name) { - return (get_kstat_value(ksp, name)); + return get_kstat_value(ksp, name); } #elif defined(KERNEL_FREEBSD) #include @@ -123,9 +122,9 @@ static long long get_zfs_value(kstat_t *dummy __attribute__((unused)), rv = sysctlbyname(buffer, (void *)&value, &valuelen, /* new value = */ NULL, /* new length = */ (size_t)0); if (rv == 0) - return (value); + return value; - return (-1); + return -1; } #endif @@ -152,26 +151,26 @@ static int za_read_derive(kstat_t *ksp, const char *kstat_value, const char *type, const char *type_instance) { long long tmp = get_zfs_value(ksp, (char *)kstat_value); if (tmp == -1LL) { - WARNING("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value); - return (-1); + DEBUG("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value); + return -1; } za_submit(type, type_instance, &(value_t){.derive = (derive_t)tmp}, /* values_num = */ 1); - return (0); + return 0; } static int za_read_gauge(kstat_t *ksp, const char *kstat_value, const char *type, const char *type_instance) { long long tmp = get_zfs_value(ksp, (char *)kstat_value); if (tmp == -1LL) { - WARNING("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value); - return (-1); + DEBUG("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value); + return -1; } za_submit(type, type_instance, &(value_t){.gauge = (gauge_t)tmp}, /* values_num = */ 1); - return (0); + return 0; } static void za_submit_ratio(const char *type_instance, gauge_t hits, @@ -202,14 +201,29 @@ static int za_read(void) { char errbuf[1024]; ERROR("zfs_arc plugin: Opening \"%s\" failed: %s", ZOL_ARCSTATS_FILE, sstrerror(errno, errbuf, sizeof(errbuf))); - return (-1); + return -1; } ksp = llist_create(); if (ksp == NULL) { ERROR("zfs_arc plugin: `llist_create' failed."); fclose(fh); - return (-1); + return -1; + } + + // Ignore the first two lines because they contain information about + // the rest of the file. + // See kstat_seq_show_headers module/spl/spl-kstat.c of the spl kernel + // module. + if (fgets(buffer, sizeof(buffer), fh) == NULL) { + ERROR("zfs_arc plugin: \"%s\" does not contain a single line.", ZOL_ARCSTATS_FILE); + fclose(fh); + return -1; + } + if (fgets(buffer, sizeof(buffer), fh) == NULL) { + ERROR("zfs_arc plugin: \"%s\" does not contain at least two lines.", ZOL_ARCSTATS_FILE); + fclose(fh); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -234,7 +248,7 @@ static int za_read(void) { get_kstat(&ksp, "zfs", 0, "arcstats"); if (ksp == NULL) { ERROR("zfs_arc plugin: Cannot find zfs:0:arcstats kstat."); - return (-1); + return -1; } #endif @@ -317,7 +331,7 @@ static int za_read(void) { free_zfs_values(ksp); #endif - return (0); + return 0; } /* int za_read */ static int za_init(void) /* {{{ */ @@ -327,11 +341,11 @@ static int za_init(void) /* {{{ */ * went fine. */ if (kc == NULL) { ERROR("zfs_arc plugin: kstat chain control structure not available."); - return (-1); + return -1; } #endif - return (0); + return 0; } /* }}} int za_init */ void module_register(void) { diff --git a/src/zone.c b/src/zone.c index 5b7bd00f..3cd05347 100644 --- a/src/zone.c +++ b/src/zone.c @@ -51,10 +51,10 @@ typedef struct zone_stats { static int zone_compare(const void *a, const void *b) { if (*(const zoneid_t *)a == *(const zoneid_t *)b) - return (0); + return 0; if (*(const zoneid_t *)a < *(const zoneid_t *)b) - return (-1); - return (1); + return -1; + return 1; } static int zone_read_procfile(char const *pidstr, char const *name, void *buf, @@ -64,7 +64,7 @@ static int zone_read_procfile(char const *pidstr, char const *name, void *buf, char procfile[MAX_PROCFS_PATH]; (void)snprintf(procfile, sizeof(procfile), "/proc/%s/%s", pidstr, name); if ((fd = open(procfile, O_RDONLY)) == -1) { - return (1); + return 1; } if (sread(fd, buf, bufsize) != 0) { @@ -72,11 +72,11 @@ static int zone_read_procfile(char const *pidstr, char const *name, void *buf, ERROR("zone plugin: Reading \"%s\" failed: %s", procfile, sstrerror(errno, errbuf, sizeof(errbuf))); close(fd); - return (1); + return 1; } close(fd); - return (0); + return 0; } static int zone_submit_value(char *zone, gauge_t value) { @@ -91,7 +91,7 @@ static int zone_submit_value(char *zone, gauge_t value) { sstrncpy(vl.type, "percent", sizeof(vl.type)); sstrncpy(vl.type_instance, zone, sizeof(vl.type_instance)); - return (plugin_dispatch_values(&vl)); + return plugin_dispatch_values(&vl); } static zone_stats_t *zone_find_stats(c_avl_tree_t *tree, zoneid_t zoneid) { @@ -101,20 +101,20 @@ static zone_stats_t *zone_find_stats(c_avl_tree_t *tree, zoneid_t zoneid) { if (c_avl_get(tree, (void **)&zoneid, (void **)&ret)) { if (!(ret = malloc(sizeof(*ret)))) { WARNING("zone plugin: no memory"); - return (NULL); + return NULL; } if (!(key = malloc(sizeof(*key)))) { WARNING("zone plugin: no memory"); free(ret); - return (NULL); + return NULL; } *key = zoneid; if (c_avl_insert(tree, key, ret)) { WARNING("zone plugin: error inserting into tree"); - return (NULL); + return NULL; } } - return (ret); + return ret; } static void zone_submit_values(c_avl_tree_t *tree) { @@ -143,7 +143,7 @@ static c_avl_tree_t *zone_scandir(DIR *procdir) { if (!(tree = c_avl_create(zone_compare))) { WARNING("zone plugin: Failed to create tree"); - return (NULL); + return NULL; } rewinddir(procdir); @@ -165,7 +165,7 @@ static c_avl_tree_t *zone_scandir(DIR *procdir) { stats->pctmem += psinfo.pr_pctmem; } } - return (tree); + return tree; } static int zone_read(void) { @@ -174,16 +174,16 @@ static int zone_read(void) { if ((procdir = opendir("/proc")) == NULL) { ERROR("zone plugin: cannot open /proc directory\n"); - return (-1); + return -1; } tree = zone_scandir(procdir); closedir(procdir); if (tree == NULL) { - return (-1); + return -1; } zone_submit_values(tree); /* this also frees tree */ - return (0); + return 0; } void module_register(void) { diff --git a/src/zookeeper.c b/src/zookeeper.c index a42b04c8..0b2507d8 100644 --- a/src/zookeeper.c +++ b/src/zookeeper.c @@ -103,7 +103,7 @@ static int zookeeper_connect(void) { INFO("getaddrinfo failed: %s", (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) : gai_strerror(status)); - return (-1); + return -1; } for (struct addrinfo *ai = ai_list; ai != NULL; ai = ai->ai_next) { @@ -129,7 +129,7 @@ static int zookeeper_connect(void) { } freeaddrinfo(ai_list); - return (sk); + return sk; } /* int zookeeper_connect */ static int zookeeper_query(char *buffer, size_t buffer_size) { @@ -139,7 +139,7 @@ static int zookeeper_query(char *buffer, size_t buffer_size) { sk = zookeeper_connect(); if (sk < 0) { ERROR("zookeeper: Could not connect to daemon"); - return (-1); + return -1; } status = (int)swrite(sk, "mntr\r\n", strlen("mntr\r\n")); @@ -148,7 +148,7 @@ static int zookeeper_query(char *buffer, size_t buffer_size) { ERROR("zookeeper: write(2) failed: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(sk); - return (-1); + return -1; } memset(buffer, 0, buffer_size); @@ -164,7 +164,7 @@ static int zookeeper_query(char *buffer, size_t buffer_size) { ERROR("zookeeper: Error reading from socket: %s", sstrerror(errno, errbuf, sizeof(errbuf))); close(sk); - return (-1); + return -1; } buffer_fill += (size_t)status; @@ -177,7 +177,7 @@ static int zookeeper_query(char *buffer, size_t buffer_size) { } close(sk); - return (status); + return status; } /* int zookeeper_query */ static int zookeeper_read(void) { @@ -188,7 +188,7 @@ static int zookeeper_read(void) { char *fields[2]; if (zookeeper_query(buf, sizeof(buf)) < 0) { - return (-1); + return -1; } ptr = buf; @@ -238,7 +238,7 @@ static int zookeeper_read(void) { } } - return (0); + return 0; } /* zookeeper_read */ void module_register(void) {