From: Sebastian Harl Date: Thu, 11 Aug 2016 20:51:50 +0000 (+0200) Subject: Merge pull request #1876 from octo/issue/1819 X-Git-Tag: collectd-5.6.0~54 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=f0d468892e1c173b226f739be48291981473b4fb;hp=d89ee2e3fb86b7fdd293bff48a31c68aeadd6670 Merge pull request #1876 from octo/issue/1819 grpc plugin: Refactor plugin. --- diff --git a/.gitignore b/.gitignore index d7423895..8154d733 100644 --- a/.gitignore +++ b/.gitignore @@ -81,6 +81,12 @@ bindings/java/org/collectd/java/*.class # lint stuff *.ln +#ide stuff +.vscode + +# cscope stuff +cscope.* + # Unit tests src/daemon/test-suite.log src/tests/ diff --git a/AUTHORS b/AUTHORS index bdffa923..f5f6db0e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -20,13 +20,13 @@ Pierre-Yves Ritschard - Normalization in the CPU plugin. - Relative values in the Load plugin. -Ruben Kerkhof +Ruben Kerkhof - Bugfixes and enhancements in many places all around the project. - - Fedora package. + - Fedora and EPEL packages. Sebastian "tokkee" Harl - Bugfixes and enhancements in many places all around the project. - - gprc plugin. + - grpc plugin. - perl plugin. - postgresql plugin. - users plugin. @@ -219,6 +219,9 @@ Michał Mirosław Mirko Buffoni - Port/Socket selection in the MySQL plugin. +Nicolas Jourden + - gps plugin. + Niki W. Waibel - Initial autotools fixes. - libltdl code. diff --git a/README b/README index 1c3af7a4..f2df12cd 100644 --- a/README +++ b/README @@ -67,6 +67,9 @@ Features - 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. @@ -122,6 +125,9 @@ Features - gmond Receive multicast traffic from Ganglia instances. + - gps + Monitor gps related data through gpsd. + - grpc Receive values over the network using the gRPC framework. @@ -697,6 +703,10 @@ Prerequisites 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. diff --git a/configure.ac b/configure.ac index 15b42d59..8dda7104 100644 --- a/configure.ac +++ b/configure.ac @@ -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) @@ -42,7 +43,9 @@ AC_SYS_LARGEFILE # # 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 @@ -81,7 +84,7 @@ 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 @@ -483,6 +486,7 @@ then #include #include ]) + AC_CHECK_HEADERS([sys/sysmacros.h]) else have_linux_raid_md_u_h="no" fi @@ -745,6 +749,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"]) @@ -784,7 +805,7 @@ AC_HEADER_TIME # # 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 @@ -1350,6 +1371,20 @@ AC_ARG_WITH(useragent, [AS_HELP_STRING([--with-useragent@<:@=AGENT@:>@], [User a # }}} +# --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" @@ -1427,15 +1462,15 @@ if test "x$have_getmntent" = "xc"; then 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 @@ -2250,6 +2285,56 @@ AC_SUBST(GCRYPT_LIBS) AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, test "x$with_libgcrypt" = "xyes") # }}} +# --with-libgps {{{ +with_libgps_cflags="" +with_libgps_ldflags="" +AC_ARG_WITH(libgps, [AS_HELP_STRING([--with-libgps@<:@=PREFIX@:>@], [Path to libgps.])], +[ + if test "x$withval" != "xno" && test "x$withval" != "xyes" + then + with_libgps_cflags="-I$withval/include" + with_libgps_ldflags="-L$withval/lib" + with_libgps="yes" + else + with_libgps="$withval" + fi +], +[ + with_libgps="yes" +]) +if test "x$with_libgps" = "xyes" +then + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $with_libgps_cflags" + + AC_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 + 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") +# }}} + # --with-libgrpc++ {{{ with_libgrpcpp_cppflags="" with_libgrpcpp_ldflags="" @@ -2292,7 +2377,7 @@ if test "x$with_libgrpcpp" = "xyes" then AC_LANG_PUSH(C++) SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$with_libgrpcpp_cppflags $GRPCPP_CFLAGS $CPPFLAGS -std=c++11" + CPPFLAGS="-std=c++11 $with_libgrpcpp_cppflags $GRPCPP_CFLAGS $CPPFLAGS" AC_CHECK_HEADERS([grpc++/grpc++.h], [], [with_libgrpcpp="no ( not found)"] ) @@ -2302,8 +2387,10 @@ 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 @@ -2325,6 +2412,7 @@ then ], [with_libgrpcpp="no (libgrpc++ not found)"] ) + CPPFLAGS="$SAVE_CPPFLAGS" LDFLAGS="$SAVE_LDFLAGS" LIBS="$SAVE_LIBS" AC_LANG_POP(C++) @@ -2361,11 +2449,6 @@ AC_ARG_WITH(libiptc, [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to l 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 @@ -2803,13 +2886,6 @@ AC_ARG_WITH(libmodbus, [AS_HELP_STRING([--with-libmodbus@<:@=PREFIX@:>@], [Path # 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 @@ -3100,10 +3176,6 @@ AC_ARG_WITH(libmnl, [AS_HELP_STRING([--with-libmnl@<:@=PREFIX@:>@], [Path to lib 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 @@ -3639,7 +3711,7 @@ then SAVE_CFLAGS="$CFLAGS" SAVE_LIBS="$LIBS" dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string) - PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e 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" @@ -3996,124 +4068,74 @@ AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LDFLAGS]) AC_SUBST([BUILD_WITH_LIBPROTOBUF_C_LIBS]) # }}} -# --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" -then - AC_PATH_PROG([PYTHON], [python]) - if test "x$PYTHON" = "x" - then - with_python="no (interpreter not found)" - else - with_python_prog="$PYTHON" - fi -fi +# --with-libpython {{{ +AC_ARG_VAR([LIBPYTHON_CPPFLAGS], [Preprocessor flags for libpython]) +AC_ARG_VAR([LIBPYTHON_LDFLAGS], [Linker flags for libpython]) +AC_ARG_VAR([LIBPYTHON_LIBS], [Libraries for libpython]) -if test "x$with_python" = "xyes" -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 -fi - -if test "x$with_python" = "xyes" -then - CPPFLAGS="-I$python_include_path $CPPFLAGS" - AC_CHECK_HEADERS(Python.h, - [with_python="yes"], - [with_python="no ('Python.h' not found)"]) -fi - -if test "x$with_python" = "xyes" -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 -fi - -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=$? - - 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="" @@ -4496,74 +4518,13 @@ fi 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 {{{ @@ -4591,23 +4552,16 @@ AC_ARG_WITH(libstatgrab, [AS_HELP_STRING([--with-libstatgrab@<:@=PREFIX@:>@], [P 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" \ @@ -4906,13 +4860,6 @@ fi # 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 @@ -5234,13 +5181,6 @@ AC_ARG_WITH(libvarnish, [AS_HELP_STRING([--with-libvarnish@<:@=PREFIX@:>@], [Pat # 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 @@ -5300,23 +5240,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 @@ -5415,17 +5352,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]) @@ -5693,6 +5619,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" @@ -5702,6 +5629,7 @@ plugin_entropy="no" plugin_ethstat="no" plugin_fhcount="no" plugin_fscache="no" +plugin_gps="no" plugin_grpc="no" plugin_interface="no" plugin_ipmi="no" @@ -5717,6 +5645,7 @@ plugin_perl="no" plugin_pinba="no" plugin_processes="no" plugin_protocols="no" +plugin_python="no" plugin_serial="no" plugin_smart="no" plugin_swap="no" @@ -5778,6 +5707,11 @@ then 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" @@ -5989,6 +5923,11 @@ 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" @@ -6039,6 +5978,11 @@ then 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" @@ -6120,6 +6064,7 @@ AC_PLUGIN([conntrack], [$plugin_conntrack], [nf_conntrack statis 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]) @@ -6137,6 +6082,7 @@ AC_PLUGIN([fhcount], [$plugin_fhcount], [File handles statis AC_PLUGIN([filecount], [yes], [Count files in directories]) AC_PLUGIN([fscache], [$plugin_fscache], [fscache statistics]) AC_PLUGIN([gmond], [$with_libganglia], [Ganglia plugin]) +AC_PLUGIN([gps], [$plugin_gps], [GPS plugin]) AC_PLUGIN([grpc], [$plugin_grpc], [gRPC plugin]) AC_PLUGIN([hddtemp], [yes], [Query hddtempd]) AC_PLUGIN([interface], [$plugin_interface], [Interface traffic statistics]) @@ -6192,7 +6138,7 @@ AC_PLUGIN([postgresql], [$with_libpq], [PostgreSQL database 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]) @@ -6456,6 +6402,7 @@ AC_MSG_RESULT([ libdbi . . . . . . . $with_libdbi]) AC_MSG_RESULT([ libesmtp . . . . . . $with_libesmtp]) AC_MSG_RESULT([ libganglia . . . . . $with_libganglia]) AC_MSG_RESULT([ libgcrypt . . . . . . $with_libgcrypt]) +AC_MSG_RESULT([ libgps . . . . . . . $with_libgps]) AC_MSG_RESULT([ libgrpc++ . . . . . . $with_libgrpcpp]) AC_MSG_RESULT([ libhal . . . . . . . $with_libhal]) AC_MSG_RESULT([ libhiredis . . . . . $with_libhiredis]) @@ -6486,6 +6433,7 @@ 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]) @@ -6506,7 +6454,6 @@ 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 . . . . . . $have_protoc3]) -AC_MSG_RESULT([ python . . . . . . . $with_python]) AC_MSG_RESULT() AC_MSG_RESULT([ Features:]) AC_MSG_RESULT([ daemon mode . . . . . $enable_daemon]) @@ -6533,6 +6480,7 @@ AC_MSG_RESULT([ conntrack . . . . . . $enable_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]) @@ -6550,6 +6498,7 @@ AC_MSG_RESULT([ fhcount . . . . . . . $enable_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([ interface . . . . . . $enable_interface]) diff --git a/contrib/examples/myplugin.c b/contrib/examples/myplugin.c index 9539062c..e1b89f6c 100644 --- a/contrib/examples/myplugin.c +++ b/contrib/examples/myplugin.c @@ -39,6 +39,7 @@ #endif /* ! HAVE_CONFIG */ #include + #include #include diff --git a/contrib/redhat/collectd.spec b/contrib/redhat/collectd.spec index 5b018f8a..355c9e3d 100644 --- a/contrib/redhat/collectd.spec +++ b/contrib/redhat/collectd.spec @@ -53,6 +53,7 @@ %define with_contextswitch 0%{!?_without_contextswitch:1} %define with_cpu 0%{!?_without_cpu:1} %define with_cpufreq 0%{!?_without_cpufreq:1} +%define with_cpusleep 0%{!?_without_cpusleep:1} %define with_csv 0%{!?_without_csv:1} %define with_curl 0%{!?_without_curl:1} %define with_curl_json 0%{!?_without_curl_json:1} @@ -70,6 +71,7 @@ %define with_filecount 0%{!?_without_filecount:1} %define with_fscache 0%{!?_without_fscache:1} %define with_gmond 0%{!?_without_gmond:1} +%define with_gps 0%{!?_without_gps:1} %define with_hddtemp 0%{!?_without_hddtemp:1} %define with_interface 0%{!?_without_interface:1} %define with_ipc 0%{!?_without_ipc:1} @@ -214,6 +216,8 @@ # Plugins not buildable on RHEL < 7 %if 0%{?rhel} && 0%{?rhel} < 7 +%define with_cpusleep 0 +%define with_gps 0 %define with_mqtt 0 %define with_rrdcached 0 %define with_xmms 0 @@ -416,6 +420,16 @@ The gmond plugin subscribes to a Multicast group to receive data from gmond, the client daemon of the Ganglia project. %endif +%if %{with_gps} +%package gps +Summary: GPS plugin for collectd +Group: System Environment/Daemons +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: gpsd-devel +%description gps +This plugin monitor gps related data through gpsd. +%endif + %if %{with_grpc} %package grpc Summary: GRPC plugin for collectd @@ -976,6 +990,12 @@ Collectd utilities %define _with_cpufreq --disable-cpufreq %endif +%if %{with_cpusleep} +%define _with_cpusleep --enable-cpusleep +%else +%define _with_cpusleep --disable-cpusleep +%endif + %if %{with_csv} %define _with_csv --enable-csv %else @@ -1084,6 +1104,12 @@ Collectd utilities %define _with_gmond --disable-gmond %endif +%if %{with_gps} +%define _with_gps --enable-gps +%else +%define _with_gps --disable-gps +%endif + %if %{with_grpc} %define _with_grpc --enable-grpc %else @@ -1387,6 +1413,7 @@ Collectd utilities %if %{with_python} %if 0%{?rhel} && 0%{?rhel} < 6 %define _with_python --enable-python --with-python=%{_bindir}/python2.6 +%define _python_config PYTHON_CONFIG="%{_bindir}/python2.6-config" %else %define _with_python --enable-python %endif @@ -1665,6 +1692,7 @@ Collectd utilities %endif %configure CFLAGS="%{optflags} -DLT_LAZY_OR_NOW=\"RTLD_LAZY|RTLD_GLOBAL\"" \ + %{?_python_config} \ --disable-static \ --without-included-ltdl \ --enable-all-plugins=yes \ @@ -1694,6 +1722,7 @@ Collectd utilities %{?_with_conntrack} \ %{?_with_contextswitch} \ %{?_with_cpufreq} \ + %{?_with_cpusleep} \ %{?_with_cpu} \ %{?_with_csv} \ %{?_with_curl_json} \ @@ -1712,6 +1741,7 @@ Collectd utilities %{?_with_filecount} \ %{?_with_fscache} \ %{?_with_gmond} \ + %{?_with_gps} \ %{?_with_grpc} \ %{?_with_hddtemp} \ %{?_with_interface} \ @@ -1962,6 +1992,9 @@ fi %if %{with_cpufreq} %{_libdir}/%{name}/cpufreq.so %endif +%if %{with_cpusleep} +%{_libdir}/%{name}/cpusleep.so +%endif %if %{with_csv} %{_libdir}/%{name}/csv.so %endif @@ -2233,6 +2266,11 @@ fi %{_libdir}/%{name}/gmond.so %endif +%if %{with_gps} +%files gps +%{_libdir}/%{name}/gps.so +%endif + %if %{with_grpc} %files grpc %{_libdir}/%{name}/grpc.so diff --git a/src/Makefile.am b/src/Makefile.am index a4ca01e7..12c7730c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 @@ -141,11 +156,10 @@ pkglib_LTLIBRARIES += amqp.la 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 @@ -279,6 +293,12 @@ cpufreq_la_SOURCES = cpufreq.c cpufreq_la_LDFLAGS = $(PLUGIN_LDFLAGS) endif +if BUILD_PLUGIN_CPUSLEEP +pkglib_LTLIBRARIES += cpusleep.la +cpusleep_la_SOURCES = cpusleep.c +cpusleep_la_LDFLAGS = $(PLUGIN_LDFLAGS) +endif + if BUILD_PLUGIN_CSV pkglib_LTLIBRARIES += csv.la csv_la_SOURCES = csv.c @@ -422,6 +442,14 @@ gmond_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(GANGLIA_LDFLAGS) gmond_la_LIBADD = $(GANGLIA_LIBS) endif +if BUILD_PLUGIN_GPS +pkglib_LTLIBRARIES += gps.la +gps_la_SOURCES = gps.c +gps_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBGPS_CFLAGS) +gps_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBGPS_LDFLAGS) +gps_la_LIBADD = -lpthread $(BUILD_WITH_LIBGPS_LIBS) +endif + if BUILD_PLUGIN_GRPC pkglib_LTLIBRARIES += grpc.la grpc_la_SOURCES = grpc.cc @@ -828,6 +856,10 @@ perl_la_SOURCES = perl.c # Despite C99 providing the "bool" type thru stdbool.h, Perl defines its own # version of that type if HAS_BOOL is not defined... *sigh* perl_la_CPPFLAGS = $(AM_CPPFLAGS) -DHAS_BOOL=1 +# Despite off_t being 64 bit wide on 64 bit platforms, Perl insist on using +# off64_t which is only exposed when _LARGEFILE64_SOURCE is defined... *sigh* +# On older platforms we also need _REENTRANT. _GNU_SOURCE sets both of these. +perl_la_CPPFLAGS += -D_GNU_SOURCE perl_la_CFLAGS = $(AM_CFLAGS) \ $(PERL_CFLAGS) \ -DXS_VERSION=\"$(VERSION)\" -DVERSION=\"$(VERSION)\" @@ -883,13 +915,11 @@ endif if BUILD_PLUGIN_PYTHON pkglib_LTLIBRARIES += python.la python_la_SOURCES = python.c pyconfig.c pyvalues.c cpython.h -python_la_CPPFLAGS = $(AM_CPPFLAGS) $(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 @@ -957,9 +987,9 @@ endif 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 @@ -1213,31 +1243,29 @@ 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 + 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 \ utils_format_kairosdb.c utils_format_kairosdb.h -write_http_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBCURL_CFLAGS) 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 diff --git a/src/aggregation.c b/src/aggregation.c index 92f34bc3..b9db500b 100644 --- a/src/aggregation.c +++ b/src/aggregation.c @@ -483,9 +483,7 @@ static void agg_lookup_free_obj_callback (void *user_obj) /* {{{ */ static int agg_config_handle_group_by (oconfig_item_t const *ci, /* {{{ */ aggregation_t *agg) { - int i; - - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { char const *value; @@ -521,7 +519,6 @@ static int agg_config_aggregation (oconfig_item_t *ci) /* {{{ */ aggregation_t *agg; _Bool is_valid; int status; - int i; agg = calloc (1, sizeof (*agg)); if (agg == NULL) @@ -538,7 +535,7 @@ static int agg_config_aggregation (oconfig_item_t *ci) /* {{{ */ sstrncpy (agg->ident.type_instance, "/.*/", sizeof (agg->ident.type_instance)); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -676,8 +673,6 @@ static int agg_config_aggregation (oconfig_item_t *ci) /* {{{ */ static int agg_config (oconfig_item_t *ci) /* {{{ */ { - int i; - pthread_mutex_lock (&agg_instance_list_lock); if (lookup == NULL) @@ -694,7 +689,7 @@ static int agg_config (oconfig_item_t *ci) /* {{{ */ } } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -712,7 +707,6 @@ static int agg_config (oconfig_item_t *ci) /* {{{ */ static int agg_read (void) /* {{{ */ { - agg_instance_t *this; cdtime_t t; int success; @@ -733,7 +727,7 @@ static int agg_read (void) /* {{{ */ return (0); } - for (this = agg_instance_list_head; this != NULL; this = this->next) + for (agg_instance_t *this = agg_instance_list_head; this != NULL; this = this->next) { int status; diff --git a/src/amqp.c b/src/amqp.c index 9bc3175c..89f051e8 100644 --- a/src/amqp.c +++ b/src/amqp.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_cmd_putval.h" @@ -527,13 +528,11 @@ static int camqp_connect (camqp_config_t *conf) /* {{{ */ static int camqp_shutdown (void) /* {{{ */ { - size_t i; - DEBUG ("amqp plugin: Shutting down %zu subscriber threads.", subscriber_threads_num); subscriber_threads_running = 0; - for (i = 0; i < subscriber_threads_num; i++) + for (size_t i = 0; i < subscriber_threads_num; i++) { /* FIXME: Sending a signal is not very elegant here. Maybe find out how * to use a timeout in the thread and check for the variable in regular @@ -821,7 +820,6 @@ static int camqp_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ } else { - size_t i; ssnprintf (routing_key, sizeof (routing_key), "collectd/%s/%s/%s/%s/%s", vl->host, vl->plugin, vl->plugin_instance, @@ -829,7 +827,7 @@ static int camqp_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ /* Switch slashes (the only character forbidden by collectd) and dots * (the separation character used by AMQP). */ - for (i = 0; routing_key[i] != 0; i++) + for (size_t i = 0; routing_key[i] != 0; i++) { if (routing_key[i] == '.') routing_key[i] = '/'; @@ -919,7 +917,6 @@ static int camqp_config_connection (oconfig_item_t *ci, /* {{{ */ { camqp_config_t *conf; int status; - int i; conf = calloc (1, sizeof (*conf)); if (conf == NULL) @@ -966,7 +963,7 @@ static int camqp_config_connection (oconfig_item_t *ci, /* {{{ */ return (status); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -1099,9 +1096,7 @@ static int camqp_config_connection (oconfig_item_t *ci, /* {{{ */ static int camqp_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/apache.c b/src/apache.c index afdeda4e..650d6788 100644 --- a/src/apache.c +++ b/src/apache.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -174,7 +175,6 @@ static size_t apache_header_callback (void *buf, size_t size, size_t nmemb, static int config_add (oconfig_item_t *ci) { apache_t *st; - int i; int status; st = calloc (1, sizeof (*st)); @@ -194,7 +194,7 @@ static int config_add (oconfig_item_t *ci) } assert (st->name != NULL); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -271,9 +271,8 @@ static int config_add (oconfig_item_t *ci) static int config (oconfig_item_t *ci) { int status = 0; - int i; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -464,8 +463,7 @@ static void submit_scoreboard (char *buf, apache_t *st) long long response_start = 0LL; long long response_end = 0LL; - int i; - for (i = 0; buf[i] != '\0'; i++) + for (int i = 0; buf[i] != '\0'; i++) { if (buf[i] == '.') open++; else if (buf[i] == '_') waiting++; diff --git a/src/apcups.c b/src/apcups.c index 84249339..cc203578 100644 --- a/src/apcups.c +++ b/src/apcups.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" /* rrd_update_file */ #include "plugin.h" /* plugin_register, plugin_submit */ #include "configfile.h" /* cf_register */ @@ -115,13 +116,14 @@ static int net_open (char const *node, char const *service) { int sd; int status; - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_return; struct addrinfo *ai_list; /* TODO: Change this to `AF_UNSPEC' if apcupsd can handle IPv6 */ - ai_hints.ai_family = AF_INET; - ai_hints.ai_socktype = SOCK_STREAM; + struct addrinfo ai_hints = { + .ai_family = AF_INET, + .ai_socktype = SOCK_STREAM + }; status = getaddrinfo (node, service, &ai_hints, &ai_return); if (status != 0) @@ -379,10 +381,9 @@ static int apc_query_server (char const *node, char const *service, static int apcups_config (oconfig_item_t *ci) { - int i; _Bool persistent_conn_set = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/apple_sensors.c b/src/apple_sensors.c index 7ed2016f..48fbcb91 100644 --- a/src/apple_sensors.c +++ b/src/apple_sensors.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -113,8 +114,6 @@ static int as_read (void) char inst[128]; int value_int; double value_double; - int i; - if (!io_master_port || (io_master_port == MACH_PORT_NULL)) return (-1); @@ -169,7 +168,7 @@ static int as_read (void) kCFStringEncodingASCII)) continue; inst[sizeof (inst) - 1] = '\0'; - for (i = 0; i < 128; i++) + for (int i = 0; i < 128; i++) { if (inst[i] == '\0') break; diff --git a/src/aquaero.c b/src/aquaero.c index 5db988e6..81a4efd4 100644 --- a/src/aquaero.c +++ b/src/aquaero.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -33,9 +34,7 @@ static char *conf_device = NULL; static int aquaero_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -87,9 +86,8 @@ static void aquaero_submit_array (const char *type, const char *type_instance_prefix, double *value_array, int len) { char type_instance[DATA_MAX_NAME_LEN]; - int i; - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { if (value_array[i] == AQ5_FLOAT_UNDEF) continue; @@ -106,7 +104,6 @@ static int aquaero_read (void) aq5_settings_t aq_sett; char *err_msg = NULL; char type_instance[DATA_MAX_NAME_LEN]; - int i; if (libaquaero5_poll(conf_device, &aq_data, &err_msg) < 0) { @@ -147,7 +144,7 @@ static int aquaero_read (void) AQ5_NUM_OTHER_SENSORS); /* Fans */ - for (i = 0; i < AQ5_NUM_FAN; i++) + for (int i = 0; i < AQ5_NUM_FAN; i++) { if ((aq_sett.fan_data_source[i] == NONE) || (aq_data.fan_vrm_temp[i] != AQ5_FLOAT_UNDEF)) diff --git a/src/ascent.c b/src/ascent.c index a947bce9..20fef656 100644 --- a/src/ascent.c +++ b/src/ascent.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -181,20 +182,19 @@ static size_t ascent_curl_callback (void *buf, size_t size, size_t nmemb, /* {{{ static int ascent_submit_players (player_stats_t *ps) /* {{{ */ { - size_t i; gauge_t value; - for (i = 0; i < RACES_LIST_LENGTH; i++) + for (size_t i = 0; i < RACES_LIST_LENGTH; i++) if (races_list[i] != NULL) ascent_submit_gauge ("by-race", "players", races_list[i], (gauge_t) ps->races[i]); - for (i = 0; i < CLASSES_LIST_LENGTH; i++) + for (size_t i = 0; i < CLASSES_LIST_LENGTH; i++) if (classes_list[i] != NULL) ascent_submit_gauge ("by-class", "players", classes_list[i], (gauge_t) ps->classes[i]); - for (i = 0; i < GENDERS_LIST_LENGTH; i++) + for (size_t i = 0; i < GENDERS_LIST_LENGTH; i++) if (genders_list[i] != NULL) ascent_submit_gauge ("by-gender", "players", genders_list[i], (gauge_t) ps->genders[i]); @@ -328,9 +328,7 @@ static int ascent_xml_read_int (xmlDoc *doc, xmlNode *node, /* {{{ */ static int ascent_xml_sessions_plr (xmlDoc *doc, xmlNode *node, /* {{{ */ player_info_t *pi) { - xmlNode *child; - - for (child = node->xmlChildrenNode; child != NULL; child = child->next) + for (xmlNode *child = node->xmlChildrenNode; child != NULL; child = child->next) { if ((xmlStrcmp ((const xmlChar *) "comment", child->name) == 0) || (xmlStrcmp ((const xmlChar *) "text", child->name) == 0)) @@ -364,12 +362,11 @@ static int ascent_xml_sessions_plr (xmlDoc *doc, xmlNode *node, /* {{{ */ static int ascent_xml_sessions (xmlDoc *doc, xmlNode *node) /* {{{ */ { - xmlNode *child; player_stats_t ps = { .level_sum = 0 }; - for (child = node->xmlChildrenNode; child != NULL; child = child->next) + for (xmlNode *child = node->xmlChildrenNode; child != NULL; child = child->next) { if ((xmlStrcmp ((const xmlChar *) "comment", child->name) == 0) || (xmlStrcmp ((const xmlChar *) "text", child->name) == 0)) @@ -396,9 +393,7 @@ static int ascent_xml_sessions (xmlDoc *doc, xmlNode *node) /* {{{ */ static int ascent_xml_status (xmlDoc *doc, xmlNode *node) /* {{{ */ { - xmlNode *child; - - for (child = node->xmlChildrenNode; child != NULL; child = child->next) + for (xmlNode *child = node->xmlChildrenNode; child != NULL; child = child->next) { if ((xmlStrcmp ((const xmlChar *) "comment", child->name) == 0) || (xmlStrcmp ((const xmlChar *) "text", child->name) == 0)) @@ -438,7 +433,6 @@ static int ascent_xml (const char *data) /* {{{ */ { xmlDoc *doc; xmlNode *cur; - xmlNode *child; #if 0 doc = xmlParseMemory (data, strlen (data), @@ -469,7 +463,7 @@ static int ascent_xml (const char *data) /* {{{ */ return (-1); } - for (child = cur->xmlChildrenNode; child != NULL; child = child->next) + for (xmlNode *child = cur->xmlChildrenNode; child != NULL; child = child->next) { if ((xmlStrcmp ((const xmlChar *) "comment", child->name) == 0) || (xmlStrcmp ((const xmlChar *) "text", child->name) == 0)) diff --git a/src/barometer.c b/src/barometer.c index f14ac049..fba3450a 100644 --- a/src/barometer.c +++ b/src/barometer.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_cache.h" #include "plugin.h" @@ -407,7 +408,6 @@ static int get_reference_temperature(double * result) gauge_t * values = NULL; /**< rate values */ size_t values_num = 0; /**< number of rate values */ - size_t i; gauge_t values_history[REF_TEMP_AVG_NUM]; @@ -445,7 +445,7 @@ static int get_reference_temperature(double * result) list->initialized = 1; list->num_values = values_num; - for(i=0; inum_values; ++i) + for(size_t i=0; inum_values; ++i) { DEBUG ("barometer: get_reference_temperature - history %zu: %lf", i, values_history[i]); @@ -499,7 +499,7 @@ static int get_reference_temperature(double * result) continue; } - for(i=0; ichildren_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/bind.c b/src/bind.c index d46d4967..7fda0349 100644 --- a/src/bind.c +++ b/src/bind.c @@ -36,6 +36,7 @@ #endif /* STRPTIME_NEEDS_STANDARDS */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -309,12 +310,11 @@ static int bind_xml_table_callback (const char *name, value_t value, /* {{{ */ time_t current_time, void *user_data) { translation_table_ptr_t *table = (translation_table_ptr_t *) user_data; - size_t i; if (table == NULL) return (-1); - for (i = 0; i < table->table_length; i++) + for (size_t i = 0; i < table->table_length; i++) { if (strcmp (table->table[i].xml_name, name) != 0) continue; @@ -490,7 +490,6 @@ static int bind_parse_generic_name_value (const char *xpath_expression, /* {{{ * { xmlXPathObject *xpathObj = NULL; int num_entries; - int i; xpathObj = xmlXPathEvalExpression(BAD_CAST xpath_expression, xpathCtx); if (xpathObj == NULL) @@ -502,19 +501,18 @@ static int bind_parse_generic_name_value (const char *xpath_expression, /* {{{ * num_entries = 0; /* Iterate over all matching nodes. */ - for (i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) + for (int i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) { xmlNode *name_node = NULL; xmlNode *counter = NULL; xmlNode *parent; - xmlNode *child; parent = xpathObj->nodesetval->nodeTab[i]; DEBUG ("bind plugin: bind_parse_generic_name_value: parent->name = %s;", (char *) parent->name); /* Iterate over all child nodes. */ - for (child = parent->xmlChildrenNode; + for (xmlNode *child = parent->xmlChildrenNode; child != NULL; child = child->next) { @@ -577,7 +575,6 @@ static int bind_parse_generic_value_list (const char *xpath_expression, /* {{{ * { xmlXPathObject *xpathObj = NULL; int num_entries; - int i; xpathObj = xmlXPathEvalExpression(BAD_CAST xpath_expression, xpathCtx); if (xpathObj == NULL) @@ -589,12 +586,10 @@ static int bind_parse_generic_value_list (const char *xpath_expression, /* {{{ * num_entries = 0; /* Iterate over all matching nodes. */ - for (i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) + for (int i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) { - xmlNode *child; - /* Iterate over all child nodes. */ - for (child = xpathObj->nodesetval->nodeTab[i]->xmlChildrenNode; + for (xmlNode *child = xpathObj->nodesetval->nodeTab[i]->xmlChildrenNode; child != NULL; child = child->next) { @@ -648,7 +643,6 @@ static int bind_parse_generic_name_attr_value_list (const char *xpath_expression { xmlXPathObject *xpathObj = NULL; int num_entries; - int i; xpathObj = xmlXPathEvalExpression(BAD_CAST xpath_expression, xpathCtx); if (xpathObj == NULL) @@ -660,12 +654,10 @@ static int bind_parse_generic_name_attr_value_list (const char *xpath_expression num_entries = 0; /* Iterate over all matching nodes. */ - for (i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) + for (int i = 0; xpathObj->nodesetval && (i < xpathObj->nodesetval->nodeNr); i++) { - xmlNode *child; - /* Iterate over all child nodes. */ - for (child = xpathObj->nodesetval->nodeTab[i]->xmlChildrenNode; + for (xmlNode *child = xpathObj->nodesetval->nodeTab[i]->xmlChildrenNode; child != NULL; child = child->next) { @@ -713,7 +705,6 @@ static int bind_xml_stats_handle_zone (int version, xmlDoc *doc, /* {{{ */ { xmlXPathObject *path_obj; char *zone_name = NULL; - int i; size_t j; if (version >= 3) @@ -737,7 +728,7 @@ static int bind_xml_stats_handle_zone (int version, xmlDoc *doc, /* {{{ */ return (-1); } - for (i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); i++) + for (int i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); i++) { zone_name = (char *) xmlNodeListGetString (doc, path_obj->nodesetval->nodeTab[i]->xmlChildrenNode, 1); @@ -816,7 +807,6 @@ static int bind_xml_stats_search_zones (int version, xmlDoc *doc, /* {{{ */ { xmlXPathObject *zone_nodes = NULL; xmlXPathContext *zone_path_context; - int i; zone_path_context = xmlXPathNewContext (doc); if (zone_path_context == NULL) @@ -833,7 +823,7 @@ static int bind_xml_stats_search_zones (int version, xmlDoc *doc, /* {{{ */ return (-1); } - for (i = 0; i < zone_nodes->nodesetval->nodeNr; i++) + for (int i = 0; i < zone_nodes->nodesetval->nodeNr; i++) { node = zone_nodes->nodesetval->nodeTab[i]; assert (node != NULL); @@ -854,7 +844,6 @@ static int bind_xml_stats_handle_view (int version, xmlDoc *doc, /* {{{ */ { char *view_name = NULL; cb_view_t *view; - int i; size_t j; if (version == 3) @@ -886,7 +875,7 @@ static int bind_xml_stats_handle_view (int version, xmlDoc *doc, /* {{{ */ return (-1); } - for (i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); i++) + for (int i = 0; path_obj->nodesetval && (i < path_obj->nodesetval->nodeNr); i++) { view_name = (char *) xmlNodeListGetString (doc, path_obj->nodesetval->nodeTab[i]->xmlChildrenNode, 1); @@ -1009,7 +998,6 @@ static int bind_xml_stats_search_views (int version, xmlDoc *doc, /* {{{ */ { xmlXPathObject *view_nodes = NULL; xmlXPathContext *view_path_context; - int i; view_path_context = xmlXPathNewContext (doc); if (view_path_context == NULL) @@ -1026,7 +1014,7 @@ static int bind_xml_stats_search_views (int version, xmlDoc *doc, /* {{{ */ return (-1); } - for (i = 0; i < view_nodes->nodesetval->nodeNr; i++) + for (int i = 0; i < view_nodes->nodesetval->nodeNr; i++) { xmlNode *node; @@ -1440,7 +1428,6 @@ static int bind_xml (const char *data) /* {{{ */ xmlXPathContext *xpathCtx = NULL; xmlXPathObject *xpathObj = NULL; int ret = -1; - int i; doc = xmlParseMemory (data, strlen (data)); if (doc == NULL) @@ -1470,7 +1457,7 @@ static int bind_xml (const char *data) /* {{{ */ } else { - for (i = 0; i < xpathObj->nodesetval->nodeNr; i++) + for (int i = 0; i < xpathObj->nodesetval->nodeNr; i++) { xmlNode *node; char *attr_version; @@ -1532,7 +1519,7 @@ static int bind_xml (const char *data) /* {{{ */ return (-1); } - for (i = 0; i < xpathObj->nodesetval->nodeNr; i++) + for (int i = 0; i < xpathObj->nodesetval->nodeNr; i++) { xmlNode *node; char *attr_version; @@ -1635,7 +1622,6 @@ static int bind_config_add_view_zone (cb_view_t *view, /* {{{ */ static int bind_config_add_view (oconfig_item_t *ci) /* {{{ */ { cb_view_t *tmp; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -1667,7 +1653,7 @@ static int bind_config_add_view (oconfig_item_t *ci) /* {{{ */ return (-1); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -1692,9 +1678,7 @@ static int bind_config_add_view (oconfig_item_t *ci) /* {{{ */ static int bind_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/ceph.c b/src/ceph.c index 34aa7b16..5248a1ac 100644 --- a/src/ceph.c +++ b/src/ceph.c @@ -27,6 +27,7 @@ #define _BSD_SOURCE #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -37,6 +38,9 @@ #if HAVE_YAJL_YAJL_VERSION_H #include #endif +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif #include #include @@ -269,14 +273,13 @@ ceph_cb_number(void *ctx, const char *number_val, yajl_len_t number_len) char buffer[number_len+1]; char key[2 * DATA_MAX_NAME_LEN]; _Bool latency_type = 0; - size_t i; int status; key[0] = '\0'; memcpy(buffer, number_val, number_len); buffer[sizeof(buffer) - 1] = '\0'; - for (i = 0; i < state->depth; i++) + for (size_t i = 0; i < state->depth; i++) { if (state->stack[i] == NULL) continue; @@ -422,8 +425,7 @@ static void ceph_daemon_print(const struct ceph_daemon *d) static void ceph_daemons_print(void) { - int i; - for(i = 0; i < g_num_daemons; ++i) + for(int i = 0; i < g_num_daemons; ++i) { ceph_daemon_print(g_daemons[i]); } @@ -431,15 +433,15 @@ static void ceph_daemons_print(void) static void ceph_daemon_free(struct ceph_daemon *d) { - int i = 0; - for(; i < d->last_idx; i++) + for(int i = 0; i < d->last_idx; i++) { sfree(d->last_poll_data[i]); } sfree(d->last_poll_data); d->last_poll_data = NULL; d->last_idx = 0; - for(i = 0; i < d->ds_num; i++) + + for(int i = 0; i < d->ds_num; i++) { sfree(d->ds_names[i]); } @@ -548,10 +550,9 @@ static _Bool has_suffix (char const *str, char const *suffix) /* count_parts returns the number of elements a "foo.bar.baz" style key has. */ static size_t count_parts (char const *key) { - char const *ptr; size_t parts_num = 0; - for (ptr = key; ptr != NULL; ptr = strchr (ptr + 1, '.')) + for (const char *ptr = key; ptr != NULL; ptr = strchr (ptr + 1, '.')) parts_num++; return parts_num; @@ -683,7 +684,7 @@ static int cc_handle_bool(struct oconfig_item_s *item, int *dest) static int cc_add_daemon_config(oconfig_item_t *ci) { - int ret, i; + int ret; struct ceph_daemon *nd, cd = { 0 }; struct ceph_daemon **tmp; @@ -700,7 +701,7 @@ static int cc_add_daemon_config(oconfig_item_t *ci) return ret; } - for(i=0; i < ci->children_num; i++) + for(int i=0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -757,9 +758,9 @@ static int cc_add_daemon_config(oconfig_item_t *ci) static int ceph_config(oconfig_item_t *ci) { - int ret, i; + int ret; - for(i = 0; i < ci->children_num; ++i) + for(int i = 0; i < ci->children_num; ++i) { oconfig_item_t *child = ci->children + i; if(strcasecmp("Daemon", child->key) == 0) @@ -896,8 +897,7 @@ static int update_last(struct ceph_daemon *d, const char *ds_n, int index, */ static int backup_search_for_last_avg(struct ceph_daemon *d, const char *ds_n) { - int i = 0; - for(; i < d->last_idx; i++) + for(int i = 0; i < d->last_idx; i++) { if(strcmp(d->last_poll_data[i]->ds_name, ds_n) == 0) { @@ -957,12 +957,11 @@ static double get_last_avg(struct ceph_daemon *d, const char *ds_n, int index, */ static uint32_t backup_search_for_type(struct ceph_daemon *d, char *ds_name) { - int idx = 0; - for(; idx < d->ds_num; idx++) + for(int i = 0; i < d->ds_num; i++) { - if(strcmp(d->ds_names[idx], ds_name) == 0) + if(strcmp(d->ds_names[i], ds_name) == 0) { - return d->ds_types[idx]; + return d->ds_types[i]; } } return DSET_TYPE_UNFOUND; @@ -1457,7 +1456,7 @@ static int milli_diff(const struct timeval *t1, const struct timeval *t2) */ static int cconn_main_loop(uint32_t request_type) { - int i, ret, some_unreachable = 0; + int ret, some_unreachable = 0; struct timeval end_tv; struct cconn io_array[g_num_daemons]; @@ -1465,7 +1464,7 @@ static int cconn_main_loop(uint32_t request_type) /* create cconn array */ memset(io_array, 0, sizeof(io_array)); - for(i = 0; i < g_num_daemons; ++i) + for(int i = 0; i < g_num_daemons; ++i) { io_array[i].d = g_daemons[i]; io_array[i].request_type = request_type; @@ -1484,7 +1483,7 @@ static int cconn_main_loop(uint32_t request_type) struct pollfd fds[g_num_daemons]; memset(fds, 0, sizeof(fds)); nfds = 0; - for(i = 0; i < g_num_daemons; ++i) + for(int i = 0; i < g_num_daemons; ++i) { struct cconn *io = io_array + i; ret = cconn_prepare(io, fds + nfds); @@ -1522,7 +1521,7 @@ static int cconn_main_loop(uint32_t request_type) ERROR("ceph plugin: poll(2) error: %d", ret); goto done; } - for(i = 0; i < nfds; ++i) + for(int i = 0; i < nfds; ++i) { struct cconn *io = polled_io_array[i]; int revents = fds[i].revents; @@ -1553,7 +1552,7 @@ static int cconn_main_loop(uint32_t request_type) } } } - done: for(i = 0; i < g_num_daemons; ++i) + done: for(int i = 0; i < g_num_daemons; ++i) { cconn_close(io_array + i); } @@ -1577,6 +1576,22 @@ static int ceph_read(void) static int ceph_init(void) { int ret; + +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_DAC_OVERRIDE) + if (check_capability (CAP_DAC_OVERRIDE) != 0) + { + if (getuid () == 0) + WARNING ("ceph plugin: Running collectd as root, but the " + "CAP_DAC_OVERRIDE capability is missing. The plugin's read " + "function will probably fail. Is your init system dropping " + "capabilities?"); + else + WARNING ("ceph plugin: collectd doesn't have the CAP_DAC_OVERRIDE " + "capability. If you don't want to run collectd as root, try running " + "\"setcap cap_dac_override=ep\" on the collectd binary."); + } +#endif + ceph_daemons_print(); ret = cconn_main_loop(ASOK_REQ_VERSION); @@ -1586,8 +1601,7 @@ static int ceph_init(void) static int ceph_shutdown(void) { - int i; - for(i = 0; i < g_num_daemons; ++i) + for(int i = 0; i < g_num_daemons; ++i) { ceph_daemon_free(g_daemons[i]); } diff --git a/src/ceph_test.c b/src/ceph_test.c index 199d40ec..91f084f7 100644 --- a/src/ceph_test.c +++ b/src/ceph_test.c @@ -169,7 +169,7 @@ DEF_TEST(parse_keys) for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { - char got[DATA_MAX_NAME_LEN]; + char got[64]; CHECK_ZERO (parse_keys (got, sizeof (got), cases[i].str)); EXPECT_EQ_STR (cases[i].want, got); diff --git a/src/cgroups.c b/src/cgroups.c index 6d419722..3a59ec4c 100644 --- a/src/cgroups.c +++ b/src/cgroups.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -206,18 +207,16 @@ static int cgroups_config (const char *key, const char *value) static int cgroups_read (void) { - cu_mount_t *mnt_list; - cu_mount_t *mnt_ptr; + cu_mount_t *mnt_list = NULL; _Bool cgroup_found = 0; - mnt_list = NULL; if (cu_mount_getlist (&mnt_list) == NULL) { ERROR ("cgroups plugin: cu_mount_getlist failed."); return (-1); } - for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) + for (cu_mount_t *mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) { /* Find the cgroup mountpoint which contains the cpuacct * controller. */ diff --git a/src/chrony.c b/src/chrony.c index 4a09753f..f6294e49 100644 --- a/src/chrony.c +++ b/src/chrony.c @@ -26,6 +26,7 @@ */ #include "collectd.h" + #include "common.h" /* auxiliary functions */ #include "plugin.h" /* plugin_register_*, plugin_dispatch_values */ @@ -306,14 +307,15 @@ static int connect_client(const char *p_hostname, const char *p_service, int p_family, int p_socktype) { - struct addrinfo hints = { 0 }; - struct addrinfo *res = NULL, *ressave = NULL; + struct addrinfo *res, *ressave; int n, sockfd; - hints.ai_family = p_family; - hints.ai_socktype = p_socktype; + struct addrinfo ai_hints = { + .ai_family = p_family, + .ai_socktype = p_socktype + }; - n = getaddrinfo(p_hostname, p_service, &hints, &res); + n = getaddrinfo(p_hostname, p_service, &ai_hints, &res); if (n < 0) { @@ -450,8 +452,8 @@ chrony_connect(void) if (chrony_set_timeout()) { - ERROR(PLUGIN_NAME ": Error setting timeout to %lds. Errno = %d", - g_chrony_timeout, errno); + ERROR(PLUGIN_NAME ": Error setting timeout to %llds. Errno = %d", + (long long)g_chrony_timeout, errno); return CHRONY_RC_FAIL; } return CHRONY_RC_OK; @@ -1051,7 +1053,7 @@ chrony_read(void) { /* collectd read callback: Perform data acquisition */ int rc; - unsigned int now_src, n_sources; + unsigned int n_sources; if (g_chrony_seq_is_initialized == 0) { @@ -1073,7 +1075,7 @@ chrony_read(void) if (rc != CHRONY_RC_OK) return rc; - for (now_src = 0; now_src < n_sources; ++now_src) + for (unsigned int now_src = 0; now_src < n_sources; ++now_src) { int is_reachable; rc = chrony_request_source_data(now_src, &is_reachable); diff --git a/src/collectd-nagios.c b/src/collectd-nagios.c index c1a85156..12187f30 100644 --- a/src/collectd-nagios.c +++ b/src/collectd-nagios.c @@ -128,8 +128,6 @@ static int filter_ds (size_t *values_num, gauge_t *new_values; char **new_names; - size_t i; - if (match_ds_g == NULL) return (RET_OKAY); @@ -148,7 +146,7 @@ static int filter_ds (size_t *values_num, return (RET_UNKNOWN); } - for (i = 0; i < match_ds_num_g; i++) + for (size_t i = 0; i < match_ds_num_g; i++) { size_t j; @@ -182,7 +180,7 @@ static int filter_ds (size_t *values_num, } free (*values); - for (i = 0; i < *values_num; i++) + for (size_t i = 0; i < *values_num; i++) free ((*values_names)[i]); free (*values_names); @@ -283,7 +281,6 @@ static int do_listval (lcc_connection_t *connection) char *hostname = NULL; int status; - size_t i; status = lcc_listval (connection, &ret_ident, &ret_ident_num); if (status != 0) { @@ -301,7 +298,7 @@ static int do_listval (lcc_connection_t *connection) return (RET_UNKNOWN); } - for (i = 0; i < ret_ident_num; ++i) { + for (size_t i = 0; i < ret_ident_num; ++i) { char id[1024]; if ((hostname_g != NULL) && (strcasecmp (hostname_g, ret_ident[i].host))) @@ -345,9 +342,8 @@ static int do_check_con_none (size_t values_num, int num_okay = 0; const char *status_str = "UNKNOWN"; int status_code = RET_UNKNOWN; - size_t i; - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { if (isnan (values[i])) { @@ -390,7 +386,7 @@ static int do_check_con_none (size_t values_num, if (values_num > 0) { printf (" |"); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) printf (" %s=%f;;;;", values_names[i], values[i]); } printf ("\n"); @@ -401,7 +397,6 @@ static int do_check_con_none (size_t values_num, static int do_check_con_average (size_t values_num, double *values, char **values_names) { - size_t i; double total; int total_num; double average; @@ -410,7 +405,7 @@ static int do_check_con_average (size_t values_num, total = 0.0; total_num = 0; - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { if (isnan (values[i])) { @@ -451,7 +446,7 @@ static int do_check_con_average (size_t values_num, } printf ("%s: %g average |", status_str, average); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) printf (" %s=%f;;;;", values_names[i], values[i]); printf ("\n"); @@ -461,7 +456,6 @@ static int do_check_con_average (size_t values_num, static int do_check_con_sum (size_t values_num, double *values, char **values_names) { - size_t i; double total; int total_num; const char *status_str = "UNKNOWN"; @@ -469,7 +463,7 @@ static int do_check_con_sum (size_t values_num, total = 0.0; total_num = 0; - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { if (isnan (values[i])) { @@ -508,7 +502,7 @@ static int do_check_con_sum (size_t values_num, } printf ("%s: %g sum |", status_str, total); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) printf (" %s=%f;;;;", values_names[i], values[i]); printf ("\n"); @@ -518,7 +512,6 @@ static int do_check_con_sum (size_t values_num, static int do_check_con_percentage (size_t values_num, double *values, char **values_names) { - size_t i; double sum = 0.0; double percentage; @@ -531,7 +524,7 @@ static int do_check_con_percentage (size_t values_num, return (RET_WARNING); } - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { if (isnan (values[i])) { @@ -571,7 +564,7 @@ static int do_check_con_percentage (size_t values_num, } printf ("%s: %lf percent |", status_str, percentage); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) printf (" %s=%lf;;;;", values_names[i], values[i]); return (status_code); } /* int do_check_con_percentage */ @@ -583,7 +576,6 @@ static int do_check (lcc_connection_t *connection) size_t values_num; char ident_str[1024]; lcc_identifier_t ident; - size_t i; int status; snprintf (ident_str, sizeof (ident_str), "%s/%s", @@ -627,7 +619,7 @@ static int do_check (lcc_connection_t *connection) free (values); if (values_names != NULL) - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) free (values_names[i]); free (values_names); diff --git a/src/collectd-python.pod b/src/collectd-python.pod index 773a6cd4..16b26afa 100644 --- a/src/collectd-python.pod +++ b/src/collectd-python.pod @@ -37,7 +37,7 @@ for collectd in Python. This is a lot more efficient than executing a Python-script every time you want to read a value with the C (see L) and provides a lot more functionality, too. -The minimum required Python version is I<2.3>. +The minimum required Python version is I<2.6>. =head1 CONFIGURATION @@ -94,11 +94,12 @@ way of entering your commands. The daemonized collectd won't do that. =item * -B<2.> collectd will block I. Pressing I will usually cause +B<2.> Python will be handling I. Pressing I will usually cause collectd to shut down. This would be problematic in an interactive session, -therefore this signal will be blocked. You can still use it to interrupt -syscalls like sleep and pause but it won't generate a I -exception either. +therefore Python will be handling it in interactive sessions. This allows you +to use I to interrupt Python code without killing collectd. This also +means you can catch I exceptions which does not work during +normal operation. To quit collectd send I (press I at the beginning of a new line). @@ -658,6 +659,8 @@ Any Python module will start similar to: A very simple read function might look like: + import random + def read(data=None): vl = collectd.Values(type='gauge') vl.plugin='python.spam' @@ -671,28 +674,12 @@ A very simple write function might look like: To register those functions with collectd: - collectd.register_read(read); - collectd.register_write(write); + collectd.register_read(read) + collectd.register_write(write) See the section L<"CLASSES"> above for a complete documentation of the data types used by the read, write and match functions. -=head1 NOTES - -=over 4 - -=item * - -Please feel free to send in new plugins to collectd's mailing list at -EcollectdEatEcollectd.orgE for review and, possibly, -inclusion in the main distribution. In the latter case, we will take care of -keeping the plugin up to date and adapting it to new versions of collectd. - -Before submitting your plugin, please take a look at -L. - -=back - =head1 CAVEATS =over 4 diff --git a/src/collectd-tg.c b/src/collectd-tg.c index 513d4ffc..7db9fe71 100644 --- a/src/collectd-tg.c +++ b/src/collectd-tg.c @@ -337,7 +337,6 @@ static int read_options (int argc, char **argv) /* {{{ */ int main (int argc, char **argv) /* {{{ */ { - int i; double last_time; int values_sent = 0; @@ -383,7 +382,7 @@ int main (int argc, char **argv) /* {{{ */ fprintf (stdout, "Creating %i values ... ", conf_num_values); fflush (stdout); - for (i = 0; i < conf_num_values; i++) + for (int i = 0; i < conf_num_values; i++) { lcc_value_list_t *vl; diff --git a/src/collectd.conf.in b/src/collectd.conf.in index 9375202b..e06465bf 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -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 @@ -122,6 +123,7 @@ #@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_INTERFACE_TRUE@@BUILD_PLUGIN_INTERFACE_TRUE@LoadPlugin interface @@ -564,6 +566,13 @@ # # +# +# Host "127.0.0.1" +# Port "2947" +# Timeout 0.015 +# PauseConnect 5 +# + # # # EnableSSL true @@ -728,6 +737,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 @@ -740,6 +754,12 @@ # SlaveStats true # SlaveNotifications true # +# +# Alias "galera" +# Host "localhost" +# Socket "/var/run/mysql/mysqld.sock" +# WsrepStats true +# # # @@ -1393,6 +1413,8 @@ # Header "X-Custom-Header: custom_value" # SSLVersion "TLSv1" # Format "Command" +# Metrics true +# Notifications false # StoreRates false # BufferSize 4096 # LowSpeedLimit 0 diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 381d6729..9ae73106 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -1457,6 +1457,16 @@ installed) to get the current CPU frequency. If this file does not exist make 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 @@ -2401,7 +2411,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 @@ -2631,6 +2641,78 @@ source, this is optional. Otherwise the option is required. =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 @@ -3647,6 +3729,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" @@ -3656,12 +3743,20 @@ Synopsis: 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 @@ -3726,10 +3821,36 @@ privileges. See the B documentation above. Defaults to B. 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 @@ -7044,7 +7165,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 @@ -7825,6 +7946,14 @@ create output in the I (JSON). When set to KAIROSDB 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 --git a/src/collectdctl.c b/src/collectdctl.c index 8ca0559d..31183b1c 100644 --- a/src/collectdctl.c +++ b/src/collectdctl.c @@ -185,7 +185,6 @@ static int getval (lcc_connection_t *c, int argc, char **argv) char **ret_values_names = NULL; int status; - size_t i; assert (strcasecmp (argv[0], "getval") == 0); @@ -203,7 +202,7 @@ static int getval (lcc_connection_t *c, int argc, char **argv) if (ret_values != NULL) \ free (ret_values); \ if (ret_values_names != NULL) { \ - for (i = 0; i < ret_values_num; ++i) \ + for (size_t i = 0; i < ret_values_num; ++i) \ free (ret_values_names[i]); \ free (ret_values_names); \ } \ @@ -218,7 +217,7 @@ static int getval (lcc_connection_t *c, int argc, char **argv) BAIL_OUT (-1); } - for (i = 0; i < ret_values_num; ++i) + for (size_t i = 0; i < ret_values_num; ++i) printf ("%s=%e\n", ret_values_names[i], ret_values[i]); BAIL_OUT (0); #undef BAIL_OUT @@ -235,7 +234,6 @@ static int flush (lcc_connection_t *c, int argc, char **argv) size_t plugins_num = 0; int status; - int i; assert (strcasecmp (argv[0], "flush") == 0); @@ -250,7 +248,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv) return (s); \ } while (0) - for (i = 1; i < argc; ++i) { + for (int i = 1; i < argc; ++i) { char *key, *value; key = argv[i]; @@ -314,7 +312,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv) plugins[0] = NULL; } - for (i = 0; i < plugins_num; ++i) { + for (size_t i = 0; i < plugins_num; ++i) { if (identifiers_num == 0) { status = lcc_flush (c, plugins[i], NULL, timeout); if (status != 0) @@ -322,9 +320,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv) (plugins[i] == NULL) ? "(all)" : plugins[i], lcc_strerror (c)); } else { - int j; - - for (j = 0; j < identifiers_num; ++j) { + for (size_t j = 0; j < identifiers_num; ++j) { status = lcc_flush (c, plugins[i], identifiers + j, timeout); if (status != 0) { char id[1024]; @@ -349,7 +345,6 @@ static int listval (lcc_connection_t *c, int argc, char **argv) size_t ret_ident_num = 0; int status; - size_t i; assert (strcasecmp (argv[0], "listval") == 0); @@ -372,7 +367,7 @@ static int listval (lcc_connection_t *c, int argc, char **argv) BAIL_OUT (status); } - for (i = 0; i < ret_ident_num; ++i) { + for (size_t i = 0; i < ret_ident_num; ++i) { char id[1024]; status = lcc_identifier_to_string (c, id, sizeof (id), ret_ident + i); @@ -398,7 +393,6 @@ static int putval (lcc_connection_t *c, int argc, char **argv) size_t values_len = 0; int status; - int i; assert (strcasecmp (argv[0], "putval") == 0); @@ -415,7 +409,7 @@ static int putval (lcc_connection_t *c, int argc, char **argv) if (status != 0) return (status); - for (i = 2; i < argc; ++i) { + for (int i = 2; i < argc; ++i) { char *tmp; tmp = strchr (argv[i], (int)'='); diff --git a/src/conntrack.c b/src/conntrack.c index 123ff543..ce90ede3 100644 --- a/src/conntrack.c +++ b/src/conntrack.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/contextswitch.c b/src/contextswitch.c index 344f76e7..76e2a6c0 100644 --- a/src/contextswitch.c +++ b/src/contextswitch.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/cpu.c b/src/cpu.c index 9c432d17..80029667 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -28,6 +28,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -405,19 +406,16 @@ static cpu_state_t *get_cpu_state (size_t cpu_num, size_t state) /* {{{ */ * array. */ static void aggregate (gauge_t *sum_by_state) /* {{{ */ { - size_t cpu_num; - size_t state; - - for (state = 0; state < COLLECTD_CPU_STATE_MAX; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_MAX; state++) sum_by_state[state] = NAN; - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *this_cpu_states = get_cpu_state (cpu_num, 0); this_cpu_states[COLLECTD_CPU_STATE_ACTIVE].rate = NAN; - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { if (!this_cpu_states[state].has_value) continue; @@ -442,7 +440,6 @@ static void aggregate (gauge_t *sum_by_state) /* {{{ */ static void cpu_commit_one (int cpu_num, /* {{{ */ gauge_t rates[static COLLECTD_CPU_STATE_MAX]) { - size_t state; gauge_t sum; sum = rates[COLLECTD_CPU_STATE_ACTIVE]; @@ -455,7 +452,7 @@ static void cpu_commit_one (int cpu_num, /* {{{ */ return; } - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { gauge_t percent = 100.0 * rates[state] / sum; submit_percent (cpu_num, state, percent); @@ -466,9 +463,7 @@ static void cpu_commit_one (int cpu_num, /* {{{ */ * each iteration / after each call to cpu_commit(). */ static void cpu_reset (void) /* {{{ */ { - size_t i; - - for (i = 0; i < cpu_states_num; i++) + for (size_t i = 0; i < cpu_states_num; i++) cpu_states[i].has_value = 0; global_cpu_num = 0; @@ -477,13 +472,9 @@ static void cpu_reset (void) /* {{{ */ /* Legacy behavior: Dispatches the raw derive values without any aggregation. */ static void cpu_commit_without_aggregation (void) /* {{{ */ { - int state; - - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (int state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { - size_t cpu_num; - - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *s = get_cpu_state (cpu_num, state); @@ -501,7 +492,6 @@ static void cpu_commit (void) /* {{{ */ gauge_t global_rates[COLLECTD_CPU_STATE_MAX] = { NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN /* Batman! */ }; - size_t cpu_num; if (report_by_state && report_by_cpu && !report_percent) { @@ -517,15 +507,14 @@ static void cpu_commit (void) /* {{{ */ return; } - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *this_cpu_states = get_cpu_state (cpu_num, 0); gauge_t local_rates[COLLECTD_CPU_STATE_MAX] = { NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN }; - size_t state; - for (state = 0; state < COLLECTD_CPU_STATE_MAX; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_MAX; state++) if (this_cpu_states[state].has_value) local_rates[state] = this_cpu_states[state].rate; @@ -569,8 +558,6 @@ static int cpu_read (void) cdtime_t now = cdtime (); #if PROCESSOR_CPU_LOAD_INFO /* {{{ */ - int cpu; - kern_return_t status; processor_cpu_load_info_data_t cpu_info; @@ -578,7 +565,7 @@ static int cpu_read (void) host_t cpu_host; - for (cpu = 0; cpu < cpu_list_len; cpu++) + for (int cpu = 0; cpu < cpu_list_len; cpu++) { cpu_host = 0; cpu_info_len = PROCESSOR_BASIC_INFO_COUNT; @@ -653,13 +640,12 @@ static int cpu_read (void) /* }}} #endif defined(KERNEL_LINUX) */ #elif defined(HAVE_LIBKSTAT) /* {{{ */ - int cpu; static cpu_stat_t cs; if (kc == NULL) return (-1); - for (cpu = 0; cpu < numcpu; cpu++) + for (int cpu = 0; cpu < numcpu; cpu++) { if (kstat_read (kc, ksp[cpu], &cs) == -1) continue; /* error message? */ @@ -675,7 +661,6 @@ static int cpu_read (void) uint64_t cpuinfo[numcpu][CPUSTATES]; size_t cpuinfo_size; int status; - int i; if (numcpu < 1) { @@ -688,7 +673,7 @@ static int cpu_read (void) #if defined(KERN_CPTIME2) if (numcpu > 1) { - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { int mib[] = {CTL_KERN, KERN_CPTIME2, i}; cpuinfo_size = sizeof (cpuinfo[0]); @@ -721,12 +706,12 @@ static int cpu_read (void) return (-1); } - for(i = 0; i < CPUSTATES; i++) { + for(int i = 0; i < CPUSTATES; i++) { cpuinfo[0][i] = cpuinfo_tmp[i]; } } - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { cpu_stage (i, COLLECTD_CPU_STATE_USER, (derive_t) cpuinfo[i][CP_USER], now); cpu_stage (i, COLLECTD_CPU_STATE_NICE, (derive_t) cpuinfo[i][CP_NICE], now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpuinfo[i][CP_SYS], now); @@ -738,7 +723,6 @@ static int cpu_read (void) #elif defined(HAVE_SYSCTLBYNAME) && defined(HAVE_SYSCTL_KERN_CP_TIMES) /* {{{ */ long cpuinfo[maxcpu][CPUSTATES]; size_t cpuinfo_size; - int i; memset (cpuinfo, 0, sizeof (cpuinfo)); @@ -751,7 +735,7 @@ static int cpu_read (void) return (-1); } - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { cpu_stage (i, COLLECTD_CPU_STATE_USER, (derive_t) cpuinfo[i][CP_USER], now); cpu_stage (i, COLLECTD_CPU_STATE_NICE, (derive_t) cpuinfo[i][CP_NICE], now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpuinfo[i][CP_SYS], now); @@ -801,7 +785,7 @@ static int cpu_read (void) #elif defined(HAVE_PERFSTAT) /* {{{ */ perfstat_id_t id; - int i, cpus; + int cpus; numcpu = perfstat_cpu(NULL, NULL, sizeof(perfstat_cpu_t), 0); if(numcpu == -1) @@ -828,7 +812,7 @@ static int cpu_read (void) return (-1); } - for (i = 0; i < cpus; i++) + for (int i = 0; i < cpus; i++) { cpu_stage (i, COLLECTD_CPU_STATE_IDLE, (derive_t) perfcpu[i].idle, now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) perfcpu[i].sys, now); diff --git a/src/cpufreq.c b/src/cpufreq.c index b92b1d09..1e9e8579 100644 --- a/src/cpufreq.c +++ b/src/cpufreq.c @@ -21,6 +21,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -80,12 +81,11 @@ static int cpufreq_read (void) { int status; unsigned long long val; - int i = 0; FILE *fp; char filename[256]; char buffer[16]; - for (i = 0; i < num_cpu; i++) + for (int i = 0; i < num_cpu; i++) { status = ssnprintf (filename, sizeof (filename), "/sys/devices/system/cpu/cpu%d/cpufreq/" diff --git a/src/cpusleep.c b/src/cpusleep.c new file mode 100644 index 00000000..326c29ce --- /dev/null +++ b/src/cpusleep.c @@ -0,0 +1,79 @@ +/** + * collectd - src/cpusleep.c + * Copyright (C) 2016 rinigus + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * rinigus + * + * CPU sleep is reported in milliseconds of sleep per second of wall + * time. For that, the time difference between BOOT and MONOTONIC clocks + * is reported using derive type. +**/ + +#include "collectd.h" + +#include "common.h" +#include "plugin.h" +#include + +static void cpusleep_submit(derive_t cpu_sleep) { + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].derive = cpu_sleep; + + vl.values = values; + vl.values_len = 1; + sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + sstrncpy(vl.plugin, "cpusleep", sizeof(vl.plugin)); + sstrncpy(vl.type, "total_time_in_ms", sizeof(vl.type)); + + plugin_dispatch_values(&vl); +} + +static int cpusleep_read(void) { + struct timespec b, m; + if (clock_gettime(CLOCK_BOOTTIME, &b) < 0) { + ERROR("cpusleep plugin: clock_boottime failed"); + return (-1); + } + + if (clock_gettime(CLOCK_MONOTONIC, &m) < 0) { + ERROR("cpusleep plugin: clock_monotonic failed"); + return (-1); + } + + // to avoid false positives in counter overflow due to reboot, + // derive is used. Sleep is calculated in milliseconds + derive_t diffsec = b.tv_sec - m.tv_sec; + derive_t diffnsec = b.tv_nsec - m.tv_nsec; + derive_t sleep = diffsec * 1000 + diffnsec / 1000000; + + cpusleep_submit(sleep); + + return (0); +} + +void module_register(void) { + plugin_register_read("cpusleep", cpusleep_read); +} /* void module_register */ diff --git a/src/cpython.h b/src/cpython.h index 880fa4ce..070d33af 100644 --- a/src/cpython.h +++ b/src/cpython.h @@ -52,32 +52,6 @@ PyGILState_Release(gil_state);\ } -/* Python 2.4 has this macro, older versions do not. */ -#ifndef Py_VISIT -#define Py_VISIT(o) do {\ - int _vret;\ - if ((o) != NULL) {\ - _vret = visit((o), arg);\ - if (_vret != 0)\ - return _vret;\ - }\ -} while (0) -#endif - -/* Python 2.4 has this macro, older versions do not. */ -#ifndef Py_CLEAR -#define Py_CLEAR(o) do {\ - PyObject *tmp = o;\ - (o) = NULL;\ - Py_XDECREF(tmp);\ -} while (0) -#endif - -/* Python 2.4 has this macro, older versions do not. */ -#ifndef Py_RETURN_NONE -# define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None -#endif - /* This macro is a shortcut for calls like * x = PyObject_Repr(x); * This can't be done like this example because this would leak @@ -170,7 +144,7 @@ typedef struct { PyObject *values; /* Sequence */ PyObject *children; /* Sequence */ } Config; -PyTypeObject ConfigType; +extern PyTypeObject ConfigType; typedef struct { PyObject_HEAD /* No semicolon! */ @@ -181,7 +155,7 @@ typedef struct { char type[DATA_MAX_NAME_LEN]; char type_instance[DATA_MAX_NAME_LEN]; } PluginData; -PyTypeObject PluginDataType; +extern PyTypeObject PluginDataType; #define PluginData_New() PyObject_CallFunctionObjArgs((PyObject *) &PluginDataType, (void *) 0) typedef struct { @@ -190,7 +164,7 @@ typedef struct { PyObject *meta; /* dict */ double interval; } Values; -PyTypeObject ValuesType; +extern PyTypeObject ValuesType; #define Values_New() PyObject_CallFunctionObjArgs((PyObject *) &ValuesType, (void *) 0) typedef struct { @@ -198,12 +172,12 @@ typedef struct { int severity; char message[NOTIF_MAX_MSG_LEN]; } Notification; -PyTypeObject NotificationType; +extern PyTypeObject NotificationType; #define Notification_New() PyObject_CallFunctionObjArgs((PyObject *) &NotificationType, (void *) 0) typedef PyLongObject Signed; -PyTypeObject SignedType; +extern PyTypeObject SignedType; typedef PyLongObject Unsigned; -PyTypeObject UnsignedType; +extern PyTypeObject UnsignedType; diff --git a/src/csv.c b/src/csv.c index 0cb9bc1a..e008ecfe 100644 --- a/src/csv.c +++ b/src/csv.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_cache.h" @@ -45,7 +46,6 @@ static int value_list_to_string (char *buffer, int buffer_len, { int offset; int status; - size_t i; gauge_t *rates = NULL; assert (0 == strcmp (ds->type, vl->type)); @@ -58,7 +58,7 @@ static int value_list_to_string (char *buffer, int buffer_len, return (-1); offset = status; - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if ((ds->ds[i].type != DS_TYPE_COUNTER) && (ds->ds[i].type != DS_TYPE_GAUGE) @@ -187,7 +187,6 @@ static int value_list_to_filename (char *buffer, size_t buffer_size, static int csv_create_file (const char *filename, const data_set_t *ds) { FILE *csv; - size_t i; if (check_create_dir (filename)) return (-1); @@ -203,7 +202,7 @@ static int csv_create_file (const char *filename, const data_set_t *ds) } fprintf (csv, "epoch"); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) fprintf (csv, ",%s", ds->ds[i].name); fprintf (csv, "\n"); @@ -288,12 +287,10 @@ static int csv_write (const data_set_t *ds, const value_list_t *vl, if (use_stdio) { - size_t i; - escape_string (filename, sizeof (filename)); /* Replace commas by colons for PUTVAL compatible output. */ - for (i = 0; i < sizeof (values); i++) + for (size_t i = 0; i < sizeof (values); i++) { if (values[i] == 0) break; diff --git a/src/curl.c b/src/curl.c index d9ced60d..8d7baa51 100644 --- a/src/curl.c +++ b/src/curl.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -269,7 +270,6 @@ static int cc_config_add_match (web_page_t *page, /* {{{ */ { web_match_t *match; int status; - int i; if (ci->values_num != 0) { @@ -284,7 +284,7 @@ static int cc_config_add_match (web_page_t *page, /* {{{ */ } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -433,7 +433,6 @@ static int cc_config_add_page (oconfig_item_t *ci) /* {{{ */ { web_page_t *page; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -468,7 +467,7 @@ static int cc_config_add_page (oconfig_item_t *ci) /* {{{ */ /* Process all children */ status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -566,12 +565,11 @@ static int cc_config (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -667,7 +665,6 @@ static void cc_submit_response_time (const web_page_t *wp, /* {{{ */ static int cc_read_page (web_page_t *wp) /* {{{ */ { - web_match_t *wm; int status; cdtime_t start = 0; @@ -700,7 +697,7 @@ static int cc_read_page (web_page_t *wp) /* {{{ */ } } - for (wm = wp->matches; wm != NULL; wm = wm->next) + for (web_match_t *wm = wp->matches; wm != NULL; wm = wm->next) { cu_match_value_t *mv; @@ -727,9 +724,7 @@ static int cc_read_page (web_page_t *wp) /* {{{ */ static int cc_read (void) /* {{{ */ { - web_page_t *wp; - - for (wp = pages_g; wp != NULL; wp = wp->next) + for (web_page_t *wp = pages_g; wp != NULL; wp = wp->next) cc_read_page (wp); return (0); diff --git a/src/curl_json.c b/src/curl_json.c index 2dac7479..d4e78039 100644 --- a/src/curl_json.c +++ b/src/curl_json.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -470,7 +471,6 @@ static int cj_config_add_key (cj_t *db, /* {{{ */ { cj_key_t *key; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -506,7 +506,7 @@ static int cj_config_add_key (cj_t *db, /* {{{ */ } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -662,7 +662,6 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */ { cj_t *db; int status = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -699,7 +698,7 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */ } /* Fill the `cj_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -795,12 +794,11 @@ static int cj_config (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -849,8 +847,8 @@ static void cj_submit (cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ if (key->instance == NULL) { - int i, len = 0; - for (i = 0; i < db->depth; i++) + int len = 0; + for (int i = 0; i < db->depth; i++) len += ssnprintf(vl.type_instance+len, sizeof(vl.type_instance)-len, i ? "-%s" : "%s", db->state[i+1].name); } diff --git a/src/curl_xml.c b/src/curl_xml.c index 05d75c67..f3aa2d9a 100644 --- a/src/curl_xml.c +++ b/src/curl_xml.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -177,7 +178,6 @@ static void cx_list_free (llist_t *list) /* {{{ */ static void cx_free (void *arg) /* {{{ */ { cx_t *db; - size_t i; DEBUG ("curl_xml plugin: cx_free (arg = %p);", arg); @@ -206,7 +206,7 @@ static void cx_free (void *arg) /* {{{ */ curl_slist_free_all (db->headers); curl_stats_destroy (db->stats); - for (i = 0; i < db->namespaces_num; i++) + for (size_t i = 0; i < db->namespaces_num; i++) { sfree (db->namespaces[i].prefix); sfree (db->namespaces[i].url); @@ -368,14 +368,13 @@ static int cx_handle_all_value_xpaths (xmlXPathContextPtr xpath_ctx, /* {{{ */ { value_t values[xpath->values_len]; int status; - size_t i; assert (xpath->values_len > 0); assert (xpath->values_len == vl->values_len); assert (xpath->values_len == ds->ds_num); vl->values = values; - for (i = 0; i < xpath->values_len; i++) + for (size_t i = 0; i < xpath->values_len; i++) { status = cx_handle_single_value_xpath (xpath_ctx, xpath, ds, vl, i); if (status != 0) @@ -488,7 +487,6 @@ static int cx_handle_base_xpath (char const *plugin_instance, /* {{{ */ char *base_xpath, cx_xpath_t *xpath) { int total_nodes; - int i; xmlXPathObjectPtr base_node_obj = NULL; xmlNodeSetPtr base_nodes = NULL; @@ -529,7 +527,7 @@ static int cx_handle_base_xpath (char const *plugin_instance, /* {{{ */ if (plugin_instance != NULL) sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance)); - for (i = 0; i < total_nodes; i++) + for (int i = 0; i < total_nodes; i++) { int status; @@ -583,7 +581,6 @@ static int cx_parse_stats_xml(xmlChar* xml, cx_t *db) /* {{{ */ int status; xmlDocPtr doc; xmlXPathContextPtr xpath_ctx; - size_t i; /* Load the XML */ doc = xmlParseDoc(xml); @@ -601,7 +598,7 @@ static int cx_parse_stats_xml(xmlChar* xml, cx_t *db) /* {{{ */ return (-1); } - for (i = 0; i < db->namespaces_num; i++) + for (size_t i = 0; i < db->namespaces_num; i++) { cx_namespace_t const *ns = db->namespaces + i; status = xmlXPathRegisterNs (xpath_ctx, @@ -682,15 +679,13 @@ static int cx_read (user_data_t *ud) /* {{{ */ static int cx_config_add_values (const char *name, cx_xpath_t *xpath, /* {{{ */ oconfig_item_t *ci) { - int i; - if (ci->values_num < 1) { WARNING ("curl_xml plugin: `ValuesFrom' needs at least one argument."); return (-1); } - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING ("curl_xml plugin: `ValuesFrom' needs only string argument."); @@ -706,7 +701,7 @@ static int cx_config_add_values (const char *name, cx_xpath_t *xpath, /* {{{ */ xpath->values_len = (size_t) ci->values_num; /* populate cx_values_t structure */ - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { xpath->values[i].path_len = sizeof (ci->values[i].value.string); sstrncpy (xpath->values[i].path, ci->values[i].value.string, sizeof (xpath->values[i].path)); @@ -721,7 +716,6 @@ static int cx_config_add_xpath (cx_t *db, oconfig_item_t *ci) /* {{{ */ char *name; llentry_t *le; int status; - int i; xpath = calloc (1, sizeof (*xpath)); if (xpath == NULL) @@ -747,7 +741,7 @@ static int cx_config_add_xpath (cx_t *db, oconfig_item_t *ci) /* {{{ */ } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -926,7 +920,6 @@ static int cx_config_add_url (oconfig_item_t *ci) /* {{{ */ { cx_t *db; int status = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -963,7 +956,7 @@ static int cx_config_add_url (oconfig_item_t *ci) /* {{{ */ } /* Fill the `cx_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -1057,12 +1050,11 @@ static int cx_config (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/daemon/collectd.c b/src/daemon/collectd.c index 84052088..85735791 100644 --- a/src/daemon/collectd.c +++ b/src/daemon/collectd.c @@ -26,8 +26,8 @@ **/ #include "collectd.h" -#include "common.h" +#include "common.h" #include "plugin.h" #include "configfile.h" @@ -97,9 +97,7 @@ static int init_hostname (void) { const char *str; - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; int status; str = global_option_get ("Hostname"); @@ -120,7 +118,9 @@ static int init_hostname (void) if (IS_FALSE (str)) return (0); - ai_hints.ai_flags = AI_CANONNAME; + struct addrinfo ai_hints = { + .ai_flags = AI_CANONNAME + }; status = getaddrinfo (hostname_g, NULL, &ai_hints, &ai_list); if (status != 0) @@ -133,7 +133,7 @@ static int init_hostname (void) return (-1); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { if (ai_ptr->ai_canonname == NULL) continue; diff --git a/src/daemon/common.c b/src/daemon/common.c index 9da47755..05b11990 100644 --- a/src/daemon/common.c +++ b/src/daemon/common.c @@ -32,6 +32,7 @@ #endif #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_cache.h" @@ -50,11 +51,19 @@ # include #endif +#if HAVE_NETINET_TCP_H +# include +#endif + /* for ntohl and htonl */ #if HAVE_ARPA_INET_H # include #endif +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + #ifdef HAVE_LIBKSTAT extern kstat_ctl_t *kc; #endif @@ -332,7 +341,6 @@ int strjoin (char *buffer, size_t buffer_size, size_t avail; char *ptr; size_t sep_len; - size_t i; if ((buffer_size < 1) || (fields_num == 0)) return (-1); @@ -345,7 +353,7 @@ int strjoin (char *buffer, size_t buffer_size, if (sep != NULL) sep_len = strlen (sep); - for (i = 0; i < fields_num; i++) + for (size_t i = 0; i < fields_num; i++) { size_t field_len; @@ -375,7 +383,6 @@ int strjoin (char *buffer, size_t buffer_size, int escape_string (char *buffer, size_t buffer_size) { char *temp; - size_t i; size_t j; /* Check if we need to escape at all first */ @@ -393,7 +400,7 @@ int escape_string (char *buffer, size_t buffer_size) temp[0] = '"'; j = 1; - for (i = 0; i < buffer_size; i++) + for (size_t i = 0; i < buffer_size; i++) { if (buffer[i] == 0) { @@ -427,9 +434,7 @@ int escape_string (char *buffer, size_t buffer_size) int strunescape (char *buf, size_t buf_len) { - size_t i; - - for (i = 0; (i < buf_len) && (buf[i] != '\0'); ++i) + for (size_t i = 0; (i < buf_len) && (buf[i] != '\0'); ++i) { if (buf[i] != '\\') continue; @@ -483,7 +488,6 @@ size_t strstripnewline (char *buffer) int escape_slashes (char *buffer, size_t buffer_size) { size_t buffer_len; - size_t i; buffer_len = strlen (buffer); @@ -505,7 +509,7 @@ int escape_slashes (char *buffer, size_t buffer_size) buffer_len--; } - for (i = 0; i < buffer_len; i++) + for (size_t i = 0; i < buffer_len; i++) { if (buffer[i] == '/') buffer[i] = '_'; @@ -516,9 +520,7 @@ int escape_slashes (char *buffer, size_t buffer_size) void replace_special (char *buffer, size_t buffer_size) { - size_t i; - - for (i = 0; i < buffer_size; i++) + for (size_t i = 0; i < buffer_size; i++) { if (buffer[i] == 0) return; @@ -592,7 +594,6 @@ int check_create_dir (const char *file_orig) int last_is_file = 1; int path_is_absolute = 0; size_t len; - int i; /* * Sanity checks first @@ -638,7 +639,7 @@ int check_create_dir (const char *file_orig) /* * For each component, do.. */ - for (i = 0; i < (fields_num - last_is_file); i++) + for (int i = 0; i < (fields_num - last_is_file); i++) { /* * Do not create directories that start with a dot. This @@ -937,7 +938,6 @@ int format_values (char *ret, size_t ret_len, /* {{{ */ { size_t offset = 0; int status; - size_t i; gauge_t *rates = NULL; assert (0 == strcmp (ds->type, vl->type)); @@ -963,7 +963,7 @@ int format_values (char *ret, size_t ret_len, /* {{{ */ BUFFER_ADD ("%.3f", CDTIME_T_TO_DOUBLE (vl->time)); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if (ds->ds[i].type == DS_TYPE_GAUGE) BUFFER_ADD (":"GAUGE_FORMAT, vl->values[i].gauge); @@ -1517,16 +1517,15 @@ int value_to_rate (gauge_t *ret_rate, /* {{{ */ int service_name_to_port_number (const char *service_name) { struct addrinfo *ai_list; - struct addrinfo *ai_ptr; - struct addrinfo ai_hints = { 0 }; int status; int service_number; if (service_name == NULL) return (-1); - ai_list = NULL; - ai_hints.ai_family = AF_UNSPEC; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC + }; status = getaddrinfo (/* node = */ NULL, service_name, &ai_hints, &ai_list); @@ -1538,7 +1537,7 @@ int service_name_to_port_number (const char *service_name) } service_number = -1; - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { if (ai_ptr->ai_family == AF_INET) { @@ -1566,6 +1565,46 @@ int service_name_to_port_number (const char *service_name) return (-1); } /* int service_name_to_port_number */ +void set_sock_opts (int sockfd) /* {{{ */ +{ + int status; + int socktype; + + socklen_t socklen = sizeof (socklen_t); + int so_keepalive = 1; + + status = getsockopt (sockfd, SOL_SOCKET, SO_TYPE, &socktype, &socklen); + if (status != 0) + { + WARNING ("set_sock_opts: failed to determine socket type"); + return; + } + + if (socktype == SOCK_STREAM) + { + status = setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, + &so_keepalive, sizeof (so_keepalive)); + if (status != 0) + WARNING ("set_sock_opts: failed to set socket keepalive flag"); + +#ifdef TCP_KEEPIDLE + int tcp_keepidle = ((CDTIME_T_TO_MS(plugin_get_interval()) - 1) / 100 + 1); + status = setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, + &tcp_keepidle, sizeof (tcp_keepidle)); + if (status != 0) + WARNING ("set_sock_opts: failed to set socket tcp keepalive time"); +#endif + +#ifdef TCP_KEEPINTVL + int tcp_keepintvl = ((CDTIME_T_TO_MS(plugin_get_interval()) - 1) / 1000 + 1); + status = setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, + &tcp_keepintvl, sizeof (tcp_keepintvl)); + if (status != 0) + WARNING ("set_sock_opts: failed to set socket tcp keepalive interval"); +#endif + } +} /* }}} void set_sock_opts */ + int strtoderive (const char *string, derive_t *ret_value) /* {{{ */ { derive_t tmp; @@ -1629,9 +1668,56 @@ int strarray_add (char ***ret_array, size_t *ret_array_len, char const *str) /* void strarray_free (char **array, size_t array_len) /* {{{ */ { - size_t i; - - for (i = 0; i < array_len; i++) + for (size_t i = 0; i < array_len; i++) sfree (array[i]); sfree (array); } /* }}} void strarray_free */ + +#ifdef HAVE_SYS_CAPABILITY_H +int check_capability (int capability) /* {{{ */ +{ +#ifdef _LINUX_CAPABILITY_VERSION_3 + cap_user_header_t cap_header = calloc(1, sizeof (*cap_header)); + if (cap_header == NULL) + { + ERROR("check_capability: calloc failed"); + return (-1); + } + + cap_user_data_t cap_data = calloc(1, sizeof (*cap_data)); + if (cap_data == NULL) + { + ERROR("check_capability: calloc failed"); + sfree(cap_header); + return (-1); + } + + cap_header->pid = getpid(); + cap_header->version = _LINUX_CAPABILITY_VERSION; + if (capget(cap_header, cap_data) < 0) + { + ERROR("check_capability: capget failed"); + sfree(cap_header); + sfree(cap_data); + return (-1); + } + + if ((cap_data->effective & (1 << capability)) == 0) + { + sfree(cap_header); + sfree(cap_data); + return (-1); + } + else + { + sfree(cap_header); + sfree(cap_data); + return (0); + } +#else + WARNING ("check_capability: unsupported capability implementation. " + "Some plugin(s) may require elevated privileges to work properly."); + return (0); +#endif /* _LINUX_CAPABILITY_VERSION_3 */ +} /* }}} int check_capability */ +#endif /* HAVE_SYS_CAPABILITY_H */ diff --git a/src/daemon/common.h b/src/daemon/common.h index 6981d21d..720e5f1b 100644 --- a/src/daemon/common.h +++ b/src/daemon/common.h @@ -29,6 +29,7 @@ #define COMMON_H #include "collectd.h" + #include "plugin.h" #if HAVE_PWD_H @@ -360,6 +361,9 @@ int value_to_rate (gauge_t *ret_rate, value_t value, int ds_type, cdtime_t t, * (in the range [1-65535]). Returns less than zero on error. */ int service_name_to_port_number (const char *service_name); +/* Sets various, non-default, socket options */ +void set_sock_opts (int sockfd); + /** Parse a string to a derive_t value. Returns zero on success or non-zero on * failure. If failure is returned, ret_value is not touched. */ int strtoderive (const char *string, derive_t *ret_value); @@ -371,4 +375,12 @@ int strtogauge (const char *string, gauge_t *ret_value); int strarray_add (char ***ret_array, size_t *ret_array_len, char const *str); void strarray_free (char **array, size_t array_len); +#ifdef HAVE_SYS_CAPABILITY_H +/** Check if the current process benefits from the capability passed in + * argument. Returns zero if it does, less than zero if it doesn't or on error. + * See capabilities(7) for the list of possible capabilities. + * */ +int check_capability (int capability); +#endif /* HAVE_SYS_CAPABILITY_H */ + #endif /* COMMON_H */ diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index 68958f3f..202ddf6c 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -203,9 +203,8 @@ DEF_TEST(escape_slashes) {"trailing/slash/", "trailing_slash_"}, {"foo//bar", "foo__bar"}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[32]; strncpy (buffer, cases[i].str, sizeof (buffer)); @@ -230,9 +229,8 @@ DEF_TEST(escape_string) {"012345 78901234", "\"012345 789012\""}, {"012345 78901\"34", "\"012345 78901\""}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[16]; strncpy (buffer, cases[i].str, sizeof (buffer)); @@ -301,8 +299,7 @@ DEF_TEST(parse_values) {"T:42.0", -1, NAN}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { data_source_t dsrc = { .name = "value", @@ -361,9 +358,8 @@ DEF_TEST(value_to_rate) /* 64bit wrap-around. */ {30, 40, DS_TYPE_COUNTER, {.counter = 18446744073709551558ULL}, {.counter = 42}, 10.0}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { value_to_rate_state_t state = { cases[i].v0, TIME_T_TO_CDTIME_T (cases[i].t0) }; gauge_t got; diff --git a/src/daemon/configfile.c b/src/daemon/configfile.c index 0654ad7e..a31fb64d 100644 --- a/src/daemon/configfile.c +++ b/src/daemon/configfile.c @@ -155,7 +155,7 @@ static int cf_dispatch (const char *type, const char *orig_key, char *key; char *value; int ret; - int i; + int i = 0; if (orig_key == NULL) return (EINVAL); @@ -231,8 +231,6 @@ static int dispatch_global_option (const oconfig_item_t *ci) static int dispatch_value_typesdb (oconfig_item_t *ci) { - int i = 0; - assert (strcasecmp (ci->key, "TypesDB") == 0); cf_default_typesdb = 0; @@ -242,7 +240,7 @@ static int dispatch_value_typesdb (oconfig_item_t *ci) return (-1); } - for (i = 0; i < ci->values_num; ++i) + for (int i = 0; i < ci->values_num; ++i) { if (OCONFIG_TYPE_STRING != ci->values[i].type) { WARNING ("configfile: TypesDB: Skipping %i. argument which " @@ -270,7 +268,6 @@ static int dispatch_value_plugindir (oconfig_item_t *ci) static int dispatch_loadplugin (oconfig_item_t *ci) { - int i; const char *name; unsigned int flags = 0; plugin_ctx_t ctx = { 0 }; @@ -293,7 +290,7 @@ static int dispatch_loadplugin (oconfig_item_t *ci) ctx.flush_interval = 0; ctx.flush_timeout = 0; - for (i = 0; i < ci->children_num; ++i) + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *child = ci->children + i; @@ -325,12 +322,11 @@ static int dispatch_value_plugin (const char *plugin, oconfig_item_t *ci) char buffer[4096]; char *buffer_ptr; int buffer_free; - int i; buffer_ptr = buffer; buffer_free = sizeof (buffer); - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { int status = -1; @@ -359,16 +355,15 @@ static int dispatch_value_plugin (const char *plugin, oconfig_item_t *ci) static int dispatch_value (oconfig_item_t *ci) { int ret = 0; - int i; - for (i = 0; i < cf_value_map_num; i++) + for (int i = 0; i < cf_value_map_num; i++) if (strcasecmp (cf_value_map[i].key, ci->key) == 0) { ret = cf_value_map[i].func (ci); break; } - for (i = 0; i < cf_global_options_num; i++) + for (int i = 0; i < cf_global_options_num; i++) if (strcasecmp (cf_global_options[i].key, ci->key) == 0) { ret = dispatch_global_option (ci); @@ -380,11 +375,8 @@ static int dispatch_value (oconfig_item_t *ci) static int dispatch_block_plugin (oconfig_item_t *ci) { - int i; const char *name; - cf_complex_callback_t *cb; - if (strcasecmp (ci->key, "Plugin") != 0) return (-1); if (ci->values_num < 1) @@ -426,7 +418,7 @@ static int dispatch_block_plugin (oconfig_item_t *ci) } /* Check for a complex callback first */ - for (cb = complex_callback_head; cb != NULL; cb = cb->next) + for (cf_complex_callback_t *cb = complex_callback_head; cb != NULL; cb = cb->next) { if (strcasecmp (name, cb->type) == 0) { @@ -441,7 +433,7 @@ static int dispatch_block_plugin (oconfig_item_t *ci) } /* Hm, no complex plugin found. Dispatch the values one by one */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { if (ci->children[i].children == NULL) dispatch_value_plugin (name, ci->children + i); @@ -477,7 +469,6 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src, int offset) { oconfig_item_t *temp; - int i; assert (offset >= 0); assert (dst->children_num > offset); @@ -485,7 +476,7 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src, /* Free the memory used by the replaced child. Usually that's the * `Include "blah"' statement. */ temp = dst->children + offset; - for (i = 0; i < temp->values_num; i++) + for (int i = 0; i < temp->values_num; i++) { if (temp->values[i].type == OCONFIG_TYPE_STRING) { @@ -586,17 +577,13 @@ static oconfig_item_t *cf_read_generic (const char *path, static int cf_include_all (oconfig_item_t *root, int depth) { - int i; - - for (i = 0; i < root->children_num; i++) + for (int i = 0; i < root->children_num; i++) { oconfig_item_t *new; oconfig_item_t *old; char *pattern = NULL; - int j; - if (strcasecmp (root->children[i].key, "Include") != 0) continue; @@ -609,7 +596,7 @@ static int cf_include_all (oconfig_item_t *root, int depth) continue; } - for (j = 0; j < old->children_num; ++j) + for (int j = 0; j < old->children_num; ++j) { oconfig_item_t *child = old->children + j; @@ -703,7 +690,6 @@ static oconfig_item_t *cf_read_dir (const char *dir, char **filenames = NULL; int filenames_num = 0; int status; - int i; assert (depth < CF_MAX_DEPTH); @@ -740,7 +726,7 @@ static oconfig_item_t *cf_read_dir (const char *dir, " name is too long.", dir, de->d_name); closedir (dh); - for (i = 0; i < filenames_num; ++i) + for (int i = 0; i < filenames_num; ++i) free (filenames[i]); free (filenames); free (root); @@ -753,7 +739,7 @@ static oconfig_item_t *cf_read_dir (const char *dir, if (tmp == NULL) { ERROR ("configfile: realloc failed."); closedir (dh); - for (i = 0; i < filenames_num - 1; ++i) + for (int i = 0; i < filenames_num - 1; ++i) free (filenames[i]); free (filenames); free (root); @@ -773,7 +759,7 @@ static oconfig_item_t *cf_read_dir (const char *dir, qsort ((void *) filenames, filenames_num, sizeof (*filenames), cf_compare_string); - for (i = 0; i < filenames_num; ++i) + for (int i = 0; i < filenames_num; ++i) { oconfig_item_t *temp; char *name = filenames[i]; @@ -806,7 +792,7 @@ static oconfig_item_t *cf_read_dir (const char *dir, * * There are two versions of this function: If `wordexp' exists shell wildcards * will be expanded and the function will include all matches found. If - * `wordexp' (or, more precisely, it's header file) is not available the + * `wordexp' (or, more precisely, its header file) is not available the * simpler function is used which does not do any such expansion. */ #if HAVE_WORDEXP_H @@ -817,7 +803,6 @@ static oconfig_item_t *cf_read_generic (const char *path, int status; const char *path_ptr; wordexp_t we; - size_t i; if (depth >= CF_MAX_DEPTH) { @@ -845,7 +830,7 @@ static oconfig_item_t *cf_read_generic (const char *path, qsort ((void *) we.we_wordv, we.we_wordc, sizeof (*we.we_wordv), cf_compare_string); - for (i = 0; i < we.we_wordc; i++) + for (size_t i = 0; i < we.we_wordc; i++) { oconfig_item_t *temp; struct stat statbuf; @@ -929,7 +914,6 @@ static oconfig_item_t *cf_read_generic (const char *path, int global_option_set (const char *option, const char *value, _Bool from_cli) { int i; - DEBUG ("option = %s; value = %s;", option, value); for (i = 0; i < cf_global_options_num; i++) @@ -965,7 +949,6 @@ int global_option_set (const char *option, const char *value, _Bool from_cli) const char *global_option_get (const char *option) { int i; - for (i = 0; i < cf_global_options_num; i++) if (strcasecmp (cf_global_options[i].key, option) == 0) break; @@ -1026,9 +1009,7 @@ cdtime_t cf_get_default_interval (void) void cf_unregister (const char *type) { - cf_callback_t *this, *prev; - - for (prev = NULL, this = first_callback; + for (cf_callback_t *prev = NULL, *this = first_callback; this != NULL; prev = this, this = this->next) if (strcasecmp (this->type, type) == 0) @@ -1045,9 +1026,7 @@ void cf_unregister (const char *type) void cf_unregister_complex (const char *type) { - cf_complex_callback_t *this, *prev; - - for (prev = NULL, this = complex_callback_head; + for (cf_complex_callback_t *prev = NULL, *this = complex_callback_head; this != NULL; prev = this, this = this->next) if (strcasecmp (this->type, type) == 0) @@ -1124,7 +1103,6 @@ int cf_register_complex (const char *type, int (*callback) (oconfig_item_t *)) int cf_read (const char *filename) { oconfig_item_t *conf; - int i; int ret = 0; conf = cf_read_generic (filename, /* pattern = */ NULL, /* depth = */ 0); @@ -1140,7 +1118,7 @@ int cf_read (const char *filename) return (-1); } - for (i = 0; i < conf->children_num; i++) + for (int i = 0; i < conf->children_num; i++) { if (conf->children[i].children == NULL) { diff --git a/src/daemon/configfile.h b/src/daemon/configfile.h index 924d97c5..ae2c6c0f 100644 --- a/src/daemon/configfile.h +++ b/src/daemon/configfile.h @@ -28,6 +28,7 @@ #define CONFIGFILE_H #include "collectd.h" + #include "utils_time.h" #include "liboconfig/oconfig.h" diff --git a/src/daemon/filter_chain.c b/src/daemon/filter_chain.c index c10525de..cee479a8 100644 --- a/src/daemon/filter_chain.c +++ b/src/daemon/filter_chain.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "configfile.h" #include "plugin.h" #include "utils_complain.h" @@ -356,7 +357,6 @@ static int fc_config_add_rule (fc_chain_t *chain, /* {{{ */ fc_rule_t *rule; char rule_name[2*DATA_MAX_NAME_LEN] = "Unnamed rule"; int status = 0; - int i; if (ci->values_num > 1) { @@ -385,7 +385,7 @@ static int fc_config_add_rule (fc_chain_t *chain, /* {{{ */ ci->values[0].value.string); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -446,7 +446,6 @@ static int fc_config_add_chain (const oconfig_item_t *ci) /* {{{ */ { fc_chain_t *chain = NULL; int status = 0; - int i; int new_chain = 1; if ((ci->values_num != 1) @@ -474,7 +473,7 @@ static int fc_config_add_chain (const oconfig_item_t *ci) /* {{{ */ sstrncpy (chain->name, ci->values[0].value.string, sizeof (chain->name)); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -624,16 +623,13 @@ static int fc_bit_return_invoke (const data_set_t __attribute__((unused)) *ds, / static int fc_bit_write_create (const oconfig_item_t *ci, /* {{{ */ void **user_data) { - int i; - fc_writer_t *plugin_list = NULL; size_t plugin_list_len = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; fc_writer_t *temp; - int j; if (strcasecmp ("Plugin", child->key) != 0) { @@ -643,7 +639,7 @@ static int fc_bit_write_create (const oconfig_item_t *ci, /* {{{ */ continue; } - for (j = 0; j < child->values_num; j++) + for (int j = 0; j < child->values_num; j++) { char *plugin; @@ -684,14 +680,13 @@ static int fc_bit_write_create (const oconfig_item_t *ci, /* {{{ */ static int fc_bit_write_destroy (void **user_data) /* {{{ */ { fc_writer_t *plugin_list; - size_t i; if ((user_data == NULL) || (*user_data == NULL)) return (0); plugin_list = *user_data; - for (i = 0; plugin_list[i].plugin != NULL; i++) + for (size_t i = 0; plugin_list[i].plugin != NULL; i++) free (plugin_list[i].plugin); free (plugin_list); @@ -744,9 +739,7 @@ static int fc_bit_write_invoke (const data_set_t *ds, /* {{{ */ } else { - size_t i; - - for (i = 0; plugin_list[i].plugin != NULL; i++) + for (size_t i = 0; plugin_list[i].plugin != NULL; i++) { status = plugin_write (plugin_list[i].plugin, ds, vl); if (status != 0) @@ -874,12 +867,10 @@ int fc_register_target (const char *name, target_proc_t proc) /* {{{ */ fc_chain_t *fc_chain_get_by_name (const char *chain_name) /* {{{ */ { - fc_chain_t *chain; - if (chain_name == NULL) return (NULL); - for (chain = chain_list_head; chain != NULL; chain = chain->next) + for (fc_chain_t *chain = chain_list_head; chain != NULL; chain = chain->next) if (strcasecmp (chain_name, chain->name) == 0) return (chain); @@ -889,7 +880,6 @@ fc_chain_t *fc_chain_get_by_name (const char *chain_name) /* {{{ */ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ fc_chain_t *chain) { - fc_rule_t *rule; fc_target_t *target; int status = FC_TARGET_CONTINUE; @@ -898,7 +888,7 @@ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ DEBUG ("fc_process_chain (chain = %s);", chain->name); - for (rule = chain->rules; rule != NULL; rule = rule->next) + for (fc_rule_t *rule = chain->rules; rule != NULL; rule = rule->next) { fc_match_t *match; status = FC_TARGET_CONTINUE; diff --git a/src/daemon/filter_chain.h b/src/daemon/filter_chain.h index dbf4b833..2d280f89 100644 --- a/src/daemon/filter_chain.h +++ b/src/daemon/filter_chain.h @@ -28,6 +28,7 @@ #define FILTER_CHAIN_H 1 #include "collectd.h" + #include "plugin.h" #define FC_MATCH_NO_MATCH 0 diff --git a/src/daemon/meta_data.c b/src/daemon/meta_data.c index f4a340cb..9e4fd07e 100644 --- a/src/daemon/meta_data.c +++ b/src/daemon/meta_data.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "meta_data.h" @@ -332,8 +333,6 @@ meta_data_t *meta_data_clone (meta_data_t *orig) /* {{{ */ int meta_data_clone_merge (meta_data_t **dest, meta_data_t *orig) /* {{{ */ { - meta_entry_t *e; - if (orig == NULL) return (0); @@ -343,7 +342,7 @@ int meta_data_clone_merge (meta_data_t **dest, meta_data_t *orig) /* {{{ */ } pthread_mutex_lock (&orig->lock); - for (e=orig->head; e != NULL; e = e->next) + for (meta_entry_t *e=orig->head; e != NULL; e = e->next) { md_entry_insert_clone((*dest), e); } @@ -364,14 +363,12 @@ void meta_data_destroy (meta_data_t *md) /* {{{ */ int meta_data_exists (meta_data_t *md, const char *key) /* {{{ */ { - meta_entry_t *e; - if ((md == NULL) || (key == NULL)) return (-EINVAL); pthread_mutex_lock (&md->lock); - for (e = md->head; e != NULL; e = e->next) + for (meta_entry_t *e = md->head; e != NULL; e = e->next) { if (strcasecmp (key, e->key) == 0) { @@ -386,14 +383,12 @@ int meta_data_exists (meta_data_t *md, const char *key) /* {{{ */ int meta_data_type (meta_data_t *md, const char *key) /* {{{ */ { - meta_entry_t *e; - if ((md == NULL) || (key == NULL)) return -EINVAL; pthread_mutex_lock (&md->lock); - for (e = md->head; e != NULL; e = e->next) + for (meta_entry_t *e = md->head; e != NULL; e = e->next) { if (strcasecmp (key, e->key) == 0) { @@ -409,14 +404,13 @@ int meta_data_type (meta_data_t *md, const char *key) /* {{{ */ int meta_data_toc (meta_data_t *md, char ***toc) /* {{{ */ { int i = 0, count = 0; - meta_entry_t *e; if ((md == NULL) || (toc == NULL)) return -EINVAL; pthread_mutex_lock (&md->lock); - for (e = md->head; e != NULL; e = e->next) + for (meta_entry_t *e = md->head; e != NULL; e = e->next) ++count; if (count == 0) @@ -426,7 +420,7 @@ int meta_data_toc (meta_data_t *md, char ***toc) /* {{{ */ } *toc = calloc(count, sizeof(**toc)); - for (e = md->head; e != NULL; e = e->next) + for (meta_entry_t *e = md->head; e != NULL; e = e->next) (*toc)[i++] = strdup(e->key); pthread_mutex_unlock (&md->lock); diff --git a/src/daemon/meta_data.h b/src/daemon/meta_data.h index 9e448e55..0398c546 100644 --- a/src/daemon/meta_data.h +++ b/src/daemon/meta_data.h @@ -29,6 +29,7 @@ #include "collectd.h" + /* * Defines */ diff --git a/src/daemon/meta_data_test.c b/src/daemon/meta_data_test.c index 48760d64..35cfe715 100644 --- a/src/daemon/meta_data_test.c +++ b/src/daemon/meta_data_test.c @@ -26,6 +26,7 @@ #include "common.h" /* for STATIC_ARRAY_SIZE */ #include "collectd.h" + #include "testing.h" #include "meta_data.h" diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index 9258b885..1bee8cdd 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -318,8 +319,8 @@ static void log_list_callbacks (llist_t **list, /* {{{ */ { char *str; int len; - llentry_t *le; int i; + llentry_t *le; int n; char **keys; @@ -654,8 +655,6 @@ static void *plugin_read_thread (void __attribute__((unused)) *args) static void start_read_threads (int num) { - int i; - if (read_threads != NULL) return; @@ -667,7 +666,7 @@ static void start_read_threads (int num) } read_threads_num = 0; - for (i = 0; i < num; i++) + for (int i = 0; i < num; i++) { if (pthread_create (read_threads + read_threads_num, NULL, plugin_read_thread, NULL) == 0) @@ -684,8 +683,6 @@ static void start_read_threads (int num) static void stop_read_threads (void) { - int i; - if (read_threads == NULL) return; @@ -697,7 +694,7 @@ static void stop_read_threads (void) pthread_cond_broadcast (&read_cond); pthread_mutex_unlock (&read_lock); - for (i = 0; i < read_threads_num; i++) + for (int i = 0; i < read_threads_num; i++) { if (pthread_join (read_threads[i], NULL) != 0) { @@ -869,8 +866,6 @@ static void *plugin_write_thread (void __attribute__((unused)) *args) /* {{{ */ static void start_write_threads (size_t num) /* {{{ */ { - size_t i; - if (write_threads != NULL) return; @@ -882,7 +877,7 @@ static void start_write_threads (size_t num) /* {{{ */ } write_threads_num = 0; - for (i = 0; i < num; i++) + for (size_t i = 0; i < num; i++) { int status; @@ -1459,7 +1454,6 @@ static void plugin_free_data_sets (void) int plugin_register_data_set (const data_set_t *ds) { data_set_t *ds_copy; - size_t i; if ((data_sets != NULL) && (c_avl_get (data_sets, ds->type, NULL) == 0)) @@ -1487,7 +1481,7 @@ int plugin_register_data_set (const data_set_t *ds) return (-1); } - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) memcpy (ds_copy->ds + i, ds->ds + i, sizeof (data_source_t)); return (c_avl_insert (data_sets, (void *) ds_copy->type, (void *) ds_copy)); @@ -1980,10 +1974,10 @@ int plugin_shutdown_all (void) llentry_t *le; int ret = 0; // Assume success. - stop_read_threads (); - destroy_all_callbacks (&list_init); + stop_read_threads (); + pthread_mutex_lock (&read_lock); llist_destroy (read_list); read_list = NULL; @@ -1991,6 +1985,10 @@ int plugin_shutdown_all (void) destroy_read_heap (); + /* blocks until all write threads have shut down. */ + stop_write_threads (); + + /* ask all plugins to write out the state they kept. */ plugin_flush (/* plugin = */ NULL, /* timeout = */ 0, /* identifier = */ NULL); @@ -2021,8 +2019,6 @@ int plugin_shutdown_all (void) plugin_set_ctx (old_ctx); } - stop_write_threads (); - /* Write plugins which use the `user_data' pointer usually need the * same data available to the flush callback. If this is the case, set * the free_function to NULL when registering the flush callback and to @@ -2685,14 +2681,12 @@ int plugin_notification_meta_add_boolean (notification_t *n, int plugin_notification_meta_copy (notification_t *dst, const notification_t *src) { - notification_meta_t *meta; - assert (dst != NULL); assert (src != NULL); assert (dst != src); assert ((src->meta == NULL) || (src->meta != dst->meta)); - for (meta = src->meta; meta != NULL; meta = meta->next) + for (notification_meta_t *meta = src->meta; meta != NULL; meta = meta->next) { if (meta->type == NM_TYPE_STRING) plugin_notification_meta_add_string (dst, meta->name, diff --git a/src/daemon/plugin.h b/src/daemon/plugin.h index 75498c8a..49edba25 100644 --- a/src/daemon/plugin.h +++ b/src/daemon/plugin.h @@ -29,6 +29,7 @@ #define PLUGIN_H #include "collectd.h" + #include "configfile.h" #include "meta_data.h" #include "utils_time.h" @@ -38,7 +39,7 @@ #define PLUGIN_FLAGS_GLOBAL 0x0001 #ifndef DATA_MAX_NAME_LEN -# define DATA_MAX_NAME_LEN 64 +# define DATA_MAX_NAME_LEN 128 #endif #define DS_TYPE_COUNTER 0 diff --git a/src/daemon/types_list.c b/src/daemon/types_list.c index de6fce3e..34c222c7 100644 --- a/src/daemon/types_list.c +++ b/src/daemon/types_list.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -102,7 +103,6 @@ static void parse_line (char *buf) char *fields[64]; size_t fields_num; data_set_t *ds; - size_t i; fields_num = strsplit (buf, fields, 64); if (fields_num < 2) @@ -126,7 +126,7 @@ static void parse_line (char *buf) return; } - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) if (parse_ds (ds->ds + i, fields[i + 1], strlen (fields[i + 1])) != 0) { ERROR ("types_list: parse_line: Cannot parse data source #%zu " diff --git a/src/daemon/utils_avltree.h b/src/daemon/utils_avltree.h index 1e0f271f..43e94cfb 100644 --- a/src/daemon/utils_avltree.h +++ b/src/daemon/utils_avltree.h @@ -42,7 +42,7 @@ typedef struct c_avl_iterator_s c_avl_iterator_t; * * PARAMETERS * `compare' The function-pointer `compare' is used to compare two keys. It - * has to return less than zero if it's first argument is smaller + * has to return less than zero if its first argument is smaller * then the second argument, more than zero if the first argument * is bigger than the second argument and zero if they are equal. * If your keys are char-pointers, you can use the `strcmp' @@ -131,7 +131,7 @@ int c_avl_get (c_avl_tree_t *t, const void *key, void **value); * c_avl_pick * * DESCRIPTION - * Remove a (pseudo-)random element from the tree and return it's `key' and + * Remove a (pseudo-)random element from the tree and return its `key' and * `value'. Entries are not returned in any particular order. This function * is intended for cache-flushes that don't care about the order but simply * want to remove all elements, one at a time. diff --git a/src/daemon/utils_avltree_test.c b/src/daemon/utils_avltree_test.c index 489d60fa..150dd1b5 100644 --- a/src/daemon/utils_avltree_test.c +++ b/src/daemon/utils_avltree_test.c @@ -26,6 +26,7 @@ #include "common.h" /* STATIC_ARRAY_SIZE */ #include "collectd.h" + #include "testing.h" #include "utils_avltree.h" @@ -70,13 +71,12 @@ DEF_TEST(success) }; c_avl_tree_t *t; - size_t i; RESET_COUNTS (); CHECK_NOT_NULL (t = c_avl_create (compare_callback)); /* insert */ - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char *key; char *value; @@ -89,11 +89,11 @@ DEF_TEST(success) } /* Key already exists. */ - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) EXPECT_EQ_INT (1, c_avl_insert (t, cases[i].key, cases[i].value)); /* get */ - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char *value_ret = NULL; @@ -102,7 +102,7 @@ DEF_TEST(success) } /* remove half */ - for (i = 0; i < STATIC_ARRAY_SIZE (cases) / 2; i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases) / 2; i++) { char *key = NULL; char *value = NULL; @@ -121,7 +121,7 @@ DEF_TEST(success) } /* pick the other half */ - for (i = STATIC_ARRAY_SIZE (cases) / 2; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = STATIC_ARRAY_SIZE (cases) / 2; i < STATIC_ARRAY_SIZE (cases); i++) { char *key = NULL; char *value = NULL; diff --git a/src/daemon/utils_cache.c b/src/daemon/utils_cache.c index fa592f09..7c1fa41e 100644 --- a/src/daemon/utils_cache.c +++ b/src/daemon/utils_cache.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_avltree.h" @@ -135,9 +136,7 @@ static void cache_free (cache_entry_t *ce) static void uc_check_range (const data_set_t *ds, cache_entry_t *ce) { - size_t i; - - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if (isnan (ce->values_gauge[i])) continue; @@ -153,7 +152,6 @@ static int uc_insert (const data_set_t *ds, const value_list_t *vl, { char *key_copy; cache_entry_t *ce; - size_t i; /* `cache_lock' has been locked by `uc_update' */ @@ -174,7 +172,7 @@ static int uc_insert (const data_set_t *ds, const value_list_t *vl, sstrncpy (ce->name, key, sizeof (ce->name)); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { switch (ds->ds[i].type) { @@ -253,7 +251,6 @@ int uc_check_timeout (void) c_avl_iterator_t *iter; int status; - int i; pthread_mutex_lock (&cache_lock); @@ -325,7 +322,7 @@ int uc_check_timeout (void) * including plugin specific meta data, rates, history, …. This must be done * without holding the lock, otherwise we will run into a deadlock if a * plugin calls the cache interface. */ - for (i = 0; i < keys_len; i++) + for (int i = 0; i < keys_len; i++) { value_list_t vl = VALUE_LIST_INIT; @@ -350,7 +347,7 @@ int uc_check_timeout (void) * the timestamp again, so in theory it is possible we remove a value after * it is updated here. */ pthread_mutex_lock (&cache_lock); - for (i = 0; i < keys_len; i++) + for (int i = 0; i < keys_len; i++) { key = NULL; ce = NULL; @@ -382,7 +379,6 @@ int uc_update (const data_set_t *ds, const value_list_t *vl) char name[6 * DATA_MAX_NAME_LEN]; cache_entry_t *ce = NULL; int status; - size_t i; if (FORMAT_VL (name, sizeof (name), vl) != 0) { @@ -414,7 +410,7 @@ int uc_update (const data_set_t *ds, const value_list_t *vl) return (-1); } - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { switch (ds->ds[i].type) { @@ -463,7 +459,7 @@ int uc_update (const data_set_t *ds, const value_list_t *vl) if (ce->history != NULL) { assert (ce->history_index < ce->history_length); - for (i = 0; i < ce->values_num; i++) + for (size_t i = 0; i < ce->values_num; i++) { size_t hist_idx = (ce->values_num * ce->history_index) + i; ce->history[hist_idx] = ce->values_gauge[i]; @@ -643,9 +639,7 @@ int uc_get_names (char ***ret_names, cdtime_t **ret_times, size_t *ret_number) if (status != 0) { - size_t i; - - for (i = 0; i < number; i++) + for (size_t i = 0; i < number; i++) { sfree (names[i]); } @@ -720,7 +714,6 @@ int uc_get_history_by_name (const char *name, gauge_t *ret_history, size_t num_steps, size_t num_ds) { cache_entry_t *ce = NULL; - size_t i; int status = 0; pthread_mutex_lock (&cache_lock); @@ -752,7 +745,7 @@ int uc_get_history_by_name (const char *name, return (-ENOMEM); } - for (i = ce->history_length * ce->values_num; + for (size_t i = ce->history_length * ce->values_num; i < (num_steps * ce->values_num); i++) tmp[i] = NAN; @@ -762,7 +755,7 @@ int uc_get_history_by_name (const char *name, } /* if (ce->history_length < num_steps) */ /* Copy the values to the output buffer. */ - for (i = 0; i < num_steps; i++) + for (size_t i = 0; i < num_steps; i++) { size_t src_index; size_t dst_index; @@ -947,8 +940,6 @@ int uc_iterator_get_time (uc_iter_t *iter, cdtime_t *ret_time) int uc_iterator_get_values (uc_iter_t *iter, value_t **ret_values, size_t *ret_num) { - size_t i; - if ((iter == NULL) || (iter->entry == NULL) || (ret_values == NULL) || (ret_num == NULL)) return (-1); @@ -956,7 +947,7 @@ int uc_iterator_get_values (uc_iter_t *iter, value_t **ret_values, size_t *ret_n *ret_values = calloc (iter->entry->values_num, sizeof(*iter->entry->values_raw)); if (*ret_values == NULL) return (-1); - for (i = 0; i < iter->entry->values_num; ++i) + for (size_t i = 0; i < iter->entry->values_num; ++i) *ret_values[i] = iter->entry->values_raw[i]; *ret_num = iter->entry->values_num; diff --git a/src/daemon/utils_complain.c b/src/daemon/utils_complain.c index 1cf6c3aa..d028c067 100644 --- a/src/daemon/utils_complain.c +++ b/src/daemon/utils_complain.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "utils_complain.h" #include "plugin.h" diff --git a/src/daemon/utils_heap.h b/src/daemon/utils_heap.h index 6d71c43a..243554c6 100644 --- a/src/daemon/utils_heap.h +++ b/src/daemon/utils_heap.h @@ -39,7 +39,7 @@ typedef struct c_heap_s c_heap_t; * * PARAMETERS * `compare' The function-pointer `compare' is used to compare two keys. It - * has to return less than zero if it's first argument is smaller + * has to return less than zero if its first argument is smaller * then the second argument, more than zero if the first argument * is bigger than the second argument and zero if they are equal. * If your keys are char-pointers, you can use the `strcmp' diff --git a/src/daemon/utils_heap_test.c b/src/daemon/utils_heap_test.c index 6ef80475..54a9613a 100644 --- a/src/daemon/utils_heap_test.c +++ b/src/daemon/utils_heap_test.c @@ -25,6 +25,7 @@ */ #include "collectd.h" + #include "testing.h" #include "utils_heap.h" @@ -44,14 +45,13 @@ static int compare (void const *v0, void const *v1) DEF_TEST(simple) { int values[] = { 9, 5, 6, 1, 3, 4, 0, 8, 2, 7 }; - int i; c_heap_t *h; CHECK_NOT_NULL(h = c_heap_create (compare)); - for (i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) CHECK_ZERO(c_heap_insert (h, &values[i])); - for (i = 0; i < 5; i++) + for (int i = 0; i < 5; i++) { int *ret = NULL; CHECK_NOT_NULL(ret = c_heap_get_root(h)); @@ -64,7 +64,7 @@ DEF_TEST(simple) CHECK_ZERO(c_heap_insert (h, &values[4] /* = 3 */)); CHECK_ZERO(c_heap_insert (h, &values[5] /* = 4 */)); - for (i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) { int *ret = NULL; CHECK_NOT_NULL(ret = c_heap_get_root(h)); diff --git a/src/daemon/utils_ignorelist.c b/src/daemon/utils_ignorelist.c index 311cb07b..ff73ad74 100644 --- a/src/daemon/utils_ignorelist.c +++ b/src/daemon/utils_ignorelist.c @@ -304,8 +304,6 @@ int ignorelist_add (ignorelist_t *il, const char *entry) */ int ignorelist_match (ignorelist_t *il, const char *entry) { - ignorelist_item_t *traverse; - /* if no entries, collect all */ if ((il == NULL) || (il->head == NULL)) return (0); @@ -314,7 +312,7 @@ int ignorelist_match (ignorelist_t *il, const char *entry) return (0); /* traverse list and check entries */ - for (traverse = il->head; traverse != NULL; traverse = traverse->next) + for (ignorelist_item_t *traverse = il->head; traverse != NULL; traverse = traverse->next) { #if HAVE_REGEX_H if (traverse->rmatch != NULL) diff --git a/src/daemon/utils_match.c b/src/daemon/utils_match.c index b4cd5171..914b6e27 100644 --- a/src/daemon/utils_match.c +++ b/src/daemon/utils_match.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -169,7 +170,7 @@ static int default_callback (const char __attribute__((unused)) *str, if (data->ds_type & UTILS_MATCH_CF_DERIVE_INC) { - data->value.counter++; + data->value.derive++; data->values_num++; return (0); } @@ -323,7 +324,6 @@ int match_apply (cu_match_t *obj, const char *str) regmatch_t re_match[32]; char *matches[32] = { 0 }; size_t matches_num; - size_t i; if ((obj == NULL) || (str == NULL)) return (-1); @@ -375,7 +375,7 @@ int match_apply (cu_match_t *obj, const char *str) } } - for (i = 0; i < matches_num; i++) + for (size_t i = 0; i < matches_num; i++) { sfree (matches[i]); } diff --git a/src/daemon/utils_random.c b/src/daemon/utils_random.c index fee08717..0488f913 100644 --- a/src/daemon/utils_random.c +++ b/src/daemon/utils_random.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "utils_time.h" #include "utils_random.h" diff --git a/src/daemon/utils_subst.c b/src/daemon/utils_subst.c index 9284f733..1bc28f72 100644 --- a/src/daemon/utils_subst.c +++ b/src/daemon/utils_subst.c @@ -29,6 +29,7 @@ */ #include "collectd.h" + #include "common.h" #include "utils_subst.h" diff --git a/src/daemon/utils_subst_test.c b/src/daemon/utils_subst_test.c index 953ccc4c..c6caba20 100644 --- a/src/daemon/utils_subst_test.c +++ b/src/daemon/utils_subst_test.c @@ -26,6 +26,7 @@ #include "common.h" /* for STATIC_ARRAY_SIZE */ #include "collectd.h" + #include "testing.h" #include "utils_subst.h" @@ -75,9 +76,8 @@ DEF_TEST(subst) {"foo bar", 4, 3, "_", NULL}, /* off1 > off2 */ {"foo bar", 3, 4, NULL, NULL}, /* no replacement */ }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[16] = "!!!!!!!!!!!!!!!"; if (cases[i].want == NULL) { @@ -108,9 +108,8 @@ DEF_TEST(subst_string) {"foo bar", "oo", "oo", "foo bar"}, {"sixteen chars", "chars", "characters", "sixteen charact"}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[16]; if (cases[i].want == NULL) { diff --git a/src/daemon/utils_tail.c b/src/daemon/utils_tail.c index a6fb6005..0d8ed7c1 100644 --- a/src/daemon/utils_tail.c +++ b/src/daemon/utils_tail.c @@ -31,6 +31,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_tail.h" diff --git a/src/daemon/utils_tail_match.c b/src/daemon/utils_tail_match.c index 1aeb814a..ffcaa90a 100644 --- a/src/daemon/utils_tail_match.c +++ b/src/daemon/utils_tail_match.c @@ -30,6 +30,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_match.h" @@ -111,9 +112,8 @@ static int tail_callback (void *data, char *buf, int __attribute__((unused)) buflen) { cu_tail_match_t *obj = (cu_tail_match_t *) data; - size_t i; - for (i = 0; i < obj->matches_num; i++) + for (size_t i = 0; i < obj->matches_num; i++) match_apply (obj->matches[i].match, buf); return (0); @@ -142,8 +142,6 @@ cu_tail_match_t *tail_match_create (const char *filename) void tail_match_destroy (cu_tail_match_t *obj) { - size_t i; - if (obj == NULL) return; @@ -153,7 +151,7 @@ void tail_match_destroy (cu_tail_match_t *obj) obj->tail = NULL; } - for (i = 0; i < obj->matches_num; i++) + for (size_t i = 0; i < obj->matches_num; i++) { cu_tail_match_match_t *match = obj->matches + i; if (match->match != NULL) @@ -246,7 +244,6 @@ int tail_match_read (cu_tail_match_t *obj) { char buffer[4096]; int status; - size_t i; status = cu_tail_read (obj->tail, buffer, sizeof (buffer), tail_callback, (void *) obj); @@ -256,7 +253,7 @@ int tail_match_read (cu_tail_match_t *obj) return (status); } - for (i = 0; i < obj->matches_num; i++) + for (size_t i = 0; i < obj->matches_num; i++) { cu_tail_match_match_t *lt_match = obj->matches + i; diff --git a/src/daemon/utils_threshold.c b/src/daemon/utils_threshold.c index cb1ea34a..784e1094 100644 --- a/src/daemon/utils_threshold.c +++ b/src/daemon/utils_threshold.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_avltree.h" #include "utils_threshold.h" diff --git a/src/daemon/utils_time.c b/src/daemon/utils_time.c index 56c250cd..86476ea6 100644 --- a/src/daemon/utils_time.c +++ b/src/daemon/utils_time.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "utils_time.h" #include "plugin.h" #include "common.h" diff --git a/src/daemon/utils_time_test.c b/src/daemon/utils_time_test.c index 4d64991b..9f043683 100644 --- a/src/daemon/utils_time_test.c +++ b/src/daemon/utils_time_test.c @@ -27,6 +27,7 @@ #define DBL_PRECISION 1e-3 #include "collectd.h" + #include "testing.h" #include "utils_time.h" @@ -64,9 +65,8 @@ DEF_TEST(conversion) // 1546167986577716567 / 2^30 = 1439981150.0475896215... {1546167986577716567ULL, 1439981150.048, 1439981150, 1439981150048ULL, {1439981150, 47590}, {1439981150, 47589622}}, }; - size_t i; - for (i = 0; i < (sizeof (cases) / sizeof (cases[0])); i++) { + for (size_t i = 0; i < (sizeof (cases) / sizeof (cases[0])); i++) { struct timeval tv; struct timespec ts; @@ -107,9 +107,8 @@ DEF_TEST(ns_to_cdtime) // 1439981880053705608 * 2^30 / 10^9 = 1546168770415815077.4 {1439981880053705608ULL, 1546168770415815077ULL}, }; - size_t i; - for (i = 0; i < (sizeof (cases) / sizeof (cases[0])); i++) { + for (size_t i = 0; i < (sizeof (cases) / sizeof (cases[0])); i++) { EXPECT_EQ_UINT64 (cases[i].want, NS_TO_CDTIME_T (cases[i].ns)); } diff --git a/src/dbi.c b/src/dbi.c index d5a6c603..b93aa51e 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -178,15 +179,13 @@ static int cdbi_result_get_field (dbi_result res, /* {{{ */ static void cdbi_database_free (cdbi_database_t *db) /* {{{ */ { - size_t i; - if (db == NULL) return; sfree (db->name); sfree (db->driver); - for (i = 0; i < db->driver_options_num; i++) + for (size_t i = 0; i < db->driver_options_num; i++) { sfree (db->driver_options[i].key); if (!db->driver_options[i].is_numeric) @@ -195,7 +194,7 @@ static void cdbi_database_free (cdbi_database_t *db) /* {{{ */ sfree (db->driver_options); if (db->q_prep_areas) - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) udb_query_delete_preparation_area (db->q_prep_areas[i]); free (db->q_prep_areas); @@ -284,7 +283,6 @@ static int cdbi_config_add_database (oconfig_item_t *ci) /* {{{ */ { cdbi_database_t *db; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -309,7 +307,7 @@ static int cdbi_config_add_database (oconfig_item_t *ci) /* {{{ */ } /* Fill the `cdbi_database_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -355,8 +353,6 @@ static int cdbi_config_add_database (oconfig_item_t *ci) /* {{{ */ while ((status == 0) && (db->queries_num > 0)) { - size_t j; - db->q_prep_areas = calloc (db->queries_num, sizeof (*db->q_prep_areas)); if (db->q_prep_areas == NULL) { @@ -365,12 +361,12 @@ static int cdbi_config_add_database (oconfig_item_t *ci) /* {{{ */ break; } - for (j = 0; j < db->queries_num; ++j) + for (size_t i = 0; i < db->queries_num; ++i) { - db->q_prep_areas[j] - = udb_query_allocate_preparation_area (db->queries[j]); + db->q_prep_areas[i] + = udb_query_allocate_preparation_area (db->queries[i]); - if (db->q_prep_areas[j] == NULL) + if (db->q_prep_areas[i] == NULL) { WARNING ("dbi plugin: udb_query_allocate_preparation_area failed"); status = -1; @@ -426,9 +422,7 @@ static int cdbi_config_add_database (oconfig_item_t *ci) /* {{{ */ static int cdbi_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Query", child->key) == 0) @@ -497,7 +491,6 @@ static int cdbi_read_database_query (cdbi_database_t *db, /* {{{ */ char **column_names; char **column_values; int status; - size_t i; /* Macro that cleans up dynamically allocated memory and returns the * specified status. */ @@ -557,7 +550,7 @@ static int cdbi_read_database_query (cdbi_database_t *db, /* {{{ */ ERROR ("dbi plugin: calloc failed."); BAIL_OUT (-1); } - for (i = 1; i < column_num; i++) + for (size_t i = 1; i < column_num; i++) column_names[i] = column_names[i - 1] + DATA_MAX_NAME_LEN; column_values = calloc (column_num, sizeof (*column_values)); @@ -573,12 +566,12 @@ static int cdbi_read_database_query (cdbi_database_t *db, /* {{{ */ ERROR ("dbi plugin: calloc failed."); BAIL_OUT (-1); } - for (i = 1; i < column_num; i++) + for (size_t i = 1; i < column_num; i++) column_values[i] = column_values[i - 1] + DATA_MAX_NAME_LEN; /* }}} */ /* Copy the field names to `column_names' */ - for (i = 0; i < column_num; i++) /* {{{ */ + for (size_t i = 0; i < column_num; i++) /* {{{ */ { const char *column_name; @@ -618,7 +611,7 @@ static int cdbi_read_database_query (cdbi_database_t *db, /* {{{ */ { status = 0; /* Copy the value of the columns to `column_values' */ - for (i = 0; i < column_num; i++) /* {{{ */ + for (size_t i = 0; i < column_num; i++) /* {{{ */ { status = cdbi_result_get_field (res, (unsigned int) (i + 1), column_values[i], DATA_MAX_NAME_LEN); @@ -674,7 +667,6 @@ static int cdbi_connect_database (cdbi_database_t *db) /* {{{ */ { dbi_driver driver; dbi_conn connection; - size_t i; int status; if (db->connection != NULL) @@ -716,7 +708,7 @@ static int cdbi_connect_database (cdbi_database_t *db) /* {{{ */ * encountered, it will get a list of options understood by the driver and * report that as `INFO'. This way, users hopefully don't have too much * trouble finding out how to configure the plugin correctly.. */ - for (i = 0; i < db->driver_options_num; i++) + for (size_t i = 0; i < db->driver_options_num; i++) { if (db->driver_options[i].is_numeric) { @@ -749,11 +741,9 @@ static int cdbi_connect_database (cdbi_database_t *db) /* {{{ */ if (status != 0) { - char const *opt; - INFO ("dbi plugin: This is a list of all options understood " "by the `%s' driver:", db->driver); - for (opt = dbi_conn_get_option_list (connection, NULL); + for (const char *opt = dbi_conn_get_option_list (connection, NULL); opt != NULL; opt = dbi_conn_get_option_list (connection, opt)) { @@ -798,7 +788,6 @@ static int cdbi_connect_database (cdbi_database_t *db) /* {{{ */ static int cdbi_read_database (user_data_t *ud) /* {{{ */ { cdbi_database_t *db = (cdbi_database_t *) ud->data; - size_t i; int success; int status; @@ -813,7 +802,7 @@ static int cdbi_read_database (user_data_t *ud) /* {{{ */ /* TODO: Complain if `db_version == 0' */ success = 0; - for (i = 0; i < db->queries_num; i++) + for (size_t i = 0; i < db->queries_num; i++) { /* Check if we know the database's version and if so, if this query applies * to that version. */ @@ -838,9 +827,7 @@ static int cdbi_read_database (user_data_t *ud) /* {{{ */ static int cdbi_shutdown (void) /* {{{ */ { - size_t i; - - for (i = 0; i < databases_num; i++) + for (size_t i = 0; i < databases_num; i++) { if (databases[i]->connection != NULL) { diff --git a/src/df.c b/src/df.c index ff701725..83be1764 100644 --- a/src/df.c +++ b/src/df.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -190,7 +191,6 @@ static int df_read (void) #endif /* struct STATANYFS statbuf; */ cu_mount_t *mnt_list; - cu_mount_t *mnt_ptr; mnt_list = NULL; if (cu_mount_getlist (&mnt_list) == NULL) @@ -199,7 +199,7 @@ static int df_read (void) return (-1); } - for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) + for (cu_mount_t *mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) { unsigned long long blocksize; char disk_name[256]; @@ -273,12 +273,12 @@ static int df_read (void) sstrncpy (disk_name, "root", sizeof (disk_name)); else { - int i, len; + int len; sstrncpy (disk_name, mnt_ptr->dir + 1, sizeof (disk_name)); len = strlen (disk_name); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) if (disk_name[i] == '/') disk_name[i] = '-'; } diff --git a/src/disk.c b/src/disk.c index 9965bca7..d7eb0a5c 100644 --- a/src/disk.c +++ b/src/disk.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" @@ -953,12 +954,11 @@ static int disk_read (void) # error "kstat_io_t does not have the required members" # endif static kstat_io_t kio; - int i; if (kc == NULL) return (-1); - for (i = 0; i < numdisk; i++) + for (int i = 0; i < numdisk; i++) { if (kstat_read (kc, ksp[i], &kio) == -1) continue; @@ -996,13 +996,12 @@ static int disk_read (void) # else int disks; #endif - int counter; char name[DATA_MAX_NAME_LEN]; if ((ds = sg_get_disk_io_stats(&disks)) == NULL) return (0); - for (counter=0; counter < disks; counter++) { + for (int counter = 0; counter < disks; counter++) { strncpy(name, ds->disk_name, sizeof(name)); name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */ @@ -1025,7 +1024,6 @@ static int disk_read (void) derive_t write_ops; perfstat_id_t firstpath; int rnumdisk; - int i; if ((numdisk = perfstat_disk(NULL, NULL, sizeof(perfstat_disk_t), 0)) < 0) { @@ -1051,7 +1049,7 @@ static int disk_read (void) return (-1); } - for (i = 0; i < rnumdisk; i++) + for (int i = 0; i < rnumdisk; i++) { if (ignorelist_match (ignorelist, stat_disk[i].name) != 0) continue; diff --git a/src/dns.c b/src/dns.c index 5930dc50..a2a4667a 100644 --- a/src/dns.c +++ b/src/dns.c @@ -25,6 +25,7 @@ #define _BSD_SOURCE #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -34,6 +35,10 @@ #include +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + /* * Private data types */ @@ -346,6 +351,20 @@ static int dns_init (void) listen_thread_init = 1; +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_NET_RAW) + if (check_capability (CAP_NET_RAW) != 0) + { + if (getuid () == 0) + WARNING ("dns plugin: Running collectd as root, but the CAP_NET_RAW " + "capability is missing. The plugin's read function will probably " + "fail. Is your init system dropping capabilities?"); + else + WARNING ("dns plugin: collectd doesn't have the CAP_NET_RAW capability. " + "If you don't want to run collectd as root, try running \"setcap " + "cap_net_raw=ep\" on the collectd binary."); + } +#endif + return (0); } /* int dns_init */ @@ -389,7 +408,6 @@ static int dns_read (void) unsigned int keys[T_MAX]; unsigned int values[T_MAX]; int len; - int i; counter_list_t *ptr; @@ -411,7 +429,7 @@ static int dns_read (void) } pthread_mutex_unlock (&qtype_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: qtype = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_qtype", qtype_str (keys[i]), values[i]); @@ -427,7 +445,7 @@ static int dns_read (void) } pthread_mutex_unlock (&opcode_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: opcode = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_opcode", opcode_str (keys[i]), values[i]); @@ -443,7 +461,7 @@ static int dns_read (void) } pthread_mutex_unlock (&rcode_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: rcode = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_rcode", rcode_str (keys[i]), values[i]); diff --git a/src/drbd.c b/src/drbd.c index f0298943..70f03cab 100644 --- a/src/drbd.c +++ b/src/drbd.c @@ -35,6 +35,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -69,7 +70,6 @@ static int drbd_submit_fields (long int resource, char plugin_instance[DATA_MAX_NAME_LEN]; value_t values[fields_num]; value_list_t vl = VALUE_LIST_INIT; - size_t i; if (resource < 0) { @@ -88,7 +88,7 @@ static int drbd_submit_fields (long int resource, ssnprintf (plugin_instance, sizeof (plugin_instance), "r%ld", resource); - for (i = 0; i < drbd_names_num; i++) + for (size_t i = 0; i < drbd_names_num; i++) { char *data; /* skip non numeric wo */ @@ -107,7 +107,7 @@ static int drbd_submit_fields (long int resource, sizeof (vl.plugin_instance)); sstrncpy (vl.type, "drbd_resource", sizeof (vl.type)); - for (i = 0; i < fields_num; i++) + for (size_t i = 0; i < fields_num; i++) { if (drbd_names[i] == NULL) continue; diff --git a/src/email.c b/src/email.c index db6dd414..9dce34c4 100644 --- a/src/email.c +++ b/src/email.c @@ -39,6 +39,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -464,8 +465,6 @@ static void *open_connection (void __attribute__((unused)) *arg) } { /* initialize collector threads */ - int i = 0; - pthread_attr_t ptattr; conns.head = NULL; @@ -479,7 +478,7 @@ static void *open_connection (void __attribute__((unused)) *arg) collectors = smalloc (max_conns * sizeof (*collectors)); - for (i = 0; i < max_conns; ++i) { + for (int i = 0; i < max_conns; ++i) { collectors[i] = smalloc (sizeof (*collectors[i])); collectors[i]->socket = NULL; @@ -603,8 +602,6 @@ static void type_list_free (type_list_t *t) static int email_shutdown (void) { - int i = 0; - if (connector != ((pthread_t) 0)) { pthread_kill (connector, SIGTERM); connector = (pthread_t) 0; @@ -621,7 +618,7 @@ static int email_shutdown (void) available_collectors = 0; if (collectors != NULL) { - for (i = 0; i < max_conns; ++i) { + for (int i = 0; i < max_conns; ++i) { if (collectors[i] == NULL) continue; @@ -679,12 +676,9 @@ static void email_submit (const char *type, const char *type_instance, gauge_t v * after they have been copied to l2. */ static void copy_type_list (type_list_t *l1, type_list_t *l2) { - type_t *ptr1; - type_t *ptr2; - type_t *last = NULL; - for (ptr1 = l1->head, ptr2 = l2->head; NULL != ptr1; + for (type_t *ptr1 = l1->head, *ptr2 = l2->head; NULL != ptr1; ptr1 = ptr1->next, last = ptr2, ptr2 = ptr2->next) { if (NULL == ptr2) { ptr2 = smalloc (sizeof (*ptr2)); @@ -713,8 +707,6 @@ static void copy_type_list (type_list_t *l1, type_list_t *l2) static int email_read (void) { - type_t *ptr; - double score_old; int score_count_old; @@ -728,7 +720,7 @@ static int email_read (void) pthread_mutex_unlock (&count_mutex); - for (ptr = list_count_copy.head; NULL != ptr; ptr = ptr->next) { + for (type_t *ptr = list_count_copy.head; NULL != ptr; ptr = ptr->next) { email_submit ("email_count", ptr->name, ptr->value); } @@ -739,7 +731,7 @@ static int email_read (void) pthread_mutex_unlock (&size_mutex); - for (ptr = list_size_copy.head; NULL != ptr; ptr = ptr->next) { + for (type_t *ptr = list_size_copy.head; NULL != ptr; ptr = ptr->next) { email_submit ("email_size", ptr->name, ptr->value); } @@ -763,7 +755,7 @@ static int email_read (void) pthread_mutex_unlock (&check_mutex); - for (ptr = list_check_copy.head; NULL != ptr; ptr = ptr->next) + for (type_t *ptr = list_check_copy.head; NULL != ptr; ptr = ptr->next) email_submit ("spam_check", ptr->name, ptr->value); return (0); diff --git a/src/entropy.c b/src/entropy.c index 03de9efb..f4f4ac4a 100644 --- a/src/entropy.c +++ b/src/entropy.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/ethstat.c b/src/ethstat.c index b30f614e..a213b60a 100644 --- a/src/ethstat.c +++ b/src/ethstat.c @@ -23,6 +23,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -149,9 +150,7 @@ static int ethstat_add_map (const oconfig_item_t *ci) /* {{{ */ static int ethstat_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -221,7 +220,6 @@ static int ethstat_read_interface (char *device) size_t n_stats; size_t strings_size; size_t stats_size; - size_t i; int status; fd = socket(AF_INET, SOCK_DGRAM, /* protocol = */ 0); @@ -311,7 +309,7 @@ static int ethstat_read_interface (char *device) return (-1); } - for (i = 0; i < n_stats; i++) + for (size_t i = 0; i < n_stats; i++) { char *stat_name; @@ -335,9 +333,7 @@ static int ethstat_read_interface (char *device) static int ethstat_read(void) { - size_t i; - - for (i = 0; i < interfaces_num; i++) + for (size_t i = 0; i < interfaces_num; i++) ethstat_read_interface (interfaces[i]); return 0; diff --git a/src/exec.c b/src/exec.c index 71a49181..dfd4b05f 100644 --- a/src/exec.c +++ b/src/exec.c @@ -27,6 +27,7 @@ #define _BSD_SOURCE /* For setgroups */ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -38,6 +39,10 @@ #include #include +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + #define PL_NORMAL 0x01 #define PL_NOTIF_ACTION 0x02 @@ -245,9 +250,7 @@ static int exec_config_exec (oconfig_item_t *ci) /* {{{ */ static int exec_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if ((strcasecmp ("Exec", child->key) == 0) @@ -470,11 +473,10 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) else if (pid == 0) { int fd_num; - int fd; /* Close all file descriptors but the pipe end we need. */ fd_num = getdtablesize (); - for (fd = 0; fd < fd_num; fd++) + for (int fd = 0; fd < fd_num; fd++) { if ((fd == fd_pipe_in[0]) || (fd == fd_pipe_out[1]) @@ -720,7 +722,6 @@ static void *exec_notification_one (void *arg) /* {{{ */ { program_list_t *pl = ((program_list_and_notification_t *) arg)->pl; notification_t *n = &((program_list_and_notification_t *) arg)->n; - notification_meta_t *meta; int fd; FILE *fh; int pid; @@ -768,7 +769,7 @@ static void *exec_notification_one (void *arg) /* {{{ */ if (strlen (n->type_instance) > 0) fprintf (fh, "TypeInstance: %s\n", n->type_instance); - for (meta = n->meta; meta != NULL; meta = meta->next) + for (notification_meta_t *meta = n->meta; meta != NULL; meta = meta->next) { if (meta->type == NM_TYPE_STRING) fprintf (fh, "%s: %s\n", meta->name, meta->nm_value.nm_string); @@ -809,14 +810,28 @@ static int exec_init (void) /* {{{ */ sigaction (SIGCHLD, &sa, NULL); +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_SETUID) && defined(CAP_SETGID) + if ((check_capability (CAP_SETUID) != 0) || + (check_capability (CAP_SETGID) != 0)) + { + if (getuid () == 0) + WARNING ("exec plugin: Running collectd as root, but the CAP_SETUID " + "or CAP_SETGID capabilities are missing. The plugin's read function " + "will probably fail. Is your init system dropping capabilities?"); + else + WARNING ("exec plugin: collectd doesn't have the CAP_SETUID or " + "CAP_SETGID capabilities. If you don't want to run collectd as root, " + "try running \"setcap 'cap_setuid=ep cap_setgid=ep'\" on the " + "collectd binary."); + } +#endif + return (0); } /* int exec_init }}} */ static int exec_read (void) /* {{{ */ { - program_list_t *pl; - - for (pl = pl_head; pl != NULL; pl = pl->next) + for (program_list_t *pl = pl_head; pl != NULL; pl = pl->next) { pthread_t t; pthread_attr_t attr; @@ -847,10 +862,9 @@ static int exec_read (void) /* {{{ */ static int exec_notification (const notification_t *n, /* {{{ */ user_data_t __attribute__((unused)) *user_data) { - program_list_t *pl; program_list_and_notification_t *pln; - for (pl = pl_head; pl != NULL; pl = pl->next) + for (program_list_t *pl = pl_head; pl != NULL; pl = pl->next) { pthread_t t; pthread_attr_t attr; diff --git a/src/fhcount.c b/src/fhcount.c index 666dacc0..c7603c7d 100644 --- a/src/fhcount.c +++ b/src/fhcount.c @@ -18,6 +18,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" diff --git a/src/filecount.c b/src/filecount.c index c81fdc25..9de9e6c5 100644 --- a/src/filecount.c +++ b/src/filecount.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -334,7 +335,6 @@ static int fc_config_add_dir (oconfig_item_t *ci) { fc_directory_conf_t *dir; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -368,7 +368,7 @@ static int fc_config_add_dir (oconfig_item_t *ci) dir->size = 0; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -428,9 +428,7 @@ static int fc_config_add_dir (oconfig_item_t *ci) static int fc_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Directory", child->key) == 0) @@ -557,9 +555,7 @@ static int fc_read_dir (fc_directory_conf_t *dir) static int fc_read (void) { - size_t i; - - for (i = 0; i < directories_num; i++) + for (size_t i = 0; i < directories_num; i++) fc_read_dir (directories[i]); return (0); diff --git a/src/fscache.c b/src/fscache.c index 68f5c79c..33633d63 100644 --- a/src/fscache.c +++ b/src/fscache.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include /* a header needed for FILE */ @@ -158,7 +159,6 @@ static void fscache_read_stats_file (FILE *fh) char *lineptr; char *fields[32]; int fields_num; - int i; /* Find the colon and replace it with a null byte */ lineptr = strchr (linebuffer, ':'); @@ -182,7 +182,7 @@ static void fscache_read_stats_file (FILE *fh) if (fields_num <= 0) continue; - for (i = 0; i < fields_num; i++) + for (int i = 0; i < fields_num; i++) { char *field_name; char *field_value_str; diff --git a/src/gmond.c b/src/gmond.c index 47158c97..2b299ca0 100644 --- a/src/gmond.c +++ b/src/gmond.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -211,9 +212,7 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ size_t *ret_sockets_num, const char *node, const char *service, int listen) { - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; int ai_return; socket_entry_t *sockets = NULL; @@ -224,15 +223,12 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ if (*ret_sockets != NULL) return (EINVAL); -#ifdef AI_PASSIVE - ai_hints.ai_flags |= AI_PASSIVE; -#endif -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; - ai_hints.ai_protocol = IPPROTO_UDP; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG | AI_PASSIVE, + .ai_protocol = IPPROTO_UDP, + .ai_socktype = SOCK_DGRAM + }; ai_return = getaddrinfo (node, service, &ai_hints, &ai_list); if (ai_return != 0) @@ -247,7 +243,7 @@ static int create_sockets (socket_entry_t **ret_sockets, /* {{{ */ return (-1); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) /* {{{ */ + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) /* {{{ */ { socket_entry_t *tmp; @@ -401,7 +397,6 @@ static int request_meta_data (const char *host, const char *name) /* {{{ */ char buffer[BUFF_SIZE] = { 0 }; unsigned int buffer_size; XDR xdr; - size_t i; msg.id = gmetadata_request; msg.Ganglia_metadata_msg_u.grequest.metric_id.host = strdup (host); @@ -430,7 +425,7 @@ static int request_meta_data (const char *host, const char *name) /* {{{ */ host, name); pthread_mutex_lock (&mc_send_sockets_lock); - for (i = 0; i < mc_send_sockets_num; i++) + for (size_t i = 0; i < mc_send_sockets_num; i++) { ssize_t status = sendto (mc_send_sockets[i].fd, buffer, (size_t) buffer_size, /* flags = */ 0, @@ -832,7 +827,6 @@ static void *mc_receive_thread (void *arg) /* {{{ */ { socket_entry_t *mc_receive_socket_entries; int status; - size_t i; mc_receive_socket_entries = NULL; status = create_sockets (&mc_receive_socket_entries, &mc_receive_sockets_num, @@ -850,7 +844,7 @@ static void *mc_receive_thread (void *arg) /* {{{ */ if (mc_receive_sockets == NULL) { ERROR ("gmond plugin: calloc failed."); - for (i = 0; i < mc_receive_sockets_num; i++) + for (size_t i = 0; i < mc_receive_sockets_num; i++) close (mc_receive_socket_entries[i].fd); free (mc_receive_socket_entries); mc_receive_socket_entries = NULL; @@ -858,7 +852,7 @@ static void *mc_receive_thread (void *arg) /* {{{ */ return ((void *) -1); } - for (i = 0; i < mc_receive_sockets_num; i++) + for (size_t i = 0; i < mc_receive_sockets_num; i++) { mc_receive_sockets[i].fd = mc_receive_socket_entries[i].fd; mc_receive_sockets[i].events = POLLIN | POLLPRI; @@ -878,7 +872,7 @@ static void *mc_receive_thread (void *arg) /* {{{ */ break; } - for (i = 0; i < mc_receive_sockets_num; i++) + for (size_t i = 0; i < mc_receive_sockets_num; i++) { if (mc_receive_sockets[i].revents != 0) mc_handle_socket (mc_receive_sockets + i); @@ -966,7 +960,6 @@ static int gmond_config_set_string (oconfig_item_t *ci, char **str) /* {{{ */ static int gmond_config_add_metric (oconfig_item_t *ci) /* {{{ */ { metric_map_t *map; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -998,7 +991,7 @@ static int gmond_config_add_metric (oconfig_item_t *ci) /* {{{ */ return (-1); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Type", child->key) == 0) @@ -1075,9 +1068,7 @@ static int gmond_config_set_address (oconfig_item_t *ci, /* {{{ */ static int gmond_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("MCReceiveFrom", child->key) == 0) @@ -1115,12 +1106,10 @@ static int gmond_init (void) /* {{{ */ static int gmond_shutdown (void) /* {{{ */ { - size_t i; - mc_receive_thread_stop (); pthread_mutex_lock (&mc_send_sockets_lock); - for (i = 0; i < mc_send_sockets_num; i++) + for (size_t i = 0; i < mc_send_sockets_num; i++) { close (mc_send_sockets[i].fd); mc_send_sockets[i].fd = -1; diff --git a/src/gps.c b/src/gps.c new file mode 100644 index 00000000..19f317cb --- /dev/null +++ b/src/gps.c @@ -0,0 +1,368 @@ +/** + * collectd - src/gps.c + * Copyright (C) 2015 Nicolas JOURDEN + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Nicolas JOURDEN + * Florian octo Forster + * Marc Fournier + **/ + +#include "collectd.h" +#include "common.h" +#include "plugin.h" +#include "utils_time.h" +#include "configfile.h" + +#define CGPS_TRUE 1 +#define CGPS_FALSE 0 +#define CGPS_DEFAULT_HOST "localhost" +#define CGPS_DEFAULT_PORT "2947" /* DEFAULT_GPSD_PORT */ +#define CGPS_DEFAULT_TIMEOUT MS_TO_CDTIME_T (15) +#define CGPS_DEFAULT_PAUSE_CONNECT TIME_T_TO_CDTIME_T (5) +#define CGPS_MAX_ERROR 100 +#define CGPS_CONFIG "?WATCH={\"enable\":true,\"json\":true,\"nmea\":false}\r\n" + +#include +#include + +typedef struct { + char *host; + char *port; + cdtime_t timeout; + cdtime_t pause_connect; +} cgps_config_t; + +typedef struct { + gauge_t sats_used; + gauge_t sats_visible; + gauge_t hdop; + gauge_t vdop; +} cgps_data_t; + +static cgps_config_t cgps_config_data; + +static cgps_data_t cgps_data = {NAN, NAN, NAN, NAN}; + +static pthread_t cgps_thread_id; +static pthread_mutex_t cgps_data_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t cgps_thread_lock = PTHREAD_MUTEX_INITIALIZER; +static int cgps_thread_shutdown = CGPS_FALSE; +static int cgps_thread_running = CGPS_FALSE; + +/** + * Non blocking pause for the thread. + */ +static int cgps_thread_pause(cdtime_t pTime) +{ + cdtime_t now; + now = cdtime (); + struct timespec pause_th; + CDTIME_T_TO_TIMESPEC (MS_TO_CDTIME_T(10), &pause_th); + while (CGPS_TRUE) + { + if ( (cdtime () - now) > pTime ) + { + break; + } + + pthread_mutex_lock (&cgps_thread_lock); + if (cgps_thread_shutdown == CGPS_TRUE) + { + return CGPS_FALSE; + } + pthread_mutex_unlock (&cgps_thread_lock); + nanosleep (&pause_th, NULL); + } + + return CGPS_TRUE; +} + +/** + * Thread reading from gpsd. + */ +static void * cgps_thread (void * pData) +{ + struct gps_data_t gpsd_conn; + unsigned int err_count; + cgps_thread_running = CGPS_TRUE; + + while (CGPS_TRUE) + { + pthread_mutex_lock (&cgps_thread_lock); + if (cgps_thread_shutdown == CGPS_TRUE) + { + goto quit; + } + pthread_mutex_unlock (&cgps_thread_lock); + + err_count = 0; + +#if GPSD_API_MAJOR_VERSION > 4 + int status = gps_open (cgps_config_data.host, cgps_config_data.port, &gpsd_conn); +#else + int status = gps_open_r (cgps_config_data.host, cgps_config_data.port, &gpsd_conn); +#endif + if (status < 0) + { + WARNING ("gps plugin: connecting to %s:%s failed: %s", + cgps_config_data.host, cgps_config_data.port, gps_errstr (status)); + + // Here we make a pause until a new tentative to connect, we check also if + // the thread does not need to stop. + if (cgps_thread_pause(cgps_config_data.pause_connect) == CGPS_FALSE) + { + goto quit; + } + + continue; + } + + gps_stream (&gpsd_conn, WATCH_ENABLE | WATCH_JSON | WATCH_NEWSTYLE, NULL); + gps_send (&gpsd_conn, CGPS_CONFIG); + + while (CGPS_TRUE) + { + pthread_mutex_lock (&cgps_thread_lock); + if (cgps_thread_shutdown == CGPS_TRUE) + { + goto stop; + } + pthread_mutex_unlock (&cgps_thread_lock); + +#if GPSD_API_MAJOR_VERSION > 4 + long timeout_us = CDTIME_T_TO_US (cgps_config_data.timeout); + if (!gps_waiting (&gpsd_conn, (int) timeout_us )) +#else + if (!gps_waiting (&gpsd_conn)) +#endif + { + continue; + } + + if (gps_read (&gpsd_conn) == -1) + { + WARNING ("gps plugin: incorrect data! (err_count: %d)", err_count); + err_count++; + + if (err_count > CGPS_MAX_ERROR) + { + // Server is not responding ... + if (gps_send (&gpsd_conn, CGPS_CONFIG) == -1) + { + WARNING ("gps plugin: gpsd seems to be down, reconnecting"); + gps_close (&gpsd_conn); + break; + } + // Server is responding ... + else + { + err_count = 0; + } + } + + continue; + } + + pthread_mutex_lock (&cgps_data_lock); + + // Number of sats in view: + cgps_data.sats_used = (gauge_t) gpsd_conn.satellites_used; + cgps_data.sats_visible = (gauge_t) gpsd_conn.satellites_visible; + + // dilution of precision: + cgps_data.vdop = NAN; + cgps_data.hdop = NAN; + if (cgps_data.sats_used > 0) + { + cgps_data.hdop = gpsd_conn.dop.hdop; + cgps_data.vdop = gpsd_conn.dop.vdop; + } + + DEBUG ("gps plugin: %.0f sats used (of %.0f visible), hdop = %.3f, vdop = %.3f", + cgps_data.sats_used, cgps_data.sats_visible, cgps_data.hdop, cgps_data.vdop); + + pthread_mutex_unlock (&cgps_data_lock); + } + } + +stop: + DEBUG ("gps plugin: thread closing gpsd connection ... "); + gps_stream (&gpsd_conn, WATCH_DISABLE, NULL); + gps_close (&gpsd_conn); +quit: + DEBUG ("gps plugin: thread shutting down ... "); + cgps_thread_running = CGPS_FALSE; + pthread_mutex_unlock (&cgps_thread_lock); + pthread_exit (NULL); +} + + +/** + * Submit a piece of the data. + */ +static void cgps_submit (const char *type, gauge_t value, const char *type_instance) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].gauge = value; + + vl.values = values; + vl.values_len = 1; + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "gps", sizeof (vl.plugin)); + sstrncpy (vl.type, type, sizeof (vl.type)); + sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); +} + +/** + * Read the data and submit by piece. + */ +static int cgps_read (void) +{ + cgps_data_t data_copy; + + pthread_mutex_lock (&cgps_data_lock); + data_copy = cgps_data; + pthread_mutex_unlock (&cgps_data_lock); + + cgps_submit ("dilution_of_precision", data_copy.hdop, "horizontal"); + cgps_submit ("dilution_of_precision", data_copy.vdop, "vertical"); + cgps_submit ("satellites", data_copy.sats_used, "used"); + cgps_submit ("satellites", data_copy.sats_visible, "visible"); + + return (0); +} + +/** + * Read configuration. + */ +static int cgps_config (oconfig_item_t *ci) +{ + int i; + + for (i = 0; i < ci->children_num; i++) + { + oconfig_item_t *child = ci->children + i; + + if (strcasecmp ("Host", child->key) == 0) + cf_util_get_string (child, &cgps_config_data.host); + else if (strcasecmp ("Port", child->key) == 0) + cf_util_get_service (child, &cgps_config_data.port); + else if (strcasecmp ("Timeout", child->key) == 0) + cf_util_get_cdtime (child, &cgps_config_data.timeout); + else if (strcasecmp ("PauseConnect", child->key) == 0) + cf_util_get_cdtime (child, &cgps_config_data.pause_connect); + else + WARNING ("gps plugin: Ignoring unknown config option \"%s\".", child->key); + } + + // Controlling the value for timeout: + // If set too high it blocks the reading (> 5 s), too low it gets not reading (< 500 us). + // To avoid any issues we replace "out of range" value by the default value. + if ( + cgps_config_data.timeout > TIME_T_TO_CDTIME_T(5) + || + cgps_config_data.timeout < US_TO_CDTIME_T(500) + ) + { + WARNING ("gps plugin: timeout set to %.6f sec. setting to default (%.6f).", + CDTIME_T_TO_DOUBLE(cgps_config_data.timeout), + CDTIME_T_TO_DOUBLE(CGPS_DEFAULT_TIMEOUT) + ); + cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT; + } + + return (0); +} + +/** + * Init. + */ +static int cgps_init (void) +{ + int status; + + if (cgps_thread_running == CGPS_TRUE) + { + DEBUG ("gps plugin: error gps thread already running ... "); + return 0; + } + + DEBUG ("gps plugin: config{host: \"%s\", port: \"%s\", timeout: %.6f sec., pause connect: %.3f sec.}", + cgps_config_data.host, cgps_config_data.port, + CDTIME_T_TO_DOUBLE (cgps_config_data.timeout), + CDTIME_T_TO_DOUBLE (cgps_config_data.pause_connect)); + + status = plugin_thread_create (&cgps_thread_id, NULL, cgps_thread, NULL); + if (status != 0) + { + ERROR ("gps plugin: pthread_create() failed."); + return (-1); + } + + return (0); +} + +/** + * Shutdown. + */ +static int cgps_shutdown (void) +{ + void * res; + + pthread_mutex_lock (&cgps_thread_lock); + cgps_thread_shutdown = CGPS_TRUE; + pthread_mutex_unlock (&cgps_thread_lock); + + pthread_join(cgps_thread_id, &res); + free(res); + + // Clean mutex: + pthread_mutex_unlock(&cgps_thread_lock); + pthread_mutex_destroy(&cgps_thread_lock); + pthread_mutex_unlock(&cgps_data_lock); + pthread_mutex_destroy(&cgps_data_lock); + + sfree (cgps_config_data.port); + sfree (cgps_config_data.host); + + return (0); +} + +/** + * Register the module. + */ +void module_register (void) +{ + cgps_config_data.host = sstrdup (CGPS_DEFAULT_HOST); + cgps_config_data.port = sstrdup (CGPS_DEFAULT_PORT); + cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT; + cgps_config_data.pause_connect = CGPS_DEFAULT_PAUSE_CONNECT; + + plugin_register_complex_config ("gps", cgps_config); + plugin_register_init ("gps", cgps_init); + plugin_register_read ("gps", cgps_read); + plugin_register_shutdown ("gps", cgps_shutdown); +} diff --git a/src/hddtemp.c b/src/hddtemp.c index c32aa358..8213e972 100644 --- a/src/hddtemp.c +++ b/src/hddtemp.c @@ -30,6 +30,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -88,17 +89,9 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size) const char *host; const char *port; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list, *ai_ptr; + struct addrinfo *ai_list; int ai_return; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = PF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - ai_hints.ai_protocol = IPPROTO_TCP; - host = hddtemp_host; if (host == NULL) host = HDDTEMP_DEF_HOST; @@ -107,6 +100,13 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size) if (strlen (port) == 0) port = HDDTEMP_DEF_PORT; + struct addrinfo ai_hints = { + .ai_flags = AI_ADDRCONFIG, + .ai_family = AF_UNSPEC, + .ai_protocol = IPPROTO_TCP, + .ai_socktype = SOCK_STREAM + }; + if ((ai_return = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0) { char errbuf[1024]; @@ -119,7 +119,7 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size) } fd = -1; - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { /* create our socket descriptor */ fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, @@ -250,7 +250,6 @@ static int hddtemp_read (void) char *saveptr; int num_fields; int num_disks; - int i; /* get data from daemon */ if (hddtemp_query_daemon (buf, sizeof (buf)) < 0) @@ -271,7 +270,7 @@ static int hddtemp_read (void) num_disks = num_fields / 4; - for (i = 0; i < num_disks; i++) + for (int i = 0; i < num_disks; i++) { char *name; double temperature; diff --git a/src/interface.c b/src/interface.c index 54883225..a74699ee 100644 --- a/src/interface.c +++ b/src/interface.c @@ -23,6 +23,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -191,7 +192,6 @@ static int interface_read (void) { #if HAVE_GETIFADDRS struct ifaddrs *if_list; - struct ifaddrs *if_ptr; /* Darwin/Mac OS X and possible other *BSDs */ #if HAVE_STRUCT_IF_DATA @@ -221,7 +221,7 @@ static int interface_read (void) if (getifaddrs (&if_list) != 0) return (-1); - for (if_ptr = if_list; if_ptr != NULL; if_ptr = if_ptr->ifa_next) + for (struct ifaddrs *if_ptr = if_list; if_ptr != NULL; if_ptr = if_ptr->ifa_next) { if (if_ptr->ifa_addr != NULL && if_ptr->ifa_addr->sa_family == AF_LINK) { if_data = (struct IFA_DATA *) if_ptr->ifa_data; @@ -305,7 +305,6 @@ static int interface_read (void) /* #endif KERNEL_LINUX */ #elif HAVE_LIBKSTAT - int i; derive_t rx; derive_t tx; char iname[DATA_MAX_NAME_LEN]; @@ -313,7 +312,7 @@ static int interface_read (void) if (kc == NULL) return (-1); - for (i = 0; i < numif; i++) + for (int i = 0; i < numif; i++) { if (kstat_read (kc, ksp[i], NULL) == -1) continue; @@ -357,11 +356,11 @@ static int interface_read (void) #elif defined(HAVE_LIBSTATGRAB) sg_network_io_stats *ios; - int i, num; + int num; ios = sg_get_network_io_stats (&num); - for (i = 0; i < num; i++) { + for (int i = 0; i < num; i++) { if (!report_inactive && ios[i].rx == 0 && ios[i].tx == 0) continue; if_submit (ios[i].interface_name, "if_octets", ios[i].rx, ios[i].tx); @@ -370,7 +369,7 @@ static int interface_read (void) #elif defined(HAVE_PERFSTAT) perfstat_id_t id; - int i, ifs; + int ifs; if ((nif = perfstat_netinterface(NULL, NULL, sizeof(perfstat_netinterface_t), 0)) < 0) { @@ -396,7 +395,7 @@ static int interface_read (void) return (-1); } - for (i = 0; i < ifs; i++) + for (int i = 0; i < ifs; i++) { if (!report_inactive && ifstat[i].ipackets == 0 && ifstat[i].opackets == 0) continue; diff --git a/src/ipc.c b/src/ipc.c index 00b3a5f8..70c55dc1 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -27,6 +27,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -236,14 +237,14 @@ static int ipc_read_sem (void) /* {{{ */ ipcinfo_sem_t *ipcinfo_sem; unsigned short sem_nsems=0; unsigned short sems=0; - int i,n; + int n; ipcinfo_sem = (ipcinfo_sem_t *)ipc_get_info(0, GET_IPCINFO_SEM_ALL, IPCINFO_SEM_VERSION, sizeof(ipcinfo_sem_t), &n); if (ipcinfo_sem == NULL) return -1; - for (i=0; ishm_segsz; } @@ -287,14 +288,14 @@ static int ipc_read_msg (void) /* {{{ */ uint32_t msg_used_space=0; uint32_t msg_alloc_queues=0; msgqnum32_t msg_qnum=0; - int i,n; + int n; ipcinfo_msg = (ipcinfo_msg_t *)ipc_get_info(0, GET_IPCINFO_MSG_ALL, IPCINFO_MSG_VERSION, sizeof(ipcinfo_msg_t), &n); if (ipcinfo_msg == NULL) return -1; - for (i=0; inext) { diff --git a/src/iptables.c b/src/iptables.c index 20dce658..35c93f4e 100644 --- a/src/iptables.c +++ b/src/iptables.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -32,6 +33,10 @@ #include #include +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + /* * iptc_handle_t was available before libiptc was officially available as a * shared library. Note, that when the shared lib was introduced, the API and @@ -419,12 +424,11 @@ static void submit_chain (iptc_handle_t *handle, ip_chain_t *chain) static int iptables_read (void) { - int i; int num_failures = 0; ip_chain_t *chain; /* Init the iptc handle structure and query the correct table */ - for (i = 0; i < chain_num; i++) + for (int i = 0; i < chain_num; i++) { chain = chain_list[i]; @@ -488,9 +492,7 @@ static int iptables_read (void) static int iptables_shutdown (void) { - int i; - - for (i = 0; i < chain_num; i++) + for (int i = 0; i < chain_num; i++) { if ((chain_list[i] != NULL) && (chain_list[i]->rule_type == RTYPE_COMMENT)) sfree (chain_list[i]->rule.comment); @@ -501,10 +503,30 @@ static int iptables_shutdown (void) return (0); } /* int iptables_shutdown */ +static int iptables_init (void) +{ +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_NET_ADMIN) + if (check_capability (CAP_NET_ADMIN) != 0) + { + if (getuid () == 0) + WARNING ("iptables plugin: Running collectd as root, but the " + "CAP_NET_ADMIN capability is missing. The plugin's read " + "function will probably fail. Is your init system dropping " + "capabilities?"); + else + WARNING ("iptables plugin: collectd doesn't have the CAP_NET_ADMIN " + "capability. If you don't want to run collectd as root, try " + "running \"setcap cap_net_admin=ep\" on the collectd binary."); + } +#endif + return (0); +} /* int iptables_init */ + void module_register (void) { plugin_register_config ("iptables", iptables_config, config_keys, config_keys_num); + plugin_register_init ("iptables", iptables_init); plugin_register_read ("iptables", iptables_read); plugin_register_shutdown ("iptables", iptables_shutdown); } /* void module_register */ diff --git a/src/ipvs.c b/src/ipvs.c index 760aa3c5..92690e88 100644 --- a/src/ipvs.c +++ b/src/ipvs.c @@ -31,6 +31,7 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -291,8 +292,6 @@ static void cipvs_submit_service (struct ip_vs_service_entry *se) char pi[DATA_MAX_NAME_LEN]; - size_t i; - if (0 != get_pi (se, pi, sizeof (pi))) { free (dests); @@ -303,7 +302,7 @@ static void cipvs_submit_service (struct ip_vs_service_entry *se) cipvs_submit_if (pi, "if_packets", NULL, stats.inpkts, stats.outpkts); cipvs_submit_if (pi, "if_octets", NULL, stats.inbytes, stats.outbytes); - for (i = 0; i < dests->num_dests; ++i) + for (size_t i = 0; i < dests->num_dests; ++i) cipvs_submit_dest (pi, &dests->entrytable[i]); free (dests); @@ -313,7 +312,6 @@ static void cipvs_submit_service (struct ip_vs_service_entry *se) static int cipvs_read (void) { struct ip_vs_get_services *services = NULL; - size_t i; if (sockfd < 0) return (-1); @@ -321,7 +319,7 @@ static int cipvs_read (void) if (NULL == (services = ipvs_get_services ())) return -1; - for (i = 0; i < services->num_services; ++i) + for (size_t i = 0; i < services->num_services; ++i) cipvs_submit_service (&services->entrytable[i]); free (services); diff --git a/src/irq.c b/src/irq.c index 93f3f53b..0c363795 100644 --- a/src/irq.c +++ b/src/irq.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" diff --git a/src/java.c b/src/java.c index 33d0504c..47f4cd36 100644 --- a/src/java.c +++ b/src/java.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "filter_chain.h" @@ -506,7 +507,6 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ jmethodID m_addchild; jobject o_key; jobject o_ocitem; - int i; c_ocitem = (*jvm_env)->FindClass (jvm_env, "org/collectd/api/OConfigItem"); if (c_ocitem == NULL) @@ -571,7 +571,7 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, o_key); /* Call OConfigItem.addValue for each value */ - for (i = 0; i < ci->values_num; i++) /* {{{ */ + for (int i = 0; i < ci->values_num; i++) /* {{{ */ { jobject o_value; @@ -589,7 +589,7 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ } /* }}} for (i = 0; i < ci->values_num; i++) */ /* Call OConfigItem.addChild for each child */ - for (i = 0; i < ci->children_num; i++) /* {{{ */ + for (int i = 0; i < ci->children_num; i++) /* {{{ */ { jobject o_child; @@ -617,7 +617,6 @@ static jobject ctoj_data_set (JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ jmethodID m_add; jobject o_type; jobject o_dataset; - size_t i; /* Look up the org/collectd/api/DataSet class */ c_dataset = (*jvm_env)->FindClass (jvm_env, "org/collectd/api/DataSet"); @@ -667,7 +666,7 @@ static jobject ctoj_data_set (JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ /* Decrease reference counter on the java.lang.String object. */ (*jvm_env)->DeleteLocalRef (jvm_env, o_type); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { jobject o_datasource; @@ -762,7 +761,6 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ jmethodID m_valuelist_constructor; jobject o_valuelist; int status; - size_t i; /* First, create a new ValueList instance.. * Look up the class.. */ @@ -845,7 +843,7 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ return (NULL); } - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { status = ctoj_value_list_add_value (jvm_env, vl->values[i], ds->ds[i].type, c_valuelist, o_valuelist); @@ -1116,7 +1114,6 @@ static int jtoc_values_array (JNIEnv *jvm_env, /* {{{ */ value_t *values; int values_num; - int i; values_num = ds->ds_num; @@ -1176,7 +1173,7 @@ static int jtoc_values_array (JNIEnv *jvm_env, /* {{{ */ BAIL_OUT (-1); } - for (i = 0; i < values_num; i++) + for (int i = 0; i < values_num; i++) { jobject o_number; int status; @@ -1979,7 +1976,6 @@ static int cjni_create_jvm (void) /* {{{ */ JavaVMOption vm_options[jvm_argc]; int status; - size_t i; if (jvm != NULL) return (0); @@ -1998,7 +1994,7 @@ static int cjni_create_jvm (void) /* {{{ */ vm_args.options = vm_options; vm_args.nOptions = (jint) jvm_argc; - for (i = 0; i < jvm_argc; i++) + for (size_t i = 0; i < jvm_argc; i++) { DEBUG ("java plugin: cjni_create_jvm: jvm_argv[%zu] = %s", i, jvm_argv[i]); @@ -2215,8 +2211,7 @@ static int cjni_config_load_plugin (oconfig_item_t *ci) /* {{{ */ { /* Replace all dots ('.') with slashes ('/'). Dots are usually used thorough the Java community, but (Sun's) `FindClass' and friends need slashes. */ - size_t i; - for (i = 0; class->name[i] != 0; i++) + for (size_t i = 0; class->name[i] != 0; i++) if (class->name[i] == '.') class->name[i] = '/'; } @@ -2274,7 +2269,6 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ cjni_callback_info_t *cbi; jobject o_ocitem; const char *name; - size_t i; jclass class; jmethodID method; @@ -2289,7 +2283,7 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ name = ci->values[0].value.string; cbi = NULL; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_CONFIG) continue; @@ -2341,12 +2335,11 @@ static int cjni_config_perform (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -2709,7 +2702,6 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ jobject o_ci; jobject o_tmp; int type; - size_t i; cbi_ret = NULL; o_ci = NULL; @@ -2754,7 +2746,7 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ /* Lets see if we have a matching factory here.. */ cbi_factory = NULL; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != type) continue; @@ -2936,9 +2928,8 @@ static int cjni_match_target_invoke (const data_set_t *ds, /* {{{ */ static int cjni_init_plugins (JNIEnv *jvm_env) /* {{{ */ { int status; - size_t i; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_INIT) continue; @@ -2963,9 +2954,8 @@ static int cjni_init_plugins (JNIEnv *jvm_env) /* {{{ */ static int cjni_shutdown_plugins (JNIEnv *jvm_env) /* {{{ */ { int status; - size_t i; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_SHUTDOWN) continue; @@ -2990,7 +2980,6 @@ static int cjni_shutdown (void) /* {{{ */ JNIEnv *jvm_env; JavaVMAttachArgs args = { 0 }; int status; - size_t i; if (jvm == NULL) return (0); @@ -3010,7 +2999,7 @@ static int cjni_shutdown (void) /* {{{ */ cjni_shutdown_plugins (jvm_env); /* Release all the global references to callback functions */ - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].object != NULL) { @@ -3023,7 +3012,7 @@ static int cjni_shutdown (void) /* {{{ */ sfree (java_callbacks); /* Release all the global references to directly loaded classes. */ - for (i = 0; i < java_classes_list_len; i++) + for (size_t i = 0; i < java_classes_list_len; i++) { if (java_classes_list[i].object != NULL) { @@ -3044,7 +3033,7 @@ static int cjni_shutdown (void) /* {{{ */ pthread_key_delete (jvm_env_key); /* Free the JVM argument list */ - for (i = 0; i < jvm_argc; i++) + for (size_t i = 0; i < jvm_argc; i++) sfree (jvm_argv[i]); jvm_argc = 0; sfree (jvm_argv); diff --git a/src/libcollectdclient/client.c b/src/libcollectdclient/client.c index f5eda6d2..a15e0aac 100644 --- a/src/libcollectdclient/client.c +++ b/src/libcollectdclient/client.c @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -91,12 +92,6 @@ (c)->errbuf[sizeof ((c)->errbuf) - 1] = 0; \ } while (0) -#if COLLECT_DEBUG -# define LCC_DEBUG(...) printf (__VA_ARGS__) -#else -# define LCC_DEBUG(...) /**/ -#endif - /* * Types */ @@ -118,6 +113,22 @@ typedef struct lcc_response_s lcc_response_t; /* * Private functions */ +static int lcc_tracef(char const *format, ...) +{ + va_list ap; + int status; + + char const *trace = getenv (LCC_TRACE_ENV); + if (!trace || (strcmp ("", trace) == 0) || (strcmp ("0", trace) == 0)) + return 0; + + va_start (ap, format); + status = vprintf (format, ap); + va_end (ap); + + return status; +} + /* Even though Posix requires "strerror_r" to return an "int", * some systems (e.g. the GNU libc) return a "char *" _and_ * ignore the second argument ... -tokkee */ @@ -235,12 +246,10 @@ static void lcc_chomp (char *str) /* {{{ */ static void lcc_response_free (lcc_response_t *res) /* {{{ */ { - size_t i; - if (res == NULL) return; - for (i = 0; i < res->lines_num; i++) + for (size_t i = 0; i < res->lines_num; i++) free (res->lines[i]); free (res->lines); res->lines = NULL; @@ -250,7 +259,7 @@ static int lcc_send (lcc_connection_t *c, const char *command) /* {{{ */ { int status; - LCC_DEBUG ("send: --> %s\n", command); + lcc_tracef ("send: --> %s\n", command); status = fprintf (c->fh, "%s\r\n", command); if (status < 0) @@ -279,7 +288,7 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ return (-1); } lcc_chomp (buffer); - LCC_DEBUG ("receive: <-- %s\n", buffer); + lcc_tracef ("receive: <-- %s\n", buffer); /* Convert the leading status to an integer and make `ptr' to point to the * beginning of the message. */ @@ -327,7 +336,7 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ break; } lcc_chomp (buffer); - LCC_DEBUG ("receive: <-- %s\n", buffer); + lcc_tracef ("receive: <-- %s\n", buffer); res.lines[i] = strdup (buffer); if (res.lines[i] == NULL) @@ -420,9 +429,7 @@ static int lcc_open_unixsocket (lcc_connection_t *c, const char *path) /* {{{ */ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ const char *addr_orig) { - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_res; - struct addrinfo *ai_ptr; char addr_copy[NI_MAXHOST]; char *addr; char *port; @@ -437,12 +444,6 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ addr_copy[sizeof(addr_copy) - 1] = '\0'; addr = addr_copy; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - port = NULL; if (*addr == '[') /* IPv6+port format */ { @@ -478,7 +479,12 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ } } - ai_res = NULL; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; + status = getaddrinfo (addr, port == NULL ? LCC_DEFAULT_PORT : port, &ai_hints, &ai_res); @@ -488,7 +494,7 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ return (-1); } - for (ai_ptr = ai_res; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_res; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); if (fd < 0) @@ -743,7 +749,6 @@ int lcc_putval (lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ char command[1024] = ""; lcc_response_t res; int status; - size_t i; if ((c == NULL) || (vl == NULL) || (vl->values_len < 1) || (vl->values == NULL) || (vl->values_types == NULL)) @@ -768,7 +773,7 @@ int lcc_putval (lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ else SSTRCAT (command, " N"); - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { if (vl->values_types[i] == LCC_TYPE_COUNTER) SSTRCATF (command, ":%"PRIu64, vl->values[i].counter); @@ -860,7 +865,6 @@ int lcc_listval (lcc_connection_t *c, /* {{{ */ lcc_identifier_t **ret_ident, size_t *ret_ident_num) { lcc_response_t res; - size_t i; int status; lcc_identifier_t *ident; @@ -895,7 +899,7 @@ int lcc_listval (lcc_connection_t *c, /* {{{ */ return (-1); } - for (i = 0; i < res.lines_num; i++) + for (size_t i = 0; i < res.lines_num; i++) { char *time_str; char *ident_str; diff --git a/src/libcollectdclient/collectd/client.h b/src/libcollectdclient/collectd/client.h index ac26b848..47462a6b 100644 --- a/src/libcollectdclient/collectd/client.h +++ b/src/libcollectdclient/collectd/client.h @@ -29,6 +29,13 @@ #include "lcc_features.h" +/* COLLECTD_TRACE is the environment variable used to control trace output. When + * set to something non-zero, all lines sent to / received from the daemon are + * printed to STDOUT. */ +#ifndef LCC_TRACE_ENV +# define LCC_TRACE_ENV "COLLECTD_TRACE" +#endif + /* * Includes (for data types) */ diff --git a/src/libcollectdclient/network.c b/src/libcollectdclient/network.c index 8e6bab86..16293ca0 100644 --- a/src/libcollectdclient/network.c +++ b/src/libcollectdclient/network.c @@ -119,9 +119,7 @@ static void int_server_destroy (lcc_server_t *srv) /* {{{ */ static int server_open_socket (lcc_server_t *srv) /* {{{ */ { - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list = NULL; - struct addrinfo *ai_ptr; + struct addrinfo *ai_list; int status; if (srv == NULL) @@ -130,18 +128,18 @@ static int server_open_socket (lcc_server_t *srv) /* {{{ */ if (srv->fd >= 0) server_close_socket (srv); -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_DGRAM + }; status = getaddrinfo (srv->node, srv->service, &ai_hints, &ai_list); if (status != 0) return (status); assert (ai_list != NULL); - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { srv->fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); if (srv->fd < 0) @@ -471,12 +469,10 @@ int lcc_server_set_security_level (lcc_server_t *srv, /* {{{ */ int lcc_network_values_send (lcc_network_t *net, /* {{{ */ const lcc_value_list_t *vl) { - lcc_server_t *srv; - if ((net == NULL) || (vl == NULL)) return (EINVAL); - for (srv = net->servers; srv != NULL; srv = srv->next) + for (lcc_server_t *srv = net->servers; srv != NULL; srv = srv->next) server_value_add (srv, vl); return (0); diff --git a/src/libcollectdclient/network_buffer.c b/src/libcollectdclient/network_buffer.c index 9a9c89ac..2c6277c8 100644 --- a/src/libcollectdclient/network_buffer.c +++ b/src/libcollectdclient/network_buffer.c @@ -274,7 +274,6 @@ static int nb_add_values (char **ret_buffer, /* {{{ */ value_t pkg_values[vl->values_len]; size_t offset; - size_t i; packet_len = sizeof (pkg_type) + sizeof (pkg_length) + sizeof (pkg_num_values) @@ -288,7 +287,7 @@ static int nb_add_values (char **ret_buffer, /* {{{ */ pkg_length = htons ((uint16_t) packet_len); pkg_num_values = htons ((uint16_t) vl->values_len); - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { pkg_values_types[i] = (uint8_t) vl->values_types[i]; switch (vl->values_types[i]) diff --git a/src/liboconfig/oconfig.c b/src/liboconfig/oconfig.c index cfe9c5a1..319aae85 100644 --- a/src/liboconfig/oconfig.c +++ b/src/liboconfig/oconfig.c @@ -126,8 +126,6 @@ oconfig_item_t *oconfig_clone (const oconfig_item_t *ci_orig) if (ci_orig->values_num > 0) /* {{{ */ { - int i; - ci_copy->values = (oconfig_value_t *) calloc ((size_t) ci_orig->values_num, sizeof (*ci_copy->values)); if (ci_copy->values == NULL) @@ -139,7 +137,7 @@ oconfig_item_t *oconfig_clone (const oconfig_item_t *ci_orig) } ci_copy->values_num = ci_orig->values_num; - for (i = 0; i < ci_copy->values_num; i++) + for (int i = 0; i < ci_copy->values_num; i++) { ci_copy->values[i].type = ci_orig->values[i].type; if (ci_copy->values[i].type == OCONFIG_TYPE_STRING) @@ -161,8 +159,6 @@ oconfig_item_t *oconfig_clone (const oconfig_item_t *ci_orig) if (ci_orig->children_num > 0) /* {{{ */ { - int i; - ci_copy->children = (oconfig_item_t *) calloc ((size_t) ci_orig->children_num, sizeof (*ci_copy->children)); if (ci_copy->children == NULL) @@ -173,7 +169,7 @@ oconfig_item_t *oconfig_clone (const oconfig_item_t *ci_orig) } ci_copy->children_num = ci_orig->children_num; - for (i = 0; i < ci_copy->children_num; i++) + for (int i = 0; i < ci_copy->children_num; i++) { oconfig_item_t *child; @@ -194,15 +190,13 @@ oconfig_item_t *oconfig_clone (const oconfig_item_t *ci_orig) static void oconfig_free_all (oconfig_item_t *ci) { - int i; - if (ci == NULL) return; if (ci->key != NULL) free (ci->key); - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) if ((ci->values[i].type == OCONFIG_TYPE_STRING) && (NULL != ci->values[i].value.string)) free (ci->values[i].value.string); @@ -210,7 +204,7 @@ static void oconfig_free_all (oconfig_item_t *ci) if (ci->values != NULL) free (ci->values); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) oconfig_free_all (ci->children + i); if (ci->children != NULL) diff --git a/src/liboconfig/parser.y b/src/liboconfig/parser.y index 1eb7aece..4a550b32 100644 --- a/src/liboconfig/parser.y +++ b/src/liboconfig/parser.y @@ -239,7 +239,6 @@ static char *unquote (const char *orig) { char *ret = strdup (orig); int len; - int i; if (ret == NULL) return (NULL); @@ -253,7 +252,7 @@ static char *unquote (const char *orig) memmove (ret, ret + 1, len); ret[len] = '\0'; - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { if (ret[i] == '\\') { diff --git a/src/load.c b/src/load.c index 18b5f8e8..cc3be37e 100644 --- a/src/load.c +++ b/src/load.c @@ -27,6 +27,7 @@ #define _BSD_SOURCE #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/log_logstash.c b/src/log_logstash.c index 3cf636e5..08868409 100644 --- a/src/log_logstash.c +++ b/src/log_logstash.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/logfile.c b/src/logfile.c index 334226ba..d18a5365 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/lpar.c b/src/lpar.c index 4d534476..5b0bd13d 100644 --- a/src/lpar.c +++ b/src/lpar.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/lvm.c b/src/lvm.c index 9e245423..6b9a0317 100644 --- a/src/lvm.c +++ b/src/lvm.c @@ -24,6 +24,7 @@ #include #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/madwifi.c b/src/madwifi.c index ffc815da..728fcd8c 100644 --- a/src/madwifi.c +++ b/src/madwifi.c @@ -89,6 +89,7 @@ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -394,8 +395,7 @@ static inline void watchlist_remove (uint32_t *wl, int item) static inline void watchlist_set (uint32_t *wl, uint32_t val) { - int i; - for (i = 0; i < WL_LEN; i++) + for (int i = 0; i < WL_LEN; i++) wl[i] = val; } @@ -403,9 +403,8 @@ static inline void watchlist_set (uint32_t *wl, uint32_t val) static int watchitem_find (const char *name) { int max = STATIC_ARRAY_SIZE (specs); - int i; - for (i = 0; i < max; i++) + for (int i = 0; i < max; i++) if (strcasecmp (name, specs[i].name) == 0) return i; @@ -420,15 +419,14 @@ static int watchitem_find (const char *name) static int madwifi_real_init (void) { size_t max = STATIC_ARRAY_SIZE (specs); - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (bounds); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (bounds); i++) bounds[i] = 0; watchlist_set(watch_items, 0); watchlist_set(misc_items, 0); - for (i = 0; i < max; i++) + for (size_t i = 0; i < max; i++) { bounds[specs[i].flags & SRC_MASK] = i; @@ -439,7 +437,7 @@ static int madwifi_real_init (void) misc_items[i / 32] |= FLAG (i); } - for (i = 0; i < STATIC_ARRAY_SIZE (bounds); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (bounds); i++) bounds[i]++; return (0); @@ -589,9 +587,8 @@ static void submit_antx (const char *dev, const char *name, u_int32_t *vals, int vals_num) { char ti2[16]; - int i; - for (i = 0; i < vals_num; i++) + for (int i = 0; i < vals_num; i++) { if (vals[i] == 0) continue; @@ -614,12 +611,11 @@ process_stat_struct (int which, const void *ptr, const char *dev, const char *ma const char *type_name, const char *misc_name) { uint32_t misc = 0; - int i; assert (which >= 1); assert (((size_t) which) < STATIC_ARRAY_SIZE (bounds)); - for (i = bounds[which - 1]; i < bounds[which]; i++) + for (int i = bounds[which - 1]; i < bounds[which]; i++) { uint32_t val = *(uint32_t *)(((char *) ptr) + specs[i].offset) ; @@ -751,7 +747,7 @@ process_station (int sk, const char *dev, struct ieee80211req_sta_info *si) static int process_stations (int sk, const char *dev) { - uint8_t buf[24*1024]; + uint8_t buf[24*1024] = { 0 }; uint8_t *cp; int nodes; size_t len; diff --git a/src/match_empty_counter.c b/src/match_empty_counter.c index bff9448a..80a29ac7 100644 --- a/src/match_empty_counter.c +++ b/src/match_empty_counter.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" @@ -55,9 +56,8 @@ static int mec_match (__attribute__((unused)) const data_set_t *ds, /* {{{ */ { int num_counters = 0; int num_empty = 0; - size_t i; - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if ((ds->ds[i].type != DS_TYPE_DERIVE) && (ds->ds[i].type != DS_TYPE_COUNTER)) diff --git a/src/match_hashed.c b/src/match_hashed.c index a42439c0..c4983c2e 100644 --- a/src/match_hashed.c +++ b/src/match_hashed.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" @@ -98,7 +99,6 @@ static int mh_config_match (const oconfig_item_t *ci, /* {{{ */ static int mh_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { mh_match_t *m; - int i; m = calloc (1, sizeof (*m)); if (m == NULL) @@ -107,7 +107,7 @@ static int mh_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ return (-ENOMEM); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -149,8 +149,6 @@ static int mh_match (const data_set_t __attribute__((unused)) *ds, /* {{{ */ { mh_match_t *m; uint32_t hash_val; - const char *host_ptr; - size_t i; if ((user_data == NULL) || (*user_data == NULL)) return (-1); @@ -159,14 +157,14 @@ static int mh_match (const data_set_t __attribute__((unused)) *ds, /* {{{ */ hash_val = 0; - for (host_ptr = vl->host; *host_ptr != 0; host_ptr++) + for (const char *host_ptr = vl->host; *host_ptr != 0; host_ptr++) { /* 2184401929 is some appropriately sized prime number. */ hash_val = (hash_val * UINT32_C (2184401929)) + ((uint32_t) *host_ptr); } DEBUG ("hashed match: host = %s; hash_val = %"PRIu32";", vl->host, hash_val); - for (i = 0; i < m->matches_num; i++) + for (size_t i = 0; i < m->matches_num; i++) if ((hash_val % m->matches[i].total) == m->matches[i].match) return (FC_MATCH_MATCHES); diff --git a/src/match_regex.c b/src/match_regex.c index 2dee9a8f..cd630167 100644 --- a/src/match_regex.c +++ b/src/match_regex.c @@ -32,6 +32,7 @@ */ #include "collectd.h" + #include "filter_chain.h" #include @@ -99,12 +100,10 @@ static void mr_free_match (mr_match_t *m) /* {{{ */ static int mr_match_regexen (mr_regex_t *re_head, /* {{{ */ const char *string) { - mr_regex_t *re; - if (re_head == NULL) return (FC_MATCH_MATCHES); - for (re = re_head; re != NULL; re = re->next) + for (mr_regex_t *re = re_head; re != NULL; re = re->next) { int status; @@ -191,7 +190,6 @@ static int mr_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { mr_match_t *m; int status; - int i; m = calloc (1, sizeof (*m)); if (m == NULL) @@ -203,7 +201,7 @@ static int mr_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ m->invert = 0; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/match_timediff.c b/src/match_timediff.c index 3b154150..00fdd0c1 100644 --- a/src/match_timediff.c +++ b/src/match_timediff.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" @@ -49,7 +50,6 @@ static int mt_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { mt_match_t *m; int status; - int i; m = calloc (1, sizeof (*m)); if (m == NULL) @@ -62,7 +62,7 @@ static int mt_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ m->past = 0; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/match_value.c b/src/match_value.c index 3b269c8c..54ddba28 100644 --- a/src/match_value.c +++ b/src/match_value.c @@ -30,6 +30,7 @@ */ #include "collectd.h" + #include "common.h" #include "utils_cache.h" #include "filter_chain.h" @@ -58,14 +59,12 @@ struct mv_match_s */ static void mv_free_match (mv_match_t *m) /* {{{ */ { - size_t i; - if (m == NULL) return; if (m->data_sources != NULL) { - for (i = 0; i < m->data_sources_num; ++i) + for (size_t i = 0; i < m->data_sources_num; ++i) free(m->data_sources[i]); free(m->data_sources); } @@ -103,7 +102,6 @@ static int mv_config_add_data_source (mv_match_t *m, /* {{{ */ { size_t new_data_sources_num; char **temp; - int i; /* Check number of arbuments. */ if (ci->values_num < 1) @@ -114,7 +112,7 @@ static int mv_config_add_data_source (mv_match_t *m, /* {{{ */ } /* Check type of arguments */ - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { if (ci->values[i].type == OCONFIG_TYPE_STRING) continue; @@ -139,14 +137,12 @@ static int mv_config_add_data_source (mv_match_t *m, /* {{{ */ m->data_sources = temp; /* Copy the strings, allocating memory as needed. */ - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { - size_t j; - /* If we get here, there better be memory for us to write to. */ assert (m->data_sources_num < new_data_sources_num); - j = m->data_sources_num; + size_t j = m->data_sources_num; m->data_sources[j] = sstrdup (ci->values[i].value.string); if (m->data_sources[j] == NULL) { @@ -198,7 +194,6 @@ static int mv_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { mv_match_t *m; int status; - int i; m = calloc (1, sizeof (*m)); if (m == NULL) @@ -215,7 +210,7 @@ static int mv_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ m->data_sources_num = 0; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -276,7 +271,6 @@ static int mv_match (const data_set_t *ds, const value_list_t *vl, /* {{{ */ mv_match_t *m; gauge_t *values; int status; - size_t i; if ((user_data == NULL) || (*user_data == NULL)) return (-1); @@ -293,7 +287,7 @@ static int mv_match (const data_set_t *ds, const value_list_t *vl, /* {{{ */ status = FC_MATCH_NO_MATCH; - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { int value_matches = 0; diff --git a/src/mbmon.c b/src/mbmon.c index ccececd7..184bb994 100644 --- a/src/mbmon.c +++ b/src/mbmon.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -84,17 +85,9 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) const char *host; const char *port; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list, *ai_ptr; + struct addrinfo *ai_list; int ai_return; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = PF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - ai_hints.ai_protocol = IPPROTO_TCP; - host = mbmon_host; if (host == NULL) host = MBMON_DEF_HOST; @@ -103,6 +96,13 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) if (port == NULL) port = MBMON_DEF_PORT; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_protocol = IPPROTO_TCP, + .ai_socktype = SOCK_STREAM + }; + if ((ai_return = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0) { char errbuf[1024]; @@ -115,7 +115,7 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) } fd = -1; - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { /* create our socket descriptor */ if ((fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol)) < 0) @@ -237,9 +237,7 @@ static void mbmon_submit (const char *type, const char *type_instance, /* Trim trailing whitespace from a string. */ static void trim_spaces (char *s) { - size_t l; - - for (l = strlen (s) - 1; (l > 0) && isspace ((int) s[l]); l--) + for (size_t l = strlen (s) - 1; (l > 0) && isspace ((int) s[l]); l--) s[l] = '\0'; } diff --git a/src/md.c b/src/md.c index 3725f9a9..44cad2ed 100644 --- a/src/md.c +++ b/src/md.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" @@ -29,6 +30,10 @@ #include #include +#ifdef HAVE_SYS_SYSMACROS_H +#include +#endif + #define PROC_DISKSTATS "/proc/diskstats" #define DEV_DIR "/dev" diff --git a/src/memcachec.c b/src/memcachec.c index d7e6c286..1b6ab673 100644 --- a/src/memcachec.c +++ b/src/memcachec.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -199,7 +200,6 @@ static int cmc_config_add_match (web_page_t *page, /* {{{ */ { web_match_t *match; int status; - int i; if (ci->values_num != 0) { @@ -214,7 +214,7 @@ static int cmc_config_add_match (web_page_t *page, /* {{{ */ } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -296,7 +296,6 @@ static int cmc_config_add_page (oconfig_item_t *ci) /* {{{ */ { web_page_t *page; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -323,7 +322,7 @@ static int cmc_config_add_page (oconfig_item_t *ci) /* {{{ */ /* Process all children */ status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -400,12 +399,11 @@ static int cmc_config (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -464,7 +462,6 @@ static void cmc_submit (const web_page_t *wp, const web_match_t *wm, /* {{{ */ static int cmc_read_page (web_page_t *wp) /* {{{ */ { - web_match_t *wm; memcached_return rc; size_t string_length; uint32_t flags; @@ -482,7 +479,7 @@ static int cmc_read_page (web_page_t *wp) /* {{{ */ return (-1); } - for (wm = wp->matches; wm != NULL; wm = wm->next) + for (web_match_t *wm = wp->matches; wm != NULL; wm = wm->next) { cu_match_value_t *mv; @@ -511,9 +508,7 @@ static int cmc_read_page (web_page_t *wp) /* {{{ */ static int cmc_read (void) /* {{{ */ { - web_page_t *wp; - - for (wp = pages_g; wp != NULL; wp = wp->next) + for (web_page_t *wp = pages_g; wp != NULL; wp = wp->next) cmc_read_page (wp); return (0); diff --git a/src/memcached.c b/src/memcached.c index faff5793..42882ae5 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -29,6 +29,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -101,22 +102,19 @@ static int memcached_connect_inet (memcached_t *st) const char *host; const char *port; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list, *ai_ptr; + struct addrinfo *ai_list; int status; int fd = -1; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - ai_hints.ai_protocol = 0; - host = (st->host != NULL) ? st->host : MEMCACHED_DEF_HOST; port = (st->port != NULL) ? st->port : MEMCACHED_DEF_PORT; - ai_list = NULL; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; + status = getaddrinfo (host, port, &ai_hints, &ai_list); if (status != 0) { @@ -130,7 +128,7 @@ static int memcached_connect_inet (memcached_t *st) return (-1); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { /* create our socket descriptor */ fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); @@ -242,21 +240,24 @@ static int memcached_query_daemon (char *buffer, size_t buffer_size, memcached_t static void memcached_init_vl (value_list_t *vl, memcached_t const *st) { + char const *host = st->host; + + /* Set vl->host to hostname_g, if: + * - Legacy mode is used. + * - "Socket" option is given (doc: "Host option is ignored"). + * - "Host" option is not provided. + * - "Host" option is set to "localhost" or "127.0.0.1". */ + if ((strcmp (st->name, "__legacy__") == 0) + || (st->socket != NULL) + || (st->host == NULL) + || (strcmp ("127.0.0.1", st->host) == 0) + || (strcmp ("localhost", st->host) == 0)) + host = hostname_g; + sstrncpy (vl->plugin, "memcached", sizeof (vl->plugin)); - if (strcmp (st->name, "__legacy__") == 0) /* legacy mode */ - { - sstrncpy (vl->host, hostname_g, sizeof (vl->host)); - } - else - { - if (st->socket != NULL) - sstrncpy (vl->host, hostname_g, sizeof (vl->host)); - else - sstrncpy (vl->host, - (st->host != NULL) ? st->host : MEMCACHED_DEF_HOST, - sizeof (vl->host)); + sstrncpy (vl->host, host, sizeof (vl->host)); + if (strcmp (st->name, "__legacy__") != 0) sstrncpy (vl->plugin_instance, st->name, sizeof (vl->plugin_instance)); - } } static void submit_derive (const char *type, const char *type_inst, @@ -577,7 +578,6 @@ static int memcached_add_read_callback (memcached_t *st) static int config_add_instance(oconfig_item_t *ci) { memcached_t *st; - int i; int status = 0; /* Disable automatic generation of default instance in the init callback. */ @@ -606,7 +606,7 @@ static int config_add_instance(oconfig_item_t *ci) } assert (st->name != NULL); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -643,9 +643,8 @@ static int memcached_config (oconfig_item_t *ci) { int status = 0; _Bool have_instance_block = 0; - int i; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/memory.c b/src/memory.c index 744af1a8..16b8e09f 100644 --- a/src/memory.c +++ b/src/memory.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -98,9 +99,7 @@ static _Bool values_percentage = 0; static int memory_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("ValuesAbsolute", child->key) == 0) @@ -250,9 +249,7 @@ static int memory_read_internal (value_list_t *vl) }; double sysctl_vals[8]; - int i; - - for (i = 0; sysctl_keys[i] != NULL; i++) + for (int i = 0; sysctl_keys[i] != NULL; i++) { int value; size_t value_len = sizeof (value); @@ -270,7 +267,7 @@ static int memory_read_internal (value_list_t *vl) } /* for (sysctl_keys) */ /* multiply all all page counts with the pagesize */ - for (i = 1; sysctl_keys[i] != NULL; i++) + for (int i = 1; sysctl_keys[i] != NULL; i++) if (!isnan (sysctl_vals[i])) sysctl_vals[i] *= sysctl_vals[0]; diff --git a/src/mic.c b/src/mic.c index 570da51b..3e31889f 100644 --- a/src/mic.c +++ b/src/mic.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_ignorelist.h" @@ -213,9 +214,8 @@ static void mic_submit_temp(int micnumber, const char *type, gauge_t val) static int mic_read_temps(int mic) { size_t num_therms = STATIC_ARRAY_SIZE(therm_ids); - size_t j; - for (j = 0; j < num_therms; j++) { + for (size_t j = 0; j < num_therms; j++) { U32 status; U32 temp_buffer; U32 buffer_size = (U32)sizeof(temp_buffer); @@ -286,8 +286,7 @@ static int mic_read_cpu(int mic) } if (show_cpu_cores) { - int j; - for (j = 0; j < core_util.core; j++) { + for (int j = 0; j < core_util.core; j++) { mic_submit_cpu(mic, "user", j, core_jiffs[j].user); mic_submit_cpu(mic, "sys", j, core_jiffs[j].sys); mic_submit_cpu(mic, "nice", j, core_jiffs[j].nice); @@ -356,12 +355,11 @@ static int mic_read_power(int mic) static int mic_read (void) { - int i; U32 ret; int error; error=0; - for (i=0;inext) + for (mb_data_t *ptr = src; ptr != NULL; ptr = ptr->next) if (strcasecmp (ptr->name, name) == 0) return (ptr); @@ -621,7 +620,6 @@ static int mb_read_data (mb_host_t *host, mb_slave_t *slave, /* {{{ */ static int mb_read_slave (mb_host_t *host, mb_slave_t *slave) /* {{{ */ { - mb_data_t *data; int success; int status; @@ -629,7 +627,7 @@ static int mb_read_slave (mb_host_t *host, mb_slave_t *slave) /* {{{ */ return (EINVAL); success = 0; - for (data = slave->collect; data != NULL; data = data->next) + for (mb_data_t *data = slave->collect; data != NULL; data = data->next) { status = mb_read_data (host, slave, data); if (status == 0) @@ -645,7 +643,6 @@ static int mb_read_slave (mb_host_t *host, mb_slave_t *slave) /* {{{ */ static int mb_read (user_data_t *user_data) /* {{{ */ { mb_host_t *host; - size_t i; int success; int status; @@ -655,7 +652,7 @@ static int mb_read (user_data_t *user_data) /* {{{ */ host = user_data->data; success = 0; - for (i = 0; i < host->slaves_num; i++) + for (size_t i = 0; i < host->slaves_num; i++) { status = mb_read_slave (host, host->slaves + i); if (status == 0) @@ -694,12 +691,10 @@ static void data_free_all (mb_data_t *data) /* {{{ */ static void slaves_free_all (mb_slave_t *slaves, size_t slaves_num) /* {{{ */ { - size_t i; - if (slaves == NULL) return; - for (i = 0; i < slaves_num; i++) + for (size_t i = 0; i < slaves_num; i++) data_free_all (slaves[i].collect); sfree (slaves); } /* }}} void slaves_free_all */ @@ -721,7 +716,6 @@ static int mb_config_add_data (oconfig_item_t *ci) /* {{{ */ { mb_data_t data = { 0 }; int status; - int i; data.name = NULL; data.register_type = REG_TYPE_UINT16; @@ -731,7 +725,7 @@ static int mb_config_add_data (oconfig_item_t *ci) /* {{{ */ if (status != 0) return (status); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -817,23 +811,17 @@ static int mb_config_set_host_address (mb_host_t *host, /* {{{ */ const char *address) { struct addrinfo *ai_list; - struct addrinfo *ai_ptr; - struct addrinfo ai_hints = { 0 }; int status; if ((host == NULL) || (address == NULL)) return (EINVAL); -#if AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - /* XXX: libmodbus can only handle IPv4 addresses. */ - ai_hints.ai_family = AF_INET; - ai_hints.ai_addr = NULL; - ai_hints.ai_canonname = NULL; - ai_hints.ai_next = NULL; + struct addrinfo ai_hints = { + /* XXX: libmodbus can only handle IPv4 addresses. */ + .ai_family = AF_INET, + .ai_flags = AI_ADDRCONFIG + }; - ai_list = NULL; status = getaddrinfo (address, /* service = */ NULL, &ai_hints, &ai_list); if (status != 0) @@ -846,7 +834,7 @@ static int mb_config_set_host_address (mb_host_t *host, /* {{{ */ return (status); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { status = getnameinfo (ai_ptr->ai_addr, ai_ptr->ai_addrlen, host->node, sizeof (host->node), @@ -873,7 +861,6 @@ static int mb_config_add_slave (mb_host_t *host, oconfig_item_t *ci) /* {{{ */ { mb_slave_t *slave; int status; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -890,7 +877,7 @@ static int mb_config_add_slave (mb_host_t *host, oconfig_item_t *ci) /* {{{ */ if (status != 0) return (status); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -933,7 +920,6 @@ static int mb_config_add_host (oconfig_item_t *ci) /* {{{ */ { mb_host_t *host; int status; - int i; host = calloc (1, sizeof (*host)); if (host == NULL) @@ -952,7 +938,7 @@ static int mb_config_add_host (oconfig_item_t *ci) /* {{{ */ return (EINVAL); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; status = 0; @@ -1041,12 +1027,10 @@ static int mb_config_add_host (oconfig_item_t *ci) /* {{{ */ static int mb_config (oconfig_item_t *ci) /* {{{ */ { - int i; - if (ci == NULL) return (EINVAL); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/mqtt.c b/src/mqtt.c index b318f211..a7a0b86d 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -31,6 +31,7 @@ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_complain.h" @@ -144,11 +145,9 @@ static void mqtt_free (mqtt_client_conf_t *conf) static char *strip_prefix (char *topic) { - size_t num; - size_t i; + size_t num = 0; - num = 0; - for (i = 0; topic[i] != 0; i++) + for (size_t i = 0; topic[i] != 0; i++) if (topic[i] == '/') num++; @@ -551,7 +550,6 @@ static int mqtt_config_publisher (oconfig_item_t *ci) char cb_name[1024]; user_data_t user_data = { 0 }; int status; - int i; conf = calloc (1, sizeof (*conf)); if (conf == NULL) @@ -585,7 +583,7 @@ static int mqtt_config_publisher (oconfig_item_t *ci) C_COMPLAIN_INIT (&conf->complaint_cantpublish); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Host", child->key) == 0) @@ -655,7 +653,6 @@ static int mqtt_config_subscriber (oconfig_item_t *ci) mqtt_client_conf_t **tmp; mqtt_client_conf_t *conf; int status; - int i; conf = calloc (1, sizeof (*conf)); if (conf == NULL) @@ -689,7 +686,7 @@ static int mqtt_config_subscriber (oconfig_item_t *ci) C_COMPLAIN_INIT (&conf->complaint_cantpublish); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Host", child->key) == 0) @@ -751,9 +748,7 @@ static int mqtt_config_subscriber (oconfig_item_t *ci) */ static int mqtt_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -770,11 +765,9 @@ static int mqtt_config (oconfig_item_t *ci) static int mqtt_init (void) { - size_t i; - mosquitto_lib_init (); - for (i = 0; i < subscribers_num; i++) + for (size_t i = 0; i < subscribers_num; i++) { int status; diff --git a/src/multimeter.c b/src/multimeter.c index 00e9964b..02fe1ad3 100644 --- a/src/multimeter.c +++ b/src/multimeter.c @@ -23,6 +23,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -148,10 +149,9 @@ static int multimeter_read_value(double *value) static int multimeter_init (void) { - int i; char device[] = "/dev/ttyS "; - for (i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) { device[strlen(device)-1] = i + '0'; diff --git a/src/mysql.c b/src/mysql.c index 419a1543..ff6c0a7a 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -28,6 +28,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -46,6 +47,14 @@ struct mysql_database_s /* {{{ */ char *user; char *pass; char *database; + + /* mysql_ssl_set params */ + char *key; + char *cert; + char *ca; + char *capath; + char *cipher; + char *socket; int port; int timeout; @@ -53,6 +62,7 @@ struct mysql_database_s /* {{{ */ _Bool master_stats; _Bool slave_stats; _Bool innodb_stats; + _Bool wsrep_stats; _Bool slave_notif; _Bool slave_io_running; @@ -86,6 +96,11 @@ static void mysql_database_free (void *arg) /* {{{ */ sfree (db->socket); sfree (db->instance); sfree (db->database); + sfree (db->key); + sfree (db->cert); + sfree (db->ca); + sfree (db->capath); + sfree (db->cipher); sfree (db); } /* }}} void mysql_database_free */ @@ -103,7 +118,6 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ { mysql_database_t *db; int status = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -126,6 +140,12 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ db->user = NULL; db->pass = NULL; db->database = NULL; + db->key = NULL; + db->cert = NULL; + db->ca = NULL; + db->capath = NULL; + db->cipher = NULL; + db->socket = NULL; db->con = NULL; db->timeout = 0; @@ -143,7 +163,7 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ assert (db->instance != NULL); /* Fill the `mysql_database_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -168,6 +188,16 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string (child, &db->socket); else if (strcasecmp ("Database", child->key) == 0) status = cf_util_get_string (child, &db->database); + else if (strcasecmp ("SSLKey", child->key) == 0) + status = cf_util_get_string (child, &db->key); + else if (strcasecmp ("SSLCert", child->key) == 0) + status = cf_util_get_string (child, &db->cert); + else if (strcasecmp ("SSLCA", child->key) == 0) + status = cf_util_get_string (child, &db->ca); + else if (strcasecmp ("SSLCAPath", child->key) == 0) + status = cf_util_get_string (child, &db->capath); + else if (strcasecmp ("SSLCipher", child->key) == 0) + status = cf_util_get_string (child, &db->cipher); else if (strcasecmp ("ConnectTimeout", child->key) == 0) status = cf_util_get_int (child, &db->timeout); else if (strcasecmp ("MasterStats", child->key) == 0) @@ -178,6 +208,8 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ status = cf_util_get_boolean (child, &db->slave_notif); else if (strcasecmp ("InnodbStats", child->key) == 0) status = cf_util_get_boolean (child, &db->innodb_stats); + else if (strcasecmp ("WsrepStats", child->key) == 0) + status = cf_util_get_boolean (child, &db->wsrep_stats); else { WARNING ("mysql plugin: Option `%s' not allowed here.", child->key); @@ -221,13 +253,11 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */ static int mysql_config (oconfig_item_t *ci) /* {{{ */ { - int i; - if (ci == NULL) return (EINVAL); /* Fill the `mysql_database_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -245,6 +275,8 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */ static MYSQL *getconnection (mysql_database_t *db) { + const char *cipher; + if (db->is_connected) { int status; @@ -272,6 +304,8 @@ static MYSQL *getconnection (mysql_database_t *db) /* Configure TCP connect timeout (default: 0) */ db->con->options.connect_timeout = db->timeout; + mysql_ssl_set (db->con, db->key, db->cert, db->ca, db->capath, db->cipher); + if (mysql_real_connect (db->con, db->host, db->user, db->pass, db->database, db->port, db->socket, 0) == NULL) { @@ -283,10 +317,14 @@ static MYSQL *getconnection (mysql_database_t *db) return (NULL); } + cipher = mysql_get_ssl_cipher (db->con); + INFO ("mysql plugin: Successfully connected to database %s " - "at server %s (server version: %s, protocol version: %d)", + "at server %s with cipher %s " + "(server version: %s, protocol version: %d) ", (db->database != NULL) ? db->database : "", mysql_get_host_info (db->con), + (cipher != NULL) ? cipher : "", mysql_get_server_info (db->con), mysql_get_proto_info (db->con)); @@ -579,40 +617,12 @@ static int mysql_read_innodb_stats (mysql_database_t *db, MYSQL *con) { "lock_row_lock_current_waits", "mysql_locks", DS_TYPE_DERIVE }, { "buffer_pool_size", "bytes", DS_TYPE_GAUGE }, - { "buffer_pool_reads", "operations", DS_TYPE_DERIVE }, - { "buffer_pool_read_requests", "operations", DS_TYPE_DERIVE }, - { "buffer_pool_write_requests", "operations", DS_TYPE_DERIVE }, - { "buffer_pool_wait_free", "operations", DS_TYPE_DERIVE }, - { "buffer_pool_read_ahead", "operations", DS_TYPE_DERIVE }, - { "buffer_pool_read_ahead_evicted", "operations", DS_TYPE_DERIVE }, - - { "buffer_pool_pages_total", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_pages_misc", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_pages_data", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_bytes_data", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_pages_dirty", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_bytes_dirty", "gauge", DS_TYPE_GAUGE }, - { "buffer_pool_pages_free", "gauge", DS_TYPE_GAUGE }, - - { "buffer_pages_created", "operations", DS_TYPE_DERIVE }, - { "buffer_pages_written", "operations", DS_TYPE_DERIVE }, - { "buffer_pages_read", "operations", DS_TYPE_DERIVE }, - { "buffer_data_reads", "operations", DS_TYPE_DERIVE }, - { "buffer_data_written", "operations", DS_TYPE_DERIVE }, - - { "os_data_reads", "operations", DS_TYPE_DERIVE }, - { "os_data_writes", "operations", DS_TYPE_DERIVE }, - { "os_data_fsyncs", "operations", DS_TYPE_DERIVE }, { "os_log_bytes_written", "operations", DS_TYPE_DERIVE }, - { "os_log_fsyncs", "operations", DS_TYPE_DERIVE }, { "os_log_pending_fsyncs", "operations", DS_TYPE_DERIVE }, { "os_log_pending_writes", "operations", DS_TYPE_DERIVE }, { "trx_rseg_history_len", "gauge", DS_TYPE_GAUGE }, - { "log_waits", "operations", DS_TYPE_DERIVE }, - { "log_write_requests", "operations", DS_TYPE_DERIVE }, - { "log_writes", "operations", DS_TYPE_DERIVE }, { "adaptive_hash_searches", "operations", DS_TYPE_DERIVE }, { "file_num_open_files", "gauge", DS_TYPE_GAUGE }, @@ -627,9 +637,6 @@ static int mysql_read_innodb_stats (mysql_database_t *db, MYSQL *con) { "ibuf_size", "bytes", DS_TYPE_GAUGE }, { "innodb_activity_count", "gauge", DS_TYPE_GAUGE }, - { "innodb_dblwr_writes", "operations", DS_TYPE_DERIVE }, - { "innodb_dblwr_pages_written", "operations", DS_TYPE_DERIVE }, - { "innodb_dblwr_page_size", "gauge", DS_TYPE_GAUGE }, { "innodb_rwlock_s_spin_waits", "operations", DS_TYPE_DERIVE }, { "innodb_rwlock_x_spin_waits", "operations", DS_TYPE_DERIVE }, @@ -684,6 +691,93 @@ static int mysql_read_innodb_stats (mysql_database_t *db, MYSQL *con) return (0); } +static int mysql_read_wsrep_stats (mysql_database_t *db, MYSQL *con) +{ + MYSQL_RES *res; + MYSQL_ROW row; + + const char *query; + struct { + const char *key; + const char *type; + int ds_type; + } metrics[] = { + + { "wsrep_apply_oooe", "operations", DS_TYPE_DERIVE }, + { "wsrep_apply_oool", "operations", DS_TYPE_DERIVE }, + { "wsrep_causal_reads", "operations", DS_TYPE_DERIVE }, + { "wsrep_commit_oooe", "operations", DS_TYPE_DERIVE }, + { "wsrep_commit_oool", "operations", DS_TYPE_DERIVE }, + { "wsrep_flow_control_recv", "operations", DS_TYPE_DERIVE }, + { "wsrep_flow_control_sent", "operations", DS_TYPE_DERIVE }, + { "wsrep_flow_control_paused", "operations", DS_TYPE_DERIVE }, + { "wsrep_local_bf_aborts", "operations", DS_TYPE_DERIVE }, + { "wsrep_local_cert_failures", "operations", DS_TYPE_DERIVE }, + { "wsrep_local_commits", "operations", DS_TYPE_DERIVE }, + { "wsrep_local_replays", "operations", DS_TYPE_DERIVE }, + { "wsrep_received", "operations", DS_TYPE_DERIVE }, + { "wsrep_replicated", "operations", DS_TYPE_DERIVE }, + + { "wsrep_received_bytes", "total_bytes", DS_TYPE_DERIVE }, + { "wsrep_replicated_bytes", "total_bytes", DS_TYPE_DERIVE }, + + { "wsrep_apply_window", "gauge", DS_TYPE_GAUGE }, + { "wsrep_commit_window", "gauge", DS_TYPE_GAUGE }, + + { "wsrep_cluster_size", "gauge", DS_TYPE_GAUGE }, + { "wsrep_cert_deps_distance", "gauge", DS_TYPE_GAUGE }, + + { "wsrep_local_recv_queue", "queue_length", DS_TYPE_GAUGE }, + { "wsrep_local_send_queue", "queue_length", DS_TYPE_GAUGE }, + + { NULL, NULL, 0} + + }; + + query = "SHOW GLOBAL STATUS LIKE 'wsrep_%'"; + + res = exec_query (con, query); + if (res == NULL) + return (-1); + + row = mysql_fetch_row (res); + if (row == NULL) + { + ERROR ("mysql plugin: Failed to get wsrep statistics: " + "`%s' did not return any rows.", query); + mysql_free_result (res); + return (-1); + } + + while ((row = mysql_fetch_row (res))) + { + int i; + char *key; + unsigned long long val; + + key = row[0]; + val = atoll (row[1]); + + for (i = 0; metrics[i].key != NULL && strcmp(metrics[i].key, key) != 0; i++) + ; + + if (metrics[i].key == NULL) + continue; + + switch (metrics[i].ds_type) { + case DS_TYPE_GAUGE: + gauge_submit(metrics[i].type, key, (gauge_t)val, db); + break; + case DS_TYPE_DERIVE: + derive_submit(metrics[i].type, key, (derive_t)val, db); + break; + } + } + + mysql_free_result(res); + return (0); +} /* mysql_read_wsrep_stats */ + static int mysql_read (user_data_t *ud) { mysql_database_t *db; @@ -825,6 +919,8 @@ static int mysql_read (user_data_t *ud) counter_submit ("mysql_bpool_counters", "read_requests", val, db); else if (strcmp (key, "Innodb_buffer_pool_reads") == 0) counter_submit ("mysql_bpool_counters", "reads", val, db); + else if (strcmp (key, "Innodb_buffer_pool_wait_free") == 0) + counter_submit ("mysql_bpool_counters", "wait_free", val, db); else if (strcmp (key, "Innodb_buffer_pool_write_requests") == 0) counter_submit ("mysql_bpool_counters", "write_requests", val, db); else if (strcmp (key, "Innodb_buffer_pool_bytes_data") == 0) @@ -849,6 +945,8 @@ static int mysql_read (user_data_t *ud) counter_submit ("mysql_innodb_dblwr", "writes", val, db); else if (strcmp (key, "Innodb_dblwr_pages_written") == 0) counter_submit ("mysql_innodb_dblwr", "written", val, db); + else if (strcmp (key, "Innodb_dblwr_page_size") == 0) + gauge_submit ("mysql_innodb_dblwr", "page_size", val, db); /* log */ else if (strcmp (key, "Innodb_log_waits") == 0) @@ -903,7 +1001,7 @@ static int mysql_read (user_data_t *ud) counter_submit ("mysql_sort", "scan", val, db); } - else if (strncmp (key, "Slow_queries", strlen ("Slow_queries")) == 0) + else if (strncmp (key, "Slow_queries", strlen ("Slow_queries")) == 0) { counter_submit ("mysql_slow_queries", NULL , val, db); } @@ -952,6 +1050,9 @@ static int mysql_read (user_data_t *ud) if ((db->slave_stats) || (db->slave_notif)) mysql_read_slave_stats (db, con); + if (db->wsrep_stats) + mysql_read_wsrep_stats (db, con); + return (0); } /* int mysql_read */ diff --git a/src/netapp.c b/src/netapp.c index 45395ae0..26577dad 100644 --- a/src/netapp.c +++ b/src/netapp.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_ignorelist.h" @@ -893,7 +894,6 @@ static int cna_handle_wafl_data (const char *hostname, cfg_wafl_t *cfg_wafl, /* const char *plugin_inst; na_elem_t *instances; - na_elem_t *counter; na_elem_iter_t counter_iter; perf_data.timestamp = cna_child_get_cdtime (data); @@ -918,7 +918,7 @@ static int cna_handle_wafl_data (const char *hostname, cfg_wafl_t *cfg_wafl, /* /* Iterate over all counters */ counter_iter = na_child_iterator (na_elem_child (instances, "counters")); - for (counter = na_iterator_next (&counter_iter); + for (na_elem_t *counter = na_iterator_next (&counter_iter); counter != NULL; counter = na_iterator_next (&counter_iter)) { @@ -1054,7 +1054,6 @@ static int cna_handle_disk_data (const char *hostname, /* {{{ */ { cdtime_t timestamp; na_elem_t *instances; - na_elem_t *instance; na_elem_iter_t instance_iter; disk_t *worst_disk = NULL; @@ -1074,7 +1073,7 @@ static int cna_handle_disk_data (const char *hostname, /* {{{ */ /* Iterate over all children */ instance_iter = na_child_iterator (instances); - for (instance = na_iterator_next (&instance_iter); + for (na_elem_t *instance = na_iterator_next (&instance_iter); instance != NULL; instance = na_iterator_next(&instance_iter)) { @@ -1082,7 +1081,6 @@ static int cna_handle_disk_data (const char *hostname, /* {{{ */ disk_t new_data = { 0 }; na_elem_iter_t counter_iterator; - na_elem_t *counter; new_data.timestamp = timestamp; new_data.disk_busy_percent = NAN; @@ -1093,7 +1091,7 @@ static int cna_handle_disk_data (const char *hostname, /* {{{ */ /* Look for the "disk_busy" and "base_for_disk_busy" counters */ counter_iterator = na_child_iterator(na_elem_child(instance, "counters")); - for (counter = na_iterator_next(&counter_iterator); + for (na_elem_t *counter = na_iterator_next(&counter_iterator); counter != NULL; counter = na_iterator_next(&counter_iterator)) { @@ -1250,7 +1248,6 @@ static int cna_handle_volume_perf_data (const char *hostname, /* {{{ */ cdtime_t timestamp; na_elem_t *elem_instances; na_elem_iter_t iter_instances; - na_elem_t *elem_instance; timestamp = cna_child_get_cdtime (data); @@ -1264,7 +1261,7 @@ static int cna_handle_volume_perf_data (const char *hostname, /* {{{ */ } iter_instances = na_child_iterator (elem_instances); - for (elem_instance = na_iterator_next(&iter_instances); + for (na_elem_t *elem_instance = na_iterator_next(&iter_instances); elem_instance != NULL; elem_instance = na_iterator_next(&iter_instances)) { @@ -1275,7 +1272,6 @@ static int cna_handle_volume_perf_data (const char *hostname, /* {{{ */ na_elem_t *elem_counters; na_elem_iter_t iter_counters; - na_elem_t *elem_counter; perf_data.timestamp = timestamp; @@ -1293,7 +1289,7 @@ static int cna_handle_volume_perf_data (const char *hostname, /* {{{ */ continue; iter_counters = na_child_iterator (elem_counters); - for (elem_counter = na_iterator_next(&iter_counters); + for (na_elem_t *elem_counter = na_iterator_next(&iter_counters); elem_counter != NULL; elem_counter = na_iterator_next(&iter_counters)) { @@ -1418,9 +1414,7 @@ static int cna_query_volume_perf (host_config_t *host) /* {{{ */ static int cna_submit_volume_usage_data (const char *hostname, /* {{{ */ cfg_volume_usage_t *cfg_volume, int interval) { - data_volume_usage_t *v; - - for (v = cfg_volume->volumes; v != NULL; v = v->next) + for (data_volume_usage_t *v = cfg_volume->volumes; v != NULL; v = v->next) { char plugin_instance[DATA_MAX_NAME_LEN]; @@ -1541,7 +1535,7 @@ static void cna_handle_volume_snap_usage(const host_config_t *host, /* {{{ */ data_volume_usage_t *v) { uint64_t snap_used = 0, value; - na_elem_t *data, *elem_snap, *elem_snapshots; + na_elem_t *data, *elem_snapshots; na_elem_iter_t iter_snap; data = na_server_invoke_elem(host->srv, v->snap_query); @@ -1573,7 +1567,7 @@ static void cna_handle_volume_snap_usage(const host_config_t *host, /* {{{ */ } iter_snap = na_child_iterator (elem_snapshots); - for (elem_snap = na_iterator_next (&iter_snap); + for (na_elem_t *elem_snap = na_iterator_next (&iter_snap); elem_snap != NULL; elem_snap = na_iterator_next (&iter_snap)) { @@ -1688,7 +1682,6 @@ static void cna_handle_volume_sis_saved (const host_config_t *host, /* {{{ */ static int cna_handle_volume_usage_data (const host_config_t *host, /* {{{ */ cfg_volume_usage_t *cfg_volume, na_elem_t *data) { - na_elem_t *elem_volume; na_elem_t *elem_volumes; na_elem_iter_t iter_volume; @@ -1702,7 +1695,7 @@ static int cna_handle_volume_usage_data (const host_config_t *host, /* {{{ */ } iter_volume = na_child_iterator (elem_volumes); - for (elem_volume = na_iterator_next (&iter_volume); + for (na_elem_t *elem_volume = na_iterator_next (&iter_volume); elem_volume != NULL; elem_volume = na_iterator_next (&iter_volume)) { @@ -1826,7 +1819,6 @@ static int cna_query_volume_usage (host_config_t *host) /* {{{ */ static int cna_handle_quota_data (const host_config_t *host, /* {{{ */ cfg_quota_t *cfg_quota, na_elem_t *data) { - na_elem_t *elem_quota; na_elem_t *elem_quotas; na_elem_iter_t iter_quota; @@ -1840,7 +1832,7 @@ static int cna_handle_quota_data (const host_config_t *host, /* {{{ */ } iter_quota = na_child_iterator (elem_quotas); - for (elem_quota = na_iterator_next (&iter_quota); + for (na_elem_t *elem_quota = na_iterator_next (&iter_quota); elem_quota != NULL; elem_quota = na_iterator_next (&iter_quota)) { @@ -1952,7 +1944,6 @@ static int cna_query_quota (host_config_t *host) /* {{{ */ static int cna_handle_snapvault_data (const char *hostname, /* {{{ */ cfg_snapvault_t *cfg_snapvault, na_elem_t *data, cdtime_t interval) { - na_elem_t *status; na_elem_iter_t status_iter; status = na_elem_child (data, "status-list"); @@ -1962,7 +1953,7 @@ static int cna_handle_snapvault_data (const char *hostname, /* {{{ */ } status_iter = na_child_iterator (status); - for (status = na_iterator_next (&status_iter); + for (na_elem_t *status = na_iterator_next (&status_iter); status != NULL; status = na_iterator_next (&status_iter)) { @@ -2012,7 +2003,6 @@ static int cna_handle_snapvault_iter (host_config_t *host, /* {{{ */ const char *tag; uint32_t records_count; - uint32_t i; records_count = na_child_get_uint32 (data, "records", UINT32_MAX); if (records_count == UINT32_MAX) @@ -2024,7 +2014,7 @@ static int cna_handle_snapvault_iter (host_config_t *host, /* {{{ */ DEBUG ("netapp plugin: Iterating %u SV records (tag = %s)", records_count, tag); - for (i = 0; i < records_count; ++i) { + for (uint32_t i = 0; i < records_count; ++i) { na_elem_t *elem; elem = na_server_invoke (host->srv, @@ -2113,7 +2103,6 @@ static int cna_handle_system_data (const char *hostname, /* {{{ */ cfg_system_t *cfg_system, na_elem_t *data, int interval) { na_elem_t *instances; - na_elem_t *counter; na_elem_iter_t counter_iter; derive_t disk_read = 0, disk_written = 0; @@ -2145,7 +2134,7 @@ static int cna_handle_system_data (const char *hostname, /* {{{ */ } counter_iter = na_child_iterator (na_elem_child (instances, "counters")); - for (counter = na_iterator_next (&counter_iter); + for (na_elem_t *counter = na_iterator_next (&counter_iter); counter != NULL; counter = na_iterator_next (&counter_iter)) { @@ -2390,7 +2379,6 @@ static int cna_config_volume_performance (host_config_t *host, /* {{{ */ const oconfig_item_t *ci) { cfg_volume_perf_t *cfg_volume_perf; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2433,7 +2421,7 @@ static int cna_config_volume_performance (host_config_t *host, /* {{{ */ } cfg_volume_perf = host->cfg_volume_perf; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; /* if (!item || !item->key || !*item->key) continue; */ @@ -2517,7 +2505,6 @@ static void cna_config_volume_usage_default (cfg_volume_usage_t *cvu, /* {{{ */ static int cna_config_quota (host_config_t *host, oconfig_item_t *ci) /* {{{ */ { cfg_quota_t *cfg_quota; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2533,7 +2520,7 @@ static int cna_config_quota (host_config_t *host, oconfig_item_t *ci) /* {{{ */ } cfg_quota = host->cfg_quota; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; if (strcasecmp (item->key, "Interval") == 0) @@ -2549,7 +2536,6 @@ static int cna_config_quota (host_config_t *host, oconfig_item_t *ci) /* {{{ */ /* Corresponds to a block */ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */ cfg_disk_t *cfg_disk; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2569,7 +2555,7 @@ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */ } cfg_disk = host->cfg_disk; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; /* if (!item || !item->key || !*item->key) continue; */ @@ -2594,7 +2580,6 @@ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */ static int cna_config_wafl(host_config_t *host, oconfig_item_t *ci) /* {{{ */ { cfg_wafl_t *cfg_wafl; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2612,7 +2597,7 @@ static int cna_config_wafl(host_config_t *host, oconfig_item_t *ci) /* {{{ */ } cfg_wafl = host->cfg_wafl; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; if (strcasecmp(item->key, "Interval") == 0) @@ -2662,7 +2647,6 @@ static int cna_config_volume_usage(host_config_t *host, /* {{{ */ const oconfig_item_t *ci) { cfg_volume_usage_t *cfg_volume_usage; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2696,7 +2680,7 @@ static int cna_config_volume_usage(host_config_t *host, /* {{{ */ } cfg_volume_usage = host->cfg_volume_usage; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; /* if (!item || !item->key || !*item->key) continue; */ @@ -2723,7 +2707,6 @@ static int cna_config_snapvault (host_config_t *host, /* {{{ */ const oconfig_item_t *ci) { cfg_snapvault_t *cfg_snapvault; - int i; if ((host == NULL) || (ci == NULL)) return EINVAL; @@ -2740,7 +2723,7 @@ static int cna_config_snapvault (host_config_t *host, /* {{{ */ cfg_snapvault = host->cfg_snapvault; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; if (strcasecmp (item->key, "Interval") == 0) @@ -2758,7 +2741,6 @@ static int cna_config_system (host_config_t *host, /* {{{ */ oconfig_item_t *ci) { cfg_system_t *cfg_system; - int i; if ((host == NULL) || (ci == NULL)) return (EINVAL); @@ -2777,7 +2759,7 @@ static int cna_config_system (host_config_t *host, /* {{{ */ } cfg_system = host->cfg_system; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; if (strcasecmp(item->key, "Interval") == 0) { @@ -2915,7 +2897,6 @@ static int cna_config_host (host_config_t *host, /* {{{ */ oconfig_item_t *item; _Bool is_vfiler = 0; int status; - int i; if (! strcasecmp (ci->key, "VFiler")) is_vfiler = 1; @@ -2929,7 +2910,7 @@ static int cna_config_host (host_config_t *host, /* {{{ */ if (status != 0) return (1); - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { item = ci->children + i; status = 0; @@ -3138,10 +3119,9 @@ static int cna_read (user_data_t *ud) { /* {{{ */ } /* }}} int cna_read */ static int cna_config (oconfig_item_t *ci) { /* {{{ */ - int i; oconfig_item_t *item; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { item = ci->children + i; if (strcasecmp(item->key, "Host") == 0) diff --git a/src/netlink.c b/src/netlink.c index 5c3a9f00..cfca46f7 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -156,14 +157,12 @@ static int add_ignorelist (const char *dev, const char *type, static int check_ignorelist (const char *dev, const char *type, const char *type_instance) { - ir_ignorelist_t *i; - assert ((dev != NULL) && (type != NULL)); if (ir_ignorelist_head == NULL) return (ir_ignorelist_invert ? 0 : 1); - for (i = ir_ignorelist_head; i != NULL; i = i->next) + for (ir_ignorelist_t *i = ir_ignorelist_head; i != NULL; i = i->next) { /* i->device == NULL => match all devices */ if ((i->device != NULL) @@ -724,8 +723,6 @@ static int ir_read (void) int ret; unsigned int seq, portid; - size_t ifindex; - static const int type_id[] = { RTM_GETQDISC, RTM_GETTCLASS, RTM_GETTFILTER }; static const char *type_name[] = { "qdisc", "class", "filter" }; @@ -760,15 +757,14 @@ static int ir_read (void) /* `link_filter_cb' will update `iflist' which is used here to iterate * over all interfaces. */ - for (ifindex = 1; ifindex < iflist_len; ifindex++) + for (size_t ifindex = 1; ifindex < iflist_len; ifindex++) { struct tcmsg *tm; - size_t type_index; if (iflist[ifindex] == NULL) continue; - for (type_index = 0; type_index < STATIC_ARRAY_SIZE (type_id); type_index++) + for (size_t type_index = 0; type_index < STATIC_ARRAY_SIZE (type_id); type_index++) { if (check_ignorelist (iflist[ifindex], type_name[type_index], NULL)) { diff --git a/src/network.c b/src/network.c index 5a8a88ef..1458a0ae 100644 --- a/src/network.c +++ b/src/network.c @@ -26,6 +26,7 @@ #define _BSD_SOURCE /* For struct ip_mreq */ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -369,9 +370,7 @@ static _Bool check_send_okay (const value_list_t *vl) /* {{{ */ static _Bool check_notify_received (const notification_t *n) /* {{{ */ { - notification_meta_t *ptr; - - for (ptr = n->meta; ptr != NULL; ptr = ptr->next) + for (notification_meta_t *ptr = n->meta; ptr != NULL; ptr = ptr->next) if ((strcmp ("network:received", ptr->name) == 0) && (ptr->type == NM_TYPE_BOOLEAN)) return ((_Bool) ptr->nm_value.nm_boolean); @@ -491,7 +490,7 @@ static int network_dispatch_notification (notification_t *n) /* {{{ */ } /* }}} int network_dispatch_notification */ #if HAVE_LIBGCRYPT -static void network_init_gcrypt (void) /* {{{ */ +static int network_init_gcrypt (void) /* {{{ */ { gcry_error_t err; @@ -499,7 +498,7 @@ static void network_init_gcrypt (void) /* {{{ */ * Because you can't know in a library whether another library has * already initialized the library */ if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P)) - return; + return (0); /* http://www.gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html * To ensure thread-safety, it's important to set GCRYCTL_SET_THREAD_CBS @@ -513,7 +512,7 @@ static void network_init_gcrypt (void) /* {{{ */ if (err) { ERROR ("network plugin: gcry_control (GCRYCTL_SET_THREAD_CBS) failed: %s", gcry_strerror (err)); - abort (); + return (-1); } # endif @@ -523,11 +522,12 @@ static void network_init_gcrypt (void) /* {{{ */ if (err) { ERROR ("network plugin: gcry_control (GCRYCTL_INIT_SECMEM) failed: %s", gcry_strerror (err)); - abort (); + return (-1); } gcry_control (GCRYCTL_INITIALIZATION_FINISHED); -} /* }}} void network_init_gcrypt */ + return (0); +} /* }}} int network_init_gcrypt */ static gcry_cipher_hd_t network_get_aes256_cypher (sockent_t *se, /* {{{ */ const void *iv, size_t iv_size, const char *username) @@ -618,7 +618,6 @@ static int write_part_values (char **ret_buffer, size_t *ret_buffer_len, value_t *pkg_values; size_t offset; - int i; num_values = vl->values_len; packet_len = sizeof (part_header_t) + sizeof (uint16_t) @@ -648,7 +647,7 @@ static int write_part_values (char **ret_buffer, size_t *ret_buffer_len, pkg_num_values = htons ((uint16_t) vl->values_len); - for (i = 0; i < num_values; i++) + for (int i = 0; i < num_values; i++) { pkg_values_types[i] = (uint8_t) ds->ds[i].type; switch (ds->ds[i].type) @@ -786,7 +785,6 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, uint16_t tmp16; size_t exp_size; - size_t i; uint16_t pkg_length; uint16_t pkg_type; @@ -852,7 +850,7 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, memcpy (pkg_values, buffer, pkg_numval * sizeof (*pkg_values)); buffer += pkg_numval * sizeof (*pkg_values); - for (i = 0; i < pkg_numval; i++) + for (size_t i = 0; i < pkg_numval; i++) { switch (pkg_types[i]) { @@ -1151,7 +1149,7 @@ static int parse_part_sign_sha256 (sockent_t *se, /* {{{ */ if (memcmp (pss.hash, hash, sizeof (pss.hash)) != 0) { WARNING ("network plugin: Verifying HMAC-SHA-256 signature failed: " - "Hash mismatch."); + "Hash mismatch. Username: %s", pss.username); } else { @@ -1286,6 +1284,7 @@ static int parse_part_encr_aes256 (sockent_t *se, /* {{{ */ pea.username); if (cypher == NULL) { + ERROR ("network plugin: Failed to get cypher. Username: %s", pea.username); sfree (pea.username); return (-1); } @@ -1301,8 +1300,8 @@ static int parse_part_encr_aes256 (sockent_t *se, /* {{{ */ if (err != 0) { sfree (pea.username); - ERROR ("network plugin: gcry_cipher_decrypt returned: %s", - gcry_strerror (err)); + ERROR ("network plugin: gcry_cipher_decrypt returned: %s. Username: %s", + gcry_strerror (err), pea.username); return (-1); } @@ -1318,8 +1317,8 @@ static int parse_part_encr_aes256 (sockent_t *se, /* {{{ */ buffer + buffer_offset, payload_len); if (memcmp (hash, pea.hash, sizeof (hash)) != 0) { + ERROR ("network plugin: Checksum mismatch. Username: %s", pea.username); sfree (pea.username); - ERROR ("network plugin: Decryption failed: Checksum mismatch."); return (-1); } @@ -1398,7 +1397,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ #if HAVE_LIBGCRYPT int packet_was_signed = (flags & PP_SIGNED); - int packet_was_encrypted = (flags & PP_ENCRYPTED); + int packet_was_encrypted = (flags & PP_ENCRYPTED); int printed_ignore_warning = 0; #endif /* HAVE_LIBGCRYPT */ @@ -1650,9 +1649,7 @@ static void free_sockent_client (struct sockent_client *sec) /* {{{ */ static void free_sockent_server (struct sockent_server *ses) /* {{{ */ { - size_t i; - - for (i = 0; i < ses->fd_num; i++) + for (size_t i = 0; i < ses->fd_num; i++) { if (ses->fd[i] >= 0) { @@ -2066,7 +2063,12 @@ static int sockent_init_crypto (sockent_t *se) /* {{{ */ { if (se->data.client.security_level > SECURITY_LEVEL_NONE) { - network_init_gcrypt (); + if (network_init_gcrypt () < 0) + { + ERROR ("network plugin: Cannot configure client socket with " + "security: Failed to initialize crypto library."); + return (-1); + } if ((se->data.client.username == NULL) || (se->data.client.password == NULL)) @@ -2086,7 +2088,12 @@ static int sockent_init_crypto (sockent_t *se) /* {{{ */ { if (se->data.server.security_level > SECURITY_LEVEL_NONE) { - network_init_gcrypt (); + if (network_init_gcrypt () < 0) + { + ERROR ("network plugin: Cannot configure server socket with " + "security: Failed to initialize crypto library."); + return (-1); + } if (se->data.server.auth_file == NULL) { @@ -2139,8 +2146,7 @@ static int sockent_client_connect (sockent_t *se) /* {{{ */ static c_complain_t complaint = C_COMPLAIN_INIT_STATIC; struct sockent_client *client; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list = NULL, *ai_ptr; + struct addrinfo *ai_list; int status; _Bool reconnect = 0; cdtime_t now; @@ -2160,12 +2166,12 @@ static int sockent_client_connect (sockent_t *se) /* {{{ */ if (client->fd >= 0 && !reconnect) /* already connected and not stale*/ return (0); -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; - ai_hints.ai_protocol = IPPROTO_UDP; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_protocol = IPPROTO_UDP, + .ai_socktype = SOCK_DGRAM + }; status = getaddrinfo (se->node, (se->service != NULL) ? se->service : NET_DEFAULT_PORT, @@ -2186,7 +2192,7 @@ static int sockent_client_connect (sockent_t *se) /* {{{ */ se->node); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { if (client->fd >= 0) /* when we reconnect */ sockent_client_disconnect(se); @@ -2236,8 +2242,7 @@ static int sockent_client_connect (sockent_t *se) /* {{{ */ /* Open the file descriptors for a initialized sockent structure. */ static int sockent_server_listen (sockent_t *se) /* {{{ */ { - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list, *ai_ptr; + struct addrinfo *ai_list; int status; const char *node; @@ -2258,15 +2263,12 @@ static int sockent_server_listen (sockent_t *se) /* {{{ */ DEBUG ("network plugin: sockent_server_listen: node = %s; service = %s;", node, service); -#ifdef AI_PASSIVE - ai_hints.ai_flags |= AI_PASSIVE; -#endif -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; - ai_hints.ai_protocol = IPPROTO_UDP; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG | AI_PASSIVE, + .ai_protocol = IPPROTO_UDP, + .ai_socktype = SOCK_DGRAM + }; status = getaddrinfo (node, service, &ai_hints, &ai_list); if (status != 0) @@ -2278,7 +2280,7 @@ static int sockent_server_listen (sockent_t *se) /* {{{ */ return (-1); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { int *tmp; @@ -2333,7 +2335,6 @@ static int sockent_add (sockent_t *se) /* {{{ */ if (se->type == SOCKENT_TYPE_SERVER) { struct pollfd *tmp; - size_t i; tmp = realloc (listen_sockets_pollfd, sizeof (*tmp) * (listen_sockets_num @@ -2346,7 +2347,7 @@ static int sockent_add (sockent_t *se) /* {{{ */ listen_sockets_pollfd = tmp; tmp = listen_sockets_pollfd + listen_sockets_num; - for (i = 0; i < se->data.server.fd_num; i++) + for (size_t i = 0; i < se->data.server.fd_num; i++) { memset (tmp + i, 0, sizeof (*tmp)); tmp[i].fd = se->data.server.fd[i]; @@ -2445,7 +2446,6 @@ static int network_receive (void) /* {{{ */ char buffer[network_config_packet_size]; int buffer_len; - size_t i; int status = 0; receive_list_entry_t *private_list_head; @@ -2471,7 +2471,7 @@ static int network_receive (void) /* {{{ */ break; } - for (i = 0; (i < listen_sockets_num) && (status > 0); i++) + for (size_t i = 0; (i < listen_sockets_num) && (status > 0); i++) { receive_list_entry_t *ent; @@ -2789,11 +2789,9 @@ static void network_send_buffer_encrypted (sockent_t *se, /* {{{ */ static void network_send_buffer (char *buffer, size_t buffer_len) /* {{{ */ { - sockent_t *se; - DEBUG ("network plugin: network_send_buffer: buffer_len = %zu", buffer_len); - for (se = sending_sockets; se != NULL; se = se->next) + for (sockent_t *se = sending_sockets; se != NULL; se = se->next) { #if HAVE_LIBGCRYPT if (se->data.client.security_level == SECURITY_LEVEL_ENCRYPT) @@ -2894,6 +2892,11 @@ static int network_write (const data_set_t *ds, const value_list_t *vl, { int status; + /* listen_loop is set to non-zero in the shutdown callback, which is + * guaranteed to be called *after* all the write threads have been shut + * down. */ + assert (listen_loop == 0); + if (!check_send_okay (vl)) { #if COLLECT_DEBUG @@ -3040,7 +3043,6 @@ static int network_config_add_listen (const oconfig_item_t *ci) /* {{{ */ { sockent_t *se; int status; - int i; if ((ci->values_num < 1) || (ci->values_num > 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) @@ -3062,7 +3064,7 @@ static int network_config_add_listen (const oconfig_item_t *ci) /* {{{ */ if (ci->values_num >= 2) se->service = strdup (ci->values[1].value.string); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -3126,7 +3128,6 @@ static int network_config_add_server (const oconfig_item_t *ci) /* {{{ */ { sockent_t *se; int status; - int i; if ((ci->values_num < 1) || (ci->values_num > 2) || (ci->values[0].type != OCONFIG_TYPE_STRING) @@ -3148,7 +3149,7 @@ static int network_config_add_server (const oconfig_item_t *ci) /* {{{ */ if (ci->values_num >= 2) se->service = strdup (ci->values[1].value.string); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -3210,17 +3211,15 @@ static int network_config_add_server (const oconfig_item_t *ci) /* {{{ */ static int network_config (oconfig_item_t *ci) /* {{{ */ { - int i; - /* The options need to be applied first */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("TimeToLive", child->key) == 0) network_config_set_ttl (child); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -3323,8 +3322,6 @@ static int network_notification (const notification_t *n, static int network_shutdown (void) { - sockent_t *se; - listen_loop++; /* Kill the listening thread */ @@ -3355,7 +3352,7 @@ static int network_shutdown (void) sfree (send_buffer); - for (se = sending_sockets; se != NULL; se = se->next) + for (sockent_t *se = sending_sockets; se != NULL; se = se->next) sockent_client_disconnect (se); sockent_destroy (sending_sockets); @@ -3454,7 +3451,11 @@ static int network_init (void) have_init = 1; #if HAVE_LIBGCRYPT - network_init_gcrypt (); + if (network_init_gcrypt () < 0) + { + ERROR ("network plugin: Failed to initialize crypto library."); + return (-1); + } #endif if (network_config_stats) diff --git a/src/nfs.c b/src/nfs.c index 0948bc79..c128c817 100644 --- a/src/nfs.c +++ b/src/nfs.c @@ -23,6 +23,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -345,8 +346,6 @@ static int nfs_init (void) #elif HAVE_LIBKSTAT static int nfs_init (void) { - kstat_t *ksp_chain = NULL; - nfs2_ksp_client = NULL; nfs2_ksp_server = NULL; nfs3_ksp_client = NULL; @@ -357,7 +356,7 @@ static int nfs_init (void) if (kc == NULL) return (-1); - for (ksp_chain = kc->kc_chain; ksp_chain != NULL; + for (kstat_t *ksp_chain = kc->kc_chain; ksp_chain != NULL; ksp_chain = ksp_chain->ks_next) { if (strncmp (ksp_chain->ks_module, "nfs", 3) != 0) @@ -385,7 +384,6 @@ static void nfs_procedures_submit (const char *plugin_instance, value_t *values, size_t values_num) { value_list_t vl = VALUE_LIST_INIT; - size_t i; vl.values_len = 1; sstrncpy (vl.host, hostname_g, sizeof (vl.host)); @@ -394,7 +392,7 @@ static void nfs_procedures_submit (const char *plugin_instance, sizeof (vl.plugin_instance)); sstrncpy (vl.type, "nfs_procedure", sizeof (vl.type)); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { vl.values = values + i; sstrncpy (vl.type_instance, type_instances[i], @@ -409,12 +407,11 @@ static void nfs_submit_fields (int nfs_version, const char *instance, { char plugin_instance[DATA_MAX_NAME_LEN]; value_t values[fields_num]; - size_t i; ssnprintf (plugin_instance, sizeof (plugin_instance), "v%i%s", nfs_version, instance); - for (i = 0; i < fields_num; i++) + for (size_t i = 0; i < fields_num; i++) (void) parse_value (fields[i], &values[i], DS_TYPE_DERIVE); nfs_procedures_submit (plugin_instance, proc_names, values, @@ -608,7 +605,6 @@ static int nfs_read_kstat (kstat_t *ksp, int nfs_version, const char *inst, { char plugin_instance[DATA_MAX_NAME_LEN]; value_t values[proc_names_num]; - size_t i; if (ksp == NULL) return (EINVAL); @@ -617,7 +613,7 @@ static int nfs_read_kstat (kstat_t *ksp, int nfs_version, const char *inst, nfs_version, inst); kstat_read(kc, ksp, NULL); - for (i = 0; i < proc_names_num; i++) + for (size_t i = 0; i < proc_names_num; i++) { /* The name passed to kstat_data_lookup() doesn't have the * "const" modifier, so we need to copy the name here. */ diff --git a/src/nginx.c b/src/nginx.c index 7587c1f9..e346cee3 100644 --- a/src/nginx.c +++ b/src/nginx.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -224,8 +225,6 @@ static void submit (const char *type, const char *inst, long long value) static int nginx_read (void) { - int i; - char *ptr; char *lines[16]; int lines_num = 0; @@ -263,7 +262,7 @@ static int nginx_read (void) * 16630948 16630948 31070465 * Reading: 6 Writing: 179 Waiting: 106 */ - for (i = 0; i < lines_num; i++) + for (int i = 0; i < lines_num; i++) { fields_num = strsplit (lines[i], fields, (sizeof (fields) / sizeof (fields[0]))); diff --git a/src/notify_desktop.c b/src/notify_desktop.c index c2d97520..ef7b95b8 100644 --- a/src/notify_desktop.c +++ b/src/notify_desktop.c @@ -29,6 +29,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -66,9 +67,7 @@ static int set_timeout (oconfig_item_t *ci, int *timeout) static int c_notify_config (oconfig_item_t *ci) { - int i = 0; - - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "OkayTimeout")) diff --git a/src/notify_email.c b/src/notify_email.c index 0120a403..cefeb22f 100644 --- a/src/notify_email.c +++ b/src/notify_email.c @@ -23,6 +23,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -66,8 +67,7 @@ static char *email_subject = NULL; static int authinteract (auth_client_request_t request, char **result, int fields, void __attribute__((unused)) *arg) { - int i; - for (i = 0; i < fields; i++) + for (int i = 0; i < fields; i++) { if (request[i].flags & AUTH_USER) result[i] = smtp_user; diff --git a/src/notify_nagios.c b/src/notify_nagios.c index c1692223..57a034da 100644 --- a/src/notify_nagios.c +++ b/src/notify_nagios.c @@ -25,6 +25,7 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -42,9 +43,7 @@ static char *nagios_command_file; static int nagios_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/ntpd.c b/src/ntpd.c index f7b57ba3..a0093655 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -28,6 +28,7 @@ #define _BSD_SOURCE /* For NI_MAXHOST */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -346,9 +347,7 @@ static int ntpd_connect (void) const char *host; const char *port; - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; int status; if (sock_descr >= 0) @@ -364,12 +363,12 @@ static int ntpd_connect (void) if (strlen (port) == 0) port = NTPD_DEFAULT_PORT; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = PF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; - ai_hints.ai_protocol = IPPROTO_UDP; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_protocol = IPPROTO_UDP, + .ai_socktype = SOCK_DGRAM + }; if ((status = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0) { @@ -382,7 +381,7 @@ static int ntpd_connect (void) return (-1); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { /* create our socket descriptor */ if ((sock_descr = socket (ai_ptr->ai_family, @@ -420,7 +419,6 @@ static int ntpd_receive_response (int *res_items, int *res_size, struct resp_pkt res; int status; int done; - int i; char *items; size_t items_num; @@ -674,7 +672,7 @@ static int ntpd_receive_response (int *res_items, int *res_size, items_num += pkt_item_num; *res_data = items; - for (i = 0; i < pkt_item_num; i++) + for (int i = 0; i < pkt_item_num; i++) { /* dst: There are already `*res_items' items with * res_item_size bytes each in in `*res_data'. Set @@ -903,7 +901,6 @@ static int ntpd_read (void) gauge_t offset_error; int status; - int i; /* On Linux, if the STA_NANO bit is set in ik->status, then ik->offset * is is nanoseconds, otherwise it's microseconds. */ @@ -971,7 +968,7 @@ static int ntpd_read (void) return (-1); } - for (i = 0; i < ps_num; i++) + for (int i = 0; i < ps_num; i++) { struct info_peer_summary *ptr; double offset; diff --git a/src/numa.c b/src/numa.c index 4bcc2468..8f5bf480 100644 --- a/src/numa.c +++ b/src/numa.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/nut.c b/src/nut.c index a033e2f6..b5c6b41b 100644 --- a/src/nut.c +++ b/src/nut.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -247,7 +248,6 @@ static int nut_read_one (nut_ups_t *ups) static int nut_read (void) { - nut_ups_t *ups; int success = 0; pthread_mutex_lock (&read_lock); @@ -258,7 +258,7 @@ static int nut_read (void) if (success != 0) return (0); - for (ups = upslist_head; ups != NULL; ups = ups->next) + for (nut_ups_t *ups = upslist_head; ups != NULL; ups = ups->next) if (nut_read_one (ups) == 0) success++; diff --git a/src/olsrd.c b/src/olsrd.c index 2b7e767e..899ad3e8 100644 --- a/src/olsrd.c +++ b/src/olsrd.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -149,20 +150,18 @@ static size_t strtabsplit (char *string, char **fields, size_t size) /* {{{ */ static FILE *olsrd_connect (void) /* {{{ */ { - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list, *ai_ptr; + struct addrinfo *ai_list; int ai_return; FILE *fh; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = PF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - ai_hints.ai_protocol = IPPROTO_TCP; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_protocol = IPPROTO_TCP, + .ai_socktype = SOCK_STREAM + }; - ai_list = NULL; ai_return = getaddrinfo (olsrd_get_node (), olsrd_get_service (), &ai_hints, &ai_list); if (ai_return != 0) @@ -174,7 +173,7 @@ static FILE *olsrd_connect (void) /* {{{ */ } fh = NULL; - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { int fd; int status; diff --git a/src/onewire.c b/src/onewire.c index 42bd1eb8..235eff80 100644 --- a/src/onewire.c +++ b/src/onewire.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" @@ -338,7 +339,6 @@ static int cow_read_values (const char *path, const char *name, value_t values[1]; value_list_t vl = VALUE_LIST_INIT; int success = 0; - size_t i; if (sensor_list != NULL) { @@ -354,7 +354,7 @@ static int cow_read_values (const char *path, const char *name, sstrncpy (vl.plugin, "onewire", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, name, sizeof (vl.plugin_instance)); - for (i = 0; i < family_info->features_num; i++) + for (size_t i = 0; i < family_info->features_num; i++) { char *buffer; size_t buffer_size; diff --git a/src/openldap.c b/src/openldap.c index 3dac057e..282e2dc7 100644 --- a/src/openldap.c +++ b/src/openldap.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -208,7 +209,7 @@ static void cldap_submit_gauge (const char *type, const char *type_instance, /* static int cldap_read_host (user_data_t *ud) /* {{{ */ { cldap_t *st; - LDAPMessage *e, *result; + LDAPMessage *result; char *dn; int rc; int status; @@ -249,7 +250,7 @@ static int cldap_read_host (user_data_t *ud) /* {{{ */ return (-1); } - for (e = ldap_first_entry (st->ld, result); e != NULL; + for (LDAPMessage *e = ldap_first_entry (st->ld, result); e != NULL; e = ldap_next_entry (st->ld, e)) { if ((dn = ldap_get_dn (st->ld, e)) != NULL) @@ -558,7 +559,6 @@ static int cldap_read_host (user_data_t *ud) /* {{{ */ static int cldap_config_add (oconfig_item_t *ci) /* {{{ */ { cldap_t *st; - int i; int status; st = calloc (1, sizeof (*st)); @@ -580,7 +580,7 @@ static int cldap_config_add (oconfig_item_t *ci) /* {{{ */ st->verifyhost = 1; st->version = LDAP_VERSION3; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -686,10 +686,9 @@ static int cldap_config_add (oconfig_item_t *ci) /* {{{ */ static int cldap_config (oconfig_item_t *ci) /* {{{ */ { - int i; int status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -719,9 +718,7 @@ static int cldap_init (void) /* {{{ */ static int cldap_shutdown (void) /* {{{ */ { - size_t i; - - for (i = 0; i < databases_num; i++) + for (size_t i = 0; i < databases_num; i++) if (databases[i]->ld != NULL) ldap_unbind_ext_s (databases[i]->ld, NULL, NULL); sfree (databases); diff --git a/src/openvpn.c b/src/openvpn.c index 85760e99..00ae736a 100644 --- a/src/openvpn.c +++ b/src/openvpn.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -521,12 +522,12 @@ static int multi4_read (const char *name, FILE *fh) static int openvpn_read (void) { FILE *fh; - int i, read; + int read; read = 0; /* call the right read function for every status entry in the list */ - for (i = 0; i < vpn_num; i++) + for (int i = 0; i < vpn_num; i++) { int vpn_read = 0; @@ -650,7 +651,7 @@ static int openvpn_config (const char *key, const char *value) if (strcasecmp ("StatusFile", key) == 0) { char *status_file, *status_name, *filename; - int status_version, i; + int status_version; vpn_status_t *temp; /* try to detect the status file format */ @@ -686,7 +687,7 @@ static int openvpn_config (const char *key, const char *value) } /* scan the list looking for a clone */ - for (i = 0; i < vpn_num; i++) + for (int i = 0; i < vpn_num; i++) { if (strcasecmp (vpn_list[i]->name, status_name) == 0) { @@ -777,9 +778,7 @@ static int openvpn_config (const char *key, const char *value) /* shutdown callback */ static int openvpn_shutdown (void) { - int i; - - for (i = 0; i < vpn_num; i++) + for (int i = 0; i < vpn_num; i++) { sfree (vpn_list[i]->file); sfree (vpn_list[i]); diff --git a/src/oracle.c b/src/oracle.c index cb9b3dbf..15548300 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -46,6 +46,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -93,7 +94,6 @@ static void o_report_error (const char *where, /* {{{ */ char buffer[2048]; sb4 error_code; int status; - unsigned int record_number; if (db_name == NULL) db_name = "(none)"; @@ -102,7 +102,7 @@ static void o_report_error (const char *where, /* {{{ */ /* An operation may cause / return multiple errors. Loop until we have * handled all errors available (with a fail-save limit of 16). */ - for (record_number = 1; record_number <= 16; record_number++) + for (unsigned int record_number = 1; record_number <= 16; record_number++) { memset (buffer, 0, sizeof (buffer)); error_code = -1; @@ -144,8 +144,6 @@ static void o_report_error (const char *where, /* {{{ */ static void o_database_free (o_database_t *db) /* {{{ */ { - size_t i; - if (db == NULL) return; @@ -156,7 +154,7 @@ static void o_database_free (o_database_t *db) /* {{{ */ sfree (db->queries); if (db->q_prep_areas != NULL) - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) udb_query_delete_preparation_area (db->q_prep_areas[i]); free (db->q_prep_areas); @@ -188,7 +186,6 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ { o_database_t *db; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -218,7 +215,7 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ } /* Fill the `o_database_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -277,7 +274,7 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ break; } - for (i = 0; i < db->queries_num; ++i) + for (int i = 0; i < db->queries_num; ++i) { db->q_prep_areas[i] = udb_query_allocate_preparation_area (db->queries[i]); @@ -325,9 +322,7 @@ static int o_config_add_database (oconfig_item_t *ci) /* {{{ */ static int o_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Query", child->key) == 0) @@ -399,7 +394,6 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ OCIDefine **oci_defines; int status; - size_t i; oci_statement = udb_query_get_user_data (q); @@ -517,13 +511,13 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ ALLOC_OR_FAIL (column_names, column_num * sizeof (char *)); ALLOC_OR_FAIL (column_names[0], column_num * DATA_MAX_NAME_LEN * sizeof (char)); - for (i = 1; i < column_num; i++) + for (size_t i = 1; i < column_num; i++) column_names[i] = column_names[i - 1] + DATA_MAX_NAME_LEN; ALLOC_OR_FAIL (column_values, column_num * sizeof (char *)); ALLOC_OR_FAIL (column_values[0], column_num * DATA_MAX_NAME_LEN * sizeof (char)); - for (i = 1; i < column_num; i++) + for (size_t i = 1; i < column_num; i++) column_values[i] = column_values[i - 1] + DATA_MAX_NAME_LEN; ALLOC_OR_FAIL (oci_defines, column_num * sizeof (OCIDefine *)); @@ -531,7 +525,7 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ /* ``Define'' the returned data, i. e. bind the columns to the buffers * allocated above. */ - for (i = 0; i < column_num; i++) /* {{{ */ + for (size_t i = 0; i < column_num; i++) /* {{{ */ { char *column_name; ub4 column_name_length; @@ -642,7 +636,6 @@ static int o_read_database_query (o_database_t *db, /* {{{ */ static int o_read_database (o_database_t *db) /* {{{ */ { - size_t i; int status; if (db->oci_service_context != NULL) @@ -717,7 +710,7 @@ static int o_read_database (o_database_t *db) /* {{{ */ DEBUG ("oracle plugin: o_read_database: db->connect_id = %s; db->oci_service_context = %p;", db->connect_id, db->oci_service_context); - for (i = 0; i < db->queries_num; i++) + for (size_t i = 0; i < db->queries_num; i++) o_read_database_query (db, db->queries[i], db->q_prep_areas[i]); return (0); diff --git a/src/perl.c b/src/perl.c index fe9f97b5..48374b69 100644 --- a/src/perl.c +++ b/src/perl.c @@ -34,6 +34,7 @@ #define DONT_POISON_SPRINTF_YET 1 #include "collectd.h" + #undef DONT_POISON_SPRINTF_YET #include "configfile.h" @@ -308,7 +309,6 @@ static int hv2data_source (pTHX_ HV *hash, data_source_t *ds) static size_t av2value (pTHX_ char *name, AV *array, value_t *value, size_t array_len) { const data_set_t *ds; - size_t i; if ((NULL == name) || (NULL == array) || (NULL == value) || (array_len == 0)) return 0; @@ -328,7 +328,7 @@ static size_t av2value (pTHX_ char *name, AV *array, value_t *value, size_t arra name, array_len, ds->ds_num); } - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { SV **tmp = av_fetch (array, i, 0); if (NULL != tmp) { @@ -427,7 +427,7 @@ static int hv2value_list (pTHX_ HV *hash, value_list_t *vl) static int av2data_set (pTHX_ AV *array, char *name, data_set_t *ds) { - int len, i; + int len; if ((NULL == array) || (NULL == name) || (NULL == ds)) return -1; @@ -442,7 +442,7 @@ static int av2data_set (pTHX_ AV *array, char *name, data_set_t *ds) ds->ds = smalloc ((len + 1) * sizeof (*ds->ds)); ds->ds_num = len + 1; - for (i = 0; i <= len; ++i) { + for (int i = 0; i <= len; ++i) { SV **elem = av_fetch (array, i, 0); if (NULL == elem) { @@ -486,9 +486,8 @@ static int av2notification_meta (pTHX_ AV *array, notification_meta_t **meta) notification_meta_t **m = meta; int len = av_len (array); - int i; - for (i = 0; i <= len; ++i) { + for (int i = 0; i <= len; ++i) { SV **tmp = av_fetch (array, i, 0); HV *hash; @@ -604,14 +603,12 @@ static int hv2notification (pTHX_ HV *hash, notification_t *n) static int data_set2av (pTHX_ data_set_t *ds, AV *array) { - size_t i; - if ((NULL == ds) || (NULL == array)) return -1; av_extend (array, ds->ds_num); - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { HV *source = newHV (); if (NULL == hv_store (source, "name", 4, @@ -711,7 +708,6 @@ static int value_list2hv (pTHX_ value_list_t *vl, data_set_t *ds, HV *hash) static int notification_meta2av (pTHX_ notification_meta_t *meta, AV *array) { int meta_num = 0; - int i; while (meta) { ++meta_num; @@ -720,7 +716,7 @@ static int notification_meta2av (pTHX_ notification_meta_t *meta, AV *array) av_extend (array, meta_num); - for (i = 0; NULL != meta; meta = meta->next, ++i) { + for (int i = 0; NULL != meta; meta = meta->next, ++i) { HV *m = newHV (); SV *value; @@ -807,8 +803,6 @@ static int notification2hv (pTHX_ notification_t *n, HV *hash) static int oconfig_item2hv (pTHX_ oconfig_item_t *ci, HV *hash) { - int i; - AV *values; AV *children; @@ -825,7 +819,7 @@ static int oconfig_item2hv (pTHX_ oconfig_item_t *ci, HV *hash) return -1; } - for (i = 0; i < ci->values_num; ++i) { + for (int i = 0; i < ci->values_num; ++i) { SV *value; switch (ci->values[i].type) { @@ -862,7 +856,7 @@ static int oconfig_item2hv (pTHX_ oconfig_item_t *ci, HV *hash) return -1; } - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { HV *child = newHV (); if (0 != oconfig_item2hv (aTHX_ ci->children + i, child)) { @@ -2238,21 +2232,19 @@ static void xs_init (pTHX) SV *tmp = NULL; char *file = __FILE__; - int i = 0; - dXSUB_SYS; /* enable usage of Perl modules using shared libraries */ newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); /* register API */ - for (i = 0; NULL != api[i].f; ++i) + for (int i = 0; NULL != api[i].f; ++i) newXS (api[i].name, api[i].f, file); stash = gv_stashpv ("Collectd", 1); /* export "constants" */ - for (i = 0; '\0' != constants[i].name[0]; ++i) + for (int i = 0; '\0' != constants[i].name[0]; ++i) newCONSTSUB (stash, constants[i].name, newSViv (constants[i].value)); /* export global variables @@ -2261,7 +2253,7 @@ static void xs_init (pTHX) * accessing any such variable (this is basically the same as using * tie() in Perl) */ /* global strings */ - for (i = 0; '\0' != g_strings[i].name[0]; ++i) { + for (int i = 0; '\0' != g_strings[i].name[0]; ++i) { tmp = get_sv (g_strings[i].name, 1); sv_magicext (tmp, NULL, PERL_MAGIC_ext, &g_pv_vtbl, g_strings[i].var, 0); @@ -2286,9 +2278,7 @@ static int init_pi (int argc, char **argv) log_info ("Initializing Perl interpreter..."); #if COLLECT_DEBUG { - int i = 0; - - for (i = 0; i < argc; ++i) + for (int i = 0; i < argc; ++i) log_debug ("argv[%i] = \"%s\"", i, argv[i]); } #endif /* COLLECT_DEBUG */ @@ -2557,11 +2547,10 @@ static int perl_config_plugin (pTHX_ oconfig_item_t *ci) static int perl_config (oconfig_item_t *ci) { int status = 0; - int i = 0; dTHXa (NULL); - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; int current_status = 0; diff --git a/src/pf.c b/src/pf.c index c9aeb5ff..d7a5a15c 100644 --- a/src/pf.c +++ b/src/pf.c @@ -20,6 +20,7 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -82,7 +83,6 @@ static int pf_read (void) struct pf_status state; int fd; int status; - int i; fd = open (pf_device, O_RDONLY); if (fd < 0) @@ -112,16 +112,16 @@ static int pf_read (void) return (-1); } - for (i = 0; i < PFRES_MAX; i++) + for (int i = 0; i < PFRES_MAX; i++) pf_submit ("pf_counters", pf_reasons[i], state.counters[i], /* is gauge = */ 0); - for (i = 0; i < LCNT_MAX; i++) + for (int i = 0; i < LCNT_MAX; i++) pf_submit ("pf_limits", pf_lcounters[i], state.lcounters[i], /* is gauge = */ 0); - for (i = 0; i < FCNT_MAX; i++) + for (int i = 0; i < FCNT_MAX; i++) pf_submit ("pf_state", pf_fcounters[i], state.fcounters[i], /* is gauge = */ 0); - for (i = 0; i < SCNT_MAX; i++) + for (int i = 0; i < SCNT_MAX; i++) pf_submit ("pf_source", pf_scounters[i], state.scounters[i], /* is gauge = */ 0); diff --git a/src/pinba.c b/src/pinba.c index 833fa1b8..b9eed68e 100644 --- a/src/pinba.c +++ b/src/pinba.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -251,11 +252,9 @@ static void service_statnode_process (pinba_statnode_t *node, /* {{{ */ static void service_process_request (Pinba__Request *request) /* {{{ */ { - unsigned int i; - pthread_mutex_lock (&stat_nodes_lock); - for (i = 0; i < stat_nodes_num; i++) + for (unsigned int i = 0; i < stat_nodes_num; i++) { if ((stat_nodes[i].host != NULL) && (strcmp (request->hostname, stat_nodes[i].host) != 0)) @@ -351,24 +350,20 @@ static pinba_socket_t *pinba_socket_open (const char *node, /* {{{ */ { pinba_socket_t *s; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; - struct addrinfo ai_hints = { 0 }; int status; - ai_hints.ai_flags = AI_PASSIVE; - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; - ai_hints.ai_addr = NULL; - ai_hints.ai_canonname = NULL; - ai_hints.ai_next = NULL; - if (node == NULL) node = PINBA_DEFAULT_NODE; if (service == NULL) service = PINBA_DEFAULT_SERVICE; - ai_list = NULL; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_PASSIVE, + .ai_socktype = SOCK_DGRAM + }; + status = getaddrinfo (node, service, &ai_hints, &ai_list); if (status != 0) @@ -387,7 +382,7 @@ static pinba_socket_t *pinba_socket_open (const char *node, /* {{{ */ return (NULL); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { status = pb_add_socket (s, ai_ptr); if (status != 0) @@ -408,12 +403,10 @@ static pinba_socket_t *pinba_socket_open (const char *node, /* {{{ */ static void pinba_socket_free (pinba_socket_t *socket) /* {{{ */ { - nfds_t i; - if (!socket) return; - for (i = 0; i < socket->fd_num; i++) + for (nfds_t i = 0; i < socket->fd_num; i++) { if (socket->fd[i].fd < 0) continue; @@ -504,7 +497,6 @@ static int receive_loop (void) /* {{{ */ while (!collector_thread_do_shutdown) { int status; - nfds_t i; if (s->fd_num < 1) break; @@ -527,7 +519,7 @@ static int receive_loop (void) /* {{{ */ return (-1); } - for (i = 0; i < s->fd_num; i++) + for (nfds_t i = 0; i < s->fd_num; i++) { if (s->fd[i].revents & (POLLERR | POLLHUP | POLLNVAL)) { @@ -567,13 +559,12 @@ static int pinba_config_view (const oconfig_item_t *ci) /* {{{ */ char *server = NULL; char *script = NULL; int status; - int i; status = cf_util_get_string (ci, &name); if (status != 0) return (status); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -606,13 +597,11 @@ static int pinba_config_view (const oconfig_item_t *ci) /* {{{ */ static int plugin_config (oconfig_item_t *ci) /* {{{ */ { - int i; - /* The lock should not be necessary in the config callback, but let's be * sure.. */ pthread_mutex_lock (&stat_nodes_lock); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/pinba.proto b/src/pinba.proto index 5fd5439a..22e61c6a 100644 --- a/src/pinba.proto +++ b/src/pinba.proto @@ -1,3 +1,5 @@ +syntax = "proto2"; + package Pinba; option optimize_for = SPEED; diff --git a/src/ping.c b/src/ping.c index e16ba077..52db2c71 100644 --- a/src/ping.c +++ b/src/ping.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -35,6 +36,10 @@ # include /* NI_MAXHOST */ #endif +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + #include #ifndef NI_MAXHOST @@ -151,11 +156,10 @@ static void time_calc (struct timespec *ts_dest, /* {{{ */ static int ping_dispatch_all (pingobj_t *pingobj) /* {{{ */ { - pingobj_iter_t *iter; hostlist_t *hl; int status; - for (iter = ping_iterator_get (pingobj); + for (pingobj_iter_t *iter = ping_iterator_get (pingobj); iter != NULL; iter = ping_iterator_next (iter)) { /* {{{ */ @@ -250,7 +254,6 @@ static void *ping_thread (void *arg) /* {{{ */ struct timespec ts_wait; struct timespec ts_int; - hostlist_t *hl; int count; c_complain_t complaint = C_COMPLAIN_INIT_STATIC; @@ -286,7 +289,7 @@ static void *ping_thread (void *arg) /* {{{ */ /* Add all the hosts to the ping object. */ count = 0; - for (hl = hostlist_head; hl != NULL; hl = hl->next) + for (hostlist_t *hl = hostlist_head; hl != NULL; hl = hl->next) { int tmp_status; tmp_status = ping_host_add (pingobj, hl->host); @@ -384,7 +387,7 @@ static int start_thread (void) /* {{{ */ if (ping_thread_loop != 0) { pthread_mutex_unlock (&ping_lock); - return (-1); + return (0); } ping_thread_loop = 1; @@ -449,10 +452,21 @@ static int ping_init (void) /* {{{ */ "Will use a timeout of %gs.", ping_timeout); } - if (start_thread () != 0) - return (-1); +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_NET_RAW) + if (check_capability (CAP_NET_RAW) != 0) + { + if (getuid () == 0) + WARNING ("ping plugin: Running collectd as root, but the CAP_NET_RAW " + "capability is missing. The plugin's read function will probably " + "fail. Is your init system dropping capabilities?"); + else + WARNING ("ping plugin: collectd doesn't have the CAP_NET_RAW capability. " + "If you don't want to run collectd as root, try running \"setcap " + "cap_net_raw=ep\" on the collectd binary."); + } +#endif - return (0); + return (start_thread ()); } /* }}} int ping_init */ static int config_set_string (const char *name, /* {{{ */ @@ -549,8 +563,6 @@ static int ping_config (const char *key, const char *value) /* {{{ */ /* Max IP packet size - (IPv6 + ICMP) = 65535 - (40 + 8) = 65487 */ if (size <= 65487) { - size_t i; - sfree (ping_data); ping_data = malloc (size + 1); if (ping_data == NULL) @@ -566,7 +578,7 @@ static int ping_config (const char *key, const char *value) /* {{{ */ * Optimally we would follow the ping(1) behaviour, but we * cannot use byte 00 or start data payload at exactly same * location, due to oping library limitations. */ - for (i = 0; i < size; i++) /* {{{ */ + for (size_t i = 0; i < size; i++) /* {{{ */ { /* This restricts data pattern to be only composed of easily * printable characters, and not NUL character. */ @@ -622,15 +634,13 @@ static void submit (const char *host, const char *type, /* {{{ */ static int ping_read (void) /* {{{ */ { - hostlist_t *hl; - if (ping_thread_error != 0) { ERROR ("ping plugin: The ping thread had a problem. Restarting it."); stop_thread (); - for (hl = hostlist_head; hl != NULL; hl = hl->next) + for (hostlist_t *hl = hostlist_head; hl != NULL; hl = hl->next) { hl->pkg_sent = 0; hl->pkg_recv = 0; @@ -643,7 +653,7 @@ static int ping_read (void) /* {{{ */ return (-1); } /* if (ping_thread_error != 0) */ - for (hl = hostlist_head; hl != NULL; hl = hl->next) /* {{{ */ + for (hostlist_t *hl = hostlist_head; hl != NULL; hl = hl->next) /* {{{ */ { uint32_t pkg_sent; uint32_t pkg_recv; diff --git a/src/postgresql.c b/src/postgresql.c index 65766a9f..7e69877c 100644 --- a/src/postgresql.c +++ b/src/postgresql.c @@ -31,6 +31,7 @@ */ #include "collectd.h" + #include "common.h" #include "configfile.h" @@ -276,8 +277,6 @@ static c_psql_database_t *c_psql_database_new (const char *name) static void c_psql_database_delete (void *data) { - size_t i; - c_psql_database_t *db = data; --db->ref_cnt; @@ -295,7 +294,7 @@ static void c_psql_database_delete (void *data) db->conn = NULL; if (db->q_prep_areas) - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) udb_query_delete_preparation_area (db->q_prep_areas[i]); free (db->q_prep_areas); @@ -427,14 +426,13 @@ static PGresult *c_psql_exec_query_params (c_psql_database_t *db, { const char *params[db->max_params_num]; char interval[64]; - int i; if ((data == NULL) || (data->params_num == 0)) return (c_psql_exec_query_noparams (db, q)); assert (db->max_params_num >= data->params_num); - for (i = 0; i < data->params_num; ++i) { + for (int i = 0; i < data->params_num; ++i) { switch (data->params[i]) { case C_PSQL_PARAM_HOST: params[i] = C_PSQL_IS_UNIX_DOMAIN_SOCKET (db->host) @@ -483,7 +481,6 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, int rows_num; int status; - int row, col; /* The user data may hold parameter information, but may be NULL. */ data = udb_query_get_user_data (q); @@ -552,7 +549,7 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, BAIL_OUT (-1); } - for (col = 0; col < column_num; ++col) { + for (int col = 0; col < column_num; ++col) { /* Pointers returned by `PQfname' are freed by `PQclear' via * `BAIL_OUT'. */ column_names[col] = PQfname (res, col); @@ -577,7 +574,8 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, BAIL_OUT (-1); } - for (row = 0; row < rows_num; ++row) { + for (int row = 0; row < rows_num; ++row) { + int col; for (col = 0; col < column_num; ++col) { /* Pointers returned by `PQgetvalue' are freed by `PQclear' via * `BAIL_OUT'. */ @@ -611,7 +609,6 @@ static int c_psql_read (user_data_t *ud) c_psql_database_t *db; int success = 0; - size_t i; if ((ud == NULL) || (ud->data == NULL)) { log_err ("c_psql_read: Invalid user data."); @@ -631,7 +628,7 @@ static int c_psql_read (user_data_t *ud) return -1; } - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) { udb_query_preparation_area_t *prep_area; udb_query_t *q; @@ -659,12 +656,11 @@ static char *values_name_to_sqlarray (const data_set_t *ds, { char *str_ptr; size_t str_len; - size_t i; str_ptr = string; str_len = string_len; - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { int status = ssnprintf (str_ptr, str_len, ",'%s'", ds->ds[i].name); if (status < 1) @@ -697,12 +693,11 @@ static char *values_type_to_sqlarray (const data_set_t *ds, { char *str_ptr; size_t str_len; - size_t i; str_ptr = string; str_len = string_len; - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { int status; if (store_rates) @@ -745,12 +740,11 @@ static char *values_to_sqlarray (const data_set_t *ds, const value_list_t *vl, size_t str_len; gauge_t *rates = NULL; - size_t i; str_ptr = string; str_len = string_len; - for (i = 0; i < vl->values_len; ++i) { + for (size_t i = 0; i < vl->values_len; ++i) { int status = 0; if ((ds->ds[i].type != DS_TYPE_GAUGE) @@ -830,7 +824,6 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, const char *params[9]; int success = 0; - size_t i; if ((ud == NULL) || (ud->data == NULL)) { log_err ("c_psql_write: Invalid user data."); @@ -879,7 +872,7 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, && (db->next_commit == 0)) c_psql_begin (db); - for (i = 0; i < db->writers_num; ++i) { + for (size_t i = 0; i < db->writers_num; ++i) { c_psql_writer_t *writer; PGresult *res; @@ -967,14 +960,13 @@ static int c_psql_flush (cdtime_t timeout, { c_psql_database_t **dbs = databases; size_t dbs_num = databases_num; - size_t i; if ((ud != NULL) && (ud->data != NULL)) { dbs = (void *)&ud->data; dbs_num = 1; } - for (i = 0; i < dbs_num; ++i) { + for (size_t i = 0; i < dbs_num; ++i) { c_psql_database_t *db = dbs[i]; /* don't commit if the timeout is larger than the regular commit @@ -988,13 +980,11 @@ static int c_psql_flush (cdtime_t timeout, static int c_psql_shutdown (void) { - size_t i = 0; - _Bool had_flush = 0; plugin_unregister_read_group ("postgresql"); - for (i = 0; i < databases_num; ++i) { + for (size_t i = 0; i < databases_num; ++i) { c_psql_database_t *db = databases[i]; if (db->writers_num > 0) { @@ -1139,7 +1129,6 @@ static int c_psql_config_writer (oconfig_item_t *ci) c_psql_writer_t *tmp; int status = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -1162,7 +1151,7 @@ static int c_psql_config_writer (oconfig_item_t *ci) writer->statement = NULL; writer->store_rates = 1; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (strcasecmp ("Statement", c->key) == 0) @@ -1192,8 +1181,6 @@ static int c_psql_config_database (oconfig_item_t *ci) static _Bool have_flush = 0; - int i; - if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { log_err (" expects a single string argument."); @@ -1204,7 +1191,7 @@ static int c_psql_config_database (oconfig_item_t *ci) if (db == NULL) return -1; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Host")) @@ -1241,7 +1228,7 @@ static int c_psql_config_database (oconfig_item_t *ci) /* If no `Query' options were given, add the default queries.. */ if ((db->queries_num == 0) && (db->writers_num == 0)){ - for (i = 0; i < def_queries_num; i++) + for (int i = 0; i < def_queries_num; i++) udb_query_pick_from_list_by_name (def_queries[i], queries, queries_num, &db->queries, &db->queries_num); @@ -1258,7 +1245,7 @@ static int c_psql_config_database (oconfig_item_t *ci) } } - for (i = 0; (size_t)i < db->queries_num; ++i) { + for (int i = 0; (size_t)i < db->queries_num; ++i) { c_psql_user_data_t *data; data = udb_query_get_user_data (db->queries[i]); if ((data != NULL) && (data->params_num > db->max_params_num)) @@ -1311,8 +1298,6 @@ static int c_psql_config (oconfig_item_t *ci) { static int have_def_config = 0; - int i; - if (0 == have_def_config) { oconfig_item_t *c; @@ -1329,7 +1314,7 @@ static int c_psql_config (oconfig_item_t *ci) "any queries - please check your installation."); } - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Query")) diff --git a/src/powerdns.c b/src/powerdns.c index 55f13fef..e215a8c3 100644 --- a/src/powerdns.c +++ b/src/powerdns.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -630,8 +631,6 @@ static int powerdns_read_server (list_item_t *item) /* {{{ */ saveptr = NULL; while ((key = strtok_r (dummy, ",", &saveptr)) != NULL) { - int i; - dummy = NULL; value = strchr (key, '='); @@ -645,6 +644,7 @@ static int powerdns_read_server (list_item_t *item) /* {{{ */ continue; /* Check if this item was requested. */ + int i; for (i = 0; i < fields_num; i++) if (strcasecmp (key, fields[i]) == 0) break; @@ -780,7 +780,6 @@ static int powerdns_read_recursor (list_item_t *item) /* {{{ */ static int powerdns_config_add_collect (list_item_t *li, /* {{{ */ oconfig_item_t *ci) { - int i; char **temp; if (ci->values_num < 1) @@ -790,7 +789,7 @@ static int powerdns_config_add_collect (list_item_t *li, /* {{{ */ return (-1); } - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING ("powerdns plugin: Only string arguments are allowed to " @@ -807,7 +806,7 @@ static int powerdns_config_add_collect (list_item_t *li, /* {{{ */ } li->fields = temp; - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { li->fields[li->fields_num] = strdup (ci->values[i].value.string); if (li->fields[li->fields_num] == NULL) @@ -830,7 +829,6 @@ static int powerdns_config_add_server (oconfig_item_t *ci) /* {{{ */ list_item_t *item; int status; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -879,7 +877,7 @@ static int powerdns_config_add_server (oconfig_item_t *ci) /* {{{ */ } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -939,8 +937,6 @@ static int powerdns_config_add_server (oconfig_item_t *ci) /* {{{ */ static int powerdns_config (oconfig_item_t *ci) /* {{{ */ { - int i; - DEBUG ("powerdns plugin: powerdns_config (ci = %p);", (void *) ci); if (list == NULL) @@ -954,7 +950,7 @@ static int powerdns_config (oconfig_item_t *ci) /* {{{ */ } } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -987,9 +983,7 @@ static int powerdns_config (oconfig_item_t *ci) /* {{{ */ static int powerdns_read (void) { - llentry_t *e; - - for (e = llist_head (list); e != NULL; e = e->next) + for (llentry_t *e = llist_head (list); e != NULL; e = e->next) { list_item_t *item = e->value; item->func (item); @@ -1000,12 +994,10 @@ static int powerdns_read (void) static int powerdns_shutdown (void) { - llentry_t *e; - if (list == NULL) return (0); - for (e = llist_head (list); e != NULL; e = e->next) + for (llentry_t *e = llist_head (list); e != NULL; e = e->next) { list_item_t *item = (list_item_t *) e->value; e->value = NULL; diff --git a/src/processes.c b/src/processes.c index f029a6c2..d34fe40f 100644 --- a/src/processes.c +++ b/src/processes.c @@ -35,6 +35,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -390,13 +391,12 @@ static void ps_update_counter (_Bool init, derive_t *group_counter, /* add process entry to 'instances' of process 'name' (or refresh it) */ static void ps_list_add (const char *name, const char *cmdline, procstat_entry_t *entry) { - procstat_t *ps; procstat_entry_t *pse; if (entry->id == 0) return; - for (ps = list_head_g; ps != NULL; ps = ps->next) + for (procstat_t *ps = list_head_g; ps != NULL; ps = ps->next) { _Bool want_init; @@ -482,11 +482,10 @@ static void ps_list_add (const char *name, const char *cmdline, procstat_entry_t /* remove old entries from instances of processes in list_head_g */ static void ps_list_reset (void) { - procstat_t *ps; procstat_entry_t *pse; procstat_entry_t *pse_prev; - for (ps = list_head_g; ps != NULL; ps = ps->next) + for (procstat_t *ps = list_head_g; ps != NULL; ps = ps->next) { ps->num_proc = 0; ps->num_lwp = 0; @@ -538,15 +537,13 @@ static void ps_list_reset (void) /* put all pre-defined 'Process' names from config to list_head_g tree */ static int ps_config (oconfig_item_t *ci) { - int i; - #if KERNEL_LINUX const size_t max_procname_len = 15; #elif KERNEL_SOLARIS || KERNEL_FREEBSD const size_t max_procname_len = MAXCOMLEN -1; #endif - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (strcasecmp (c->key, "Process") == 0) @@ -1467,13 +1464,12 @@ static int ps_read_process(long pid, procstat_t *ps, char *state) static int read_fork_rate (void) { extern kstat_ctl_t *kc; - kstat_t *ksp_chain = NULL; derive_t result = 0; if (kc == NULL) return (-1); - for (ksp_chain = kc->kc_chain; + for (kstat_t *ksp_chain = kc->kc_chain; ksp_chain != NULL; ksp_chain = ksp_chain->ks_next) { @@ -1539,17 +1535,14 @@ static int ps_read (void) #if HAVE_THREAD_INFO kern_return_t status; - int pset; processor_set_t port_pset_priv; - int task; task_array_t task_list; mach_msg_type_number_t task_list_len; int task_pid; char task_name[MAXCOMLEN + 1]; - int thread; thread_act_array_t thread_list; mach_msg_type_number_t thread_list_len; thread_basic_info_data_t thread_data; @@ -1574,7 +1567,7 @@ static int ps_read (void) * Tasks are assigned to sets of processors, so that's where you go to * get a list. */ - for (pset = 0; pset < pset_list_len; pset++) + for (int pset = 0; pset < pset_list_len; pset++) { if ((status = host_processor_set_priv (port_host_self, pset_list[pset], @@ -1595,7 +1588,7 @@ static int ps_read (void) continue; } - for (task = 0; task < task_list_len; task++) + for (int task = 0; task < task_list_len; task++) { ps = NULL; if (mach_get_task_name (task_list[task], @@ -1693,7 +1686,7 @@ static int ps_read (void) continue; /* with next task_list */ } - for (thread = 0; thread < thread_list_len; thread++) + for (int thread = 0; thread < thread_list_len; thread++) { thread_data_len = THREAD_BASIC_INFO_COUNT; status = thread_info (thread_list[thread], @@ -1824,8 +1817,6 @@ static int ps_read (void) procstat_entry_t pse; char state; - procstat_t *ps_ptr; - running = sleeping = zombies = stopped = paging = blocked = 0; ps_list_reset (); @@ -1906,7 +1897,7 @@ static int ps_read (void) ps_submit_state ("paging", paging); ps_submit_state ("blocked", blocked); - for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) + for (procstat_t *ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) ps_submit_proc_list (ps_ptr); read_fork_rate(); @@ -1926,9 +1917,7 @@ static int ps_read (void) struct kinfo_proc *procs; /* array of processes */ struct kinfo_proc *proc_ptr = NULL; int count; /* returns number of processes */ - int i; - procstat_t *ps_ptr; procstat_entry_t pse; ps_list_reset (); @@ -1953,7 +1942,7 @@ static int ps_read (void) } /* Iterate through the processes in kinfo_proc */ - for (i = 0; i < count; i++) + for (int i = 0; i < count; i++) { /* Create only one process list entry per _process_, i.e. * filter out threads (duplicate PID entries). */ @@ -2056,7 +2045,7 @@ static int ps_read (void) ps_submit_state ("idle", idle); ps_submit_state ("wait", wait); - for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) + for (procstat_t *ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) ps_submit_proc_list (ps_ptr); /* #endif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC_FREEBSD */ @@ -2074,9 +2063,7 @@ static int ps_read (void) struct kinfo_proc *procs; /* array of processes */ struct kinfo_proc *proc_ptr = NULL; int count; /* returns number of processes */ - int i; - procstat_t *ps_ptr; procstat_entry_t pse; ps_list_reset (); @@ -2101,7 +2088,7 @@ static int ps_read (void) } /* Iterate through the processes in kinfo_proc */ - for (i = 0; i < count; i++) + for (int i = 0; i < count; i++) { /* Create only one process list entry per _process_, i.e. * filter out threads (duplicate PID entries). */ @@ -2193,7 +2180,7 @@ static int ps_read (void) ps_submit_state ("idle", idle); ps_submit_state ("dead", dead); - for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) + for (procstat_t *ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) ps_submit_proc_list (ps_ptr); /* #endif HAVE_LIBKVM_GETPROCS && HAVE_STRUCT_KINFO_PROC_OPENBSD */ @@ -2209,7 +2196,6 @@ static int ps_read (void) pid_t pindex = 0; int nprocs; - procstat_t *ps; procstat_entry_t pse; ps_list_reset (); @@ -2217,9 +2203,7 @@ static int ps_read (void) /* fdsinfo = */ NULL, sizeof(struct fdsinfo64), &pindex, MAXPROCENTRY)) > 0) { - int i; - - for (i = 0; i < nprocs; i++) + for (int i = 0; i < nprocs; i++) { tid64_t thindex; int nthreads; @@ -2330,7 +2314,7 @@ static int ps_read (void) ps_submit_state ("paging", paging); ps_submit_state ("blocked", blocked); - for (ps = list_head_g; ps != NULL; ps = ps->next) + for (procstat_t *ps = list_head_g; ps != NULL; ps = ps->next) ps_submit_proc_list (ps); /* #endif HAVE_PROCINFO_H */ @@ -2354,7 +2338,6 @@ static int ps_read (void) DIR *proc; int status; - procstat_t *ps_ptr; char state; char cmdline[PRARGSZ]; @@ -2444,7 +2427,7 @@ static int ps_read (void) ps_submit_state ("system", system); ps_submit_state ("orphan", orphan); - for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) + for (procstat_t *ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next) ps_submit_proc_list (ps_ptr); read_fork_rate(); diff --git a/src/protocols.c b/src/protocols.c index 4d2b2ead..208da8b2 100644 --- a/src/protocols.c +++ b/src/protocols.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" diff --git a/src/pyconfig.c b/src/pyconfig.c index 32b31cc5..83748b4f 100644 --- a/src/pyconfig.c +++ b/src/pyconfig.c @@ -28,6 +28,7 @@ #include #include "collectd.h" + #include "common.h" #include "cpython.h" diff --git a/src/python.c b/src/python.c index 3a282918..24046de4 100644 --- a/src/python.c +++ b/src/python.c @@ -30,6 +30,7 @@ #include #include "collectd.h" + #include "common.h" #include "cpython.h" @@ -218,7 +219,9 @@ static char reg_shutdown_doc[] = "register_shutdown(callback[, data][, name]) -> " data if it was supplied."; -static int do_interactive = 0; +static pthread_t main_thread; +static PyOS_sighandler_t python_sigint_handler; +static _Bool do_interactive = 0; /* This is our global thread state. Python saves some stuff in thread-local * storage. So if we allow the interpreter to run in the background @@ -270,7 +273,7 @@ static void cpy_build_name(char *buf, size_t size, PyObject *callback, const cha } void cpy_log_exception(const char *context) { - int l = 0, i; + int l = 0; const char *typename = NULL, *message = NULL; PyObject *type, *value, *traceback, *tn, *m, *list; @@ -303,7 +306,7 @@ void cpy_log_exception(const char *context) { if (list) l = PyObject_Length(list); - for (i = 0; i < l; ++i) { + for (int i = 0; i < l; ++i) { PyObject *line; char const *msg; char *cpy; @@ -352,7 +355,6 @@ static int cpy_read_callback(user_data_t *data) { } static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_list, user_data_t *data) { - size_t i; cpy_callback_t *c = data->data; PyObject *ret, *list, *temp, *dict = NULL; Values *v; @@ -363,7 +365,7 @@ static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_li cpy_log_exception("write callback"); CPY_RETURN_FROM_THREADS 0; } - for (i = 0; i < value_list->values_len; ++i) { + for (size_t i = 0; i < value_list->values_len; ++i) { if (ds->ds[i].type == DS_TYPE_COUNTER) { PyList_SetItem(list, i, PyLong_FromUnsignedLongLong(value_list->values[i].counter)); } else if (ds->ds[i].type == DS_TYPE_GAUGE) { @@ -392,7 +394,7 @@ static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_li meta_data_t *meta = value_list->meta; num = meta_data_toc(meta, &table); - for (i = 0; i < num; ++i) { + for (size_t i = 0; i < num; ++i) { int type; char *string; int64_t si; @@ -571,7 +573,6 @@ static PyObject *float_or_none(float number) { } static PyObject *cpy_get_dataset(PyObject *self, PyObject *args) { - size_t i; char *name; const data_set_t *ds; PyObject *list, *tuple; @@ -584,7 +585,7 @@ static PyObject *cpy_get_dataset(PyObject *self, PyObject *args) { return NULL; } list = PyList_New(ds->ds_num); /* New reference. */ - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { tuple = PyTuple_New(4); PyTuple_SET_ITEM(tuple, 0, cpy_string_to_unicode_or_bytes(ds->ds[i].name)); PyTuple_SET_ITEM(tuple, 1, cpy_string_to_unicode_or_bytes(DS_TYPE_TO_STRING(ds->ds[i].type))); @@ -893,14 +894,13 @@ static PyMethodDef cpy_methods[] = { }; static int cpy_shutdown(void) { - cpy_callback_t *c; PyObject *ret; /* This can happen if the module was loaded but not configured. */ if (state != NULL) PyEval_RestoreThread(state); - for (c = cpy_shutdown_callbacks; c; c = c->next) { + for (cpy_callback_t *c = cpy_shutdown_callbacks; c; c = c->next) { ret = PyObject_CallFunctionObjArgs(c->callback, c->data, (void *) 0); /* New reference. */ if (ret == NULL) cpy_log_exception("shutdown callback"); @@ -912,13 +912,8 @@ static int cpy_shutdown(void) { return 0; } -static void cpy_int_handler(int sig) { - return; -} - static void *cpy_interactive(void *data) { - sigset_t sigset; - struct sigaction old; + PyOS_sighandler_t cur_sig; /* Signal handler in a plugin? Bad stuff, but the best way to * handle it I guess. In an interactive session people will @@ -928,47 +923,40 @@ static void *cpy_interactive(void *data) { * mess. Chances are, this isn't what the user wanted to do. * * So this is the plan: - * 1. Block SIGINT in the main thread. - * 2. Install our own signal handler that does nothing. - * 3. Unblock SIGINT in the interactive thread. + * 1. Restore Python's own signal handler + * 2. Tell Python we just forked so it will accept this thread + * as the main one. No version of Python will ever handle + * interrupts anywhere but in the main thread. + * 3. After the interactive loop is done, restore collectd's + * SIGINT handler. + * 4. Raise SIGINT for a clean shutdown. The signal is sent to + * the main thread to ensure it wakes up the main interval + * sleep so that collectd shuts down immediately not in 10 + * seconds. * * This will make sure that SIGINT won't kill collectd but - * still interrupt syscalls like sleep and pause. - * It does not raise a KeyboardInterrupt exception because so - * far nobody managed to figure out how to do that. */ - struct sigaction sig_int_action = { - .sa_handler = cpy_int_handler - }; - sigaction (SIGINT, &sig_int_action, &old); - - sigemptyset(&sigset); - sigaddset(&sigset, SIGINT); - pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); + * still interrupt syscalls like sleep and pause. */ + PyEval_AcquireThread(state); if (PyImport_ImportModule("readline") == NULL) { /* This interactive session will suck. */ cpy_log_exception("interactive session init"); - } + } + cur_sig = PyOS_setsig(SIGINT, python_sigint_handler); + /* We totally forked just now. Everyone saw that, right? */ + PyOS_AfterFork(); PyRun_InteractiveLoop(stdin, ""); + PyOS_setsig(SIGINT, cur_sig); PyErr_Print(); PyEval_ReleaseThread(state); NOTICE("python: Interactive interpreter exited, stopping collectd ..."); - /* Restore the original collectd SIGINT handler and raise SIGINT. - * The main thread still has SIGINT blocked and there's nothing we - * can do about that so this thread will handle it. But that's not - * important, except that it won't interrupt the main loop and so - * it might take a few seconds before collectd really shuts down. */ - sigaction (SIGINT, &old, NULL); - raise(SIGINT); - pause(); + pthread_kill(main_thread, SIGINT); return NULL; } static int cpy_init(void) { - cpy_callback_t *c; PyObject *ret; static pthread_t thread; - sigset_t sigset; if (!Py_IsInitialized()) { WARNING("python: Plugin loaded but not configured."); @@ -977,17 +965,15 @@ static int cpy_init(void) { } PyEval_InitThreads(); /* Now it's finally OK to use python threads. */ - for (c = cpy_init_callbacks; c; c = c->next) { + for (cpy_callback_t *c = cpy_init_callbacks; c; c = c->next) { ret = PyObject_CallFunctionObjArgs(c->callback, c->data, (void *) 0); /* New reference. */ if (ret == NULL) cpy_log_exception("init callback"); else Py_DECREF(ret); } - sigemptyset(&sigset); - sigaddset(&sigset, SIGINT); - pthread_sigmask(SIG_BLOCK, &sigset, NULL); state = PyEval_SaveThread(); + main_thread = pthread_self(); if (do_interactive) { if (plugin_thread_create(&thread, NULL, cpy_interactive, NULL)) { ERROR("python: Error creating thread for interactive interpreter."); @@ -998,14 +984,13 @@ static int cpy_init(void) { } static PyObject *cpy_oconfig_to_pyconfig(oconfig_item_t *ci, PyObject *parent) { - int i; PyObject *item, *values, *children, *tmp; if (parent == NULL) parent = Py_None; values = PyTuple_New(ci->values_num); /* New reference. */ - for (i = 0; i < ci->values_num; ++i) { + for (int i = 0; i < ci->values_num; ++i) { if (ci->values[i].type == OCONFIG_TYPE_STRING) { PyTuple_SET_ITEM(values, i, cpy_string_to_unicode_or_bytes(ci->values[i].value.string)); } else if (ci->values[i].type == OCONFIG_TYPE_NUMBER) { @@ -1020,7 +1005,7 @@ static PyObject *cpy_oconfig_to_pyconfig(oconfig_item_t *ci, PyObject *parent) { if (item == NULL) return NULL; children = PyTuple_New(ci->children_num); /* New reference. */ - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { PyTuple_SET_ITEM(children, i, cpy_oconfig_to_pyconfig(ci->children + i, item)); } tmp = ((Config *) item)->children; @@ -1044,6 +1029,7 @@ PyMODINIT_FUNC PyInit_collectd(void) { #endif static int cpy_init_python(void) { + PyOS_sighandler_t cur_sig; PyObject *sys; PyObject *module; @@ -1055,7 +1041,10 @@ static int cpy_init_python(void) { char *argv = ""; #endif + /* Chances are the current signal handler is already SIG_DFL, but let's make sure. */ + cur_sig = PyOS_setsig(SIGINT, SIG_DFL); Py_Initialize(); + python_sigint_handler = PyOS_setsig(SIGINT, cur_sig); PyType_Ready(&ConfigType); PyType_Ready(&PluginDataType); @@ -1107,8 +1096,8 @@ static int cpy_init_python(void) { } static int cpy_config(oconfig_item_t *ci) { - int i; PyObject *tb; + int status = 0; /* Ok in theory we shouldn't do initialization at this point * but we have to. In order to give python scripts a chance @@ -1119,27 +1108,40 @@ static int cpy_config(oconfig_item_t *ci) { if (!Py_IsInitialized() && cpy_init_python()) return 1; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *item = ci->children + i; if (strcasecmp(item->key, "Interactive") == 0) { - if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_BOOLEAN) + if (cf_util_get_boolean(item, &do_interactive) != 0) { + status = 1; continue; - do_interactive = item->values[0].value.boolean; + } } else if (strcasecmp(item->key, "Encoding") == 0) { - if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_STRING) + char *encoding = NULL; + if (cf_util_get_string(item, &encoding) != 0) { + status = 1; continue; + } #ifdef IS_PY3K - NOTICE("python: \"Encoding\" was used in the config file but Python3 was used, which does not support changing encodings. Ignoring this."); + ERROR("python: \"Encoding\" was used in the config file but Python3 was used, which does not support changing encodings"); + status = 1; + sfree(encoding); + continue; #else /* Why is this even necessary? And undocumented? */ - if (PyUnicode_SetDefaultEncoding(item->values[0].value.string)) + if (PyUnicode_SetDefaultEncoding(encoding)) { cpy_log_exception("setting default encoding"); + status = 1; + } #endif + sfree(encoding); } else if (strcasecmp(item->key, "LogTraces") == 0) { - if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_BOOLEAN) + _Bool log_traces; + if (cf_util_get_boolean(item, &log_traces) != 0) { + status = 1; continue; - if (!item->values[0].value.boolean) { + } + if (!log_traces) { Py_XDECREF(cpy_format_exception); cpy_format_exception = NULL; continue; @@ -1149,30 +1151,37 @@ static int cpy_config(oconfig_item_t *ci) { tb = PyImport_ImportModule("traceback"); /* New reference. */ if (tb == NULL) { cpy_log_exception("python initialization"); + status = 1; continue; } cpy_format_exception = PyObject_GetAttrString(tb, "format_exception"); /* New reference. */ Py_DECREF(tb); - if (cpy_format_exception == NULL) + if (cpy_format_exception == NULL) { cpy_log_exception("python initialization"); + status = 1; + } } else if (strcasecmp(item->key, "ModulePath") == 0) { char *dir = NULL; PyObject *dir_object; - if (cf_util_get_string(item, &dir) != 0) + if (cf_util_get_string(item, &dir) != 0) { + status = 1; continue; + } dir_object = cpy_string_to_unicode_or_bytes(dir); /* New reference. */ if (dir_object == NULL) { ERROR("python plugin: Unable to convert \"%s\" to " "a python object.", dir); free(dir); cpy_log_exception("python initialization"); + status = 1; continue; } if (PyList_Insert(sys_path, 0, dir_object) != 0) { ERROR("python plugin: Unable to prepend \"%s\" to " "python module path.", dir); cpy_log_exception("python initialization"); + status = 1; } Py_DECREF(dir_object); free(dir); @@ -1180,12 +1189,15 @@ static int cpy_config(oconfig_item_t *ci) { char *module_name = NULL; PyObject *module; - if (cf_util_get_string(item, &module_name) != 0) + if (cf_util_get_string(item, &module_name) != 0) { + status = 1; continue; + } module = PyImport_ImportModule(module_name); /* New reference. */ if (module == NULL) { ERROR("python plugin: Error importing module \"%s\".", module_name); cpy_log_exception("importing module"); + status = 1; } free(module_name); Py_XDECREF(module); @@ -1194,8 +1206,10 @@ static int cpy_config(oconfig_item_t *ci) { cpy_callback_t *c; PyObject *ret; - if (cf_util_get_string(item, &name) != 0) + if (cf_util_get_string(item, &name) != 0) { + status = 1; continue; + } for (c = cpy_config_callbacks; c; c = c->next) { if (strcasecmp(c->name + 7, name) == 0) break; @@ -1214,15 +1228,17 @@ static int cpy_config(oconfig_item_t *ci) { else ret = PyObject_CallFunction(c->callback, "NO", cpy_oconfig_to_pyconfig(item, NULL), c->data); /* New reference. */ - if (ret == NULL) + if (ret == NULL) { cpy_log_exception("loading module"); - else + status = 1; + } else Py_DECREF(ret); } else { - WARNING("python plugin: Ignoring unknown config key \"%s\".", item->key); + ERROR("python plugin: Unknown config key \"%s\".", item->key); + status = 1; } } - return 0; + return (status); } void module_register(void) { diff --git a/src/pyvalues.c b/src/pyvalues.c index 0ba04360..a7cb7923 100644 --- a/src/pyvalues.c +++ b/src/pyvalues.c @@ -28,6 +28,7 @@ #include #include "collectd.h" + #include "common.h" #include "cpython.h" @@ -415,7 +416,7 @@ static int Values_init(PyObject *s, PyObject *args, PyObject *kwds) { } static meta_data_t *cpy_build_meta(PyObject *meta) { - int i, s; + int s; meta_data_t *m = NULL; PyObject *l; @@ -434,7 +435,7 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { } m = meta_data_create(); - for (i = 0; i < s; ++i) { + for (int i = 0; i < s; ++i) { const char *string, *keystring; PyObject *key, *value, *item, *tmp; @@ -504,7 +505,7 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { int ret; const data_set_t *ds; - size_t size, i; + size_t size; value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; @@ -548,22 +549,25 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { return NULL; } value = calloc(size, sizeof(*value)); - for (i = 0; i < size; ++i) { + for (size_t i = 0; i < size; ++i) { PyObject *item, *num; item = PySequence_Fast_GET_ITEM(values, (int) i); /* Borrowed reference. */ - if (ds->ds->type == DS_TYPE_COUNTER) { + switch (ds->ds[i].type) { + case DS_TYPE_COUNTER: num = PyNumber_Long(item); /* New reference. */ if (num != NULL) { value[i].counter = PyLong_AsUnsignedLongLong(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_GAUGE) { + break; + case DS_TYPE_GAUGE: num = PyNumber_Float(item); /* New reference. */ if (num != NULL) { value[i].gauge = PyFloat_AsDouble(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_DERIVE) { + break; + case DS_TYPE_DERIVE: /* This might overflow without raising an exception. * Not much we can do about it */ num = PyNumber_Long(item); /* New reference. */ @@ -571,7 +575,8 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { value[i].derive = PyLong_AsLongLong(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_ABSOLUTE) { + break; + case DS_TYPE_ABSOLUTE: /* This might overflow without raising an exception. * Not much we can do about it */ num = PyNumber_Long(item); /* New reference. */ @@ -579,9 +584,10 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { value[i].absolute = PyLong_AsUnsignedLongLong(num); Py_XDECREF(num); } - } else { + break; + default: free(value); - PyErr_Format(PyExc_RuntimeError, "unknown data type %d for %s", ds->ds->type, value_list.type); + PyErr_Format(PyExc_RuntimeError, "unknown data type %d for %s", ds->ds[i].type, value_list.type); return NULL; } if (PyErr_Occurred() != NULL) { @@ -613,7 +619,7 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { int ret; const data_set_t *ds; - size_t size, i; + size_t size; value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; @@ -652,22 +658,25 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { return NULL; } value = calloc(size, sizeof(*value)); - for (i = 0; i < size; ++i) { + for (size_t i = 0; i < size; ++i) { PyObject *item, *num; item = PySequence_Fast_GET_ITEM(values, i); /* Borrowed reference. */ - if (ds->ds->type == DS_TYPE_COUNTER) { + switch (ds->ds[i].type) { + case DS_TYPE_COUNTER: num = PyNumber_Long(item); /* New reference. */ if (num != NULL) { value[i].counter = PyLong_AsUnsignedLongLong(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_GAUGE) { + break; + case DS_TYPE_GAUGE: num = PyNumber_Float(item); /* New reference. */ if (num != NULL) { value[i].gauge = PyFloat_AsDouble(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_DERIVE) { + break; + case DS_TYPE_DERIVE: /* This might overflow without raising an exception. * Not much we can do about it */ num = PyNumber_Long(item); /* New reference. */ @@ -675,7 +684,8 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { value[i].derive = PyLong_AsLongLong(num); Py_XDECREF(num); } - } else if (ds->ds->type == DS_TYPE_ABSOLUTE) { + break; + case DS_TYPE_ABSOLUTE: /* This might overflow without raising an exception. * Not much we can do about it */ num = PyNumber_Long(item); /* New reference. */ @@ -683,9 +693,10 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { value[i].absolute = PyLong_AsUnsignedLongLong(num); Py_XDECREF(num); } - } else { + break; + default: free(value); - PyErr_Format(PyExc_RuntimeError, "unknown data type %d for %s", ds->ds->type, value_list.type); + PyErr_Format(PyExc_RuntimeError, "unknown data type %d for %s", ds->ds[i].type, value_list.type); return NULL; } if (PyErr_Occurred() != NULL) { diff --git a/src/redis.c b/src/redis.c index 47d0d707..7395ba06 100644 --- a/src/redis.c +++ b/src/redis.c @@ -21,6 +21,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -125,7 +126,6 @@ static redis_query_t *redis_config_query (oconfig_item_t *ci) /* {{{ */ { redis_query_t *rq; int status; - int i; rq = calloc(1, sizeof(*rq)); if (rq == NULL) { @@ -143,7 +143,7 @@ static redis_query_t *redis_config_query (oconfig_item_t *ci) /* {{{ */ (void)sstrncpy(rq->instance, rq->query, sizeof(rq->instance)); replace_special(rq->instance, sizeof(rq->instance)); - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; if (strcasecmp("Type", option->key) == 0) { @@ -166,7 +166,6 @@ static redis_query_t *redis_config_query (oconfig_item_t *ci) /* {{{ */ static int redis_config_node (oconfig_item_t *ci) /* {{{ */ { redis_query_t *rq; - int i; int status; int timeout; @@ -181,7 +180,7 @@ static int redis_config_node (oconfig_item_t *ci) /* {{{ */ if (status != 0) return (status); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -229,9 +228,7 @@ static int redis_config_node (oconfig_item_t *ci) /* {{{ */ static int redis_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -379,10 +376,7 @@ static int redis_handle_query (redisContext *rh, redis_node_t *rn, redis_query_t static int redis_read (void) /* {{{ */ { - redis_node_t *rn; - redis_query_t *rq; - - for (rn = nodes_head; rn != NULL; rn = rn->next) + for (redis_node_t *rn = nodes_head; rn != NULL; rn = rn->next) { redisContext *rh; redisReply *rr; @@ -441,7 +435,7 @@ static int redis_read (void) /* {{{ */ redis_handle_info (rn->name, rr->str, "total_bytes", "input", "total_net_input_bytes", DS_TYPE_DERIVE); redis_handle_info (rn->name, rr->str, "total_bytes", "output", "total_net_output_bytes", DS_TYPE_DERIVE); - for (rq = rn->queries; rq != NULL; rq = rq->next) + for (redis_query_t *rq = rn->queries; rq != NULL; rq = rq->next) redis_handle_query(rh, rn, rq); redis_fail: diff --git a/src/routeros.c b/src/routeros.c index 7ee30248..a270f484 100644 --- a/src/routeros.c +++ b/src/routeros.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -326,7 +327,6 @@ static int cr_config_router (oconfig_item_t *ci) /* {{{ */ char read_name[128]; user_data_t user_data; int status; - int i; router_data = calloc (1, sizeof (*router_data)); if (router_data == NULL) @@ -338,7 +338,7 @@ static int cr_config_router (oconfig_item_t *ci) /* {{{ */ router_data->password = NULL; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -423,9 +423,7 @@ static int cr_config_router (oconfig_item_t *ci) /* {{{ */ static int cr_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/rrdcached.c b/src/rrdcached.c index 3a6c9851..04254194 100644 --- a/src/rrdcached.c +++ b/src/rrdcached.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_rrdcreate.h" @@ -69,7 +70,6 @@ static int value_list_to_string (char *buffer, int buffer_len, { int offset; int status; - size_t i; time_t t; assert (0 == strcmp (ds->type, vl->type)); @@ -82,7 +82,7 @@ static int value_list_to_string (char *buffer, int buffer_len, return (-1); offset = status; - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if ((ds->ds[i].type != DS_TYPE_COUNTER) && (ds->ds[i].type != DS_TYPE_GAUGE) @@ -217,9 +217,7 @@ static int rc_config_add_timespan (int timespan) static int rc_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t const *child = ci->children + i; const char *key = child->key; @@ -293,7 +291,6 @@ static int rc_read (void) { int status; rrdc_stats_t *head; - rrdc_stats_t *ptr; value_t values[1]; value_list_t vl = VALUE_LIST_INIT; @@ -330,7 +327,7 @@ static int rc_read (void) return (-1); } - for (ptr = head; ptr != NULL; ptr = ptr->next) + for (rrdc_stats_t *ptr = head; ptr != NULL; ptr = ptr->next) { if (ptr->type == RRDC_STATS_TYPE_GAUGE) values[0].gauge = (gauge_t) ptr->value.gauge; diff --git a/src/rrdtool.c b/src/rrdtool.c index 348f2876..094dd42a 100644 --- a/src/rrdtool.c +++ b/src/rrdtool.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_avltree.h" @@ -200,7 +201,6 @@ static int value_list_to_string_multiple (char *buffer, int buffer_len, int offset; int status; time_t tt; - size_t i; memset (buffer, '\0', buffer_len); @@ -210,7 +210,7 @@ static int value_list_to_string_multiple (char *buffer, int buffer_len, return (-1); offset = status; - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if ((ds->ds[i].type != DS_TYPE_COUNTER) && (ds->ds[i].type != DS_TYPE_GAUGE) @@ -331,7 +331,6 @@ static void *rrd_queue_thread (void __attribute__((unused)) *data) char **values; int values_num; int status; - int i; values = NULL; values_num = 0; @@ -412,7 +411,7 @@ static void *rrd_queue_thread (void __attribute__((unused)) *data) pthread_mutex_unlock (&queue_lock); /* We now need the cache lock so the entry isn't updated while - * we make a copy of it's values */ + * we make a copy of its values */ pthread_mutex_lock (&cache_lock); status = c_avl_get (cache, queue_entry->filename, @@ -458,7 +457,7 @@ static void *rrd_queue_thread (void __attribute__((unused)) *data) values_num, (values_num == 1) ? "" : "s", queue_entry->filename); - for (i = 0; i < values_num; i++) + for (int i = 0; i < values_num; i++) { sfree (values[i]); } @@ -556,7 +555,6 @@ static void rrd_cache_flush (cdtime_t timeout) char *key; c_avl_iterator_t *iter; - int i; DEBUG ("rrdtool plugin: Flushing cache, timeout = %.3f", CDTIME_T_TO_DOUBLE (timeout)); @@ -604,7 +602,7 @@ static void rrd_cache_flush (cdtime_t timeout) } /* while (c_avl_iterator_next) */ c_avl_iterator_destroy (iter); - for (i = 0; i < keys_num; i++) + for (int i = 0; i < keys_num; i++) { if (c_avl_remove (cache, keys[i], (void *) &key, (void *) &rc) != 0) { @@ -856,7 +854,6 @@ static int rrd_cache_destroy (void) /* {{{ */ while (c_avl_pick (cache, &key, &value) == 0) { rrd_cache_t *rc; - int i; sfree (key); key = NULL; @@ -867,7 +864,7 @@ static int rrd_cache_destroy (void) /* {{{ */ if (rc->values_num > 0) non_empty++; - for (i = 0; i < rc->values_num; i++) + for (int i = 0; i < rc->values_num; i++) sfree (rc->values[i]); sfree (rc->values); sfree (rc); diff --git a/src/sensors.c b/src/sensors.c index 63a1c8ee..de2a4f7b 100644 --- a/src/sensors.c +++ b/src/sensors.c @@ -34,6 +34,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -215,11 +216,9 @@ static int sensors_snprintf_chip_name (char *buf, size_t buf_size, static int sensors_feature_name_to_type (const char *name) { - int i; - /* Yes, this is slow, but it's only ever done during initialization, so * it's a one time cost.. */ - for (i = 0; i < known_features_num; i++) + for (int i = 0; i < known_features_num; i++) if (strcasecmp (known_features[i].label, name) == 0) return (known_features[i].type); @@ -275,7 +274,6 @@ static int sensors_config (const char *key, const char *value) static void sensors_free_features (void) { - featurelist_t *thisft; featurelist_t *nextft; if (first_feature == NULL) @@ -283,7 +281,7 @@ static void sensors_free_features (void) sensors_cleanup (); - for (thisft = first_feature; thisft != NULL; thisft = nextft) + for (featurelist_t *thisft = first_feature; thisft != NULL; thisft = nextft) { nextft = thisft->next; sfree (thisft); @@ -521,13 +519,11 @@ static void sensors_submit (const char *plugin_instance, static int sensors_read (void) { - featurelist_t *fl; - if (sensors_load_conf () != 0) return (-1); #if SENSORS_API_VERSION < 0x400 - for (fl = first_feature; fl != NULL; fl = fl->next) + for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) { double value; int status; @@ -555,7 +551,7 @@ static int sensors_read (void) /* #endif SENSORS_API_VERSION < 0x400 */ #elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) - for (fl = first_feature; fl != NULL; fl = fl->next) + for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) { double value; int status; diff --git a/src/serial.c b/src/serial.c index 0878d3c9..cf7ad2a1 100644 --- a/src/serial.c +++ b/src/serial.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -73,7 +74,6 @@ static int serial_read (void) char *fields[16]; int numfields; - int i; numfields = strsplit (buffer, fields, STATIC_ARRAY_SIZE (fields)); if (numfields < 6) @@ -90,7 +90,7 @@ static int serial_read (void) continue; fields[0][len - 1] = 0; - for (i = 1; i < numfields; i++) + for (int i = 1; i < numfields; i++) { len = strlen (fields[i]); if (len < 4) diff --git a/src/sigrok.c b/src/sigrok.c index d8c65c08..40064553 100644 --- a/src/sigrok.c +++ b/src/sigrok.c @@ -20,6 +20,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -69,7 +70,6 @@ static int sigrok_log_callback(void*cb_data __attribute__((unused)), static int sigrok_config_device(oconfig_item_t *ci) { struct config_device *cfdev; - int i; if (!(cfdev = calloc(1, sizeof(*cfdev)))) { ERROR("sigrok plugin: calloc failed."); @@ -82,7 +82,7 @@ static int sigrok_config_device(oconfig_item_t *ci) } cfdev->min_dispatch_interval = DEFAULT_MIN_DISPATCH_INTERVAL; - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *item = ci->children + i; if (!strcasecmp(item->key, "driver")) cf_util_get_string(item, &cfdev->driver); @@ -104,9 +104,7 @@ static int sigrok_config_device(oconfig_item_t *ci) static int sigrok_config(oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *item = ci->children + i; if (strcasecmp("LogLevel", item->key) == 0) { int status; @@ -163,13 +161,12 @@ static void sigrok_feed_callback(const struct sr_dev_inst *sdi, { const struct sr_datafeed_analog *analog; struct config_device *cfdev; - GSList *l; value_t value; value_list_t vl = VALUE_LIST_INIT; /* Find this device's configuration. */ cfdev = NULL; - for (l = config_devices; l; l = l->next) { + for (GSList *l = config_devices; l; l = l->next) { cfdev = l->data; if (cfdev->sdi == sdi) { /* Found it. */ diff --git a/src/smart.c b/src/smart.c index 33b9751c..752cb74c 100644 --- a/src/smart.c +++ b/src/smart.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_ignorelist.h" diff --git a/src/snmp.c b/src/snmp.c index 08492558..e0e19732 100644 --- a/src/snmp.c +++ b/src/snmp.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_complain.h" @@ -164,9 +165,8 @@ static int csnmp_oid_to_string (char *buffer, size_t buffer_size, { char oid_str[MAX_OID_LEN][16]; char *oid_str_ptr[MAX_OID_LEN]; - size_t i; - for (i = 0; i < o->oid_len; i++) + for (size_t i = 0; i < o->oid_len; i++) { ssnprintf (oid_str[i], sizeof (oid_str[i]), "%lu", (unsigned long) o->oid[i]); oid_str_ptr[i] = oid_str[i]; @@ -291,15 +291,13 @@ static int csnmp_config_add_data_instance_prefix (data_definition_t *dd, static int csnmp_config_add_data_values (data_definition_t *dd, oconfig_item_t *ci) { - int i; - if (ci->values_num < 1) { WARNING ("snmp plugin: `Values' needs at least one argument."); return (-1); } - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING ("snmp plugin: `Values' needs only string argument."); @@ -313,7 +311,7 @@ static int csnmp_config_add_data_values (data_definition_t *dd, oconfig_item_t * return (-1); dd->values_len = (size_t) ci->values_num; - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { dd->values[i].oid_len = MAX_OID_LEN; @@ -334,12 +332,10 @@ static int csnmp_config_add_data_values (data_definition_t *dd, oconfig_item_t * static int csnmp_config_add_data_blacklist(data_definition_t *dd, oconfig_item_t *ci) { - int i; - if (ci->values_num < 1) return (0); - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { if (ci->values[i].type != OCONFIG_TYPE_STRING) { @@ -351,7 +347,7 @@ static int csnmp_config_add_data_blacklist(data_definition_t *dd, oconfig_item_t dd->ignores_len = 0; dd->ignores = NULL; - for (i = 0; i < ci->values_num; ++i) + for (int i = 0; i < ci->values_num; ++i) { if (strarray_add(&(dd->ignores), &(dd->ignores_len), ci->values[i].value.string) != 0) { @@ -380,7 +376,6 @@ static int csnmp_config_add_data (oconfig_item_t *ci) { data_definition_t *dd; int status = 0; - int i; dd = calloc (1, sizeof (*dd)); if (dd == NULL) @@ -396,7 +391,7 @@ static int csnmp_config_add_data (oconfig_item_t *ci) dd->scale = 1.0; dd->shift = 0.0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -502,7 +497,6 @@ static int csnmp_config_add_host_collect (host_definition_t *host, data_definition_t *data; data_definition_t **data_list; int data_list_len; - int i; if (ci->values_num < 1) { @@ -510,7 +504,7 @@ static int csnmp_config_add_host_collect (host_definition_t *host, return (-1); } - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) if (ci->values[i].type != OCONFIG_TYPE_STRING) { WARNING ("snmp plugin: All arguments to `Collect' must be strings."); @@ -524,7 +518,7 @@ static int csnmp_config_add_host_collect (host_definition_t *host, return (-1); host->data_list = data_list; - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { for (data = data_head; data != NULL; data = data->next) if (strcasecmp (ci->values[i].value.string, data->name) == 0) @@ -637,7 +631,6 @@ static int csnmp_config_add_host (oconfig_item_t *ci) { host_definition_t *hd; int status = 0; - int i; /* Registration stuff. */ char cb_name[DATA_MAX_NAME_LEN]; @@ -659,7 +652,7 @@ static int csnmp_config_add_host (oconfig_item_t *ci) hd->sess_handle = NULL; hd->interval = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; status = 0; @@ -789,11 +782,9 @@ static int csnmp_config_add_host (oconfig_item_t *ci) static int csnmp_config (oconfig_item_t *ci) { - int i; - call_snmp_init_once (); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("Data", child->key) == 0) @@ -1054,14 +1045,13 @@ static int csnmp_strvbcopy_hexstring (char *dst, /* {{{ */ { char *buffer_ptr; size_t buffer_free; - size_t i; dst[0] = 0; buffer_ptr = dst; buffer_free = dst_size; - for (i = 0; i < vb->val_len; i++) + for (size_t i = 0; i < vb->val_len; i++) { int status; @@ -1094,7 +1084,6 @@ static int csnmp_strvbcopy (char *dst, /* {{{ */ { char *src; size_t num_chars; - size_t i; if (vb->type == ASN_OCTET_STR) src = (char *) vb->val.string; @@ -1118,7 +1107,7 @@ static int csnmp_strvbcopy (char *dst, /* {{{ */ if (num_chars > vb->val_len) num_chars = vb->val_len; - for (i = 0; i < num_chars; i++) + for (size_t i = 0; i < num_chars; i++) { /* Check for control characters. */ if ((unsigned char)src[i] < 32) @@ -1143,7 +1132,6 @@ static int csnmp_instance_list_add (csnmp_list_instances_t **head, struct variable_list *vb; oid_t vb_name; int status; - uint32_t i; uint32_t is_matched; /* Set vb on the last variable */ @@ -1178,7 +1166,7 @@ static int csnmp_instance_list_add (csnmp_list_instances_t **head, csnmp_strvbcopy (il->instance, vb, sizeof (il->instance)); is_matched = 0; - for (i = 0; i < dd->ignores_len; i++) + for (uint32_t i = 0; i < dd->ignores_len; i++) { status = fnmatch(dd->ignores[i], il->instance, 0); if (status == 0) @@ -1372,8 +1360,12 @@ static int csnmp_dispatch_table (host_definition_t *host, data_definition_t *dat for (i = 0; i < data->values_len; i++) vl.values[i] = value_table_ptr[i]->value; - /* If we get here `vl.type_instance' and all `vl.values' have been set */ - plugin_dispatch_values (&vl); + /* If we get here `vl.type_instance' and all `vl.values' have been set + * vl.type_instance can be empty, i.e. a blank port description on a + * switch if you're using IF-MIB::ifDescr as Instance. + */ + if (vl.type_instance[0] != '\0') + plugin_dispatch_values (&vl); if (instance_list != NULL) instance_list_ptr = instance_list_ptr->next; diff --git a/src/statsd.c b/src/statsd.c index 1eb8cb94..040181aa 100644 --- a/src/statsd.c +++ b/src/statsd.c @@ -25,6 +25,7 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -500,21 +501,18 @@ static int statsd_network_init (struct pollfd **ret_fds, /* {{{ */ struct pollfd *fds = NULL; size_t fds_num = 0; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai_list = NULL; - struct addrinfo *ai_ptr; + struct addrinfo *ai_list; int status; char const *node = (conf_node != NULL) ? conf_node : STATSD_DEFAULT_NODE; char const *service = (conf_service != NULL) ? conf_service : STATSD_DEFAULT_SERVICE; - ai_hints.ai_flags = AI_PASSIVE; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_DGRAM; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_PASSIVE | AI_ADDRCONFIG, + .ai_socktype = SOCK_DGRAM + }; status = getaddrinfo (node, service, &ai_hints, &ai_list); if (status != 0) @@ -524,7 +522,7 @@ static int statsd_network_init (struct pollfd **ret_fds, /* {{{ */ return (status); } - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { int fd; struct pollfd *tmp; @@ -591,7 +589,6 @@ static void *statsd_network_thread (void *args) /* {{{ */ struct pollfd *fds = NULL; size_t fds_num = 0; int status; - size_t i; status = statsd_network_init (&fds, &fds_num); if (status != 0) @@ -615,7 +612,7 @@ static void *statsd_network_thread (void *args) /* {{{ */ break; } - for (i = 0; i < fds_num; i++) + for (size_t i = 0; i < fds_num; i++) { if ((fds[i].revents & (POLLIN | POLLPRI)) == 0) continue; @@ -626,7 +623,7 @@ static void *statsd_network_thread (void *args) /* {{{ */ } /* while (!network_thread_shutdown) */ /* Clean up */ - for (i = 0; i < fds_num; i++) + for (size_t i = 0; i < fds_num; i++) close (fds[i].fd); sfree (fds); @@ -666,9 +663,7 @@ static int statsd_config_timer_percentile (oconfig_item_t *ci) /* {{{ */ static int statsd_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -781,7 +776,6 @@ static int statsd_metric_submit_unsafe (char const *name, statsd_metric_t *metri values[0].gauge = (gauge_t) metric->value; else if (metric->type == STATSD_TIMER) { - size_t i; _Bool have_events = (metric->updates_num > 0); /* Make sure all timer metrics share the *same* timestamp. */ @@ -821,7 +815,7 @@ static int statsd_metric_submit_unsafe (char const *name, statsd_metric_t *metri plugin_dispatch_values (&vl); } - for (i = 0; i < conf_timer_percentile_num; i++) + for (size_t i = 0; i < conf_timer_percentile_num; i++) { ssnprintf (vl.type_instance, sizeof (vl.type_instance), "%s-percentile-%.0f", name, conf_timer_percentile[i]); @@ -887,7 +881,6 @@ static int statsd_read (void) /* {{{ */ char **to_be_deleted = NULL; size_t to_be_deleted_num = 0; - size_t i; pthread_mutex_lock (&metrics_lock); @@ -922,7 +915,7 @@ static int statsd_read (void) /* {{{ */ } c_avl_iterator_destroy (iter); - for (i = 0; i < to_be_deleted_num; i++) + for (size_t i = 0; i < to_be_deleted_num; i++) { int status; diff --git a/src/swap.c b/src/swap.c index 645dc586..9c63e9bb 100644 --- a/src/swap.c +++ b/src/swap.c @@ -35,6 +35,7 @@ #endif #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -112,9 +113,7 @@ static _Bool values_percentage = 0; static int swap_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp ("ReportBytes", child->key) == 0) @@ -509,7 +508,6 @@ static int swap_read (void) /* {{{ */ char *s_paths; int swap_num; int status; - int i; gauge_t avail = 0; gauge_t total = 0; @@ -542,7 +540,7 @@ static int swap_read (void) /* {{{ */ sfree (s); return (-1); } - for (i = 0; i < swap_num; i++) + for (int i = 0; i < swap_num; i++) s->swt_ent[i].ste_path = s_paths + (i * PATH_MAX); s->swt_n = swap_num; @@ -572,7 +570,7 @@ static int swap_read (void) /* {{{ */ /* less elements returned than requested */ swap_num = status; - for (i = 0; i < swap_num; i++) + for (int i = 0; i < swap_num; i++) { char path[PATH_MAX]; gauge_t this_total; @@ -625,7 +623,6 @@ static int swap_read (void) /* {{{ */ struct swapent *swap_entries; int swap_num; int status; - int i; gauge_t used = 0; gauge_t total = 0; @@ -664,7 +661,7 @@ static int swap_read (void) /* {{{ */ /* TODO: Report per-device stats. The path name is available from * swap_entries[i].se_path */ - for (i = 0; i < swap_num; i++) + for (int i = 0; i < swap_num; i++) { if ((swap_entries[i].se_flags & SWF_ENABLE) == 0) continue; @@ -677,6 +674,7 @@ static int swap_read (void) /* {{{ */ { ERROR ("swap plugin: Total swap space (%g) is less than used swap space (%g).", total, used); + sfree (swap_entries); return (-1); } diff --git a/src/syslog.c b/src/syslog.c index 849f7d1b..73e5e1f3 100644 --- a/src/syslog.c +++ b/src/syslog.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/table.c b/src/table.c index 38d5f03a..ba65f41c 100644 --- a/src/table.c +++ b/src/table.c @@ -29,6 +29,7 @@ */ #include "collectd.h" + #include "common.h" #include "configfile.h" @@ -105,13 +106,11 @@ static void tbl_setup (tbl_t *tbl, char *file) static void tbl_clear (tbl_t *tbl) { - size_t i; - sfree (tbl->file); sfree (tbl->sep); sfree (tbl->instance); - for (i = 0; i < tbl->results_num; ++i) + for (size_t i = 0; i < tbl->results_num; ++i) tbl_result_clear (tbl->results + i); sfree (tbl->results); tbl->results_num = 0; @@ -144,7 +143,6 @@ static int tbl_config_append_array_i (char *name, size_t **var, size_t *len, { size_t *tmp; size_t num; - size_t i; if (1 > ci->values_num) { log_err ("\"%s\" expects at least one argument.", name); @@ -152,7 +150,7 @@ static int tbl_config_append_array_i (char *name, size_t **var, size_t *len, } num = (size_t) ci->values_num; - for (i = 0; i < num; ++i) { + for (size_t i = 0; i < num; ++i) { if (OCONFIG_TYPE_NUMBER != ci->values[i].type) { log_err ("\"%s\" expects numerical arguments only.", name); return 1; @@ -168,7 +166,7 @@ static int tbl_config_append_array_i (char *name, size_t **var, size_t *len, } *var = tmp; - for (i = 0; i < num; ++i) { + for (size_t i = 0; i < num; ++i) { (*var)[*len] = (size_t) ci->values[i].value.number; (*len)++; } @@ -181,7 +179,6 @@ static int tbl_config_result (tbl_t *tbl, oconfig_item_t *ci) tbl_result_t *res; int status = 0; - int i; if (0 != ci->values_num) { log_err (" does not expect any arguments."); @@ -203,7 +200,7 @@ static int tbl_config_result (tbl_t *tbl, oconfig_item_t *ci) res = tbl->results + tbl->results_num - 1; tbl_result_setup (res); - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Type")) @@ -246,7 +243,6 @@ static int tbl_config_table (oconfig_item_t *ci) tbl_t *tbl; int status = 0; - size_t i; if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { @@ -268,7 +264,7 @@ static int tbl_config_table (oconfig_item_t *ci) tbl = tables + tables_num - 1; tbl_setup (tbl, ci->values[0].value.string); - for (i = 0; i < ((size_t) ci->children_num); ++i) { + for (size_t i = 0; i < ((size_t) ci->children_num); ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Separator")) @@ -306,15 +302,14 @@ static int tbl_config_table (oconfig_item_t *ci) return status; } - for (i = 0; i < tbl->results_num; ++i) { + for (size_t i = 0; i < tbl->results_num; ++i) { tbl_result_t *res = tbl->results + i; - size_t j; - for (j = 0; j < res->instances_num; ++j) + for (size_t j = 0; j < res->instances_num; ++j) if (res->instances[j] > tbl->max_colnum) tbl->max_colnum = res->instances[j]; - for (j = 0; j < res->values_num; ++j) + for (size_t j = 0; j < res->values_num; ++j) if (res->values[j] > tbl->max_colnum) tbl->max_colnum = res->values[j]; } @@ -323,9 +318,7 @@ static int tbl_config_table (oconfig_item_t *ci) static int tbl_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Table")) @@ -342,9 +335,7 @@ static int tbl_config (oconfig_item_t *ci) static int tbl_prepare (tbl_t *tbl) { - size_t i; - - for (i = 0; i < tbl->results_num; ++i) { + for (size_t i = 0; i < tbl->results_num; ++i) { tbl_result_t *res = tbl->results + i; res->ds = plugin_get_ds (res->type); @@ -367,9 +358,7 @@ static int tbl_prepare (tbl_t *tbl) static int tbl_finish (tbl_t *tbl) { - size_t i; - - for (i = 0; i < tbl->results_num; ++i) + for (size_t i = 0; i < tbl->results_num; ++i) tbl->results[i].ds = NULL; return 0; } /* tbl_finish */ @@ -380,12 +369,10 @@ static int tbl_result_dispatch (tbl_t *tbl, tbl_result_t *res, value_list_t vl = VALUE_LIST_INIT; value_t values[res->values_num]; - size_t i; - assert (NULL != res->ds); assert (res->values_num == res->ds->ds_num); - for (i = 0; i < res->values_num; ++i) { + for (size_t i = 0; i < res->values_num; ++i) { char *value; assert (res->values[i] < fields_num); @@ -412,7 +399,7 @@ static int tbl_result_dispatch (tbl_t *tbl, tbl_result_t *res, char *instances[res->instances_num]; char instances_str[DATA_MAX_NAME_LEN]; - for (i = 0; i < res->instances_num; ++i) { + for (size_t i = 0; i < res->instances_num; ++i) { assert (res->instances[i] < fields_num); instances[i] = fields[res->instances[i]]; } @@ -444,9 +431,8 @@ static int tbl_parse_line (tbl_t *tbl, char *line, size_t len) char *fields[tbl->max_colnum + 1]; char *ptr, *saveptr; - size_t i; + size_t i = 0; - i = 0; ptr = line; saveptr = NULL; while (NULL != (fields[i] = strtok_r (ptr, tbl->sep, &saveptr))) { @@ -518,12 +504,11 @@ static int tbl_read_table (tbl_t *tbl) static int tbl_read (void) { int status = -1; - size_t i; if (0 == tables_num) return 0; - for (i = 0; i < tables_num; ++i) { + for (size_t i = 0; i < tables_num; ++i) { tbl_t *tbl = tables + i; if (0 != tbl_prepare (tbl)) { @@ -541,9 +526,7 @@ static int tbl_read (void) static int tbl_shutdown (void) { - size_t i; - - for (i = 0; i < tables_num; ++i) + for (size_t i = 0; i < tables_num; ++i) tbl_clear (&tables[i]); sfree (tables); return 0; diff --git a/src/tail.c b/src/tail.c index b9e92068..b8922ecb 100644 --- a/src/tail.c +++ b/src/tail.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_tail_match.h" @@ -139,7 +140,6 @@ static int ctail_config_add_match (cu_tail_match_t *tm, { ctail_config_match_t cm = { 0 }; int status; - int i; if (ci->values_num != 0) { @@ -147,7 +147,7 @@ static int ctail_config_add_match (cu_tail_match_t *tm, } status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -222,7 +222,6 @@ static int ctail_config_add_file (oconfig_item_t *ci) cdtime_t interval = 0; char *plugin_instance = NULL; int num_matches = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -238,7 +237,7 @@ static int ctail_config_add_file (oconfig_item_t *ci) return (-1); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; int status = 0; @@ -297,9 +296,7 @@ static int ctail_config_add_file (oconfig_item_t *ci) static int ctail_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -332,7 +329,6 @@ static int ctail_init (void) { char str[255]; user_data_t ud = { 0 }; - size_t i; if (tail_match_list_num == 0) { @@ -340,7 +336,7 @@ static int ctail_init (void) return (-1); } - for (i = 0; i < tail_match_list_num; i++) + for (size_t i = 0; i < tail_match_list_num; i++) { ud.data = (void *)tail_match_list[i]; ssnprintf(str, sizeof(str), "tail-%zu", i); @@ -352,9 +348,7 @@ static int ctail_init (void) static int ctail_shutdown (void) { - size_t i; - - for (i = 0; i < tail_match_list_num; i++) + for (size_t i = 0; i < tail_match_list_num; i++) { tail_match_destroy (tail_match_list[i]); tail_match_list[i] = NULL; diff --git a/src/tail_csv.c b/src/tail_csv.c index 70710216..79ea4665 100644 --- a/src/tail_csv.c +++ b/src/tail_csv.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "plugin.h" /* plugin_register_*, plugin_dispatch_values */ #include "common.h" /* auxiliary functions */ #include "utils_tail.h" @@ -288,7 +289,6 @@ static int tcsv_config_get_index(oconfig_item_t *ci, ssize_t *ret_index) { static int tcsv_config_add_metric(oconfig_item_t *ci){ metric_definition_t *md; int status; - int i; md = calloc(1, sizeof(*md)); if (md == NULL) @@ -306,7 +306,7 @@ static int tcsv_config_add_metric(oconfig_item_t *ci){ return (-1); } - for (i = 0; i < ci->children_num; ++i){ + for (int i = 0; i < ci->children_num; ++i){ oconfig_item_t *option = ci->children + i; if (strcasecmp("Type", option->key) == 0) @@ -376,7 +376,6 @@ static int tcsv_config_add_instance_collect(instance_definition_t *id, oconfig_i metric_definition_t *metric; metric_definition_t **metric_list; size_t metric_list_size; - int i; if (ci->values_num < 1) { WARNING("tail_csv plugin: The `Collect' config option needs at least one argument."); @@ -389,7 +388,7 @@ static int tcsv_config_add_instance_collect(instance_definition_t *id, oconfig_i return (-1); id->metric_list = metric_list; - for (i = 0; i < ci->values_num; i++) { + for (int i = 0; i < ci->values_num; i++) { char *metric_name; if (ci->values[i].type != OCONFIG_TYPE_STRING) { @@ -419,7 +418,6 @@ static int tcsv_config_add_file(oconfig_item_t *ci) { instance_definition_t* id; int status = 0; - int i; /* Registration variables */ char cb_name[DATA_MAX_NAME_LEN]; @@ -443,7 +441,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) /* Use default interval. */ id->interval = plugin_get_interval(); - for (i = 0; i < ci->children_num; ++i){ + for (int i = 0; i < ci->children_num; ++i){ oconfig_item_t *option = ci->children + i; status = 0; @@ -499,8 +497,7 @@ static int tcsv_config_add_file(oconfig_item_t *ci) /* Parse blocks */ static int tcsv_config(oconfig_item_t *ci){ - int i; - for (i = 0; i < ci->children_num; ++i){ + for (int i = 0; i < ci->children_num; ++i){ oconfig_item_t *child = ci->children + i; if (strcasecmp("Metric", child->key) == 0) tcsv_config_add_metric(child); diff --git a/src/tape.c b/src/tape.c index a8e7dc45..52da2bc6 100644 --- a/src/tape.c +++ b/src/tape.c @@ -21,6 +21,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -98,7 +99,6 @@ static int tape_read (void) # error "kstat_io_t does not have the required members" #endif static kstat_io_t kio; - int i; if (kc == NULL) return (-1); @@ -106,7 +106,7 @@ static int tape_read (void) if (numtape <= 0) return (-1); - for (i = 0; i < numtape; i++) + for (int i = 0; i < numtape; i++) { if (kstat_read (kc, ksp[i], &kio) == -1) continue; diff --git a/src/target_notification.c b/src/target_notification.c index 63e4f315..21c071ed 100644 --- a/src/target_notification.c +++ b/src/target_notification.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" #include "utils_cache.h" @@ -124,7 +125,6 @@ static int tn_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { tn_data_t *data; int status; - int i; data = calloc (1, sizeof (*data)); if (data == NULL) @@ -137,7 +137,7 @@ static int tn_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ data->severity = 0; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -198,8 +198,6 @@ static int tn_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ */ gauge_t *rates; int rates_failed; - size_t i; - if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) return (-EINVAL); @@ -234,7 +232,8 @@ static int tn_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ */ rates_failed = 0; rates = NULL; - for (i = 0; i < ds->ds_num; i++) + + for (size_t i = 0; i < ds->ds_num; i++) { char template[DATA_MAX_NAME_LEN]; char value_str[DATA_MAX_NAME_LEN]; diff --git a/src/target_replace.c b/src/target_replace.c index 8d774c57..40a6fec9 100644 --- a/src/target_replace.c +++ b/src/target_replace.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" #include "utils_subst.h" @@ -155,7 +156,6 @@ static int tr_config_add_action (tr_action_t **dest, /* {{{ */ static int tr_action_invoke (tr_action_t *act_head, /* {{{ */ char *buffer_in, size_t buffer_in_size, int may_be_empty) { - tr_action_t *act; int status; char buffer[DATA_MAX_NAME_LEN]; regmatch_t matches[8] = { [0] = { 0 } }; @@ -167,7 +167,7 @@ static int tr_action_invoke (tr_action_t *act_head, /* {{{ */ DEBUG ("target_replace plugin: tr_action_invoke: <- buffer = %s;", buffer); - for (act = act_head; act != NULL; act = act->next) + for (tr_action_t *act = act_head; act != NULL; act = act->next) { char temp[DATA_MAX_NAME_LEN]; char *subst_status; @@ -240,7 +240,6 @@ static int tr_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { tr_data_t *data; int status; - int i; data = calloc (1, sizeof (*data)); if (data == NULL) @@ -256,7 +255,7 @@ static int tr_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ data->type_instance = NULL; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/target_scale.c b/src/target_scale.c index 579d01a0..22af4e31 100644 --- a/src/target_scale.c +++ b/src/target_scale.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" @@ -302,7 +303,6 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ { size_t new_data_sources_num; char **temp; - int i; /* Check number of arbuments. */ if (ci->values_num < 1) @@ -313,7 +313,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ } /* Check type of arguments */ - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { if (ci->values[i].type == OCONFIG_TYPE_STRING) continue; @@ -338,7 +338,7 @@ static int ts_config_add_data_source(ts_data_t *data, /* {{{ */ data->data_sources = temp; /* Copy the strings, allocating memory as needed. */ - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { size_t j; @@ -369,8 +369,7 @@ static int ts_destroy (void **user_data) /* {{{ */ if ((data != NULL) && (data->data_sources != NULL)) { - size_t i; - for (i = 0; i < data->data_sources_num; i++) + for (size_t i = 0; i < data->data_sources_num; i++) sfree (data->data_sources[i]); sfree (data->data_sources); } @@ -385,7 +384,6 @@ static int ts_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { ts_data_t *data; int status; - int i; data = calloc (1, sizeof (*data)); if (data == NULL) @@ -398,7 +396,7 @@ static int ts_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ data->offset = NAN; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -446,7 +444,6 @@ static int ts_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ */ notification_meta_t __attribute__((unused)) **meta, void **user_data) { ts_data_t *data; - size_t i; if ((ds == NULL) || (vl == NULL) || (user_data == NULL)) return (-EINVAL); @@ -458,7 +455,7 @@ static int ts_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ */ return (-EINVAL); } - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { /* If we've got a list of data sources, is it in the list? */ if (data->data_sources) { diff --git a/src/target_set.c b/src/target_set.c index 2060dcde..fee5ffdc 100644 --- a/src/target_set.c +++ b/src/target_set.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "filter_chain.h" @@ -142,7 +143,6 @@ static int ts_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ { ts_data_t *data; int status; - int i; data = calloc (1, sizeof (*data)); if (data == NULL) @@ -159,7 +159,7 @@ static int ts_create (const oconfig_item_t *ci, void **user_data) /* {{{ */ data->meta = NULL; status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/target_v5upgrade.c b/src/target_v5upgrade.c index 6d661711..f7baa3ae 100644 --- a/src/target_v5upgrade.c +++ b/src/target_v5upgrade.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "filter_chain.h" diff --git a/src/tcpconns.c b/src/tcpconns.c index da916950..e74e4bc8 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -58,6 +58,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -304,7 +305,6 @@ static void conn_submit_port_entry (port_entry_t *pe) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - int i; conn_prepare_vl (&vl, values); @@ -314,7 +314,7 @@ static void conn_submit_port_entry (port_entry_t *pe) ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance), "%"PRIu16"-local", pe->port); - for (i = 1; i <= TCP_STATE_MAX; i++) + for (int i = 1; i <= TCP_STATE_MAX; i++) { vl.values[0].gauge = pe->count_local[i]; @@ -329,7 +329,7 @@ static void conn_submit_port_entry (port_entry_t *pe) ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance), "%"PRIu16"-remote", pe->port); - for (i = 1; i <= TCP_STATE_MAX; i++) + for (int i = 1; i <= TCP_STATE_MAX; i++) { vl.values[0].gauge = pe->count_remote[i]; @@ -344,13 +344,12 @@ static void conn_submit_port_total (void) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - int i; conn_prepare_vl (&vl, values); sstrncpy (vl.plugin_instance, "all", sizeof (vl.plugin_instance)); - for (i = 1; i <= TCP_STATE_MAX; i++) + for (int i = 1; i <= TCP_STATE_MAX; i++) { vl.values[0].gauge = count_total[i]; @@ -362,12 +361,10 @@ static void conn_submit_port_total (void) static void conn_submit_all (void) { - port_entry_t *pe; - if (port_collect_total) conn_submit_port_total (); - for (pe = port_list_head; pe != NULL; pe = pe->next) + for (port_entry_t *pe = port_list_head; pe != NULL; pe = pe->next) conn_submit_port_entry (pe); } /* void conn_submit_all */ @@ -1016,7 +1013,6 @@ static int conn_read (void) static int conn_read (void) { int size; - int i; int nconn; void *data; struct netinfo_header *header; @@ -1058,7 +1054,7 @@ static int conn_read (void) nconn = header->size; conn = (struct netinfo_conn *)(data + sizeof(struct netinfo_header)); - for (i=0; i < nconn; conn++, i++) + for (int i = 0; i < nconn; conn++, i++) { conn_handle_ports (conn->srcport, conn->dstport, conn->tcp_state); } diff --git a/src/teamspeak2.c b/src/teamspeak2.c index cf093c5f..a1cde320 100644 --- a/src/teamspeak2.c +++ b/src/teamspeak2.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -198,9 +199,7 @@ static int tss2_get_socket (FILE **ret_read_fh, FILE **ret_write_fh) * Returns connected file objects or establishes the connection * if it's not already present */ - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_head; - struct addrinfo *ai_ptr; int sd = -1; int status; @@ -216,11 +215,11 @@ static int tss2_get_socket (FILE **ret_read_fh, FILE **ret_write_fh) } /* Get all addrs for this hostname */ -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; status = getaddrinfo ((config_host != NULL) ? config_host : DEFAULT_HOST, (config_port != NULL) ? config_port : DEFAULT_PORT, @@ -234,7 +233,7 @@ static int tss2_get_socket (FILE **ret_read_fh, FILE **ret_write_fh) } /* Try all given hosts until we can connect to one */ - for (ai_ptr = ai_head; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_head; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { /* Create socket */ sd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, @@ -770,7 +769,6 @@ static int tss2_read (void) * Poll function which collects global and vserver information * and submits it to collectd */ - vserver_list_t *vserver; int success = 0; int status; @@ -786,7 +784,7 @@ static int tss2_read (void) } /* Handle vservers */ - for (vserver = server_list; vserver != NULL; vserver = vserver->next) + for (vserver_list_t *vserver = server_list; vserver != NULL; vserver = vserver->next) { status = tss2_read_vserver (vserver); if (status == 0) diff --git a/src/ted.c b/src/ted.c index 282212b1..96c94e5d 100644 --- a/src/ted.c +++ b/src/ted.c @@ -35,6 +35,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -107,7 +108,6 @@ static int ted_read_value(double *ret_power, double *ret_voltage) while (end_flag == 0) { ssize_t receive_buffer_length; - ssize_t i; /* check for timeout or input error*/ status = select (fd + 1, &input, NULL, NULL, &timeout); @@ -164,7 +164,7 @@ static int ted_read_value(double *ret_power, double *ret_voltage) * the beginning of the package has been found. */ escape_flag = 0; - for (i = 0; i < receive_buffer_length; i++) + for (ssize_t i = 0; i < receive_buffer_length; i++) { /* Check if previous byte was the escape byte. */ if (escape_flag == 1) @@ -311,7 +311,6 @@ static int ted_read (void) double power; double voltage; int status; - int i; status = ted_open_device (); if (status != 0) @@ -319,7 +318,7 @@ static int ted_read (void) power = NAN; voltage = NAN; - for (i = 0; i <= conf_retries; i++) + for (int i = 0; i <= conf_retries; i++) { status = ted_read_value (&power, &voltage); if (status == 0) diff --git a/src/thermal.c b/src/thermal.c index 54311a64..c6db8c04 100644 --- a/src/thermal.c +++ b/src/thermal.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" diff --git a/src/threshold.c b/src/threshold.c index f12b4057..1d9bcf95 100644 --- a/src/threshold.c +++ b/src/threshold.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_avltree.h" @@ -215,7 +216,6 @@ static int ut_config_type_hysteresis (threshold_t *th, oconfig_item_t *ci) static int ut_config_type (const threshold_t *th_orig, oconfig_item_t *ci) { - int i; threshold_t th; int status = 0; @@ -244,7 +244,7 @@ static int ut_config_type (const threshold_t *th_orig, oconfig_item_t *ci) th.hysteresis = 0; th.flags = UT_FLAG_INTERESTING; /* interesting by default */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -309,7 +309,6 @@ static int ut_config_plugin_instance (threshold_t *th, oconfig_item_t *ci) static int ut_config_plugin (const threshold_t *th_orig, oconfig_item_t *ci) { - int i; threshold_t th; int status = 0; @@ -331,7 +330,7 @@ static int ut_config_plugin (const threshold_t *th_orig, oconfig_item_t *ci) memcpy (&th, th_orig, sizeof (th)); sstrncpy (th.plugin, ci->values[0].value.string, sizeof (th.plugin)); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -355,7 +354,6 @@ static int ut_config_plugin (const threshold_t *th_orig, oconfig_item_t *ci) static int ut_config_host (const threshold_t *th_orig, oconfig_item_t *ci) { - int i; threshold_t th; int status = 0; @@ -377,7 +375,7 @@ static int ut_config_host (const threshold_t *th_orig, oconfig_item_t *ci) memcpy (&th, th_orig, sizeof (th)); sstrncpy (th.host, ci->values[0].value.string, sizeof (th.host)); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; @@ -549,10 +547,9 @@ static int ut_report_state (const data_set_t *ds, { gauge_t value; gauge_t sum; - size_t i; sum = 0.0; - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { if (isnan (values[i])) continue; @@ -697,7 +694,6 @@ static int ut_check_one_threshold (const data_set_t *ds, { /* {{{ */ int ret = -1; int ds_index = -1; - size_t i; gauge_t values_copy[ds->ds_num]; memcpy (values_copy, values, sizeof (values_copy)); @@ -716,7 +712,7 @@ static int ut_check_one_threshold (const data_set_t *ds, } /* Prepare `sum' and `num'. */ - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) if (!isnan (values[i])) { num++; @@ -726,17 +722,17 @@ static int ut_check_one_threshold (const data_set_t *ds, if ((num == 0) /* All data sources are undefined. */ || (sum == 0.0)) /* Sum is zero, cannot calculate percentage. */ { - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) values_copy[i] = NAN; } else /* We can actually calculate the percentage. */ { - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) values_copy[i] = 100.0 * values[i] / sum; } } /* if (UT_FLAG_PERCENTAGE) */ - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { int status; @@ -866,7 +862,6 @@ static int ut_missing (const value_list_t *vl, static int ut_config (oconfig_item_t *ci) { /* {{{ */ - int i; int status = 0; int old_size = c_avl_size (threshold_tree); @@ -888,7 +883,7 @@ static int ut_config (oconfig_item_t *ci) .flags = UT_FLAG_INTERESTING /* interesting by default */ }; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *option = ci->children + i; diff --git a/src/tokyotyrant.c b/src/tokyotyrant.c index befbd50a..7c6d9129 100644 --- a/src/tokyotyrant.c +++ b/src/tokyotyrant.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_cache.h" diff --git a/src/turbostat.c b/src/turbostat.c index bd5d86cd..2d8a08e6 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -36,6 +36,7 @@ #define _GNU_SOURCE #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_time.h" @@ -651,11 +652,10 @@ for_all_cpus(int (func)(struct thread_data *, struct core_data *, struct pkg_dat struct thread_data *thread_base, struct core_data *core_base, struct pkg_data *pkg_base) { int retval; - unsigned int pkg_no, core_no, thread_no; - for (pkg_no = 0; pkg_no < topology.num_packages; ++pkg_no) { - for (core_no = 0; core_no < topology.num_cores; ++core_no) { - for (thread_no = 0; thread_no < topology.num_threads; ++thread_no) { + for (unsigned int pkg_no = 0; pkg_no < topology.num_packages; ++pkg_no) { + for (unsigned int core_no = 0; core_no < topology.num_cores; ++core_no) { + for (unsigned int thread_no = 0; thread_no < topology.num_threads; ++thread_no) { struct thread_data *t; struct core_data *c; struct pkg_data *p; @@ -691,11 +691,10 @@ for_all_cpus_delta(const struct thread_data *thread_new_base, const struct core_ const struct thread_data *thread_old_base, const struct core_data *core_old_base, const struct pkg_data *pkg_old_base) { int retval; - unsigned int pkg_no, core_no, thread_no; - for (pkg_no = 0; pkg_no < topology.num_packages; ++pkg_no) { - for (core_no = 0; core_no < topology.num_cores; ++core_no) { - for (thread_no = 0; thread_no < topology.num_threads; ++thread_no) { + for (unsigned int pkg_no = 0; pkg_no < topology.num_packages; ++pkg_no) { + for (unsigned int core_no = 0; core_no < topology.num_cores; ++core_no) { + for (unsigned int thread_no = 0; thread_no < topology.num_threads; ++thread_no) { struct thread_data *t_delta; const struct thread_data *t_old, *t_new; struct core_data *c_delta; @@ -1149,7 +1148,6 @@ allocate_cpu_set(cpu_set_t ** set, size_t * size) { static int __attribute__((warn_unused_result)) topology_probe(void) { - unsigned int i; int ret; unsigned int max_package_id, max_core_id, max_threads; max_package_id = max_core_id = max_threads = 0; @@ -1186,7 +1184,7 @@ topology_probe(void) * For online cpus * find max_core_id, max_package_id */ - for (i = 0; i <= topology.max_cpu_id; ++i) { + for (unsigned int i = 0; i <= topology.max_cpu_id; ++i) { unsigned int num_threads; struct cpu_topology *cpu = &topology.cpus[i]; @@ -1251,7 +1249,6 @@ err: static int allocate_counters(struct thread_data **threads, struct core_data **cores, struct pkg_data **packages) { - unsigned int i; unsigned int total_threads, total_cores; if ((topology.num_threads == 0) @@ -1271,7 +1268,7 @@ allocate_counters(struct thread_data **threads, struct core_data **cores, struct return -1; } - for (i = 0; i < total_threads; ++i) + for (unsigned int i = 0; i < total_threads; ++i) (*threads)[i].cpu_id = topology.max_cpu_id + 1; total_cores = topology.num_cores * topology.num_packages; @@ -1321,9 +1318,7 @@ init_counter(struct thread_data *thread_base, struct core_data *core_base, static void initialize_counters(void) { - unsigned int cpu_id; - - for (cpu_id = 0; cpu_id <= topology.max_cpu_id; ++cpu_id) { + for (unsigned int cpu_id = 0; cpu_id <= topology.max_cpu_id; ++cpu_id) { if (cpu_is_not_present(cpu_id)) continue; init_counter(EVEN_COUNTERS, cpu_id); @@ -1479,35 +1474,22 @@ out: static int check_permissions(void) { -#ifdef HAVE_SYS_CAPABILITY_H - struct __user_cap_header_struct cap_header_data; - cap_user_header_t cap_header = &cap_header_data; - struct __user_cap_data_struct cap_data_data; - cap_user_data_t cap_data = &cap_data_data; - int ret = 0; -#endif /* HAVE_SYS_CAPABILITY_H */ if (getuid() == 0) { /* We have everything we need */ return 0; -#ifndef HAVE_SYS_CAPABILITY_H +#if !defined(HAVE_SYS_CAPABILITY_H) && !defined(CAP_SYS_RAWIO) } else { ERROR("turbostat plugin: Initialization failed: this plugin " "requires collectd to run as root"); return -1; } -#else /* HAVE_SYS_CAPABILITY_H */ +#else /* HAVE_SYS_CAPABILITY_H && CAP_SYS_RAWIO */ } - /* check for CAP_SYS_RAWIO */ - cap_header->pid = getpid(); - cap_header->version = _LINUX_CAPABILITY_VERSION; - if (capget(cap_header, cap_data) < 0) { - ERROR("turbostat plugin: capget failed"); - return -1; - } + int ret = 0; - if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) { + if (check_capability(CAP_SYS_RAWIO) != 0) { WARNING("turbostat plugin: Collectd doesn't have the " "CAP_SYS_RAWIO capability. If you don't want to run " "collectd as root, try running \"setcap " @@ -1529,7 +1511,7 @@ check_permissions(void) "collectd a special capability (CAP_SYS_RAWIO) and read " "access to /dev/cpu/*/msr (see previous warnings)"); return ret; -#endif /* HAVE_SYS_CAPABILITY_H */ +#endif /* HAVE_SYS_CAPABILITY_H && CAP_SYS_RAWIO */ } static int diff --git a/src/types.db b/src/types.db index 8c6a9956..cc79af07 100644 --- a/src/types.db +++ b/src/types.db @@ -45,6 +45,7 @@ derive value:DERIVE:0:U 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 @@ -197,6 +198,7 @@ root_dispersion value:GAUGE:U: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 diff --git a/src/unixsock.c b/src/unixsock.c index 5454fd8c..1faeff9c 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" diff --git a/src/uptime.c b/src/uptime.c index 4116b810..cbe2f8c5 100644 --- a/src/uptime.c +++ b/src/uptime.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/users.c b/src/users.c index a4ee4ef7..30e0dbe6 100644 --- a/src/users.c +++ b/src/users.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/utils_cmd_flush.c b/src/utils_cmd_flush.c index 41061664..1876150f 100644 --- a/src/utils_cmd_flush.c +++ b/src/utils_cmd_flush.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_parse_option.h" @@ -43,8 +44,6 @@ int handle_flush (FILE *fh, char *buffer) char **identifiers = NULL; size_t identifiers_num = 0; - size_t i; - #define PRINT_TO_SOCK(fh, ...) \ do { \ if (fprintf (fh, __VA_ARGS__) < 0) { \ @@ -122,15 +121,14 @@ int handle_flush (FILE *fh, char *buffer) } } /* while (*buffer != 0) */ - for (i = 0; (i == 0) || (i < plugins_num); i++) + for (size_t i = 0; (i == 0) || (i < plugins_num); i++) { char *plugin = NULL; - size_t j; if (plugins_num != 0) plugin = plugins[i]; - for (j = 0; (j == 0) || (j < identifiers_num); j++) + for (size_t j = 0; (j == 0) || (j < identifiers_num); j++) { char *identifier = NULL; int status; diff --git a/src/utils_cmd_getthreshold.c b/src/utils_cmd_getthreshold.c index 7e4a9db1..b2a0a23b 100644 --- a/src/utils_cmd_getthreshold.c +++ b/src/utils_cmd_getthreshold.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/utils_cmd_getval.c b/src/utils_cmd_getval.c index 4d679f00..cd88760a 100644 --- a/src/utils_cmd_getval.c +++ b/src/utils_cmd_getval.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -60,7 +61,6 @@ int handle_getval (FILE *fh, char *buffer) const data_set_t *ds; int status; - size_t i; if ((fh == NULL) || (buffer == NULL)) return (-1); @@ -145,7 +145,7 @@ int handle_getval (FILE *fh, char *buffer) print_to_socket (fh, "%zu Value%s found\n", values_num, (values_num == 1) ? "" : "s"); - for (i = 0; i < values_num; i++) + for (size_t i = 0; i < values_num; i++) { print_to_socket (fh, "%s=", ds->ds[i].name); if (isnan (values[i])) diff --git a/src/utils_cmd_listval.c b/src/utils_cmd_listval.c index b698388d..afbd01d0 100644 --- a/src/utils_cmd_listval.c +++ b/src/utils_cmd_listval.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -33,8 +34,7 @@ #include "utils_parse_option.h" #define free_everything_and_return(status) do { \ - size_t j; \ - for (j = 0; j < number; j++) { \ + for (size_t j = 0; j < number; j++) { \ sfree(names[j]); \ names[j] = NULL; \ } \ @@ -60,7 +60,6 @@ int handle_listval (FILE *fh, char *buffer) char **names = NULL; cdtime_t *times = NULL; size_t number = 0; - size_t i; int status; DEBUG ("utils_cmd_listval: handle_listval (fh = %p, buffer = %s);", @@ -97,7 +96,7 @@ int handle_listval (FILE *fh, char *buffer) print_to_socket (fh, "%i Value%s found\n", (int) number, (number == 1) ? "" : "s"); - for (i = 0; i < number; i++) + for (size_t i = 0; i < number; i++) print_to_socket (fh, "%.3f %s\n", CDTIME_T_TO_DOUBLE (times[i]), names[i]); diff --git a/src/utils_cmd_putnotif.c b/src/utils_cmd_putnotif.c index 956ed745..669ef837 100644 --- a/src/utils_cmd_putnotif.c +++ b/src/utils_cmd_putnotif.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/utils_cmd_putval.c b/src/utils_cmd_putval.c index 4c40e557..bf3e2b6f 100644 --- a/src/utils_cmd_putval.c +++ b/src/utils_cmd_putval.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/utils_crc32.c b/src/utils_crc32.c index f9eaf880..79d77a23 100644 --- a/src/utils_crc32.c +++ b/src/utils_crc32.c @@ -101,11 +101,10 @@ static unsigned int crc32_tab[] = { uint32_t crc32_buffer(const unsigned char *s, size_t len) { - size_t i; uint32_t ret; ret = 0; - for (i = 0; i < len; i++) + for (size_t i = 0; i < len; i++) ret = crc32_tab[(ret ^ s[i]) & 0xff] ^ (ret >> 8); return ret; } diff --git a/src/utils_curl_stats.c b/src/utils_curl_stats.c index 258c5cfa..0509ff43 100644 --- a/src/utils_curl_stats.c +++ b/src/utils_curl_stats.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_curl_stats.h" @@ -159,7 +160,6 @@ static bool field_enabled (curl_stats_t *s, size_t offset) curl_stats_t *curl_stats_from_config (oconfig_item_t *ci) { curl_stats_t *s; - int i; if (ci == NULL) return NULL; @@ -168,7 +168,7 @@ curl_stats_t *curl_stats_from_config (oconfig_item_t *ci) if (s == NULL) return NULL; - for (i = 0; i < ci->children_num; ++i) + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; size_t field; @@ -210,7 +210,6 @@ int curl_stats_dispatch (curl_stats_t *s, CURL *curl, const char *hostname, const char *plugin, const char *plugin_instance) { value_list_t vl = VALUE_LIST_INIT; - size_t field; if (s == NULL) return 0; @@ -228,7 +227,7 @@ int curl_stats_dispatch (curl_stats_t *s, CURL *curl, if (plugin_instance != NULL) sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance)); - for (field = 0; field < STATIC_ARRAY_SIZE (field_specs); ++field) + for (size_t field = 0; field < STATIC_ARRAY_SIZE (field_specs); ++field) { int status; diff --git a/src/utils_db_query.c b/src/utils_db_query.c index f683fb5d..e734358f 100644 --- a/src/utils_db_query.c +++ b/src/utils_db_query.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -125,7 +126,6 @@ static int udb_config_add_string (char ***ret_array, /* {{{ */ { char **array; size_t array_len; - int i; if (ci->values_num < 1) { @@ -134,7 +134,7 @@ static int udb_config_add_string (char ***ret_array, /* {{{ */ return (-1); } - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { if (ci->values[i].type != OCONFIG_TYPE_STRING) { @@ -154,7 +154,7 @@ static int udb_config_add_string (char ***ret_array, /* {{{ */ } *ret_array = array; - for (i = 0; i < ci->values_num; i++) + for (int i = 0; i < ci->values_num; i++) { array[array_len] = strdup (ci->values[i].value.string); if (array[array_len] == NULL) @@ -199,8 +199,6 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ udb_query_t const *q, udb_query_preparation_area_t *q_area) { value_list_t vl = VALUE_LIST_INIT; - size_t i; - int status; assert (r != NULL); assert (r_area->ds != NULL); @@ -215,7 +213,7 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ } vl.values_len = r_area->ds->ds_num; - for (i = 0; i < r->values_num; i++) + for (size_t i = 0; i < r->values_num; i++) { char *value_str = r_area->values_buffer[i]; @@ -257,15 +255,27 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ { if (r->instance_prefix == NULL) { - strjoin (vl.type_instance, sizeof (vl.type_instance), + int status = strjoin (vl.type_instance, sizeof (vl.type_instance), r_area->instances_buffer, r->instances_num, "-"); + if (status < 0) + { + ERROR ("udb_result_submit: creating type_instance failed with status %d.", + status); + return (status); + } } else { char tmp[DATA_MAX_NAME_LEN]; - strjoin (tmp, sizeof (tmp), r_area->instances_buffer, + int status = strjoin (tmp, sizeof (tmp), r_area->instances_buffer, r->instances_num, "-"); + if (status < 0) + { + ERROR ("udb_result_submit: creating type_instance failed with status %d.", + status); + return (status); + } tmp[sizeof (tmp) - 1] = 0; snprintf (vl.type_instance, sizeof (vl.type_instance), "%s-%s", @@ -285,9 +295,9 @@ static int udb_result_submit (udb_result_t *r, /* {{{ */ return (-ENOMEM); } - for (i = 0; i < r->metadata_num; i++) + for (size_t i = 0; i < r->metadata_num; i++) { - status = meta_data_add_string (vl.meta, r->metadata[i], + int status = meta_data_add_string (vl.meta, r->metadata[i], r_area->metadata_buffer[i]); if (status != 0) { @@ -331,17 +341,15 @@ static int udb_result_handle_result (udb_result_t *r, /* {{{ */ udb_result_preparation_area_t *r_area, udb_query_t const *q, char **column_values) { - size_t i; - assert (r && q_area && r_area); - for (i = 0; i < r->instances_num; i++) + for (size_t i = 0; i < r->instances_num; i++) r_area->instances_buffer[i] = column_values[r_area->instances_pos[i]]; - for (i = 0; i < r->values_num; i++) + for (size_t i = 0; i < r->values_num; i++) r_area->values_buffer[i] = column_values[r_area->values_pos[i]]; - for (i = 0; i < r->metadata_num; i++) + for (size_t i = 0; i < r->metadata_num; i++) r_area->metadata_buffer[i] = column_values[r_area->metadata_pos[i]]; if (q->plugin_instance_from) @@ -354,8 +362,6 @@ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */ udb_result_preparation_area_t *prep_area, char **column_names, size_t column_num) { - size_t i; - if ((r == NULL) || (prep_area == NULL)) return (-EINVAL); @@ -452,7 +458,7 @@ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */ /* }}} */ /* Determine the position of the plugin instance column {{{ */ - for (i = 0; i < r->instances_num; i++) + for (size_t i = 0; i < r->instances_num; i++) { size_t j; @@ -476,7 +482,7 @@ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */ /* Determine the position of the value columns {{{ */ - for (i = 0; i < r->values_num; i++) + for (size_t i = 0; i < r->values_num; i++) { size_t j; @@ -499,7 +505,7 @@ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */ } /* }}} for (i = 0; i < r->values_num; i++) */ /* Determine the position of the metadata columns {{{ */ - for (i = 0; i < r->metadata_num; i++) + for (size_t i = 0; i < r->metadata_num; i++) { size_t j; @@ -527,23 +533,21 @@ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */ static void udb_result_free (udb_result_t *r) /* {{{ */ { - size_t i; - if (r == NULL) return; sfree (r->type); sfree (r->instance_prefix); - for (i = 0; i < r->instances_num; i++) + for (size_t i = 0; i < r->instances_num; i++) sfree (r->instances[i]); sfree (r->instances); - for (i = 0; i < r->values_num; i++) + for (size_t i = 0; i < r->values_num; i++) sfree (r->values[i]); sfree (r->values); - for (i = 0; i < r->metadata_num; i++) + for (size_t i = 0; i < r->metadata_num; i++) sfree (r->metadata[i]); sfree (r->metadata); @@ -557,7 +561,6 @@ static int udb_result_create (const char *query_name, /* {{{ */ { udb_result_t *r; int status; - int i; if (ci->values_num != 0) { @@ -581,7 +584,7 @@ static int udb_result_create (const char *query_name, /* {{{ */ /* Fill the `udb_result_t' structure.. */ status = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -679,7 +682,6 @@ int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */ udb_query_t *q; int status; - int i; if ((ret_query_list == NULL) || (ret_query_list_len == NULL)) return (-EINVAL); @@ -714,7 +716,7 @@ int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */ } /* Fill the `udb_query_t' structure.. */ - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -801,12 +803,10 @@ int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */ void udb_query_free (udb_query_t **query_list, size_t query_list_len) /* {{{ */ { - size_t i; - if (query_list == NULL) return; - for (i = 0; i < query_list_len; i++) + for (size_t i = 0; i < query_list_len; i++) udb_query_free_one (query_list[i]); sfree (query_list); @@ -816,7 +816,6 @@ int udb_query_pick_from_list_by_name (const char *name, /* {{{ */ udb_query_t **src_list, size_t src_list_len, udb_query_t ***dst_list, size_t *dst_list_len) { - size_t i; int num_added; if ((name == NULL) || (src_list == NULL) || (dst_list == NULL) @@ -828,7 +827,7 @@ int udb_query_pick_from_list_by_name (const char *name, /* {{{ */ } num_added = 0; - for (i = 0; i < src_list_len; i++) + for (size_t i = 0; i < src_list_len; i++) { udb_query_t **tmp_list; size_t tmp_list_len; @@ -989,9 +988,7 @@ int udb_query_handle_result (udb_query_t const *q, /* {{{ */ #if defined(COLLECT_DEBUG) && COLLECT_DEBUG /* {{{ */ do { - size_t i; - - for (i = 0; i < prep_area->column_num; i++) + for (size_t i = 0; i < prep_area->column_num; i++) { DEBUG ("db query utils: udb_query_handle_result (%s, %s): " "column[%zu] = %s;", @@ -1052,9 +1049,7 @@ int udb_query_prepare_result (udb_query_t const *q, /* {{{ */ #if defined(COLLECT_DEBUG) && COLLECT_DEBUG do { - size_t i; - - for (i = 0; i < column_num; i++) + for (size_t i = 0; i < column_num; i++) { DEBUG ("db query utils: udb_query_prepare_result: " "query = %s; column[%zu] = %s;", diff --git a/src/utils_dns.c b/src/utils_dns.c index a1e4222f..f38a7bd1 100644 --- a/src/utils_dns.c +++ b/src/utils_dns.c @@ -37,6 +37,7 @@ #define _BSD_SOURCE #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -194,9 +195,7 @@ static int cmp_in6_addr (const struct in6_addr *a, static inline int ignore_list_match (const struct in6_addr *addr) { - ip_list_t *ptr; - - for (ptr = IgnoreList; ptr != NULL; ptr = ptr->next) + for (ip_list_t *ptr = IgnoreList; ptr != NULL; ptr = ptr->next) if (cmp_in6_addr (addr, &ptr->addr) == 0) return (1); return (0); @@ -225,7 +224,6 @@ static void ignore_list_add (const struct in6_addr *addr) void ignore_list_add_name (const char *name) { struct addrinfo *ai_list; - struct addrinfo *ai_ptr; struct in6_addr addr; int status; @@ -233,7 +231,7 @@ void ignore_list_add_name (const char *name) if (status != 0) return; - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { if (ai_ptr->ai_family == AF_INET) { @@ -751,22 +749,41 @@ const char *qtype_str(int t) case ns_t_srv: return ("SRV"); case ns_t_atma: return ("ATMA"); case ns_t_naptr: return ("NAPTR"); + case ns_t_opt: return ("OPT"); +# if __NAMESER >= 19991006 case ns_t_kx: return ("KX"); case ns_t_cert: return ("CERT"); case ns_t_a6: return ("A6"); case ns_t_dname: return ("DNAME"); case ns_t_sink: return ("SINK"); - case ns_t_opt: return ("OPT"); -# if __NAMESER >= 19991006 case ns_t_tsig: return ("TSIG"); # endif +# if __NAMESER >= 20090302 + case ns_t_apl: return ("APL"); + case ns_t_ds: return ("DS"); + case ns_t_sshfp: return ("SSHFP"); + case ns_t_ipseckey: return ("IPSECKEY"); + case ns_t_rrsig: return ("RRSIG"); + case ns_t_nsec: return ("NSEC"); + case ns_t_dnskey: return ("DNSKEY"); + case ns_t_dhcid: return ("DHCID"); + case ns_t_nsec3: return ("NSEC3"); + case ns_t_nsec3param: return ("NSEC3PARAM"); + case ns_t_hip: return ("HIP"); + case ns_t_spf: return ("SPF"); case ns_t_ixfr: return ("IXFR"); +# endif case ns_t_axfr: return ("AXFR"); case ns_t_mailb: return ("MAILB"); case ns_t_maila: return ("MAILA"); case ns_t_any: return ("ANY"); +# if __NAMESER >= 19991006 case ns_t_zxfr: return ("ZXFR"); -/* #endif __NAMESER >= 19991006 */ +# endif +# if __NAMESER >= 20090302 + case ns_t_dlv: return ("DLV"); +# endif +/* #endif __NAMESER >= 19991001 */ #elif (defined (__BIND)) && (__BIND >= 19950621) case T_A: return ("A"); /* 1 ... */ case T_NS: return ("NS"); diff --git a/src/utils_fbhash.c b/src/utils_fbhash.c index d980f586..893bfbd4 100644 --- a/src/utils_fbhash.c +++ b/src/utils_fbhash.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "utils_fbhash.h" diff --git a/src/utils_format_graphite.c b/src/utils_format_graphite.c index eb5b4b32..e5234204 100644 --- a/src/utils_format_graphite.c +++ b/src/utils_format_graphite.c @@ -22,6 +22,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -84,14 +85,12 @@ static int gr_format_values (char *ret, size_t ret_len, static void gr_copy_escape_part (char *dst, const char *src, size_t dst_len, char escape_char) { - size_t i; - memset (dst, 0, dst_len); if (src == NULL) return; - for (i = 0; i < dst_len; i++) + for (size_t i = 0; i < dst_len; i++) { if (src[i] == 0) { @@ -172,11 +171,9 @@ static int gr_format_name (char *ret, int ret_len, static void escape_graphite_string (char *buffer, char escape_char) { - char *head; - assert (strchr(GRAPHITE_FORBIDDEN, escape_char) == NULL); - for (head = buffer + strcspn(buffer, GRAPHITE_FORBIDDEN); + for (char *head = buffer + strcspn(buffer, GRAPHITE_FORBIDDEN); *head != '\0'; head += strcspn(head, GRAPHITE_FORBIDDEN)) *head = escape_char; @@ -188,14 +185,13 @@ int format_graphite (char *buffer, size_t buffer_size, unsigned int flags) { int status = 0; - size_t i; int buffer_pos = 0; gauge_t *rates = NULL; if (flags & GRAPHITE_STORE_RATES) rates = uc_get_rate (ds, vl); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { char const *ds_name = NULL; char key[10*DATA_MAX_NAME_LEN]; diff --git a/src/utils_format_graphite.h b/src/utils_format_graphite.h index 398defbe..60576dac 100644 --- a/src/utils_format_graphite.h +++ b/src/utils_format_graphite.h @@ -23,6 +23,7 @@ #define UTILS_FORMAT_GRAPHITE_H 1 #include "collectd.h" + #include "plugin.h" #define GRAPHITE_STORE_RATES 0x01 diff --git a/src/utils_format_json.c b/src/utils_format_json.c index 800b4219..5b5fcdf0 100644 --- a/src/utils_format_json.c +++ b/src/utils_format_json.c @@ -1,6 +1,6 @@ /** * collectd - src/utils_format_json.c - * Copyright (C) 2009 Florian octo Forster + * Copyright (C) 2009-2015 Florian octo Forster * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -25,16 +25,27 @@ **/ #include "collectd.h" + +#include "utils_format_json.h" + #include "plugin.h" #include "common.h" - #include "utils_cache.h" -#include "utils_format_json.h" + +#if HAVE_LIBYAJL +# include +# include +# if HAVE_YAJL_YAJL_VERSION_H +# include +# endif +# if defined(YAJL_MAJOR) && (YAJL_MAJOR > 1) +# define HAVE_YAJL_V2 1 +# endif +#endif static int json_escape_string (char *buffer, size_t buffer_size, /* {{{ */ const char *string) { - size_t src_pos; size_t dst_pos; if ((buffer == NULL) || (string == NULL)) @@ -56,7 +67,7 @@ static int json_escape_string (char *buffer, size_t buffer_size, /* {{{ */ /* Escape special characters */ BUFFER_ADD ('"'); - for (src_pos = 0; string[src_pos] != 0; src_pos++) + for (size_t src_pos = 0; string[src_pos] != 0; src_pos++) { if ((string[src_pos] == '"') || (string[src_pos] == '\\')) @@ -81,7 +92,6 @@ static int values_to_json (char *buffer, size_t buffer_size, /* {{{ */ const data_set_t *ds, const value_list_t *vl, int store_rates) { size_t offset = 0; - size_t i; gauge_t *rates = NULL; memset (buffer, 0, buffer_size); @@ -105,7 +115,7 @@ static int values_to_json (char *buffer, size_t buffer_size, /* {{{ */ } while (0) BUFFER_ADD ("["); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if (i > 0) BUFFER_ADD (","); @@ -160,7 +170,6 @@ static int dstypes_to_json (char *buffer, size_t buffer_size, /* {{{ */ const data_set_t *ds) { size_t offset = 0; - size_t i; memset (buffer, 0, buffer_size); @@ -177,7 +186,7 @@ static int dstypes_to_json (char *buffer, size_t buffer_size, /* {{{ */ } while (0) BUFFER_ADD ("["); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if (i > 0) BUFFER_ADD (","); @@ -197,7 +206,6 @@ static int dsnames_to_json (char *buffer, size_t buffer_size, /* {{{ */ const data_set_t *ds) { size_t offset = 0; - size_t i; memset (buffer, 0, buffer_size); @@ -214,7 +222,7 @@ static int dsnames_to_json (char *buffer, size_t buffer_size, /* {{{ */ } while (0) BUFFER_ADD ("["); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { if (i > 0) BUFFER_ADD (","); @@ -235,7 +243,6 @@ static int meta_data_keys_to_json (char *buffer, size_t buffer_size, /* {{{ */ { size_t offset = 0; int status; - size_t i; buffer[0] = 0; @@ -250,7 +257,7 @@ static int meta_data_keys_to_json (char *buffer, size_t buffer_size, /* {{{ */ offset += ((size_t) status); \ } while (0) - for (i = 0; i < keys_num; ++i) + for (size_t i = 0; i < keys_num; ++i) { int type; char *key = keys[i]; @@ -314,7 +321,6 @@ static int meta_data_to_json (char *buffer, size_t buffer_size, /* {{{ */ char **keys = NULL; size_t keys_num; int status; - size_t i; if ((buffer == NULL) || (buffer_size == 0) || (meta == NULL)) return (EINVAL); @@ -326,7 +332,7 @@ static int meta_data_to_json (char *buffer, size_t buffer_size, /* {{{ */ status = meta_data_keys_to_json (buffer, buffer_size, meta, keys, keys_num); - for (i = 0; i < keys_num; ++i) + for (size_t i = 0; i < keys_num; ++i) sfree (keys[i]); sfree (keys); @@ -498,4 +504,215 @@ int format_json_value_list (char *buffer, /* {{{ */ store_rates, (*ret_buffer_free) - 2)); } /* }}} int format_json_value_list */ +#if HAVE_LIBYAJL +static int json_add_string (yajl_gen g, char const *str) /* {{{ */ +{ + if (str == NULL) + return (int) yajl_gen_null (g); + + return (int) yajl_gen_string (g, (unsigned char const *) str, (unsigned int) strlen (str)); +} /* }}} int json_add_string */ + +#define JSON_ADD(g, str) do { \ + yajl_gen_status status = json_add_string (g, str); \ + if (status != yajl_gen_status_ok) { return -1; } \ +} while (0) + +#define JSON_ADDF(g, format, ...) do { \ + char *str = ssnprintf_alloc (format, __VA_ARGS__); \ + yajl_gen_status status = json_add_string (g, str); \ + free (str); \ + if (status != yajl_gen_status_ok) { return -1; } \ +} while (0) + +static int format_json_meta (yajl_gen g, notification_meta_t *meta) /* {{{ */ +{ + if (meta == NULL) + return 0; + + JSON_ADD (g, meta->name); + switch (meta->type) + { + case NM_TYPE_STRING: + JSON_ADD (g, meta->nm_value.nm_string); + break; + case NM_TYPE_SIGNED_INT: + JSON_ADDF (g, "%"PRIi64, meta->nm_value.nm_signed_int); + break; + case NM_TYPE_UNSIGNED_INT: + JSON_ADDF (g, "%"PRIu64, meta->nm_value.nm_unsigned_int); + break; + case NM_TYPE_DOUBLE: + JSON_ADDF (g, JSON_GAUGE_FORMAT, meta->nm_value.nm_double); + break; + case NM_TYPE_BOOLEAN: + JSON_ADD (g, meta->nm_value.nm_boolean ? "true" : "false"); + break; + default: + ERROR ("format_json_meta: unknown meta data type %d (name \"%s\")", meta->type, meta->name); + yajl_gen_null (g); + } + + return format_json_meta (g, meta->next); +} /* }}} int format_json_meta */ + +static int format_time (yajl_gen g, cdtime_t t) /* {{{ */ +{ + char buffer[RFC3339NANO_SIZE] = ""; + + if (rfc3339nano (buffer, sizeof (buffer), t) != 0) + return -1; + + JSON_ADD (g, buffer); + return 0; +} /* }}} int format_time */ + +static int format_alert (yajl_gen g, notification_t const *n) /* {{{ */ +{ + yajl_gen_array_open (g); + yajl_gen_map_open (g); /* BEGIN alert */ + + /* + * labels + */ + JSON_ADD (g, "labels"); + yajl_gen_map_open (g); /* BEGIN labels */ + + JSON_ADD (g, "alertname"); + if (strncmp (n->plugin, n->type, strlen (n->plugin)) == 0) + JSON_ADDF (g, "collectd_%s", n->type); + else + JSON_ADDF (g, "collectd_%s_%s", n->plugin, n->type); + + JSON_ADD (g, "instance"); + JSON_ADD (g, n->host); + + /* mangling of plugin instance and type instance into labels is copied from + * the Prometheus collectd exporter. */ + if (strlen (n->plugin_instance) > 0) + { + JSON_ADD (g, n->plugin); + JSON_ADD (g, n->plugin_instance); + } + if (strlen (n->type_instance) > 0) + { + if (strlen (n->plugin_instance) > 0) + JSON_ADD (g, "type"); + else + JSON_ADD (g, n->plugin); + JSON_ADD (g, n->type_instance); + } + + JSON_ADD (g, "severity"); + JSON_ADD (g, (n->severity == NOTIF_FAILURE) ? "FAILURE" + : (n->severity == NOTIF_WARNING) ? "WARNING" + : (n->severity == NOTIF_OKAY) ? "OKAY" + : "UNKNOWN"); + + JSON_ADD (g, "service"); + JSON_ADD (g, "collectd"); + + yajl_gen_map_close (g); /* END labels */ + + /* + * annotations + */ + JSON_ADD (g, "annotations"); + yajl_gen_map_open (g); /* BEGIN annotations */ + + JSON_ADD (g, "summary"); + JSON_ADD (g, n->message); + + if (format_json_meta (g, n->meta) != 0) + return -1; + + yajl_gen_map_close (g); /* END annotations */ + + JSON_ADD (g, "startsAt"); + format_time (g, n->time); + + yajl_gen_map_close (g); /* END alert */ + yajl_gen_array_close (g); + + return 0; +} /* }}} format_alert */ + +/* + * Format (prometheus/alertmanager v1): + * + * [{ + * "labels": { + * "alertname": "collectd_cpu", + * "instance": "host.example.com", + * "severity": "FAILURE", + * "service": "collectd", + * "cpu": "0", + * "type": "wait" + * }, + * "annotations": { + * "summary": "...", + * // meta + * }, + * "startsAt": , + * "endsAt": , // not used + * }] + */ +int format_json_notification (char *buffer, size_t buffer_size, /* {{{ */ + notification_t const *n) +{ + yajl_gen g; + unsigned char const *out; +#if HAVE_YAJL_V2 + size_t unused_out_len; +#else + unsigned int unused_out_len; +#endif + + if ((buffer == NULL) || (n == NULL)) + return EINVAL; + +#if HAVE_YAJL_V2 + g = yajl_gen_alloc (NULL); + if (g == NULL) + return -1; +# if COLLECT_DEBUG + yajl_gen_config (g, yajl_gen_beautify, 1); + yajl_gen_config (g, yajl_gen_validate_utf8, 1); +# endif + +#else /* !HAVE_YAJL_V2 */ + yajl_gen_config conf = { 0 }; +# if COLLECT_DEBUG + conf.beautify = 1; + conf.indentString = " "; +# endif + g = yajl_gen_alloc (&conf, NULL); + if (g == NULL) + return -1; +#endif + + if (format_alert (g, n) != 0) + { + yajl_gen_clear (g); + yajl_gen_free (g); + return -1; + } + + /* copy to output buffer */ + yajl_gen_get_buf (g, &out, &unused_out_len); + sstrncpy (buffer, (void *) out, buffer_size); + + yajl_gen_clear (g); + yajl_gen_free (g); + return 0; +} /* }}} format_json_notification */ +#else +int format_json_notification (char *buffer, size_t buffer_size, /* {{{ */ + notification_t const *n) +{ + ERROR ("format_json_notification: Not available (requires libyajl)."); + return ENOTSUP; +} /* }}} int format_json_notification */ +#endif + /* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_format_json.h b/src/utils_format_json.h index f1fbb6e7..a3eda304 100644 --- a/src/utils_format_json.h +++ b/src/utils_format_json.h @@ -28,6 +28,7 @@ #define UTILS_FORMAT_JSON_H 1 #include "collectd.h" + #include "plugin.h" #ifndef JSON_GAUGE_FORMAT @@ -41,5 +42,7 @@ int format_json_value_list (char *buffer, const data_set_t *ds, const value_list_t *vl, int store_rates); int format_json_finalize (char *buffer, size_t *ret_buffer_fill, size_t *ret_buffer_free); +int format_json_notification (char *buffer, size_t buffer_size, + notification_t const *n); #endif /* UTILS_FORMAT_JSON_H */ diff --git a/src/utils_format_json_test.c b/src/utils_format_json_test.c new file mode 100644 index 00000000..1c8a8cea --- /dev/null +++ b/src/utils_format_json_test.c @@ -0,0 +1,170 @@ +/** + * collectd - src/utils_format_json_test.c + * Copyright (C) 2015 Florian octo Forster + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Florian octo Forster + */ + +#include "collectd.h" + +#include "testing.h" +#include "utils_format_json.h" +#include "common.h" /* for STATIC_ARRAY_SIZE */ + +#include +#include +#if HAVE_YAJL_YAJL_VERSION_H +# include +#endif +#if YAJL_MAJOR > 1 +# define HAVE_YAJL_V2 1 +#endif + +typedef struct +{ + char const *key; + char const *value; +} label_t; + +typedef struct +{ + label_t *expected_labels; + size_t expected_labels_num; + + label_t *current_label; +} test_case_t; + +#if HAVE_YAJL_V2 +static int test_map_key (void *ctx, unsigned char const *key, size_t key_len) +#else +static int test_map_key (void *ctx, unsigned char const *key, unsigned int key_len) +#endif +{ + test_case_t *c = ctx; + size_t i; + + c->current_label = NULL; + for (i = 0; i < c->expected_labels_num; i++) + { + label_t *l = c->expected_labels + i; + if ((strlen (l->key) == key_len) + && (strncmp (l->key, (char const *) key, key_len) == 0)) + { + c->current_label = l; + break; + } + } + + return 1; /* continue */ +} + +static int expect_label (char const *name, char const *got, char const *want) +{ + _Bool ok = (strcmp (got, want) == 0); + char msg[1024]; + + if (ok) + snprintf (msg, sizeof (msg), "label[\"%s\"] = \"%s\"", name, got); + else + snprintf (msg, sizeof (msg), "label[\"%s\"] = \"%s\", want \"%s\"", name, got, want); + + OK1 (ok, msg); + return 0; +} + +#if HAVE_YAJL_V2 +static int test_string (void *ctx, unsigned char const *value, size_t value_len) +#else +static int test_string (void *ctx, unsigned char const *value, unsigned int value_len) +#endif +{ + test_case_t *c = ctx; + + if (c->current_label != NULL) + { + label_t *l = c->current_label; + char *got; + int status; + + got = malloc (value_len + 1); + memmove (got, value, value_len); + got[value_len] = 0; + + status = expect_label (l->key, got, l->value); + + free (got); + + if (status != 0) + return 0; /* abort */ + } + + return 1; /* continue */ +} + +static int expect_json_labels (char *json, label_t *labels, size_t labels_num) +{ + yajl_callbacks funcs = { + .yajl_string = test_string, + .yajl_map_key = test_map_key, + }; + + test_case_t c = { labels, labels_num, NULL }; + + yajl_handle hndl; +#if HAVE_YAJL_V2 + CHECK_NOT_NULL (hndl = yajl_alloc (&funcs, /* alloc = */ NULL, &c)); +#else + CHECK_NOT_NULL (hndl = yajl_alloc (&funcs, /* config = */ NULL, /* alloc = */ NULL, &c)); +#endif + OK (yajl_parse (hndl, (unsigned char *) json, strlen (json)) == yajl_status_ok); + + yajl_free (hndl); + return 0; +} + +DEF_TEST(notification) +{ + label_t labels[] = { + {"summary", "this is a message"}, + {"alertname", "collectd_unit_test"}, + {"instance", "example.com"}, + {"service", "collectd"}, + {"unit", "case"}, + }; + + /* 1448284606.125 ^= 1555083754651779072 */ + notification_t n = { NOTIF_WARNING, 1555083754651779072ULL, "this is a message", + "example.com", "unit", "", "test", "case", NULL }; + + char got[1024]; + CHECK_ZERO (format_json_notification (got, sizeof (got), &n)); + // printf ("got = \"%s\";\n", got); + + return expect_json_labels (got, labels, STATIC_ARRAY_SIZE (labels)); +} + +int main (void) +{ + RUN_TEST(notification); + + END_TEST; +} diff --git a/src/utils_format_kairosdb.c b/src/utils_format_kairosdb.c index 6258c492..41055c7b 100644 --- a/src/utils_format_kairosdb.c +++ b/src/utils_format_kairosdb.c @@ -26,6 +26,7 @@ #include "collectd.h" + #include "plugin.h" #include "common.h" @@ -58,7 +59,6 @@ static int kairosdb_escape_string (char *buffer, size_t buffer_size, /* {{{ */ const char *string) { - size_t src_pos; size_t dst_pos; if ((buffer == NULL) || (string == NULL)) @@ -81,7 +81,7 @@ static int kairosdb_escape_string (char *buffer, size_t buffer_size, /* {{{ */ /* Escape special characters */ /* authorize -_. and alpha num but also escapes " */ BUFFER_ADD ('"'); - for (src_pos = 0; string[src_pos] != 0; src_pos++) + for (size_t src_pos = 0; string[src_pos] != 0; src_pos++) { if (isalnum(string[src_pos]) || 0x2d == string[src_pos] || @@ -222,7 +222,6 @@ static int value_list_to_kairosdb (char *buffer, size_t buffer_size, /* {{{ */ char temp[512]; size_t offset = 0; int status; - size_t i; memset (buffer, 0, buffer_size); @@ -244,7 +243,7 @@ static int value_list_to_kairosdb (char *buffer, size_t buffer_size, /* {{{ */ BUFFER_ADD (",\"%s\": %s", (key), temp); \ } while (0) - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { /* All value lists have a leading comma. The first one will be replaced with * a square bracket in `format_kairosdb_finalize'. */ diff --git a/src/utils_format_kairosdb.h b/src/utils_format_kairosdb.h index 23cc862e..764b0b1e 100644 --- a/src/utils_format_kairosdb.h +++ b/src/utils_format_kairosdb.h @@ -28,6 +28,7 @@ #define UTILS_FORMAT_KAIROSDB_H 1 #include "collectd.h" + #include "plugin.h" #ifndef JSON_GAUGE_FORMAT diff --git a/src/utils_latency.c b/src/utils_latency.c index 41af00cb..c67752a3 100644 --- a/src/utils_latency.c +++ b/src/utils_latency.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "utils_latency.h" #include "common.h" @@ -96,9 +97,8 @@ static void change_bin_width (latency_counter_t *lc, cdtime_t latency) /* {{{ */ if (lc->num > 0) // if the histogram has data then iterate else skip { double width_change_ratio = ((double) old_bin_width) / ((double) new_bin_width); - size_t i; - for (i = 0; i < HISTOGRAM_NUM_BINS; i++) + for (size_t i = 0; i < HISTOGRAM_NUM_BINS; i++) { size_t new_bin = (size_t) (((double) i) * width_change_ratio); if (i == new_bin) @@ -125,8 +125,8 @@ latency_counter_t *latency_counter_create (void) /* {{{ */ if (lc == NULL) return (NULL); - latency_counter_reset (lc); lc->bin_width = HISTOGRAM_DEFAULT_BIN_WIDTH; + latency_counter_reset (lc); return (lc); } /* }}} latency_counter_t *latency_counter_create */ @@ -175,6 +175,28 @@ void latency_counter_reset (latency_counter_t *lc) /* {{{ */ return; cdtime_t bin_width = lc->bin_width; + cdtime_t max_bin = (lc->max - 1) / lc->bin_width; + +/* + If max latency is REDUCE_THRESHOLD times less than histogram's range, + then cut it in half. REDUCE_THRESHOLD must be >= 2. + Value of 4 is selected to reduce frequent changes of bin width. +*/ +#define REDUCE_THRESHOLD 4 + if ((lc->num > 0) && (lc->bin_width >= HISTOGRAM_DEFAULT_BIN_WIDTH * 2) + && (max_bin < HISTOGRAM_NUM_BINS / REDUCE_THRESHOLD)) + { + /* new bin width will be the previous power of 2 */ + bin_width = bin_width / 2; + + DEBUG("utils_latency: latency_counter_reset: max_latency = %.3f; " + "max_bin = %"PRIu64"; old_bin_width = %.3f; new_bin_width = %.3f;", + CDTIME_T_TO_DOUBLE (lc->max), + max_bin, + CDTIME_T_TO_DOUBLE (lc->bin_width), + CDTIME_T_TO_DOUBLE (bin_width)); + } + memset (lc, 0, sizeof (*lc)); /* preserve bin width */ diff --git a/src/utils_latency.h b/src/utils_latency.h index 2cfa71b6..cb56b082 100644 --- a/src/utils_latency.h +++ b/src/utils_latency.h @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "utils_time.h" struct latency_counter_s; diff --git a/src/utils_latency_test.c b/src/utils_latency_test.c index f275813d..9c3b0add 100644 --- a/src/utils_latency_test.c +++ b/src/utils_latency_test.c @@ -28,6 +28,7 @@ #include "common.h" /* for STATIC_ARRAY_SIZE */ #include "collectd.h" + #include "testing.h" #include "utils_time.h" #include "utils_latency.h" @@ -49,12 +50,11 @@ DEF_TEST(simple) { 99, 0.3, 99, 103, 20.6}, /* { -1, 0.3, 99, 103, 20.6}, see issue #1139 */ }; - size_t i; latency_counter_t *l; CHECK_NOT_NULL (l = latency_counter_create ()); - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { printf ("# case %zu: DOUBLE_TO_CDTIME_T(%g) = %"PRIu64"\n", i, cases[i].val, DOUBLE_TO_CDTIME_T (cases[i].val)); latency_counter_add (l, DOUBLE_TO_CDTIME_T (cases[i].val)); @@ -71,12 +71,11 @@ DEF_TEST(simple) DEF_TEST(percentile) { - size_t i; latency_counter_t *l; CHECK_NOT_NULL (l = latency_counter_create ()); - for (i = 0; i < 100; i++) { + for (size_t i = 0; i < 100; i++) { latency_counter_add (l, TIME_T_TO_CDTIME_T (((time_t) i) + 1)); } diff --git a/src/utils_mount.c b/src/utils_mount.c index a36882c4..b8dabb17 100644 --- a/src/utils_mount.c +++ b/src/utils_mount.c @@ -32,6 +32,7 @@ #endif #include "collectd.h" + #include "utils_mount.h" #include "common.h" /* sstrncpy() et alii */ @@ -215,7 +216,6 @@ uuidcache_init(void) FILE *procpt; char uuid[16], *label = NULL; char device[110]; - int firstPass; int handleOnFirst; if(uuidCache) { @@ -227,7 +227,7 @@ uuidcache_init(void) return; } - for(firstPass = 1; firstPass >= 0; firstPass--) { + for(int firstPass = 1; firstPass >= 0; firstPass--) { fseek(procpt, 0, SEEK_SET); while(fgets(line, sizeof(line), procpt)) { if(sscanf(line, " %d %d %d %[^\n ]", @@ -317,14 +317,13 @@ static char * get_spec_by_uuid(const char *s) { char uuid[16]; - int i; if(strlen(s) != 36 || s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-') { goto bad_uuid; } - for(i=0; i<16; i++) { + for(int i=0; i<16; i++) { if(*s == '-') { s++; } @@ -381,7 +380,6 @@ static char *get_device_name(const char *optstr) static cu_mount_t *cu_mount_listmntent (void) { cu_mount_t *last = *list; - struct tabmntent *p; struct mntent *mnt; struct tabmntent *mntlist; @@ -393,7 +391,7 @@ static cu_mount_t *cu_mount_listmntent (void) #endif /* COLLECT_DEBUG */ } - for(p = mntlist; p; p = p->next) { + for(struct tabmntent *p = mntlist; p; p = p->next) { char *loop = NULL, *device = NULL; mnt = p->ment; @@ -450,7 +448,6 @@ static cu_mount_t *cu_mount_getfsstat (void) STRUCT_STATFS *buf; int num; - int i; cu_mount_t *first = NULL; cu_mount_t *last = NULL; @@ -483,7 +480,7 @@ static cu_mount_t *cu_mount_getfsstat (void) return (NULL); } - for (i = 0; i < num; i++) + for (int i = 0; i < num; i++) { if ((new = calloc (1, sizeof (*new))) == NULL) break; @@ -740,10 +737,9 @@ cu_mount_t *cu_mount_getlist(cu_mount_t **list) void cu_mount_freelist (cu_mount_t *list) { - cu_mount_t *this; cu_mount_t *next; - for (this = list; this != NULL; this = next) + for (cu_mount_t *this = list; this != NULL; this = next) { next = this->next; diff --git a/src/utils_mount_test.c b/src/utils_mount_test.c index dc6f79f9..c084debe 100644 --- a/src/utils_mount_test.c +++ b/src/utils_mount_test.c @@ -25,6 +25,7 @@ */ #include "collectd.h" + #include "common.h" #include "testing.h" #include "utils_mount.h" diff --git a/src/utils_parse_option.c b/src/utils_parse_option.c index f3ec71ae..3652a666 100644 --- a/src/utils_parse_option.c +++ b/src/utils_parse_option.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "utils_parse_option.h" int parse_string (char **ret_buffer, char **ret_string) diff --git a/src/utils_rrdcreate.c b/src/utils_rrdcreate.c index 6da5167d..884de8f9 100644 --- a/src/utils_rrdcreate.c +++ b/src/utils_rrdcreate.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "utils_rrdcreate.h" @@ -82,9 +83,7 @@ static pthread_mutex_t async_creation_lock = PTHREAD_MUTEX_INITIALIZER; */ static void rra_free (int rra_num, char **rra_def) /* {{{ */ { - int i; - - for (i = 0; i < rra_num; i++) + for (int i = 0; i < rra_num; i++) { sfree (rra_def[i]); } @@ -99,8 +98,7 @@ static void srrd_create_args_destroy (srrd_create_args_t *args) sfree (args->filename); if (args->argv != NULL) { - int i; - for (i = 0; i < args->argc; i++) + for (int i = 0; i < args->argc; i++) sfree (args->argv[i]); sfree (args->argv); } @@ -172,7 +170,6 @@ static int rra_get (char ***ret, const value_list_t *vl, /* {{{ */ int cdp_num; int cdp_len; - int i, j; /* The stepsize we use here: If it is user-set, use it. If not, use the * interval of the value-list. */ @@ -220,7 +217,7 @@ static int rra_get (char ***ret, const value_list_t *vl, /* {{{ */ rra_num = 0; cdp_len = 0; - for (i = 0; i < rts_num; i++) + for (int i = 0; i < rts_num; i++) { int span = rts[i]; @@ -236,7 +233,7 @@ static int rra_get (char ***ret, const value_list_t *vl, /* {{{ */ cdp_num = (int) ceil (((double) span) / ((double) (cdp_len * ss))); - for (j = 0; j < rra_types_num; j++) + for (int j = 0; j < rra_types_num; j++) { char buffer[128]; int status; @@ -269,9 +266,7 @@ static int rra_get (char ***ret, const value_list_t *vl, /* {{{ */ static void ds_free (int ds_num, char **ds_def) /* {{{ */ { - int i; - - for (i = 0; i < ds_num; i++) + for (int i = 0; i < ds_num; i++) if (ds_def[i] != NULL) free (ds_def[i]); free (ds_def); diff --git a/src/utils_vl_lookup.c b/src/utils_vl_lookup.c index 6081c90e..2ca9ddf8 100644 --- a/src/utils_vl_lookup.c +++ b/src/utils_vl_lookup.c @@ -26,6 +26,7 @@ #include "collectd.h" + #include #include diff --git a/src/utils_vl_lookup_test.c b/src/utils_vl_lookup_test.c index 668a8d0c..44660638 100644 --- a/src/utils_vl_lookup_test.c +++ b/src/utils_vl_lookup_test.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "testing.h" #include "utils_vl_lookup.h" diff --git a/src/uuid.c b/src/uuid.c index 3836e521..89766268 100644 --- a/src/uuid.c +++ b/src/uuid.c @@ -1,6 +1,7 @@ /** * collectd - src/uuid.c * Copyright (C) 2007 Red Hat Inc. + * Copyright (C) 2015 Ruben Kerkhof * * 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 @@ -24,10 +25,15 @@ **/ #include "collectd.h" + #include "common.h" #include "configfile.h" #include "plugin.h" +#if HAVE_SYS_SYSCTL_H +#include +#endif + #if HAVE_LIBHAL_H #include #endif @@ -47,18 +53,20 @@ looks_like_a_uuid (const char *uuid) { int len; - if (!uuid) return 0; + if (!uuid) + return (0); len = strlen (uuid); if (len < UUID_PRINTABLE_COMPACT_LENGTH) - return 0; + return (0); while (*uuid) { - if (!isxdigit ((int)*uuid) && *uuid != '-') return 0; + if (!isxdigit ((int)*uuid) && *uuid != '-') + return (0); uuid++; } - return 1; + return (1); } static char * @@ -86,26 +94,52 @@ uuid_parse_dmidecode(FILE *file) if (!looks_like_a_uuid (fields[1])) continue; - return strdup (fields[1]); + return (strdup (fields[1])); } - return NULL; + return (NULL); } static char * uuid_get_from_dmidecode(void) { - FILE *dmidecode = popen("dmidecode 2>/dev/null", "r"); + FILE *dmidecode = popen("dmidecode -t system 2>/dev/null", "r"); char *uuid; - if (!dmidecode) { - return NULL; - } + if (!dmidecode) + return (NULL); uuid = uuid_parse_dmidecode(dmidecode); pclose(dmidecode); - return uuid; + return (uuid); +} + +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) +static char * +uuid_get_from_sysctlbyname(const char *name) +{ + char uuid[UUID_PRINTABLE_NORMAL_LENGTH + 1]; + size_t len = sizeof (uuid); + if (sysctlbyname(name, &uuid, &len, NULL, 0) == -1) + return NULL; + return (strdup (uuid)); +} +#elif defined(__OpenBSD__) +static char * +uuid_get_from_sysctl(void) +{ + char uuid[UUID_PRINTABLE_NORMAL_LENGTH + 1]; + size_t len = sizeof (uuid); + int mib[2]; + + mib[0] = CTL_HW; + mib[1] = HW_UUID; + + if (sysctl(mib, 2, uuid, &len, NULL, 0) == -1) + return NULL; + return (strdup (uuid)); } +#endif #if HAVE_LIBHAL_H @@ -122,50 +156,42 @@ uuid_get_from_hal(void) dbus_error_init(&error); - if (!(con = dbus_bus_get(DBUS_BUS_SYSTEM, &error)) ) { + if (!(con = dbus_bus_get(DBUS_BUS_SYSTEM, &error))) goto bailout_nobus; - } ctx = libhal_ctx_new(); libhal_ctx_set_dbus_connection(ctx, con); - if (!libhal_ctx_init(ctx, &error)) { + if (!libhal_ctx_init(ctx, &error)) goto bailout; - } if (!libhal_device_property_exists(ctx, UUID_PATH, UUID_PROPERTY, - &error)) { + &error)) goto bailout; - } char *uuid = libhal_device_get_property_string(ctx, UUID_PATH, UUID_PROPERTY, &error); - if (looks_like_a_uuid (uuid)) { - return uuid; - } + if (looks_like_a_uuid (uuid)) + return (uuid); bailout: { DBusError ctxerror; dbus_error_init(&ctxerror); - if (!(libhal_ctx_shutdown(ctx, &ctxerror))) { + if (!(libhal_ctx_shutdown(ctx, &ctxerror))) dbus_error_free(&ctxerror); - } } libhal_ctx_free(ctx); - //dbus_connection_unref(con); bailout_nobus: - if (dbus_error_is_set(&error)) { - /*printf("Error %s\n", error.name);*/ + if (dbus_error_is_set(&error)) dbus_error_free(&error); - } - return NULL; + return (NULL); } #endif @@ -177,16 +203,16 @@ uuid_get_from_file(const char *path) file = fopen (path, "r"); if (file == NULL) - return NULL; + return (NULL); if (!fgets(uuid, sizeof(uuid), file)) { fclose(file); - return NULL; + return (NULL); } fclose(file); strstripnewline (uuid); - return strdup (uuid); + return (strdup (uuid)); } static char * @@ -195,25 +221,40 @@ uuid_get_local(void) char *uuid; /* Check /etc/uuid / UUIDFile before any other method. */ - if ((uuid = uuid_get_from_file(uuidfile ? uuidfile : "/etc/uuid")) != NULL){ - return uuid; - } + if ((uuid = uuid_get_from_file(uuidfile ? uuidfile : "/etc/uuid")) != NULL) + return (uuid); + +#if defined(__APPLE__) + if ((uuid = uuid_get_from_sysctlbyname("kern.uuid")) != NULL) + return (uuid); +#elif defined(__FreeBSD__) + if ((uuid = uuid_get_from_sysctlbyname("kern.hostuuid")) != NULL) + return (uuid); +#elif defined(__NetBSD__) + if ((uuid = uuid_get_from_sysctlbyname("machdep.dmi.system-uuid")) != NULL) + return (uuid); +#elif defined(__OpenBSD__) + if ((uuid = uuid_get_from_sysctl()) != NULL) + return (uuid); +#elif defined(__linux__) + if ((uuid = uuid_get_from_file("/sys/class/dmi/id/product_uuid")) != NULL) + return (uuid); +#endif #if HAVE_LIBHAL_H - if ((uuid = uuid_get_from_hal()) != NULL) { - return uuid; - } + if ((uuid = uuid_get_from_hal()) != NULL) + return (uuid); #endif - if ((uuid = uuid_get_from_dmidecode()) != NULL) { - return uuid; - } + if ((uuid = uuid_get_from_dmidecode()) != NULL) + return (uuid); - if ((uuid = uuid_get_from_file("/sys/hypervisor/uuid")) != NULL) { - return uuid; - } +#if defined(__linux__) + if ((uuid = uuid_get_from_file("/sys/hypervisor/uuid")) != NULL) + return (uuid); +#endif - return NULL; + return (NULL); } static int @@ -222,14 +263,13 @@ uuid_config (const char *key, const char *value) if (strcasecmp (key, "UUIDFile") == 0) { char *tmp = strdup (value); if (tmp == NULL) - return -1; + return (-1); sfree (uuidfile); uuidfile = tmp; - } else { - return 1; + return (0); } - return 0; + return (1); } static int @@ -240,11 +280,11 @@ uuid_init (void) if (uuid) { sstrncpy (hostname_g, uuid, DATA_MAX_NAME_LEN); sfree (uuid); - return 0; + return (0); } WARNING ("uuid: could not read UUID using any known method"); - return 0; + return (0); } void module_register (void) diff --git a/src/varnish.c b/src/varnish.c index 771d4a41..bc6d294a 100644 --- a/src/varnish.c +++ b/src/varnish.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -969,7 +970,6 @@ static int varnish_config_instance (const oconfig_item_t *ci) /* {{{ */ user_config_t *conf; user_data_t ud; char callback_name[DATA_MAX_NAME_LEN]; - int i; conf = calloc (1, sizeof (*conf)); if (conf == NULL) @@ -1004,7 +1004,7 @@ static int varnish_config_instance (const oconfig_item_t *ci) /* {{{ */ return (EINVAL); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -1148,9 +1148,7 @@ static int varnish_config_instance (const oconfig_item_t *ci) /* {{{ */ static int varnish_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/virt.c b/src/virt.c index 16bb77b1..7df51c13 100644 --- a/src/virt.c +++ b/src/virt.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -154,7 +155,7 @@ static int refresh_lists (void); static void init_value_list (value_list_t *vl, virDomainPtr dom) { - int i, n; + int n; const char *name; char uuid[VIR_UUID_STRING_BUFLEN]; @@ -163,7 +164,7 @@ init_value_list (value_list_t *vl, virDomainPtr dom) vl->host[0] = '\0'; /* Construct the hostname field according to HostnameFormat. */ - for (i = 0; i < HF_MAX_FIELDS; ++i) { + for (int i = 0; i < HF_MAX_FIELDS; ++i) { if (hostname_format[i] == hf_none) continue; @@ -194,7 +195,7 @@ init_value_list (value_list_t *vl, virDomainPtr dom) vl->host[sizeof (vl->host) - 1] = '\0'; /* Construct the plugin instance field according to PluginInstanceFormat. */ - for (i = 0; i < PLGINST_MAX_FIELDS; ++i) { + for (int i = 0; i < PLGINST_MAX_FIELDS; ++i) { if (plugin_instance_format[i] == plginst_none) continue; @@ -394,7 +395,7 @@ lv_config (const char *key, const char *value) if (strcasecmp (key, "HostnameFormat") == 0) { char *value_copy; char *fields[HF_MAX_FIELDS]; - int i, n; + int n; value_copy = strdup (value); if (value_copy == NULL) { @@ -409,7 +410,7 @@ lv_config (const char *key, const char *value) return -1; } - for (i = 0; i < n; ++i) { + for (int i = 0; i < n; ++i) { if (strcasecmp (fields[i], "hostname") == 0) hostname_format[i] = hf_hostname; else if (strcasecmp (fields[i], "name") == 0) @@ -424,7 +425,7 @@ lv_config (const char *key, const char *value) } sfree (value_copy); - for (i = n; i < HF_MAX_FIELDS; ++i) + for (int i = n; i < HF_MAX_FIELDS; ++i) hostname_format[i] = hf_none; return 0; @@ -433,7 +434,7 @@ lv_config (const char *key, const char *value) if (strcasecmp (key, "PluginInstanceFormat") == 0) { char *value_copy; char *fields[PLGINST_MAX_FIELDS]; - int i, n; + int n; value_copy = strdup (value); if (value_copy == NULL) { @@ -448,7 +449,7 @@ lv_config (const char *key, const char *value) return -1; } - for (i = 0; i < n; ++i) { + for (int i = 0; i < n; ++i) { if (strcasecmp (fields[i], "none") == 0) { plugin_instance_format[i] = plginst_none; break; @@ -464,7 +465,7 @@ lv_config (const char *key, const char *value) } sfree (value_copy); - for (i = n; i < PLGINST_MAX_FIELDS; ++i) + for (int i = n; i < PLGINST_MAX_FIELDS; ++i) plugin_instance_format[i] = plginst_none; return 0; @@ -492,7 +493,6 @@ static int lv_read (void) { time_t t; - int i; if (conn == NULL) { /* `conn_string == NULL' is acceptable. */ @@ -522,25 +522,24 @@ lv_read (void) } #if 0 - for (i = 0; i < nr_domains; ++i) + for (int i = 0; i < nr_domains; ++i) fprintf (stderr, "domain %s\n", virDomainGetName (domains[i])); - for (i = 0; i < nr_block_devices; ++i) + for (int i = 0; i < nr_block_devices; ++i) fprintf (stderr, "block device %d %s:%s\n", i, virDomainGetName (block_devices[i].dom), block_devices[i].path); - for (i = 0; i < nr_interface_devices; ++i) + for (int i = 0; i < nr_interface_devices; ++i) fprintf (stderr, "interface device %d %s:%s\n", i, virDomainGetName (interface_devices[i].dom), interface_devices[i].path); #endif /* Get CPU usage, memory, VCPU usage for each domain. */ - for (i = 0; i < nr_domains; ++i) { + for (int i = 0; i < nr_domains; ++i) { virDomainInfo info; virVcpuInfoPtr vinfo = NULL; virDomainMemoryStatPtr minfo = NULL; int status; - int j; status = virDomainGetInfo (domains[i], &info); if (status != 0) @@ -575,7 +574,7 @@ lv_read (void) continue; } - for (j = 0; j < info.nrVirtCpu; ++j) + for (int j = 0; j < info.nrVirtCpu; ++j) vcpu_submit (vinfo[j].cpuTime, domains[i], vinfo[j].number, "virt_vcpu"); @@ -596,7 +595,7 @@ lv_read (void) continue; } - for (j = 0; j < status; j++) { + for (int j = 0; j < status; j++) { memory_stats_submit ((gauge_t) minfo[j].val * 1024, domains[i], minfo[j].tag); } @@ -605,7 +604,7 @@ lv_read (void) /* Get block device stats for each domain. */ - for (i = 0; i < nr_block_devices; ++i) { + for (int i = 0; i < nr_block_devices; ++i) { struct _virDomainBlockStats stats; if (virDomainBlockStats (block_devices[i].dom, block_devices[i].path, @@ -624,7 +623,7 @@ lv_read (void) } /* for (nr_block_devices) */ /* Get interface stats for each domain. */ - for (i = 0; i < nr_interface_devices; ++i) { + for (int i = 0; i < nr_interface_devices; ++i) { struct _virDomainInterfaceStats stats; char *display_name = NULL; @@ -682,7 +681,6 @@ refresh_lists (void) } if (n > 0) { - int i; int *domids; /* Get list of domains. */ @@ -704,14 +702,13 @@ refresh_lists (void) free_domains (); /* Fetch each domain and add it to the list, unless ignore. */ - for (i = 0; i < n; ++i) { + for (int i = 0; i < n; ++i) { virDomainPtr dom = NULL; const char *name; char *xml = NULL; xmlDocPtr xml_doc = NULL; xmlXPathContextPtr xpath_ctx = NULL; xmlXPathObjectPtr xpath_obj = NULL; - int j; dom = virDomainLookupByID (conn, domids[i]); if (dom == NULL) { @@ -758,7 +755,7 @@ refresh_lists (void) xpath_obj->nodesetval == NULL) goto cont; - for (j = 0; j < xpath_obj->nodesetval->nodeNr; ++j) { + for (int j = 0; j < xpath_obj->nodesetval->nodeNr; ++j) { xmlNodePtr node; char *path = NULL; @@ -787,16 +784,15 @@ refresh_lists (void) xmlNodeSetPtr xml_interfaces = xpath_obj->nodesetval; - for (j = 0; j < xml_interfaces->nodeNr; ++j) { + for (int j = 0; j < xml_interfaces->nodeNr; ++j) { char *path = NULL; char *address = NULL; xmlNodePtr xml_interface; xml_interface = xml_interfaces->nodeTab[j]; if (!xml_interface) continue; - xmlNodePtr child = NULL; - for (child = xml_interface->children; child; child = child->next) { + for (xmlNodePtr child = xml_interface->children; child; child = child->next) { if (child->type != XML_ELEMENT_NODE) continue; if (xmlStrEqual(child->name, (const xmlChar *) "target")) { @@ -835,10 +831,8 @@ refresh_lists (void) static void free_domains (void) { - int i; - if (domains) { - for (i = 0; i < nr_domains; ++i) + for (int i = 0; i < nr_domains; ++i) virDomainFree (domains[i]); sfree (domains); } @@ -868,10 +862,8 @@ add_domain (virDomainPtr dom) static void free_block_devices (void) { - int i; - if (block_devices) { - for (i = 0; i < nr_block_devices; ++i) + for (int i = 0; i < nr_block_devices; ++i) sfree (block_devices[i].path); sfree (block_devices); } @@ -908,10 +900,8 @@ add_block_device (virDomainPtr dom, const char *path) static void free_interface_devices (void) { - int i; - if (interface_devices) { - for (i = 0; i < nr_interface_devices; ++i) { + for (int i = 0; i < nr_interface_devices; ++i) { sfree (interface_devices[i].path); sfree (interface_devices[i].address); sfree (interface_devices[i].number); diff --git a/src/vmem.c b/src/vmem.c index f5017068..46ffa13b 100644 --- a/src/vmem.c +++ b/src/vmem.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/vserver.c b/src/vserver.c index 1d957eb3..a7305936 100644 --- a/src/vserver.c +++ b/src/vserver.c @@ -27,6 +27,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/wireless.c b/src/wireless.c index 8445af22..b9984625 100644 --- a/src/wireless.c +++ b/src/wireless.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/write_graphite.c b/src/write_graphite.c index 25c7a637..77003f1c 100644 --- a/src/write_graphite.c +++ b/src/write_graphite.c @@ -43,6 +43,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -193,9 +194,7 @@ static int wg_flush_nolock (cdtime_t timeout, struct wg_callback *cb) static int wg_callback_init (struct wg_callback *cb) { - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; cdtime_t now; int status; @@ -211,18 +210,16 @@ static int wg_callback_init (struct wg_callback *cb) return (EAGAIN); cb->last_connect_time = now; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG + }; if (0 == strcasecmp ("tcp", cb->protocol)) ai_hints.ai_socktype = SOCK_STREAM; else ai_hints.ai_socktype = SOCK_DGRAM; - ai_list = NULL; - status = getaddrinfo (cb->node, cb->service, &ai_hints, &ai_list); if (status != 0) { @@ -232,7 +229,7 @@ static int wg_callback_init (struct wg_callback *cb) } assert (ai_list != NULL); - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { cb->sock_fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); @@ -243,6 +240,8 @@ static int wg_callback_init (struct wg_callback *cb) continue; } + set_sock_opts (cb->sock_fd); + status = connect (cb->sock_fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen); if (status != 0) { @@ -478,7 +477,6 @@ static int wg_config_node (oconfig_item_t *ci) struct wg_callback *cb; user_data_t user_data = { 0 }; char callback_name[DATA_MAX_NAME_LEN]; - int i; int status = 0; cb = calloc (1, sizeof (*cb)); @@ -515,7 +513,7 @@ static int wg_config_node (oconfig_item_t *ci) pthread_mutex_init (&cb->send_lock, /* attr = */ NULL); C_COMPLAIN_INIT (&cb->init_complaint); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -591,9 +589,7 @@ static int wg_config_node (oconfig_item_t *ci) static int wg_config (oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/write_http.c b/src/write_http.c index 3c2f7248..d8d8c34e 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -24,6 +24,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "utils_format_json.h" @@ -64,6 +65,8 @@ struct wh_callback_s #define WH_FORMAT_JSON 1 #define WH_FORMAT_KAIROSDB 2 int format; + _Bool send_metrics; + _Bool send_notifications; CURL *curl; struct curl_slist *headers; @@ -94,6 +97,9 @@ static void wh_log_http_error (wh_callback_t *cb) static void wh_reset_buffer (wh_callback_t *cb) /* {{{ */ { + if ((cb == NULL) || (cb->send_buffer == NULL)) + return; + memset (cb->send_buffer, 0, cb->send_buffer_size); cb->send_buffer_free = cb->send_buffer_size; cb->send_buffer_fill = 0; @@ -107,11 +113,12 @@ static void wh_reset_buffer (wh_callback_t *cb) /* {{{ */ } } /* }}} wh_reset_buffer */ -static int wh_send_buffer (wh_callback_t *cb) /* {{{ */ +/* must hold cb->send_lock when calling */ +static int wh_post_nolock (wh_callback_t *cb, char const *data) /* {{{ */ { int status = 0; - curl_easy_setopt (cb->curl, CURLOPT_POSTFIELDS, cb->send_buffer); + curl_easy_setopt (cb->curl, CURLOPT_POSTFIELDS, data); status = curl_easy_perform (cb->curl); wh_log_http_error (cb); @@ -123,7 +130,7 @@ static int wh_send_buffer (wh_callback_t *cb) /* {{{ */ status, cb->curl_errbuf); } return (status); -} /* }}} wh_send_buffer */ +} /* }}} wh_post_nolock */ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ { @@ -243,7 +250,7 @@ static int wh_flush_nolock (cdtime_t timeout, wh_callback_t *cb) /* {{{ */ return (0); } - status = wh_send_buffer (cb); + status = wh_post_nolock (cb, cb->send_buffer); wh_reset_buffer (cb); } else if (cb->format == WH_FORMAT_JSON || cb->format == WH_FORMAT_KAIROSDB) @@ -265,7 +272,7 @@ static int wh_flush_nolock (cdtime_t timeout, wh_callback_t *cb) /* {{{ */ return (status); } - status = wh_send_buffer (cb); + status = wh_post_nolock (cb, cb->send_buffer); wh_reset_buffer (cb); } else @@ -293,15 +300,11 @@ static int wh_flush (cdtime_t timeout, /* {{{ */ pthread_mutex_lock (&cb->send_lock); - if (cb->curl == NULL) + if (wh_callback_init (cb) != 0) { - status = wh_callback_init (cb); - if (status != 0) - { - ERROR ("write_http plugin: wh_callback_init failed."); - pthread_mutex_unlock (&cb->send_lock); - return (-1); - } + ERROR ("write_http plugin: wh_callback_init failed."); + pthread_mutex_unlock (&cb->send_lock); + return (-1); } status = wh_flush_nolock (timeout, cb); @@ -319,7 +322,8 @@ static void wh_callback_free (void *data) /* {{{ */ cb = data; - wh_flush_nolock (/* timeout = */ 0, cb); + if (cb->send_buffer != NULL) + wh_flush_nolock (/* timeout = */ 0, cb); if (cb->curl != NULL) { @@ -393,16 +397,11 @@ static int wh_write_command (const data_set_t *ds, const value_list_t *vl, /* {{ } pthread_mutex_lock (&cb->send_lock); - - if (cb->curl == NULL) + if (wh_callback_init (cb) != 0) { - status = wh_callback_init (cb); - if (status != 0) - { - ERROR ("write_http plugin: wh_callback_init failed."); - pthread_mutex_unlock (&cb->send_lock); - return (-1); - } + ERROR ("write_http plugin: wh_callback_init failed."); + pthread_mutex_unlock (&cb->send_lock); + return (-1); } if (command_len >= cb->send_buffer_free) @@ -441,16 +440,11 @@ static int wh_write_json (const data_set_t *ds, const value_list_t *vl, /* {{{ * int status; pthread_mutex_lock (&cb->send_lock); - - if (cb->curl == NULL) + if (wh_callback_init (cb) != 0) { - status = wh_callback_init (cb); - if (status != 0) - { - ERROR ("write_http plugin: wh_callback_init failed."); - pthread_mutex_unlock (&cb->send_lock); - return (-1); - } + ERROR ("write_http plugin: wh_callback_init failed."); + pthread_mutex_unlock (&cb->send_lock); + return (-1); } status = format_json_value_list (cb->send_buffer, @@ -553,6 +547,7 @@ static int wh_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ return (-EINVAL); cb = user_data->data; + assert (cb->send_metrics); switch(cb->format) { case WH_FORMAT_JSON: @@ -568,6 +563,39 @@ static int wh_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ return (status); } /* }}} int wh_write */ +static int wh_notify (notification_t const *n, user_data_t *ud) /* {{{ */ +{ + wh_callback_t *cb; + char alert[4096]; + int status; + + if ((ud == NULL) || (ud->data == NULL)) + return (EINVAL); + + cb = ud->data; + assert (cb->send_notifications); + + status = format_json_notification (alert, sizeof (alert), n); + if (status != 0) + { + ERROR ("write_http plugin: formatting notification failed"); + return status; + } + + pthread_mutex_lock (&cb->send_lock); + if (wh_callback_init (cb) != 0) + { + ERROR ("write_http plugin: wh_callback_init failed."); + pthread_mutex_unlock (&cb->send_lock); + return (-1); + } + + status = wh_post_nolock (cb, alert); + pthread_mutex_unlock (&cb->send_lock); + + return (status); +} /* }}} int wh_notify */ + static int config_set_format (wh_callback_t *cb, /* {{{ */ oconfig_item_t *ci) { @@ -624,7 +652,6 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ user_data_t user_data = { 0 }; char callback_name[DATA_MAX_NAME_LEN]; int status = 0; - int i; cb = calloc (1, sizeof (*cb)); if (cb == NULL) @@ -640,7 +667,8 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ cb->timeout = 0; cb->log_http_error = 0; cb->headers = NULL; - + cb->send_metrics = 1; + cb->send_notifications = 0; pthread_mutex_init (&cb->send_lock, /* attr = */ NULL); @@ -650,7 +678,7 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ if (strcasecmp ("URL", ci->key) == 0) cf_util_get_string (ci, &cb->location); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -709,6 +737,10 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ } else if (strcasecmp ("Format", child->key) == 0) status = config_set_format (cb, child); + else if (strcasecmp ("Metrics", child->key) == 0) + cf_util_get_boolean (child, &cb->send_metrics); + else if (strcasecmp ("Notifications", child->key) == 0) + cf_util_get_boolean (child, &cb->send_notifications); else if (strcasecmp ("StoreRates", child->key) == 0) status = cf_util_get_boolean (child, &cb->store_rates); else if (strcasecmp ("BufferSize", child->key) == 0) @@ -746,6 +778,14 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ return (-1); } + if (!cb->send_metrics && !cb->send_notifications) + { + ERROR ("write_http plugin: Neither metrics nor notifications " + "are enabled for \"%s\".", cb->name); + wh_callback_free (cb); + return (-1); + } + if (cb->low_speed_limit > 0) cb->low_speed_time = CDTIME_T_TO_TIME_T(plugin_get_interval()); @@ -777,16 +817,27 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ plugin_register_flush (callback_name, wh_flush, &user_data); user_data.free_func = wh_callback_free; - plugin_register_write (callback_name, wh_write, &user_data); + + if (cb->send_metrics) + { + plugin_register_write (callback_name, wh_write, &user_data); + user_data.free_func = NULL; + + plugin_register_flush (callback_name, wh_flush, &user_data); + } + + if (cb->send_notifications) + { + plugin_register_notification (callback_name, wh_notify, &user_data); + user_data.free_func = NULL; + } return (0); } /* }}} int wh_config_node */ static int wh_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/write_kafka.c b/src/write_kafka.c index 6b5bc398..6364c6c3 100644 --- a/src/write_kafka.c +++ b/src/write_kafka.c @@ -25,6 +25,7 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -240,7 +241,6 @@ static void kafka_topic_context_free(void *p) /* {{{ */ static void kafka_config_topic(rd_kafka_conf_t *conf, oconfig_item_t *ci) /* {{{ */ { int status; - int i; struct kafka_topic_context *tctx; char *key = NULL; char *val; @@ -292,7 +292,7 @@ static void kafka_config_topic(rd_kafka_conf_t *conf, oconfig_item_t *ci) /* {{{ goto errout; } - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { /* * The code here could be simplified but makes room * for easy adding of new options later on. @@ -411,7 +411,6 @@ static void kafka_config_topic(rd_kafka_conf_t *conf, oconfig_item_t *ci) /* {{{ static int kafka_config(oconfig_item_t *ci) /* {{{ */ { - int i; oconfig_item_t *child; rd_kafka_conf_t *conf; rd_kafka_conf_res_t ret; @@ -421,7 +420,7 @@ static int kafka_config(oconfig_item_t *ci) /* {{{ */ WARNING("cannot allocate kafka configuration."); return -1; } - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { child = &ci->children[i]; if (strcasecmp("Topic", child->key) == 0) { diff --git a/src/write_log.c b/src/write_log.c index 25ff55e2..3c599784 100644 --- a/src/write_log.c +++ b/src/write_log.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" diff --git a/src/write_mongodb.c b/src/write_mongodb.c index fb80ba28..8fb13c34 100644 --- a/src/write_mongodb.c +++ b/src/write_mongodb.c @@ -29,6 +29,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -75,7 +76,6 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */ { bson *ret; gauge_t *rates; - int i; ret = bson_alloc (); /* matched by bson_dealloc() */ if (ret == NULL) @@ -107,7 +107,7 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */ bson_append_string (ret, "type_instance", vl->type_instance); bson_append_start_array (ret, "values"); /* {{{ */ - for (i = 0; i < ds->ds_num; i++) + for (int i = 0; i < ds->ds_num; i++) { char key[16]; @@ -129,7 +129,7 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */ bson_append_finish_array (ret); /* }}} values */ bson_append_start_array (ret, "dstypes"); /* {{{ */ - for (i = 0; i < ds->ds_num; i++) + for (int i = 0; i < ds->ds_num; i++) { char key[16]; @@ -143,7 +143,7 @@ static bson *wm_create_bson (const data_set_t *ds, /* {{{ */ bson_append_finish_array (ret); /* }}} dstypes */ bson_append_start_array (ret, "dsnames"); /* {{{ */ - for (i = 0; i < ds->ds_num; i++) + for (int i = 0; i < ds->ds_num; i++) { char key[16]; @@ -270,7 +270,6 @@ static int wm_config_node (oconfig_item_t *ci) /* {{{ */ { wm_node_t *node; int status; - int i; node = calloc (1, sizeof (*node)); if (node == NULL) @@ -288,7 +287,7 @@ static int wm_config_node (oconfig_item_t *ci) /* {{{ */ return (status); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -357,9 +356,7 @@ static int wm_config_node (oconfig_item_t *ci) /* {{{ */ static int wm_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/write_redis.c b/src/write_redis.c index 4ec75d59..135a4587 100644 --- a/src/write_redis.c +++ b/src/write_redis.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -167,7 +168,6 @@ static int wr_config_node (oconfig_item_t *ci) /* {{{ */ wr_node_t *node; int timeout; int status; - int i; node = calloc (1, sizeof (*node)); if (node == NULL) @@ -190,7 +190,7 @@ static int wr_config_node (oconfig_item_t *ci) /* {{{ */ return (status); } - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -250,9 +250,7 @@ static int wr_config_node (oconfig_item_t *ci) /* {{{ */ static int wr_config (oconfig_item_t *ci) /* {{{ */ { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/write_riemann.c b/src/write_riemann.c index 261327a3..f1437234 100644 --- a/src/write_riemann.c +++ b/src/write_riemann.c @@ -112,6 +112,8 @@ static int wrr_connect(struct riemann_host *host) /* {{{ */ } } + set_sock_opts(riemann_client_get_fd(host->client)); + c_release(LOG_INFO, &host->init_complaint, "write_riemann plugin: Successfully connected to %s:%d", node, port); @@ -186,8 +188,6 @@ wrr_notification_to_message(struct riemann_host *host, /* {{{ */ riemann_event_t *event; char service_buffer[6 * DATA_MAX_NAME_LEN]; char const *severity; - notification_meta_t *meta; - size_t i; switch (n->severity) { case NOTIF_OKAY: @@ -228,18 +228,18 @@ wrr_notification_to_message(struct riemann_host *host, /* {{{ */ riemann_event_string_attribute_add(event, "type_instance", n->type_instance); - for (i = 0; i < riemann_attrs_num; i += 2) + for (size_t i = 0; i < riemann_attrs_num; i += 2) riemann_event_string_attribute_add(event, riemann_attrs[i], riemann_attrs[i + 1]); - for (i = 0; i < riemann_tags_num; i++) + for (size_t i = 0; i < riemann_tags_num; i++) riemann_event_tag_add(event, riemann_tags[i]); if (n->message[0] != 0) riemann_event_string_attribute_add(event, "description", n->message); /* Pull in values from threshold and add extra attributes */ - for (meta = n->meta; meta != NULL; meta = meta->next) { + for (notification_meta_t *meta = n->meta; meta != NULL; meta = meta->next) { if (strcasecmp("CurrentValue", meta->name) == 0 && meta->type == NM_TYPE_DOUBLE) { riemann_event_set(event, RIEMANN_EVENT_FIELD_METRIC_D, diff --git a/src/write_riemann_threshold.c b/src/write_riemann_threshold.c index a4249ecf..f2ba9dc8 100644 --- a/src/write_riemann_threshold.c +++ b/src/write_riemann_threshold.c @@ -26,6 +26,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "utils_avltree.h" @@ -130,7 +131,6 @@ static int ut_check_one_threshold (const data_set_t *ds, int *statuses) { /* {{{ */ int ret = -1; - size_t i; int status; gauge_t values_copy[ds->ds_num]; @@ -150,7 +150,7 @@ static int ut_check_one_threshold (const data_set_t *ds, } /* Prepare `sum' and `num'. */ - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) if (!isnan (values[i])) { num++; @@ -160,17 +160,17 @@ static int ut_check_one_threshold (const data_set_t *ds, if ((num == 0) /* All data sources are undefined. */ || (sum == 0.0)) /* Sum is zero, cannot calculate percentage. */ { - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) values_copy[i] = NAN; } else /* We can actually calculate the percentage. */ { - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) values_copy[i] = 100.0 * values[i] / sum; } } /* if (UT_FLAG_PERCENTAGE) */ - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { status = ut_check_one_data_source (ds, vl, th, values_copy, i); if (status != -1) { diff --git a/src/write_sensu.c b/src/write_sensu.c index d37792b4..6cb49943 100644 --- a/src/write_sensu.c +++ b/src/write_sensu.c @@ -27,6 +27,7 @@ #define _GNU_SOURCE #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" @@ -41,6 +42,55 @@ #define SENSU_HOST "localhost" #define SENSU_PORT "3030" +#ifdef HAVE_ASPRINTF +#define my_asprintf asprintf +#define my_vasprintf vasprintf +#else +/* + * asprintf() is available from Solaris 10 update 11. + * For older versions, use asprintf() portable implementation from + * https://github.com/littlstar/asprintf.c/blob/master/ + * copyright (c) 2014 joseph werle under MIT license. + */ + +static int my_vasprintf(char **str, const char *fmt, va_list args) { + int size = 0; + va_list tmpa; + // copy + va_copy(tmpa, args); + // apply variadic arguments to + // sprintf with format to get size + size = vsnprintf(NULL, size, fmt, tmpa); + // toss args + va_end(tmpa); + // return -1 to be compliant if + // size is less than 0 + if (size < 0) { return -1; } + // alloc with size plus 1 for `\0' + *str = (char *) malloc(size + 1); + // return -1 to be compliant + // if pointer is `NULL' + if (NULL == *str) { return -1; } + // format string with original + // variadic arguments and set new size + size = vsprintf(*str, fmt, args); + return size; +} + +static int my_asprintf(char **str, const char *fmt, ...) { + int size = 0; + va_list args; + // init variadic argumens + va_start(args, fmt); + // format and get size + size = my_vasprintf(str, fmt, args); + // toss args + va_end(args); + return size; +} + +#endif + struct str_list { int nb_strs; char **strs; @@ -94,8 +144,7 @@ static int add_str_to_list(struct str_list *strs, static void free_str_list(struct str_list *strs) /* {{{ */ { - int i; - for (i=0; inb_strs; i++) + for (int i=0; inb_strs; i++) free(strs->strs[i]); free(strs->strs); } @@ -104,25 +153,24 @@ static void free_str_list(struct str_list *strs) /* {{{ */ static int sensu_connect(struct sensu_host *host) /* {{{ */ { int e; - struct addrinfo *ai, hints; char const *node; char const *service; // Resolve the target if we haven't done already if (!(host->flags & F_READY)) { - memset(&hints, 0, sizeof(hints)); memset(&service, 0, sizeof(service)); host->res = NULL; - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; -#ifdef AI_ADDRCONFIG - hints.ai_flags |= AI_ADDRCONFIG; -#endif node = (host->node != NULL) ? host->node : SENSU_HOST; service = (host->service != NULL) ? host->service : SENSU_PORT; - if ((e = getaddrinfo(node, service, &hints, &(host->res))) != 0) { + struct addrinfo ai_hints = { + .ai_family = AF_INET, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; + + if ((e = getaddrinfo(node, service, &ai_hints, &(host->res))) != 0) { ERROR("write_sensu plugin: Unable to resolve host \"%s\": %s", node, gai_strerror(e)); return -1; @@ -134,7 +182,7 @@ static int sensu_connect(struct sensu_host *host) /* {{{ */ struct linger so_linger; host->s = -1; - for (ai = host->res; ai != NULL; ai = ai->ai_next) { + for (struct addrinfo *ai = host->res; ai != NULL; ai = ai->ai_next) { // create the socket if ((host->s = socket(ai->ai_family, ai->ai_socktype, @@ -148,6 +196,8 @@ static int sensu_connect(struct sensu_host *host) /* {{{ */ if (setsockopt(host->s, SOL_SOCKET, SO_LINGER, &so_linger, sizeof so_linger) != 0) WARNING("write_sensu plugin: failed to set socket close() lingering"); + set_sock_opts(host->s); + // connect the socket if (connect(host->s, ai->ai_addr, ai->ai_addrlen) != 0) { close(host->s); @@ -178,7 +228,6 @@ static char *build_json_str_list(const char *tag, struct str_list const *list) / int res; char *ret_str = NULL; char *temp_str; - int i; if (list->nb_strs == 0) { ret_str = malloc(sizeof(char)); if (ret_str == NULL) { @@ -188,14 +237,14 @@ static char *build_json_str_list(const char *tag, struct str_list const *list) / ret_str[0] = '\0'; } - res = asprintf(&temp_str, "\"%s\": [\"%s\"", tag, list->strs[0]); + res = my_asprintf(&temp_str, "\"%s\": [\"%s\"", tag, list->strs[0]); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); free(ret_str); return NULL; } - for (i=1; inb_strs; i++) { - res = asprintf(&ret_str, "%s, \"%s\"", temp_str, list->strs[i]); + for (int i=1; inb_strs; i++) { + res = my_asprintf(&ret_str, "%s, \"%s\"", temp_str, list->strs[i]); free(temp_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -203,7 +252,7 @@ static char *build_json_str_list(const char *tag, struct str_list const *list) / } temp_str = ret_str; } - res = asprintf(&ret_str, "%s]", temp_str); + res = my_asprintf(&ret_str, "%s]", temp_str); free(temp_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -260,9 +309,8 @@ static int sensu_format_name2(char *ret, int ret_len, static void in_place_replace_sensu_name_reserved(char *orig_name) /* {{{ */ { - int i; int len=strlen(orig_name); - for (i=0; iplugin); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin\": \"%s\"", ret_str, vl->plugin); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -325,7 +372,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ ret_str = temp_str; // incorporate the plugin type - res = asprintf(&temp_str, "%s, \"collectd_plugin_type\": \"%s\"", ret_str, vl->type); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_type\": \"%s\"", ret_str, vl->type); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -335,7 +382,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ // incorporate the plugin instance if any if (vl->plugin_instance[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin_instance\": \"%s\"", ret_str, vl->plugin_instance); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_instance\": \"%s\"", ret_str, vl->plugin_instance); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -346,7 +393,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ // incorporate the plugin type instance if any if (vl->type_instance[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin_type_instance\": \"%s\"", ret_str, vl->type_instance); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_type_instance\": \"%s\"", ret_str, vl->type_instance); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -359,7 +406,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ if ((ds->ds[index].type != DS_TYPE_GAUGE) && (rates != NULL)) { char ds_type[DATA_MAX_NAME_LEN]; ssnprintf (ds_type, sizeof (ds_type), "%s:rate", DS_TYPE_TO_STRING(ds->ds[index].type)); - res = asprintf(&temp_str, "%s, \"collectd_data_source_type\": \"%s\"", ret_str, ds_type); + res = my_asprintf(&temp_str, "%s, \"collectd_data_source_type\": \"%s\"", ret_str, ds_type); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -367,7 +414,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } ret_str = temp_str; } else { - res = asprintf(&temp_str, "%s, \"collectd_data_source_type\": \"%s\"", ret_str, DS_TYPE_TO_STRING(ds->ds[index].type)); + res = my_asprintf(&temp_str, "%s, \"collectd_data_source_type\": \"%s\"", ret_str, DS_TYPE_TO_STRING(ds->ds[index].type)); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -377,7 +424,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } // incorporate the data source name - res = asprintf(&temp_str, "%s, \"collectd_data_source_name\": \"%s\"", ret_str, ds->ds[index].name); + res = my_asprintf(&temp_str, "%s, \"collectd_data_source_name\": \"%s\"", ret_str, ds->ds[index].name); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -389,7 +436,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ { char ds_index[DATA_MAX_NAME_LEN]; ssnprintf (ds_index, sizeof (ds_index), "%zu", index); - res = asprintf(&temp_str, "%s, \"collectd_data_source_index\": %s", ret_str, ds_index); + res = my_asprintf(&temp_str, "%s, \"collectd_data_source_index\": %s", ret_str, ds_index); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -399,8 +446,8 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } // add key value attributes from config if any - for (i = 0; i < sensu_attrs_num; i += 2) { - res = asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, sensu_attrs[i], sensu_attrs[i+1]); + for (size_t i = 0; i < sensu_attrs_num; i += 2) { + res = my_asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, sensu_attrs[i], sensu_attrs[i+1]); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -411,7 +458,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ // incorporate sensu tags from config if any if ((sensu_tags != NULL) && (strlen(sensu_tags) != 0)) { - res = asprintf(&temp_str, "%s, %s", ret_str, sensu_tags); + res = my_asprintf(&temp_str, "%s, %s", ret_str, sensu_tags); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -422,14 +469,14 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ // calculate the value and set to a string if (ds->ds[index].type == DS_TYPE_GAUGE) { - res = asprintf(&value_str, GAUGE_FORMAT, vl->values[index].gauge); + res = my_asprintf(&value_str, GAUGE_FORMAT, vl->values[index].gauge); if (res == -1) { free(ret_str); ERROR("write_sensu plugin: Unable to alloc memory"); return NULL; } } else if (rates != NULL) { - res = asprintf(&value_str, GAUGE_FORMAT, rates[index]); + res = my_asprintf(&value_str, GAUGE_FORMAT, rates[index]); if (res == -1) { free(ret_str); ERROR("write_sensu plugin: Unable to alloc memory"); @@ -437,7 +484,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } } else { if (ds->ds[index].type == DS_TYPE_DERIVE) { - res = asprintf(&value_str, "%"PRIi64, vl->values[index].derive); + res = my_asprintf(&value_str, "%"PRIi64, vl->values[index].derive); if (res == -1) { free(ret_str); ERROR("write_sensu plugin: Unable to alloc memory"); @@ -445,7 +492,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } } else if (ds->ds[index].type == DS_TYPE_ABSOLUTE) { - res = asprintf(&value_str, "%"PRIu64, vl->values[index].absolute); + res = my_asprintf(&value_str, "%"PRIu64, vl->values[index].absolute); if (res == -1) { free(ret_str); ERROR("write_sensu plugin: Unable to alloc memory"); @@ -453,7 +500,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ } } else { - res = asprintf(&value_str, "%llu", vl->values[index].counter); + res = my_asprintf(&value_str, "%llu", vl->values[index].counter); if (res == -1) { free(ret_str); ERROR("write_sensu plugin: Unable to alloc memory"); @@ -485,7 +532,7 @@ static char *sensu_value_to_json(struct sensu_host const *host, /* {{{ */ in_place_replace_sensu_name_reserved(service_buffer); // finalize the buffer by setting the output and closing curly bracket - res = asprintf(&temp_str, "%s, \"output\": \"%s %s %ld\"}\n", ret_str, service_buffer, value_str, CDTIME_T_TO_TIME_T(vl->time)); + res = my_asprintf(&temp_str, "%s, \"output\": \"%s %s %lld\"}\n",ret_str, service_buffer, value_str, (long long)CDTIME_T_TO_TIME_T(vl->time)); free(ret_str); free(value_str); if (res == -1) { @@ -590,7 +637,6 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ { char service_buffer[6 * DATA_MAX_NAME_LEN]; char const *severity; - notification_meta_t *meta; char *ret_str; char *temp_str; int status; @@ -614,7 +660,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ severity = "UNKNOWN"; status = 3; } - res = asprintf(&temp_str, "{\"status\": %d", status); + res = my_asprintf(&temp_str, "{\"status\": %d", status); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); return NULL; @@ -622,7 +668,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ ret_str = temp_str; // incorporate the timestamp - res = asprintf(&temp_str, "%s, \"timestamp\": %ld", ret_str, CDTIME_T_TO_TIME_T(n->time)); + res = my_asprintf(&temp_str, "%s, \"timestamp\": %lld", ret_str, (long long)CDTIME_T_TO_TIME_T(n->time)); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -638,7 +684,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ } // incorporate the handlers if (strlen(handlers_str) != 0) { - res = asprintf(&temp_str, "%s, %s", ret_str, handlers_str); + res = my_asprintf(&temp_str, "%s, %s", ret_str, handlers_str); free(ret_str); free(handlers_str); if (res == -1) { @@ -652,7 +698,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // incorporate the plugin name information if any if (n->plugin[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin\": \"%s\"", ret_str, n->plugin); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin\": \"%s\"", ret_str, n->plugin); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -663,7 +709,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // incorporate the plugin type if any if (n->type[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin_type\": \"%s\"", ret_str, n->type); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_type\": \"%s\"", ret_str, n->type); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -674,7 +720,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // incorporate the plugin instance if any if (n->plugin_instance[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin_instance\": \"%s\"", ret_str, n->plugin_instance); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_instance\": \"%s\"", ret_str, n->plugin_instance); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -685,7 +731,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // incorporate the plugin type instance if any if (n->type_instance[0] != 0) { - res = asprintf(&temp_str, "%s, \"collectd_plugin_type_instance\": \"%s\"", ret_str, n->type_instance); + res = my_asprintf(&temp_str, "%s, \"collectd_plugin_type_instance\": \"%s\"", ret_str, n->type_instance); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -696,7 +742,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // add key value attributes from config if any for (i = 0; i < sensu_attrs_num; i += 2) { - res = asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, sensu_attrs[i], sensu_attrs[i+1]); + res = my_asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, sensu_attrs[i], sensu_attrs[i+1]); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -707,7 +753,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ // incorporate sensu tags from config if any if ((sensu_tags != NULL) && (strlen(sensu_tags) != 0)) { - res = asprintf(&temp_str, "%s, %s", ret_str, sensu_tags); + res = my_asprintf(&temp_str, "%s, %s", ret_str, sensu_tags); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -722,7 +768,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ n->type, n->type_instance, host->separator); // replace sensu event name chars that are considered illegal in_place_replace_sensu_name_reserved(service_buffer); - res = asprintf(&temp_str, "%s, \"name\": \"%s\"", ret_str, &service_buffer[1]); + res = my_asprintf(&temp_str, "%s, \"name\": \"%s\"", ret_str, &service_buffer[1]); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -738,7 +784,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ free(ret_str); return NULL; } - res = asprintf(&temp_str, "%s, \"output\": \"%s - %s\"", ret_str, severity, msg); + res = my_asprintf(&temp_str, "%s, \"output\": \"%s - %s\"", ret_str, severity, msg); free(ret_str); free(msg); if (res == -1) { @@ -749,9 +795,9 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ } // Pull in values from threshold and add extra attributes - for (meta = n->meta; meta != NULL; meta = meta->next) { + for (notification_meta_t *meta = n->meta; meta != NULL; meta = meta->next) { if (strcasecmp("CurrentValue", meta->name) == 0 && meta->type == NM_TYPE_DOUBLE) { - res = asprintf(&temp_str, "%s, \"current_value\": \"%.8f\"", ret_str, meta->nm_value.nm_double); + res = my_asprintf(&temp_str, "%s, \"current_value\": \"%.8f\"", ret_str, meta->nm_value.nm_double); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -760,7 +806,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ ret_str = temp_str; } if (meta->type == NM_TYPE_STRING) { - res = asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, meta->name, meta->nm_value.nm_string); + res = my_asprintf(&temp_str, "%s, \"%s\": \"%s\"", ret_str, meta->name, meta->nm_value.nm_string); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -771,7 +817,7 @@ static char *sensu_notification_to_json(struct sensu_host *host, /* {{{ */ } // close the curly bracket - res = asprintf(&temp_str, "%s}\n", ret_str); + res = my_asprintf(&temp_str, "%s}\n", ret_str); free(ret_str); if (res == -1) { ERROR("write_sensu plugin: Unable to alloc memory"); @@ -838,7 +884,6 @@ static int sensu_write(const data_set_t *ds, /* {{{ */ int statuses[vl->values_len]; struct sensu_host *host = ud->data; gauge_t *rates = NULL; - size_t i; char *msg; pthread_mutex_lock(&host->lock); @@ -852,7 +897,7 @@ static int sensu_write(const data_set_t *ds, /* {{{ */ return -1; } } - for (i = 0; i < vl->values_len; i++) { + for (size_t i = 0; i < vl->values_len; i++) { msg = sensu_value_to_json(host, ds, vl, (int) i, rates, statuses[i]); if (msg == NULL) { sfree(rates); @@ -932,7 +977,6 @@ static int sensu_config_node(oconfig_item_t *ci) /* {{{ */ { struct sensu_host *host = NULL; int status = 0; - int i; oconfig_item_t *child; char callback_name[DATA_MAX_NAME_LEN]; user_data_t ud; @@ -967,7 +1011,7 @@ static int sensu_config_node(oconfig_item_t *ci) /* {{{ */ return -1; } - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { child = &ci->children[i]; status = 0; @@ -1108,7 +1152,6 @@ static int sensu_config_node(oconfig_item_t *ci) /* {{{ */ static int sensu_config(oconfig_item_t *ci) /* {{{ */ { - int i; oconfig_item_t *child; int status; struct str_list sensu_tags_arr; @@ -1116,7 +1159,7 @@ static int sensu_config(oconfig_item_t *ci) /* {{{ */ sensu_tags_arr.nb_strs = 0; sensu_tags_arr.strs = NULL; - for (i = 0; i < ci->children_num; i++) { + for (int i = 0; i < ci->children_num; i++) { child = &ci->children[i]; if (strcasecmp("Node", child->key) == 0) { diff --git a/src/write_tsdb.c b/src/write_tsdb.c index a044b681..bf49ba5f 100644 --- a/src/write_tsdb.c +++ b/src/write_tsdb.c @@ -42,6 +42,7 @@ */ #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -155,9 +156,7 @@ static int wt_flush_nolock(cdtime_t timeout, struct wt_callback *cb) static int wt_callback_init(struct wt_callback *cb) { - struct addrinfo ai_hints = { 0 }; struct addrinfo *ai_list; - struct addrinfo *ai_ptr; int status; const char *node = cb->node ? cb->node : WT_DEFAULT_NODE; @@ -166,13 +165,11 @@ static int wt_callback_init(struct wt_callback *cb) if (cb->sock_fd > 0) return 0; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - - ai_list = NULL; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; status = getaddrinfo(node, service, &ai_hints, &ai_list); if (status != 0) @@ -183,13 +180,15 @@ static int wt_callback_init(struct wt_callback *cb) } assert (ai_list != NULL); - for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { cb->sock_fd = socket(ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); if (cb->sock_fd < 0) continue; + set_sock_opts(cb->sock_fd); + status = connect(cb->sock_fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen); if (status != 0) { @@ -505,7 +504,6 @@ static int wt_write_messages(const data_set_t *ds, const value_list_t *vl, char values[512]; int status; - size_t i; if (0 != strcmp(ds->type, vl->type)) { @@ -514,7 +512,7 @@ static int wt_write_messages(const data_set_t *ds, const value_list_t *vl, return -1; } - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { const char *ds_name = NULL; @@ -575,7 +573,6 @@ static int wt_config_tsd(oconfig_item_t *ci) struct wt_callback *cb; user_data_t user_data = { 0 }; char callback_name[DATA_MAX_NAME_LEN]; - int i; cb = calloc(1, sizeof(*cb)); if (cb == NULL) @@ -591,7 +588,7 @@ static int wt_config_tsd(oconfig_item_t *ci) pthread_mutex_init (&cb->send_lock, NULL); - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -628,9 +625,7 @@ static int wt_config_tsd(oconfig_item_t *ci) static int wt_config(oconfig_item_t *ci) { - int i; - - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; diff --git a/src/xencpu.c b/src/xencpu.c index 2b872350..f1cd9388 100644 --- a/src/xencpu.c +++ b/src/xencpu.c @@ -20,6 +20,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -53,7 +54,7 @@ static int xencpu_init (void) { ERROR ("xencpu: xc_interface_open() failed"); return (-1); - }; + } xc_physinfo_t *physinfo; @@ -71,7 +72,7 @@ static int xencpu_init (void) xc_interface_close(xc_handle); free(physinfo); return (-1); - }; + } num_cpus = physinfo->nr_cpus; free(physinfo); @@ -141,8 +142,8 @@ static int xencpu_read (void) return (-1); } - int cpu, status; - for (cpu = 0; cpu < nr_cpus; cpu++) { + int status; + for (int cpu = 0; cpu < nr_cpus; cpu++) { gauge_t rate = NAN; value_t value = {.derive = cpu_info[cpu].idletime}; diff --git a/src/xmms.c b/src/xmms.c index 29f2acd0..35359950 100644 --- a/src/xmms.c +++ b/src/xmms.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "plugin.h" #include "common.h" diff --git a/src/zfs_arc.c b/src/zfs_arc.c index 37a918b5..8261282a 100644 --- a/src/zfs_arc.c +++ b/src/zfs_arc.c @@ -28,6 +28,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -89,12 +90,10 @@ static long long get_zfs_value(kstat_t *ksp, const char *key) static void free_zfs_values (kstat_t *ksp) { - llentry_t *e; - if (ksp == NULL) return; - for (e = llist_head (ksp); e != NULL; e = e->next) + for (llentry_t *e = llist_head (ksp); e != NULL; e = e->next) { sfree (e->key); sfree (e->value); @@ -295,10 +294,6 @@ static int za_read (void) za_read_derive (ksp, "deleted", "cache_operation", "deleted"); #if defined(KERNEL_FREEBSD) za_read_derive (ksp, "allocated","cache_operation", "allocated"); -#if __FreeBSD_version < 1002501 - /* stolen removed from sysctl kstat.zfs.misc.arcstats on FreeBSD 10.2+ */ - za_read_derive (ksp, "stolen", "cache_operation", "stolen"); -#endif #endif /* Issue indicators */ diff --git a/src/zone.c b/src/zone.c index 87c65172..3751bfde 100644 --- a/src/zone.c +++ b/src/zone.c @@ -31,6 +31,7 @@ #endif #include "collectd.h" + #include "common.h" #include "plugin.h" diff --git a/src/zookeeper.c b/src/zookeeper.c index a236c8ae..84174853 100644 --- a/src/zookeeper.c +++ b/src/zookeeper.c @@ -25,6 +25,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -105,17 +106,18 @@ static int zookeeper_connect (void) { int sk = -1; int status; - struct addrinfo ai_hints = { 0 }; - struct addrinfo *ai; struct addrinfo *ai_list; const char *host; const char *port; - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - host = (zk_host != NULL) ? zk_host : ZOOKEEPER_DEF_HOST; port = (zk_port != NULL) ? zk_port : ZOOKEEPER_DEF_PORT; + + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_socktype = SOCK_STREAM + }; + status = getaddrinfo (host, port, &ai_hints, &ai_list); if (status != 0) { @@ -127,7 +129,7 @@ static int zookeeper_connect (void) return (-1); } - for (ai = ai_list; ai != NULL; ai = ai->ai_next) + for (struct addrinfo *ai = ai_list; ai != NULL; ai = ai->ai_next) { sk = socket (ai->ai_family, SOCK_STREAM, 0); if (sk < 0)