Merge branch 'collectd-4.9' into collectd-4.10
authorFlorian Forster <octo@collectd.org>
Sat, 26 Mar 2011 15:53:22 +0000 (08:53 -0700)
committerFlorian Forster <octo@collectd.org>
Sat, 26 Mar 2011 15:53:22 +0000 (08:53 -0700)
Conflicts:
ChangeLog
version-gen.sh

1  2 
ChangeLog
src/plugin.c
src/plugin.h

diff --combined ChangeLog
+++ b/ChangeLog
 +2010-11-27, Version 4.10.2
 +      * Documentation: Various documentation fixes.
 +      * collectd: If including one configuration file fails, continue with
 +        the rest of the configuration if possible.
 +      * collectd: Fix a bug in the read function scheduling. In rare cases
 +        read functions may not have been called as often as requested.
 +      * collectd: Concurrency issues with errno(3) under AIX have been
 +        fixed: A thread-safe version of errno has to be requested under AIX.
 +        Thanks to Aurélien Reynaud for his patch.
 +      * collectd: A left-over hard-coded 2 has been replaced by the
 +        configurable timeout value.
 +      * curl, memcachec, tail plugins: Fix handling of "DERIVE" data
 +        sources. Matching the end of a string has been improved; thanks to
 +        Sebastian Harl for the patch.
 +      * curl_json plugin: Fix a problem when parsing 64bit integers. Reading
 +        JSON data from non-HTTP sources has been fixed.
 +      * netapp plugin: Pass the interval setting to the dispatch function.
 +        Restore compatibility to NetApp Release 7.3. Thanks to Sven Trenkel
 +        for the patch.
 +      * network plugin: Be less verbose about unchecked signatures, in order
 +        to prevent spamming the logs.
 +      * notify_email plugin: Concurrency problems have been fixed.
 +      * python plugin: Set "sys.argv", since many scripts don't expect that
 +        it may not be set. Thanks to Sven Trenkel for the patch.
 +      * rrdtool, rrdcached plugin: Fix a too strict assertion when creating
 +        RRD files.
 +      * swap plugin: A bug which lead to incorrect I/O values has been
 +        fixed.
 +      * value match: A minor memory leak has been fixed. Thanks to Sven
 +        Trenkel for the patch.
 +
 +2010-07-09, Version 4.10.1
 +      * Build system: Checking for "strtok_r" under Solaris has been fixed.
 +      * Portability: Fixes for Solaris 8 have been applied. Thanks to
 +        Alexander Wuerstlein for his patch.
 +      * collectd: The shutdown speed when terminating the read threads has
 +        been improved.
 +      * libcollectdclient: A format error in the PUTVAL command has been
 +        removed. Thanks to Johan Van den Brande for fixing this.
 +      * df plugin: An error message shown when "cu_mount_getlist" fails has
 +        been added.
 +      * processes plugin: Missing initialization code for IO members of a
 +        struct has been added. Thanks to Aurélien Reynaud for fixing this.
 +      * python plugin: Memory leaks in the write and notification callbacks
 +        have been fixed. A possible crash when the plugin was loaded but not
 +        configured has been fixed. Thanks to Sven Trenkel for his patches.
 +      * snmp plugin: Verbosity with regard to unknown ASN types has been
 +        increased. A build problem on PowerPC and ARM processors has been
 +        fixed by Aurélien Reynaud; thanks!
 +      * powerdns plugin: Compatibility changes for PowerDNS 2.9.22 and above
 +        have been applied. Thanks to Luke Heberling for his changes.
 +
 +2010-05-01, Version 4.10.0
 +      * collectd: JSON output now includes the "dstypes" and "dsnames"
 +        fields. This makes it easier for external applications to interpret
 +        the data. Thanks to Chris Buben for his work.
 +      * collectd: The new "Timeout" option can be used to specify a
 +        "timeout" for missing values. This is used in the threshold checking
 +        code to detect missing values. Thanks to Andrés J. Díaz for the
 +        patch.
 +      * apache plugin: Support for "IdleWorkers" (Apache 1.*: "IdleServers")
 +        has been added.
 +      * curl plugin: The new "ExcludeRegex" allows to easily exclude certain
 +        lines from the match.
 +      * curl_xml plugin: This new plugin allows to read XML files using cURL
 +        and extract metrics included in the files. Thanks to Amit Gupta for
 +        his work.
 +      * filecount plugin: The new "IncludeHidden" option allows to include
 +        "hidden" files and directories in the statistics. Thanks to Vaclav
 +        Malek for the patch.
 +      * logfile plugin: The new "PrintSeverity" option allows to include the
 +        severity of a message in the output. Thanks to Clément Stenac for
 +        his patch.
 +      * memcachec plugin: The new "ExcludeRegex" allows to easily exclude
 +        certain lines from the match.
 +      * modbus plugin: This new plugin allows to read registers from
 +        Modbus-TCP enabled devices.
 +      * network plugin: The new "Interface" option allows to set the
 +        interface to be used for multicast and, if supported, unicast
 +        traffic. Thanks to Max Henkel for his work.
 +      * openvpn plugin: The "CollectUserCount" and "CollectIndividualUsers"
 +        options allow more detailed control over how to report sessions of
 +        multiple users. Thanks to Fabian Schuh for his work.
 +      * pinba plugin: This new plugin receives timing information from the
 +        Pinba PHP extension, which can be used for profiling PHP code and
 +        webserver performance. Thanks to Phoenix Kayo for his work.
 +      * ping plugin: The new "MaxMissed" allows to re-resolve a hosts
 +        address when it doesn't reply to a number of ping requests. Thanks
 +        to Stefan Völkel for the patch.
 +      * postgresql plugin: The "Interval" config option has been added. The
 +        plugin has been relicensed under the 2-clause BSD license. Thanks to
 +        Sebastian Harl for his work.
 +      * processes plugin: Support for "code" and "data" virtual memory sizes
 +        has been added. Thanks to Clément Stenac for his patch.
 +      * python plugin: Support for Python 3 has been implemented. Thanks to
 +        Sven Trenkel for his work.
 +      * routeros plugin: Support for collecting CPU load, memory usage, used
 +        and free disk space, sectors written and number of bad blocks from
 +        MikroTik devices has been added.
 +      * swap plugin: Support for Linux < 2.6 has been added. Thanks to Lorin
 +        Scraba for his patch.
 +      * tail plugin: The new "ExcludeRegex" allows to easily exclude certain
 +        lines from the match. Thanks to Peter Warasin for his patch.
 +      * write_http plugin: The "StoreRates" option has been added. Thanks to
 +        Paul Sadauskas for his patch.
 +      * regex match: The "Invert" option has been added. Thanks to Julien
 +        Ammous for his patch.
 +
