From: Ruben Kerkhof Date: Mon, 22 Aug 2016 20:35:17 +0000 (+0200) Subject: Merge branch 'hugepages' X-Git-Tag: collectd-5.7.0~119 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=f876292e5ce4be40ab5b031b2bcfb347f00da1f8;hp=-c Merge branch 'hugepages' --- f876292e5ce4be40ab5b031b2bcfb347f00da1f8 diff --combined README index ee909d64,e97140ba..e8f0ca1e --- a/README +++ b/README @@@ -67,9 -67,6 +67,9 @@@ Feature - cpufreq CPU frequency (For laptops with speed step or a similar technology) + - cpusleep + CPU sleep: Time spent in suspend (For mobile devices which enter suspend automatically) + - curl Parse statistics from websites using regular expressions. @@@ -125,15 -122,17 +125,20 @@@ - gmond Receive multicast traffic from Ganglia instances. + - gps + Monitor gps related data through gpsd. + - grpc Receive values over the network using the gRPC framework. - hddtemp Hard disk temperatures using hddtempd. + - hugepages + Report the number of used and free hugepages. More info on + hugepages can be found here: + https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt. + - interface Interface traffic: Number of octets, packets and errors for each interface. @@@ -168,12 -167,6 +173,12 @@@ Detailed CPU statistics of the “Logical Partitions” virtualization technique built into IBM's POWER processors. + - lua + The Lua plugin implements a Lua interpreter into collectd. This + makes it possible to write plugins in Lua which are executed by + collectd without the need to start a heavy interpreter every interval. + See collectd-lua(5) for details. + - lvm Size of “Logical Volumes” (LV) and “Volume Groups” (VG) of Linux' “Logical Volume Manager” (LVM). @@@ -428,10 -421,6 +433,10 @@@ diskspace but is extremely portable and can be analysed with almost every program that can analyse anything. Even Microsoft's Excel.. + - lua + It's possible to implement write plugins in Lua using the Lua + plugin. See collectd-lua(5) for details. + - network Send the data to a remote host to save the data somehow. This is useful for large setups where the data should be saved by a dedicated machine. @@@ -713,10 -702,6 +718,10 @@@ Prerequisite Used by the `network' plugin for encryption and authentication. + * libgps (optional) + Used by the `gps' plugin. + + * libhal (optional) If present, the `uuid' plugin will check for UUID from HAL. @@@ -739,10 -724,6 +744,10 @@@ Used by the `openldap' plugin. + * liblua (optional) + Used by the `lua' plugin. Currently, Lua 5.1 and later are supported. + + * liblvm2 (optional) Used by the `lvm' plugin. @@@ -817,7 -798,7 +822,7 @@@ * libpython (optional) - Used by the `python' plugin. Currently, Python 2.3 and later and Python 3 + Used by the `python' plugin. Currently, Python 2.6 and later and Python 3 are supported. @@@ -1031,5 -1012,6 +1036,5 @@@ Autho Sebastian tokkee Harl , and many contributors (see `AUTHORS'). - Please send bug reports and patches to the mailing list, see `Contact' - above. - + Please use GitHub reporting bugs and submitting pull requests. + See CONTRIBUTING.md for details. diff --combined configure.ac index 9a6da11d,c52950bf..929205bc --- a/configure.ac +++ b/configure.ac @@@ -1,5 -1,4 +1,5 @@@ dnl Process this file with autoconf to produce a configure script. +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) @@@ -43,9 -42,7 +43,9 @@@ AC_SYS_LARGEFIL # # Checks for programs. # -AC_PROG_CC +AC_PROG_CC_C99([], + [AC_MSG_ERROR([No compiler found that supports C99])] +) AC_PROG_CXX AC_PROG_CPP AC_PROG_EGREP @@@ -79,12 -76,11 +79,12 @@@ the 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 | grep -q libprotoc.3; then + if $PROTOC --version | $EGREP libprotoc.3 >/dev/null; then protoc3="yes (`$PROTOC --version`)" have_protoc3="yes" else @@@ -94,18 -90,29 +94,18 @@@ 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_CHECK_PROG([have_protoc_c], [protoc-c], [yes], [no]) -if test "x$have_protoc_c" = "xno" -then - have_protoc_c="no (protoc-c compiler not found)" -fi - -if test "x$have_protoc_c" = "xyes" -then - AC_CHECK_HEADERS([protobuf-c/protobuf-c.h google/protobuf-c/protobuf-c.h], - [have_protoc_c="yes"; break], - [have_protoc_c="no ( not found)"]) -fi -if test "x$have_protoc_c" = "xyes" +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 - AC_CHECK_LIB([protobuf-c], [protobuf_c_message_pack], - [have_protoc_c="yes"], - [have_protoc_c="no (libprotobuf-c not found)"]) - + have_protoc_c="no (protoc-c compiler not found)" +else + have_protoc_c="yes" fi -AM_CONDITIONAL(HAVE_PROTOC_C, test "x$have_protoc_c" = "xyes") AC_MSG_CHECKING([for kernel type ($host_os)]) case $host_os in @@@ -486,7 -493,6 +486,7 @@@ the #include #include ]) + AC_CHECK_HEADERS([sys/sysmacros.h]) else have_linux_raid_md_u_h="no" fi @@@ -683,26 -689,10 +683,26 @@@ AC_CHECK_HEADERS([ wordexp.h \ ]) -AC_CHECK_HEADERS([xfs/xqm.h], [], [], -[ -#define _GNU_SOURCE -]) +# --enable-xfs {{{ +AC_ARG_ENABLE([xfs], + [AS_HELP_STRING([--enable-xfs], [xfs support in df plugin @<:@default=yes@:>@])], + [], + [enable_xfs="auto"] +) + +if test "x$enable_xfs" != "xno"; then + AC_CHECK_HEADERS([xfs/xqm.h], + [], + [ + if test "x$enable_xfs" = "xyes"; then + AC_MSG_ERROR([xfs/xqm.h not found]) + fi + ], + [[#define _GNU_SOURCE]] + ) +fi + +# }}} # For the dns plugin AC_CHECK_HEADERS(arpa/nameser.h) @@@ -765,23 -755,6 +765,23 @@@ AC_CHECK_HEADERS(net/pfvar.h have_termios_h="no" AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"]) +# 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"]) @@@ -821,7 -794,7 +821,7 @@@ AC_HEADER_TIM # # 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) +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_FUNC_STRERROR_R @@@ -1387,20 -1360,6 +1387,20 @@@ AC_ARG_WITH(useragent, [AS_HELP_STRING( # }}} +# --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]) + else + 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])] +) +# }}} + have_getfsstat="no" AC_CHECK_FUNCS(getfsstat, [have_getfsstat="yes"]) have_getvfsstat="no" @@@ -1478,15 -1437,15 +1478,15 @@@ if test "x$have_getmntent" = "xc"; the fi if test "x$have_getmntent" = "xsun"; then AC_DEFINE(HAVE_SUN_GETMNTENT, 1, - [Define if the function getmntent exists. It's the version from libsun.]) + [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's the version from libseq.]) + [Define if the function getmntent exists. It is the version from libseq.]) fi if test "x$have_getmntent" = "xgen"; then AC_DEFINE(HAVE_GEN_GETMNTENT, 1, - [Define if the function getmntent exists. It's the version from libgen.]) + [Define if the function getmntent exists. It is the version from libgen.]) fi # Check for htonll @@@ -1662,32 -1621,18 +1662,32 @@@ AC_CHECK_LIB(resolv, res_search AM_CONDITIONAL(BUILD_WITH_LIBRESOLV, test "x$with_libresolv" = "xyes") dnl Check for HAL (hardware abstraction library) -with_libhal="yes" -AC_CHECK_LIB(hal,libhal_device_property_exists, - [AC_DEFINE(HAVE_LIBHAL, 1, [Define to 1 if you have 'hal' library])], - [with_libhal="no"]) -if test "x$with_libhal" = "xyes"; then - if test "x$PKG_CONFIG" != "x"; then - BUILD_WITH_LIBHAL_CFLAGS="`$PKG_CONFIG --cflags hal`" - BUILD_WITH_LIBHAL_LIBS="`$PKG_CONFIG --libs hal`" - AC_SUBST(BUILD_WITH_LIBHAL_CFLAGS) - AC_SUBST(BUILD_WITH_LIBHAL_LIBS) - fi -fi +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) + SAVE_LIBS="$LIBS" AC_CHECK_LIB([pthread], @@@ -2301,144 -2246,60 +2301,144 @@@ AC_SUBST(GCRYPT_LIBS AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, test "x$with_libgcrypt" = "xyes") # }}} -# --with-grpc {{{ -AC_ARG_WITH(grpc, [AS_HELP_STRING([--without-grpc], [Disable gRPC (default: autodetect).])], +# --with-libgps {{{ +with_libgps_cflags="" +with_libgps_ldflags="" +AC_ARG_WITH(libgps, [AS_HELP_STRING([--with-libgps@<:@=PREFIX@:>@], [Path to libgps.])], [ - with_grpc="$withval" + 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_grpc="yes" + with_libgps="yes" ]) +if test "x$with_libgps" = "xyes" +then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $with_libgps_cflags" -if test "x$with_grpc" = "xyes" + AC_CHECK_HEADERS(gps.h, [with_libgps="yes"], [with_libgps="no (gps.h not found)"]) + + CFLAGS="$SAVE_CFLAGS" +fi +if test "x$with_libgps" = "xyes" then - if test "x$have_protoc3" != "xyes" - then - with_grpc="no (requires protoc 3.0.0+)" - else if test "x$GRPC_CPP_PLUGIN" = "x" - then - with_grpc"no (requires grpc_cpp_plugin)" - fi; fi + 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)"]) + + CFLAGS="$SAVE_CFLAGS" + LDFLAGS="$SAVE_LDFLAGS" 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") +# }}} -if test "x$with_grpc" = "xyes" +# --with-libgrpc++ {{{ +with_libgrpcpp_cppflags="" +with_libgrpcpp_ldflags="" +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 + with_libgrpcpp_cppflags="-I$withval/include" + with_libgrpcpp_ldflags="-L$withval/lib" + with_libgrpcpp="yes" + fi + if test "x$withval" = "xno" + then + with_libgrpcpp="no (disabled on command line)" + fi + ], + [withval="yes"] +) +if test "x$withval" = "xyes" then - AC_MSG_CHECKING([whether $CXX accepts -std=c++11]) - if test_cxx_flags -std=c++11; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - with_grpc="no (requires C++11 support)" - fi +PKG_CHECK_MODULES([GRPCPP], [grpc++], + [with_libgrpcpp="yes"], + [with_libgrpcpp="no (pkg-config could not find libgrpc++)"] +) fi -if test "x$with_grpc" = "xyes" +if test "x$withval" != "xno" then - AC_LANG_PUSH(C++) - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_CXXFLAGS="$CXXFLAGS" - CPPFLAGS="$CPPFLAGS -std=c++11" - CXXFLAGS="$CXXFLAGS -std=c++11" - AC_CHECK_HEADERS([grpc++/grpc++.h], [], - [with_grpc="no (grpc++/grpc++.h not found)"]) - CPPFLAGS="$SAVE_CPPFLAGS" - CXXFLAGS="$SAVE_CXXFLAGS" - AC_LANG_POP(C++) + AC_MSG_CHECKING([whether $CXX accepts -std=c++11]) + if test_cxx_flags -std=c++11; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + with_libgrpcpp="no (requires C++11 support)" + fi fi -with_libgrpc="no" -if test "x$with_grpc" = "xyes" + +if test "x$with_libgrpcpp" = "xyes" then - AC_LANG_PUSH(C++) - AC_CHECK_LIB([grpc], [grpc_register_plugin], - [with_libgrpc="yes"], - [with_grpc="no (libgrpc not found)"], - [-lgpr -lprotobuf]) - AC_LANG_POP(C++) + AC_LANG_PUSH(C++) + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-std=c++11 $with_libgrpcpp_cppflags $GRPCPP_CFLAGS $CPPFLAGS" + AC_CHECK_HEADERS([grpc++/grpc++.h], [], + [with_libgrpcpp="no ( not found)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + AC_LANG_POP(C++) fi +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 + LIBS="-lgrpc++" + else + LIBS="$GRPCPP_LIBS" + fi + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[grpc::ServerBuilder sb;]] + )], + [ + with_libgrpcpp="yes" + if test "x$GRPCPP_LIBS" = "x" + then + GRPCPP_LIBS="-lgrpc++" + fi + ], + [with_libgrpcpp="no (libgrpc++ not found)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" + 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" +AC_SUBST([BUILD_WITH_LIBGRPCPP_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBGRPCPP_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBGRPCPP_LIBS]) # }}} # --with-libiptc {{{ @@@ -2465,6 -2326,11 +2465,6 @@@ AC_ARG_WITH(libiptc, [AS_HELP_STRING([- fi ]) -if test "x$with_libiptc" = "xpkgconfig" && test "x$PKG_CONFIG" = "x" -then - with_libiptc="no (Don't have pkg-config)" -fi - if test "x$with_libiptc" = "xpkgconfig" then $PKG_CONFIG --exists 'libiptc' 2>/dev/null @@@ -2766,86 -2632,6 +2766,86 @@@ f AM_CONDITIONAL(BUILD_WITH_LIBLDAP, test "x$with_libldap" = "xyes") # }}} +# --with-liblua {{{ +AC_ARG_VAR([LIBLUA_PKG_CONFIG_NAME], [Name of liblua used by pkg-config]) +if test "x$LIBLUA_PKG_CONFIG_NAME" != "x" +then + PKG_CHECK_MODULES([LUA], [$LIBLUA_PKG_CONFIG_NAME], + [with_liblua="yes"], + [with_liblua="no"] + ) +else + PKG_CHECK_MODULES([LUA], [lua], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua-5.3], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua5.3], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua-5.2], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua5.2], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua-5.1], + [with_liblua="yes"], + [ + PKG_CHECK_MODULES([LUA], [lua5.1], + [with_liblua="yes"], + [with_liblua="no (pkg-config cannot find liblua)"] + ) + ] + ) + ] + ) + ] + ) + ] + ) + ] + ) + ] + ) +fi + +if test "x$with_liblua" = "xyes" +then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $LUA_CFLAGS" + + AC_CHECK_HEADERS([lua.h lauxlib.h lualib.h], + [with_liblua="yes"], + [with_liblua="no (header not found)"] + ) + + CFLAGS="$SAVE_CFLAGS" +fi + +if test "x$with_liblua" = "xyes" +then + SAVE_LIBS="$LIBS" + LIBS="$LIBS $LUA_LIBS" + + AC_CHECK_FUNC([lua_settop], + [with_liblua="yes"], + [with_liblua="no (symbol 'lua_settop' not found)"] + ) + + LIBS="$SAVE_LIBS" +fi + +if test "x$with_liblua" = "xyes" +then + BUILD_WITH_LIBLUA_CFLAGS="$LUA_CFLAGS" + BUILD_WITH_LIBLUA_LIBS="$LUA_LIBS" +fi +AC_SUBST(BUILD_WITH_LIBLUA_CFLAGS) +AC_SUBST(BUILD_WITH_LIBLUA_LIBS) +# }}} + # --with-liblvm2app {{{ with_liblvm2app_cppflags="" with_liblvm2app_ldflags="" @@@ -2982,6 -2768,13 +2982,6 @@@ AC_ARG_WITH(libmodbus, [AS_HELP_STRING( # configure using pkg-config if test "x$with_libmodbus" = "xuse_pkgconfig" then - if test "x$PKG_CONFIG" = "x" - then - with_libmodbus="no (Don't have pkg-config)" - fi -fi -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 @@@ -3272,6 -3065,10 +3272,6 @@@ AC_ARG_WITH(libmnl, [AS_HELP_STRING([-- with_libmnl="no (Linux only library)" fi ]) -if test "x$PKG_CONFIG" = "x" -then - with_libmnl="no (Don't have pkg-config)" -fi if test "x$with_libmnl" = "xyes" then if $PKG_CONFIG --exists libmnl 2>/dev/null; then @@@ -3428,6 -3225,9 +3428,6 @@@ AM_CONDITIONAL(BUILD_WITH_LIBNETAPP, te # }}} # --with-libnetsnmp {{{ -with_snmp_config="net-snmp-config" -with_snmp_cflags="" -with_snmp_libs="" AC_ARG_WITH(libnetsnmp, [AS_HELP_STRING([--with-libnetsnmp@<:@=PREFIX@:>@], [Path to the Net-SNMPD library.])], [ if test "x$withval" = "xno" @@@ -3437,42 -3237,57 +3437,42 @@@ then with_libnetsnmp="yes" else - if test -x "$withval" - then - with_snmp_config="$withval" - with_libnetsnmp="yes" - else - with_snmp_config="$withval/bin/net-snmp-config" - with_libnetsnmp="yes" - fi + 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 - with_snmp_cflags=`$with_snmp_config --cflags 2>/dev/null` - snmp_config_status=$? - - if test $snmp_config_status -ne 0 - then - with_libnetsnmp="no ($with_snmp_config failed)" - else - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_snmp_cflags" + 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="no (net-snmp/net-snmp-config.h not found)"]) - CPPFLAGS="$SAVE_CPPFLAGS" - fi + CPPFLAGS="$SAVE_CPPFLAGS" fi if test "x$with_libnetsnmp" = "xyes" then - with_snmp_libs=`$with_snmp_config --libs 2>/dev/null` - snmp_config_status=$? + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $with_libnetsnmp_ldflags" - if test $snmp_config_status -ne 0 - then - with_libnetsnmp="no ($with_snmp_config failed)" - else - AC_CHECK_LIB(netsnmp, init_snmp, + AC_CHECK_LIB(netsnmp, init_snmp, [with_libnetsnmp="yes"], [with_libnetsnmp="no (libnetsnmp not found)"], [$with_snmp_libs]) - fi + + LDFLAGS="$SAVE_LDFLAGS" fi if test "x$with_libnetsnmp" = "xyes" then - BUILD_WITH_LIBSNMP_CFLAGS="$with_snmp_cflags" - BUILD_WITH_LIBSNMP_LIBS="$with_snmp_libs" - AC_SUBST(BUILD_WITH_LIBSNMP_CFLAGS) - AC_SUBST(BUILD_WITH_LIBSNMP_LIBS) + BUILD_WITH_LIBNETSNMP_CPPFLAGS="$with_libnetsnmp_cppflags" + BUILD_WITH_LIBNETSNMP_LDFLAGS="$with_libnetsnmp_ldflags" + BUILD_WITH_LIBNETSNMP_LIBS="-lnetsnmp" fi -AM_CONDITIONAL(BUILD_WITH_LIBNETSNMP, test "x$with_libnetsnmp" = "xyes") +AC_SUBST(BUILD_WITH_LIBNETSNMP_CPPFLAGS) +AC_SUBST(BUILD_WITH_LIBNETSNMP_LDFLAGS) +AC_SUBST(BUILD_WITH_LIBNETSNMP_LIBS) # }}} # --with-liboconfig {{{ @@@ -3505,7 -3320,7 +3505,7 @@@ save_LDFLAGS="$LDFLAGS save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$liboconfig_LDFLAGS" CPPFLAGS="$liboconfig_CPPFLAGS" -AC_CHECK_LIB(oconfig, oconfig_parse_fh, +AC_CHECK_LIB(oconfig, oconfig_parse_file, [ with_liboconfig="yes" with_own_liboconfig="no" @@@ -3789,7 -3604,7 +3789,7 @@@ the 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 ccopts` + PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e perl_inc` PERL_LIBS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts` CFLAGS="$CFLAGS $PERL_CFLAGS" LIBS="$LIBS $PERL_LIBS" @@@ -4023,197 -3838,126 +4023,197 @@@ f AM_CONDITIONAL(BUILD_WITH_LIBPQ, test "x$with_libpq" = "xyes") # }}} -# --with-python {{{ -with_python_prog="" -with_python_path="$PATH" -AC_ARG_WITH(python, [AS_HELP_STRING([--with-python@<:@=PREFIX@:>@], [Path to the python interpreter.])], -[ - if test "x$withval" = "xyes" || test "x$withval" = "xno" - then - with_python="$withval" - else if test -x "$withval" - then - with_python_prog="$withval" - with_python_path="`dirname \"$withval\"`$PATH_SEPARATOR$with_python_path" - with_python="yes" - else if test -d "$withval" - then - with_python_path="$withval$PATH_SEPARATOR$with_python_path" - with_python="yes" - else - AC_MSG_WARN([Argument not recognized: $withval]) - fi; fi; fi -], [with_python="yes"]) - -SAVE_PATH="$PATH" -SAVE_CPPFLAGS="$CPPFLAGS" -SAVE_LDFLAGS="$LDFLAGS" -SAVE_LIBS="$LIBS" - -PATH="$with_python_path" - -if test "x$with_python" = "xyes" && test "x$with_python_prog" = "x" +# --with-libprotobuf {{{ +with_libprotobuf_cppflags="" +with_libprotobuf_ldflags="" +AC_ARG_WITH([libprotobuf], [AS_HELP_STRING([--with-libprotobuf@<:@=PREFIX@:>@], [Path to libprotobuf.])], + [ + 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 + with_libprotobuf="no (disabled on command line)" + fi + ], + [withval="yes"] +) +if test "x$withval" = "xyes" then - AC_MSG_CHECKING([for python]) - with_python_prog="`which python 2>/dev/null`" - if test "x$with_python_prog" = "x" - then - AC_MSG_RESULT([not found]) - with_python="no (interpreter not found)" - else - AC_MSG_RESULT([$with_python_prog]) - fi +PKG_CHECK_MODULES([PROTOBUF], [protobuf], + [with_libprotobuf="yes"], + [with_libprotobuf="no (pkg-config could not find libprotobuf)"] +) fi -if test "x$with_python" = "xyes" +if test "x$withval" != "xno" then - AC_MSG_CHECKING([for Python CPPFLAGS]) - python_include_path=`echo "import distutils.sysconfig;import sys;sys.stdout.write(distutils.sysconfig.get_python_inc())" | "$with_python_prog" 2>&1` - python_config_status=$? - - if test "$python_config_status" -ne 0 || test "x$python_include_path" = "x" - then - AC_MSG_RESULT([failed with status $python_config_status (output: $python_include_path)]) - with_python="no" - else - AC_MSG_RESULT([$python_include_path]) - fi + SAVE_LDFLAGS="$LDFLAGS" + SAVE_LIBS="$LIBS" + LDFLAGS="$with_libprotobuf_ldflags" + LIBS="$PROTOBUF_LIBS $LIBS" + AC_LANG_PUSH([C++]) + AC_CHECK_LIB([protobuf], [main], + [ + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$with_libprotobuf_cppflags $PROTOBUF_CFLAGS" + if test "x$PROTOBUF_LIBS" = "x" + then + PROTOBUF_LIBS="-lprotobuf" + fi + AC_CHECK_HEADERS([google/protobuf/util/time_util.h], + [with_libprotobuf="yes"], + [with_libprotobuf="no ( not found)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + ], + [with_libprotobuf="no (libprotobuf not found)"] + ) + AC_LANG_POP([C++]) + 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" +AC_SUBST([BUILD_WITH_LIBPROTOBUF_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBPROTOBUF_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBPROTOBUF_LIBS]) +# }}} -if test "x$with_python" = "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.])], + [ + 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 + with_libprotobuf_c="no (disabled on command line)" + fi + ], + [withval="yes"] +) +if test "x$withval" = "xyes" then - CPPFLAGS="-I$python_include_path $CPPFLAGS" - AC_CHECK_HEADERS(Python.h, - [with_python="yes"], - [with_python="no ('Python.h' not found)"]) +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$with_python" = "xyes" +if test "x$withval" != "xno" then - AC_MSG_CHECKING([for Python LDFLAGS]) - python_library_path=`echo "import distutils.sysconfig;import sys;sys.stdout.write(distutils.sysconfig.get_config_vars(\"LIBDIR\").__getitem__(0))" | "$with_python_prog" 2>&1` - python_config_status=$? - - if test "$python_config_status" -ne 0 || test "x$python_library_path" = "x" - then - AC_MSG_RESULT([failed with status $python_config_status (output: $python_library_path)]) - with_python="no" - else - AC_MSG_RESULT([$python_library_path]) - fi + SAVE_LDFLAGS="$LDFLAGS" + SAVE_LIBS="$LIBS" + LDFLAGS="$with_libprotobuf_c_ldflags" + LIBS="$PROTOBUF_C_LIBS $LIBS" + AC_CHECK_LIB([protobuf-c], [protobuf_c_message_pack], + [ + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$with_libprotobuf_c_cppflags $PROTOBUF_C_CFLAGS" + 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" + break + ], + [with_libprotobuf_c="no ( not found)"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + ], + [with_libprotobuf_c="no (libprotobuf-c not found)"] + ) + 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" +AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_CPPFLAGS]) +AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LDFLAGS]) +AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LIBS]) +# }}} -if test "x$with_python" = "xyes" -then - AC_MSG_CHECKING([for Python LIBS]) - python_library_flags=`echo "import distutils.sysconfig;import sys;sys.stdout.write(distutils.sysconfig.get_config_vars(\"BLDLIBRARY\").__getitem__(0))" | "$with_python_prog" 2>&1` - python_config_status=$? +# --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]) - if test "$python_config_status" -ne 0 || test "x$python_library_flags" = "x" - then - AC_MSG_RESULT([failed with status $python_config_status (output: $python_library_flags)]) - with_python="no" - else - AC_MSG_RESULT([$python_library_flags]) - fi +AC_ARG_WITH([libpython], + [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]) + AC_PATH_PROGS([PYTHON_CONFIG], + [python3-config python2-config python-config] + ) + if test "$PYTHON_CONFIG" = ""; then + if test "$with_libpython" = "yes"; then + AC_MSG_ERROR([Unable to find python-config]) + fi + with_libpython="no" + fi + fi fi -if test "x$with_python" = "xyes" -then - LDFLAGS="-L$python_library_path $LDFLAGS" - LIBS="$python_library_flags $LIBS" - - AC_CHECK_FUNC(PyObject_CallFunction, - [with_python="yes"], - [with_python="no (Symbol 'PyObject_CallFunction' not found)"]) +if test "$PYTHON_CONFIG" != ""; then + LIBPYTHON_CPPFLAGS="`${PYTHON_CONFIG} --includes`" + if test $? -ne 0; then + with_libpython="no" + fi + LIBPYTHON_LDFLAGS="`${PYTHON_CONFIG} --ldflags`" + if test $? -ne 0; then + with_libpython="no" + fi + LIBPYTHON_LIBS="`${PYTHON_CONFIG} --libs`" + if test $? -ne 0; then + with_libpython="no" + fi fi -PATH="$SAVE_PATH" -CPPFLAGS="$SAVE_CPPFLAGS" -LDFLAGS="$SAVE_LDFLAGS" -LIBS="$SAVE_LIBS" - -if test "x$with_python" = "xyes" -then - BUILD_WITH_PYTHON_CPPFLAGS="-I$python_include_path" - BUILD_WITH_PYTHON_LDFLAGS="-L$python_library_path" - BUILD_WITH_PYTHON_LIBS="$python_library_flags" - AC_SUBST(BUILD_WITH_PYTHON_CPPFLAGS) - AC_SUBST(BUILD_WITH_PYTHON_LDFLAGS) - AC_SUBST(BUILD_WITH_PYTHON_LIBS) +if test "$with_libpython" != "xno"; then + SAVE_CPPFLAGS="$CPPFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + SAVE_LIBS="$LIBS" + CPPFLAGS="$LIBPYTHON_CPPFLAGS $CPPFLAGS" + LDFLAGS="$LIBPYTHON_LDFLAGS $LDFLAGS" + LIBS="$LIBPYTHON_LIBS $LIBS" + AC_CHECK_HEADERS([Python.h], + [ + AC_MSG_CHECKING([for libpython]) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include ]], + [[Py_Initialize();]]) + ], + [with_libpython="yes"], + [with_libpython="no"] + ) + AC_MSG_RESULT([$with_libpython]) + ], + [with_libpython="no"] + ) + CPPFLAGS="$SAVE_CPPFLAGS" + LDFLAGS="$SAVE_LDFLAGS" + LIBS="$SAVE_LIBS" fi -# }}} --with-python +# }}} --with-libpython # --with-librabbitmq {{{ with_librabbitmq_cppflags="" @@@ -4596,13 -4340,74 +4596,13 @@@ f AM_CONDITIONAL(BUILD_WITH_LM_SENSORS, test "x$with_libsensors" = "xyes") # }}} -# --with-libsigrok {{{ -with_libsigrok_cflags="" -with_libsigrok_ldflags="" -AC_ARG_WITH(libsigrok, [AS_HELP_STRING([--with-libsigrok@<:@=PREFIX@:>@], [Path to libsigrok.])], -[ - if test "x$withval" = "xno" - then - with_libsigrok="no" - else - with_libsigrok="yes" - if test "x$withval" != "xyes" - then - with_libsigrok_cflags="-I$withval/include" - with_libsigrok_ldflags="-L$withval/lib" - fi - fi -],[with_libsigrok="yes"]) - -# libsigrok has a glib dependency -if test "x$with_libsigrok" = "xyes" -then -m4_ifdef([AM_PATH_GLIB_2_0], - [ - AM_PATH_GLIB_2_0([2.28.0], - [with_libsigrok_cflags="$with_libsigrok_cflags $GLIB_CFLAGS"; with_libsigrok_ldflags="$with_libsigrok_ldflags $GLIB_LIBS"]) - ], - [ - with_libsigrok="no (glib not available)" - ] +# libsigrok {{{ +AC_SUBST([LIBSIGROK_CFLAGS]) +AC_SUBST([LIBSIGROK_LIBS]) +PKG_CHECK_MODULES([LIBSIGROK], [libsigrok < 0.4], + [with_libsigrok="yes"], + [with_libsigrok="no (pkg-config could not find libsigrok)"] ) -fi - -# libsigrok headers -if test "x$with_libsigrok" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $with_libsigrok_cflags" - - AC_CHECK_HEADERS(libsigrok/libsigrok.h, [], [with_libsigrok="no (libsigrok/libsigrok.h not found)"]) - - CPPFLAGS="$SAVE_CPPFLAGS" -fi - -# libsigrok library -if test "x$with_libsigrok" = "xyes" -then - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $with_libsigrok_cflags" - LDFLAGS="$LDFLAGS $with_libsigrok_ldflags" - - AC_CHECK_LIB(sigrok, sr_init, - [ - AC_DEFINE(HAVE_LIBSIGROK, 1, [Define to 1 if you have the sigrok library (-lsigrok).]) - ], - [with_libsigrok="no (libsigrok not found)"]) - - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" -fi -if test "x$with_libsigrok" = "xyes" -then - BUILD_WITH_LIBSIGROK_CFLAGS="$with_libsigrok_cflags" - BUILD_WITH_LIBSIGROK_LDFLAGS="$with_libsigrok_ldflags" - AC_SUBST(BUILD_WITH_LIBSIGROK_CFLAGS) - AC_SUBST(BUILD_WITH_LIBSIGROK_LDFLAGS) -fi -AM_CONDITIONAL(BUILD_WITH_LIBSIGROK, test "x$with_libsigrok" = "xyes") # }}} # --with-libstatgrab {{{ @@@ -4630,16 -4435,23 +4630,16 @@@ AC_ARG_WITH(libstatgrab, [AS_HELP_STRIN if test "x$with_libstatgrab" = "xyes" \ && test "x$with_libstatgrab_pkg_config" = "xyes" then - if test "x$PKG_CONFIG" != "x" + AC_MSG_CHECKING([pkg-config for libstatgrab]) + temp_result="found" + $PKG_CONFIG --exists libstatgrab 2>/dev/null + if test "$?" != "0" then - AC_MSG_CHECKING([pkg-config for libstatgrab]) - temp_result="found" - $PKG_CONFIG --exists libstatgrab 2>/dev/null - if test "$?" != "0" - then - with_libstatgrab_pkg_config="no" - with_libstatgrab="no (pkg-config doesn't know libstatgrab)" - temp_result="not found" - fi - AC_MSG_RESULT([$temp_result]) - else - AC_MSG_NOTICE([pkg-config not available, trying to guess flags for the statgrab library.]) with_libstatgrab_pkg_config="no" - with_libstatgrab_ldflags="$with_libstatgrab_ldflags -lstatgrab" + with_libstatgrab="no (pkg-config doesn't know libstatgrab)" + temp_result="not found" fi + AC_MSG_RESULT([$temp_result]) fi if test "x$with_libstatgrab" = "xyes" \ @@@ -4938,6 -4750,13 +4938,6 @@@ f # configure using pkg-config if test "x$with_libupsclient" = "xuse_pkgconfig" then - if test "x$PKG_CONFIG" = "x" - then - with_libupsclient="no (Don't have pkg-config)" - fi -fi -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 @@@ -5259,6 -5078,13 +5259,6 @@@ AC_ARG_WITH(libvarnish, [AS_HELP_STRING # configure using pkg-config if test "x$with_libvarnish" = "xuse_pkgconfig" then - if test "x$PKG_CONFIG" = "x" - then - with_libvarnish="no (Don't have pkg-config)" - fi -fi -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 @@@ -5318,20 -5144,23 +5318,20 @@@ with_libxml2_ldflags=" with_libvirt="no (pkg-config isn't available)" with_libvirt_cflags="" with_libvirt_ldflags="" -if test "x$PKG_CONFIG" != "x" +$PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null +if test "$?" = "0" then - $PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null - if test "$?" = "0" - then - with_libxml2="yes" - else - with_libxml2="no (pkg-config doesn't know libxml-2.0)" - fi + with_libxml2="yes" +else + 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" - else - with_libvirt="no (pkg-config doesn't know libvirt)" - fi +$PKG_CONFIG --exists libvirt 2>/dev/null +if test "$?" = "0" +then + with_libvirt="yes" +else + with_libvirt="no (pkg-config doesn't know libvirt)" fi if test "x$with_libxml2" = "xyes" then @@@ -5430,6 -5259,17 +5430,6 @@@ with_libopenipmipthread="yes with_libopenipmipthread_cflags="" with_libopenipmipthread_libs="" -AC_MSG_CHECKING([for pkg-config]) -temp_result="no" -if test "x$PKG_CONFIG" = "x" -then - with_libopenipmipthread="no" - temp_result="no" -else - temp_result="$PKG_CONFIG" -fi -AC_MSG_RESULT([$temp_result]) - if test "x$with_libopenipmipthread" = "xyes" then AC_MSG_CHECKING([for libOpenIPMIpthread]) @@@ -5556,7 -5396,7 +5556,7 @@@ PKG_CHECK_MODULES([LIBNOTIFY], [libnoti [with_libnotify="no (pkg-config doesn't know libnotify)"] ) -PKG_CHECK_MODULES([LIBRIEMANN_CLIENT], [riemann-client >= 1.8.0], +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)"]) @@@ -5697,7 -5537,6 +5697,7 @@@ plugin_conntrack="no plugin_contextswitch="no" plugin_cpu="no" plugin_cpufreq="no" +plugin_cpusleep="no" plugin_curl_json="no" plugin_curl_xml="no" plugin_df="no" @@@ -5707,8 -5546,7 +5707,9 @@@ plugin_entropy="no plugin_ethstat="no" plugin_fhcount="no" plugin_fscache="no" +plugin_gps="no" +plugin_grpc="no" + plugin_hugepages="no" plugin_interface="no" plugin_ipmi="no" plugin_ipvs="no" @@@ -5720,10 -5558,8 +5721,10 @@@ plugin_multimeter="no plugin_nfs="no" plugin_numa="no" plugin_perl="no" +plugin_pinba="no" plugin_processes="no" plugin_protocols="no" +plugin_python="no" plugin_serial="no" plugin_smart="no" plugin_swap="no" @@@ -5757,6 -5593,7 +5758,7 @@@ the plugin_entropy="yes" plugin_fhcount="yes" plugin_fscache="yes" + plugin_hugepages="yes" plugin_interface="yes" plugin_ipc="yes" plugin_irq="yes" @@@ -5785,11 -5622,6 +5787,11 @@@ 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" @@@ -5991,21 -5823,11 +5993,21 @@@ the plugin_ethstat="yes" 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" +fi + if test "x$have_getifaddrs" = "xyes" then plugin_interface="yes" fi +if test "x$with_libgps" = "xyes" +then + plugin_gps="yes" +fi + if test "x$have_getloadavg" = "xyes" then plugin_load="yes" @@@ -6021,11 -5843,6 +6023,11 @@@ the plugin_perl="yes" fi +if test "x$have_protoc_c" = "xyes" && test "x$with_libprotobuf_c" = "xyes" +then + plugin_pinba="yes" +fi + # Mac OS X memory interface if test "x$have_host_statistics" = "xyes" then @@@ -6056,11 -5873,6 +6058,11 @@@ the plugin_processes="yes" fi +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" @@@ -6142,7 -5954,6 +6144,7 @@@ AC_PLUGIN([conntrack], [$plug AC_PLUGIN([contextswitch], [$plugin_contextswitch], [context switch statistics]) AC_PLUGIN([cpu], [$plugin_cpu], [CPU usage statistics]) AC_PLUGIN([cpufreq], [$plugin_cpufreq], [CPU frequency statistics]) +AC_PLUGIN([cpusleep], [$plugin_cpusleep], [CPU sleep statistics]) AC_PLUGIN([csv], [yes], [CSV output plugin]) AC_PLUGIN([curl], [$with_libcurl], [CURL generic web statistics]) AC_PLUGIN([curl_json], [$plugin_curl_json], [CouchDB statistics]) @@@ -6160,9 -5971,9 +6162,10 @@@ AC_PLUGIN([fhcount], [$plug AC_PLUGIN([filecount], [yes], [Count files in directories]) AC_PLUGIN([fscache], [$plugin_fscache], [fscache statistics]) AC_PLUGIN([gmond], [$with_libganglia], [Ganglia plugin]) -AC_PLUGIN([grpc], [$with_grpc], [gRPC plugin]) +AC_PLUGIN([gps], [$plugin_gps], [GPS plugin]) +AC_PLUGIN([grpc], [$plugin_grpc], [gRPC plugin]) AC_PLUGIN([hddtemp], [yes], [Query hddtempd]) + AC_PLUGIN([hugepages], [$plugin_hugepages], [Hugepages statistics]) AC_PLUGIN([interface], [$plugin_interface], [Interface traffic statistics]) AC_PLUGIN([ipc], [$plugin_ipc], [IPC statistics]) AC_PLUGIN([ipmi], [$plugin_ipmi], [IPMI sensor statistics]) @@@ -6174,7 -5985,6 +6177,7 @@@ AC_PLUGIN([load], [$plug AC_PLUGIN([log_logstash], [$plugin_log_logstash], [Logstash json_event compatible logging]) AC_PLUGIN([logfile], [yes], [File logging plugin]) AC_PLUGIN([lpar], [$with_perfstat], [AIX logical partitions statistics]) +AC_PLUGIN([lua], [$with_liblua], [Lua plugin]) AC_PLUGIN([lvm], [$with_liblvm2app], [LVM statistics]) AC_PLUGIN([madwifi], [$have_linux_wireless_h], [Madwifi wireless statistics]) AC_PLUGIN([match_empty_counter], [yes], [The empty counter match]) @@@ -6211,13 -6021,13 +6214,13 @@@ AC_PLUGIN([oracle], [$with 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. -AC_PLUGIN([pinba], [$have_protoc_c], [Pinba statistics]) +AC_PLUGIN([pinba], [$plugin_pinba], [Pinba statistics]) AC_PLUGIN([ping], [$with_liboping], [Network latency statistics]) AC_PLUGIN([postgresql], [$with_libpq], [PostgreSQL database statistics]) AC_PLUGIN([powerdns], [yes], [PowerDNS statistics]) AC_PLUGIN([processes], [$plugin_processes], [Process statistics]) AC_PLUGIN([protocols], [$plugin_protocols], [Protocol (IP, TCP, ...) statistics]) -AC_PLUGIN([python], [$with_python], [Embed a Python interpreter]) +AC_PLUGIN([python], [$plugin_python], [Embed a Python interpreter]) AC_PLUGIN([redis], [$with_libhiredis], [Redis plugin]) AC_PLUGIN([routeros], [$with_librouteros], [RouterOS plugin]) AC_PLUGIN([rrdcached], [$librrd_rrdc_update], [RRDTool output plugin]) @@@ -6393,18 -6203,6 +6396,18 @@@ AC_ARG_WITH(perl-bindings, [AS_HELP_STR 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 +fi + if test "x$with_perl_bindings" = "xyes" then PERL_BINDINGS="perl" @@@ -6493,8 -6291,7 +6496,8 @@@ AC_MSG_RESULT([ libdbi . . . . . . AC_MSG_RESULT([ libesmtp . . . . . . $with_libesmtp]) AC_MSG_RESULT([ libganglia . . . . . $with_libganglia]) AC_MSG_RESULT([ libgcrypt . . . . . . $with_libgcrypt]) -AC_MSG_RESULT([ libgrpc . . . . . . . $with_libgrpc]) +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]) @@@ -6504,7 -6301,6 +6507,7 @@@ AC_MSG_RESULT([ libjvm . . . . . . AC_MSG_RESULT([ libkstat . . . . . . $with_kstat]) AC_MSG_RESULT([ libkvm . . . . . . . $with_libkvm]) AC_MSG_RESULT([ libldap . . . . . . . $with_libldap]) +AC_MSG_RESULT([ liblua . . . . . . . $with_liblua]) AC_MSG_RESULT([ liblvm2app . . . . . $with_liblvm2app]) AC_MSG_RESULT([ libmemcached . . . . $with_libmemcached]) AC_MSG_RESULT([ libmnl . . . . . . . $with_libmnl]) @@@ -6523,9 -6319,6 +6526,9 @@@ AC_MSG_RESULT([ libpcap . . . . . . AC_MSG_RESULT([ libperfstat . . . . . $with_perfstat]) AC_MSG_RESULT([ libperl . . . . . . . $with_libperl]) AC_MSG_RESULT([ libpq . . . . . . . . $with_libpq]) +AC_MSG_RESULT([ libprotobuf . . . . . $with_libprotobuf]) +AC_MSG_RESULT([ libprotobuf-c . . . . $with_libprotobuf_c]) +AC_MSG_RESULT([ libpython . . . . . . $with_libpython]) AC_MSG_RESULT([ librabbitmq . . . . . $with_librabbitmq]) AC_MSG_RESULT([ libriemann-client . . $with_libriemann_client]) AC_MSG_RESULT([ librdkafka . . . . . $with_librdkafka]) @@@ -6545,7 -6338,8 +6548,7 @@@ AC_MSG_RESULT([ libxmms . . . . . . AC_MSG_RESULT([ libyajl . . . . . . . $with_libyajl]) AC_MSG_RESULT([ oracle . . . . . . . $with_oracle]) AC_MSG_RESULT([ protobuf-c . . . . . $have_protoc_c]) -AC_MSG_RESULT([ protoc 3 . . . . . . $protoc3]) -AC_MSG_RESULT([ python . . . . . . . $with_python]) +AC_MSG_RESULT([ protoc 3 . . . . . . $have_protoc3]) AC_MSG_RESULT() AC_MSG_RESULT([ Features:]) AC_MSG_RESULT([ daemon mode . . . . . $enable_daemon]) @@@ -6572,7 -6366,6 +6575,7 @@@ AC_MSG_RESULT([ conntrack . . . . . AC_MSG_RESULT([ contextswitch . . . . $enable_contextswitch]) AC_MSG_RESULT([ cpu . . . . . . . . . $enable_cpu]) AC_MSG_RESULT([ cpufreq . . . . . . . $enable_cpufreq]) +AC_MSG_RESULT([ cpusleep . . . . . . $enable_cpusleep]) AC_MSG_RESULT([ csv . . . . . . . . . $enable_csv]) AC_MSG_RESULT([ curl . . . . . . . . $enable_curl]) AC_MSG_RESULT([ curl_json . . . . . . $enable_curl_json]) @@@ -6590,9 -6383,9 +6593,10 @@@ AC_MSG_RESULT([ fhcount . . . . . . AC_MSG_RESULT([ filecount . . . . . . $enable_filecount]) AC_MSG_RESULT([ fscache . . . . . . . $enable_fscache]) AC_MSG_RESULT([ gmond . . . . . . . . $enable_gmond]) +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([ interface . . . . . . $enable_interface]) AC_MSG_RESULT([ ipc . . . . . . . . . $enable_ipc]) AC_MSG_RESULT([ ipmi . . . . . . . . $enable_ipmi]) @@@ -6604,7 -6397,6 +6608,7 @@@ AC_MSG_RESULT([ load . . . . . . . AC_MSG_RESULT([ logfile . . . . . . . $enable_logfile]) AC_MSG_RESULT([ log_logstash . . . . $enable_log_logstash]) AC_MSG_RESULT([ lpar . . . . . . . . $enable_lpar]) +AC_MSG_RESULT([ lua . . . . . . . . . $enable_lua]) AC_MSG_RESULT([ lvm . . . . . . . . . $enable_lvm]) AC_MSG_RESULT([ madwifi . . . . . . . $enable_madwifi]) AC_MSG_RESULT([ match_empty_counter . $enable_match_empty_counter]) diff --combined src/Makefile.am index dbd5bb91,587c9a4e..bc5f4294 --- a/src/Makefile.am +++ b/src/Makefile.am @@@ -27,21 -27,6 +27,21 @@@ noinst_LTLIBRARIES check_PROGRAMS = TESTS = +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 check_PROGRAMS += test_utils_latency @@@ -156,10 -141,11 +156,10 @@@ pkglib_LTLIBRARIES += amqp.l amqp_la_SOURCES = amqp.c \ utils_cmd_putval.c utils_cmd_putval.h \ utils_parse_option.c utils_parse_option.h \ - utils_format_graphite.c utils_format_graphite.h \ - utils_format_json.c utils_format_json.h + utils_format_graphite.c utils_format_graphite.h 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) +amqp_la_LIBADD = $(BUILD_WITH_LIBRABBITMQ_LIBS) libformat_json.la endif if BUILD_PLUGIN_APACHE @@@ -170,7 -156,6 +170,7 @@@ apache_la_CFLAGS = $(AM_CFLAGS) $(BUILD apache_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) endif + if BUILD_PLUGIN_APCUPS pkglib_LTLIBRARIES += apcups.la apcups_la_SOURCES = apcups.c @@@ -294,12 -279,6 +294,12 @@@ cpufreq_la_SOURCES = cpufreq. 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 @@@ -443,21 -422,14 +443,21 @@@ gmond_la_LDFLAGS = $(PLUGIN_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) -std=c++11 -grpc_la_CXXFLAGS = $(AM_CXXFLAGS) -std=c++11 -grpc_la_LDFLAGS = $(PLUGIN_LDFLAGS) -grpc_la_LIBADD = -lgrpc++ -lgrpc -lgpr -lprotobuf +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 @@@ -470,6 -442,12 +470,12 @@@ hddtemp_la_LIBADD += -lsocke 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 @@@ -575,15 -553,6 +581,15 @@@ 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 @@@ -866,10 -835,6 +872,10 @@@ perl_la_SOURCES = perl. # 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)\" @@@ -893,9 -858,8 +899,9 @@@ if BUILD_PLUGIN_PINB pkglib_LTLIBRARIES += pinba.la pinba_la_SOURCES = pinba.c nodist_pinba_la_SOURCES = pinba.pb-c.c pinba.pb-c.h -pinba_la_LDFLAGS = $(PLUGIN_LDFLAGS) -pinba_la_LIBADD = -lprotobuf-c +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 @@@ -925,11 -889,13 +931,11 @@@ endi if BUILD_PLUGIN_PYTHON pkglib_LTLIBRARIES += python.la python_la_SOURCES = python.c pyconfig.c pyvalues.c cpython.h -python_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_PYTHON_CPPFLAGS) -python_la_CFLAGS = $(AM_CFLAGS) +python_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBPYTHON_CPPFLAGS) if COMPILER_IS_GCC -python_la_CFLAGS += -fno-strict-aliasing -Wno-strict-aliasing +python_la_CPPFLAGS += -fno-strict-aliasing -Wno-strict-aliasing endif -python_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_PYTHON_LDFLAGS) -python_la_LIBADD = $(BUILD_WITH_PYTHON_LIBS) +python_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(LIBPYTHON_LDFLAGS) endif if BUILD_PLUGIN_PROCESSES @@@ -997,9 -963,9 +1003,9 @@@ endi if BUILD_PLUGIN_SIGROK pkglib_LTLIBRARIES += sigrok.la sigrok_la_SOURCES = sigrok.c -sigrok_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBSIGROK_CFLAGS) -sigrok_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBSIGROK_LDFLAGS) -sigrok_la_LIBADD = -lsigrok +sigrok_la_CFLAGS = $(AM_CFLAGS) $(LIBSIGROK_CFLAGS) +sigrok_la_LDFLAGS = $(PLUGIN_LDFLAGS) +sigrok_la_LIBADD = $(LIBSIGROK_LIBS) endif if BUILD_PLUGIN_SMART @@@ -1015,9 -981,13 +1021,9 @@@ endi if BUILD_PLUGIN_SNMP pkglib_LTLIBRARIES += snmp.la snmp_la_SOURCES = snmp.c -snmp_la_LDFLAGS = $(PLUGIN_LDFLAGS) -snmp_la_CFLAGS = $(AM_CFLAGS) -snmp_la_LIBADD = -if BUILD_WITH_LIBNETSNMP -snmp_la_CFLAGS += $(BUILD_WITH_LIBSNMP_CFLAGS) -snmp_la_LIBADD += $(BUILD_WITH_LIBSNMP_LIBS) -endif +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 @@@ -1249,29 -1219,30 +1255,29 @@@ endi 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 + utils_format_graphite.c utils_format_graphite.h write_graphite_la_LDFLAGS = $(PLUGIN_LDFLAGS) +write_graphite_la_LIBADD = libformat_json.la endif if BUILD_PLUGIN_WRITE_HTTP pkglib_LTLIBRARIES += write_http.la write_http_la_SOURCES = write_http.c \ - utils_format_json.c utils_format_json.h -write_http_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) + utils_format_kairosdb.c utils_format_kairosdb.h write_http_la_LDFLAGS = $(PLUGIN_LDFLAGS) -write_http_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) +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_format_graphite.c utils_format_graphite.h \ - utils_format_json.c utils_format_json.h \ utils_cmd_putval.c utils_cmd_putval.h \ 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) +write_kafka_la_LIBADD = $(BUILD_WITH_LIBRDKAFKA_LIBS) libformat_json.la endif if BUILD_PLUGIN_WRITE_LOG @@@ -1364,7 -1335,6 +1370,7 @@@ dist_man_MANS = collectd.1 collectd-exec.5 \ collectdctl.1 \ collectd-java.5 \ + collectd-lua.5 \ collectdmon.1 \ collectd-nagios.1 \ collectd-perl.5 \ @@@ -1380,7 -1350,6 +1386,7 @@@ EXTRA_DIST = collectd.conf.pod collectd-exec.pod \ collectdctl.pod \ collectd-java.pod \ + collectd-lua.pod \ collectdmon.pod \ collectd-nagios.pod \ collectd-perl.pod \ @@@ -1428,7 -1397,7 +1434,7 @@@ CLEANFILES += pinba.pb-c.c pinba.pb-c. 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 + $(AM_V_PROTOC_C)$(PROTOC_C) -I$(srcdir) --c_out . $(srcdir)/pinba.proto endif install-exec-hook: diff --combined src/collectd.conf.in index f6898116,998e2117..16b66482 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@@ -105,7 -105,6 +105,7 @@@ #@BUILD_PLUGIN_CONTEXTSWITCH_TRUE@LoadPlugin contextswitch @BUILD_PLUGIN_CPU_TRUE@@BUILD_PLUGIN_CPU_TRUE@LoadPlugin cpu #@BUILD_PLUGIN_CPUFREQ_TRUE@LoadPlugin cpufreq +#@BUILD_PLUGIN_CPUSLEEP_TRUE@LoadPlugin cpusleep @LOAD_PLUGIN_CSV@LoadPlugin csv #@BUILD_PLUGIN_CURL_TRUE@LoadPlugin curl #@BUILD_PLUGIN_CURL_JSON_TRUE@LoadPlugin curl_json @@@ -123,9 -122,9 +123,10 @@@ #@BUILD_PLUGIN_FILECOUNT_TRUE@LoadPlugin filecount #@BUILD_PLUGIN_FSCACHE_TRUE@LoadPlugin fscache #@BUILD_PLUGIN_GMOND_TRUE@LoadPlugin gmond +#@BUILD_PLUGIN_GPS_TRUE@LoadPlugin gps #@BUILD_PLUGIN_GRPC_TRUE@LoadPlugin grpc #@BUILD_PLUGIN_HDDTEMP_TRUE@LoadPlugin hddtemp + #@BUILD_PLUGIN_HUGEPAGES_TRUE@LoadPlugin hugepages @BUILD_PLUGIN_INTERFACE_TRUE@@BUILD_PLUGIN_INTERFACE_TRUE@LoadPlugin interface #@BUILD_PLUGIN_IPC_TRUE@LoadPlugin ipc #@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi @@@ -135,7 -134,6 +136,7 @@@ #@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java @BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load #@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar +#@BUILD_PLUGIN_LUA_TRUE@LoadPlugin lua #@BUILD_PLUGIN_LVM_TRUE@LoadPlugin lvm #@BUILD_PLUGIN_MADWIFI_TRUE@LoadPlugin madwifi #@BUILD_PLUGIN_MBMON_TRUE@LoadPlugin mbmon @@@ -567,25 -565,13 +568,25 @@@ # # +# +# Host "127.0.0.1" +# Port "2947" +# Timeout 0.015 +# PauseConnect 5 +# + # -# WorkerThreads 5 +# +# EnableSSL true +# SSLCACertificateFile "/path/to/root.pem" +# SSLCertificateFile "/path/to/server.pem" +# SSLCertificateKeyFile "/path/to/server.key" +# # # EnableSSL true -# SSLRootCerts "/path/to/root.pem" -# SSLServerCert "/path/to/server.pem" -# SSLServerKey "/path/to/server.key" +# SSLCACertificateFile "/path/to/root.pem" +# SSLCertificateFile "/path/to/client.pem" +# SSLCertificateKeyFile "/path/to/client.key" # # @@@ -594,10 -580,14 +595,15 @@@ # Port "7634" # + # + # ReportPerNodeHP "true" + # ReportRootHP "true" + # + # # Interface "eth0" # IgnoreSelected false +# ReportInactive true # UniqueName false # @@@ -641,12 -631,6 +647,12 @@@ # ReportBySerial false # +# +# BasePath "@prefix@/share/@PACKAGE_NAME@/lua" +# Script "script1.lua" +# Script "script2.lua" +# + # # Interface "wlan0" # IgnoreSelected false @@@ -750,11 -734,6 +756,11 @@@ # User "db_user" # Password "secret" # Database "db_name" +# SSLKey "/path/to/key.pem" +# SSLCert "/path/to/cert.pem" +# SSLCA "/path/to/ca.pem" +# SSLCAPath "/path/to/cas/" +# SSLCipher "DHE-RSA-AES256-SHA" # MasterStats true # ConnectTimeout 10 # InnodbStats true @@@ -767,12 -746,6 +773,12 @@@ # SlaveStats true # SlaveNotifications true # +# +# Alias "galera" +# Host "localhost" +# Socket "/var/run/mysql/mysqld.sock" +# WsrepStats true +# # # @@@ -1426,8 -1399,6 +1432,8 @@@ # Header "X-Custom-Header: custom_value" # SSLVersion "TLSv1" # Format "Command" +# Metrics true +# Notifications false # StoreRates false # BufferSize 4096 # LowSpeedLimit 0 diff --combined src/collectd.conf.pod index e302e816,b6d04ca2..d5045c16 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@@ -1447,11 -1447,6 +1447,11 @@@ are set to B. In this case, by de Jiffies. By setting this option to B, you can request percentage values in the un-aggregated (per-CPU, per-state) mode as well. +=item B B|B + +When set to B, reports the number of available CPUs. +Defaults to B. + =back =head2 Plugin C @@@ -1462,16 -1457,6 +1462,16 @@@ installed) to get the current CPU frequ sure B (L) or a similar tool is installed and an "cpu governor" (that's a kernel module) is loaded. +=head2 Plugin C + +This plugin doesn't have any options. It reads CLOCK_BOOTTIME and +CLOCK_MONOTONIC and reports the difference between these clocks. Since +BOOTTIME clock increments while device is suspended and MONOTONIC +clock does not, the derivative of the difference between these clocks +gives the relative amount of time the device has spent in suspend +state. The recorded value is in milliseconds of sleep per seconds of +wall clock. + =head2 Plugin C =over 4 @@@ -1775,11 -1760,6 +1775,11 @@@ The following options are valid within =over 4 +=item B I + +Use I as the host name when submitting values. Defaults to the global +host name setting. + =item B I Sets the plugin instance to I. @@@ -2421,7 -2401,7 +2421,7 @@@ I will be used =item B B|B -When set to B, only metrics that can be mapped to to a I will be +When set to B, only metrics that can be mapped to a I will be collected, all other metrics will be ignored. Defaults to B. =back @@@ -2651,78 -2631,6 +2651,78 @@@ source, this is optional. Otherwise th =back +=head2 Plugin C + +The C connects to gpsd on the host machine. +The host, port, timeout and pause are configurable. + +This is useful if you run an NTP server using a GPS for source and you want to +monitor it. + +Mind your GPS must send $--GSA for having the data reported! + +The following elements are collected: + +=over 4 + +=item B + +Number of satellites used for fix (type instance "used") and in view (type +instance "visible"). 0 means no GPS satellites are visible. + +=item B + +Vertical and horizontal dilution (type instance "horizontal" or "vertical"). +It should be between 0 and 3. +Look at the documentation of your GPS to know more. + +=back + +Synopsis: + + LoadPlugin gps + + # Connect to localhost on gpsd regular port: + Host "127.0.0.1" + Port "2947" + # 15 ms timeout + Timeout 0.015 + # PauseConnect of 5 sec. between connection attempts. + PauseConnect 5 + + +Available configuration options: + +=over 4 + +=item B I + +The host on which gpsd daemon runs. Defaults to B. + +=item B I + +Port to connect to gpsd on the host machine. Defaults to B<2947>. + +=item B I + +Timeout in seconds (default 0.015 sec). + +The GPS data stream is fetch by the plugin form the daemon. +It waits for data to be available, if none arrives it times out +and loop for another reading. +Mind to put a low value gpsd expects value in the micro-seconds area +(recommended is 500 us) since the waiting function is blocking. +Value must be between 500 us and 5 sec., if outside that range the +default value is applied. + +This only applies from gpsd release-2.95. + +=item B I + +Pause to apply between attempts of connection to gpsd in seconds (default 5 sec). + +=back + =head2 Plugin C The I plugin provides an RPC interface to submit values to or query @@@ -2733,33 -2641,6 +2733,33 @@@ The B homepage can be found at L< =over 4 +=item B I I + +The B statement sets the address of a server to which to send metrics +via the C function. + +The argument I may be a hostname, an IPv4 address, or an IPv6 address. + +Optionally, B may be specified as a configuration block which supports +the following options: + +=over 4 + +=item B B|B + +Whether to require SSL for outgoing connections. Default: false. + +=item B I + +=item B I + +=item B I + +Filenames specifying SSL certificate and key material to be used with SSL +connections. + +=back + =item B I I The B statement sets the network address to bind to. When multiple @@@ -2777,17 -2658,22 +2777,17 @@@ supports the following options Whether to enable SSL for incoming connections. Default: false. -=item B I +=item B I -=item B I +=item B I -=item B I +=item B I Filenames specifying SSL certificate and key material to be used with SSL connections. =back -=item B I - -Number of threads to start for handling incoming connections. The default -value is B<5>. - =back =head2 Plugin C @@@ -2813,6 -2699,32 +2813,32 @@@ TCP-Port to connect to. Defaults to B<7 =back + =head2 Plugin C + + To collect B information, collectd reads directories + "/sys/devices/system/node/*/hugepages" and + "/sys/kernel/mm/hugepages". + Reading of these directories can be disabled by the following + options (default is enabled). + + =over 4 + + =item B I|I + + If enabled, information will be collected from the hugepage + counters in "/sys/devices/system/node/*/hugepages". + This is used to check the per-node hugepage statistics on + a NUMA system. + + =item B I|I + + If enabled, information will be collected from the hugepage + counters in "/sys/kernel/mm/hugepages". + This can be used on both NUMA and non-NUMA systems to check + the overall hugepage statistics. + + =back + =head2 Plugin C =over 4 @@@ -2849,18 -2761,6 +2875,18 @@@ This will ignore the loopback interface with I and all interfaces with names starting with I followed by at least one digit. +=item B I|I + +When set to I, only interfaces with non-zero traffic will be +reported. Note that the check is done by looking into whether a +package was sent at any time from boot and the corresponding counter +is non-zero. So, if the interface has been sending data in the past +since boot, but not during the reported time-interval, it will still +be reported. + +The default value is I and results in collection of the data +from all interfaces that are selected by B and +B options. =item B I|I @@@ -3115,12 -3015,6 +3141,12 @@@ Defaults to false =back +=head2 Plugin C + +This plugin embeds a Lua interpreter into collectd and provides an interface +to collectd's plugin system. See L for its documentation. + + =head2 Plugin C The C uses mbmon to retrieve temperature, voltage, etc. @@@ -3772,11 -3666,6 +3798,11 @@@ Synopsis Port "3306" MasterStats true ConnectTimeout 10 + SSLKey "/path/to/key.pem" + SSLCert "/path/to/cert.pem" + SSLCA "/path/to/ca.pem" + SSLCAPath "/path/to/cas/" + SSLCipher "DHE-RSA-AES256-SHA" @@@ -3786,20 -3675,12 +3812,20 @@@ SlaveStats true SlaveNotifications true + + + Alias "galera" + Host "localhost" + Socket "/var/run/mysql/mysqld.sock" + WsrepStats true + A B block defines one connection to a MySQL database. It accepts a single argument which specifies the name of the database. None of the other options are required. MySQL will use default values as documented in the -section "mysql_real_connect()" in the B. +"mysql_real_connect()" and "mysql_ssl_set()" sections in the +B. =over 4 @@@ -3864,36 -3745,10 +3890,36 @@@ privileges. See the B documentati If enabled, the plugin sends a notification if the replication slave I/O and / or SQL threads are not running. Defaults to B. +=item B I + + Enable the collection of wsrep plugin statistics, used in Master-Master + replication setups like in MySQL Galera/Percona XtraDB Cluster. + User needs only privileges to execute 'SHOW GLOBAL STATUS' + =item B I Sets the connect timeout for the MySQL client. +=item B I + +If provided, the X509 key in PEM format. + +=item B I + +If provided, the X509 cert in PEM format. + +=item B I + +If provided, the CA file in PEM format (check OpenSSL docs). + +=item B I + +If provided, the CA directory (check OpenSSL docs). + +=item B I + +If provided, the SSL cipher to use. + =back =head2 Plugin C @@@ -6635,14 -6490,6 +6661,14 @@@ from these disks anyway. This is usefu reports disks as asleep because it has not been updated to incorporate support for newer idle states in the ATA spec. +=item B B|B + +A disk's kernel name (e.g., sda) can change from one boot to the next. If this +option is enabled, the C plugin will use the disk's serial number (e.g., +HGST_HUH728080ALE600_2EJ8VH8X) instead of the kernel name as the key for +storing data. This ensures that the data for a given disk will be kept together +even if the kernel name changes. + =back =head2 Plugin C @@@ -7208,7 -7055,7 +7234,7 @@@ port in numeric form =item B I|I If this option is set to I a summary of statistics from all connections -are collectd. This option defaults to I. +are collected. This option defaults to I. =back @@@ -7980,23 -7827,14 +8006,23 @@@ Define which SSL protocol version must attempt to figure out the remote SSL protocol version. See L for more details. -=item B B|B +=item B B|B|B Format of the output to generate. If set to B, will create output that is understood by the I and I plugins. When set to B, will -create output in the I (JSON). +create output in the I (JSON). When set to KAIROSDB +, will create output in the KairosDB format. Defaults to B. +=item B B|B + +Controls whether I are POSTed to this location. Defaults to B. + +=item B B|B + +Controls whether I are POSTed to this location. Defaults to B. + =item B B If set to B, convert counter values to rates. If set to B (the diff --combined src/types.db index cc79af07,ff103d1f..1ab1d7c6 --- a/src/types.db +++ b/src/types.db @@@ -45,7 -45,6 +45,7 @@@ derive value:DERIVE:0: df used:GAUGE:0:1125899906842623, free:GAUGE:0:1125899906842623 df_complex value:GAUGE:0:U df_inodes value:GAUGE:0:U +dilution_of_precision 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 @@@ -92,6 -91,7 +92,7 @@@ hash_collisions value:DERIVE:0: http_request_methods value:DERIVE:0:U http_requests value:DERIVE:0:U http_response_codes value:DERIVE:0:U + hugepages free:GAUGE:0:4294967295, used:GAUGE:0:4294967295 humidity value:GAUGE:0:100 if_collisions value:DERIVE:0:U if_dropped rx:DERIVE:0:U, tx:DERIVE:0:U @@@ -151,7 -151,6 +152,7 @@@ node_stat value:DERIVE:0: node_tx_rate value:GAUGE:0:127 objects value:GAUGE:0:U operations value:DERIVE:0:U +operations_per_second value:GAUGE:0:U packets value:DERIVE:0:U pending_operations value:GAUGE:0:U percent value:GAUGE:0:100.1 @@@ -198,7 -197,6 +199,7 @@@ root_dispersion value:GAUGE:U: route_etx value:GAUGE:0:U route_metric value:GAUGE:0:U routes value:GAUGE:0:U +satellites value:GAUGE:0:U segments value:GAUGE:0:65535 serial_octets rx:DERIVE:0:U, tx:DERIVE:0:U signal_noise value:GAUGE:U:0