Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx1.redhat.com ([209.132.183.28]:60515 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757816Ab3CYOSi (ORCPT ); Mon, 25 Mar 2013 10:18:38 -0400 Message-ID: <51505CBB.9010608@RedHat.com> Date: Mon, 25 Mar 2013 10:18:35 -0400 From: Steve Dickson MIME-Version: 1.0 To: Mike Frysinger CC: linux-nfs@vger.kernel.org Subject: Re: [PATCH] nfsiostat: make it work w/python3 References: <1364155277-30394-1-git-send-email-vapier@gentoo.org> In-Reply-To: <1364155277-30394-1-git-send-email-vapier@gentoo.org> Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-nfs-owner@vger.kernel.org List-ID: On 24/03/13 16:01, Mike Frysinger wrote: > Simple fixes here to work with python 2 & 3: > - use print() everywhere > - dict.iteritems() -> dict.items() > - file() -> open() > - sys.maxint -> sys.maxsize > > Signed-off-by: Mike Frysinger Committed... steved. > --- > tools/nfs-iostat/nfs-iostat.py | 130 +++++++++++++++++++++-------------------- > 1 file changed, 66 insertions(+), 64 deletions(-) > > diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py > index d909632..dfbef87 100644 > --- a/tools/nfs-iostat/nfs-iostat.py > +++ b/tools/nfs-iostat/nfs-iostat.py > @@ -3,6 +3,8 @@ > """Emulate iostat for NFS mount points using /proc/self/mountstats > """ > > +from __future__ import print_function > + > __copyright__ = """ > Copyright (C) 2005, Chuck Lever > > @@ -201,9 +203,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 > @@ -233,9 +235,9 @@ class DeviceData: > client_bytes_read = float(nfs_stats['serverreadbytes'] - nfs_stats['directreadbytes']) > ratio = ((app_bytes_read - client_bytes_read) * 100) / app_bytes_read > > - print > - print 'app bytes: %f client bytes %f' % (app_bytes_read, client_bytes_read) > - print 'Data cache hit ratio: %4.2f%%' % ratio > + print() > + print('app bytes: %f client bytes %f' % (app_bytes_read, client_bytes_read)) > + print('Data cache hit ratio: %4.2f%%' % ratio) > > def __print_attr_cache_stats(self, sample_time): > """Print attribute cache efficiency stats > @@ -255,13 +257,13 @@ class DeviceData: > data_invalidates = float(nfs_stats['datainvalidates']) > attr_invalidates = float(nfs_stats['attrinvalidates']) > > - print > - print '%d inode revalidations, hitting in cache %4.2f%% of the time' % \ > - (revalidates, ratio) > - print '%d open operations (mandatory GETATTR requests)' % opens > + print() > + print('%d inode revalidations, hitting in cache %4.2f%% of the time' % \ > + (revalidates, ratio)) > + print('%d open operations (mandatory GETATTR requests)' % opens) > if getattr_ops != 0: > - print '%4.2f%% of GETATTRs resulted in data cache invalidations' % \ > - ((data_invalidates * 100) / getattr_ops) > + print('%4.2f%% of GETATTRs resulted in data cache invalidations' % \ > + ((data_invalidates * 100) / getattr_ops)) > > def __print_dir_cache_stats(self, sample_time): > """Print directory stats > @@ -277,13 +279,13 @@ class DeviceData: > lookups = nfs_stats['vfslookup'] > getdents = nfs_stats['vfsreaddir'] > > - print > - print '%d open operations (pathname lookups)' % opens > - print '%d dentry revalidates and %d vfs lookup requests' % \ > - (dentry_revals, lookups), > - print 'resulted in %d LOOKUPs on the wire' % lookup_ops > - print '%d vfs getdents calls resulted in %d READDIRs on the wire' % \ > - (getdents, readdir_ops) > + print() > + print('%d open operations (pathname lookups)' % opens) > + print('%d dentry revalidates and %d vfs lookup requests' % \ > + (dentry_revals, lookups)) > + print('resulted in %d LOOKUPs on the wire' % lookup_ops) > + print('%d vfs getdents calls resulted in %d READDIRs on the wire' % \ > + (getdents, readdir_ops)) > > def __print_page_stats(self, sample_time): > """Print page cache stats > @@ -297,33 +299,33 @@ class DeviceData: > vfswritepages = nfs_stats['vfswritepages'] > pages_written = nfs_stats['writepages'] > > - print > - print '%d nfs_readpage() calls read %d pages' % \ > - (vfsreadpage, vfsreadpage) > - print '%d nfs_readpages() calls read %d pages' % \ > - (vfsreadpages, pages_read - vfsreadpage), > + print() > + print('%d nfs_readpage() calls read %d pages' % \ > + (vfsreadpage, vfsreadpage)) > + print('%d nfs_readpages() calls read %d pages' % \ > + (vfsreadpages, pages_read - vfsreadpage)) > if vfsreadpages != 0: > - print '(%.1f pages per call)' % \ > - (float(pages_read - vfsreadpage) / vfsreadpages) > + print('(%.1f pages per call)' % \ > + (float(pages_read - vfsreadpage) / vfsreadpages)) > else: > - print > - > - print > - print '%d nfs_updatepage() calls' % nfs_stats['vfsupdatepage'] > - print '%d nfs_writepage() calls wrote %d pages' % \ > - (vfswritepage, vfswritepage) > - print '%d nfs_writepages() calls wrote %d pages' % \ > - (vfswritepages, pages_written - vfswritepage), > + print() > + > + print() > + print('%d nfs_updatepage() calls' % nfs_stats['vfsupdatepage']) > + print('%d nfs_writepage() calls wrote %d pages' % \ > + (vfswritepage, vfswritepage)) > + print('%d nfs_writepages() calls wrote %d pages' % \ > + (vfswritepages, pages_written - vfswritepage)) > if (vfswritepages) != 0: > - print '(%.1f pages per call)' % \ > - (float(pages_written - vfswritepage) / vfswritepages) > + print('(%.1f pages per call)' % \ > + (float(pages_written - vfswritepage) / vfswritepages)) > else: > - print > + print() > > congestionwaits = nfs_stats['congestionwait'] > if congestionwaits != 0: > - print > - print '%d congestion waits' % congestionwaits > + print() > + print('%d congestion waits' % congestionwaits) > > def __print_rpc_op_stats(self, op, sample_time): > """Print generic stats for one RPC op > @@ -351,15 +353,15 @@ class DeviceData: > exe_per_op = 0.0 > > op += ':' > - print '%s' % op.lower().ljust(15), > - print ' ops/s\t\t kB/s\t\t kB/op\t\tretrans\t\tavg RTT (ms)\tavg exe (ms)' > + print('%s' % op.lower().ljust(15)) > + print(' ops/s\t\t kB/s\t\t kB/op\t\tretrans\t\tavg RTT (ms)\tavg exe (ms)') > > - print '\t\t%7.3f' % (ops / sample_time), > - print '\t%7.3f' % (kilobytes / sample_time), > - print '\t%7.3f' % kb_per_op, > - print ' %7d (%3.1f%%)' % (retrans, retrans_percent), > - print '\t%7.3f' % rtt_per_op, > - print '\t%7.3f' % exe_per_op > + print('\t\t%7.3f' % (ops / sample_time)) > + print('\t%7.3f' % (kilobytes / sample_time)) > + print('\t%7.3f' % kb_per_op) > + print(' %7d (%3.1f%%)' % (retrans, retrans_percent)) > + print('\t%7.3f' % rtt_per_op) > + print('\t%7.3f' % exe_per_op) > > def ops(self, sample_time): > sends = float(self.__rpc_data['rpcsends']) > @@ -384,14 +386,14 @@ class DeviceData: > else: > backlog = 0.0 > > - print > - print '%s mounted on %s:' % \ > - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) > - print > + print() > + print('%s mounted on %s:' % \ > + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) > + print() > > - print ' op/s\t\trpc bklog' > - print '%7.2f' % (sends / sample_time), > - print '\t%7.2f' % backlog > + print(' op/s\t\trpc bklog') > + print('%7.2f' % (sends / sample_time)) > + print('\t%7.2f' % backlog) > > if which == 0: > self.__print_rpc_op_stats('READ', sample_time) > @@ -424,7 +426,7 @@ def parse_stats_file(filename): > ms_dict = dict() > key = '' > > - f = file(filename) > + f = open(filename) > for line in f.readlines(): > words = line.split() > if len(words) == 0: > @@ -494,7 +496,7 @@ def list_nfs_mounts(givenlist, mountstats): > if stats.is_nfs_mountpoint(): > list += [device] > else: > - for device, descr in mountstats.iteritems(): > + for device, descr in mountstats.items(): > stats = DeviceData() > stats.parse_stats(descr) > if stats.is_nfs_mountpoint(): > @@ -527,7 +529,7 @@ client are listed. > usage="usage: %prog [ [ ] ] [ ] [ ]", > description=mydescription, > version='version %s' % Iostats_version) > - parser.set_defaults(which=0, sort=False, list=sys.maxint) > + parser.set_defaults(which=0, sort=False, list=sys.maxsize) > > statgroup = OptionGroup(parser, "Statistics Options", > 'File I/O is displayed unless one of the following is specified:') > @@ -572,29 +574,29 @@ client are listed. > try: > interval = int(arg) > except: > - print 'Illegal value %s' % arg > + print('Illegal value %s' % arg) > return > if interval > 0: > interval_seen = True > else: > - print 'Illegal value %s' % arg > + print('Illegal value %s' % arg) > return > elif not count_seen: > try: > count = int(arg) > except: > - print 'Ilegal value %s' % arg > + print('Ilegal value %s' % arg) > return > if count > 0: > count_seen = True > else: > - print 'Illegal value %s' % arg > + print('Illegal value %s' % arg) > return > > # make certain devices contains only NFS mount points > devices = list_nfs_mounts(origdevices, mountstats) > if len(devices) == 0: > - print 'No NFS mount points were found' > + print('No NFS mount points were found') > return > > > @@ -616,7 +618,7 @@ client are listed. > # 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' > + print('No NFS mount points were found') > return > count -= 1 > else: > @@ -630,7 +632,7 @@ client are listed. > # 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' > + print('No NFS mount points were found') > return > > # > @@ -641,7 +643,7 @@ prog = os.path.basename(sys.argv[0]) > try: > iostat_command(prog) > except KeyboardInterrupt: > - print 'Caught ^C... exiting' > + print('Caught ^C... exiting') > sys.exit(1) > > sys.exit(0) >