diff mbox

[nfs-utils,RFC,11/15] mountstats: Allow mountstats_command to take a variable number of mountpoints

Message ID 1415206872-864-12-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
Allow the mountstats command to take a variable number of mountpoints
(including none, in which case it will print stats for all NFS
mountpoints it finds).

Signed-off-by: Scott Mayhew <smayhew@redhat.com>
---
 tools/mountstats/mountstats.py | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

Comments

Chuck Lever Nov. 6, 2014, 2:09 a.m. UTC | #1
On Nov 5, 2014, at 12:01 PM, Scott Mayhew <smayhew@redhat.com> wrote:

> Allow the mountstats command to take a variable number of mountpoints
> (including none, in which case it will print stats for all NFS
> mountpoints it finds).

Cool idea.

> Signed-off-by: Scott Mayhew <smayhew@redhat.com>
> ---
> tools/mountstats/mountstats.py | 32 +++++++++++++++++++-------------
> 1 file changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
> index 77975ad..281f4be 100755
> --- a/tools/mountstats/mountstats.py
> +++ b/tools/mountstats/mountstats.py
> @@ -616,10 +616,6 @@ def mountstats_command():
>             assert False, "unhandled option"
>     mountpoints += args
> 
> -    if mountpoints == []:
> -        print_mountstats_help(prog)
> -        return
> -
>     if rpc_only == True and nfs_only == True:
>         print_mountstats_help(prog)
>         return
> @@ -628,21 +624,31 @@ def mountstats_command():
>         infile = '/proc/self/mountstats'
>     mountstats = parse_stats_file(infile)
> 
> +    # make certain devices contains only NFS mount points
> +    if len(mountpoints) > 0:
> +        check = []
> +        for device in mountpoints:
> +            stats = DeviceData()
> +            stats.parse_stats(mountstats[device])
> +            if stats.is_nfs_mountpoint():
> +                check += [device]
> +        mountpoints = check
> +    else:
> +        for device, descr in mountstats.items():
> +            stats = DeviceData()
> +            stats.parse_stats(descr)
> +            if stats.is_nfs_mountpoint():
> +                mountpoints += [device]
> +    if len(mountpoints) == 0:
> +        print('No NFS mount points were found')
> +        return
> +
>     if since:
>         old_mountstats = parse_stats_file(since)
> 
>     for mp in mountpoints:
> -        if mp not in mountstats:
> -            print('Statistics for mount point %s not found' % mp)
> -            continue
> -
>         stats = DeviceData()
>         stats.parse_stats(mountstats[mp])
> -
> -        if not stats.is_nfs_mountpoint():
> -            print('Mount point %s exists but is not an NFS mount' % mp)
> -            continue
> -
>         if not since:
>             print_mountstats(stats, nfs_only, rpc_only)
>         elif since and mp not in old_mountstats:
> -- 
> 1.9.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com



--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Scott Mayhew Nov. 6, 2014, 2:46 p.m. UTC | #2
On Wed, 05 Nov 2014, Chuck Lever wrote:

> 
> On Nov 5, 2014, at 12:01 PM, Scott Mayhew <smayhew@redhat.com> wrote:
> 
> > Allow the mountstats command to take a variable number of mountpoints
> > (including none, in which case it will print stats for all NFS
> > mountpoints it finds).
> 
> Cool idea.

Thanks!  It looks like I need to add some sort of a header when only the
rpc stats are being printed though.

> 
> > Signed-off-by: Scott Mayhew <smayhew@redhat.com>
> > ---
> > tools/mountstats/mountstats.py | 32 +++++++++++++++++++-------------
> > 1 file changed, 19 insertions(+), 13 deletions(-)
> > 
> > diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
> > index 77975ad..281f4be 100755
> > --- a/tools/mountstats/mountstats.py
> > +++ b/tools/mountstats/mountstats.py
> > @@ -616,10 +616,6 @@ def mountstats_command():
> >             assert False, "unhandled option"
> >     mountpoints += args
> > 
> > -    if mountpoints == []:
> > -        print_mountstats_help(prog)
> > -        return
> > -
> >     if rpc_only == True and nfs_only == True:
> >         print_mountstats_help(prog)
> >         return
> > @@ -628,21 +624,31 @@ def mountstats_command():
> >         infile = '/proc/self/mountstats'
> >     mountstats = parse_stats_file(infile)
> > 
> > +    # make certain devices contains only NFS mount points
> > +    if len(mountpoints) > 0:
> > +        check = []
> > +        for device in mountpoints:
> > +            stats = DeviceData()
> > +            stats.parse_stats(mountstats[device])
> > +            if stats.is_nfs_mountpoint():
> > +                check += [device]
> > +        mountpoints = check
> > +    else:
> > +        for device, descr in mountstats.items():
> > +            stats = DeviceData()
> > +            stats.parse_stats(descr)
> > +            if stats.is_nfs_mountpoint():
> > +                mountpoints += [device]
> > +    if len(mountpoints) == 0:
> > +        print('No NFS mount points were found')
> > +        return
> > +
> >     if since:
> >         old_mountstats = parse_stats_file(since)
> > 
> >     for mp in mountpoints:
> > -        if mp not in mountstats:
> > -            print('Statistics for mount point %s not found' % mp)
> > -            continue
> > -
> >         stats = DeviceData()
> >         stats.parse_stats(mountstats[mp])
> > -
> > -        if not stats.is_nfs_mountpoint():
> > -            print('Mount point %s exists but is not an NFS mount' % mp)
> > -            continue
> > -
> >         if not since:
> >             print_mountstats(stats, nfs_only, rpc_only)
> >         elif since and mp not in old_mountstats:
> > -- 
> > 1.9.3
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> --
> Chuck Lever
> chuck[dot]lever[at]oracle[dot]com
> 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Chuck Lever Nov. 6, 2014, 2:58 p.m. UTC | #3
On Nov 6, 2014, at 9:46 AM, Scott Mayhew <smayhew@redhat.com> wrote:

