[collectd] libstatgrab added to cpu and disk plugins

Oleg King king2 at kaluga.ru
Thu May 1 01:16:45 CEST 2008


Hello!

  I have revised cpu plugin patch a little, and written patch to
  disks plugin that uses libstatgrab to get disk usage statistic.
  Please, add it to Git repository if you will decide that it useful. :)

  There is a patch:

diff -pur collectd/configure.in collectd.my/configure.in
--- collectd/configure.in       2008-05-01 03:08:37.000000000 +0400
+++ collectd.my/configure.in    2008-05-01 02:40:54.000000000 +0400
@@ -2331,6 +2331,8 @@ fi
 # libstatgrab
 if test "x$with_libstatgrab" = "xyes"
 then
+       plugin_cpu="yes"
+       plugin_disk="yes"
        plugin_interface="yes"
        plugin_load="yes"
        plugin_memory="yes"

diff -pur collectd/src/Makefile.am collectd.my/src/Makefile.am
--- collectd/src/Makefile.am    2008-05-01 03:08:37.000000000 +0400
+++ collectd.my/src/Makefile.am 2008-05-01 02:41:39.000000000 +0400
@@ -152,6 +152,10 @@ endif
 if BUILD_WITH_LIBDEVINFO
 cpu_la_LDFLAGS += -ldevinfo
 endif
+if BUILD_WITH_LIBSTATGRAB
+cpu_la_CFLAGS = $(BUILD_WITH_LIBSTATGRAB_CFLAGS)
+cpu_la_LIBADD = $(BUILD_WITH_LIBSTATGRAB_LDFLAGS)
+endif
 collectd_LDADD += "-dlopen" cpu.la
 collectd_DEPENDENCIES += cpu.la
 endif
@@ -193,6 +197,10 @@ endif
 if BUILD_WITH_LIBIOKIT
 disk_la_LDFLAGS += -lIOKit
 endif
+if BUILD_WITH_LIBSTATGRAB
+disk_la_CFLAGS = $(BUILD_WITH_LIBSTATGRAB_CFLAGS)
+disk_la_LIBADD = $(BUILD_WITH_LIBSTATGRAB_LDFLAGS)
+endif
 collectd_LDADD += "-dlopen" disk.la
 collectd_DEPENDENCIES += disk.la
 endif

 diff -pur collectd/src/cpu.c collectd.my/src/cpu.c
--- collectd/src/cpu.c  2008-05-01 03:08:37.000000000 +0400
+++ collectd.my/src/cpu.c       2008-05-01 02:50:32.000000000 +0400
@@ -49,6 +49,10 @@
 # include <sys/sysinfo.h>
 #endif /* HAVE_LIBKSTAT */
 
+#if HAVE_STATGRAB_H
+# include <statgrab.h>
+#endif
+
 #ifdef HAVE_SYSCTLBYNAME
 # ifdef HAVE_SYS_SYSCTL_H
 #  include <sys/sysctl.h>
@@ -96,6 +100,9 @@ static kstat_t *ksp[MAX_NUMCPU];
 static int numcpu;
 /* #endif HAVE_LIBKSTAT */
 
+#elif defined(HAVE_LIBSTATGRAB)
+/* #endif HAVE_LIBSTATGRAB */  
+
 #elif defined(HAVE_SYSCTLBYNAME)
 static int numcpu;
 #endif /* HAVE_SYSCTLBYNAME */
@@ -137,6 +144,9 @@ static int init (void)
                        ksp[numcpu++] = ksp_chain;
 /* #endif HAVE_LIBKSTAT */
 
+#elif defined(HAVE_LIBSTATGRAB)
+/* #endif HAVE_LIBSTATGRAB */  
+
 #elif defined (HAVE_SYSCTLBYNAME)
        size_t numcpu_size;
 
@@ -350,6 +360,17 @@ static int cpu_read (void)
        }
 /* #endif defined(HAVE_LIBKSTAT) */
 
+#elif defined(HAVE_LIBSTATGRAB)
+       sg_cpu_stats *cs;
+       if ((cs = sg_get_cpu_stats ()) == NULL)
+               return (0);
+
+       submit (0, "idle", (counter_t) cs->idle);
+       submit (0, "nice", (counter_t) cs->nice);
+       submit (0, "user", (counter_t) cs->user);
+       submit (0, "system", (counter_t) (cs->kernel+cs->swap+cs->iowait));
+/* #endif HAVE_LIBSTATGRAB */
+
 #elif defined(HAVE_SYSCTLBYNAME)
        long cpuinfo[CPUSTATES]; 
        size_t cpuinfo_size;

diff -pur collectd/src/disk.c collectd.my/src/disk.c
--- collectd/src/disk.c 2008-05-01 03:08:37.000000000 +0400
+++ collectd.my/src/disk.c      2008-05-01 03:04:56.000000000 +0400
@@ -59,6 +59,10 @@
 #  define UINT_MAX 4294967295U
 #endif
 
+#if HAVE_STATGRAB_H
+# include <statgrab.h>
+#endif
+
 #if HAVE_IOKIT_IOKITLIB_H
 static mach_port_t io_master_port = MACH_PORT_NULL;
 /* #endif HAVE_IOKIT_IOKITLIB_H */
@@ -98,6 +102,9 @@ static kstat_t *ksp[MAX_NUMDISK];
 static int numdisk = 0;
 /* #endif HAVE_LIBKSTAT */
 
+#elif defined(HAVE_LIBSTATGRAB)
+/* #endif HAVE_LIBKSTATGRAB */
+
 #else 
 # error "No applicable input method."
 #endif
@@ -663,6 +670,22 @@ static int disk_read (void)
        }
 #endif /* defined(HAVE_LIBKSTAT) */
 
+#if defined(HAVE_LIBSTATGRAB)
+        sg_disk_io_stats *ds;
+        int disks, counter;
+        char name[16];  
+        
+        if ((ds = sg_get_disk_io_stats(&disks)) == NULL)
+                return (0);
+                
+       for (counter=0; counter < disks; counter++) {
+               strncpy(name, ds->disk_name, sizeof(name));
+               name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */
+               disk_submit (name, "disk_octets", ds->read_bytes, ds->write_bytes);
+               ds++;
+       }
+#endif /* defined(HAVE_LIBSTATGRAB) */
+
        return (0);
 } /* int disk_read */

-- 
WBR,
 Oleg                          mailto:king2 at kaluga.ru




More information about the collectd mailing list