#!/usr/bin/python import time FNAME='/proc/stat' def readBody(): fp = open(FNAME, 'r') lines = [] try: lines.extend([l.strip() for l in fp]) finally: fp.close() return lines def splitBody(): lines = [] lines.extend(l.split() for l in readBody()) return lines class CPUTime: user = 0 nice = 0 system = 0 idle = 0 total = 0 def parse(self, line): self.user = long(line[1]) self.nice = long(line[2]) self.system = long(line[3]) self.idle = long(line[4]) self.total = float(self.user + self.nice + self.system + self.idle) def __repr__(self): return 'user=%s, nice=%s, sys=%s, idle=%s, total=%s' % (self.user, self.nice, self.system, self.idle, self.total) def usageUser(self): return self._doPercentage(self.user) def usageNice(self): return self._doPercentage(self.nice) def usageSystem(self): return self._doPercentage(self.system) def usageIdle(self): return self._doPercentage(self.idle) def delta(self, other): self.user -= other.user self.nice -= other.nice self.system -= other.system self.idle -= other.idle self.total -= other.total def copy(self): t = CPUTime() t.user = self.user t.nice = self.nice t.system = self.system t.idle = self.idle t.total = self.total return t def _doPercentage(self, a): return a / self.total * 100.0; def main(): print 'Collecting first sample' first = CPUTime() first.parse(splitBody()[0]) while True: time.sleep(1) second = CPUTime() second.parse(splitBody()[0]) secondCopy = second.copy() second.delta(first) print 'user=%s, nice=%s, sys=%s, idle=%s' % (second.usageUser(), second.usageNice(), second.usageSystem(), second.usageIdle()) first = secondCopy if __name__ == '__main__': main()