The git subject line pretty much sums this one up.<br /><br />Allows df to report datapoints using the device name, according to a config parameter. This is so it matches up with the &quot;disk&quot; plugin, and the stats can be correlated without having to know the system&#39;s mount table.<br /><br />Also available for merging here: http://github.com/absperf/collectd/tree/df<br /><br />Thanks, <br />Paul Sadauskas<br /><br />On Jul 28, 2009 9:41pm, Paul Sadauskas &lt;psadauskas@gmail.com&gt; wrote:<br />&gt; <br />&gt; <br />&gt; Signed-off-by: Paul Sadauskas psadauskas@gmail.com&gt;<br />&gt; <br />&gt; ---<br />&gt; <br />&gt;  src/df.c |   57 +++++++++++++++++++++++++++++++++++++++------------------<br />&gt; <br />&gt;  1 files changed, 39 insertions(+), 18 deletions(-)<br />&gt; <br />&gt; <br />&gt; <br />&gt; diff --git a/src/df.c b/src/df.c<br />&gt; <br />&gt; index 38079d8..6319b18 100644<br />&gt; <br />&gt; --- a/src/df.c<br />&gt; <br />&gt; +++ b/src/df.c<br />&gt; <br />&gt; @@ -48,14 +48,17 @@ static const char *config_keys[] =<br />&gt; <br />&gt;         &quot;MountPoint&quot;,<br />&gt; <br />&gt;         &quot;FSType&quot;,<br />&gt; <br />&gt;         &quot;IgnoreSelected&quot;,<br />&gt; <br />&gt; +        &quot;ReportByDevice&quot;,<br />&gt; <br />&gt;         NULL<br />&gt; <br />&gt;  };<br />&gt; <br />&gt; -static int config_keys_num = 4;<br />&gt; <br />&gt; +static int config_keys_num = 5;<br />&gt; <br />&gt; <br />&gt; <br />&gt;  static ignorelist_t *il_device = NULL;<br />&gt; <br />&gt;  static ignorelist_t *il_mountpoint = NULL;<br />&gt; <br />&gt;  static ignorelist_t *il_fstype = NULL;<br />&gt; <br />&gt; <br />&gt; <br />&gt; +static bool by_device = false;<br />&gt; <br />&gt; +<br />&gt; <br />&gt;  static int df_init (void)<br />&gt; <br />&gt;  {<br />&gt; <br />&gt;         if (il_device == NULL)<br />&gt; <br />&gt; @@ -108,6 +111,16 @@ static int df_config (const char *key, const char *value)<br />&gt; <br />&gt;                 }<br />&gt; <br />&gt;                 return (0);<br />&gt; <br />&gt;         }<br />&gt; <br />&gt; +        else if (strcasecmp (key, &quot;ReportByDevice&quot;) == 0)<br />&gt; <br />&gt; +        {<br />&gt; <br />&gt; +               if ((strcasecmp (value, &quot;True&quot;) == 0)<br />&gt; <br />&gt; +                               || (strcasecmp (value, &quot;Yes&quot;) == 0)<br />&gt; <br />&gt; +                               || (strcasecmp (value, &quot;On&quot;) == 0))<br />&gt; <br />&gt; +               {<br />&gt; <br />&gt; +                        by_device = false;<br />&gt; <br />&gt; +               }<br />&gt; <br />&gt; +               return (0);<br />&gt; <br />&gt; +       }<br />&gt; <br />&gt; <br />&gt; <br />&gt;         return (-1);<br />&gt; <br />&gt;  }<br />&gt; <br />&gt; @@ -147,7 +160,7 @@ static int df_read (void)<br />&gt; <br />&gt;         unsigned long long blocksize;<br />&gt; <br />&gt;         gauge_t df_free;<br />&gt; <br />&gt;         gauge_t df_used;<br />&gt; <br />&gt; -       char mnt_name[256];<br />&gt; <br />&gt; +       char disk_name[256];<br />&gt; <br />&gt; <br />&gt; <br />&gt;         mnt_list = NULL;<br />&gt; <br />&gt;         if (cu_mount_getlist (&mnt_list) == NULL)<br />&gt; <br />&gt; @@ -171,21 +184,29 @@ static int df_read (void)<br />&gt; <br />&gt;                 df_free = statbuf.f_bfree * blocksize;<br />&gt; <br />&gt;                 df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize;<br />&gt; <br />&gt; <br />&gt; <br />&gt; -               if (strcmp (mnt_ptr-&gt;dir, &quot;/&quot;) == 0)<br />&gt; <br />&gt; -               {<br />&gt; <br />&gt; -                       sstrncpy (mnt_name, &quot;root&quot;, sizeof (mnt_name));<br />&gt; <br />&gt; -               }<br />&gt; <br />&gt; -               else<br />&gt; <br />&gt; -               {<br />&gt; <br />&gt; -                       int i, len;<br />&gt; <br />&gt; -<br />&gt; <br />&gt; -                       sstrncpy (mnt_name, mnt_ptr-&gt;dir + 1, sizeof (mnt_name));<br />&gt; <br />&gt; -                       len = strlen (mnt_name);<br />&gt; <br />&gt; -<br />&gt; <br />&gt; -                       for (i = 0; i  <br />&gt; -                               if (mnt_name[i] == &#39;/&#39;)<br />&gt; <br />&gt; -                                       mnt_name[i] = &#39;-&#39;;<br />&gt; <br />&gt; -               }<br />&gt; <br />&gt; +                if (by_device)<br />&gt; <br />&gt; +                {<br />&gt; <br />&gt; +                        // eg, /dev/hda1  -- strip off the &quot;/dev/&quot;<br />&gt; <br />&gt; +                        strncpy (disk_name, mnt_ptr-&gt;device + 5, sizeof (disk_name));<br />&gt; <br />&gt; +                }<br />&gt; <br />&gt; +                else<br />&gt; <br />&gt; +                {<br />&gt; <br />&gt; +                        if (strcmp (mnt_ptr-&gt;dir, &quot;/&quot;) == 0)<br />&gt; <br />&gt; +                        {<br />&gt; <br />&gt; +                                sstrncpy (disk_name, &quot;root&quot;, sizeof (disk_name));<br />&gt; <br />&gt; +                        }<br />&gt; <br />&gt; +                        else<br />&gt; <br />&gt; +                        {<br />&gt; <br />&gt; +                                int i, len;<br />&gt; <br />&gt; +<br />&gt; <br />&gt; +                                sstrncpy (disk_name, mnt_ptr-&gt;dir + 1, sizeof (disk_name));<br />&gt; <br />&gt; +                                len = strlen (disk_name);<br />&gt; <br />&gt; +<br />&gt; <br />&gt; +                                for (i = 0; i  <br />&gt; +                                        if (disk_name[i] == &#39;/&#39;)<br />&gt; <br />&gt; +                                                disk_name[i] = &#39;-&#39;;<br />&gt; <br />&gt; +                        }<br />&gt; <br />&gt; +                }<br />&gt; <br />&gt; <br />&gt; <br />&gt;                 if (ignorelist_match (il_device,<br />&gt; <br />&gt;                                         (mnt_ptr-&gt;spec_device != NULL)<br />&gt; <br />&gt; @@ -197,7 +218,7 @@ static int df_read (void)<br />&gt; <br />&gt;                 if (ignorelist_match (il_fstype, mnt_ptr-&gt;type))<br />&gt; <br />&gt;                         continue;<br />&gt; <br />&gt; <br />&gt; <br />&gt; -               df_submit (mnt_name, df_used, df_free);<br />&gt; <br />&gt; +               df_submit (disk_name, df_used, df_free);<br />&gt; <br />&gt;         }<br />&gt; <br />&gt; <br />&gt; <br />&gt;         cu_mount_freelist (mnt_list);<br />&gt; <br />&gt; --<br />&gt; <br />&gt; 1.6.3.3<br />&gt; <br />&gt; <br />&gt;