> On Wed, 05 Nov 2014, Chuck Lever wrote:
> 
>> 
>> On Nov 5, 2014, at 12:01 PM, Scott Mayhew <smayhew@redhat.com> wrote:
>> 
>>> Allow the mountstats command to take a variable number of mountpoints
>>> (including none, in which case it will print stats for all NFS
>>> mountpoints it finds).
>> 
>> Cool idea.
> 
> Thanks!  It looks like I need to add some sort of a header when only the
> rpc stats are being printed though.

You mean a header visually separating the group of stats for each
mount point. Yeah, that would be helpful. (I typically have just one
mount point under test on my system, so I didn’t notice this before).

>> 
>>> Signed-off-by: Scott Mayhew <smayhew@redhat.com>
>>> ---
>>> tools/mountstats/mountstats.py | 32 +++++++++++++++++++-------------
>>> 1 file changed, 19 insertions(+), 13 deletions(-)
>>> 
>>> diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
>>> index 77975ad..281f4be 100755
>>> --- a/tools/mountstats/mountstats.py
>>> +++ b/tools/mountstats/mountstats.py
>>> @@ -616,10 +616,6 @@ def mountstats_command():
>>>            assert False, "unhandled option"
>>>    mountpoints += args
>>> 
>>> -    if mountpoints == []:
>>> -        print_mountstats_help(prog)
>>> -        return
>>> -
>>>    if rpc_only == True and nfs_only == True:
>>>        print_mountstats_help(prog)
>>>        return
>>> @@ -628,21 +624,31 @@ def mountstats_command():
>>>        infile = '/proc/self/mountstats'
>>>    mountstats = parse_stats_file(infile)
>>> 
>>> +    # make certain devices contains only NFS mount points
>>> +    if len(mountpoints) > 0:
>>> +        check = []
>>> +        for device in mountpoints:
>>> +            stats = DeviceData()
>>> +            stats.parse_stats(mountstats[device])
>>> +            if stats.is_nfs_mountpoint():
>>> +                check += [device]
>>> +        mountpoints = check
>>> +    else:
>>> +        for device, descr in mountstats.items():
>>> +            stats = DeviceData()
>>> +            stats.parse_stats(descr)
>>> +            if stats.is_nfs_mountpoint():
>>> +                mountpoints += [device]
>>> +    if len(mountpoints) == 0:
>>> +        print('No NFS mount points were found')
>>> +        return
>>> +
>>>    if since:
>>>        old_mountstats = parse_stats_file(since)
>>> 
>>>    for mp in mountpoints:
>>> -        if mp not in mountstats:
>>> -            print('Statistics for mount point %s not found' % mp)
>>> -            continue
>>> -
>>>        stats = DeviceData()
>>>        stats.parse_stats(mountstats[mp])
>>> -
>>> -        if not stats.is_nfs_mountpoint():
>>> -            print('Mount point %s exists but is not an NFS mount' % mp)
>>> -            continue
>>> -
>>>        if not since:
>>>            print_mountstats(stats, nfs_only, rpc_only)
>>>        elif since and mp not in old_mountstats:
>>> -- 
>>> 1.9.3
>>> 
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> 
>> --
>> Chuck Lever
>> chuck[dot]lever[at]oracle[dot]com
>> 
>> 
>> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com



--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
index 77975ad..281f4be 100755
--- a/tools/mountstats/mountstats.py
+++ b/tools/mountstats/mountstats.py
@@ -616,10 +616,6 @@  def mountstats_command():
             assert False, "unhandled option"
     mountpoints += args
 
-    if mountpoints == []:
-        print_mountstats_help(prog)
-        return
-
     if rpc_only == True and nfs_only == True:
         print_mountstats_help(prog)
         return
@@ -628,21 +624,31 @@  def mountstats_command():
         infile = '/proc/self/mountstats'
     mountstats = parse_stats_file(infile)
 
+    # make certain devices contains only NFS mount points
+    if len(mountpoints) > 0:
+        check = []
+        for device in mountpoints:
+            stats = DeviceData()
+            stats.parse_stats(mountstats[device])
+            if stats.is_nfs_mountpoint():
+                check += [device]
+        mountpoints = check
+    else:
+        for device, descr in mountstats.items():
+            stats = DeviceData()
+            stats.parse_stats(descr)
+            if stats.is_nfs_mountpoint():
+                mountpoints += [device]
+    if len(mountpoints) == 0:
+        print('No NFS mount points were found')
+        return
+
     if since:
         old_mountstats = parse_stats_file(since)
 
     for mp in mountpoints:
-        if mp not in mountstats:
-            print('Statistics for mount point %s not found' % mp)
-            continue
-
         stats = DeviceData()
         stats.parse_stats(mountstats[mp])
-
-        if not stats.is_nfs_mountpoint():
-            print('Mount point %s exists but is not an NFS mount' % mp)
-            continue
-
         if not since:
             print_mountstats(stats, nfs_only, rpc_only)
         elif since and mp not in old_mountstats: