disk plugin: Add support for the statgrab library.
authorOleg King <king2@kaluga.ru>
Mon, 5 May 2008 09:58:27 +0000 (11:58 +0200)
committerFlorian Forster <octo@noris.net>
Mon, 5 May 2008 09:58:27 +0000 (11:58 +0200)
configure.in
src/Makefile.am
src/disk.c

index e834ffd..e94730d 100644 (file)
@@ -2331,6 +2331,7 @@ fi
 # libstatgrab
 if test "x$with_libstatgrab" = "xyes"
 then
+       plugin_disk="yes"
        plugin_interface="yes"
        plugin_load="yes"
        plugin_memory="yes"
index fe4af77..d68d036 100644 (file)
@@ -193,6 +193,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
index 5491dcb..e2ae14e 100644 (file)
 #  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
@@ -659,7 +666,23 @@ static int disk_read (void)
                                        kio.KIO_ROPS, kio.KIO_WOPS);
                }
        }
-#endif /* defined(HAVE_LIBKSTAT) */
+/* #endif defined(HAVE_LIBKSTAT) */
+
+#elif 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 */