Merge branch 'collectd-4.6' into collectd-4.7
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 2 Jun 2009 09:31:32 +0000 (11:31 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 2 Jun 2009 09:31:32 +0000 (11:31 +0200)
Conflicts:
ChangeLog
src/collectd.conf.pod
version-gen.sh

1  2 
ChangeLog
src/collectd.conf.in
src/collectd.conf.pod
src/configfile.c

diff --combined ChangeLog
+++ b/ChangeLog
@@@ -1,67 -1,26 +1,70 @@@
- 2009-05-09, Version 4.5.4
 +2009-05-11, Version 4.7.0
 +      * apache plugin: Support to query multiple servers has been added.
 +        Thanks to Amit Gupta for the patch.
 +      * apache plugin: Handling of lighttpd's scoreboard statistics has been
 +        improved. Thanks to Amit Gupta for the patch.
 +      * conntrack plugin: The new conntrack plugin collects the connection
 +        tracking table size. Thanks to Tomasz Pala for the patch.
 +      * fscache plugin: The new fscache plugin collects statistics about
 +        Linux' file-system based caching framework. Thanks to Edward
 +        Konetzko for the patch.
 +      * gmond plugin: The new gmond plugin can receive and interpret
 +        multicast traffic from Ganglia's gmond daemon.
 +      * java plugin: The new java plugin exports the collectd API to Java,
 +        making it possible to write extensions to collectd in Java.
 +      * memcachec plugin: The new memcachec plugin queries data from a
 +        memcached daemon and parses it similar to the cURL plugin. Thanks to
 +        Doug MacEachern for the initial code.
 +      * memcached plugin: Support for connections over UNIX domain sockets
 +        has been added. Thanks to Franck Lombardi for the patch.
 +      * memory plugin: Support for OpenBSD and possibly other *BSDs has been
 +        added. Thanks to Simon Kuhnle for the patch.
 +      * mysql plugin: Support to query multiple databases has been added.
 +        Thanks to Doug MacEachern for the patch.
 +      * mysql plugin: Master/slave statistics have been added.
 +      * mysql plugin: Lock statistics have been added. Thanks to Rodolphe
 +        Quiédeville for the patch.
 +      * network plugin: The possibility to sign or encrypt network traffic
 +        has been added.
 +      * protocols plugin: The new protocols plugin provides information
 +        about network protocols, such as IP, TCP and UDP.
 +      * snmp plugin: The intervals given in the configuration of the SNMP
 +        plugin must no longer be a multiple of the global interval.
 +      * table plugin: The new Table plugin provides parsing for table-like
 +        structured files, such as many files beneath /proc.
 +      * ted plugin: The new TED plugin reads power consumption measurements
 +        from “The Energy Detective” (TED). Thanks to Eric Reed for this
 +        plugin.
 +      * onewire plugin: The new `Interval' option allows collecting
 +        information from OneWire sensors at arbitrary intervals.
 +      * ping plugin: Support for collecting the drop rate and standard
 +        deviation of round-trip times has been added.
 +      * uptime plugin: The new uptime plugin can collect the server's
 +        uptime. Thanks to Marco Chiappero for the patch.
 +
+ 2009-06-02, Version 4.6.3
        * Build system, various plugins: Many build fixes for FreeBSD,
          OpenBSD, NetBSD, Solaris and Mac OS X. Big thanks to Doug MacEachern
          for many fixes and providing a build system for many platforms,
          Ulf Zimmermann for providing a FreeBSD system and Simon Kuhnle for
          providing an OpenBSD system.
-       * collectd: Fix a potential race condition when creating directories.
+       * collectd: Two bugs with the threshold checking have been fixed. The
+         first one prevented thresholds to be checked at all, the second one
+         caused wrong behavior with the persistency option. Thanks to Andrés
+         J. Díaz for fixing these problems.
+       * collectd: Handling of the `Include' configuration option has been
+         fixed.
        * battery plugin: Don't complain about a missing directory every
          interval.
-       * dns plugin: Slight portability fixes.
        * exec plugin: Allow executed programs to close STDERR. Thanks to
          Thorsten von Eicken for reporting this problem.
        * irq plugin: Fix handling of overflowing 32-bit counters. Thanks to
          Tomasz Pala for the patch.
        * perl plugin: Portability build-fixes. Thanks to Doug MacEachern for
          the patch.
-       * rrdtool plugin: Fix a possible race condition: If the network plugin
-         is initialized and dispatches a value before the rrdtool plugin is
-         initialized, the daemon may crash.
        * memory plugin: Fix a potential problem under Solaris.
+       * swap plugin: A work-around for 32-bit Solaris has been added. Thanks
+         to Doug MacEachern for the patch.
  
  2009-03-18, Version 4.6.2
        * collectd: Some Solaris utility code has been improved.
        * swap plugin: Code for OpenBSD (and possibly other *BSDs) has been
          added.
  
+ 2009-05-09, Version 4.5.4
+       * Build system, various plugins: Many build fixes for FreeBSD,
+         OpenBSD, NetBSD, Solaris and Mac OS X. Big thanks to Doug MacEachern
+         for many fixes and providing a build system for many platforms,
+         Ulf Zimmermann for providing a FreeBSD system and Simon Kuhnle for
+         providing an OpenBSD system.
+       * collectd: Fix a potential race condition when creating directories.
+       * battery plugin: Don't complain about a missing directory every
+         interval.
+       * dns plugin: Slight portability fixes.
+       * exec plugin: Allow executed programs to close STDERR. Thanks to
+         Thorsten von Eicken for reporting this problem.
+       * irq plugin: Fix handling of overflowing 32-bit counters. Thanks to
+         Tomasz Pala for the patch.
+       * perl plugin: Portability build-fixes. Thanks to Doug MacEachern for
+         the patch.
+       * rrdtool plugin: Fix a possible race condition: If the network plugin
+         is initialized and dispatches a value before the rrdtool plugin is
+         initialized, the daemon may crash.
+       * memory plugin: Fix a potential problem under Solaris.
  2009-02-22, Version 4.5.3
        * build system: The check for libupsclient even when `pkg-config' is
          not available.
diff --combined src/collectd.conf.in
@@@ -4,12 -4,6 +4,12 @@@
  # http://collectd.org/
  #
  
 +##############################################################################
 +# Global                                                                     #
 +#----------------------------------------------------------------------------#
 +# Global settings for the daemon.                                            #
 +##############################################################################
 +
  #Hostname    "localhost"
  FQDNLookup   true
  #BaseDir     "@prefix@/var/lib/@PACKAGE_NAME@"
  #Interval     10
  #ReadThreads  5
  
 -@BUILD_PLUGIN_LOGFILE_TRUE@LoadPlugin logfile
 -@BUILD_PLUGIN_SYSLOG_TRUE@LoadPlugin syslog
 +##############################################################################
 +# Logging                                                                    #
 +#----------------------------------------------------------------------------#
 +# Plugins which provide logging functions should be loaded first, so log     #
 +# messages generated when loading or configuring other plugins can be        #
 +# accessed.                                                                  #
 +##############################################################################
 +
 +@LOAD_PLUGIN_SYSLOG@LoadPlugin syslog
 +@LOAD_PLUGIN_LOGFILE@LoadPlugin logfile
  
  #<Plugin logfile>
 -#     LogLevel info
 +#     LogLevel @DEFAULT_LOG_LEVEL@
  #     File STDOUT
  #     Timestamp true
  #</Plugin>
  
  #<Plugin syslog>
 -#     LogLevel info
 -#</Plugin>
 -
 -@BUILD_PLUGIN_APACHE_TRUE@LoadPlugin apache
 -@BUILD_PLUGIN_APCUPS_TRUE@LoadPlugin apcups
 -@BUILD_PLUGIN_APPLE_SENSORS_TRUE@LoadPlugin apple_sensors
 -@BUILD_PLUGIN_ASCENT_TRUE@LoadPlugin ascent
 -@BUILD_PLUGIN_BATTERY_TRUE@LoadPlugin battery
 -@BUILD_PLUGIN_BIND_TRUE@LoadPlugin bind
 -@BUILD_PLUGIN_CPU_TRUE@LoadPlugin cpu
 -@BUILD_PLUGIN_CPUFREQ_TRUE@LoadPlugin cpufreq
 -@BUILD_PLUGIN_CSV_TRUE@LoadPlugin csv
 -@BUILD_PLUGIN_CURL_TRUE@LoadPlugin curl
 -@BUILD_PLUGIN_DBI_TRUE@LoadPlugin dbi
 -@BUILD_PLUGIN_DF_TRUE@LoadPlugin df
 -@BUILD_PLUGIN_DISK_TRUE@LoadPlugin disk
 -@BUILD_PLUGIN_DNS_TRUE@LoadPlugin dns
 -@BUILD_PLUGIN_EMAIL_TRUE@LoadPlugin email
 -@BUILD_PLUGIN_ENTROPY_TRUE@LoadPlugin entropy
 -@BUILD_PLUGIN_EXEC_TRUE@LoadPlugin exec
 -@BUILD_PLUGIN_FILECOUNT_TRUE@LoadPlugin filecount
 -@BUILD_PLUGIN_HDDTEMP_TRUE@LoadPlugin hddtemp
 -@BUILD_PLUGIN_INTERFACE_TRUE@LoadPlugin interface
 -@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
 -@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi
 -@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
 -@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
 -@BUILD_PLUGIN_LIBVIRT_TRUE@LoadPlugin libvirt
 -@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
 -@BUILD_PLUGIN_MBMON_TRUE@LoadPlugin mbmon
 -@BUILD_PLUGIN_MEMCACHED_TRUE@LoadPlugin memcached
 -@BUILD_PLUGIN_MEMORY_TRUE@LoadPlugin memory
 -@BUILD_PLUGIN_MULTIMETER_TRUE@LoadPlugin multimeter
 -@BUILD_PLUGIN_MYSQL_TRUE@LoadPlugin mysql
 -@BUILD_PLUGIN_NETLINK_TRUE@LoadPlugin netlink
 -@BUILD_PLUGIN_NETWORK_TRUE@LoadPlugin network
 -@BUILD_PLUGIN_NFS_TRUE@LoadPlugin nfs
 -@BUILD_PLUGIN_NGINX_TRUE@LoadPlugin nginx
 -@BUILD_PLUGIN_NOTIFY_DESKTOP_TRUE@LoadPlugin notify_desktop
 -@BUILD_PLUGIN_NOTIFY_EMAIL_TRUE@LoadPlugin notify_email
 -@BUILD_PLUGIN_NTPD_TRUE@LoadPlugin ntpd
 -@BUILD_PLUGIN_NUT_TRUE@LoadPlugin nut
 -@BUILD_PLUGIN_ONEWIRE_TRUE@LoadPlugin onewire
 -@BUILD_PLUGIN_OPENVPN_TRUE@LoadPlugin openvpn
 -@BUILD_PLUGIN_ORACLE_TRUE@LoadPlugin oracle
 -@BUILD_PLUGIN_PERL_TRUE@LoadPlugin perl
 -@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_RRDCACHED_TRUE@LoadPlugin rrdcached
 -@BUILD_PLUGIN_RRDTOOL_TRUE@LoadPlugin rrdtool
 -@BUILD_PLUGIN_SENSORS_TRUE@LoadPlugin sensors
 -@BUILD_PLUGIN_SERIAL_TRUE@LoadPlugin serial
 -@BUILD_PLUGIN_SNMP_TRUE@LoadPlugin snmp
 -@BUILD_PLUGIN_SWAP_TRUE@LoadPlugin swap
 -@BUILD_PLUGIN_TAIL_TRUE@LoadPlugin tail
 -@BUILD_PLUGIN_TAPE_TRUE@LoadPlugin tape
 -@BUILD_PLUGIN_TCPCONNS_TRUE@LoadPlugin tcpconns
 -@BUILD_PLUGIN_TEAMSPEAK2_TRUE@LoadPlugin teamspeak2
 -@BUILD_PLUGIN_THERMAL_TRUE@LoadPlugin thermal
 -@BUILD_PLUGIN_UNIXSOCK_TRUE@LoadPlugin unixsock
 -@BUILD_PLUGIN_USERS_TRUE@LoadPlugin users
 -#LoadPlugin uuid
 -@BUILD_PLUGIN_VMEM_TRUE@LoadPlugin vmem
 -@BUILD_PLUGIN_VSERVER_TRUE@LoadPlugin vserver
 -@BUILD_PLUGIN_WIRELESS_TRUE@LoadPlugin wireless
 -@BUILD_PLUGIN_XMMS_TRUE@LoadPlugin xmms
 +#     LogLevel @DEFAULT_LOG_LEVEL@
 +#</Plugin>
 +
 +##############################################################################
 +# LoadPlugin section                                                         #
 +#----------------------------------------------------------------------------#
 +# Lines beginning with a single `#' belong to plugins which have been built  #
 +# but are disabled by default.                                               #
 +#                                                                            #
 +# Lines begnning with `##' belong to plugins which have not been built due   #
 +# to missing dependencies or because they have been deactivated explicitly.  #
 +##############################################################################
 +
 +#@BUILD_PLUGIN_APACHE_TRUE@LoadPlugin apache
 +#@BUILD_PLUGIN_APCUPS_TRUE@LoadPlugin apcups
 +#@BUILD_PLUGIN_APPLE_SENSORS_TRUE@LoadPlugin apple_sensors
 +#@BUILD_PLUGIN_ASCENT_TRUE@LoadPlugin ascent
 +#@BUILD_PLUGIN_BATTERY_TRUE@LoadPlugin battery
 +#@BUILD_PLUGIN_BIND_TRUE@LoadPlugin bind
 +#@BUILD_PLUGIN_CONNTRACK_TRUE@LoadPlugin conntrack
 +@BUILD_PLUGIN_CPU_TRUE@@BUILD_PLUGIN_CPU_TRUE@LoadPlugin cpu
 +#@BUILD_PLUGIN_CPUFREQ_TRUE@LoadPlugin cpufreq
 +@LOAD_PLUGIN_CSV@LoadPlugin csv
 +#@BUILD_PLUGIN_CURL_TRUE@LoadPlugin curl
 +#@BUILD_PLUGIN_DBI_TRUE@LoadPlugin dbi
 +#@BUILD_PLUGIN_DF_TRUE@LoadPlugin df
 +#@BUILD_PLUGIN_DISK_TRUE@LoadPlugin disk
 +#@BUILD_PLUGIN_DNS_TRUE@LoadPlugin dns
 +#@BUILD_PLUGIN_EMAIL_TRUE@LoadPlugin email
 +#@BUILD_PLUGIN_ENTROPY_TRUE@LoadPlugin entropy
 +#@BUILD_PLUGIN_EXEC_TRUE@LoadPlugin exec
 +#@BUILD_PLUGIN_FILECOUNT_TRUE@LoadPlugin filecount
 +#@BUILD_PLUGIN_FSCACHE_TRUE@LoadPlugin fscache
 +#@BUILD_PLUGIN_GMOND_TRUE@LoadPlugin gmond
 +#@BUILD_PLUGIN_HDDTEMP_TRUE@LoadPlugin hddtemp
 +@BUILD_PLUGIN_INTERFACE_TRUE@@BUILD_PLUGIN_INTERFACE_TRUE@LoadPlugin interface
 +#@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
 +#@BUILD_PLUGIN_IPMI_TRUE@LoadPlugin ipmi
 +#@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
 +#@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
 +#@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
 +#@BUILD_PLUGIN_LIBVIRT_TRUE@LoadPlugin libvirt
 +@BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
 +#@BUILD_PLUGIN_MBMON_TRUE@LoadPlugin mbmon
 +#@BUILD_PLUGIN_MEMCACHEC_TRUE@LoadPlugin memcachec
 +#@BUILD_PLUGIN_MEMCACHED_TRUE@LoadPlugin memcached
 +@BUILD_PLUGIN_MEMORY_TRUE@@BUILD_PLUGIN_MEMORY_TRUE@LoadPlugin memory
 +#@BUILD_PLUGIN_MULTIMETER_TRUE@LoadPlugin multimeter
 +#@BUILD_PLUGIN_MYSQL_TRUE@LoadPlugin mysql
 +#@BUILD_PLUGIN_NETLINK_TRUE@LoadPlugin netlink
 +@LOAD_PLUGIN_NETWORK@LoadPlugin network
 +#@BUILD_PLUGIN_NFS_TRUE@LoadPlugin nfs
 +#@BUILD_PLUGIN_NGINX_TRUE@LoadPlugin nginx
 +#@BUILD_PLUGIN_NOTIFY_DESKTOP_TRUE@LoadPlugin notify_desktop
 +#@BUILD_PLUGIN_NOTIFY_EMAIL_TRUE@LoadPlugin notify_email
 +#@BUILD_PLUGIN_NTPD_TRUE@LoadPlugin ntpd
 +#@BUILD_PLUGIN_NUT_TRUE@LoadPlugin nut
 +#@BUILD_PLUGIN_ONEWIRE_TRUE@LoadPlugin onewire
 +#@BUILD_PLUGIN_OPENVPN_TRUE@LoadPlugin openvpn
 +#@BUILD_PLUGIN_ORACLE_TRUE@LoadPlugin oracle
 +#@BUILD_PLUGIN_PERL_TRUE@LoadPlugin perl
 +#@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_RRDCACHED_TRUE@LoadPlugin rrdcached
 +@LOAD_PLUGIN_RRDTOOL@LoadPlugin rrdtool
 +#@BUILD_PLUGIN_SENSORS_TRUE@LoadPlugin sensors
 +#@BUILD_PLUGIN_SERIAL_TRUE@LoadPlugin serial
 +#@BUILD_PLUGIN_SNMP_TRUE@LoadPlugin snmp
 +#@BUILD_PLUGIN_SWAP_TRUE@LoadPlugin swap
 +#@BUILD_PLUGIN_TABLE_TRUE@LoadPlugin table
 +#@BUILD_PLUGIN_TAIL_TRUE@LoadPlugin tail
 +#@BUILD_PLUGIN_TAPE_TRUE@LoadPlugin tape
 +#@BUILD_PLUGIN_TCPCONNS_TRUE@LoadPlugin tcpconns
 +#@BUILD_PLUGIN_TEAMSPEAK2_TRUE@LoadPlugin teamspeak2
 +#@BUILD_PLUGIN_TED_TRUE@LoadPlugin ted
 +#@BUILD_PLUGIN_THERMAL_TRUE@LoadPlugin thermal
 +#@BUILD_PLUGIN_UNIXSOCK_TRUE@LoadPlugin unixsock
 +#@BUILD_PLUGIN_UPTIME_TRUE@LoadPlugin uptime
 +#@BUILD_PLUGIN_USERS_TRUE@LoadPlugin users
 +#@BUILD_PLUGIN_UUID_TRUE@LoadPlugin uuid
 +#@BUILD_PLUGIN_VMEM_TRUE@LoadPlugin vmem
 +#@BUILD_PLUGIN_VSERVER_TRUE@LoadPlugin vserver
 +#@BUILD_PLUGIN_WIRELESS_TRUE@LoadPlugin wireless
 +#@BUILD_PLUGIN_XMMS_TRUE@LoadPlugin xmms
 +
 +##############################################################################
 +# Plugin configuration                                                       #
 +#----------------------------------------------------------------------------#
 +# In this section configuration stubs for each plugin are provided. A desc-  #
 +# ription of those options is available in the collectd.conf(5) manual page. #
 +##############################################################################
  
  #<Plugin apache>
  #     URL "http://localhost/status?auto"
  #     </Directory>
  #</Plugin>
  
 -@BUILD_PLUGIN_HDDTEMP_TRUE@<Plugin hddtemp>
 -#     Host "127.0.0.1"
 -#     Port "7634"
 -@BUILD_PLUGIN_HDDTEMP_TRUE@   TranslateDevicename false
 -@BUILD_PLUGIN_HDDTEMP_TRUE@</Plugin>
 +#<Plugin "gmond">
 +#  MCReceiveFrom "239.2.11.71" "8649"
 +#  <Metric "swap_total">
 +#    Type "swap"
 +#    TypeInstance "total"
 +#    DataSource "value"
 +#  </Metric>
 +#  <Metric "swap_free">
 +#    Type "swap"
 +#    TypeInstance "free"
 +#    DataSource "value"
 +#  </Metric>
 +#</Plugin>
 +
 +#<Plugin hddtemp>
 +#  Host "127.0.0.1"
 +#  Port "7634"
 +#
 +#  #----------------------------------------------------------------#
 +#  # `TranslateDevicename' enabled backwards compatibility behavior #
 +#  # and is enabled by default. Setting this option to `false' is   #
 +#  # highly recommended.                                            #
 +#  #----------------------------------------------------------------#
 +#  TranslateDevicename false
 +#</Plugin>
  
  #<Plugin interface>
  #     Interface "eth0"
  #     IgnoreSelected false
  #</Plugin>
  
+ #<Plugin ipmi>
+ #     Sensor "some_sensor"
+ #     Sensor "another_one"
+ #     IgnoreSelected false
+ #     NotifySensorAdd false
+ #     NotifySensorRemove true
+ #     NotifySensorNotPresent false
+ #</Plugin>
  #<Plugin iptables>
  #     Chain table chain
  #</Plugin>
  #     IgnoreSelected true
  #</Plugin>
  
 +#<Plugin "java">
 +#     JVMArg "-verbose:jni"
 +#     JVMArg "-Djava.class.path=/opt/collectd/lib/collectd/bindings/java"
 +#
 +#     LoadPlugin "org.collectd.java.Foobar"
 +#     <Plugin "org.collectd.java.Foobar">
 +#       # To be parsed by the plugin
 +#     </Plugin>
 +#</Plugin>
 +
  #<Plugin libvirt>
  #     Connection "xen:///"
  #     RefreshInterval 60
  #     Port "411"
  #</Plugin>
  
 +#<Plugin memcachec>
 +#     <Page "plugin_instance">
 +#             Server "localhost"
 +#             Key "page_key"
 +#             <Match>
 +#                     Regex "(\\d+) bytes sent"
 +#                     DSType CounterAdd
 +#                     Type "ipt_octets"
 +#                     Instance "type_instance"
 +#             </Match>
 +#     </Page>
 +#</Plugin>
 +
  #<Plugin memcached>
  #     Host "127.0.0.1"
  #     Port "11211"
  #</Plugin>
  
  #<Plugin mysql>
 -#     Host "database.serv.er"
 -#     User "db_user"
 -#     Password "secret"
 -#     Database "db_name"
 +#     <Database db_name>
 +#             Host "database.serv.er"
 +#             User "db_user"
 +#             Password "secret"
 +#             Database "db_name"
 +#             MasterStats true
 +#     </Database>
 +#
 +#     <Database db_name2>
 +#             Host "localhost"
 +#             Socket "/var/run/mysql/mysqld.sock"
 +#             SlaveStats true
 +#             SlaveNotifications true
 +#     </Database>
  #</Plugin>
  
  #<Plugin netlink>
  #     IgnoreSelected false
  #</Plugin>
  
 -#<Plugin network>
 -#     Server "ff18::efc0:4a42" "25826"
 -#     Server "239.192.74.66" "25826"
 +@LOAD_PLUGIN_NETWORK@<Plugin network>
 +@LOAD_PLUGIN_NETWORK@ Server "ff18::efc0:4a42" "25826"
 +@LOAD_PLUGIN_NETWORK@ Server "239.192.74.66" "25826"
  #     Listen "ff18::efc0:4a42" "25826"
  #     Listen "239.192.74.66" "25826"
  #     TimeToLive "128"
  #     Forward false
  #     CacheFlush 1800
 -#</Plugin>
 +@LOAD_PLUGIN_NETWORK@</Plugin>
  
  #<Plugin nginx>
  #     URL "http://localhost/status?auto"
  #     Process "name"
  #</Plugin>
  
 +#<Plugin protocols>
 +#     Value "/^Tcp:/"
 +#     IgnoreSelected false
 +#</Plugin>
 +
  #<Plugin rrdcached>
  #     DaemonAddress "unix:/tmp/rrdcached.sock"
  #     DataDir "@prefix@/var/lib/@PACKAGE_NAME@/rrd"
  #       Instance "IF-MIB::ifDescr"
  #       Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
  #   </Data>
 -#   
 +#
  #   <Host "some.switch.mydomain.org">
  #       Address "192.168.0.2"
  #       Version 1
  #   </Host>
  #</Plugin>
  
 +#<Plugin "table">
 +#     <Table "/proc/slabinfo">
 +#             Instance "slabinfo"
 +#             Separator " "
 +#             <Result>
 +#                     Type gauge
 +#                     InstancePrefix "active_objs"
 +#                     InstancesFrom 0
 +#                     ValuesFrom 1
 +#             </Result>
 +#             <Result>
 +#                     Type gauge
 +#                     InstancePrefix "objperslab"
 +#                     InstancesFrom 0
 +#                     ValuesFrom 4
 +#             </Result>
 +#     </Table>
 +#</Plugin>
 +
  #<Plugin "tail">
  #  <File "/var/log/exim4/mainlog">
  #    Instance "exim"
  #     Server "8767"
  #</Plugin>
  
 +#<Plugin ted>
 +#     Device "/dev/ttyUSB0"
 +#     Retries 0
 +#</Plugin>
 +
  #<Plugin thermal>
  #     ForceUseProcfs false
  #     Device "THRM"
  #     Verbose false
  #</Plugin>
  
 -# * * * * * * * * * * * * *
 -# * FILTER CONFIGURATION  *
 -# * * * * * * * * * * * * *
 -
 -# The following configures collectd's filtering mechanism. Before changing
 -# anything in this section, please read the `FILTER CONFIGURATION' section in
 -# the collectd.conf(5) manual page.
 +##############################################################################
 +# Filter configuration                                                       #
 +#----------------------------------------------------------------------------#
 +# The following configures collectd's filtering mechanism. Before changing   #
 +# anything in this section, please read the `FILTER CONFIGURATION' section   #
 +# in the collectd.conf(5) manual page.                                       #
 +##############################################################################
  
  # Load required matches:
  #@BUILD_PLUGIN_MATCH_REGEX_TRUE@LoadPlugin match_regex
  #@BUILD_PLUGIN_TARGET_NOTIFICATION_TRUE@LoadPlugin target_notification
  #@BUILD_PLUGIN_TARGET_REPLACE_TRUE@LoadPlugin target_replace
  #@BUILD_PLUGIN_TARGET_SET_TRUE@LoadPlugin target_set
 - 
 -# The following block demonstrates the default behavior if no filtering is
 -# configured at all: All values will be sent to all available write plugins.
 +
 +#----------------------------------------------------------------------------#
 +# The following block demonstrates the default behavior if no filtering is   #
 +# configured at all: All values will be sent to all available write plugins. #
 +#----------------------------------------------------------------------------#
  
  #<Chain "Main">
  #  Target "write"
diff --combined src/collectd.conf.pod
@@@ -665,7 -665,7 +665,7 @@@ separated by dashes I<("-")>
  
  Specifies the columns whose values will be used to create the "type-instance"
  for each row. If you specify more than one column, the value of all columns
 -will be join together with the dashes I<("-")> as separation character.
 +will be joined together with dashes I<("-")> as separation characters.
  
  The plugin itself does not check whether or not all built instances are
  different. It's your responsibility to assure that each is unique. This is
@@@ -962,88 -962,6 +962,88 @@@ Controls whether or not to recurse int
  
  =back
  
 +=head2 Plugin C<gmond>
 +
 +The I<gmond> plugin received the multicast traffic sent by B<gmond>, the
 +statistics collection daemon of Ganglia. Mappings for the standard "metrics"
 +are built-in, custom mappings may be added via B<Metric> blocks, see below.
 +
 +Synopsis:
 +
 + <Plugin "gmond">
 +   MCReceiveFrom "239.2.11.71" "8649"
 +   <Metric "swap_total">
 +     Type "swap"
 +     TypeInstance "total"
 +     DataSource "value"
 +   </Metric>
 +   <Metric "swap_free">
 +     Type "swap"
 +     TypeInstance "free"
 +     DataSource "value"
 +   </Metric>
 + </Plugin>
 +
 +The following metrics are built-in:
 +
 +=over 4
 +
 +=item *
 +
 +load_one, load_five, load_fifteen
 +
 +=item *
 +
 +cpu_user, cpu_system, cpu_idle, cpu_nice, cpu_wio
 +
 +=item *
 +
 +mem_free, mem_shared, mem_buffers, mem_cached, mem_total
 +
 +=item *
 +
 +bytes_in, bytes_out
 +
 +=item *
 +
 +pkts_in, pkts_out
 +
 +=back
 +
 +Available configuration options:
 +
 +=over 4
 +
 +=item B<MCReceiveFrom> I<MCGroup> [I<Port>]
 +
 +Sets sets the multicast group and UDP port to which to subscribe.
 +
 +Default: B<239.2.11.71>E<nbsp>/E<nbsp>B<8649>
 +
 +=item E<lt>B<Metric> I<Name>E<gt>
 +
 +These blocks add a new metric conversion to the internal table. I<Name>, the
 +string argument to the B<Metric> block, is the metric name as used by Ganglia.
 +
 +=over 4
 +
 +=item B<Type> I<Type>
 +
 +Type to map this metric to. Required.
 +
 +=item B<TypeInstance> I<Instance>
 +
 +Type-instance to use. Optional.
 +
 +=item B<DataSource> I<Name>
 +
 +Data source to map this metric to. If the configured type has exactly one data
 +source, this is optional. Otherwise the option is required.
 +
 +=back
 +
 +=back
 +
  =head2 Plugin C<hddtemp>
  
  To get values from B<hddtemp> collectd connects to B<localhost> (127.0.0.1),
@@@ -1168,62 -1086,6 +1168,62 @@@ and all other interrupts are collected
  
  =back
  
 +=head2 Plugin C<java>
 +
 +The I<Java> plugin makes it possible to write extensions for collectd in Java.
 +This section only discusses the syntax and semantic of the configuration
 +options. For more in-depth information on the I<Java> plugin, please read
 +L<collectd-java(5)>.
 +
 +Synopsis:
 +
 + <Plugin "java">
 +   JVMArg "-verbose:jni"
 +   JVMArg "-Djava.class.path=/opt/collectd/lib/collectd/bindings/java"
 +   LoadPlugin "org.collectd.java.Foobar"
 +   <Plugin "org.collectd.java.Foobar">
 +     # To be parsed by the plugin
 +   </Plugin>
 + </Plugin>
 +
 +Available configuration options:
 +
 +=over 4
 +
 +=item B<JVMArg> I<Argument>
 +
 +Argument that is to be passed to the I<Java Virtual Machine> (JVM). This works
 +exactly the way the arguments to the I<java> binary on the command line work.
 +Execute C<javaE<nbsp>--help> for details.
 +
 +Please note that B<all> these options must appear B<before> (i.E<nbsp>e. above)
 +any other options! When another option is found, the JVM will be started and
 +later options will have to be ignored!
 +
 +=item B<LoadPlugin> I<JavaClass>
 +
 +Instantiates a new I<JavaClass> object. The constructor of this object very
 +likely then registers one or more callback methods with the server.
 +
 +See L<collectd-java(5)> for details.
 +
 +When the first such option is found, the virtual machine (JVM) is created. This
 +means that all B<JVMArg> options must appear before (i.E<nbsp>e. above) all
 +B<LoadPlugin> options!
 +
 +=item B<Plugin> I<Name>
 +
 +The entire block is passed to the Java plugin as an
 +I<org.collectd.api.OConfigItem> object.
 +
 +For this to work, the plugin has to register a configuration callback first,
 +see L<collectd-java(5)/"config callback">. This means, that the B<Plugin> block
 +must appear after the appropriate B<LoadPlugin> block. Also note, that I<Name>
 +depends on the (Java) plugin registering the callback and is completely
 +independent from the I<JavaClass> argument passed to B<LoadPlugin>.
 +
 +=back
 +
  =head2 Plugin C<libvirt>
  
  This plugin allows CPU, disk and network load to be collected for virtualized
@@@ -1355,57 -1217,6 +1355,57 @@@ TCP-Port to connect to. Defaults to B<4
  
  =back
  
 +=head2 Plugin C<memcachec>
 +
 +The C<memcachec plugin> connects to a memcached server, queries one or more
 +given I<pages> and parses the returned data according to user specification.
 +The I<matches> used are the same as the matches used in the C<curl> and C<tail>
 +plugins.
 +
 +In order to talk to the memcached server, this plugin uses the I<libmemcached>
 +library. Please note that there is another library with a very similar name,
 +libmemcache (notice the missing `d'), which is not applicable.
 +
 +Synopsis of the configuration:
 +
 + <Plugin "memcachec">
 +   <Page "plugin_instance">
 +     Server "localhost"
 +     Key "page_key"
 +     <Match>
 +       Regex "(\\d+) bytes sent"
 +       DSType CounterAdd
 +       Type "ipt_octets"
 +       Instance "type_instance"
 +     </Match>
 +   </Page>
 + </Plugin>
 +
 +The configuration options are:
 +
 +=over 4
 +
 +=item E<lt>B<Page> I<Name>E<gt>
 +
 +Each B<Page> block defines one I<page> to be queried from the memcached server.
 +The block requires one string argument which is used as I<plugin instance>.
 +
 +=item B<Server> I<Address>
 +
 +Sets the server address to connect to when querying the page. Must be inside a
 +B<Page> block.
 +
 +=item B<Key> I<Key>
 +
 +When connected to the memcached server, asks for the page I<Key>.
 +
 +=item E<lt>B<Match>E<gt>
 +
 +Match blocks define which strings to look for and how matches substrings are
 +interpreted. For a description of match blocks, please see L<"Plugin tail">.
 +
 +=back
 +
  =head2 Plugin C<memcached>
  
  The C<memcached plugin> connects to a memcached server and queries statistics
@@@ -1426,50 -1237,19 +1426,50 @@@ TCP-Port to connect to. Defaults to B<1
  
  =head2 Plugin C<mysql>
  
 -The C<mysql plugin> requires B<mysqlclient> to be installed. It connects to the
 -database when started and keeps the connection up as long as possible. When the
 -connection is interrupted for whatever reason it will try to re-connect. The
 -plugin will complaint loudly in case anything goes wrong.
 +The C<mysql plugin> requires B<mysqlclient> to be installed. It connects to
 +one or more databases when started and keeps the connection up as long as
 +possible. When the connection is interrupted for whatever reason it will try
 +to re-connect. The plugin will complaint loudly in case anything goes wrong.
 +
 +This plugin issues the MySQL C<SHOW STATUS> / C<SHOW GLOBAL STATUS> command
 +and collects information about MySQL network traffic, executed statements,
 +requests, the query cache and threads by evaluating the
 +C<Bytes_{received,sent}>, C<Com_*>, C<Handler_*>, C<Qcache_*> and C<Threads_*>
 +return values. Please refer to the B<MySQL reference manual>, I<5.1.6. Server
 +Status Variables> for an explanation of these values.
 +
 +Optionally, master and slave statistics may be collected in a MySQL
 +replication setup. In that case, information about the synchronization state
 +of the nodes are collected by evaluating the C<Position> return value of the
 +C<SHOW MASTER STATUS> command and the C<Seconds_Behind_Master>,
 +C<Read_Master_Log_Pos> and C<Exec_Master_Log_Pos> return values of the
 +C<SHOW SLAVE STATUS> command. See the B<MySQL reference manual>,
 +I<12.5.5.21 SHOW MASTER STATUS Syntax> and
 +I<12.5.5.31 SHOW SLAVE STATUS Syntax> for details.
  
 -This plugin issues the MySQL C<SHOW STATUS> command and collects information
 -about MySQL network traffic, executed statements, requests, the query cache
 -and threads by evaluating the C<Bytes_{received,sent}>, C<Com_*>,
 -C<Handler_*>, C<Qcache_*> and C<Threads_*> return values. Please refer to the
 -B<MySQL reference manual>, I<5.1.6. Server Status Variables> for an
 -explanation of these values.
 +Synopsis:
  
 -Use the following options to configure the plugin:
 +  <Plugin mysql>
 +    <Database foo>
 +      Host "hostname"
 +      User "username"
 +      Password "password"
 +      Port "3306"
 +      MasterStats true
 +    </Database>
 +
 +    <Database bar>
 +      Host "localhost"
 +      Socket "/var/run/mysql/mysqld.sock"
 +      SlaveStats true
 +      SlaveNotifications true
 +    </Database>
 +  </Plugin>
 +
 +A B<Database> 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 reference manual>.
  
  =over 4
  
@@@ -1509,17 -1289,6 +1509,17 @@@ only has any effect, if B<Host> is set 
  Otherwise, use the B<Port> option above. See the documentation for the
  C<mysql_real_connect> function for details.
  
 +=item B<MasterStats> I<true|false>
 +
 +=item B<SlaveStats> I<true|false>
 +
 +Enable the collection of master / slave statistics in a replication setup.
 +
 +=item B<SlaveNotifications> I<true|false>
 +
 +If enabled, the plugin sends a notification if the replication slave I/O and /
 +or SQL threads are not running.
 +
  =back
  
  =head2 Plugin C<netlink>
@@@ -1601,119 -1370,32 +1601,119 @@@ specified statistics will not be collec
  
  =head2 Plugin C<network>
  
 +The Network plugin sends data to a remote instance of collectd, receives data
 +from a remote instance, or both at the same time. Data which has been received
 +from the network is usually not transmitted again, but this can be actived, see
 +the B<Forward> option below.
 +
 +The default IPv6 multicast group is C<ff18::efc0:4a42>. The default IPv4
 +multicast group is C<239.192.74.66>. The default I<UDP> port is B<25826>.
 +
 +Both, B<Server> and B<Listen> can be used as single option or as block. When
 +used as block, given options are valid for this socket only. For example:
 +
 + <Plugin "network">
 +   Server "collectd.internal.tld"
 +   <Server "collectd.external.tld">
 +     SecurityLevel "sign"
 +     Username "myhostname"
 +     Password "ohl0eQue"
 +   </Server>
 + </Plugin>
 +
 +=over 4
 +
 +=item B<E<lt>Server> I<Host> [I<Port>]B<E<gt>>
 +
 +The B<Server> statement/block sets the server to send datagrams to. The
 +statement may occur multiple times to send each datagram to multiple
 +destinations.
 +
 +The argument I<Host> may be a hostname, an IPv4 address or an IPv6 address. The
 +optional second argument specifies a port number or a service name. If not
 +given, the default, B<25826>, is used.
 +
 +The following options are recognized within B<Server> blocks:
 +
  =over 4
  
 -=item B<Listen> I<Host> [I<Port>]
 +=item B<SecurityLevel> B<Encrypt>|B<Sign>|B<None>
  
 -=item B<Server> I<Host> [I<Port>]
 +Set the security you require for network communication. When the security level
 +has been set to B<Encrypt>, data sent over the network will be encrypted using
 +I<AES-256>. The integrity of encrypted packets is ensured using I<SHA-1>. When
 +set to B<Sign>, transmitted data is signed using the I<HMAC-SHA-256> message
 +authentication code. When set to B<None>, data is sent without any security.
  
 -The B<Server> statement sets the server to send datagrams B<to>.  The statement
 -may occur multiple times to send each datagram to multiple destinations.
 +This feature is only available if the I<network> plugin was linked with
 +I<libgcrypt>.
 +
 +=item B<Username> I<Username>
 +
 +Sets the username to transmit. This is used by the server to lookup the
 +password. See B<AuthFile> below. All security levels except B<None> require
 +this setting.
 +
 +This feature is only available if the I<network> plugin was linked with
 +I<libgcrypt>.
 +
 +=item B<Password> I<Password>
 +
 +Sets a password (shared secret) for this socket. All security levels except
 +B<None> require this setting.
 +
 +This feature is only available if the I<network> plugin was linked with
 +I<libgcrypt>.
 +
 +=back
 +
 +=item B<E<lt>Listen> I<Host> [I<Port>]B<E<gt>>
  
  The B<Listen> statement sets the interfaces to bind to. When multiple
  statements are found the daemon will bind to multiple interfaces.
  
  The argument I<Host> may be a hostname, an IPv4 address or an IPv6 address. If
  the argument is a multicast address the daemon will join that multicast group.
 +The optional second argument specifies a port number or a service name. If not
 +given, the default, B<25826>, is used.
  
 -If no B<Listen> statement is found the server tries join both, the default IPv6
 -multicast group and the default IPv4 multicast group. If no B<Server> statement
 -is found the client will try to send data to the IPv6 multicast group first. If
 -that fails the client will try the IPv4 multicast group.
 +The following options are recognized within C<E<lt>ListenE<gt>> blocks:
  
 -The default IPv6 multicast group is C<ff18::efc0:4a42>. The default IPv4
 -multicast group is C<239.192.74.66>.
 +=over 4
 +
 +=item B<SecurityLevel> B<Encrypt>|B<Sign>|B<None>
 +
 +Set the security you require for network communication. When the security level
 +has been set to B<Encrypt>, only encrypted data will be accepted. The integrity
 +of encrypted packets is ensured using I<SHA-1>. When set to B<Sign>, only
 +signed and encrypted data is accepted. When set to B<None>, all data will be
 +accepted. If an B<AuthFile> option was given (see below), encrypted data is
 +decrypted if possible.
 +
 +This feature is only available if the I<network> plugin was linked with
 +I<libgcrypt>.
 +
 +=item B<AuthFile> I<Filename>
 +
 +Sets a file in which usernames are mapped to passwords. These passwords are
 +used to verify signatures and to decrypt encrypted network packets. If
 +B<SecurityLevel> is set to B<None>, this is optional. If given, signed data is
 +verified and encrypted packets are decrypted. Otherwise, signed data is
 +accepted without checking the signature and encrypted data cannot be decrypted.
 +For the other security levels this option is mandatory.
  
 -The optional I<Port> argument sets the port to use. It can either be given
 -using a numeric port number or a service name. If the argument is omitted the
 -default port B<25826> is assumed.
 +The file format is very simple: Each line consists of a username followed by a
 +colon and any number of spaces followed by the password. To demonstrate, an
 +example file could look like this:
 +
 +  user0: foo
 +  user1: bar
 +
 +Each time a packet is received, the modification time of the file is checked
 +using L<stat(2)>. If the file has been changed, the contents is re-read. While
 +the file is being read, it is locked using L<fcntl(2)>.
 +
 +=back
  
  =item B<TimeToLive> I<1-255>
  
@@@ -1951,11 -1633,6 +1951,11 @@@ enables you to do that: By setting B<Ig
  B<Sensor> is inverted: All selected interfaces are ignored and all other
  interfaces are collected.
  
 +=item B<Interval> I<Seconds>
 +
 +Sets the interval in which all sensors should be read. If not specified, the
 +global B<Interval> setting is used.
 +
  =back
  
  B<EXPERIMENTAL!> The C<onewire> plugin is experimental, because it doesn't yet
@@@ -2064,13 -1741,6 +2064,13 @@@ to collectd's plugin system. See L<coll
  
  =head2 Plugin C<ping>
  
 +The I<Ping> plugin starts a new thread which sends ICMP "ping" packets to the
 +configured hosts periodically and measures the network latency. Whenever the
 +C<read> function of the plugin is called, it submits the average latency, the
 +standard deviation and the drop rate for each host.
 +
 +Available configuration options:
 +
  =over 4
  
  =item B<Host> I<IP-address>
  Host to ping periodically. This option may be repeated several times to ping
  multiple hosts.
  
 +=item B<Interval> I<Seconds>
 +
 +Sets the interval in which to send ICMP echo packets to the configured hosts.
 +This is B<not> the interval in which statistics are queries from the plugin but
 +the interval in which the hosts are "pinged". Therefore, the setting here
 +should be smaller than or equal to the global B<Interval> setting. Fractional
 +times, such as "1.24" are allowed.
 +
 +Default: B<1.0>
 +
 +=item B<Timeout> I<Seconds>
 +
 +Time to wait for a response from the host to which an ICMP packet had been
 +sent. If a reply was not received after I<Seconds> seconds, the host is assumed
 +to be down or the packet to be dropped. This setting must be smaller than the
 +B<Interval> setting above for the plugin to work correctly. Fractional
 +arguments are accepted.
 +
 +Default: B<0.9>
 +
  =item B<TTL> I<0-255>
  
  Sets the Time-To-Live of generated ICMP packets.
@@@ -2171,7 -1821,7 +2171,7 @@@ L<http://www.postgresql.org/docs/manual
  The B<Query> block defines one database query which may later be used by a
  database definition. It accepts a single mandatory argument which specifies
  the name of the query. The names of all queries have to be unique (see the
- B<MinPGVersion> and B<MaxPGVersion> options below for an exception to this
+ B<MinVersion> and B<MaxVersion> options below for an exception to this
  rule). The following configuration options are available to define the query:
  
  In each B<Query> block, there is one or more B<Result> blocks. B<Result>
@@@ -2290,9 -1940,9 +2290,9 @@@ The order of the B<Column> options defi
  should be used. The first option specifies the data found in the first column,
  the second option that of the second column, and so on.
  
- =item B<MinPGVersion> I<version>
+ =item B<MinVersion> I<version>
  
- =item B<MaxPGVersion> I<version>
+ =item B<MaxVersion> I<version>
  
  Specify the minimum or maximum version of PostgreSQL that this query should be
  used with. Some statistics might only be available with certain versions of
@@@ -2304,6 -1954,13 +2304,13 @@@ The I<version> has to be specified as t
  and patch-level versions, each represented as two-decimal-digit numbers. For
  example, version 8.2.3 will become 80203.
  
+ =item B<MinPGVersion> I<version>
+ =item B<MaxPGVersion> I<version>
+ These are deprecated synonyms for B<MinVersion> and B<MaxVersion>
+ respectively. They will be removed in version 5 of collectd.
  =back
  
  The following predefined queries are available (the definitions can be found
@@@ -2584,39 -2241,6 +2591,39 @@@ slashes
  
  =back
  
 +=head2 Plugin C<protocols>
 +
 +Collects a lot of information about various network protocols, such as I<IP>,
 +I<TCP>, I<UDP>, etc.
 +
 +Available configuration options:
 +
 +=over 4
 +
 +=item B<Value> I<Selector>
 +
 +Selects whether or not to select a specific value. The string being matched is
 +of the form "I<Protocol>:I<ValueName>", where I<Protocol> will be used as the
 +plugin instance and I<ValueName> will be used as type instance. An example of
 +the string being used would be C<Tcp:RetransSegs>.
 +
 +You can use regular expressions to match a large number of values with just one
 +configuration option. To select all "extended" I<TCP> values, you could use the
 +following statement:
 +
 +  Value "/^TcpExt:/"
 +
 +Whether only matched values are selected or all matched values are ignored
 +depends on the B<IgnoreSelected>. By default, only matched values are selected.
 +If no value is configured at all, all values will be selected.
 +
 +=item B<IgnoreSelected> B<true>|B<false>
 +
 +If set to B<true>, inverts the selection made by B<Value>, i.E<nbsp>e. all
 +matching values will be ignored.
 +
 +=back
 +
  =head2 Plugin C<rrdcached>
  
  The C<rrdcached> plugin uses the RRDTool accelerator daemon, L<rrdcached(1)>,
@@@ -2822,109 -2446,9 +2829,109 @@@ debugging support
  
  =back
  
 +=head2 Plugin C<table>
 +
 +The C<table plugin> provides generic means to parse tabular data and dispatch
 +user specified values. Values are selected based on column numbers. For
 +example, this plugin may be used to get values from the Linux L<proc(5)>
 +filesystem or CSV (comma separated values) files.
 +
 +  <Plugin table>
 +    <Table "/proc/slabinfo">
 +      Instance "slabinfo"
 +      Separator " "
 +      <Result>
 +        Type gauge
 +        InstancePrefix "active_objs"
 +        InstancesFrom 0
 +        ValuesFrom 1
 +      </Result>
 +      <Result>
 +        Type gauge
 +        InstancePrefix "objperslab"
 +        InstancesFrom 0
 +        ValuesFrom 4
 +      </Result>
 +    </Table>
 +  </Plugin>
 +
 +The configuration consists of one or more B<Table> blocks, each of which
 +configures one file to parse. Within each B<Table> block, there are one or
 +more B<Result> blocks, which configure which data to select and how to
 +interpret it.
 +
 +The following options are available inside a B<Table> block:
 +
 +=over 4
 +
 +=item B<Instance> I<instance>
 +
 +If specified, I<instance> is used as the plugin instance. So, in the above
 +example, the plugin name C<table-slabinfo> would be used. If omitted, the
 +filename of the table is used instead, with all special characters replaced
 +with an underscore (C<_>).
 +
 +=item B<Separator> I<string>
 +
 +Any character of I<string> is interpreted as a delimiter between the different
 +columns of the table. A sequence of two or more contiguous delimiters in the
 +table is considered to be a single delimiter, i.E<nbsp>e. there cannot be any
 +empty columns. The plugin uses the L<strtok_r(3)> function to parse the lines
 +of a table - see its documentation for more details. This option is mandatory.
 +
 +A horizontal tab, newline and carriage return may be specified by C<\\t>,
 +C<\\n> and C<\\r> respectively. Please note that the double backslashes are
 +required because of collectd's config parsing.
 +
 +=back
 +
 +The following options are available inside a B<Result> block:
 +
 +=over 4
 +
 +=item B<Type> I<type>
 +
 +Sets the type used to dispatch the values to the daemon. Detailed information
 +about types and their configuration can be found in L<types.db(5)>. This
 +option is mandatory.
 +
 +=item B<InstancePrefix> I<prefix>
 +
 +If specified, prepend I<prefix> to the type instance. If omitted, only the
 +B<InstancesFrom> option is considered for the type instance.
 +
 +=item B<InstancesFrom> I<column0> [I<column1> ...]
 +
 +If specified, the content of the given columns (identified by the column
 +number starting at zero) will be used to create the type instance for each
 +row. Multiple values (and the instance prefix) will be joined together with
 +dashes (I<->) as separation character. If omitted, only the B<InstancePrefix>
 +option is considered for the type instance.
 +
 +The plugin itself does not check whether or not all built instances are
 +different. It’s your responsibility to assure that each is unique. This is
 +especially true, if you do not specify B<InstancesFrom>: B<You> have to make
 +sure that the table only contains one row.
 +
 +If neither B<InstancePrefix> nor B<InstancesFrom> is given, the type instance
 +will be empty.
 +
 +=item B<ValuesFrom> I<column0> [I<column1> ...]
 +
 +Specifies the columns (identified by the column numbers starting at zero)
 +whose content is used as the actual data for the data sets that are dispatched
 +to the daemon. How many such columns you need is determined by the B<Type>
 +setting above. If you specify too many or not enough columns, the plugin will
 +complain about that and no data will be submitted to the daemon. The plugin
 +uses L<strtoll(3)> and L<strtod(3)> to parse counter and gauge values
 +respectively, so anything supported by those functions is supported by the
 +plugin as well. This option is mandatory.
 +
 +=back
 +
  =head2 Plugin C<tail>
  
 -The C<tail plugin> plugins follows logfiles, just like L<tail(1)> does, parses
 +The C<tail plugin> follows logfiles, just like L<tail(1)> does, parses
  each line and dispatches found values. What is matched can be configured by the
  user using (extended) regular expressions, as described in L<regex(7)>.
  
@@@ -3028,70 -2552,6 +3035,70 @@@ This optional setting sets the type ins
  
  =back
  
 +=head2 Plugin C<teamspeak2>
 +
 +The C<teamspeak2 plugin> connects to the query port of a teamspeak2 server and
 +polls interesting global and virtual server data. The plugin can query only one
 +physical server but unlimited virtual servers. You can use the following
 +options to configure it:
 +
 +=over 4
 +
 +=item B<Host> I<hostname/ip>
 +
 +The hostname or ip which identifies the physical server.
 +Default: 127.0.0.1
 +
 +=item B<Port> I<port>
 +
 +The query port of the physical server. This needs to be a string.
 +Default: "51234"
 +
 +=item B<Server> I<port>
 +
 +This option has to be added once for every virtual server the plugin should
 +query. If you want to query the virtual server on port 8767 this is what the
 +option would look like:
 +
 +  Server "8767"
 +
 +This option, although numeric, needs to be a string, i.E<nbsp>e. you B<must>
 +use quotes around it! If no such statement is given only global information
 +will be collected.
 +
 +=back
 +
 +=head2 Plugin C<ted>
 +
 +The I<TED> plugin connects to a device of "The Energy Detective", a device to
 +measure power consumption. These devices are usually connected to a serial
 +(RS232) or USB port. The plugin opens a configured device and tries to read the
 +current energy readings. For more information on TED, visit
 +L<http://www.theenergydetective.com/>.
 +
 +Available configuration options:
 +
 +=over 4
 +
 +=item B<Device> I<Path>
 +
 +Path to the device on which TED is connected. collectd will need read and write
 +permissions on that file.
 +
 +Default: B</dev/ttyUSB0>
 +
 +=item B<Retries> I<Num>
 +
 +Apparently reading from TED is not that reliable. You can therefore configure a
 +number of retries here. You only configure the I<retries> here, to if you
 +specify zero, one reading will be performed (but no retries if that fails); if
 +you specify three, a maximum of four readings are performed. Negative values
 +are illegal.
 +
 +Default: B<0>
 +
 +=back
 +
  =head2 Plugin C<tcpconns>
  
  The C<tcpconns plugin> counts the number of currently established TCP
@@@ -3130,6 -2590,39 +3137,6 @@@ port in numeric form
  
  =back
  
 -=head2 Plugin C<teamspeak2>
 -
 -The C<teamspeak2 plugin> connects to the query port of a teamspeak2 server and
 -polls interesting global and virtual server data. The plugin can query only one
 -physical server but unlimited virtual servers. You can use the following
 -options to configure it:
 -
 -=over 4
 -
 -=item B<Host> I<hostname/ip>
 -
 -The hostname or ip which identifies the physical server.
 -Default: 127.0.0.1
 -
 -=item B<Port> I<port>
 -
 -The query port of the physical server. This needs to be a string.
 -Default: "51234"
 -
 -=item B<Server> I<port>
 -
 -This option has to be added once for every virtual server the plugin should
 -query. If you want to query the virtual server on port 8767 this is what the
 -option would look like:
 -
 -  Server "8767"
 -
 -This option, although numeric, needs to be a string, i.E<nbsp>e. you B<must>
 -use quotes around it! If no such statement is given only global information
 -will be collected.
 -
 -=back
 -
  =head2 Plugin C<thermal>
  
  =over 4
diff --combined src/configfile.c
@@@ -172,7 -172,7 +172,7 @@@ static int cf_dispatch (const char *typ
        free (key);
        free (value);
  
 -      DEBUG ("return (%i)", ret);
 +      DEBUG ("cf_dispatch: return (%i)", ret);
  
        return (ret);
  } /* int cf_dispatch */
@@@ -378,12 -378,12 +378,12 @@@ static int cf_ci_replace_child (oconfig
        temp = NULL;
  
        /* If (src->children_num == 0) the array size is decreased. If offset
-        * is _not_ the last element, (offset < (src->children_num - 1)), then
+        * is _not_ the last element, (offset < (dst->children_num - 1)), then
         * we need to move the trailing elements before resizing the array. */
-       if ((src->children_num == 0) && (offset < (src->children_num - 1)))
+       if ((src->children_num == 0) && (offset < (dst->children_num - 1)))
        {
-               int nmemb = src->children_num - (offset + 1);
-               memmove (src->children + offset, src->children + offset + 1,
+               int nmemb = dst->children_num - (offset + 1);
+               memmove (dst->children + offset, dst->children + offset + 1,
                                sizeof (oconfig_item_t) * nmemb);
        }
  
                                sizeof (oconfig_item_t) * nmemb);
        }
  
-       /* Last but not least: If there are new childrem, copy them to the
+       /* Last but not least: If there are new children, copy them to the
         * memory reserved for them. */
        if (src->children_num > 0)
        {
@@@ -491,6 -491,9 +491,9 @@@ static int cf_include_all (oconfig_item
                /* Now replace the i'th child in `root' with `new'. */
                cf_ci_replace_child (root, new, i);
  
+               /* ... and go back to the new i'th child. */
+               --i;
                sfree (new->values);
                sfree (new);
        } /* for (i = 0; i < root->children_num; i++) */