Modified arcstat.py to run on linux
authorChrist Schlacta <aarcane@aarcane.info>
Fri, 7 Jun 2013 04:33:01 +0000 (21:33 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 18 Jun 2013 22:43:15 +0000 (15:43 -0700)
* Modified kstat_update() to read arcstats from proc.
* Fix shebang.
* Added Makefile.am entries for arcstat.py

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1506

cmd/Makefile.am
cmd/arcstat/Makefile.am [new file with mode: 0644]
cmd/arcstat/arcstat.py
configure.ac
rpm/generic/zfs.spec.in

index 1a51ddc..bad1af6 100644 (file)
@@ -1,2 +1,2 @@
 SUBDIRS  = zfs zpool zdb zhack zinject zstreamdump ztest zpios
-SUBDIRS += mount_zfs fsck_zfs zvol_id vdev_id
+SUBDIRS += mount_zfs fsck_zfs zvol_id vdev_id arcstat
diff --git a/cmd/arcstat/Makefile.am b/cmd/arcstat/Makefile.am
new file mode 100644 (file)
index 0000000..802b8e1
--- /dev/null
@@ -0,0 +1,2 @@
+bin_SCRIPTS = arcstat.py
+EXTRA_DIST = $(bin_SCRIPTS)
index fcfdbb8..e01dd8b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/local/bin/python
+#!/usr/bin/python
 #
 # Print out ZFS ARC Statistics exported via kstat(1)
 # For a definition of fields, or usage, use arctstat.pl -v
@@ -51,7 +51,6 @@ import re
 import copy
 
 from decimal import Decimal
-from subprocess import Popen, PIPE
 from signal import signal, SIGINT
 
 cols = {
@@ -149,33 +148,20 @@ def usage():
 def kstat_update():
     global kstat
 
-    p = Popen("/sbin/sysctl -q 'kstat.zfs.misc.arcstats'", stdin=PIPE,
-        stdout=PIPE, stderr=PIPE, shell=True, close_fds=True)
-    p.wait()
-
-    k = p.communicate()[0].split('\n')
-    if p.returncode != 0:
-        sys.exit(1)
+    k = [line.strip() for line in open('/proc/spl/kstat/zfs/arcstats')]
 
     if not k:
         sys.exit(1)
 
+    del k[0:2]
     kstat = {}
 
     for s in k:
         if not s:
             continue
 
-        s = s.strip()
-
-        name, value = s.split(':')
-        name = name.strip()
-        value = value.strip()
-
-        parts = name.split('.')
-        n = parts.pop()
-
-        kstat[n] = Decimal(value)
+        name, unused, value = s.split()
+        kstat[name] = Decimal(value)
 
 
 def snap_stats():
index 13bb5ba..58e2158 100644 (file)
@@ -102,6 +102,7 @@ AC_CONFIG_FILES([
        cmd/fsck_zfs/Makefile
        cmd/zvol_id/Makefile
        cmd/vdev_id/Makefile
+       cmd/arcstat/Makefile
        module/Makefile
        module/avl/Makefile
        module/nvpair/Makefile
index 7ee4ca0..ddbee84 100644 (file)
@@ -123,6 +123,7 @@ find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
 %doc AUTHORS COPYRIGHT DISCLAIMER
 %doc OPENSOLARIS.LICENSE README.markdown
 %{_sbindir}/*
+%{_bindir}/*
 %{_libdir}/*.so.1*
 %{_mandir}/man1/*
 %{_mandir}/man5/*