/usr/share/dstat/dstat_top_cpu.py is in dstat 0.7.2-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | ### Authority: Dag Wieers <dag@wieers.com>
class dstat_plugin(dstat):
"""
Most expensive CPU process.
Displays the process that uses the CPU the most during the monitored
interval. The value displayed is the percentage of CPU time for the total
amount of CPU processing power. Based on per process CPU information.
"""
def __init__(self):
self.name = 'most expensive'
self.vars = ('cpu process',)
self.type = 's'
self.width = 16
self.scale = 0
self.pidset1 = {}
def extract(self):
self.output = ''
self.pidset2 = {}
self.val['max'] = 0.0
for pid in proc_pidlist():
try:
### Using dopen() will cause too many open files
l = proc_splitline('/proc/%s/stat' % pid)
except IOError:
continue
if len(l) < 15: continue
### Reset previous value if it doesn't exist
if not self.pidset1.has_key(pid):
self.pidset1[pid] = 0
self.pidset2[pid] = long(l[13]) + long(l[14])
usage = (self.pidset2[pid] - self.pidset1[pid]) * 1.0 / elapsed / cpunr
### Is it a new topper ?
if usage < self.val['max']: continue
name = l[1][1:-1]
self.val['max'] = usage
self.val['pid'] = pid
self.val['name'] = getnamebypid(pid, name)
# self.val['name'] = name
if self.val['max'] != 0.0:
self.output = '%-*s%s' % (self.width-3, self.val['name'][0:self.width-3], cprint(self.val['max'], 'f', 3, 34))
### Debug (show PID)
# self.output = '%*s %-*s' % (5, self.val['pid'], self.width-6, self.val['name'])
if step == op.delay:
self.pidset1 = self.pidset2
def showcsv(self):
return '%s / %d%%' % (self.val['name'], self.val['max'])
# vim:ts=4:sw=4:et
|