All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Mayhew <smayhew@redhat.com>
To: linux-nfs@vger.kernel.org
Subject: [nfs-utils PATCH v4 08/14] mountstats: Add support for -f/--file
Date: Fri, 12 Dec 2014 14:14:51 -0500	[thread overview]
Message-ID: <1418411697-65535-9-git-send-email-smayhew@redhat.com> (raw)
In-Reply-To: <1418411697-65535-1-git-send-email-smayhew@redhat.com>

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 | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
index 51b4c76..032d8d6 100644
--- a/tools/mountstats/mountstats.py
+++ b/tools/mountstats/mountstats.py
@@ -530,7 +530,7 @@ class DeviceData:
         self.__print_rpc_op_stats('WRITE', sample_time)
         sys.stdout.flush()
 
-def parse_stats_file(filename):
+def parse_stats_file(f):
     """pop the contents of a mountstats file into a dictionary,
     keyed by mount point.  each value object is a list of the
     lines in the mountstats file corresponding to the mount
@@ -539,7 +539,7 @@ def parse_stats_file(filename):
     ms_dict = dict()
     key = ''
 
-    f = open(filename)
+    f.seek(0)
     for line in f.readlines():
         words = line.split()
         if len(words) == 0:
@@ -553,14 +553,13 @@ def parse_stats_file(filename):
         else:
             new += [ line.strip() ]
         ms_dict[key] = new
-    f.close
 
     return ms_dict
 
 def mountstats_command(args):
     """Mountstats command
     """
-    mountstats = parse_stats_file('/proc/self/mountstats')
+    mountstats = parse_stats_file(args.infile)
 
     for mp in args.mountpoints:
         if mp not in mountstats:
@@ -587,6 +586,8 @@ def mountstats_command(args):
            stats.display_rpc_generic_stats()
            stats.display_rpc_op_stats()
 
+    args.infile.close()
+
 def nfsstat_command(args):
     return
 
@@ -605,7 +606,7 @@ def print_iostat_summary(old, new, devices, time):
 def iostat_command(args):
     """iostat-like command for NFS mount points
     """
-    mountstats = parse_stats_file('/proc/self/mountstats')
+    mountstats = parse_stats_file(args.infile)
     devices = args.mountpoints
 
     # make certain devices contains only NFS mount points
@@ -613,9 +614,12 @@ def iostat_command(args):
         check = []
         for device in devices:
             stats = DeviceData()
-            stats.parse_stats(mountstats[device])
-            if stats.is_nfs_mountpoint():
-                check += [device]
+            try:
+                stats.parse_stats(mountstats[device])
+                if stats.is_nfs_mountpoint():
+                    check += [device]
+            except KeyError:
+                continue
         devices = check
     else:
         for device, descr in mountstats.items():
@@ -641,7 +645,7 @@ def iostat_command(args):
             old_mountstats = mountstats
             time.sleep(args.interval)
             sample_time = args.interval
-            mountstats = parse_stats_file('/proc/self/mountstats')
+            mountstats = parse_stats_file(args.infile)
             count -= 1
     else: 
         while True:
@@ -649,7 +653,9 @@ def iostat_command(args):
             old_mountstats = mountstats
             time.sleep(args.interval)
             sample_time = args.interval
-            mountstats = parse_stats_file('/proc/self/mountstats')
+            mountstats = parse_stats_file(args.infile)
+
+    args.infile.close()
 
 class ICMAction(argparse.Action):
     """Custom action to deal with interval, count, and mountpoints.
@@ -668,6 +674,8 @@ class ICMAction(argparse.Action):
     def _handle_one(self, namespace, value):
         try:
             intval = int(value)
+            if namespace.infile.name != '/proc/self/mountstats':
+                raise argparse.ArgumentError(self, "not allowed with argument -f/--file")
             self._handle_int(namespace, intval)
         except ValueError:
             namespace.mountpoints.append(value)
@@ -688,6 +696,9 @@ def main():
     common_parser = argparse.ArgumentParser(add_help=False)
     common_parser.add_argument('-v', '--version', action='version',
         version='mountstats ' + Mountstats_version)
+    common_parser.add_argument('-f', '--file', default=open('/proc/self/mountstats', 'r'),
+        type=argparse.FileType('r'), dest='infile',
+        help='Read stats from %(dest)s instead of /proc/self/mountstats')
 
     mountstats_parser = subparsers.add_parser('mountstats',
         parents=[common_parser],
-- 
1.9.3


  parent reply	other threads:[~2014-12-12 19:15 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-12 19:14 [nfs-utils PATCH v4 00/14] A few enhancements to mountstats.py Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 01/14] mountstats: Fix up NFS event counters Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 02/14] mountstats: Add lists of various counters Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 03/14] mountstats: Refactor __parse_nfs_line and __parse_rpc_line Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 04/14] mountstats: Refactor compare_iostats Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 05/14] mountstats: Convert existing option parsing to use the argparse module Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 06/14] mountstats: Make the iostat sub-command output match that of nfs-iostat.py Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 07/14] mountstats: Make print_iostat_summary handle newly appearing mounts Scott Mayhew
2014-12-12 19:14 ` Scott Mayhew [this message]
2014-12-12 19:14 ` [nfs-utils PATCH v4 09/14] mountstats: Add support for -S/--since Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 10/14] mountstats: Fix IndexError in __parse_nfs_line Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 11/14] mountstats: Allow mountstats_command to take a variable number of mountpoints Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 12/14] mountstats: Add support for -R/--raw to mountstats_command Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 13/14] mountstats: Implement the nfsstat sub-command Scott Mayhew
2014-12-12 19:14 ` [nfs-utils PATCH v4 14/14] mountstats: Updated the mountstats(8) man page Scott Mayhew
2014-12-13 15:42 ` [nfs-utils PATCH v4 00/14] A few enhancements to mountstats.py Steve Dickson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1418411697-65535-9-git-send-email-smayhew@redhat.com \
    --to=smayhew@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.