From: Florian Forster Date: Sat, 17 Nov 2012 07:25:01 +0000 (+0100) Subject: Merge branch 'ff/netlib' X-Git-Tag: collectd-5.2.0~18 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=3faf514fd9b869cadda0f895e14e5036313c7781;hp=-c Merge branch 'ff/netlib' Conflicts: src/collectdctl.c src/libcollectdclient/client.c src/libcollectdclient/collectd/client.h --- 3faf514fd9b869cadda0f895e14e5036313c7781 diff --combined configure.in index 4a159767,af584425..7c4ec3a2 --- a/configure.in +++ b/configure.in @@@ -1,8 -1,7 +1,8 @@@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(collectd, m4_esyscmd(./version-gen.sh)) +AC_INIT(collectd, [m4_esyscmd(./version-gen.sh)]) AC_CONFIG_SRCDIR(src/collectd.c) AC_CONFIG_HEADERS(src/config.h) +AC_CONFIG_AUX_DIR([libltdl/config]) m4_ifdef([LT_PACKAGE_VERSION], # libtool >= 2.2 @@@ -91,7 -90,6 +91,7 @@@ f 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.]) fi if test "x$ac_system" = "xAIX" then @@@ -300,21 -298,6 +300,21 @@@ f # For hddtemp module AC_CHECK_HEADERS(linux/major.h libgen.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 +]) +else + have_linux_raid_md_u_h="no" +fi + # For the battery plugin AC_CHECK_HEADERS(IOKit/ps/IOPowerSources.h, [], [], [ @@@ -404,64 -387,19 +404,64 @@@ AC_CHECK_HEADERS(linux/netdevice.h, [] #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, + [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 - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $KERNEL_CFLAGS" - + 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"]) - CFLAGS="$SAVE_CFLAGS" + 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" + + AC_MSG_NOTICE([Did not find ip_vs.h. Trying again using headers from $KERNEL_DIR.]) + + 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_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 + + CFLAGS="$SAVE_CFLAGS" + fi fi +AM_CONDITIONAL(IP_VS_H_NEEDS_KERNEL_CFLAGS, test "x$ip_vs_h_needs_kernel_cflags" = "xyes") # For quota module AC_CHECK_HEADERS(sys/ucred.h, [], [], @@@ -533,8 -471,6 +533,8 @@@ AC_CHECK_HEADERS(netinet/if_ether.h, [] #endif ]) +AC_CHECK_HEADERS(netinet/ip_compat.h) + # For the multimeter plugin have_termios_h="no" AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"]) @@@ -636,27 -572,6 +636,27 @@@ 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") +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"]) +fi +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.]) +else + AC_MSG_WARN(cannot find clock_gettime) +fi + nanosleep_needs_rt="no" nanosleep_needs_posix4="no" AC_CHECK_FUNCS(nanosleep, @@@ -666,9 -581,8 +666,9 @@@ AC_CHECK_LIB(posix4, nanosleep, [nanosleep_needs_posix4="yes"], AC_MSG_ERROR(cannot find nanosleep)))) -AM_CONDITIONAL(BUILD_WITH_LIBRT, test "x$nanosleep_needs_rt" = "xyes") -AM_CONDITIONAL(BUILD_WITH_LIBPOSIX4, test "x$nanosleep_needs_posix4" = "xyes") + +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"]) @@@ -678,77 -592,9 +678,77 @@@ AC_CHECK_FUNCS(thread_info, [have_threa 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"]) + +# Check for strptime {{{ +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( +[[ +AC_INCLUDES_DEFAULT +#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 +AC_INCLUDES_DEFAULT +#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" +fi + +# }}} Check for strptime + 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], @@@ -800,6 -646,9 +800,6 @@@ if test "x$have_swapctl" = "xyes"; the fi fi -# For load module -AC_CHECK_FUNCS(getloadavg, [have_getloadavg="yes"], [have_getloadavg="no"]) - # Check for NAN AC_ARG_WITH(nan-emulation, [AS_HELP_STRING([--with-nan-emulation], [use emulated NAN. For crosscompiling only.])], [ @@@ -820,7 -669,7 +820,7 @@@ if test "x$nan_type" = "xnone"; the [[ #include #include -static float foo = NAN; +static double foo = NAN; ]], [[ if (isnan (foo)) @@@ -846,7 -695,7 +846,7 @@@ if test "x$nan_type" = "xnone"; the #include #define __USE_ISOC99 1 #include -static float foo = NAN; +static double foo = NAN; ]], [[ if (isnan (foo)) @@@ -880,7 -729,7 +880,7 @@@ if test "x$nan_type" = "xnone"; the #ifndef isnan # define isnan(f) ((f) != (f)) #endif -static float foo = NAN; +static double foo = NAN; ]], [[ if (isnan (foo)) @@@ -1228,7 -1077,6 +1228,7 @@@ AC_CHECK_MEMBERS([struct kinfo_proc.ki_ have_struct_kinfo_proc_freebsd="no" ], [ +AC_INCLUDES_DEFAULT #include #include #include @@@ -1245,7 -1093,6 +1245,7 @@@ AC_CHECK_MEMBERS([struct kinfo_proc.kp_ have_struct_kinfo_proc_openbsd="no" ], [ +AC_INCLUDES_DEFAULT #include #include #include @@@ -1306,7 -1153,6 +1306,7 @@@ AC_CHECK_MEMBERS([kstat_io_t.nwritten, # # Checks for libraries begin here # + with_libresolv="yes" AC_CHECK_LIB(resolv, res_search, [ @@@ -1428,7 -1274,6 +1428,7 @@@ AM_CONDITIONAL(BUILD_WITH_LIBKVM_GETSWA 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" @@@ -1475,7 -1320,7 +1475,7 @@@ the fi AC_CHECK_HEADERS(credis.h, [with_libcredis="yes"], - [with_libcredis="no ('credis.h' not found)"]) + [with_libcredis="no (credis.h not found)"]) fi if test "x$with_libcredis" = "xyes" then @@@ -1832,123 -1677,113 +1832,123 @@@ AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, te # }}} # --with-libiptc {{{ -with_own_libiptc="no" AC_ARG_WITH(libiptc, [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to libiptc.])], [ if test "x$withval" = "xshipped" then - with_own_libiptc="yes" - with_libiptc="yes" - else if test "x$withval" != "xno" && test "x$withval" != "xyes" + with_libiptc="own" + else if test "x$withval" = "xyes" then - LIBIPTC_CPPFLAGS="$LIBIPTC_CPPFLAGS -I$withval/include" - LIBIPTC_LDFLAGS="$LIBIPTC_LDFLAGS -L$withval/lib" - with_libiptc="yes" + with_libiptc="pkgconfig" + else if test "x$withval" = "xno" + then + with_libiptc="no" else - with_libiptc="$withval" - fi; fi + with_libiptc="yes" + with_libiptc_cflags="-I$withval/include" + with_libiptc_libs="-L$withval/lib" + fi; fi; fi ], [ if test "x$ac_system" = "xLinux" then - with_libiptc="yes" + with_libiptc="pkgconfig" else with_libiptc="no (Linux only)" fi ]) -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" -CPPFLAGS="$CPPFLAGS $LIBIPTC_CPPFLAGS" -LDFLAGS="$LDFLAGS $LIBIPTC_LDFLAGS" -# check whether the header file for libiptc is available. -if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xno" + +if test "x$with_libiptc" = "xpkgconfig" && test "x$PKG_CONFIG" = "x" then - AC_CHECK_HEADERS(libiptc/libiptc.h, - [ - AC_DEFINE(HAVE_LIBIPTC_LIBIPTC_H, 1, [Define to 1 if you have the header file.]) - ], - [ - with_libiptc="yes" - with_own_libiptc="yes" - ]) + with_libiptc="no (Don't have pkg-config)" fi -if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xno" + +if test "x$with_libiptc" = "xpkgconfig" then - AC_CHECK_HEADERS(libiptc/libip6tc.h, - [ - AC_DEFINE(HAVE_LIBIPTC_LIBIP6TC_H, 1, [Define to 1 if you have the header file.]) - ], - [ - with_libiptc="yes" - with_own_libiptc="yes" - ]) + $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)"]) 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" = "xyes" && test "x$with_own_libiptc" = "xno" +if test "x$with_libiptc" = "xpkgconfig" then - AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], [], - [ -#if OWN_LIBIPTC -# include "$srcdir/src/owniptc/libiptc.h" -# include "$srcdir/src/owniptc/libip6tc.h" -#else -# include -# include -#endif - ]) + AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], []) fi # Check for the iptc_init symbol in the library. -if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xno" +# This could be in iptc or ip4tc +if test "x$with_libiptc" = "xpkgconfig" then - AC_CHECK_LIB(iptc, iptc_init, - [ - AC_DEFINE(HAVE_LIBIPTC, 1, [Define to 1 if you have the iptc library (-liptc).]) - ], - [ - with_libiptc="yes" - with_own_libiptc="yes" - ]) + 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" +fi + +CPPFLAGS="$SAVE_CPPFLAGS" + +if test "x$with_libiptc" = "xown" +then + with_libiptc_cflags="" + with_libiptc_libs="" fi -# The system wide version failed for some reason. Check if we have the required -# headers to build the shipped version. -if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xyes" +if test "x$with_libiptc" = "xown" then AC_CHECK_HEADERS(linux/netfilter_ipv4/ip_tables.h linux/netfilter_ipv6/ip6_tables.h linux/netfilter/x_tables.h, [], [ with_libiptc="no (Linux iptables headers not found)" - with_own_libiptc="no" ], [ #include "$srcdir/src/owniptc/ipt_kernel_headers.h" ]) fi +AM_CONDITIONAL(BUILD_WITH_OWN_LIBIPTC, test "x$with_libiptc" = "xown") +if test "x$with_libiptc" = "xown" +then + AC_DEFINE(OWN_LIBIPTC, 1, [Define to 1 if we use the shipped iptc library.]) + with_libiptc="yes" +fi + AM_CONDITIONAL(BUILD_WITH_LIBIPTC, test "x$with_libiptc" = "xyes") -AM_CONDITIONAL(BUILD_WITH_OWN_LIBIPTC, test "x$with_own_libiptc" = "xyes") if test "x$with_libiptc" = "xyes" then - BUILD_WITH_LIBIPTC_CPPFLAGS="$LIBIPTC_CPPFLAGS" - BUILD_WITH_LIBIPTC_LDFLAGS="$LIBIPTC_LDFLAGS" + 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) fi -if test "x$with_own_libiptc" = "xyes" -then - AC_DEFINE(OWN_LIBIPTC, 1, [Define to 1 if we use the shipped iptc library.]) -fi -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" # }}} # --with-java {{{ @@@ -2203,21 -2038,21 +2203,21 @@@ the fi if test "x$with_libmodbus" = "xuse_pkgconfig" then - AC_MSG_NOTICE([Checking for modbus using $PKG_CONFIG]) - $PKG_CONFIG --exists 'modbus' 2>/dev/null + 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 library)" + 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 'modbus'`" + 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 'modbus'`" + with_libmodbus_libs="`$PKG_CONFIG --libs 'libmodbus'`" if test $? -ne 0 then with_libmodbus="no ($PKG_CONFIG failed)" @@@ -2247,9 -2082,9 +2247,9 @@@ the CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags" LDFLAGS="$LDFLAGS $with_libmodbus_libs" - AC_CHECK_LIB(modbus, modbus_init_tcp, + AC_CHECK_LIB(modbus, modbus_connect, [with_libmodbus="yes"], - [with_libmodbus="no (symbol modbus_init_tcp not found)"]) + [with_libmodbus="no (symbol modbus_connect not found)"]) CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" @@@ -2263,69 -2098,6 +2263,69 @@@ the fi # }}} +# --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"]) + +SAVE_CPPFLAGS="$CPPFLAGS" +SAVE_LDFLAGS="$LDFLAGS" + +CPPFLAGS="$CPPFLAGS $LIBMONGOC_CPPFLAGS" +LDFLAGS="$LDFLAGS $LIBMONGOC_LDFLAGS" + +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="$SAVE_CPPFLAGS" +LDFLAGS="$SAVE_LDFLAGS" + +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) +fi +AM_CONDITIONAL(BUILD_WITH_LIBMONGOC, test "x$with_libmongoc" = "xyes") +# }}} + # --with-libmysql {{{ with_mysql_config="mysql_config" with_mysql_cflags="" @@@ -2383,7 -2155,7 +2383,7 @@@ the fi if test "x$with_libmysql" = "xyes" then - with_mysql_libs=`$with_mysql_config --libs 2>/dev/null` + with_mysql_libs=`$with_mysql_config --libs_r 2>/dev/null` mysql_config_status=$? if test $mysql_config_status -ne 0 @@@ -2466,20 -2238,21 +2466,20 @@@ the #include #include ]) - AC_COMPILE_IFELSE( -[#include -#include -#include -#include -#include -#include - -int main (void) -{ - 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_STATS2; + return (retval); + ] + )], + [AC_DEFINE([HAVE_TCA_STATS2], [1], [True if the enum-member TCA_STATS2 exists])]) AC_COMPILE_IFELSE( [#include @@@ -2508,76 -2281,6 +2508,76 @@@ the fi if test "x$with_libnetlink" = "xyes" then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $with_libnetlink_cflags" + + AC_CACHE_CHECK( + [if function 'rtnl_dump_filter' expects five arguments], + [c_cv_rtnl_dump_filter_five_args], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [ +AC_INCLUDES_DEFAULT +#include +#include +#if HAVE_LIBNETLINK_H +# include +#elif HAVE_IPROUTE_LIBNETLINK_H +# include +#elif HAVE_LINUX_LIBNETLINK_H +# include +#endif + ], + [ +if (rtnl_dump_filter(NULL, NULL, NULL, NULL, NULL)) + return 1; +return 0; + ] + )], + [c_cv_rtnl_dump_filter_five_args="yes"], + [c_cv_rtnl_dump_filter_five_args="no"] + ) + ) + + AC_CACHE_CHECK( + [if function 'rtnl_dump_filter' expects three arguments], + [c_cv_rtnl_dump_filter_three_args], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [ +AC_INCLUDES_DEFAULT +#include +#include +#if HAVE_LIBNETLINK_H +# include +#elif HAVE_IPROUTE_LIBNETLINK_H +# include +#elif HAVE_LINUX_LIBNETLINK_H +# include +#endif + ], + [ +if (rtnl_dump_filter(NULL, NULL, NULL)) + return 1; +return 0; + ] + )], + [c_cv_rtnl_dump_filter_three_args="yes"], + [c_cv_rtnl_dump_filter_three_args="no"] + ) + ) + + CFLAGS="$SAVE_CFLAGS" + + if test "x$c_cv_rtnl_dump_filter_five_args" = "xyes" + then + AC_DEFINE(RTNL_DUMP_FILTER_FIVE_ARGS, 1, + [Define to 1 if function 'rtnl_dump_filter' expects five arguments.]) + fi + if test "x$c_cv_rtnl_dump_filter_three_args" = "xyes" + then + AC_DEFINE(RTNL_DUMP_FILTER_THREE_ARGS, 1, + [Define to 1 if function 'rtnl_dump_filter' expects three arguments.]) + fi + BUILD_WITH_LIBNETLINK_CFLAGS="$with_libnetlink_cflags" BUILD_WITH_LIBNETLINK_LIBS="$with_libnetlink_libs" AC_SUBST(BUILD_WITH_LIBNETLINK_CFLAGS) @@@ -2804,7 -2507,7 +2804,7 @@@ the fi AC_CHECK_HEADERS(oping.h, [with_liboping="yes"], - [with_liboping="no ('oping.h' not found)"]) + [with_liboping="no (oping.h not found)"]) fi if test "x$with_liboping" = "xyes" then @@@ -2970,14 -2673,19 +2970,14 @@@ the fi if test "x$with_libpcap" = "xyes" then - AC_CHECK_HEADERS(pcap.h, - [ - AC_DEFINE(HAVE_PCAP_H, 1, [Define to 1 if you have the header file.]) - ], [with_libpcap="no (pcap.h not found)"]) + AC_CHECK_HEADERS(pcap.h,, + [with_libpcap="no (pcap.h not found)"]) fi if test "x$with_libpcap" = "xyes" then - collect_libpcap=1 -else - collect_libpcap=0 + AC_CHECK_HEADERS(pcap-bpf.h,, + [with_libpcap="no (pcap-bpf.h not found)"]) fi -AC_DEFINE_UNQUOTED(COLLECT_LIBPCAP, [$collect_libpcap], - [Wether or not to use the pcap library]) AM_CONDITIONAL(BUILD_WITH_LIBPCAP, test "x$with_libpcap" = "xyes") # }}} @@@ -2985,7 -2693,7 +2985,7 @@@ perl_interpreter="perl" AC_ARG_WITH(libperl, [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to libperl.])], [ - if test -x "$withval" + if test -f "$withval" && test -x "$withval" then perl_interpreter="$withval" with_libperl="yes" @@@ -3428,39 -3136,26 +3428,39 @@@ AC_ARG_WITH(librabbitmq, [AS_HELP_STRIN [ 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 - 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 - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_librabbitmq_cppflags" - LDFLAGS="$LDFLAGS $with_librabbitmq_ldflags" - + # 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 + ]) +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)"]) - - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" fi if test "x$with_librabbitmq" = "xyes" then @@@ -3472,8 -3167,6 +3472,8 @@@ AC_SUBST(BUILD_WITH_LIBRABBITMQ_LIBS) AC_DEFINE(HAVE_LIBRABBITMQ, 1, [Define if librabbitmq is present and usable.]) fi +CPPFLAGS="$SAVE_CPPFLAGS" +LDFLAGS="$SAVE_LDFLAGS" AM_CONDITIONAL(BUILD_WITH_LIBRABBITMQ, test "x$with_librabbitmq" = "xyes") # }}} @@@ -3508,7 -3201,7 +3508,7 @@@ the fi AC_CHECK_HEADERS(routeros_api.h, [with_librouteros="yes"], - [with_librouteros="no ('routeros_api.h' not found)"]) + [with_librouteros="no (routeros_api.h not found)"]) fi if test "x$with_librouteros" = "xyes" then @@@ -3707,7 -3400,7 +3707,7 @@@ the if test "$?" != "0" then with_libstatgrab_pkg_config="no" - with_libstatgrab="no ($PKG_CONFIG doesn't know libstatgrab)" + with_libstatgrab="no (pkg-config doesn't know libstatgrab)" temp_result="not found" fi AC_MSG_RESULT([$temp_result]) @@@ -3866,7 -3559,7 +3866,7 @@@ AM_CONDITIONAL(BUILD_WITH_LIBTOKYOTYRAN with_libupsclient_config="" with_libupsclient_cflags="" with_libupsclient_libs="" -AC_ARG_WITH(libupsclient, [AS_HELP_STRING([--with-libupsclient@<:@=PREFIX@:>@], [Path to the Net-SNMPD library.])], +AC_ARG_WITH(libupsclient, [AS_HELP_STRING([--with-libupsclient@<:@=PREFIX@:>@], [Path to the upsclient library.])], [ if test "x$withval" = "xno" then @@@ -3927,7 -3620,7 +3927,7 @@@ the $PKG_CONFIG --exists 'libupsclient' 2>/dev/null if test $? -ne 0 then - with_libupsclient="no (pkg-config doesn't know library)" + with_libupsclient="no (pkg-config doesn't know libupsclient)" fi fi if test "x$with_libupsclient" = "xuse_pkgconfig" @@@ -4088,7 -3781,6 +4088,7 @@@ the 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_version.h) CPPFLAGS="$SAVE_CPPFLAGS" fi @@@ -4133,7 -3825,7 +4133,7 @@@ AC_ARG_WITH(libvarnish, [AS_HELP_STRING then AC_MSG_NOTICE([Not checking for libvarnish: Manually configured]) with_libvarnish_cflags="-I$withval/include" - with_libvarnish_libs="-L$withval/lib -lvarnish -lvarnishcompat -lvarnishapi" + with_libvarnish_libs="-L$withval/lib -lvarnishapi" with_libvarnish="yes" fi; fi; fi ], @@@ -4153,7 -3845,7 +4153,7 @@@ the $PKG_CONFIG --exists 'varnishapi' 2>/dev/null if test $? -ne 0 then - with_libvarnish="no (pkg-config doesn't know library)" + with_libvarnish="no (pkg-config doesn't know varnishapi)" fi fi if test "x$with_libvarnish" = "xuse_pkgconfig" @@@ -4192,9 -3884,10 +4192,9 @@@ the CPPFLAGS="$CPPFLAGS $with_libvarnish_cflags" #LDFLAGS="$LDFLAGS $with_libvarnish_libs" - AC_CHECK_LIB(varnishapi, VSL_OpenStats, - [with_libvarnish="yes"], - [with_libvarnish="no (symbol VSL_OpenStats not found)"], - [$with_libvarnish_libs]) + AC_CHECK_HEADERS(varnish/vsc.h, + [AC_DEFINE([HAVE_VARNISH_V3], [1], [Varnish 3 API support])], + [AC_DEFINE([HAVE_VARNISH_V2], [1], [Varnish 2 API support])]) CPPFLAGS="$SAVE_CPPFLAGS" #LDFLAGS="$SAVE_LDFLAGS" @@@ -4222,7 -3915,7 +4222,7 @@@ the then with_libxml2="yes" else - with_libxml2="no (pkg-config doesn't know library)" + with_libxml2="no (pkg-config doesn't know libxml-2.0)" fi pkg-config --exists libvirt 2>/dev/null @@@ -4230,7 -3923,7 +4230,7 @@@ then with_libvirt="yes" else - with_libvirt="no (pkg-config doesn't know library)" + with_libvirt="no (pkg-config doesn't know libvirt)" fi fi if test "x$with_libxml2" = "xyes" @@@ -4347,7 -4040,7 +4347,7 @@@ the $PKG_CONFIG --exists OpenIPMIpthread 2>/dev/null if test "$?" != "0" then - with_libopenipmipthread="no ($PKG_CONFIG doesn't know OpenIPMIpthread)" + with_libopenipmipthread="no (pkg-config doesn't know OpenIPMIpthread)" fi AC_MSG_RESULT([$with_libopenipmipthread]) fi @@@ -4408,11 -4101,7 +4408,11 @@@ f PKG_CHECK_MODULES([LIBNOTIFY], [libnotify], [with_libnotify="yes"], - [with_libnotify="no ($LIBNOTIFY_PKG_ERRORS)"]) + [if test "x$LIBNOTIFY_PKG_ERRORS" = "x"; then + with_libnotify="no" + else + with_libnotify="no ($LIBNOTIFY_PKG_ERRORS)" + fi]) # Check for enabled/disabled features # @@@ -4552,8 -4241,6 +4552,8 @@@ plugin_curl_xml="no plugin_df="no" plugin_disk="no" plugin_entropy="no" +plugin_ethstat="no" +plugin_fscache="no" plugin_interface="no" plugin_ipmi="no" plugin_ipvs="no" @@@ -4563,7 -4250,7 +4563,7 @@@ plugin_load="no plugin_memory="no" plugin_multimeter="no" plugin_nfs="no" -plugin_fscache="no" +plugin_numa="no" plugin_perl="no" plugin_processes="no" plugin_protocols="no" @@@ -4590,13 -4277,12 +4590,13 @@@ the plugin_cpufreq="yes" plugin_disk="yes" plugin_entropy="yes" + plugin_fscache="yes" plugin_interface="yes" plugin_irq="yes" plugin_load="yes" plugin_memory="yes" plugin_nfs="yes" - plugin_fscache="yes" + plugin_numa="yes" plugin_processes="yes" plugin_protocols="yes" plugin_serial="yes" @@@ -4608,7 -4294,7 +4608,7 @@@ plugin_vserver="yes" plugin_wireless="yes" - if test "x$have_net_ip_vs_h" = "xyes" || test "x$have_ip_vs_h" = "xyes" + 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 @@@ -4627,22 -4313,14 +4627,22 @@@ the fi # AIX + +if test "x$ac_system" = "xAIX" +then + plugin_tcpconns="yes" +fi + if test "x$with_perfstat" = "xyes" then plugin_cpu="yes" + plugin_contextswitch="yes" plugin_disk="yes" plugin_memory="yes" plugin_swap="yes" plugin_interface="yes" plugin_load="yes" + plugin_uptime="yes" fi if test "x$with_procinfo" = "xyes" @@@ -4653,7 -4331,6 +4653,7 @@@ f # Solaris if test "x$with_kstat" = "xyes" then + plugin_nfs="yes" plugin_uptime="yes" plugin_zfs_arc="yes" fi @@@ -4667,6 -4344,11 +4667,6 @@@ the plugin_tape="yes" fi -if test "x$have_sys_swap_h$with_kstat$ac_system" = "xyesyesSolaris" -then - plugin_swap="yes" -fi - # libstatgrab if test "x$with_libstatgrab" = "xyes" then @@@ -4682,10 -4364,7 +4682,10 @@@ f if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes" then plugin_ascent="yes" - plugin_bind="yes" + if test "x$have_strptime" = "xyes" + then + plugin_bind="yes" + fi fi if test "x$with_libopenipmipthread" = "xyes" @@@ -4711,11 -4390,8 +4711,11 @@@ if test "x$have_sysctl" = "xyes then plugin_cpu="yes" plugin_memory="yes" - plugin_swap="yes" plugin_uptime="yes" + if test "x$ac_system" = "xDarwin" + then + plugin_swap="yes" + fi fi if test "x$have_sysctlbyname" = "xyes" then @@@ -4760,11 -4436,6 +4760,11 @@@ the fi fi +if test "x$have_linux_sockios_h$have_linux_ethtool_h" = "xyesyes" +then + plugin_ethstat="yes" +fi + if test "x$have_getifaddrs" = "xyes" then plugin_interface="yes" @@@ -4812,7 -4483,7 +4812,7 @@@ the plugin_swap="yes" fi -if test "x$have_swapctl" = "xyes" +if test "x$have_swapctl" = "xyes" && test "x$c_cv_have_swapctl_two_args" = "xyes" then plugin_swap="yes" fi @@@ -4852,7 -4523,6 +4852,7 @@@ AC_ARG_ENABLE([all-plugins] m4_divert_once([HELP_ENABLE], []) +AC_PLUGIN([aggregation], [yes], [Aggregation plugin]) AC_PLUGIN([amqp], [$with_librabbitmq], [AMQP output plugin]) AC_PLUGIN([apache], [$with_libcurl], [Apache httpd statistics]) AC_PLUGIN([apcups], [yes], [Statistics of UPSes by APC]) @@@ -4874,7 -4544,6 +4874,7 @@@ AC_PLUGIN([disk], [$plugin_disk] AC_PLUGIN([dns], [$with_libpcap], [DNS traffic analysis]) AC_PLUGIN([email], [yes], [EMail statistics]) AC_PLUGIN([entropy], [$plugin_entropy], [Entropy statistics]) +AC_PLUGIN([ethstat], [$plugin_ethstat], [Stats from NIC driver]) AC_PLUGIN([exec], [yes], [Execution of external programs]) AC_PLUGIN([filecount], [yes], [Count files in directories]) AC_PLUGIN([fscache], [$plugin_fscache], [fscache statistics]) @@@ -4897,7 -4566,6 +4897,7 @@@ AC_PLUGIN([match_regex], [yes] AC_PLUGIN([match_timediff], [yes], [The timediff match]) AC_PLUGIN([match_value], [yes], [The value match]) AC_PLUGIN([mbmon], [yes], [Query mbmond]) +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]) AC_PLUGIN([memory], [$plugin_memory], [Memory usage]) @@@ -4912,7 -4580,6 +4912,7 @@@ AC_PLUGIN([nginx], [$with_libcurl AC_PLUGIN([notify_desktop], [$with_libnotify], [Desktop notifications]) AC_PLUGIN([notify_email], [$with_libesmtp], [Email notifier]) AC_PLUGIN([ntpd], [yes], [NTPd statistics]) +AC_PLUGIN([numa], [$plugin_numa], [NUMA virtual memory statistics]) AC_PLUGIN([nut], [$with_libupsclient], [Network UPS tools statistics]) AC_PLUGIN([olsrd], [yes], [olsrd statistics]) AC_PLUGIN([onewire], [$with_libowcapi], [OneWire sensor statistics]) @@@ -4948,7 -4615,6 +4948,7 @@@ AC_PLUGIN([tcpconns], [$plugin_tcpco AC_PLUGIN([teamspeak2], [yes], [TeamSpeak2 server statistics]) AC_PLUGIN([ted], [$plugin_ted], [Read The Energy Detective values]) AC_PLUGIN([thermal], [$plugin_thermal], [Linux ACPI thermal zone statistics]) +AC_PLUGIN([threshold], [yes], [Threshold checking plugin]) AC_PLUGIN([tokyotyrant], [$with_libtokyotyrant], [TokyoTyrant database statistics]) AC_PLUGIN([unixsock], [yes], [Unixsock communication plugin]) AC_PLUGIN([uptime], [$plugin_uptime], [Uptime statistics]) @@@ -4958,10 -4624,8 +4958,10 @@@ AC_PLUGIN([varnish], [$with_libvarn AC_PLUGIN([vmem], [$plugin_vmem], [Virtual memory statistics]) AC_PLUGIN([vserver], [$plugin_vserver], [Linux VServer statistics]) AC_PLUGIN([wireless], [$plugin_wireless], [Wireless statistics]) +AC_PLUGIN([write_graphite], [yes], [Graphite / Carbon output plugin]) AC_PLUGIN([write_http], [$with_libcurl], [HTTP output plugin]) AC_PLUGIN([write_redis], [$with_libcredis], [Redis output plugin]) +AC_PLUGIN([write_mongodb], [$with_libmongoc], [MongoDB output plugin]) AC_PLUGIN([xmms], [$with_libxmms], [XMMS statistics]) AC_PLUGIN([zfs_arc], [$plugin_zfs_arc], [ZFS ARC statistics]) @@@ -5047,16 -4711,11 +5047,16 @@@ AC_SUBST(LOAD_PLUGIN_CSV dnl ip_vs.h if test "x$ac_system" = "xLinux" \ - && test "x$have_net_ip_vs_h$have_ip_vs_h" = "xnono" + && 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 + dnl Perl bindings AC_ARG_WITH(perl-bindings, [AS_HELP_STRING([--with-perl-bindings@<:@=OPTIONS@:>@], [Options passed to "perl Makefile.PL".])], [ @@@ -5102,9 -4761,9 +5102,9 @@@ AC_SUBST(LCC_VERSION_PATCH AC_SUBST(LCC_VERSION_EXTRA) AC_SUBST(LCC_VERSION_STRING) - AC_CONFIG_FILES(src/libcollectdclient/lcc_features.h) + AC_CONFIG_FILES(src/libcollectdclient/collectd/lcc_features.h) -AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/owniptc/Makefile src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile) +AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile) if test "x$with_librrd" = "xyes" \ && test "x$librrd_threadsafe" != "xyes" @@@ -5112,6 -4771,11 +5112,6 @@@ the with_librrd="yes (warning: librrd is not thread-safe)" fi -if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xyes" -then - with_libiptc="yes (shipped version)" -fi - if test "x$with_libperl" = "xyes" then with_libperl="yes (version `$perl_interpreter -MConfig -e 'print $Config{version};'`)" @@@ -5185,7 -4849,6 +5185,7 @@@ Configuration perl . . . . . . . . $with_perl_bindings Modules: + aggregation . . . . . $enable_aggregation amqp . . . . . . . $enable_amqp apache . . . . . . . $enable_apache apcups . . . . . . . $enable_apcups @@@ -5207,7 -4870,6 +5207,7 @@@ dns . . . . . . . . . $enable_dns email . . . . . . . . $enable_email entropy . . . . . . . $enable_entropy + ethstat . . . . . . . $enable_ethstat exec . . . . . . . . $enable_exec filecount . . . . . . $enable_filecount fscache . . . . . . . $enable_fscache @@@ -5230,7 -4892,6 +5230,7 @@@ match_timediff . . . $enable_match_timediff match_value . . . . . $enable_match_value mbmon . . . . . . . . $enable_mbmon + md . . . . . . . . . $enable_md memcachec . . . . . . $enable_memcachec memcached . . . . . . $enable_memcached memory . . . . . . . $enable_memory @@@ -5245,7 -4906,6 +5245,7 @@@ notify_desktop . . . $enable_notify_desktop notify_email . . . . $enable_notify_email ntpd . . . . . . . . $enable_ntpd + numa . . . . . . . . $enable_numa nut . . . . . . . . . $enable_nut olsrd . . . . . . . . $enable_olsrd onewire . . . . . . . $enable_onewire @@@ -5280,7 -4940,6 +5280,7 @@@ teamspeak2 . . . . . $enable_teamspeak2 ted . . . . . . . . . $enable_ted thermal . . . . . . . $enable_thermal + threshold . . . . . . $enable_threshold tokyotyrant . . . . . $enable_tokyotyrant unixsock . . . . . . $enable_unixsock uptime . . . . . . . $enable_uptime @@@ -5290,10 -4949,8 +5290,10 @@@ vmem . . . . . . . . $enable_vmem vserver . . . . . . . $enable_vserver wireless . . . . . . $enable_wireless + write_graphite . . . $enable_write_graphite write_http . . . . . $enable_write_http write_redis . . . . . $enable_write_redis + write_mongodb . . . . $enable_write_mongodb xmms . . . . . . . . $enable_xmms zfs_arc . . . . . . . $enable_zfs_arc diff --combined src/Makefile.am index 58ab17e5,e64e167c..3532e7b2 --- a/src/Makefile.am +++ b/src/Makefile.am @@@ -1,4 -1,7 +1,4 @@@ SUBDIRS = libcollectdclient -if BUILD_WITH_OWN_LIBIPTC -SUBDIRS += owniptc -endif if BUILD_WITH_OWN_LIBOCONFIG SUBDIRS += liboconfig endif @@@ -18,7 -21,7 +18,7 @@@ AM_CPPFLAGS += -DPLUGINDIR='"${pkglibdi AM_CPPFLAGS += -DPKGDATADIR='"${pkgdatadir}"' sbin_PROGRAMS = collectd collectdmon - bin_PROGRAMS = collectd-nagios collectdctl + bin_PROGRAMS = collectd-nagios collectdctl collectd-tg collectd_SOURCES = collectd.c collectd.h \ common.c common.h \ @@@ -37,13 -40,13 +37,13 @@@ utils_match.c utils_match.h \ utils_subst.c utils_subst.h \ utils_tail.c utils_tail.h \ - utils_threshold.c utils_threshold.h \ + utils_time.c utils_time.h \ types_list.c types_list.h collectd_CPPFLAGS = $(AM_CPPFLAGS) $(LTDLINCL) collectd_CFLAGS = $(AM_CFLAGS) collectd_LDFLAGS = -export-dynamic -collectd_LDADD = +collectd_LDADD = -lm collectd_DEPENDENCIES = # Link to these libraries.. @@@ -70,6 -73,7 +70,6 @@@ collectd_LDADD += -ldevinf endif if BUILD_AIX collectd_LDFLAGS += -Wl,-bexpall,-brtllib -collectd_LDADD += -lm endif # The daemon needs to call sg_init, so we need to link it against libstatgrab, @@@ -81,7 -85,7 +81,7 @@@ endi if BUILD_WITH_OWN_LIBOCONFIG collectd_LDADD += $(LIBLTDL) liboconfig/liboconfig.la -collectd_DEPENDENCIES += $(LIBLTDL) liboconfig/liboconfig.la +collectd_DEPENDENCIES += liboconfig/liboconfig.la else collectd_LDADD += -loconfig endif @@@ -113,27 -117,28 +113,39 @@@ endi collectdctl_LDADD += libcollectdclient/libcollectdclient.la collectdctl_DEPENDENCIES = libcollectdclient/libcollectdclient.la + collectd_tg_SOURCES = collectd-tg.c \ + utils_heap.c utils_heap.h + collectd_tg_LDADD = + if BUILD_WITH_LIBSOCKET + collectd_tg_LDADD += -lsocket + endif + if BUILD_AIX + collectd_tg_LDADD += -lm + endif + collectd_tg_LDADD += libcollectdclient/libcollectdclient.la + collectd_tg_DEPENDENCIES = libcollectdclient/libcollectdclient.la + pkglib_LTLIBRARIES = BUILT_SOURCES = CLEANFILES = +if BUILD_PLUGIN_AGGREGATION +pkglib_LTLIBRARIES += aggregation.la +aggregation_la_SOURCES = aggregation.c \ + utils_vl_lookup.c utils_vl_lookup.h +aggregation_la_LDFLAGS = -module -avoid-version +aggregation_la_LIBADD = +collectd_LDADD += "-dlopen" aggregation.la +collectd_DEPENDENCIES += aggregation.la +endif + if BUILD_PLUGIN_AMQP pkglib_LTLIBRARIES += amqp.la amqp_la_SOURCES = amqp.c \ utils_cmd_putval.c utils_cmd_putval.h \ + utils_format_graphite.c utils_format_graphite.h \ utils_format_json.c utils_format_json.h amqp_la_LDFLAGS = -module -avoid-version $(BUILD_WITH_LIBRABBITMQ_LDFLAGS) amqp_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBRABBITMQ_CPPFLAGS) @@@ -223,10 -228,6 +235,10 @@@ if BUILD_PLUGIN_CONTEXTSWITC pkglib_LTLIBRARIES += contextswitch.la contextswitch_la_SOURCES = contextswitch.c contextswitch_la_LDFLAGS = -module -avoid-version +contextswitch_la_LIBADD = +if BUILD_WITH_PERFSTAT +contextswitch_la_LIBADD += -lperfstat +endif collectd_LDADD += "-dlopen" contextswitch.la collectd_DEPENDENCIES += contextswitch.la endif @@@ -392,14 -393,6 +404,14 @@@ collectd_LDADD += "-dlopen" exec.l collectd_DEPENDENCIES += exec.la endif +if BUILD_PLUGIN_ETHSTAT +pkglib_LTLIBRARIES += ethstat.la +ethstat_la_SOURCES = ethstat.c +ethstat_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" ethstat.la +collectd_DEPENDENCIES += ethstat.la +endif + if BUILD_PLUGIN_FILECOUNT pkglib_LTLIBRARIES += filecount.la filecount_la_SOURCES = filecount.c @@@ -459,7 -452,12 +471,7 @@@ pkglib_LTLIBRARIES += iptables.l iptables_la_SOURCES = iptables.c iptables_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBIPTC_CPPFLAGS) iptables_la_LDFLAGS = -module -avoid-version $(BUILD_WITH_LIBIPTC_LDFLAGS) -if BUILD_WITH_OWN_LIBIPTC -iptables_la_LIBADD = owniptc/libiptc.la -iptables_la_DEPENDENCIES = owniptc/libiptc.la -else iptables_la_LIBADD = -liptc -endif collectd_LDADD += "-dlopen" iptables.la collectd_DEPENDENCIES += iptables.la endif @@@ -477,9 -475,7 +489,9 @@@ endi if BUILD_PLUGIN_IPVS pkglib_LTLIBRARIES += ipvs.la ipvs_la_SOURCES = ipvs.c +if IP_VS_H_NEEDS_KERNEL_CFLAGS ipvs_la_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) +endif ipvs_la_LDFLAGS = -module -avoid-version collectd_LDADD += "-dlopen" ipvs.la collectd_DEPENDENCIES += ipvs.la @@@ -609,14 -605,6 +621,14 @@@ collectd_LDADD += "-dlopen" mbmon.l collectd_DEPENDENCIES += mbmon.la endif +if BUILD_PLUGIN_MD +pkglib_LTLIBRARIES += md.la +md_la_SOURCES = md.c +md_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" md.la +collectd_DEPENDENCIES += md.la +endif + if BUILD_PLUGIN_MEMCACHEC pkglib_LTLIBRARIES += memcachec.la memcachec_la_SOURCES = memcachec.c @@@ -794,14 -782,6 +806,14 @@@ collectd_LDADD += "-dlopen" ntpd.l collectd_DEPENDENCIES += ntpd.la endif +if BUILD_PLUGIN_NUMA +pkglib_LTLIBRARIES += numa.la +numa_la_SOURCES = numa.c +numa_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" numa.la +collectd_DEPENDENCIES += numa.la +endif + if BUILD_PLUGIN_NUT pkglib_LTLIBRARIES += nut.la nut_la_SOURCES = nut.c @@@ -1162,14 -1142,6 +1174,14 @@@ collectd_LDADD += "-dlopen" thermal.l collectd_DEPENDENCIES += thermal.la endif +if BUILD_PLUGIN_THRESHOLD +pkglib_LTLIBRARIES += threshold.la +threshold_la_SOURCES = threshold.c +threshold_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" threshold.la +collectd_DEPENDENCIES += threshold.la +endif + if BUILD_PLUGIN_TOKYOTYRANT pkglib_LTLIBRARIES += tokyotyrant.la tokyotyrant_la_SOURCES = tokyotyrant.c @@@ -1188,6 -1160,7 +1200,6 @@@ pkglib_LTLIBRARIES += unixsock.l unixsock_la_SOURCES = unixsock.c \ utils_cmd_flush.h utils_cmd_flush.c \ utils_cmd_getval.h utils_cmd_getval.c \ - utils_cmd_getthreshold.h utils_cmd_getthreshold.c \ utils_cmd_listval.h utils_cmd_listval.c \ utils_cmd_putval.h utils_cmd_putval.c \ utils_cmd_putnotif.h utils_cmd_putnotif.c @@@ -1206,9 -1179,6 +1218,9 @@@ uptime_la_LIBADD if BUILD_WITH_LIBKSTAT uptime_la_LIBADD += -lkstat endif +if BUILD_WITH_PERFSTAT +uptime_la_LIBADD += -lperfstat +endif collectd_LDADD += "-dlopen" uptime.la collectd_DEPENDENCIES += uptime.la endif @@@ -1271,16 -1241,6 +1283,16 @@@ collectd_LDADD += "-dlopen" wireless.l collectd_DEPENDENCIES += wireless.la endif +if BUILD_PLUGIN_WRITE_GRAPHITE +pkglib_LTLIBRARIES += write_graphite.la +write_graphite_la_SOURCES = write_graphite.c \ + utils_format_graphite.c utils_format_graphite.h \ + utils_format_json.c utils_format_json.h +write_graphite_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" write_graphite.la +collectd_DEPENDENCIES += write_graphite.la +endif + if BUILD_PLUGIN_WRITE_HTTP pkglib_LTLIBRARIES += write_http.la write_http_la_SOURCES = write_http.c \ @@@ -1296,16 -1256,6 +1308,16 @@@ endi collectd_DEPENDENCIES += write_http.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 = -module -avoid-version $(BUILD_WITH_LIBMONGOC_LDFLAGS) +write_mongodb_la_LIBADD = -lmongoc +collectd_LDADD += "-dlopen" write_mongodb.la +collectd_DEPENDENCIES += write_mongodb.la +endif + if BUILD_PLUGIN_WRITE_REDIS pkglib_LTLIBRARIES += write_redis.la write_redis_la_SOURCES = write_redis.c @@@ -1336,8 -1286,6 +1348,8 @@@ collectd_LDADD += "-dlopen" zfs_arc.l collectd_DEPENDENCIES += zfs_arc.la endif +BUILT_SOURCES += $(dist_man_MANS) + dist_man_MANS = collectd.1 \ collectd.conf.5 \ collectd-email.5 \ @@@ -1349,7 -1297,6 +1361,7 @@@ collectd-perl.5 \ collectd-python.5 \ collectd-snmp.5 \ + collectd-threshold.5 \ collectd-unixsock.5 \ types.db.5 @@@ -1368,7 -1315,6 +1380,7 @@@ EXTRA_DIST += collectd.conf.pod collectd-python.pod \ collectd.pod \ collectd-snmp.pod \ + collectd-threshold.pod \ collectd-unixsock.pod \ postgresql_default.conf \ types.db.pod @@@ -1390,7 -1336,7 +1402,7 @@@ fi pinba.pb-c.c pinba.pb-c.h: pinba.proto - protoc-c --c_out $(builddir) pinba.proto + protoc-c --c_out . pinba.proto install-exec-hook: $(mkinstalldirs) $(DESTDIR)$(sysconfdir) @@@ -1404,21 -1350,3 +1416,21 @@@ $(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_FEATURE_DEBUG +bin_PROGRAMS += utils_vl_lookup_test +utils_vl_lookup_test_SOURCES = utils_vl_lookup_test.c \ + utils_vl_lookup.h utils_vl_lookup.c \ + utils_avltree.c utils_avltree.h \ + common.h + +utils_vl_lookup_test_CPPFLAGS = $(AM_CPPFLAGS) $(LTDLINCL) -DBUILD_TEST=1 +utils_vl_lookup_test_CFLAGS = $(AM_CFLAGS) +utils_vl_lookup_test_LDFLAGS = -export-dynamic +utils_vl_lookup_test_LDADD = +endif diff --combined src/collectd-nagios.c index 88a53023,2d59ea77..e31d95ca --- a/src/collectd-nagios.c +++ b/src/collectd-nagios.c @@@ -23,6 -23,18 +23,6 @@@ # include "config.h" #endif -#ifndef _ISOC99_SOURCE -# define _ISOC99_SOURCE -#endif - -#ifndef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 200112L -#endif - -#ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 600 -#endif - #if !defined(__GNUC__) || !__GNUC__ # define __attribute__(x) /**/ #endif @@@ -34,39 -46,9 +34,39 @@@ #include #include #include -#include + +#if NAN_STATIC_DEFAULT +# include +/* #endif NAN_STATIC_DEFAULT*/ +#elif NAN_STATIC_ISOC +# ifndef __USE_ISOC99 +# define DISABLE_ISOC99 1 +# define __USE_ISOC99 1 +# endif /* !defined(__USE_ISOC99) */ +# include +# if DISABLE_ISOC99 +# undef DISABLE_ISOC99 +# undef __USE_ISOC99 +# endif /* DISABLE_ISOC99 */ +/* #endif NAN_STATIC_ISOC */ +#elif NAN_ZERO_ZERO +# include +# ifdef NAN +# undef NAN +# endif +# define NAN (0.0 / 0.0) +# ifndef isnan +# define isnan(f) ((f) != (f)) +# endif /* !defined(isnan) */ +# ifndef isfinite +# define isfinite(f) (((f) - (f)) == 0.0) +# endif +# ifndef isinf +# define isinf(f) (!isfinite(f) && !isnan(f)) +# endif +#endif /* NAN_ZERO_ZERO */ - #include "libcollectdclient/client.h" + #include "libcollectdclient/collectd/client.h" #define RET_OKAY 0 #define RET_WARNING 1 @@@ -269,67 -251,6 +269,67 @@@ static void usage (const char *name exit (1); } /* void usage */ +static int do_listval (lcc_connection_t *connection) +{ + lcc_identifier_t *ret_ident = NULL; + size_t ret_ident_num = 0; + + char *hostname = NULL; + + int status; + size_t i; + + status = lcc_listval (connection, &ret_ident, &ret_ident_num); + if (status != 0) { + printf ("UNKNOWN: %s\n", lcc_strerror (connection)); + if (ret_ident != NULL) + free (ret_ident); + return (RET_UNKNOWN); + } + + status = lcc_sort_identifiers (connection, ret_ident, ret_ident_num); + if (status != 0) { + printf ("UNKNOWN: %s\n", lcc_strerror (connection)); + if (ret_ident != NULL) + free (ret_ident); + return (RET_UNKNOWN); + } + + for (i = 0; i < ret_ident_num; ++i) { + char id[1024]; + + if ((hostname_g != NULL) && (strcasecmp (hostname_g, ret_ident[i].host))) + continue; + + if ((hostname == NULL) || strcasecmp (hostname, ret_ident[i].host)) + { + if (hostname != NULL) + free (hostname); + hostname = strdup (ret_ident[i].host); + printf ("Host: %s\n", hostname); + } + + /* empty hostname; not to be printed again */ + ret_ident[i].host[0] = '\0'; + + status = lcc_identifier_to_string (connection, + id, sizeof (id), ret_ident + i); + if (status != 0) { + printf ("ERROR: listval: Failed to convert returned " + "identifier to a string: %s\n", + lcc_strerror (connection)); + continue; + } + + /* skip over the (empty) hostname and following '/' */ + printf ("\t%s\n", id + 1); + } + + if (ret_ident != NULL) + free (ret_ident); + return (RET_OKAY); +} /* int do_listval */ + static int do_check_con_none (size_t values_num, double *values, char **values_names) { @@@ -569,20 -490,34 +569,20 @@@ static int do_check_con_percentage (siz return (status_code); } /* int do_check_con_percentage */ -static int do_check (void) +static int do_check (lcc_connection_t *connection) { - lcc_connection_t *connection; gauge_t *values; char **values_names; size_t values_num; - char address[1024]; char ident_str[1024]; lcc_identifier_t ident; size_t i; int status; - snprintf (address, sizeof (address), "unix:%s", socket_file_g); - address[sizeof (address) - 1] = 0; - snprintf (ident_str, sizeof (ident_str), "%s/%s", hostname_g, value_string_g); ident_str[sizeof (ident_str) - 1] = 0; - connection = NULL; - status = lcc_connect (address, &connection); - if (status != 0) - { - printf ("ERROR: Connecting to daemon at %s failed.\n", - socket_file_g); - return (RET_CRITICAL); - } - memset (&ident, 0, sizeof (ident)); status = lcc_string_to_identifier (connection, &ident, ident_str); if (status != 0) @@@ -630,11 -565,6 +630,11 @@@ int main (int argc, char **argv) { + char address[1024]; + lcc_connection_t *connection; + + int status; + range_critical_g.min = NAN; range_critical_g.max = NAN; range_critical_g.invert = 0; @@@ -716,26 -646,11 +716,26 @@@ } if ((socket_file_g == NULL) || (value_string_g == NULL) - || (hostname_g == NULL)) + || ((hostname_g == NULL) && (strcasecmp (value_string_g, "LIST")))) { fprintf (stderr, "Missing required arguments.\n"); usage (argv[0]); } - return (do_check ()); + snprintf (address, sizeof (address), "unix:%s", socket_file_g); + address[sizeof (address) - 1] = 0; + + connection = NULL; + status = lcc_connect (address, &connection); + if (status != 0) + { + printf ("ERROR: Connecting to daemon at %s failed.\n", + socket_file_g); + return (RET_CRITICAL); + } + + if (0 == strcasecmp (value_string_g, "LIST")) + return (do_listval (connection)); + + return (do_check (connection)); } /* int main */ diff --combined src/collectdctl.c index 61b7fc55,f16a70dd..0b8d0c1e --- a/src/collectdctl.c +++ b/src/collectdctl.c @@@ -25,6 -25,18 +25,6 @@@ # include "config.h" #endif -#ifndef _ISOC99_SOURCE -# define _ISOC99_SOURCE -#endif - -#ifndef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 200112L -#endif - -#ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 600 -#endif - #include #include #include @@@ -33,39 -45,10 +33,39 @@@ #include #include -#include -#include "libcollectdclient/collectd/client.h" +#if NAN_STATIC_DEFAULT +# include +/* #endif NAN_STATIC_DEFAULT*/ +#elif NAN_STATIC_ISOC +# ifndef __USE_ISOC99 +# define DISABLE_ISOC99 1 +# define __USE_ISOC99 1 +# endif /* !defined(__USE_ISOC99) */ +# include +# if DISABLE_ISOC99 +# undef DISABLE_ISOC99 +# undef __USE_ISOC99 +# endif /* DISABLE_ISOC99 */ +/* #endif NAN_STATIC_ISOC */ +#elif NAN_ZERO_ZERO +# include +# ifdef NAN +# undef NAN +# endif +# define NAN (0.0 / 0.0) +# ifndef isnan +# define isnan(f) ((f) != (f)) +# endif /* !defined(isnan) */ +# ifndef isfinite +# define isfinite(f) (((f) - (f)) == 0.0) +# endif +# ifndef isinf +# define isinf(f) (!isfinite(f) && !isnan(f)) +# endif +#endif /* NAN_ZERO_ZERO */ - #include "libcollectdclient/client.h" ++#include "libcollectdclient/collectd/client.h" #define DEFAULT_SOCK LOCALSTATEDIR"/run/"PACKAGE_NAME"-unixsock" @@@ -485,7 -468,7 +485,7 @@@ static int putval (lcc_connection_t *c while (value != 0) { char *dot, *endptr; - tmp = strchr (argv[i], (int)':'); + tmp = strchr (value, (int)':'); if (tmp != NULL) { *tmp = '\0'; diff --combined src/libcollectdclient/client.c index 2adf6d48,abe3ed83..39875903 --- a/src/libcollectdclient/client.c +++ b/src/libcollectdclient/client.c @@@ -27,7 -27,7 +27,7 @@@ # define __attribute__(x) /**/ #endif - #include "lcc_features.h" + #include "collectd/lcc_features.h" #include #include @@@ -41,7 -41,7 +41,7 @@@ #include #include - #include "client.h" + #include "collectd/client.h" /* NI_MAXHOST has been obsoleted by RFC 3493 which is a reason for SunOS 5.11 * to no longer define it. We'll use the old, RFC 2553 value here. */ @@@ -164,14 -164,27 +164,14 @@@ static int lcc_set_errno (lcc_connectio return (0); } /* }}} int lcc_set_errno */ -/* lcc_strdup: Since `strdup' is an XSI extension, we provide our own version - * here. */ -__attribute__((malloc, nonnull (1))) -static char *lcc_strdup (const char *str) /* {{{ */ -{ - size_t strsize; - char *ret; - - strsize = strlen (str) + 1; - ret = (char *) malloc (strsize); - if (ret != NULL) - memcpy (ret, str, strsize); - return (ret); -} /* }}} char *lcc_strdup */ - -__attribute__((nonnull (1, 2))) static char *lcc_strescape (char *dest, const char *src, size_t dest_size) /* {{{ */ { size_t dest_pos; size_t src_pos; + if ((dest == NULL) || (src == NULL)) + return (NULL); + dest_pos = 0; src_pos = 0; @@@ -228,53 -241,6 +228,6 @@@ static void lcc_chomp (char *str) /* {{ } } /* }}} void lcc_chomp */ - static int lcc_identifier_cmp (const void *a, const void *b) - { - const lcc_identifier_t *ident_a, *ident_b; - - int status; - - ident_a = a; - ident_b = b; - - status = strcasecmp (ident_a->host, ident_b->host); - if (status != 0) - return (status); - - status = strcmp (ident_a->plugin, ident_b->plugin); - if (status != 0) - return (status); - - if ((*ident_a->plugin_instance != '\0') || (*ident_b->plugin_instance != '\0')) - { - if (*ident_a->plugin_instance == '\0') - return (-1); - else if (*ident_b->plugin_instance == '\0') - return (1); - - status = strcmp (ident_a->plugin_instance, ident_b->plugin_instance); - if (status != 0) - return (status); - } - - status = strcmp (ident_a->type, ident_b->type); - if (status != 0) - return (status); - - if ((*ident_a->type_instance != '\0') || (*ident_b->type_instance != '\0')) - { - if (*ident_a->type_instance == '\0') - return (-1); - else if (*ident_b->type_instance == '\0') - return (1); - - status = strcmp (ident_a->type_instance, ident_b->type_instance); - if (status != 0) - return (status); - } - return (0); - } /* }}} int lcc_identifier_cmp */ - static void lcc_response_free (lcc_response_t *res) /* {{{ */ { size_t i; @@@ -372,7 -338,7 +325,7 @@@ static int lcc_receive (lcc_connection_ lcc_chomp (buffer); LCC_DEBUG ("receive: <-- %s\n", buffer); - res.lines[i] = lcc_strdup (buffer); + res.lines[i] = strdup (buffer); if (res.lines[i] == NULL) { lcc_set_errno (c, ENOMEM); @@@ -767,7 -733,7 +720,7 @@@ int lcc_getval (lcc_connection_t *c, lc if (values_names != NULL) { - values_names[i] = lcc_strdup (key); + values_names[i] = strdup (key); if (values_names[i] == NULL) BAIL_OUT (ENOMEM); } @@@ -780,8 -746,6 +733,8 @@@ if (ret_values_names != NULL) *ret_values_names = values_names; + lcc_response_free (&res); + return (0); } /* }}} int lcc_getval */ @@@ -1049,7 -1013,7 +1002,7 @@@ int lcc_string_to_identifier (lcc_conne char *type; char *type_instance; - string_copy = lcc_strdup (string); + string_copy = strdup (string); if (string_copy == NULL) { lcc_set_errno (c, ENOMEM); @@@ -1105,17 -1069,33 +1058,47 @@@ return (0); } /* }}} int lcc_string_to_identifier */ + int lcc_identifier_compare (const lcc_identifier_t *i0, /* {{{ */ + const lcc_identifier_t *i1) + { + int status; + + if ((i0 == NULL) && (i1 == NULL)) + return (0); + else if (i0 == NULL) + return (-1); + else if (i1 == NULL) + return (1); + + #define CMP_FIELD(f) do { \ + status = strcmp (i0->f, i1->f); \ + if (status != 0) \ + return (status); \ + } while (0); + + CMP_FIELD (host); + CMP_FIELD (plugin); + CMP_FIELD (plugin_instance); + CMP_FIELD (type); + CMP_FIELD (type_instance); + + #undef CMP_FIELD + + 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); + } + - qsort (idents, idents_num, sizeof (*idents), lcc_identifier_cmp); ++ qsort (idents, idents_num, sizeof (*idents), ++ (void *) lcc_identifier_compare); + return (0); +} /* }}} int lcc_sort_identifiers */ + /* vim: set sw=2 sts=2 et fdm=marker : */ diff --combined src/libcollectdclient/collectd/client.h index 00000000,1494c8d6..b2354ff4 mode 000000,100644..100644 --- a/src/libcollectdclient/collectd/client.h +++ b/src/libcollectdclient/collectd/client.h @@@ -1,0 -1,128 +1,130 @@@ + /** + * libcollectdclient - src/libcollectdclient/client.h + * Copyright (C) 2008 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 + **/ + + #ifndef LIBCOLLECTD_COLLECTDCLIENT_H + #define LIBCOLLECTD_COLLECTDCLIENT_H 1 + + #include "lcc_features.h" + + /* + * Includes (for data types) + */ + #if HAVE_STDINT_H + # include + #endif + #include + #include + + /* + * Defines + */ + #define LCC_NAME_LEN 64 + #define LCC_DEFAULT_PORT "25826" + + /* + * Types + */ + #define LCC_TYPE_COUNTER 0 + #define LCC_TYPE_GAUGE 1 + #define LCC_TYPE_DERIVE 2 + #define LCC_TYPE_ABSOLUTE 3 + + LCC_BEGIN_DECLS + + typedef uint64_t counter_t; + typedef double gauge_t; + typedef uint64_t derive_t; + typedef uint64_t absolute_t; + + union value_u + { + counter_t counter; + gauge_t gauge; + derive_t derive; + absolute_t absolute; + }; + typedef union value_u value_t; + + struct lcc_identifier_s + { + char host[LCC_NAME_LEN]; + char plugin[LCC_NAME_LEN]; + char plugin_instance[LCC_NAME_LEN]; + char type[LCC_NAME_LEN]; + char type_instance[LCC_NAME_LEN]; + }; + typedef struct lcc_identifier_s lcc_identifier_t; + #define LCC_IDENTIFIER_INIT { "localhost", "", "", "", "" } + + struct lcc_value_list_s + { + value_t *values; + int *values_types; + size_t values_len; + time_t time; + int interval; + lcc_identifier_t identifier; + }; + typedef struct lcc_value_list_s lcc_value_list_t; + #define LCC_VALUE_LIST_INIT { NULL, NULL, 0, 0, 0, LCC_IDENTIFIER_INIT } + + struct lcc_connection_s; + typedef struct lcc_connection_s lcc_connection_t; + + /* + * Functions + */ + int lcc_connect (const char *address, lcc_connection_t **ret_con); + int lcc_disconnect (lcc_connection_t *c); + #define LCC_DESTROY(c) do { lcc_disconnect (c); (c) = NULL; } while (0) + + int lcc_getval (lcc_connection_t *c, lcc_identifier_t *ident, + size_t *ret_values_num, gauge_t **ret_values, char ***ret_values_names); + + int lcc_putval (lcc_connection_t *c, const lcc_value_list_t *vl); + + int lcc_flush (lcc_connection_t *c, const char *plugin, + lcc_identifier_t *ident, int timeout); + + int lcc_listval (lcc_connection_t *c, + lcc_identifier_t **ret_ident, size_t *ret_ident_num); + + /* TODO: putnotif */ + + const char *lcc_strerror (lcc_connection_t *c); + + int lcc_identifier_to_string (lcc_connection_t *c, + char *string, size_t string_size, const lcc_identifier_t *ident); + int lcc_string_to_identifier (lcc_connection_t *c, + lcc_identifier_t *ident, const char *string); + + /* Compares the identifiers "i0" and "i1" and returns less than zero or greater + * than zero if "i0" is smaller than or greater than "i1", respectively. If + * "i0" and "i1" are identical, zero is returned. */ + int lcc_identifier_compare (const lcc_identifier_t *i0, + const lcc_identifier_t *i1); ++int lcc_sort_identifiers (lcc_connection_t *c, ++ lcc_identifier_t *idents, size_t idents_num); + + LCC_END_DECLS + + /* vim: set sw=2 sts=2 et : */ + #endif /* LIBCOLLECTD_COLLECTDCLIENT_H */