summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorLans Carstensen <Lans.Carstensen@dreamworks.com>2009-09-15 14:31:35 -0400
committerSteve Dickson <steved@redhat.com>2009-09-15 14:31:35 -0400
commit88deba4a8db06d371659aa85b668460b85900d48 (patch)
treed72676f1c7efe918b9d1fd65549b27acd54e78dd /tools
parent8e0ca8f2b6152efe58fbf78648bb889ab76a3d43 (diff)
downloadnfs-utils-88deba4a8db06d371659aa85b668460b85900d48.tar.gz
nfs-utils-88deba4a8db06d371659aa85b668460b85900d48.tar.xz
nfs-utils-88deba4a8db06d371659aa85b668460b85900d48.zip
nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
Update list of mount points at each interval and check for differences when producing comparative stats. This ensures proper stats collection for autofs mountpoints. Signed-off-by: Lans Carstensen <Lans.Carstensen@dreamworks.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/nfs-iostat/nfs-iostat.py60
1 files changed, 44 insertions, 16 deletions
diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py
index ea02db4..2e5ac3d 100644
--- a/tools/nfs-iostat/nfs-iostat.py
+++ b/tools/nfs-iostat/nfs-iostat.py
@@ -447,7 +447,14 @@ def parse_stats_file(filename):
return ms_dict
def print_iostat_summary(old, new, devices, time, ac):
- for device in devices:
+ if old:
+ # Trim device list to only include intersection of old and new data,
+ # this addresses umounts due to autofs mountpoints
+ devicelist = filter(lambda x:x in devices,old)
+ else:
+ devicelist = devices
+
+ for device in devicelist:
stats = DeviceData()
stats.parse_stats(new[device])
if not old:
@@ -458,11 +465,32 @@ def print_iostat_summary(old, new, devices, time, ac):
diff_stats = stats.compare_iostats(old_stats)
diff_stats.display_iostats(time, ac)
+def list_nfs_mounts(givenlist, mountstats):
+ """return a list of NFS mounts given a list to validate or
+ return a full list if the given list is empty -
+ may return an empty list if none found
+ """
+ list = []
+ if len(givenlist) > 0:
+ for device in givenlist:
+ stats = DeviceData()
+ stats.parse_stats(mountstats[device])
+ if stats.is_nfs_mountpoint():
+ list += [device]
+ else:
+ for device, descr in mountstats.iteritems():
+ stats = DeviceData()
+ stats.parse_stats(descr)
+ if stats.is_nfs_mountpoint():
+ list += [device]
+ return list
+
def iostat_command(name):
"""iostat-like command for NFS mount points
"""
mountstats = parse_stats_file('/proc/self/mountstats')
devices = []
+ origdevices = []
which = 0
interval_seen = False
count_seen = False
@@ -492,7 +520,7 @@ def iostat_command(name):
continue
if arg in mountstats:
- devices += [arg]
+ origdevices += [arg]
elif not interval_seen:
interval = int(arg)
if interval > 0:
@@ -509,24 +537,12 @@ def iostat_command(name):
return
# make certain devices contains only NFS mount points
- if len(devices) > 0:
- check = []
- for device in devices:
- stats = DeviceData()
- stats.parse_stats(mountstats[device])
- if stats.is_nfs_mountpoint():
- check += [device]
- devices = check
- else:
- for device, descr in mountstats.iteritems():
- stats = DeviceData()
- stats.parse_stats(descr)
- if stats.is_nfs_mountpoint():
- devices += [device]
+ devices = list_nfs_mounts(origdevices, mountstats)
if len(devices) == 0:
print 'No NFS mount points were found'
return
+
old_mountstats = None
sample_time = 0.0
@@ -541,6 +557,12 @@ def iostat_command(name):
time.sleep(interval)
sample_time = interval
mountstats = parse_stats_file('/proc/self/mountstats')
+ # automount mountpoints add and drop, if automount is involved
+ # we need to recheck the devices list when reparsing
+ devices = list_nfs_mounts(origdevices,mountstats)
+ if len(devices) == 0:
+ print 'No NFS mount points were found'
+ return
count -= 1
else:
while True:
@@ -549,6 +571,12 @@ def iostat_command(name):
time.sleep(interval)
sample_time = interval
mountstats = parse_stats_file('/proc/self/mountstats')
+ # automount mountpoints add and drop, if automount is involved
+ # we need to recheck the devices list when reparsing
+ devices = list_nfs_mounts(origdevices,mountstats)
+ if len(devices) == 0:
+ print 'No NFS mount points were found'
+ return
#
# Main