Merge remote-tracking branch 'origin/pr/651'
authorMarc Fournier <marc.fournier@camptocamp.com>
Tue, 19 May 2015 11:34:10 +0000 (13:34 +0200)
committerMarc Fournier <marc.fournier@camptocamp.com>
Tue, 19 May 2015 11:34:10 +0000 (13:34 +0200)
Conflicts:
contrib/redhat/collectd.spec

1  2 
AUTHORS
README
configure.ac
contrib/redhat/collectd.spec
src/Makefile.am
src/collectd.conf.in
src/collectd.conf.pod

diff --combined AUTHORS
+++ b/AUTHORS
@@@ -81,9 -81,6 +81,9 @@@ Cyril Feraudet <cyril at feraudet.com
  Dan Berrange <berrange at redhat.com>
   - uuid plugin.
  
 +Dan Ryder <daryder at cisco.com>
 + - ceph plugin.
 +
  David Bacher <drbacher at gmail.com>
   - serial plugin.
  
@@@ -106,9 -103,6 +106,9 @@@ Fabian Linzberger <e at lefant.net
  Fabien Wernli <cpan at faxm0dem.org>
   - Solaris improvements in the memory and interfaces plugin.
  
 +Fabrice A. Marie <fabrice at kibinlabs.com>
 + - write_sensu plugin.
 +
  Flavio Stanchina <flavio at stanchina.net>
   - mbmon plugin.
  
@@@ -280,6 -274,9 +280,9 @@@ Tommie Gannert <d00-tga at d.kth.se
  Vincent Bernat <vincent at bernat.im>
   - smart plugin.
  
+ Vincent Brillault <git at lerya.net>
+  - turbostat plugin, based on Len Brown <len.brown at intel.com> kernel tool
  Vincent Stehlé <vincent.stehle at free.fr>
   - hddtemp plugin.
  
diff --combined README
--- 1/README
--- 2/README
+++ b/README
@@@ -33,9 -33,9 +33,9 @@@ Feature
        Statistics about Ascent, a free server for the game `World of Warcraft'.
  
      - barometer
 -      Using digital barometer sensor MPL115A2 or MPL3115 from Freescale
 -      provides absolute barometric pressure, air pressure reduced to sea level
 -      and temperature.
 +      Reads absolute barometric pressure, air pressure reduced to sea level and
 +      temperature.  Supported sensors are MPL115A2 and MPL3115 from Freescale
 +      and BMP085 from Bosch.
  
      - battery
        Batterycharge, -current and voltage of ACPI and PMU based laptop
@@@ -45,9 -45,6 +45,9 @@@
        Name server and resolver statistics from the `statistics-channel'
        interface of BIND 9.5, 9,6 and later.
  
 +    - ceph
 +      Statistics from the Ceph distributed storage system.
 +
      - cgroups
        CPU accounting information for process groups under Linux.
  
        Interface traffic: Number of octets, packets and errors for each
        interface.
  
 -    - iptables
 -      Iptables' counters: Number of bytes that were matched by a certain
 -      iptables rule.
 +    - ipc
 +      IPC counters: semaphores used, number of allocated segments in shared
 +      memory and more.
  
      - ipmi
        IPMI (Intelligent Platform Management Interface) sensors information.
  
 +    - iptables
 +      Iptables' counters: Number of bytes that were matched by a certain
 +      iptables rule.
 +
      - ipvs
        IPVS connection statistics (number of connections, octets and packets
        for each service and destination).
      - ntpd
        NTP daemon statistics: Local clock drift, offset to peers, etc.
  
 +    - numa
 +      Information about Non-Uniform Memory Access (NUMA).
 +
      - nut
        Network UPS tools: UPS current, voltage, power, charge, utilisation,
        temperature, etc. See upsd(8).
  
 -    - numa
 -      Information about Non-Uniform Memory Access (NUMA).
 -
      - olsrd
        Queries routing information from the “Optimized Link State Routing”
        daemon.
        Reads the number of records and file size from a running Tokyo Tyrant
        server.
  
+     - turbostat
+       Reads CPU frequency and C-state residency on modern Intel
+       turbo-capable processors.
      - uptime
        System uptime statistics.
  
        can be configured to avoid logging send errors (especially useful when
        using UDP).
  
 -    - write_tsdb
 -      Sends data OpenTSDB, a scalable no master, no shared state time series
 -      database.
 -
      - write_http
        Sends the values collected by collectd to a web-server using HTTP POST
        requests. The transmitted data is either in a form understood by the
      - write_riemann
        Sends data to Riemann, a stream processing and monitoring system.
  
 +    - write_sensu
 +      Sends data to Sensu, a stream processing and monitoring system, via the
 +      Sensu client local TCP socket.
 +
 +    - write_tsdb
 +      Sends data OpenTSDB, a scalable no master, no shared state time series
 +      database.
 +
    * Logging is, as everything in collectd, provided by plugins. The following
      plugins keep up informed about what's going on:
  
@@@ -814,8 -807,8 +818,8 @@@ Prerequisite
      <http://www.xmms.org/>
  
    * libyajl (optional)
 -    Parse JSON data. This is needed for the `curl_json' and `log_logstash'
 -    plugins.
 +    Parse JSON data. This is needed for the `ceph', `curl_json' and
 +    `log_logstash' plugins.
      <http://github.com/lloyd/yajl>
  
    * libvarnish (optional)
diff --combined configure.ac
@@@ -589,13 -589,44 +589,44 @@@ AC_CHECK_HEADERS(net/pfvar.h
  have_termios_h="no"
  AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"])
  
+ # For the turbostat plugin
+ have_asm_msrindex_h="no"
+ AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"])
+ if test "x$have_asm_msrindex_h" = "xyes"
+ then
+   AC_CACHE_CHECK([whether asm/msr-index.h has MSR_CORE_C3_RESIDENCY],
+                  [c_cv_have_usable_asm_msrindex_h],
+                  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[[
+ #include<asm/msr-index.h>
+ ]]],
+ [[[
+ int y = MSR_CORE_C3_RESIDENCY;
+ return(y);
+ ]]]
+   )],
+                  [c_cv_have_usable_asm_msrindex_h="yes"],
+                  [c_cv_have_usable_asm_msrindex_h="no"],
+                                   )
+                  )
+ fi
+ have_cpuid_h="no"
+ AC_CHECK_HEADERS(cpuid.h, [have_cpuid_h="yes"])
+ AC_CHECK_HEADERS(sys/capability.h)
  #
  # Checks for typedefs, structures, and compiler characteristics.
  #
  AC_C_CONST
+ AC_C_INLINE
+ AC_TYPE_OFF_T
  AC_TYPE_PID_T
  AC_TYPE_SIZE_T
+ AC_TYPE_SSIZE_T
  AC_TYPE_UID_T
+ AC_TYPE_UINT32_T
  AC_HEADER_TIME
  
  #
@@@ -1190,7 -1221,6 +1221,7 @@@ FILE *fh
  struct mntent *me;
  fh = setmntent ("/etc/mtab", "r");
  me = getmntent (fh);
 +return(me->mnt_passno);
  ]]]
                        )],
                        [c_cv_have_one_getmntent="yes"],
                                 int status;
                                 fh = fopen ("/etc/mnttab", "r");
                                 status = getmntent (fh, &mt);
 +                               return(status);
  ]]]
                        )],
                        [c_cv_have_two_getmntent="yes"],
                 [have_curlopt_username="yes"],
                 [have_curlopt_username="no"],
                 [[#include <curl/curl.h>]])
 +              AC_CHECK_DECL(CURLOPT_TIMEOUT_MS,
 +               [have_curlopt_timeout="yes"],
 +               [have_curlopt_timeout="no"],
 +               [[#include <curl/curl.h>]])
        fi
  fi
  if test "x$with_libcurl" = "xyes"
        then
                AC_DEFINE(HAVE_CURLOPT_USERNAME, 1, [Define if libcurl supports CURLOPT_USERNAME option.])
        fi
 +
 +      if test "x$have_curlopt_timeout" = "xyes"
 +      then
 +              AC_DEFINE(HAVE_CURLOPT_TIMEOUT_MS, 1, [Define if libcurl supports CURLOPT_TIMEOUT_MS option.])
 +      fi
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBCURL, test "x$with_libcurl" = "xyes")
  # }}}
@@@ -1762,6 -1782,7 +1793,6 @@@ the
        LDFLAGS="$LDFLAGS $with_libdbi_ldflags"
  
        AC_CHECK_LIB(dbi, dbi_initialize, [with_libdbi="yes"], [with_libdbi="no (Symbol 'dbi_initialize' not found)"])
 -      AC_CHECK_LIB(dbi, dbi_driver_open_r, [with_libdbi_r="yes"], [with_libdbi_r="no"])
  
        CPPFLAGS="$SAVE_CPPFLAGS"
        LDFLAGS="$SAVE_LDFLAGS"
@@@ -1774,6 -1795,11 +1805,6 @@@ the
        AC_SUBST(BUILD_WITH_LIBDBI_CPPFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LDFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LIBS)
 -
 -  if test "x$with_libdbi_r" = "xyes"
 -  then
 -              AC_DEFINE(HAVE_LIBDBI_R, 1, [Define if reentrant dbi facility is present and usable.])
 -  fi
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBDBI, test "x$with_libdbi" = "xyes")
  # }}}
  
  # --with-java {{{
  with_java_home="$JAVA_HOME"
 +if test "x$with_java_home" = "x"
 +then
 +      with_java_home="/usr/lib/jvm"
 +fi
  with_java_vmtype="client"
  with_java_cflags=""
  with_java_libs=""
@@@ -2114,7 -2136,7 +2145,7 @@@ the
        if test -d "$with_java_home"
        then
                AC_MSG_CHECKING([for jni.h])
 -              TMPVAR=`find "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name jni.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                fi
  
                AC_MSG_CHECKING([for jni_md.h])
 -              TMPVAR=`find "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name jni_md.h -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                fi
  
                AC_MSG_CHECKING([for libjvm.so])
 -              TMPVAR=`find "$with_java_home" -name libjvm.so -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
 +              TMPVAR=`find -L "$with_java_home" -name libjvm.so -type f -exec 'dirname' '{}' ';' 2>/dev/null | head -n 1`
                if test "x$TMPVAR" != "x"
                then
                        AC_MSG_RESULT([found in $TMPVAR])
                if test "x$JAVAC" = "x"
                then
                        AC_MSG_CHECKING([for javac])
 -                      TMPVAR=`find "$with_java_home" -name javac -type f 2>/dev/null | head -n 1`
 +                      TMPVAR=`find -L "$with_java_home" -name javac -type f 2>/dev/null | head -n 1`
                        if test "x$TMPVAR" != "x"
                        then
                                JAVAC="$TMPVAR"
                if test "x$JAR" = "x"
                then
                        AC_MSG_CHECKING([for jar])
 -                      TMPVAR=`find "$with_java_home" -name jar -type f 2>/dev/null | head -n 1`
 +                      TMPVAR=`find -L "$with_java_home" -name jar -type f 2>/dev/null | head -n 1`
                        if test "x$TMPVAR" != "x"
                        then
                                JAR="$TMPVAR"
