df plugin also collects inode count now.
[collectd.git] / src / df.c
index 73b3b5f..54f70ef 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -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
@@ -17,6 +18,7 @@
  *
  * Authors:
  *   Florian octo Forster <octo at verplant.org>
+ *   Paul Sadauskas <psadauskas at gmail.com>
  **/
 
 #include "collectd.h"
@@ -120,6 +122,7 @@ static int df_config (const char *key, const char *value)
 }
 
 static void df_submit (char *df_name,
+               const char *type,
                gauge_t df_used,
                gauge_t df_free)
 {
@@ -134,7 +137,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, type, sizeof (vl.host));
        sstrncpy (vl.type_instance, df_name, sizeof (vl.type_instance));
 
        plugin_dispatch_values (&vl);
@@ -154,6 +157,8 @@ static int df_read (void)
        unsigned long long blocksize;
        gauge_t df_free;
        gauge_t df_used;
+       gauge_t df_inodes_free;
+       gauge_t df_inodes_used;
        char disk_name[256];
 
        mnt_list = NULL;
@@ -162,6 +167,16 @@ static int df_read (void)
 
        for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next)
        {
+               if (ignorelist_match (il_device,
+                                       (mnt_ptr->spec_device != NULL)
+                                       ? mnt_ptr->spec_device
+                                       : mnt_ptr->device))
+                       continue;
+               if (ignorelist_match (il_mountpoint, mnt_ptr->dir))
+                       continue;
+               if (ignorelist_match (il_fstype, mnt_ptr->type))
+                       continue;
+
                if (STATANYFS (mnt_ptr->dir, &statbuf) < 0)
                {
                        char errbuf[1024];
@@ -178,6 +193,9 @@ static int df_read (void)
                df_free = statbuf.f_bfree * blocksize;
                df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize;
 
+               df_inodes_used = statbuf.f_files - statbuf.f_ffree;
+               df_inodes_free = statbuf.f_ffree;
+
                if (by_device) 
                {
                        /* eg, /dev/hda1  -- strip off the "/dev/" */
@@ -211,17 +229,8 @@ static int df_read (void)
                        }
                }
 
-               if (ignorelist_match (il_device,
-                                       (mnt_ptr->spec_device != NULL)
-                                       ? mnt_ptr->spec_device
-                                       : mnt_ptr->device))
-                       continue;
-               if (ignorelist_match (il_mountpoint, mnt_ptr->dir))
-                       continue;
-               if (ignorelist_match (il_fstype, mnt_ptr->type))
-                       continue;
-
-               df_submit (disk_name, df_used, df_free);
+               df_submit (disk_name, "df", df_used, df_free);
+               df_submit (disk_name, "df_inodes", df_inodes_used, df_inodes_free);
        }
 
        cu_mount_freelist (mnt_list);