summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2008-06-13 13:47:32 -0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2008-06-13 13:47:32 -0300
commit8029fecd261df2ad7444d60622c2dc70aaa27304 (patch)
treec3f5a3e09db5a1abf57dc1631e70cf8df0a3593e
parent4761db2074b97bf9c32f8fbf201b54fc09ee7cc4 (diff)
downloadpython-linux-procfs-8029fecd261df2ad7444d60622c2dc70aaa27304.tar.gz
cpustats: handle CPU hotplug
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rwxr-xr-xprocfs/procfs.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/procfs/procfs.py b/procfs/procfs.py
index c7926b3..70a7031 100755
--- a/procfs/procfs.py
+++ b/procfs/procfs.py
@@ -378,7 +378,7 @@ class cpustat:
class cpusstats:
def __init__(self, filename = "/proc/stat"):
- self.entries = []
+ self.entries = {}
self.time = None
self.hertz = os.sysconf(2)
self.filename = filename
@@ -391,24 +391,35 @@ class cpusstats:
return self.entries[key]
def __len__(self):
- return len(self.entries)
+ return len(self.entries.keys())
+
+ def keys(self):
+ return self.entries.keys()
def reload(self):
last_entries = self.entries
- self.entries = []
+ self.entries = {}
f = file(self.filename)
for line in f.readlines():
fields = line.strip().split()
if fields[0][:3].lower() != "cpu":
continue
- self.entries.append(cpustat(fields))
+ c = cpustat(fields)
+ if c.name == "cpu":
+ idx = 0
+ else:
+ idx = int(c.name[3:]) + 1
+ self.entries[idx] = c
f.close()
last_time = self.time
self.time = time.time()
- if len(last_entries) > 0:
+ if last_entries:
delta_sec = self.time - last_time
interval_hz = delta_sec * self.hertz
- for cpu in range(len(last_entries)):
+ for cpu in self.entries.keys():
+ if cpu not in last_entries:
+ curr.usage = 0
+ continue
curr = self.entries[cpu]
prev = last_entries[cpu]
delta = (curr.user - prev.user) + \