[svn] r5920 - trunk/tools/dstat/plugins

packagers at lists.rpmforge.net packagers at lists.rpmforge.net
Mon Oct 15 02:06:46 CEST 2007


Author: dag
Date: 2007-10-15 02:06:45 +0200 (Mon, 15 Oct 2007)
New Revision: 5920

Modified:
   trunk/tools/dstat/plugins/dstat_topbio.py
   trunk/tools/dstat/plugins/dstat_topcpu.py
   trunk/tools/dstat/plugins/dstat_topio.py
   trunk/tools/dstat/plugins/dstat_topmem.py
   trunk/tools/dstat/plugins/dstat_topoom.py
Log:
Updates

Modified: trunk/tools/dstat/plugins/dstat_topbio.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topbio.py	2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topbio.py	2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,9 +16,7 @@
         self.cn1 = {}; self.cn2 = {}; self.val = {}
 
     def check(self):
-        try:
-            open('/proc/self/io')
-        except:
+        if not os.access('/proc/self/io', os.R_OK):
             raise Exception, 'Kernel has no I/O accounting, use at least 2.6.20.'
         return True
 

Modified: trunk/tools/dstat/plugins/dstat_topcpu.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topcpu.py	2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topcpu.py	2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,7 +16,7 @@
         self.cn1 = {}; self.cn2 = {}; self.val = {}
 
     def extract(self):
-        self.val['usage'] = 0.0
+        self.val['max'] = 0.0
         for pid in os.listdir('/proc/'):
             try:
                 ### Is it a pid ?
@@ -26,16 +26,9 @@
                 if pid == self.pid: continue
 
                 ### Using dopen() will cause too many open files
-#               l = string.split(dopen('/proc/%s/stat' % pid).read())
                 l = string.split(open('/proc/%s/stat' % pid).read())
-
                 if len(l) < 15: continue
 
-                ### Get commandline
-                m = string.split(open('/proc/%s/cmdline' % pid).read(), '\0')
-                if len(m) > 1:
-                    cmd = os.path.basename(m[1])
-
                 ### Reset previous value if it doesn't exist
                 if not self.cn1.has_key(pid):
                     self.cn1[pid] = 0
@@ -43,28 +36,35 @@
                 self.cn2[pid] = int(l[13]) + int(l[14])
                 usage = (self.cn2[pid] - self.cn1[pid]) * 1.0 / tick
 
+                ### Is it a new topper ?
+                if usage < self.val['max']: continue
+
+                ### Get commandline
+                m = string.split(open('/proc/%s/cmdline' % pid).read(), '\0')
+                if len(m) > 1:
+                    cmd = os.path.basename(m[1])
+
             except ValueError:
                 continue
             except IOError:
                 continue
 
             ### Get the process that spends the most jiffies
-            if usage >= self.val['usage']:
-                self.val['usage'] = usage
-                self.val['name'] = l[1][1:-1]
-                self.val['pid'] = pid
-                self.val['cmd'] = cmd
-#                st = os.stat("/proc/%s" % pid)
-#                if st:
-#                    pw = pwd.getpwuid(st.st_uid)
-#                    if pw:
-#                        self.val['user'] = pw[0]
-#                    else:
-#                        self.val['user'] = stat.st_uid
+            self.val['max'] = usage
+            self.val['name'] = l[1][1:-1]
+            self.val['pid'] = pid
+            self.val['cmd'] = cmd
+#            st = os.stat("/proc/%s" % pid)
+#            if st:
+#                pw = pwd.getpwuid(st.st_uid)
+#                if pw:
+#                    self.val['user'] = pw[0]
 #                else:
-#                    self.val['user'] = 'none'
+#                    self.val['user'] = stat.st_uid
+#            else:
+#                self.val['user'] = 'none'
 
-        if self.val['usage'] == 0.0:
+        if self.val['max'] == 0.0:
             self.val['process'] = ''
         else:
             ### If the name is a known interpreter, take the second argument from the cmdline
@@ -87,12 +87,12 @@
             self.cn1.update(self.cn2)
 
     def show(self):
-        if self.val['usage'] == 0.0:
+        if self.val['max'] == 0.0:
             return '%-*s' % (self.format[1], '')
         else:
-            return '%s%-*s%s' % (ansi['default'], self.format[1]-3, self.val['process'][0:self.format[1]-3], cprint(self.val['usage'], ('p', 3, 34)))
+            return '%s%-*s%s' % (ansi['default'], self.format[1]-3, self.val['process'][0:self.format[1]-3], cprint(self.val['max'], ('p', 3, 34)))
 
     def showcsv(self):
-        return '%s / %d%%' % (self.val['name'], self.val['usage'])
+        return '%s / %d%%' % (self.val['name'], self.val['max'])
 
 # vim:ts=4:sw=4:et

Modified: trunk/tools/dstat/plugins/dstat_topio.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topio.py	2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topio.py	2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,9 +16,7 @@
         self.cn1 = {}; self.cn2 = {}; self.val = {}
 
     def check(self):
-        try:
-            open('/proc/self/io')
-        except:
+        if not os.access('/proc/self/io', os.R_OK):
             raise Exception, 'Kernel has no I/O accounting, use at least 2.6.20.'
         return True
 

