All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bohuslav Kabrda <bkabrda@redhat.com>
To: Weston Andros Adamson <dros@netapp.com>
Cc: Steve Dickson <SteveD@redhat.com>,
	linux-nfs list <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] Make mountstats and nfs-iostat Python 3 compatible
Date: Thu, 17 Oct 2013 02:52:52 -0400 (EDT)	[thread overview]
Message-ID: <397459728.7504449.1381992772429.JavaMail.root@redhat.com> (raw)
In-Reply-To: <863050D3-36C8-460D-9BF5-31237C51D4F4@netapp.com>

----- Original Message -----
> This just made it into f19 and it doesn't work for me:
> 
> $ mountstats /mnt
>   File "/usr/sbin/mountstats", line 272
>     (count, ((count * 100) / sends)), end=' ')
>                                          ^
> SyntaxError: invalid syntax
> 
> $ python
> Python 2.7.5 (default, Oct  8 2013, 12:19:40)
> [GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2
> 
> 
> I think mountstats needs this line at the top of the file:
> 
> from __future__ import print_function
> 

True, sorry for the bug.
Slavek

> At least until python3 is the default on fedora.
> 
> -dros
> 
> On Sep 18, 2013, at 3:16 PM, Steve Dickson <SteveD@redhat.com> wrote:
> 
> > 
> > 
> > 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
> >> 
> >> 
> > --
> > 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
> 
> 

-- 
Regards,
Bohuslav "Slavek" Kabrda.

  reply	other threads:[~2013-10-17  6:52 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
2013-10-16 22:05   ` Weston Andros Adamson
2013-10-17  6:52     ` Bohuslav Kabrda [this message]
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=397459728.7504449.1381992772429.JavaMail.root@redhat.com \
    --to=bkabrda@redhat.com \
    --cc=SteveD@redhat.com \
    --cc=dros@netapp.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.