+ 2011-03-26, Version 4.9.5
+       * collectd: Build issues (compiler warnings) have been fixed. Thanks to
+         Bruno Prémont.
+       * collectd, java plugin, ntpd plugin: Several diagnostic messages have
+         been improved.
+       * collectd: Threshold subsection: Handling of NAN values in the
+         percentage calculation has been fixed.
+       * Documentation: Several updates and additions. Thanks to Sebastian Harl.
+       * libvirt plugin: A bug in reading the virtual CPU statistics has been
+         fixed. Thanks to “JLPC” for reporting this problem.
+       * python plugin: Fix dispatching of values from Python scripts to
+         collectd. Thanks to Gregory Szorc for finding and fixing this
+         problem.
+       * processes plugin: Potentially erroneous behavior has been fixed in an
+         error handling case.
  2010-11-27, Version 4.9.4
        * Documentation: Various documentation fixes.
        * collectd: If including one configuration file fails, continue with
diff --combined src/plugin.c
@@@ -59,7 -59,6 +59,7 @@@ struct read_func_
  #define rf_callback rf_super.cf_callback
  #define rf_udata rf_super.cf_udata
        callback_func_t rf_super;
 +      char rf_group[DATA_MAX_NAME_LEN];
        char rf_name[DATA_MAX_NAME_LEN];
        int rf_type;
        struct timespec rf_interval;
