From: Steve Dickson <SteveD@redhat.com>
To: Bohuslav Kabrda <bkabrda@redhat.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH] Make mountstats and nfs-iostat Python 3 compatible
Date: Wed, 18 Sep 2013 15:16:11 -0400 [thread overview]
Message-ID: <5239FBFB.8010300@RedHat.com> (raw)
In-Reply-To: <1379409678-15730-1-git-send-email-bkabrda@redhat.com>
On 17/09/13 05:21, Bohuslav Kabrda wrote:
> This will make mountstat and nfs-iostat run on Python 2.6, 2.7
> and >= 3.0
>
> Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com>
Committed!
steved.
> ---
> tools/mountstats/mountstats.py | 310 ++++++++++++++++++++---------------------
> tools/nfs-iostat/nfs-iostat.py | 22 +--
> 2 files changed, 166 insertions(+), 166 deletions(-)
>
> diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
> index b95b71d..3f5fea5 100644
> --- a/tools/mountstats/mountstats.py
> +++ b/tools/mountstats/mountstats.py
> @@ -53,7 +53,7 @@ class DeviceData:
> if words[6].find('nfs') != -1:
> self.__nfs_data['statvers'] = words[7]
> elif words[0] == 'age:':
> - self.__nfs_data['age'] = long(words[1])
> + self.__nfs_data['age'] = int(words[1])
> elif words[0] == 'opts:':
> self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',')
> elif words[0] == 'caps:':
> @@ -91,12 +91,12 @@ class DeviceData:
> self.__nfs_data['shortwrites'] = int(words[22])
> self.__nfs_data['delay'] = int(words[23])
> elif words[0] == 'bytes:':
> - self.__nfs_data['normalreadbytes'] = long(words[1])
> - self.__nfs_data['normalwritebytes'] = long(words[2])
> - self.__nfs_data['directreadbytes'] = long(words[3])
> - self.__nfs_data['directwritebytes'] = long(words[4])
> - self.__nfs_data['serverreadbytes'] = long(words[5])
> - self.__nfs_data['serverwritebytes'] = long(words[6])
> + self.__nfs_data['normalreadbytes'] = int(words[1])
> + self.__nfs_data['normalwritebytes'] = int(words[2])
> + self.__nfs_data['directreadbytes'] = int(words[3])
> + self.__nfs_data['directwritebytes'] = int(words[4])
> + self.__nfs_data['serverreadbytes'] = int(words[5])
> + self.__nfs_data['serverwritebytes'] = int(words[6])
>
> def __parse_rpc_line(self, words):
> if words[0] == 'RPC':
> @@ -110,8 +110,8 @@ class DeviceData:
> self.__rpc_data['rpcsends'] = int(words[4])
> self.__rpc_data['rpcreceives'] = int(words[5])
> self.__rpc_data['badxids'] = int(words[6])
> - self.__rpc_data['inflightsends'] = long(words[7])
> - self.__rpc_data['backlogutil'] = long(words[8])
> + self.__rpc_data['inflightsends'] = int(words[7])
> + self.__rpc_data['backlogutil'] = int(words[8])
> elif words[1] == 'tcp':
> self.__rpc_data['port'] = words[2]
> self.__rpc_data['bind_count'] = int(words[3])
> @@ -121,7 +121,7 @@ class DeviceData:
> self.__rpc_data['rpcsends'] = int(words[7])
> self.__rpc_data['rpcreceives'] = int(words[8])
> self.__rpc_data['badxids'] = int(words[9])
> - self.__rpc_data['inflightsends'] = long(words[10])
> + self.__rpc_data['inflightsends'] = int(words[10])
> self.__rpc_data['backlogutil'] = int(words[11])
> elif words[1] == 'rdma':
> self.__rpc_data['port'] = words[2]
> @@ -148,7 +148,7 @@ class DeviceData:
> else:
> op = words[0][:-1]
> self.__rpc_data['ops'] += [op]
> - self.__rpc_data[op] = [long(word) for word in words[1:]]
> + self.__rpc_data[op] = [int(word) for word in words[1:]]
>
> def parse_stats(self, lines):
> """Turn a list of lines from a mount stat file into a
> @@ -179,81 +179,81 @@ class DeviceData:
> def display_nfs_options(self):
> """Pretty-print the NFS options
> """
> - print 'Stats for %s mounted on %s:' % \
> - (self.__nfs_data['export'], self.__nfs_data['mountpoint'])
> -
> - print ' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions'])
> - print ' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities'])
> - if self.__nfs_data.has_key('nfsv4flags'):
> - print ' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags'])
> - if self.__nfs_data.has_key('pseudoflavor'):
> - print ' NFS security flavor: %d pseudoflavor: %d' % \
> - (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor'])
> + print('Stats for %s mounted on %s:' % \
> + (self.__nfs_data['export'], self.__nfs_data['mountpoint']))
> +
> + print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions']))
> + print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities']))
> + if 'nfsv4flags' in self.__nfs_data:
> + print(' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags']))
> + if 'pseudoflavor' in self.__nfs_data:
> + print(' NFS security flavor: %d pseudoflavor: %d' % \
> + (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor']))
> else:
> - print ' NFS security flavor: %d' % self.__nfs_data['flavor']
> + print(' NFS security flavor: %d' % self.__nfs_data['flavor'])
>
> def display_nfs_events(self):
> """Pretty-print the NFS event counters
> """
> - print
> - print 'Cache events:'
> - print ' data cache invalidated %d times' % self.__nfs_data['datainvalidates']
> - print ' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates']
> - print ' inodes synced %d times' % self.__nfs_data['syncinodes']
> - print
> - print 'VFS calls:'
> - print ' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates']
> - print ' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates']
> - print
> - print ' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir']
> - print ' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup']
> - print ' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission']
> - print ' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen']
> - print ' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush']
> - print ' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock']
> - print ' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync']
> - print ' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease']
> - print
> - print 'VM calls:'
> - print ' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage']
> - print ' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages']
> - print ' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage']
> - print ' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages']
> - print
> - print 'Generic NFS counters:'
> - print ' File size changing operations:'
> - print ' truncating SETATTRs: %d extending WRITEs: %d' % \
> - (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite'])
> - print ' %d silly renames' % self.__nfs_data['sillyrenames']
> - print ' short reads: %d short writes: %d' % \
> - (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites'])
> - print ' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay']
> + print()
> + print('Cache events:')
> + print(' data cache invalidated %d times' % self.__nfs_data['datainvalidates'])
> + print(' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates'])
> + print(' inodes synced %d times' % self.__nfs_data['syncinodes'])
> + print()
> + print('VFS calls:')
> + print(' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates'])
> + print(' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates'])
> + print()
> + print(' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir'])
> + print(' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup'])
> + print(' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission'])
> + print(' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen'])
> + print(' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush'])
> + print(' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock'])
> + print(' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync'])
> + print(' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease'])
> + print()
> + print('VM calls:')
> + print(' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage'])
> + print(' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages'])
> + print(' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage'])
> + print(' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages'])
> + print()
> + print('Generic NFS counters:')
> + print(' File size changing operations:')
> + print(' truncating SETATTRs: %d extending WRITEs: %d' % \
> + (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite']))
> + print(' %d silly renames' % self.__nfs_data['sillyrenames'])
> + print(' short reads: %d short writes: %d' % \
> + (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites']))
> + print(' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay'])
>
> def display_nfs_bytes(self):
> """Pretty-print the NFS event counters
> """
> - print
> - print 'NFS byte counts:'
> - print ' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes']
> - print ' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes']
> - print ' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes']
> - print ' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes']
> - print ' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes']
> - print ' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes']
> + print()
> + print('NFS byte counts:')
> + print(' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes'])
> + print(' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes'])
> + print(' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes'])
> + print(' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes'])
> + print(' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes'])
> + print(' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes'])
>
> def display_rpc_generic_stats(self):
> """Pretty-print the generic RPC stats
> """
> sends = self.__rpc_data['rpcsends']
>
> - print
> - print 'RPC statistics:'
> + print()
> + print('RPC statistics:')
>
> - print ' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \
> - (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids'])
> + print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \
> + (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids']))
> if sends != 0:
> - print ' average backlog queue length: %d' % \
> - (float(self.__rpc_data['backlogutil']) / sends)
> + print(' average backlog queue length: %d' % \
> + (float(self.__rpc_data['backlogutil']) / sends))
>
> def display_rpc_op_stats(self):
> """Pretty-print the per-op stats
> @@ -261,23 +261,23 @@ class DeviceData:
> sends = self.__rpc_data['rpcsends']
>
> # XXX: these should be sorted by 'count'
> - print
> + print()
> for op in self.__rpc_data['ops']:
> stats = self.__rpc_data[op]
> count = stats[0]
> retrans = stats[1] - count
> if count != 0:
> - print '%s:' % op
> - print '\t%d ops (%d%%)' % \
> - (count, ((count * 100) / sends)),
> - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)),
> - print '\t%d major timeouts' % stats[2]
> - print '\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \
> - (stats[3] / count, stats[4] / count)
> - print '\tbacklog wait: %f' % (float(stats[5]) / count),
> - print '\tRTT: %f' % (float(stats[6]) / count),
> - print '\ttotal execute time: %f (milliseconds)' % \
> - (float(stats[7]) / count)
> + print('%s:' % op)
> + print('\t%d ops (%d%%)' % \
> + (count, ((count * 100) / sends)), end=' ')
> + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), end=' ')
> + print('\t%d major timeouts' % stats[2])
> + print('\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \
> + (stats[3] / count, stats[4] / count))
> + print('\tbacklog wait: %f' % (float(stats[5]) / count), end=' ')
> + print('\tRTT: %f' % (float(stats[6]) / count), end=' ')
> + print('\ttotal execute time: %f (milliseconds)' % \
> + (float(stats[7]) / count))
>
> def compare_iostats(self, old_stats):
> """Return the difference between two sets of stats
> @@ -285,9 +285,9 @@ class DeviceData:
> result = DeviceData()
>
> # copy self into result
> - for key, value in self.__nfs_data.iteritems():
> + for key, value in self.__nfs_data.items():
> result.__nfs_data[key] = value
> - for key, value in self.__rpc_data.iteritems():
> + for key, value in self.__rpc_data.items():
> result.__rpc_data[key] = value
>
> # compute the difference of each item in the list
> @@ -295,7 +295,7 @@ class DeviceData:
> # the reference to them. so we build new lists here
> # for the result object.
> for op in result.__rpc_data['ops']:
> - result.__rpc_data[op] = map(difference, self.__rpc_data[op], old_stats.__rpc_data[op])
> + result.__rpc_data[op] = list(map(difference, self.__rpc_data[op], old_stats.__rpc_data[op]))
>
> # update the remaining keys we care about
> result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends']
> @@ -312,17 +312,17 @@ class DeviceData:
> if sample_time == 0:
> sample_time = float(self.__nfs_data['age'])
>
> - print
> - print '%s mounted on %s:' % \
> - (self.__nfs_data['export'], self.__nfs_data['mountpoint'])
> + print()
> + print('%s mounted on %s:' % \
> + (self.__nfs_data['export'], self.__nfs_data['mountpoint']))
>
> - print '\top/s\trpc bklog'
> - print '\t%.2f' % (sends / sample_time),
> + print('\top/s\trpc bklog')
> + print('\t%.2f' % (sends / sample_time), end=' ')
> if sends != 0:
> - print '\t%.2f' % \
> - ((float(self.__rpc_data['backlogutil']) / sends) / sample_time)
> + print('\t%.2f' % \
> + ((float(self.__rpc_data['backlogutil']) / sends) / sample_time))
> else:
> - print '\t0.00'
> + print('\t0.00')
>
> # reads: ops/s, kB/s, avg rtt, and avg exe
> # XXX: include avg xfer size and retransmits?
> @@ -332,15 +332,15 @@ class DeviceData:
> rtt = float(read_rpc_stats[6])
> exe = float(read_rpc_stats[7])
>
> - print '\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)'
> - print '\t\t%.2f' % (ops / sample_time),
> - print '\t\t%.2f' % (kilobytes / sample_time),
> + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)')
> + print('\t\t%.2f' % (ops / sample_time), end=' ')
> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ')
> if ops != 0:
> - print '\t\t%.2f' % (rtt / ops),
> - print '\t\t%.2f' % (exe / ops)
> + print('\t\t%.2f' % (rtt / ops), end=' ')
> + print('\t\t%.2f' % (exe / ops))
> else:
> - print '\t\t0.00',
> - print '\t\t0.00'
> + print('\t\t0.00', end=' ')
> + print('\t\t0.00')
>
> # writes: ops/s, kB/s, avg rtt, and avg exe
> # XXX: include avg xfer size and retransmits?
> @@ -350,15 +350,15 @@ class DeviceData:
> rtt = float(write_rpc_stats[6])
> exe = float(write_rpc_stats[7])
>
> - print '\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)'
> - print '\t\t%.2f' % (ops / sample_time),
> - print '\t\t%.2f' % (kilobytes / sample_time),
> + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)')
> + print('\t\t%.2f' % (ops / sample_time), end=' ')
> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ')
> if ops != 0:
> - print '\t\t%.2f' % (rtt / ops),
> - print '\t\t%.2f' % (exe / ops)
> + print('\t\t%.2f' % (rtt / ops), end=' ')
> + print('\t\t%.2f' % (exe / ops))
> else:
> - print '\t\t0.00',
> - print '\t\t0.00'
> + print('\t\t0.00', end=' ')
> + print('\t\t0.00')
>
> def parse_stats_file(filename):
> """pop the contents of a mountstats file into a dictionary,
> @@ -388,18 +388,18 @@ def parse_stats_file(filename):
> return ms_dict
>
> def print_mountstats_help(name):
> - print 'usage: %s [ options ] <mount point>' % name
> - print
> - print ' Version %s' % Mountstats_version
> - print
> - print ' Display NFS client per-mount statistics.'
> - print
> - print ' --version display the version of this command'
> - print ' --nfs display only the NFS statistics'
> - print ' --rpc display only the RPC statistics'
> - print ' --start sample and save statistics'
> - print ' --end resample statistics and compare them with saved'
> - print
> + print('usage: %s [ options ] <mount point>' % name)
> + print()
> + print(' Version %s' % Mountstats_version)
> + print()
> + print(' Display NFS client per-mount statistics.')
> + print()
> + print(' --version display the version of this command')
> + print(' --nfs display only the NFS statistics')
> + print(' --rpc display only the RPC statistics')
> + print(' --start sample and save statistics')
> + print(' --end resample statistics and compare them with saved')
> + print()
>
> def mountstats_command():
> """Mountstats command
> @@ -414,7 +414,7 @@ def mountstats_command():
> return
>
> if arg in ['-v', '--version', 'version']:
> - print '%s version %s' % (sys.argv[0], Mountstats_version)
> + print('%s version %s' % (sys.argv[0], Mountstats_version))
> sys.exit(0)
>
> if arg in ['-n', '--nfs']:
> @@ -426,10 +426,10 @@ def mountstats_command():
> continue
>
> if arg in ['-s', '--start']:
> - raise Exception, 'Sampling is not yet implemented'
> + raise Exception('Sampling is not yet implemented')
>
> if arg in ['-e', '--end']:
> - raise Exception, 'Sampling is not yet implemented'
> + raise Exception('Sampling is not yet implemented')
>
> if arg == sys.argv[0]:
> continue
> @@ -448,14 +448,14 @@ def mountstats_command():
>
> for mp in mountpoints:
> if mp not in mountstats:
> - print 'Statistics for mount point %s not found' % mp
> + 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
> + print('Mount point %s exists but is not an NFS mount' % mp)
> continue
>
> if nfs_only:
> @@ -472,37 +472,37 @@ def mountstats_command():
> stats.display_rpc_op_stats()
>
> def print_nfsstat_help(name):
> - print 'usage: %s [ options ]' % name
> - print
> - print ' Version %s' % Mountstats_version
> - print
> - print ' nfsstat-like program that uses NFS client per-mount statistics.'
> - print
> + print('usage: %s [ options ]' % name)
> + print()
> + print(' Version %s' % Mountstats_version)
> + print()
> + print(' nfsstat-like program that uses NFS client per-mount statistics.')
> + print()
>
> def nfsstat_command():
> print_nfsstat_help(prog)
>
> def print_iostat_help(name):
> - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name
> - print
> - print ' Version %s' % Mountstats_version
> - print
> - print ' iostat-like program to display NFS client per-mount statistics.'
> - print
> - print ' The <interval> parameter specifies the amount of time in seconds between'
> - print ' each report. The first report contains statistics for the time since each'
> - print ' file system was mounted. Each subsequent report contains statistics'
> - print ' collected during the interval since the previous report.'
> - print
> - print ' If the <count> parameter is specified, the value of <count> determines the'
> - print ' number of reports generated at <interval> seconds apart. If the interval'
> - print ' parameter is specified without the <count> parameter, the command generates'
> - print ' reports continuously.'
> - print
> - print ' If one or more <mount point> names are specified, statistics for only these'
> - print ' mount points will be displayed. Otherwise, all NFS mount points on the'
> - print ' client are listed.'
> - print
> + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name)
> + print()
> + print(' Version %s' % Mountstats_version)
> + print()
> + print(' iostat-like program to display NFS client per-mount statistics.')
> + print()
> + print(' The <interval> parameter specifies the amount of time in seconds between')
> + print(' each report. The first report contains statistics for the time since each')
> + print(' file system was mounted. Each subsequent report contains statistics')
> + print(' collected during the interval since the previous report.')
> + print()
> + print(' If the <count> parameter is specified, the value of <count> determines the')
> + print(' number of reports generated at <interval> seconds apart. If the interval')
> + print(' parameter is specified without the <count> parameter, the command generates')
> + print(' reports continuously.')
> + print()
> + print(' If one or more <mount point> names are specified, statistics for only these')
> + print(' mount points will be displayed. Otherwise, all NFS mount points on the')
> + print(' client are listed.')
> + print()
>
> def print_iostat_summary(old, new, devices, time):
> for device in devices:
> @@ -530,7 +530,7 @@ def iostat_command():
> return
>
> if arg in ['-v', '--version', 'version']:
> - print '%s version %s' % (sys.argv[0], Mountstats_version)
> + print('%s version %s' % (sys.argv[0], Mountstats_version))
> return
>
> if arg == sys.argv[0]:
> @@ -543,14 +543,14 @@ def iostat_command():
> if interval > 0:
> interval_seen = True
> else:
> - print 'Illegal <interval> value'
> + print('Illegal <interval> value')
> return
> elif not count_seen:
> count = int(arg)
> if count > 0:
> count_seen = True
> else:
> - print 'Illegal <count> value'
> + print('Illegal <count> value')
> return
>
> # make certain devices contains only NFS mount points
> @@ -563,13 +563,13 @@ def iostat_command():
> check += [device]
> devices = check
> else:
> - for device, descr in mountstats.iteritems():
> + for device, descr in mountstats.items():
> stats = DeviceData()
> stats.parse_stats(descr)
> if stats.is_nfs_mountpoint():
> devices += [device]
> if len(devices) == 0:
> - print 'No NFS mount points were found'
> + print('No NFS mount points were found')
> return
>
> old_mountstats = None
> @@ -608,7 +608,7 @@ try:
> elif prog == 'ms-iostat':
> iostat_command()
> except KeyboardInterrupt:
> - print 'Caught ^C... exiting'
> + print('Caught ^C... exiting')
> sys.exit(1)
>
> sys.exit(0)
> diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py
> index c035537..1c523f9 100644
> --- a/tools/nfs-iostat/nfs-iostat.py
> +++ b/tools/nfs-iostat/nfs-iostat.py
> @@ -95,7 +95,7 @@ class DeviceData:
> if words[6] == 'nfs':
> self.__nfs_data['statvers'] = words[7]
> elif words[0] == 'age:':
> - self.__nfs_data['age'] = long(words[1])
> + self.__nfs_data['age'] = int(words[1])
> elif words[0] == 'opts:':
> self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',')
> elif words[0] == 'caps:':
> @@ -116,7 +116,7 @@ class DeviceData:
> elif words[0] == 'bytes:':
> i = 1
> for key in NfsByteCounters:
> - self.__nfs_data[key] = long(words[i])
> + self.__nfs_data[key] = int(words[i])
> i += 1
>
> def __parse_rpc_line(self, words):
> @@ -131,8 +131,8 @@ class DeviceData:
> self.__rpc_data['rpcsends'] = int(words[4])
> self.__rpc_data['rpcreceives'] = int(words[5])
> self.__rpc_data['badxids'] = int(words[6])
> - self.__rpc_data['inflightsends'] = long(words[7])
> - self.__rpc_data['backlogutil'] = long(words[8])
> + self.__rpc_data['inflightsends'] = int(words[7])
> + self.__rpc_data['backlogutil'] = int(words[8])
> elif words[1] == 'tcp':
> self.__rpc_data['port'] = words[2]
> self.__rpc_data['bind_count'] = int(words[3])
> @@ -142,8 +142,8 @@ class DeviceData:
> self.__rpc_data['rpcsends'] = int(words[7])
> self.__rpc_data['rpcreceives'] = int(words[8])
> self.__rpc_data['badxids'] = int(words[9])
> - self.__rpc_data['inflightsends'] = long(words[10])
> - self.__rpc_data['backlogutil'] = long(words[11])
> + self.__rpc_data['inflightsends'] = int(words[10])
> + self.__rpc_data['backlogutil'] = int(words[11])
> elif words[1] == 'rdma':
> self.__rpc_data['port'] = words[2]
> self.__rpc_data['bind_count'] = int(words[3])
> @@ -169,7 +169,7 @@ class DeviceData:
> else:
> op = words[0][:-1]
> self.__rpc_data['ops'] += [op]
> - self.__rpc_data[op] = [long(word) for word in words[1:]]
> + self.__rpc_data[op] = [int(word) for word in words[1:]]
>
> def parse_stats(self, lines):
> """Turn a list of lines from a mount stat file into a
> @@ -271,7 +271,7 @@ class DeviceData:
> nfs_stats = self.__nfs_data
> lookup_ops = self.__rpc_data['LOOKUP'][0]
> readdir_ops = self.__rpc_data['READDIR'][0]
> - if self.__rpc_data.has_key('READDIRPLUS'):
> + if 'READDIRPLUS' in self.__rpc_data:
> readdir_ops += self.__rpc_data['READDIRPLUS'][0]
>
> dentry_revals = nfs_stats['dentryrevalidates']
> @@ -330,7 +330,7 @@ class DeviceData:
> def __print_rpc_op_stats(self, op, sample_time):
> """Print generic stats for one RPC op
> """
> - if not self.__rpc_data.has_key(op):
> + if op not in self.__rpc_data:
> return
>
> rpc_stats = self.__rpc_data[op]
> @@ -405,7 +405,7 @@ class DeviceData:
> elif which == 2:
> self.__print_rpc_op_stats('LOOKUP', sample_time)
> self.__print_rpc_op_stats('READDIR', sample_time)
> - if self.__rpc_data.has_key('READDIRPLUS'):
> + if 'READDIRPLUS' in self.__rpc_data:
> self.__print_rpc_op_stats('READDIRPLUS', sample_time)
> self.__print_dir_cache_stats(sample_time)
> elif which == 3:
> @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, options):
> 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)
> + devicelist = [x for x in old if x in devices]
> else:
> devicelist = devices
>
>
next prev parent reply other threads:[~2013-09-18 19:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-17 9:21 [PATCH] Make mountstats and nfs-iostat Python 3 compatible Bohuslav Kabrda
2013-09-17 12:21 ` Jim Rees
2013-09-18 19:16 ` Steve Dickson [this message]
2013-10-16 22:05 ` Weston Andros Adamson
2013-10-17 6:52 ` Bohuslav Kabrda
2013-10-17 14:17 ` Weston Andros Adamson
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=5239FBFB.8010300@RedHat.com \
--to=steved@redhat.com \
--cc=bkabrda@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).