diff mbox

[nfs-utils,RFC,08/15] mountstats: Add support for -f/--file to the mountstats and ms-iostat commands

Message ID 1415206872-864-9-git-send-email-smayhew@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Scott Mayhew Nov. 5, 2014, 5:01 p.m. UTC
Add support for the -f/--file option to allow parsing of data from an
arbitrary file instead of /proc/self/mountstats.

Signed-off-by: Scott Mayhew <smayhew@redhat.com>
---
 tools/mountstats/mountstats.py | 35 ++++++++++++++++++++++++++++-------
 1 file changed, 28 insertions(+), 7 deletions(-)
diff mbox

Patch

diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
index 67bca51..23def92 100755
--- a/tools/mountstats/mountstats.py
+++ b/tools/mountstats/mountstats.py
@@ -557,6 +557,7 @@  def print_mountstats_help(name):
     print(' Display NFS client per-mount statistics.')
     print()
     print('  --version    display the version of this command')
+    print('  --file <file> read stats from \'file\' instead of /proc/self/mountstats')
     print('  --nfs        display only the NFS statistics')
     print('  --rpc        display only the RPC statistics')
     print('  --start      sample and save statistics')
@@ -567,17 +568,20 @@  def mountstats_command():
     """Mountstats command
     """
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "ehnrsv", ["end", "help", "nfs", "rpc", "start", "version"])
+        opts, args = getopt.getopt(sys.argv[1:], "ef:hnrsv", ["end", "file=", "help", "nfs", "rpc", "start", "version"])
     except getopt.GetoptError as err:
         print_mountstats_help(prog)
 
     mountpoints = []
     nfs_only = False
     rpc_only = False
+    infile = None
 
     for o, a in opts:
         if o in ("-e", "--end"):
             raise Exception('Sampling is not yet implemented')
+        elif o in ("-f", "--file"):
+            infile = a
         elif o in ("-h", "--help"):
             print_mountstats_help(prog)
             sys.exit(0)
@@ -602,7 +606,9 @@  def mountstats_command():
         print_mountstats_help(prog)
         return
 
-    mountstats = parse_stats_file('/proc/self/mountstats')
+    if not infile:
+        infile = '/proc/self/mountstats'
+    mountstats = parse_stats_file(infile)
 
     for mp in mountpoints:
         if mp not in mountstats:
@@ -678,16 +684,20 @@  def iostat_command():
     """iostat-like command for NFS mount points
     """
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "hv", ["help", "version"])
+        opts, args = getopt.getopt(sys.argv[1:], "f:hv", ["file=", "help", "version"])
     except getopt.GetoptError as err:
         print_iostat_help(prog)
-    mountstats = parse_stats_file('/proc/self/mountstats')
     devices = []
     interval_seen = False
     count_seen = False
+    infile_seen = False
+    infile = None
 
     for o, a in opts:
-        if o in ("-h", "--help"):
+        if o in ("-f", "--file"):
+            infile = a
+            infile_seen = True
+        elif o in ("-h", "--help"):
             print_iostat_help(prog)
             sys.exit(0)
         elif o in ("-v", "--version"):
@@ -695,6 +705,9 @@  def iostat_command():
             sys.exit(0)
         else:
             assert False, "unhandled option"
+    if not infile:
+        infile = '/proc/self/mountstats'
+    mountstats = parse_stats_file(infile)
 
     for arg in args:
         if arg in mountstats:
@@ -702,14 +715,22 @@  def iostat_command():
         elif not interval_seen:
             interval = int(arg)
             if interval > 0:
-                interval_seen = True
+                if infile_seen:
+                    print('interval may not be used with the -f option')
+                    return
+                else:
+                    interval_seen = True
             else:
                 print('Illegal <interval> value')
                 return
         elif not count_seen:
             count = int(arg)
             if count > 0:
-                count_seen = True
+                if infile_seen:
+                    print('count may not be used with the -f option')
+                    return
+                else:
+                    count_seen = True
             else:
                 print('Illegal <count> value')
                 return