@@@ -786,7 -785,6 +786,7 @@@ int plugin_register_read (const char *n
        rf->rf_callback = (void *) callback;
        rf->rf_udata.data = NULL;
        rf->rf_udata.free_func = NULL;
 +      rf->rf_group[0] = '\0';
        sstrncpy (rf->rf_name, name, sizeof (rf->rf_name));
        rf->rf_type = RF_SIMPLE;
        rf->rf_interval.tv_sec = 0;
        return (plugin_insert_read (rf));
  } /* int plugin_register_read */
  
 -int plugin_register_complex_read (const char *name,
 +int plugin_register_complex_read (const char *group, const char *name,
                plugin_read_cb callback,
                const struct timespec *interval,
                user_data_t *user_data)
  
        memset (rf, 0, sizeof (read_func_t));
        rf->rf_callback = (void *) callback;
 +      if (group != NULL)
 +              sstrncpy (rf->rf_group, group, sizeof (rf->rf_group));
 +      else
 +              rf->rf_group[0] = '\0';
        sstrncpy (rf->rf_name, name, sizeof (rf->rf_name));
        rf->rf_type = RF_COMPLEX;
        if (interval != NULL)
@@@ -852,7 -846,7 +852,7 @@@ int plugin_register_flush (const char *
                                (void *) callback, ud));
  } /* int plugin_register_flush */
  
- int plugin_register_shutdown (char *name,
+ int plugin_register_shutdown (const char *name,
                int (*callback) (void))
  {
        return (create_register_callback (&list_shutdown, name,
@@@ -967,67 -961,6 +967,67 @@@ int plugin_unregister_read (const char 
        return (0);
  } /* }}} int plugin_unregister_read */
  
 +static int compare_read_func_group (llentry_t *e, void *ud) /* {{{ */
 +{
 +      read_func_t *rf    = e->value;
 +      char        *group = ud;
 +
 +      return strcmp (rf->rf_group, (const char *)group);
 +} /* }}} int compare_read_func_group */
 +
 +int plugin_unregister_read_group (const char *group) /* {{{ */
 +{
 +      llentry_t *le;
 +      read_func_t *rf;
 +
 +      int found = 0;
 +
 +      if (group == NULL)
 +              return (-ENOENT);
 +
 +      pthread_mutex_lock (&read_lock);
 +
 +      if (read_list == NULL)
 +      {
 +              pthread_mutex_unlock (&read_lock);
 +              return (-ENOENT);
 +      }
 +
 +      while (42)
 +      {
 +              le = llist_search_custom (read_list,
 +                              compare_read_func_group, (void *)group);
 +
 +              if (le == NULL)
 +                      break;
 +
 +              ++found;
 +
 +              llist_remove (read_list, le);
 +
 +              rf = le->value;
 +              assert (rf != NULL);
 +              rf->rf_type = RF_REMOVE;
 +
 +              llentry_destroy (le);
 +
 +              DEBUG ("plugin_unregister_read_group: "
 +                              "Marked `%s' (group `%s') for removal.",
 +                              rf->rf_name, group);
 +      }
 +
 +      pthread_mutex_unlock (&read_lock);
 +
 +      if (found == 0)
 +      {
 +              WARNING ("plugin_unregister_read_group: No such "
 +                              "group of read function: %s", group);
 +              return (-ENOENT);
 +      }
 +
 +      return (0);
 +} /* }}} int plugin_unregister_read_group */
 +
  int plugin_unregister_write (const char *name)
  {
        return (plugin_unregister (list_write, name));
diff --combined src/plugin.h
@@@ -264,7 -264,7 +264,7 @@@ int plugin_register_init (const char *n
                plugin_init_cb callback);
  int plugin_register_read (const char *name,
                int (*callback) (void));
 -int plugin_register_complex_read (const char *name,
 +int plugin_register_complex_read (const char *group, const char *name,
                plugin_read_cb callback,
                const struct timespec *interval,
                user_data_t *user_data);
@@@ -272,7 -272,7 +272,7 @@@ int plugin_register_write (const char *
                plugin_write_cb callback, user_data_t *user_data);
  int plugin_register_flush (const char *name,
                plugin_flush_cb callback, user_data_t *user_data);
- int plugin_register_shutdown (char *name,
+ int plugin_register_shutdown (const char *name,
                plugin_shutdown_cb callback);
  int plugin_register_data_set (const data_set_t *ds);
  int plugin_register_log (const char *name,
@@@ -284,7 -284,6 +284,7 @@@ int plugin_unregister_config (const cha
  int plugin_unregister_complex_config (const char *name);
  int plugin_unregister_init (const char *name);
  int plugin_unregister_read (const char *name);
 +int plugin_unregister_read_group (const char *group);
  int plugin_unregister_write (const char *name);
  int plugin_unregister_flush (const char *name);
  int plugin_unregister_shutdown (const char *name);