]> arthur.barton.de Git - netdata.git/commitdiff
Add swap usage chart to macOS plugin
authorVladimir Kobal <vlad@prokk.net>
Wed, 28 Dec 2016 10:03:17 +0000 (05:03 -0500)
committerVladimir Kobal <vlad@prokk.net>
Wed, 28 Dec 2016 10:03:17 +0000 (05:03 -0500)
src/freebsd_sysctl.c
src/macos_sysctl.c

index 21dcff3129d2c52ccb8dcaf3527ef536cae7094d..b94c16f3dc6e9f186b7c8b90a0c7ed3dbfaeb2f3 100644 (file)
@@ -653,7 +653,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
         if (unlikely(sysctlnametomib("vm.swap_info", mib, &mibsize) == -1)) {
             error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno));
             do_swap = 0;
-            error("DISABLED: disk.io");
+            error("DISABLED: system.swap");
         } else {
             for (i = 0; ; i++) {
                 mib[mibsize] = i;
@@ -662,12 +662,12 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
                     if (unlikely(errno != ENOENT)) {
                         error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno));
                         do_swap = 0;
-                        error("DISABLED: disk.io");
+                        error("DISABLED: system.swap");
                     } else {
                         if (unlikely(size != sizeof(xsw))) {
                             error("FREEBSD: sysctl(%s...) expected %lu, got %lu", "vm.swap_info", (unsigned long)sizeof(xsw), (unsigned long)size);
                             do_swap = 0;
-                            error("DISABLED: disk.io");
+                            error("DISABLED: system.swap");
                         } else break;
                     }
                 }
index 0a37f06d6383579b2f137273495443509b2c9a33..8a129dabf70125c161a47f692ebd5a82b9fe5c11 100644 (file)
@@ -11,10 +11,11 @@ int getsysctl(const char *name, void *ptr, size_t len);
 int do_macos_sysctl(int update_every, usec_t dt) {
     (void)dt;
 
-    static int do_loadavg = -1;
+    static int do_loadavg = -1, do_swap = -1;
 
     if (unlikely(do_loadavg == -1)) {
         do_loadavg              = config_get_boolean("plugin:macos:sysctl", "enable load average", 1);
+        do_swap                 = config_get_boolean("plugin:macos:sysctl", "system swap", 1);
     }
 
     RRDSET *st;
@@ -28,6 +29,9 @@ int do_macos_sysctl(int update_every, usec_t dt) {
     static usec_t last_loadavg_usec = 0;
     struct loadavg sysload;
 
+    // NEEDED BY: do_swap
+    struct xsw_usage swap_usage;
+
     if (last_loadavg_usec <= dt) {
         if (likely(do_loadavg)) {
             if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
@@ -55,6 +59,27 @@ int do_macos_sysctl(int update_every, usec_t dt) {
     }
     else last_loadavg_usec -= dt;
 
+    if (likely(do_swap)) {
+        if (unlikely(GETSYSCTL("vm.swapusage", swap_usage))) {
+            do_swap = 0;
+            error("DISABLED: system.swap");
+        } else {
+            st = rrdset_find("system.swap");
+            if (unlikely(!st)) {
+                st = rrdset_create("system", "swap", NULL, "swap", NULL, "System Swap", "MB", 201, update_every, RRDSET_TYPE_STACKED);
+                st->isdetail = 1;
+
+                rrddim_add(st, "free",    NULL, 1, 1048576, RRDDIM_ABSOLUTE);
+                rrddim_add(st, "used",    NULL, 1, 1048576, RRDDIM_ABSOLUTE);
+            }
+            else rrdset_next(st);
+
+            rrddim_set(st, "free", swap_usage.xsu_avail);
+            rrddim_set(st, "used", swap_usage.xsu_used);
+            rrdset_done(st);
+        }
+    }
+
     return 0;
 }