Merge lp:~sidnei/txstatsd/per-cpu-report into lp:txstatsd

Proposed by Sidnei da Silva
Status: Merged
Approved by: Sidnei da Silva
Approved revision: 93
Merged at revision: 93
Proposed branch: lp:~sidnei/txstatsd/per-cpu-report
Merge into: lp:txstatsd
Diff against target: 90 lines (+56/-5)
2 files modified
txstatsd/process.py (+9/-4)
txstatsd/tests/test_process.py (+47/-1)
To merge this branch: bzr merge lp:~sidnei/txstatsd/per-cpu-report
Reviewer Review Type Date Requested Status
Lucio Torre (community) Approve
Review via email: mp+108217@code.launchpad.net

Commit message

Allow reporting per-cpu stats

Description of the change

Allow reporting per-cpu stats

To post a comment you must log in.
Revision history for this message
Lucio Torre (lucio.torre) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'txstatsd/process.py'
2--- txstatsd/process.py 2012-01-28 00:17:39 +0000
3+++ txstatsd/process.py 2012-05-31 18:35:24 +0000
4@@ -165,11 +165,16 @@
5 report_process_net_stats = process_report.get_net_stats
6
7
8-def report_system_stats(prefix="sys"):
9- cpu_times = psutil.cpu_times()._asdict()
10+def report_system_stats(prefix="sys", percpu=False):
11+ cpu_times = psutil.cpu_times(percpu=percpu)
12 system_stats = {}
13- for mode, time in cpu_times.iteritems():
14- system_stats[prefix + ".cpu." + mode] = time
15+ if not percpu:
16+ for mode, time in cpu_times._asdict().iteritems():
17+ system_stats[prefix + ".cpu." + mode] = time
18+ else:
19+ for idx, cpu_time in enumerate(cpu_times):
20+ for mode, time in cpu_time._asdict().iteritems():
21+ system_stats[prefix + ".cpu.%03d." % idx + mode] = time
22 return system_stats
23
24
25
26=== modified file 'txstatsd/tests/test_process.py'
27--- txstatsd/tests/test_process.py 2012-05-14 19:18:27 +0000
28+++ txstatsd/tests/test_process.py 2012-05-31 18:35:24 +0000
29@@ -82,7 +82,7 @@
30 """System cpu counters are collected through psutil."""
31 cpu_times = psutil.cpu_times()
32 mock = self.mocker.replace("psutil.cpu_times")
33- self.expect(mock()).result(cpu_times)
34+ self.expect(mock(percpu=False)).result(cpu_times)
35 self.mocker.replay()
36
37 result = report_system_stats()
38@@ -108,6 +108,52 @@
39 self.assertEqual(cpu_times.idle, result["sys.cpu.idle"])
40 self.assertEqual(cpu_times.irq, result["sys.cpu.irq"])
41
42+ def test_per_cpu_counters(self):
43+ """System percpu counters are collected through psutil."""
44+ cpu_times = psutil.cpu_times()
45+ mock = self.mocker.replace("psutil.cpu_times")
46+ self.expect(mock(percpu=True)).result([cpu_times, cpu_times])
47+ self.mocker.replay()
48+
49+ result = report_system_stats(percpu=True)
50+ # cpu_times is platform-dependent
51+ if sys.platform.lower().startswith("linux"):
52+ self.assertEqual(cpu_times.user, result["sys.cpu.000.user"])
53+ self.assertEqual(cpu_times.system, result["sys.cpu.000.system"])
54+ self.assertEqual(cpu_times.idle, result["sys.cpu.000.idle"])
55+ self.assertEqual(cpu_times.iowait, result["sys.cpu.000.iowait"])
56+ self.assertEqual(cpu_times.irq, result["sys.cpu.001.irq"])
57+ self.assertEqual(cpu_times.user, result["sys.cpu.001.user"])
58+ self.assertEqual(cpu_times.system, result["sys.cpu.001.system"])
59+ self.assertEqual(cpu_times.idle, result["sys.cpu.001.idle"])
60+ self.assertEqual(cpu_times.iowait, result["sys.cpu.001.iowait"])
61+ self.assertEqual(cpu_times.irq, result["sys.cpu.001.irq"])
62+ elif sys.platform.lower().startswith("win32"):
63+ self.assertEqual(cpu_times.user, result["sys.cpu.000.user"])
64+ self.assertEqual(cpu_times.system, result["sys.cpu.000.system"])
65+ self.assertEqual(cpu_times.idle, result["sys.cpu.000.idle"])
66+ self.assertEqual(cpu_times.user, result["sys.cpu.001.user"])
67+ self.assertEqual(cpu_times.system, result["sys.cpu.001.system"])
68+ self.assertEqual(cpu_times.idle, result["sys.cpu.001.idle"])
69+ elif sys.platform.lower().startswith("darwin"):
70+ self.assertEqual(cpu_times.user, result["sys.cpu.000.user"])
71+ self.assertEqual(cpu_times.system, result["sys.cpu.000.system"])
72+ self.assertEqual(cpu_times.idle, result["sys.cpu.000.idle"])
73+ self.assertEqual(cpu_times.nice, result["sys.cpu.000.nice"])
74+ self.assertEqual(cpu_times.user, result["sys.cpu.001.user"])
75+ self.assertEqual(cpu_times.system, result["sys.cpu.001.system"])
76+ self.assertEqual(cpu_times.idle, result["sys.cpu.001.idle"])
77+ self.assertEqual(cpu_times.nice, result["sys.cpu.001.nice"])
78+ elif sys.platform.lower().startswith("freebsd"):
79+ self.assertEqual(cpu_times.user, result["sys.cpu.000.user"])
80+ self.assertEqual(cpu_times.system, result["sys.cpu.000.system"])
81+ self.assertEqual(cpu_times.idle, result["sys.cpu.000.idle"])
82+ self.assertEqual(cpu_times.irq, result["sys.cpu.000.irq"])
83+ self.assertEqual(cpu_times.user, result["sys.cpu.001.user"])
84+ self.assertEqual(cpu_times.system, result["sys.cpu.001.system"])
85+ self.assertEqual(cpu_times.idle, result["sys.cpu.001.idle"])
86+ self.assertEqual(cpu_times.irq, result["sys.cpu.001.irq"])
87+
88 def test_self_cpu_and_memory_stats(self):
89 """
90 Process cpu and memory stats are collected through psutil.

Subscribers

People subscribed via source and target branches