@@@ -3178,7 -3200,6 +3209,7 @@@ the
  ]]],
  [[[
    int val = PCAP_ERROR_IFACE_NOT_UP;
 +  return(val);
  ]]]
                       )],
                       [c_cv_libpcap_have_pcap_error_iface_not_up="yes"],
  # --with-librdkafka {{{
  AC_ARG_WITH(librdkafka, [AS_HELP_STRING([--with-librdkafka@<:@=PREFIX@:>@], [Path to librdkafka.])],
  [
 -  if test "x$withval" = "xno" && test "x$withval" != "xyes"
 +  if test "x$withval" != "xno" && test "x$withval" != "xyes"
    then
      with_librdkafka_cppflags="-I$withval/include"
      with_librdkafka_ldflags="-L$withval/lib"
 +    with_librdkafka_rpath="$withval/lib"
      with_librdkafka="yes"
    else
      with_librdkafka="$withval"
  SAVE_CPPFLAGS="$CPPFLAGS"
  SAVE_LDFLAGS="$LDFLAGS"
  
 +CPPFLAGS="$CPPFLAGS $with_librdkafka_cppflags"
 +LDFLAGS="$LDFLAGS $with_librdkafka_ldflags"
 +
  if test "x$with_librdkafka" = "xyes"
  then
        AC_CHECK_HEADERS(librdkafka/rdkafka.h, [with_librdkafka="yes"], [with_librdkafka="no (librdkafka/rdkafka.h not found)"])
@@@ -3753,18 -3770,13 +3784,18 @@@ if test "x$with_librdkafka" = "xyes
  then
        AC_CHECK_LIB(rdkafka, rd_kafka_new, [with_librdkafka="yes"], [with_librdkafka="no (Symbol 'rd_kafka_new' not found)"])
    AC_CHECK_LIB(rdkafka, rd_kafka_conf_set_log_cb, [with_librdkafka_log_cb="yes"], [with_librdkafka_log_cb="no"])
 -  AC_CHECK_LIB(rdkafka, rd_kafka_conf_set_logger, [with_librdkafka_logger="yes"], [with_librdkafka_logger="no"])
 +  AC_CHECK_LIB(rdkafka, rd_kafka_set_logger, [with_librdkafka_logger="yes"], [with_librdkafka_logger="no"])
  fi
  if test "x$with_librdkafka" = "xyes"
  then
        BUILD_WITH_LIBRDKAFKA_CPPFLAGS="$with_librdkafka_cppflags"
        BUILD_WITH_LIBRDKAFKA_LDFLAGS="$with_librdkafka_ldflags"
 -      BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka"
 +      if test "x$with_librdkafka_rpath" != "x"
 +      then
 +              BUILD_WITH_LIBRDKAFKA_LIBS="-Wl,-rpath,$with_librdkafka_rpath -lrdkafka"
 +      else
 +              BUILD_WITH_LIBRDKAFKA_LIBS="-lrdkafka"
 +      fi
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_CPPFLAGS)
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_LDFLAGS)
        AC_SUBST(BUILD_WITH_LIBRDKAFKA_LIBS)
@@@ -5122,7 -5134,6 +5153,7 @@@ plugin_ascent="no
  plugin_barometer="no"
  plugin_battery="no"
  plugin_bind="no"
 +plugin_ceph="no"
  plugin_cgroups="no"
  plugin_conntrack="no"
  plugin_contextswitch="no"
@@@ -5155,6 -5166,7 +5186,7 @@@ plugin_tape="no
  plugin_tcpconns="no"
  plugin_ted="no"
  plugin_thermal="no"
+ plugin_turbostat="no"
  plugin_uptime="no"
  plugin_users="no"
  plugin_virt="no"
@@@ -5178,7 -5190,6 +5210,7 @@@ the
        plugin_entropy="yes"
        plugin_fscache="yes"
        plugin_interface="yes"
 +      plugin_ipc="yes"
        plugin_irq="yes"
        plugin_load="yes"
        plugin_lvm="yes"
        then
                plugin_ipvs="yes"
        fi
+       if test "x$c_cv_have_usable_asm_msrindex_h" = "xyes" && test "x$have_cpuid_h" = "xyes"
+       then
+               plugin_turbostat="yes"
+       fi
  fi
  
  if test "x$ac_system" = "xOpenBSD"
  if test "x$ac_system" = "xAIX"
  then
          plugin_tcpconns="yes"
 +        plugin_ipc="yes"
  fi
  
  # FreeBSD
  if test "x$with_kstat" = "xyes"
  then
        plugin_nfs="yes"
 +      plugin_processes="yes"
        plugin_uptime="yes"
        plugin_zfs_arc="yes"
  fi
        plugin_curl_xml="yes"
  fi
  
 +if test "x$with_libyajl" = "xyes"
 +then
 +      plugin_ceph="yes"
 +fi
 +
  if test "x$have_processor_info" = "xyes"
  then
        plugin_cpu="yes"
