All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bohuslav Kabrda <bkabrda@redhat.com>
To: steved@redhat.com
Cc: linux-nfs@vger.kernel.org
Subject: nfs-utils python 3 compatibility
Date: Thu, 25 Jul 2013 05:08:54 -0400 (EDT)	[thread overview]
Message-ID: <1785810857.6559926.1374743334612.JavaMail.root@redhat.com> (raw)
In-Reply-To: <1896139447.6558392.1374743113824.JavaMail.root@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 377 bytes --]

Hey,
I created a patch for nfs-utils Python 3 compatibility and I was suggested by J. Bruce Fields to send it to you.
Basically, I ran the scripts through "2to3" and made few hand adjustments. With these patches, scripts will work on Python 2.6+, including Python 3.
Would you accept such a patch upstream?
Thanks a lot for considering!

-- 
Regards,
Bohuslav "Slavek" Kabrda.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: nfs-utils-python-3.patch --]
[-- Type: text/x-patch; name=nfs-utils-python-3.patch, Size: 28692 bytes --]

commit 10646c1b8145826f5dcdc8d51e8be5f4031ae782
Author: Bohuslav Kabrda <bkabrda@redhat.com>
Date:   Fri Jul 19 14:34:12 2013 +0200

    Make mountstats and nfs-iostat Python 3 compatible

diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
index b95b71d..3bc3200 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
 

           reply	other threads:[~2013-07-25  9:08 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <1896139447.6558392.1374743113824.JavaMail.root@redhat.com>]

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=1785810857.6559926.1374743334612.JavaMail.root@redhat.com \
    --to=bkabrda@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=steved@redhat.com \
    /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.