diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2008-06-13 13:47:32 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2008-06-13 13:47:32 -0300 |
commit | 8029fecd261df2ad7444d60622c2dc70aaa27304 (patch) | |
tree | c3f5a3e09db5a1abf57dc1631e70cf8df0a3593e | |
parent | 4761db2074b97bf9c32f8fbf201b54fc09ee7cc4 (diff) | |
download | python-linux-procfs-8029fecd261df2ad7444d60622c2dc70aaa27304.tar.gz |
cpustats: handle CPU hotplug
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rwxr-xr-x | procfs/procfs.py | 23 |
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) + \ |