@@@ -5496,7 -5504,6 +5532,7 @@@ AC_PLUGIN([ascent],      [$plugin_ascen
  AC_PLUGIN([barometer],   [$plugin_barometer],  [Barometer sensor on I2C])
  AC_PLUGIN([battery],     [$plugin_battery],    [Battery statistics])
  AC_PLUGIN([bind],        [$plugin_bind],       [ISC Bind nameserver statistics])
 +AC_PLUGIN([ceph],        [$plugin_ceph],       [Ceph daemon statistics])
  AC_PLUGIN([conntrack],   [$plugin_conntrack],  [nf_conntrack statistics])
  AC_PLUGIN([contextswitch], [$plugin_contextswitch], [context switch statistics])
  AC_PLUGIN([cpufreq],     [$plugin_cpufreq],    [CPU frequency statistics])
@@@ -5520,7 -5527,6 +5556,7 @@@ AC_PLUGIN([fscache],     [$plugin_fscac
  AC_PLUGIN([gmond],       [$with_libganglia],   [Ganglia plugin])
  AC_PLUGIN([hddtemp],     [yes],                [Query hddtempd])
  AC_PLUGIN([interface],   [$plugin_interface],  [Interface traffic statistics])
 +AC_PLUGIN([ipc],         [$plugin_ipc],        [IPC statistics])
  AC_PLUGIN([ipmi],        [$plugin_ipmi],       [IPMI sensor statistics])
  AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters])
  AC_PLUGIN([ipvs],        [$plugin_ipvs],       [IPVS connection statistics])
@@@ -5598,6 -5604,7 +5634,7 @@@ AC_PLUGIN([ted],         [$plugin_ted]
  AC_PLUGIN([thermal],     [$plugin_thermal],    [Linux ACPI thermal zone statistics])
  AC_PLUGIN([threshold],   [yes],                [Threshold checking plugin])
  AC_PLUGIN([tokyotyrant], [$with_libtokyotyrant],  [TokyoTyrant database statistics])
+ AC_PLUGIN([turbostat],   [$plugin_turbostat],  [Advanced statistic on Intel cpu states])
  AC_PLUGIN([unixsock],    [yes],                [Unixsock communication plugin])
  AC_PLUGIN([uptime],      [$plugin_uptime],     [Uptime statistics])
  AC_PLUGIN([users],       [$plugin_users],      [User statistics])
@@@ -5614,7 -5621,6 +5651,7 @@@ AC_PLUGIN([write_log], [yes]
  AC_PLUGIN([write_mongodb], [$with_libmongoc],  [MongoDB output plugin])
  AC_PLUGIN([write_redis], [$with_libhiredis],    [Redis output plugin])
  AC_PLUGIN([write_riemann], [$have_protoc_c],   [Riemann output plugin])
 +AC_PLUGIN([write_sensu], [yes],                [Sensu output plugin])
  AC_PLUGIN([write_tsdb],  [yes],                [TSDB output plugin])
  AC_PLUGIN([xmms],        [$with_libxmms],      [XMMS statistics])
  AC_PLUGIN([zfs_arc],     [$plugin_zfs_arc],    [ZFS ARC statistics])
@@@ -5805,11 -5811,10 +5842,11 @@@ Configuration
      libatasmart . . . . . $with_libatasmart
      libcurl . . . . . . . $with_libcurl
      libdbi  . . . . . . . $with_libdbi
 -    libhiredis  . . . . . $with_libhiredis
      libesmtp  . . . . . . $with_libesmtp
      libganglia  . . . . . $with_libganglia
      libgcrypt . . . . . . $with_libgcrypt
 +    libhal  . . . . . . . $with_libhal
 +    libhiredis  . . . . . $with_libhiredis
      libi2c-dev  . . . . . $with_libi2c
      libiokit  . . . . . . $with_libiokit
      libiptc . . . . . . . $with_libiptc
      libmemcached  . . . . $with_libmemcached
      libmnl  . . . . . . . $with_libmnl
      libmodbus . . . . . . $with_libmodbus
 +    libmongoc . . . . . . $with_libmongoc
      libmysql  . . . . . . $with_libmysql
      libnetapp . . . . . . $with_libnetapp
      libnetsnmp  . . . . . $with_libnetsnmp
      liboconfig  . . . . . $with_liboconfig
      libopenipmi . . . . . $with_libopenipmipthread
      liboping  . . . . . . $with_liboping
 +    libowcapi . . . . . . $with_libowcapi
      libpcap . . . . . . . $with_libpcap
      libperfstat . . . . . $with_perfstat
      libperl . . . . . . . $with_libperl
      libxml2 . . . . . . . $with_libxml2
      libxmms . . . . . . . $with_libxmms
      libyajl . . . . . . . $with_libyajl
 -    libevent  . . . . . . $with_libevent
 -    protobuf-c  . . . . . $have_protoc_c
      oracle  . . . . . . . $with_oracle
 +    protobuf-c  . . . . . $have_protoc_c
      python  . . . . . . . $with_python
  
    Features:
      amqp    . . . . . . . $enable_amqp
      apache  . . . . . . . $enable_apache
      apcups  . . . . . . . $enable_apcups
 -    aquaero . . . . . . . $enable_aquaero
      apple_sensors . . . . $enable_apple_sensors
 +    aquaero . . . . . . . $enable_aquaero
      ascent  . . . . . . . $enable_ascent
      barometer . . . . . . $enable_barometer
      battery . . . . . . . $enable_battery
      bind  . . . . . . . . $enable_bind
 +    ceph  . . . . . . . . $enable_ceph
 +    cgroups . . . . . . . $enable_cgroups
      conntrack . . . . . . $enable_conntrack
      contextswitch . . . . $enable_contextswitch
 -    cgroups . . . . . . . $enable_cgroups
      cpu . . . . . . . . . $enable_cpu
      cpufreq . . . . . . . $enable_cpufreq
      csv . . . . . . . . . $enable_csv
      gmond . . . . . . . . $enable_gmond
      hddtemp . . . . . . . $enable_hddtemp
      interface . . . . . . $enable_interface
 +    ipc . . . . . . . . . $enable_ipc
      ipmi  . . . . . . . . $enable_ipmi
      iptables  . . . . . . $enable_iptables
      ipvs  . . . . . . . . $enable_ipvs
      java  . . . . . . . . $enable_java
      load  . . . . . . . . $enable_load
      logfile . . . . . . . $enable_logfile
 -    lpar  . . . . . . . . $enable_lpar
      log_logstash  . . . . $enable_log_logstash
 +    lpar  . . . . . . . . $enable_lpar
      lvm . . . . . . . . . $enable_lvm
      madwifi . . . . . . . $enable_madwifi
      match_empty_counter . $enable_match_empty_counter
      swap  . . . . . . . . $enable_swap
      syslog  . . . . . . . $enable_syslog
      table . . . . . . . . $enable_table
 -    tail  . . . . . . . . $enable_tail
      tail_csv  . . . . . . $enable_tail_csv
 +    tail  . . . . . . . . $enable_tail
      tape  . . . . . . . . $enable_tape
      target_notification . $enable_target_notification
      target_replace  . . . $enable_target_replace
      thermal . . . . . . . $enable_thermal
      threshold . . . . . . $enable_threshold
      tokyotyrant . . . . . $enable_tokyotyrant
+     turbostat . . . . . . $enable_turbostat
      unixsock  . . . . . . $enable_unixsock
      uptime  . . . . . . . $enable_uptime
      users . . . . . . . . $enable_users
      write_mongodb . . . . $enable_write_mongodb
      write_redis . . . . . $enable_write_redis
      write_riemann . . . . $enable_write_riemann
 +    write_sensu . . . . . $enable_write_sensu
      write_tsdb  . . . . . $enable_write_tsdb
      xmms  . . . . . . . . $enable_xmms
      zfs_arc . . . . . . . $enable_zfs_arc
@@@ -52,6 -52,7 +52,7 @@@
  %{?el6:%global _has_iproute 1}
  %{?el6:%global _has_atasmart 1}
  %{?el6:%global _has_hiredis 1}
+ %{?el6:%global _has_asm_msr_index 1}
  
  %{?el7:%global _has_libyajl 1}
  %{?el7:%global _has_recent_libpcap 1}
@@@ -66,6 -67,7 +67,7 @@@
  %{?el7:%global _has_iproute 1}
  %{?el7:%global _has_atasmart 1}
  %{?el7:%global _has_hiredis 1}
+ %{?el7:%global _has_asm_msr_index 1}
  
  # plugins enabled by default
  %define with_aggregation 0%{!?_without_aggregation:1}
@@@ -75,7 -77,6 +77,7 @@@
  %define with_ascent 0%{!?_without_ascent:1}
  %define with_battery 0%{!?_without_battery:1}
  %define with_bind 0%{!?_without_bind:1}
 +%define with_ceph 0%{!?_without_ceph:0%{?_has_libyajl}}
  %define with_cgroups 0%{!?_without_cgroups:1}
  %define with_conntrack 0%{!?_without_conntrack:1}
  %define with_contextswitch 0%{!?_without_contextswitch:1}
  %define with_gmond 0%{!?_without_gmond:0%{?_has_recent_libganglia}}
  %define with_hddtemp 0%{!?_without_hddtemp:1}
  %define with_interface 0%{!?_without_interface:1}
 +%define with_ipc 0%{!?_without_ipc:1}
  %define with_ipmi 0%{!?_without_ipmi:1}
  %define with_iptables 0%{!?_without_iptables:0%{?_has_working_libiptc}}
  %define with_ipvs 0%{!?_without_ipvs:0%{?_has_ip_vs_h}}
  %define with_ted 0%{!?_without_ted:1}
  %define with_thermal 0%{!?_without_thermal:1}
  %define with_threshold 0%{!?_without_threshold:1}
+ %define with_turbostat 0%{!?_without_turbostat:0%{?_has_asm_msr_index}}
  %define with_unixsock 0%{!?_without_unixsock:1}
  %define with_uptime 0%{!?_without_uptime:1}
  %define with_users 0%{!?_without_users:1}
  %define with_write_log 0%{!?_without_write_log:1}
  %define with_write_redis 0%{!?_without_write_redis:0%{?_has_hiredis}}
  %define with_write_riemann 0%{!?_without_write_riemann:1}
 +%define with_write_sensu 0%{!?_without_write_sensu:1}
  %define with_write_tsdb 0%{!?_without_write_tsdb:1}
  %define with_zfs_arc 0%{!?_without_zfs_arc:1}
  %define with_zookeeper 0%{!?_without_zookeeper:1}
  # plugin xmms disabled, requires xmms
  %define with_xmms 0%{!?_without_xmms:0}
  
 -Summary:      Statistics collection daemon for filling RRD files
 +Summary:      statistics collection and monitoring daemon
  Name:         collectd
 -Version:      5.4.0
 +Version:      5.4.2
  Release:      1%{?dist}
  URL:          http://collectd.org
  Source:               http://collectd.org/files/%{name}-%{version}.tar.bz2
  License:      GPLv2
  Group:                System Environment/Daemons
  BuildRoot:    %{_tmppath}/%{name}-%{version}-root
- BuildRequires:        libgcrypt-devel, kernel-headers, libtool-ltdl-devel
+ BuildRequires:        libgcrypt-devel, kernel-headers, libtool-ltdl-devel, libcap-devel
  Vendor:               collectd development team <collectd@verplant.org>
  
  %if 0%{?el7:1}
@@@ -304,16 -304,6 +307,16 @@@ The BIND plugin retrieves this informat
  via HTTP and submits the values to collectd.
  %endif
  
 +%if %{with_ceph}
 +%package ceph
 +Summary:       Ceph plugin for collectd
 +Group:         System Environment/Daemons
 +Requires:      %{name}%{?_isa} = %{version}-%{release}
 +BuildRequires: yajl-devel
 +%description ceph
 +Ceph plugin for collectd
 +%endif
 +
  %if %{with_curl}
  %package curl
  Summary:      Curl plugin for collectd
@@@ -921,12 -911,6 +924,12 @@@ Collectd utilitie
  %define _with_csv --disable-csv
  %endif
  
 +%if %{with_ceph}
 +%define _with_ceph --enable-ceph
 +%else
 +%define _with_ceph --disable-ceph
 +%endif
 +
  %if %{with_curl}
  %define _with_curl --enable-curl
  %else
  %if %{with_dbi}
  %define _with_dbi --enable-dbi
  %else
 -%define _with_dbi --disable-dbi --without-libdbi
 +%define _with_dbi --disable-dbi
  %endif
  
  %if %{with_df}
  %define _with_interface --disable-interface
  %endif
  
 +%if %{with_ipc}
 +%define _with_ipc --enable-ipc
 +%else
 +%define _with_ipc --disable-ipc
 +%endif
 +
  %if %{with_ipmi}
  %define _with_ipmi --enable-ipmi
  %else
  %if %{with_notify_email}
  %define _with_notify_email --enable-notify_email
  %else
 -%define _with_notify_email --disable-notify_email --without-libesmpt
 +%define _with_notify_email --disable-notify_email
  %endif
  
  %if %{with_ntpd}
  %if %{with_perl}
  %define _with_perl --enable-perl --with-perl-bindings="INSTALLDIRS=vendor"
  %else
 -%define _with_perl --disable-perl --without-libperl
 +%define _with_perl --disable-perl
  %endif
  
  %if %{with_pf}
  %define _with_tokyotyrant --disable-tokyotyrant
  %endif
  
+ %if %{with_turbostat}
+ %define _with_turbostat --enable-turbostat
+ %else
+ %define _with_turbostat --disable-turbostat
+ %endif
  %if %{with_unixsock}
  %define _with_unixsock --enable-unixsock
  %else
  %if %{with_write_mongodb}
  %define _with_write_mongodb --enable-write_mongodb
  %else
 -%define _with_write_mongodb --disable-write_mongodb --without-libmongoc
 +%define _with_write_mongodb --disable-write_mongodb
  %endif
  
  %if %{with_write_redis}
  %define _with_write_riemann --disable-write_riemann
  %endif
  
 +%if %{with_write_sensu}
 +%define _with_write_sensu --enable-write_sensu
 +%else
 +%define _with_write_sensu --disable-write_sensu
 +%endif
 +
  %if %{with_write_tsdb}
  %define _with_write_tsdb --enable-write_tsdb
  %else
        %{?_with_barometer} \
        %{?_with_battery} \
        %{?_with_bind} \
 +      %{?_with_ceph} \
        %{?_with_cgroups} \
        %{?_with_conntrack} \
        %{?_with_contextswitch} \
        %{?_with_gmond} \
        %{?_with_hddtemp} \
        %{?_with_interface} \
 +      %{?_with_ipc} \
        %{?_with_ipmi} \
        %{?_with_iptables} \
        %{?_with_ipvs} \
        %{?_with_ted} \
        %{?_with_thermal} \
        %{?_with_threshold} \
+       %{?_with_turbostat} \
        %{?_with_unixsock} \
        %{?_with_uptime} \
        %{?_with_users} \
        %{?_with_write_http} \
        %{?_with_write_log} \
        %{?_with_write_riemann} \
 +      %{?_with_write_sensu} \
        %{?_with_write_tsdb}
  
  
  %if %{with_interface}
  %{_libdir}/%{name}/interface.so
  %endif
 +%if %{with_ipc}
 +%{_libdir}/%{name}/ipc.so
 +%endif
  %if %{with_ipvs}
  %{_libdir}/%{name}/ipvs.so
  %endif
  %if %{with_thermal}
  %{_libdir}/%{name}/thermal.so
  %endif
 -%if %{with_load}
 +%if %{with_threshold}
  %{_libdir}/%{name}/threshold.so
  %endif
+ %if %{with_turbostat}
+ %{_libdir}/%{name}/turbostat.so
+ %endif
  %if %{with_unixsock}
  %{_libdir}/%{name}/unixsock.so
  %endif
  %if %{with_write_log}
  %{_libdir}/%{name}/write_log.so
  %endif
 +%if %{with_write_sensu}
 +%{_libdir}/%{name}/write_sensu.so
 +%endif
  %if %{with_write_tsdb}
  %{_libdir}/%{name}/write_tsdb.so
  %endif
  %{_libdir}/%{name}/bind.so
  %endif
  
 +%if %{with_ceph}
 +%files ceph
 +%{_libdir}/%{name}/ceph.so
 +%endif
 +
  %if %{with_curl}
  %files curl
  %{_libdir}/%{name}/curl.so
  %changelog
  # * TODO 5.5.0-1
  # - New upstream version
- # - New plugins enabled by default: ceph, drbd, log_logstash, write_tsdb, smart, openldap, redis, write_redis, zookeeper, write_log, write_sensu, ipc
 -# - New plugins enabled by default: drbd, log_logstash, write_tsdb, smart, openldap, redis, write_redis, zookeeper, write_log, turbostat
++# - New plugins enabled by default: ceph, drbd, log_logstash, write_tsdb, smart, openldap, redis, write_redis, zookeeper, write_log, write_sensu, ipc, turbostat
  # - New plugins disabled by default: barometer, write_kafka
  # - Enable zfs_arc, now supported on Linux
  # - Install disk plugin in a dedicated package, as it depends on libudev
  # - use systemd on EL7, sysvinit on EL6 & EL5
  # - Install collectdctl, collectd-tg and collectd-nagios in collectd-utils.rpm
+ # - Add build-dependency on libcap-devel
  
  * Mon Aug 19 2013 Marc Fournier <marc.fournier@camptocamp.com> 5.4.0-1
  - New upstream version
diff --combined src/Makefile.am
@@@ -171,15 -171,6 +171,15 @@@ bind_la_CFLAGS = $(AM_CFLAGS) 
  bind_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS)
  endif
  
 +if BUILD_PLUGIN_CEPH
 +pkglib_LTLIBRARIES += ceph.la
 +ceph_la_SOURCES = ceph.c
 +ceph_la_CFLAGS = $(AM_CFLAGS)
 +ceph_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBYAJL_LDFLAGS)
 +ceph_la_CPPFLAGS = $(AM_CPPFLAGS) $(BUILD_WITH_LIBYAJL_CPPFLAGS)
 +ceph_la_LIBADD = $(BUILD_WITH_LIBYAJL_LIBS)
 +endif
 +
  if BUILD_PLUGIN_CGROUPS
  pkglib_LTLIBRARIES += cgroups.la
  cgroups_la_SOURCES = cgroups.c \
@@@ -406,13 -397,6 +406,13 @@@ interface_la_LIBADD += -lperfsta
  endif
  endif # BUILD_PLUGIN_INTERFACE
  
 +if BUILD_PLUGIN_IPC
 +pkglib_LTLIBRARIES += ipc.la
 +ipc_la_SOURCES = ipc.c
 +ipc_la_CFLAGS = $(AM_CFLAGS)
 +ipc_la_LDFLAGS = $(PLUGIN_LDFLAGS)
 +endif
 +
  if BUILD_PLUGIN_IPTABLES
  pkglib_LTLIBRARIES += iptables.la
  iptables_la_SOURCES = iptables.c
@@@ -697,7 -681,7 +697,7 @@@ if BUILD_PLUGIN_NOTIFY_EMAI
  pkglib_LTLIBRARIES += notify_email.la
  notify_email_la_SOURCES = notify_email.c
  notify_email_la_LDFLAGS = $(PLUGIN_LDFLAGS)
 -notify_email_la_LIBADD = -lesmtp -lssl -lcrypto -lpthread -ldl
 +notify_email_la_LIBADD = -lesmtp -lssl -lcrypto -lpthread
  endif
  
  if BUILD_PLUGIN_NTPD
@@@ -1076,6 -1060,12 +1076,12 @@@ tokyotyrant_la_LIBADD += -lsocke
  endif
  endif
  
+ if BUILD_PLUGIN_TURBOSTAT
+ pkglib_LTLIBRARIES += turbostat.la
+ turbostat_la_SOURCES = turbostat.c
+ turbostat_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+ endif
  if BUILD_PLUGIN_UNIXSOCK
  pkglib_LTLIBRARIES += unixsock.la
  unixsock_la_SOURCES = unixsock.c \
@@@ -1188,7 -1178,6 +1194,7 @@@ write_kafka_la_SOURCES = write_kafka.c 
                          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)
  endif
@@@ -1224,12 -1213,6 +1230,12 @@@ write_riemann_la_LDFLAGS = $(PLUGIN_LDF
  write_riemann_la_LIBADD = -lprotobuf-c
  endif
  
 +if BUILD_PLUGIN_WRITE_SENSU
 +pkglib_LTLIBRARIES += write_sensu.la
 +write_sensu_la_SOURCES = write_sensu.c
 +write_sensu_la_LDFLAGS = $(PLUGIN_LDFLAGS)
 +endif
 +
  if BUILD_PLUGIN_WRITE_TSDB
  pkglib_LTLIBRARIES += write_tsdb.la
  write_tsdb_la_SOURCES = write_tsdb.c
@@@ -1365,7 -1348,6 +1371,7 @@@ check_PROGRAMS = test_common test_utils
  
  test_common_SOURCES = tests/test_common.c \
                        daemon/common.h daemon/common.c \
 +                      tests/macros.h \
                        tests/mock/plugin.c \
                        tests/mock/utils_cache.c \
                        tests/mock/utils_time.c
diff --combined src/collectd.conf.in
@@@ -98,7 -98,6 +98,7 @@@
  #@BUILD_PLUGIN_BAROMETER_TRUE@LoadPlugin barometer
  #@BUILD_PLUGIN_BATTERY_TRUE@LoadPlugin battery
  #@BUILD_PLUGIN_BIND_TRUE@LoadPlugin bind
 +#@BUILD_PLUGIN_CEPH_TRUE@LoadPlugin ceph
  #@BUILD_PLUGIN_CONNTRACK_TRUE@LoadPlugin conntrack
  #@BUILD_PLUGIN_CONTEXTSWITCH_TRUE@LoadPlugin contextswitch
  #@BUILD_PLUGIN_CGROUPS_TRUE@LoadPlugin cgroups
  #@BUILD_PLUGIN_GMOND_TRUE@LoadPlugin gmond
  #@BUILD_PLUGIN_HDDTEMP_TRUE@LoadPlugin hddtemp
  @BUILD_PLUGIN_INTERFACE_TRUE@@BUILD_PLUGIN_INTERFACE_TRUE@LoadPlugin interface
 +#@BUILD_PLUGIN_IPC_TRUE@@BUILD_PLUGIN_IPC_TRUE@LoadPlugin ipc
  #@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
  #@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi
  #@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
  #@BUILD_PLUGIN_OPENLDAP_TRUE@LoadPlugin openldap
  #@BUILD_PLUGIN_OPENVPN_TRUE@LoadPlugin openvpn
  #@BUILD_PLUGIN_ORACLE_TRUE@LoadPlugin oracle
 -#@BUILD_PLUGIN_PERL_TRUE@<LoadPlugin perl>
 -#@BUILD_PLUGIN_PERL_TRUE@  Globals true
 -#@BUILD_PLUGIN_PERL_TRUE@</LoadPlugin>
 +#@BUILD_PLUGIN_PERL_TRUE@LoadPlugin perl
  #@BUILD_PLUGIN_PINBA_TRUE@LoadPlugin pinba
  #@BUILD_PLUGIN_PING_TRUE@LoadPlugin ping
  #@BUILD_PLUGIN_POSTGRESQL_TRUE@LoadPlugin postgresql
  #@BUILD_PLUGIN_POWERDNS_TRUE@LoadPlugin powerdns
  #@BUILD_PLUGIN_PROCESSES_TRUE@LoadPlugin processes
  #@BUILD_PLUGIN_PROTOCOLS_TRUE@LoadPlugin protocols
 -#@BUILD_PLUGIN_PYTHON_TRUE@<LoadPlugin python>
 -#@BUILD_PLUGIN_PYTHON_TRUE@  Globals true
 -#@BUILD_PLUGIN_PYTHON_TRUE@</LoadPlugin>
 +#@BUILD_PLUGIN_PYTHON_TRUE@LoadPlugin python
  #@BUILD_PLUGIN_REDIS_TRUE@LoadPlugin redis
  #@BUILD_PLUGIN_ROUTEROS_TRUE@LoadPlugin routeros
  #@BUILD_PLUGIN_RRDCACHED_TRUE@LoadPlugin rrdcached
  #@BUILD_PLUGIN_TED_TRUE@LoadPlugin ted
  #@BUILD_PLUGIN_THERMAL_TRUE@LoadPlugin thermal
  #@BUILD_PLUGIN_TOKYOTYRANT_TRUE@LoadPlugin tokyotyrant
+ #@BUILD_PLUGIN_TURBOSTAT_TRUE@LoadPlugin turbostat
  #@BUILD_PLUGIN_UNIXSOCK_TRUE@LoadPlugin unixsock
  #@BUILD_PLUGIN_UPTIME_TRUE@LoadPlugin uptime
  #@BUILD_PLUGIN_USERS_TRUE@LoadPlugin users
  #@BUILD_PLUGIN_WRITE_MONGODB_TRUE@LoadPlugin write_mongodb
  #@BUILD_PLUGIN_WRITE_REDIS_TRUE@LoadPlugin write_redis
  #@BUILD_PLUGIN_WRITE_RIEMANN_TRUE@LoadPlugin write_riemann
 +#@BUILD_PLUGIN_WRITE_SENSU_TRUE@LoadPlugin write_sensu
  #@BUILD_PLUGIN_WRITE_TSDB_TRUE@LoadPlugin write_tsdb
  #@BUILD_PLUGIN_XMMS_TRUE@LoadPlugin xmms
  #@BUILD_PLUGIN_ZFS_ARC_TRUE@LoadPlugin zfs_arc
  #    RoutingKey "collectd"
  #    Persistent false
  #    StoreRates false
 +#    ConnectionRetryDelay 0
  #  </Publish>
  #</Plugin>
  
  #  </View>
  #</Plugin>
  
 +#<Plugin ceph>
 +#  LongRunAvgLatency false
 +#  ConvertSpecialMetricTypes true
 +#  <Daemon "osd.0">
 +#    SocketPath "/var/run/ceph/ceph-osd.0.asok"
 +#  </Daemon>
 +#  <Daemon "osd.1">
 +#    SocketPath "/var/run/ceph/ceph-osd.1.asok"
 +#  </Daemon>
 +#  <Daemon "mon.a">
 +#    SocketPath "/var/run/ceph/ceph-mon.ceph1.asok"
 +#  </Daemon>
 +#  <Daemon "mds.a">
 +#    SocketPath "/var/run/ceph/ceph-mds.ceph1.asok"
 +#  </Daemon>
 +#</Plugin>
 +
  #<Plugin cgroups>
  #  CGroup "libvirt"
  #  IgnoreSelected false
  #     Port "1978"
  #</Plugin>
  
+ #<Plugin turbostat>
+ ##    None of the following option should be set manually
+ ##    This plugin automatically detect most optimal options
+ ##    Only set values here if:
+ ##    - The module ask you to
+ ##    - You want to disable the collection of some data
+ ##    - Your (intel) CPU is not supported (yet) by the module
+ ##    - The module generate a lot of errors 'MSR offset 0x... read failed'
+ ##    In the last two cases, please open a bug request
+ #
+ #     TCCActivationTemp "100"
+ #     CoreCstates "392"
+ #     PackageCstates "396"
+ #     SystemManagementInterrupt true
+ #     DigitalTemperatureSensor true
+ #     PackageThermalManagement true
+ #     RunningAveragePowerLimit "7"    
+ #</Plugin>
  #<Plugin unixsock>
  #     SocketFile "@prefix@/var/run/@PACKAGE_NAME@-unixsock"
  #     SocketGroup "collectd"
  #             Format "Command"
  #             StoreRates false
  #             BufferSize 4096
 +#             LowSpeedLimit 0
 +#             Timeout 0
  #     </Node>
  #</Plugin>
  
  #     Attribute "foo" "bar"
  #</Plugin>
  
 +#<Plugin write_sensu>
 +#     <Node "example">
 +#             Host "localhost"
 +#             Port 3030
 +#             StoreRates true
 +#             AlwaysAppendDS false
 +#             Notifications true
 +#             Metrics true
 +#             EventServicePrefix ""
 +#             MetricHandler "influx"
 +#             MetricHandler "default"
 +#             NotificationHandler "flapjack"
 +#             NotificationHandler "howling_monkey"
 +#     </Node>
 +#     Tag "foobar"
 +#     Attribute "foo" "bar"
 +#</Plugin>
 +
  #<Plugin write_tsdb>
  #     <Node>
  #             Host "localhost"
diff --combined src/collectd.conf.pod
@@@ -98,6 -98,7 +98,6 @@@ Options inside a B<LoadPlugin> block ca
  influence the way plugins are loaded, e.g.:
  
   <LoadPlugin perl>
 -   Globals true
     Interval 60
   </LoadPlugin>
  
@@@ -518,7 -519,6 +518,7 @@@ possibly filtering or messages
   #   ExchangeType "fanout"
   #   RoutingKey "collectd"
   #   Persistent false
 + #   ConnectionRetryDelay 0
   #   Format "command"
   #   StoreRates false
   #   GraphitePrefix "collectd."
   #   QueueDurable false
   #   QueueAutoDelete true
   #   RoutingKey "collectd.#"
 + #   ConnectionRetryDelay 0
     </Subscribe>
   </Plugin>
  
@@@ -631,13 -630,6 +631,13 @@@ mode will be used, i.e. delivery is gua
  default), the I<transient> delivery mode will be used, i.e. messages may be
  lost due to high load, overflowing queues or similar issues.
  
 +=item B<ConnectionRetryDelay> I<Delay>
 +
 +When the connection to the AMQP broker is lost, defines the time in seconds to
 +wait before attempting to reconnect. Defaults to 0, which implies collectd will
 +attempt to reconnect at each read interval (in Subscribe mode) or each time
 +values are ready for submission (in Publish mode).
 +
  =item B<Format> B<Command>|B<JSON>|B<Graphite> (Publish only)
  
  Selects the format in which messages are sent to the broker. If set to
@@@ -774,18 -766,6 +774,18 @@@ File that holds one or more SSL certifi
  possibly need this option. What CA certificates come bundled with C<libcurl>
  and are checked by default depends on the distribution you use.
  
 +=item B<SSLCiphers> I<list of ciphers>
 +
 +Specifies which ciphers to use in the connection. The list of ciphers
 +must specify valid ciphers. See
 +L<http://www.openssl.org/docs/apps/ciphers.html> for details.
 +
 +=item B<Timeout> I<Milliseconds>
 +
 +The B<Timeout> option sets the overall timeout for HTTP requests to B<URL>, in
 +milliseconds. By default, the configured B<Interval> is used to set the
 +timeout.
 +
  =back
  
  =head2 Plugin C<apcups>
@@@ -874,38 -854,18 +874,38 @@@ File that holds one or more SSL certifi
  possibly need this option. What CA certificates come bundled with C<libcurl>
  and are checked by default depends on the distribution you use.
  
 +=item B<Timeout> I<Milliseconds>
 +
 +The B<Timeout> option sets the overall timeout for HTTP requests to B<URL>, in
 +milliseconds. By default, the configured B<Interval> is used to set the
 +timeout.
 +
  =back
  
  =head2 Plugin C<barometer>
  
 -This plugin reads absolute air pressure using digital barometer sensor MPL115A2
 -or MPL3115 from Freescale (sensor attached to any I2C bus available in
 -the computer, for HW details see
 -I<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL115A> or
 -I<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL3115A2>).
 -The sensor type - one fo these two - is detected automatically by the plugin
 -and indicated in the plugin_instance (typically you will see subdirectory
 -"barometer-mpl115" or "barometer-mpl3115").
 +This plugin reads absolute air pressure using digital barometer sensor on a I2C
 +bus. Supported sensors are:
 +
 +=over 5
 +
 +=item I<MPL115A2> from Freescale,
 +see L<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL115A>.
 +
 +
 +=item I<MPL3115> from Freescale
 +see L<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL3115A2>.
 +
 +
 +=item I<BMP085> from Bosch Sensortec
 +
 +=back
 +
 +The sensor type - one of the above - is detected automatically by the plugin
 +and indicated in the plugin_instance (you will see subdirectory
 +"barometer-mpl115" or "barometer-mpl3115", or "barometer-bmp085"). The order of
 +detection is BMP085 -> MPL3115 -> MPL115A2, the first one found will be used
 +(only one sensor can be used by the plugin).
  
  The plugin provides absolute barometric pressure, air pressure reduced to sea
  level (several possible approximations) and as an auxiliary value also internal
@@@ -916,11 -876,11 +916,11 @@@ It was developed and tested under Linu
  the standard Linux i2c-dev interface (the particular bus driver has to
  support the SM Bus command subset).
  
 -The reduction or normalization to mean sea level pressure requires (depedning on
 -selected method/approximation) also altitude and reference to temperature sensor(s).
 -When multiple temperature sensors are configured the minumum of their values is
 -always used (expecting that the warmer ones are affected by e.g. direct sun light
 -at that moment).
 +The reduction or normalization to mean sea level pressure requires (depending
 +on selected method/approximation) also altitude and reference to temperature
 +sensor(s).  When multiple temperature sensors are configured the minumum of
 +their values is always used (expecting that the warmer ones are affected by
 +e.g. direct sun light at that moment).
  
  Synopsis:
  
  
  =item B<Device> I<device>
  
 -Device name of the I2C bus to which the sensor is connected. Note that typically
 -you need to have loaded the i2c-dev module.
 +The only mandatory configuration parameter.
 +
 +Device name of the I2C bus to which the sensor is connected. Note that
 +typically you need to have loaded the i2c-dev module.
  Using i2c-tools you can check/list i2c buses available on your system by:
  
    i2cdetect -l
@@@ -955,69 -913,52 +955,69 @@@ connected and detected on address 0x60
  
  =item B<Oversampling> I<value>
  
 -For MPL115 this is the size of the averaging window. To filter out sensor noise
 -a simple averaging using floating window of configurable size is used. The plugin
 -will use average of the last C<value> measurements (value of 1 means no averaging).
 -Minimal size is 1, maximal 1024.
 +Optional parameter controlling the oversampling/accuracy. Default value
 +is 1 providing fastest and least accurate reading.
  
 -For MPL3115 this is the oversampling value. The actual oversampling is performed
 -by the sensor and the higher value the higher accuracy and longer conversion time
 -(although nothing to worry about in the collectd context). Supported values are:
 -1, 2, 4, 8, 16, 32, 64 and 128. Any other value is adjusted by the plugin to
 -the closest supported one. Default is 128.
 +For I<MPL115> this is the size of the averaging window. To filter out sensor
 +noise a simple averaging using floating window of this configurable size is
 +used. The plugin will use average of the last C<value> measurements (value of 1
 +means no averaging).  Minimal size is 1, maximal 1024.
 +
 +For I<MPL3115> this is the oversampling value. The actual oversampling is
 +performed by the sensor and the higher value the higher accuracy and longer
 +conversion time (although nothing to worry about in the collectd context).
 +Supported values are: 1, 2, 4, 8, 16, 32, 64 and 128. Any other value is
 +adjusted by the plugin to the closest supported one.
 +
 +For I<BMP085> this is the oversampling value. The actual oversampling is
 +performed by the sensor and the higher value the higher accuracy and longer
 +conversion time (although nothing to worry about in the collectd context).
 +Supported values are: 1, 2, 4, 8. Any other value is adjusted by the plugin to
 +the closest supported one.
  
  =item B<PressureOffset> I<offset>
  
 -You can further calibrate the sensor by supplying pressure and/or temperature offsets.
 -This is added to the measured/caclulated value (i.e. if the measured value is too high
 -then use negative offset).
 +Optional parameter for MPL3115 only.
 +
 +You can further calibrate the sensor by supplying pressure and/or temperature
 +offsets.  This is added to the measured/caclulated value (i.e. if the measured
 +value is too high then use negative offset).
  In hPa, default is 0.0.
  
  =item B<TemperatureOffset> I<offset>
  
 -You can further calibrate the sensor by supplying pressure and/or temperature offsets.
 -This is added to the measured/caclulated value (i.e. if the measured value is too high
 -then use negative offset).
 +Optional parameter for MPL3115 only.
 +
 +You can further calibrate the sensor by supplying pressure and/or temperature
 +offsets.  This is added to the measured/caclulated value (i.e. if the measured
 +value is too high then use negative offset).
  In C, default is 0.0.
  
  =item B<Normalization> I<method>
  
 -Normalization method - what approximation/model is used to compute mean sea
 +Optional parameter, default value is 0.
 +
 +Normalization method - what approximation/model is used to compute the mean sea
  level pressure from the air absolute pressure.
  
  Supported values of the C<method> (integer between from 0 to 2) are:
  
  =over 5
  
 -=item B<0> - no conversion, absolute pressrure is simply copied over. For this method you
 +=item B<0> - no conversion, absolute pressure is simply copied over. For this method you
         do not need to configure C<Altitude> or C<TemperatureSensor>.
  
  =item B<1> - international formula for conversion ,
 -See I<http://en.wikipedia.org/wiki/Atmospheric_pressure#Altitude_atmospheric_pressure_variation>.
 -For this method you have to configure C<Altitude> but do not need C<TemperatureSensor>
 -(uses fixed global temperature average instead).
 +See
 +L<http://en.wikipedia.org/wiki/Atmospheric_pressure#Altitude_atmospheric_pressure_variation>.
 +For this method you have to configure C<Altitude> but do not need
 +C<TemperatureSensor> (uses fixed global temperature average instead).
  
  =item B<2> - formula as recommended by the Deutsche Wetterdienst (German
  Meteorological Service).
 -See I<http://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel#Theorie>
 -For this method you have to configure both  C<Altitude> and C<TemperatureSensor>.
 +See L<http://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel#Theorie>
 +For this method you have to configure both  C<Altitude> and
 +C<TemperatureSensor>.
  
  =back
  
@@@ -1028,15 -969,15 +1028,15 @@@ The altitude (in meters) of the locatio
  
  =item B<TemperatureSensor> I<reference>
  
 -Temperature sensor which should be used as a reference when normalizing the pressure.
 -When specified more sensors a minumum is found and uses each time.
 -The temperature reading directly from this pressure sensor/plugin
 -is typically not suitable as the pressure sensor
 -will be probably inside while we want outside temperature.
 -The collectd reference name is something like
 +Temperature sensor(s) which should be used as a reference when normalizing the
 +pressure using C<Normalization> method 2.
 +When specified more sensors a minumum is found and used each time.  The
 +temperature reading directly from this pressure sensor/plugin is typically not
 +suitable as the pressure sensor will be probably inside while we want outside
 +temperature.  The collectd reference name is something like
  <hostname>/<plugin_name>-<plugin_instance>/<type>-<type_instance>
 -(<type_instance> is usually omitted when there is just single value type).
 -Or you can figure it out from the path of the output data files.
 +(<type_instance> is usually omitted when there is just single value type). Or
 +you can figure it out from the path of the output data files.
  
  =back
  
@@@ -1177,12 -1118,6 +1177,12 @@@ Collect global memory statistics
  
  Default: Enabled.
  
 +=item B<Timeout> I<Milliseconds>
 +
 +The B<Timeout> option sets the overall timeout for HTTP requests to B<URL>, in
 +milliseconds. By default, the configured B<Interval> is used to set the
 +timeout.
 +
  =item B<View> I<Name>
  
  Collect statistics about a specific I<"view">. BIND can behave different,
@@@ -1234,74 -1169,6 +1234,74 @@@ By default no detailed zone informatio
  
  =back
  
 +=head2 Plugin C<ceph>
 +
 +The ceph plugin collects values from JSON data to be parsed by B<libyajl>
 +(L<https://lloyd.github.io/yajl/>) retrieved from ceph daemon admin sockets.
 +
 +A separate B<Daemon> block must be configured for each ceph daemon to be
 +monitored. The following example will read daemon statistics from four
 +separate ceph daemons running on the same device (two OSDs, one MON, one MDS) :
 +
 +  <Plugin ceph>
 +    LongRunAvgLatency false
 +    ConvertSpecialMetricTypes true
 +    <Daemon "osd.0">
 +      SocketPath "/var/run/ceph/ceph-osd.0.asok"
 +    </Daemon>
 +    <Daemon "osd.1">
 +      SocketPath "/var/run/ceph/ceph-osd.1.asok"
 +    </Daemon>
 +    <Daemon "mon.a">
 +      SocketPath "/var/run/ceph/ceph-mon.ceph1.asok"
 +    </Daemon>
 +    <Daemon "mds.a">
 +      SocketPath "/var/run/ceph/ceph-mds.ceph1.asok"
 +    </Daemon>
 +  </Plugin>
 +
 +The ceph plugin accepts the following configuration options:
 +
 +=over 4
 +
 +=item B<LongRunAvgLatency> B<true>|B<false>
 +
 +If enabled, latency values(sum,count pairs) are calculated as the long run
 +average - average since the ceph daemon was started = (sum / count).
 +When disabled, latency values are calculated as the average since the last
 +collection = (sum_now - sum_last) / (count_now - count_last).
 +
 +Default: Disabled
 +
 +=item B<ConvertSpecialMetricTypes> B<true>|B<false>
 +
 +If enabled, special metrics (metrics that differ in type from similar counters)
 +are converted to the type of those similar counters. This currently only
 +applies to filestore.journal_wr_bytes which is a counter for OSD daemons. The
 +ceph schema reports this metric type as a sum,count pair while similar counters
 +are treated as derive types. When converted, the sum is used as the counter
 +value and is treated as a derive type.
 +When disabled, all metrics are treated as the types received from the ceph schema.
 +
 +Default: Enabled
 +
 +=back
 +
 +Each B<Daemon> block must have a string argument for the plugin instance name.
 +A B<SocketPath> is also required for each B<Daemon> block:
 +
 +=over 4
 +
 +=item B<Daemon> I<DaemonName>
 +
 +Name to be used as the instance name for this daemon.
 +
 +=item B<SocketPath> I<SocketPath>
 +
 +Specifies the path to the UNIX admin socket of the ceph daemon.
 +
 +=back
 +
  =head2 Plugin C<cgroups>
  
  This plugin collects the CPU user/system time for each I<cgroup> by reading the
@@@ -1511,10 -1378,6 +1511,10 @@@ C<application/x-www-form-urlencoded>)
  Measure response time for the request. If this setting is enabled, B<Match>
  blocks (see below) are optional. Disabled by default.
  
 +Beware that requests will get aborted if they take too long to complete. Adjust
 +B<Timeout> accordingly if you expect B<MeasureResponseTime> to report such slow
 +requests.
 +
  =item B<MeasureResponseCode> B<true>|B<false>
  
  Measure response code for the request. If this setting is enabled, B<Match>
@@@ -1529,18 -1392,6 +1529,18 @@@ plugin below on how matches are defined
  B<MeasureResponseCode> options are set to B<true>, B<Match> blocks are
  optional.
  
 +=item B<Timeout> I<Milliseconds>
 +
 +The B<Timeout> option sets the overall timeout for HTTP requests to B<URL>, in
 +milliseconds. By default, the configured B<Interval> is used to set the
 +timeout. Prior to version 5.5.0, there was no timeout and requests could hang
 +indefinitely. This legacy behaviour can be achieved by setting the value of
 +B<Timeout> to 0.
 +
 +If B<Timeout> is 0 or bigger than the B<Interval>, keep in mind that each slow
 +network connection will stall one read thread. Adjust the B<ReadThreads> global
 +setting accordingly to prevent this from blocking other plugins.
 +
  =back
  
  =head2 Plugin C<curl_json>
@@@ -1627,8 -1478,6 +1627,8 @@@ URL. By default the global B<Interval> 
  
  =item B<Post> I<Body>
  
 +=item B<Timeout> I<Milliseconds>
 +
  These options behave exactly equivalent to the appropriate options of the
  I<cURL> plugin. Please see there for a detailed description.
  
@@@ -1729,8 -1578,6 +1729,8 @@@ Examples
  
  =item B<Post> I<Body>
  
 +=item B<Timeout> I<Milliseconds>
 +
  These options behave exactly equivalent to the appropriate options of the
  I<cURL plugin>. Please see there for a detailed description.
  
@@@ -4158,12 -4005,6 +4158,12 @@@ File that holds one or more SSL certifi
  possibly need this option. What CA certificates come bundled with C<libcurl>
  and are checked by default depends on the distribution you use.
  
 +=item B<Timeout> I<Milliseconds>
 +
 +The B<Timeout> option sets the overall timeout for HTTP requests to B<URL>, in
 +milliseconds. By default, the configured B<Interval> is used to set the
 +timeout.
 +
  =back
  
  =head2 Plugin C<notify_desktop>
@@@ -5132,13 -4973,6 +5132,13 @@@ activating this option. The draw-back i
  amount of time will be lost, for example, if a single statement within the
  transaction fails or if the database server crashes.
  
 +=item B<Instance> I<name>
 +
 +Specify the plugin instance name that should be used instead of the database
 +name (which is the default, if this option has not been specified). This
 +allows to query multiple databases of the same name on the same host (e.g.
 +when running multiple database server versions in parallel).
 +
  =item B<Host> I<hostname>
  
  Specify the hostname or IP of the PostgreSQL server to connect to. If the
@@@ -5573,7 -5407,7 +5573,7 @@@ that numerical port numbers must be giv
  
  Use I<Password> to authenticate when connecting to I<Redis>.
  
 -=item B<Timeout> I<Timeout in miliseconds>
 +=item B<Timeout> I<Milliseconds>
  
  The B<Timeout> option set the socket timeout for node response. Since the Redis
  read function is blocking, you should keep this value as low as possible. Keep
@@@ -6587,6 -6421,79 +6587,79 @@@ Default: B<1978
  
  =back
  
+ =head2 Plugin C<turbostat>
+ The I<Turbostat plugin> reads CPU frequency and C-state residency on modern
+ Intel processors by using the new Model Specific Registers.
+ =over 4
+ =item B<CoreCstates> I<Bitmask(Integer)>
+ Bitmask of the list of core C states supported by the processor.
+ This option should only be used if the automated detection fails.
+ Default value extracted from the cpu model and family.
+ Currently supported C-states (by this plugin): 3, 6, 7
+ Example: (1<<3)+(1<<6)+(1<<7) = 392 for all states
+ =item B<PackageCstates> I<Bitmask(Integer)>
+ Bitmask of the list of pacages C states supported by the processor.
+ This option should only be used if the automated detection fails.
+ Default value extracted from the cpu model and family.
+ Currently supported C-states (by this plugin): 2, 3, 6, 7, 8, 9, 10
+ Example: (1<<2)+(1<<3)+(1<<6)+(1<<7) = 396 for states 2, 3, 6 and 7
+ =item B<SystemManagementInterrupt> I<true>|I<false>
+ Boolean enabling the collection of the I/O System-Management Interrupt
+ counter'. This option should only be used if the automated detection
+ fails or if you want to disable this feature.
+ =item B<DigitalTemperatureSensor> I<true>|I<false>
+ Boolean enabling the collection of the temperature of each core.
+ This option should only be used if the automated detectionfails or 
+ if you want to disable this feature.
+ =item B<DigitalTemperatureSensor> I<true>|I<false>
+ Boolean enabling the collection of the temperature of each package.
+ This option should only be used if the automated detectionfails or 
+ if you want to disable this feature.
+ =item B<TCCActivationTemp> I<Temperature>
+ Thermal Control Circuit Activation Temperature of the installed
+ CPU. This temperature is used when collecting the temperature of
+ cores or packages. This option should only be used if the automated
+ detection fails. Default value extracted from B<MSR_IA32_TEMPERATURE_TARGET>
+ =item B<RunningAveragePowerLimit> I<Bitmask(Integer)>
+ Bitmask of the list of elements to be thermally monitored. This option
+ should only be used if the automated detection fails or if you want to
+ disable some collections. The different bits of this bitmask accepted
+ by this plugin are:
+ =over 4
+ =item 0 ('1'): Package
+ =item 1 ('2'): DRAM
+ =item 2 ('4'): Cores
+ =item 3 ('8'): Embedded graphic device
+ =back
+ =back
  =head2 Plugin C<unixsock>
  
  =over 4
@@@ -7101,7 -7008,7 +7174,7 @@@ Hostname or address to connect to. Defa
  
  Service name or port number to connect to. Defaults to C<27017>.
  
 -=item B<Timeout> I<Timeout>
 +=item B<Timeout> I<Milliseconds>
  
  Set the timeout for each operation on I<MongoDB> to I<Timeout> milliseconds.
  Setting this option to zero means no timeout, which is the default.
@@@ -7227,26 -7134,6 +7300,26 @@@ are available on the server side. I<Byt
  exceed the size of an C<int>, i.e. 2E<nbsp>GByte.
  Defaults to C<4096>.
  
 +=item B<LowSpeedLimit> I<Bytes per Second>
 +
 +Sets the minimal transfer rate in I<Bytes per Second> below which the
 +connection with the HTTP server will be considered too slow and aborted. All
 +the data submitted over this connection will probably be lost. Defaults to 0,
 +which means no minimum transfer rate is enforced.
 +
 +=item B<Timeout> I<Timeout>
 +
 +Sets the maximum time in milliseconds given for HTTP POST operations to
 +complete. When this limit is reached, the POST operation will be aborted, and
 +all the data in the current send buffer will probably be lost. Defaults to 0,
 +which means the connection never times out.
 +
 +The C<write_http> plugin regularly submits the collected values to the HTTP
 +server. How frequently this happens depends on how much data you are collecting
 +and the size of B<BufferSize>. The optimal value to set B<Timeout> to is
 +slightly below this interval, which you can estimate by monitoring the network
 +traffic between collectd and the HTTP server.
 +
  =back
  
  =head2 Plugin C<write_kafka>
@@@ -7405,7 -7292,7 +7478,7 @@@ The B<Port> option is the TCP port on w
  connections. Either a service name of a port number may be given. Please note
  that numerical port numbers must be given as a string, too.
  
 -=item B<Timeout> I<Timeout in miliseconds>
 +=item B<Timeout> I<Milliseconds>
  
  The B<Timeout> option sets the socket connection timeout, in milliseconds.
  
@@@ -7533,116 -7420,6 +7606,116 @@@ attribute for each metric being sent ou
  
  =back
  
 +=head2 Plugin C<write_sensu>
 +
 +The I<write_sensu plugin> will send values to I<Sensu>, a powerful stream
 +aggregation and monitoring system. The plugin sends I<JSON> encoded data to
 +a local I<Sensu> client using a TCP socket.
 +
 +At the moment, the I<write_sensu plugin> does not send over a collectd_host
 +parameter so it is not possible to use one collectd instance as a gateway for
 +others. Each collectd host must pair with one I<Sensu> client.
 +
 +Synopsis:
 +
 + <Plugin "write_sensu">
 +   <Node "example">
 +     Host "localhost"
 +     Port "3030"
 +     StoreRates true
 +     AlwaysAppendDS false
 +     MetricHandler "influx"
 +     MetricHandler "default"
 +     NotificationHandler "flapjack"
 +     NotificationHandler "howling_monkey"
 +     Notifications true
 +   </Node>
 +   Tag "foobar"
 +   Attribute "foo" "bar"
 + </Plugin>
 +
 +The following options are understood by the I<write_sensu plugin>:
 +
 +=over 4
 +
 +=item E<lt>B<Node> I<Name>E<gt>
 +
 +The plugin's configuration consists of one or more B<Node> blocks. Each block
 +is given a unique I<Name> and specifies one connection to an instance of
 +I<Sensu>. Inside the B<Node> block, the following per-connection options are
 +understood:
 +
 +=over 4
 +
 +=item B<Host> I<Address>
 +
 +Hostname or address to connect to. Defaults to C<localhost>.
 +
 +=item B<Port> I<Service>
 +
 +Service name or port number to connect to. Defaults to C<3030>.
 +
 +=item B<StoreRates> B<true>|B<false>
 +
 +If set to B<true> (the default), convert counter values to rates. If set to
 +B<false> counter values are stored as is, i.e. as an increasing integer number.
 +
 +This will be reflected in the C<collectd_data_source_type> tag: If
 +B<StoreRates> is enabled, converted values will have "rate" appended to the
 +data source type, e.g.  C<collectd_data_source_type:derive:rate>.
 +
 +=item B<AlwaysAppendDS> B<false>|B<true>
 +
 +If set the B<true>, append the name of the I<Data Source> (DS) to the
 +"service", i.e. the field that, together with the "host" field, uniquely
 +identifies a metric in I<Sensu>. If set to B<false> (the default), this is
 +only done when there is more than one DS.
 +
 +=item B<Notifications> B<false>|B<true>
 +
 +If set to B<true>, create I<Sensu> events for notifications. This is B<false>
 +by default. At least one of B<Notifications> or B<Metrics> should be enabled.
 +
 +=item B<Metrics> B<false>|B<true>
 +
 +If set to B<true>, create I<Sensu> events for metrics. This is B<false>
 +by default. At least one of B<Notifications> or B<Metrics> should be enabled.
 +
 +
 +=item B<Separator> I<String>
 +
 +Sets the separator for I<Sensu> metrics name or checks. Defaults to "/".
 +
 +=item B<MetricHandler> I<String>
 +
 +Add a handler that will be set when metrics are sent to I<Sensu>. You can add
 +several of them, one per line. Defaults to no handler.
 +
 +=item B<NotificationHandler> I<String>
 +
 +Add a handler that will be set when notifications are sent to I<Sensu>. You can
 +add several of them, one per line. Defaults to no handler.
 +
 +=item B<EventServicePrefix> I<String>
 +
 +Add the given string as a prefix to the event service name.
 +If B<EventServicePrefix> not set or set to an empty string (""),
 +no prefix will be used.
 +
 +=back
 +
 +=item B<Tag> I<String>
 +
 +Add the given string as an additional tag to the metric being sent to
 +I<Sensu>.
 +
 +=item B<Attribute> I<String> I<String>
 +
 +Consider the two given strings to be the key and value of an additional
 +attribute for each metric being sent out to I<Sensu>.
 +
 +=back
 +
  =head2 Plugin C<zookeeper>
  
  The I<zookeeper plugin> will collect statistics from a I<Zookeeper> server