Modified: trunk/tools/dstat/plugins/dstat_topmem.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topmem.py	2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topmem.py	2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,7 +16,7 @@
         self.cn1 = {}; self.cn2 = {}; self.val = {}
 
     def extract(self):
-        self.val['usage'] = 0.0
+        self.val['max'] = 0.0
         for pid in os.listdir('/proc/'):
             try:
                 ### Is it a pid ?
@@ -26,33 +26,37 @@
                 if pid == self.pid: continue
 
                 ### Using dopen() will cause too many open files
-#               l = string.split(dopen('/proc/%s/stat' % pid).read())
                 l = string.split(open('/proc/%s/stat' % pid).read())
-
                 if len(l) < 23: continue
                 usage = int(l[23]) * pagesize
 
+                ### Is it a new topper ?
+                if usage < self.val['max']: continue
+
+                ### Extract name
+                name = l[1][1:-1]
+
+                ### Get commandline
+                m = string.split(open('/proc/%s/cmdline' % pid).read(),'\0')
+                if len(m) > 1:
+                    cmd = os.path.basename(m[1])
+
             except ValueError:
                 continue
             except IOError:
                 continue
 
             ### Get the process that uses the most memory
-            if usage >= self.val['usage']:
-                self.val['usage'] = usage
-                self.val['name'] = l[1][1:-1]
-                self.val['pid'] = pid
+            self.val['max'] = usage
+            self.val['name'] = name
+            self.val['pid'] = pid
 
-        if self.val['usage'] == 0.0:
+        if self.val['max'] == 0.0:
             self.val['process'] = ''
         else:
             ### If the name is a known interpreter, take the second argument from the cmdline
             if self.val['name'] in ('bash', 'csh', 'ksh', 'perl', 'python', 'sh'):
-                ### Using dopen() will cause too many open files
-#               l = string.split(dopen('/proc/%s/cmdline' % self.val['pid']).read(), '\0')
-                l = string.split(open('/proc/%s/cmdline' % self.val['pid']).read(), '\0')
-                if len(l) > 2:
-                    self.val['process'] = os.path.basename(l[1])
+                self.val['process'] = os.path.basename(cmd)
             else:
                 self.val['process'] = self.val['name']
 
@@ -67,9 +71,9 @@
 #           self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
 
     def show(self):
-        return '%s%-*s%s' % (ansi['default'], self.format[1]-5, self.val['process'][0:self.format[1]-5], cprint(self.val['usage'], ('f', 5, 1024)))
+        return '%s%-*s%s' % (ansi['default'], self.format[1]-5, self.val['process'][0:self.format[1]-5], cprint(self.val['max'], ('f', 5, 1024)))
 
     def showcsv(self):
-        return '%s / %d%%' % (self.val['name'], self.val['usage'])
+        return '%s / %d%%' % (self.val['name'], self.val['max'])
 
 # vim:ts=4:sw=4:et

Modified: trunk/tools/dstat/plugins/dstat_topoom.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topoom.py	2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topoom.py	2007-10-15 00:06:45 UTC (rev 5920)
@@ -9,14 +9,14 @@
 class dstat_topoom(dstat):
     def __init__(self):
         self.name = 'out of memory'
-        self.format = ('s', 20, 34)
+        self.format = ('s', 18, 1000)
         self.nick = ('kill score',)
         self.vars = self.nick
         self.pid = str(os.getpid())
         self.cn1 = {}; self.cn2 = {}; self.val = {}
 
     def check(self):
-        if not os.access('/proc/1/oom_score', os.R_OK):
+        if not os.access('/proc/self/oom_score', os.R_OK):
             raise Exception, 'Kernel does not support /proc/pid/oom_score, use at least 2.6.20.'
         return True
 
@@ -31,11 +31,11 @@
                 if pid == self.pid: continue
 
                 ### Using dopen() will cause too many open files
-#               l = string.split(dopen('/proc/%s/stat' % pid).read())
                 l = string.split(open('/proc/%s/oom_score' % pid).read())
                 if len(l) < 1: continue
                 oom_score = int(l[0])
 
+                ### Is it a new topper ?
                 if  oom_score < self.val['max']: continue
 
                 ### Extract name
@@ -53,22 +53,11 @@
                 continue
 
             ### Get the process that spends the most jiffies
-            if  oom_score >= self.val['max']:
+            self.val['max'] = oom_score
+            self.val['name'] = name
+            self.val['pid'] = pid
+            self.val['cmd'] = cmd
 
-                self.val['max'] = oom_score
-                self.val['name'] = name
-                self.val['pid'] = pid
-                self.val['cmd'] = cmd
-#                st = os.stat("/proc/%s" % pid)
-#                if st:
-#                    pw = pwd.getpwuid(st.st_uid)
-#                    if pw:
-#                        self.val['user'] = pw[0]
-#                    else:
-#                        self.val['user'] = stat.st_uid
-#                else:
-#                    self.val['user'] = 'none'
-
         if self.val['max'] == 0.0:
             self.val['process'] = ''
         else:
@@ -78,15 +67,8 @@
             else:
                 self.val['process'] = self.val['name']
 
-#               l = l.reverse()
-#               for x in l:
-#                   print x
-#                   if x[0] != '-':
-#                       self.val['name'] = os.path.basename(x)
-#                       break
-
             ### Debug (show PID)
-#           self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
+#            self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
 
     def show(self):
         if self.val['max'] == 0.0:



More information about the svn-commits mailing list