Merge branch 'collectd-4.7' into collectd-4.8
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Fri, 2 Oct 2009 07:50:20 +0000 (09:50 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Fri, 2 Oct 2009 07:50:20 +0000 (09:50 +0200)
Conflicts:
README

1  2 
README
src/df.c

diff --combined README
--- 1/README
--- 2/README
+++ b/README
@@@ -33,9 -33,6 +33,6 @@@ Feature
        Batterycharge, -current and voltage of ACPI and PMU based laptop
        batteries.
  
-     - curl
-       Parse statistics from websites using regular expressions.
      - bind
        Name server and resolver statistics from the `statistics-channel'
        interface of BIND 9.5, 9,6 and later.
      - cpufreq
        CPU frequency (For laptops with speed step or a similar technology)
  
+     - curl
+       Parse statistics from websites using regular expressions.
 +    - curl_json
 +      Retrieves JSON data via cURL and parses it according to user
 +      configuration.
 +
      - dbi
        Executes SQL statements on various databases and interprets the returned
        data.
      - libvirt
        CPU, disk and network I/O statistics from virtual machines.
  
 +    - madwifi
 +      Queries very detailed usage statistics from wireless LAN adapters and
 +      interfaces that use the Atheros chipset and the MadWifi driver.
 +
      - mbmon
        Motherboard sensors: temperature, fanspeed and voltage information,
        using mbmon(1).
        Network UPS tools: UPS current, voltage, power, charge, utilisation,
        temperature, etc. See upsd(8).
  
 +    - olsr
 +      Queries routing information from the “Optimized Link State Routing”
 +      daemon.
 +
      - onewire (EXPERIMENTAL!)
        Read onewire sensors using the owcapu library of the owfs project.
        Please read in collectd.conf(5) why this plugin is experimental.
      - thermal
        Linux ACPI thermal zone information.
  
 +    - tokyotyrant
 +      Reads the number of records and file size from a running Tokyo Tyrant
 +      server.
 +
      - uptime
        System uptime statistics.
  
      - xmms
        Bitrate and frequency of music played with XMMS.
  
 +    - zfs_arc
 +      Statistics for ZFS' “Adaptive Replacement Cache” (ARC).
 +
    * Output can be written or send to various destinations by the following
      plugins:
  
        needed. Please read collectd-unixsock(5) for a description on how that's
        done.
  
 +    - 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
 +      Exec plugin or formatted in JSON.
 +
    * Logging is, as everything in collectd, provided by plugins. The following
      plugins keep up informed about what's going on:
  
    * Value processing can be controlled using the "filter chain" infrastructure
      and "matches" and "targets". The following plugins are available:
  
 +    - match_empty_counter
 +      Match counter values which are currently zero.
 +
      - match_regex
        Match values by their identifier based on regular expressions.
  
@@@ -459,8 -432,7 +459,8 @@@ Prerequisite
      Used by the `oracle' plugin.
  
    * libcurl (optional)
 -    If you want to use the `apache', `ascent', `curl' or `nginx' plugin.
 +    If you want to use the `apache', `ascent', `curl', `nginx', or `write_http'
 +    plugin.
      <http://curl.haxx.se/>
  
    * libdbi (optional)
    * libxmms (optional)
      <http://www.xmms.org/>
  
 +  * libyajl (optional)
 +    Parse JSON data. This is needed for the `curl_json' plugin.
 +    <http://github.com/lloyd/yajl>
  
  Configuring / Compiling / Installing
  ------------------------------------
diff --combined src/df.c
+++ b/src/df.c
@@@ -1,7 -1,6 +1,7 @@@
  /**
   * collectd - src/df.c
   * Copyright (C) 2005-2007  Florian octo Forster
 + * Copyright (C) 2009       Paul Sadauskas
   *
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License as published by the
@@@ -18,7 -17,6 +18,7 @@@
   *
   * Authors:
   *   Florian octo Forster <octo at verplant.org>
 + *   Paul Sadauskas <psadauskas at gmail.com>
   **/
  
  #include "collectd.h"
@@@ -50,16 -48,14 +50,16 @@@ static const char *config_keys[] 
        "MountPoint",
        "FSType",
        "IgnoreSelected",
 -      NULL
 +        "ReportByDevice"
  };
 -static int config_keys_num = 4;
 +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
  
  static ignorelist_t *il_device = NULL;
  static ignorelist_t *il_mountpoint = NULL;
  static ignorelist_t *il_fstype = NULL;
  
 +static _Bool by_device = false;
 +
  static int df_init (void)
  {
        if (il_device == NULL)
@@@ -96,7 -92,9 +96,7 @@@ static int df_config (const char *key, 
        }
        else if (strcasecmp (key, "IgnoreSelected") == 0)
        {
 -              if ((strcasecmp (value, "True") == 0)
 -                              || (strcasecmp (value, "Yes") == 0)
 -                              || (strcasecmp (value, "On") == 0))
 +              if (IS_TRUE (value))
                {
                        ignorelist_set_invert (il_device, 0);
                        ignorelist_set_invert (il_mountpoint, 0);
                }
                return (0);
        }
 +      else if (strcasecmp (key, "ReportByDevice") == 0)
 +      {
 +              if (IS_TRUE (value))
 +                      by_device = true;
 +
 +              return (0);
 +      }
  
        return (-1);
  }
@@@ -136,7 -127,7 +136,7 @@@ static void df_submit (char *df_name
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "df", sizeof (vl.plugin));
        sstrncpy (vl.plugin_instance, "", sizeof (vl.plugin_instance));
-       sstrncpy (vl.type, "df", sizeof (vl.host));
+       sstrncpy (vl.type, "df", sizeof (vl.type));
        sstrncpy (vl.type_instance, df_name, sizeof (vl.type_instance));
  
        plugin_dispatch_values (&vl);
@@@ -156,7 -147,7 +156,7 @@@ static int df_read (void
        unsigned long long blocksize;
        gauge_t df_free;
        gauge_t df_used;
 -      char mnt_name[256];
 +      char disk_name[256];
  
        mnt_list = NULL;
        if (cu_mount_getlist (&mnt_list) == NULL)
  
        for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next)
        {
 -              if (strcmp (mnt_ptr->dir, "/") == 0)
 -              {
 -                      sstrncpy (mnt_name, "root", sizeof (mnt_name));
 -              }
 -              else
 -              {
 -                      int i, len;
 -
 -                      sstrncpy (mnt_name, mnt_ptr->dir + 1, sizeof (mnt_name));
 -                      len = strlen (mnt_name);
 -
 -                      for (i = 0; i < len; i++)
 -                              if (mnt_name[i] == '/')
 -                                      mnt_name[i] = '-';
 -              }
 -
                if (ignorelist_match (il_device,
                                        (mnt_ptr->spec_device != NULL)
                                        ? mnt_ptr->spec_device
                df_free = statbuf.f_bfree * blocksize;
                df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize;
  
 -              df_submit (mnt_name, df_used, df_free);
 +              if (by_device) 
 +              {
 +                      /* eg, /dev/hda1  -- strip off the "/dev/" */
 +                      if (strncmp (mnt_ptr->spec_device, "/dev/", strlen ("/dev/")) == 0)
 +                              sstrncpy (disk_name, mnt_ptr->spec_device + strlen ("/dev/"), sizeof (disk_name));
 +                      else
 +                              sstrncpy (disk_name, mnt_ptr->spec_device, sizeof (disk_name));
 +
 +                      if (strlen(disk_name) < 1) 
 +                      {
 +                              DEBUG("df: no device name name for mountpoint %s, skipping", mnt_ptr->dir);
 +                              continue;
 +                      }
 +              } 
 +              else 
 +              {
 +                      if (strcmp (mnt_ptr->dir, "/") == 0)
 +                      {
 +                              sstrncpy (disk_name, "root", sizeof (disk_name));
 +                      }
 +                      else
 +                      {
 +                              int i, len;
 +
 +                              sstrncpy (disk_name, mnt_ptr->dir + 1, sizeof (disk_name));
 +                              len = strlen (disk_name);
 +
 +                              for (i = 0; i < len; i++)
 +                                      if (disk_name[i] == '/')
 +                                              disk_name[i] = '-';
 +                      }
 +              }
 +
 +              df_submit (disk_name, df_used, df_free);
        }
  
        cu_mount_freelist (mnt_list);