commit
82959e117c
51
i3pystatus/cpu_freq.py
Normal file
51
i3pystatus/cpu_freq.py
Normal file
@ -0,0 +1,51 @@
|
||||
# coding=utf-8
|
||||
from i3pystatus import IntervalModule
|
||||
|
||||
|
||||
class CpuFreq(IntervalModule):
|
||||
"""
|
||||
class uses by default `/proc/cpuinfo` to determine the current cpu frequency
|
||||
|
||||
.. rubric:: Available formatters
|
||||
|
||||
* `{avg}` - mean from all cores in MHz `4.3f`
|
||||
* `{avgg}` - mean from all cores in GHz `1.2f`
|
||||
* `{coreX}` - frequency of core number `X` in MHz (format `4.3f`), where 0 <= `X` <= number of cores - 1
|
||||
* `{coreXg}` - frequency of core number `X` in GHz (fromat `1.2f`), where 0 <= `X` <= number of cores - 1
|
||||
|
||||
"""
|
||||
format = "{avgg}"
|
||||
settings = (
|
||||
"format",
|
||||
("color", "The text color"),
|
||||
("file", "override default path"),
|
||||
)
|
||||
|
||||
file = '/proc/cpuinfo'
|
||||
color = '#FFFFFF'
|
||||
|
||||
def createvaluesdict(self):
|
||||
"""
|
||||
function processes the /proc/cpuinfo file
|
||||
:return: dictionary used as the full-text output for the module
|
||||
"""
|
||||
with open(self.file) as f:
|
||||
mhz_values = [float(line.split(':')[1]) for line in f if line.startswith('cpu MHz')]
|
||||
ghz_values = [value / 1000.0 for value in mhz_values]
|
||||
|
||||
mhz = {"core{}".format(key): "{0:4.3f}".format(value) for key, value in enumerate(mhz_values)}
|
||||
ghz = {"core{}g".format(key): "{0:1.2f}".format(value) for key, value in enumerate(ghz_values)}
|
||||
cdict = mhz.copy()
|
||||
cdict.update(ghz)
|
||||
cdict['avg'] = "{0:4.3f}".format(sum(mhz_values) / len(mhz_values))
|
||||
cdict['avgg'] = "{0:1.2f}".format(sum(ghz_values) / len(ghz_values), 2)
|
||||
return cdict
|
||||
|
||||
def run(self):
|
||||
cdict = self.createvaluesdict()
|
||||
|
||||
self.output = {
|
||||
"full_text": self.format.format(**cdict),
|
||||
"color": self.color,
|
||||
"format": self.format,
|
||||
}
|
4
tests/cpufreq01
Normal file
4
tests/cpufreq01
Normal file
@ -0,0 +1,4 @@
|
||||
cpu MHz : 1240.382
|
||||
cpu MHz : 1236.828
|
||||
cpu MHz : 1203.007
|
||||
cpu MHz : 1264.859
|
36
tests/test_cpu_freq.py
Normal file
36
tests/test_cpu_freq.py
Normal file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python3
|
||||
# coding=utf-8
|
||||
"""
|
||||
Basic tests for the cpu_freq module
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from i3pystatus import cpu_freq
|
||||
|
||||
|
||||
def cpu_freq_test(tfpath, tformat, expected):
|
||||
cf = cpu_freq.CpuFreq(file=os.path.join(os.path.dirname(__file__), tfpath), format=tformat)
|
||||
cf.run()
|
||||
assert cf.output["full_text"] == expected
|
||||
|
||||
|
||||
def test_basic():
|
||||
"""
|
||||
Tests against the pre-prepared file
|
||||
"""
|
||||
cases = [
|
||||
('cpufreq01', '1240.382', '1236.828', '1203.007', '1264.859', '1236.269', '1.24', '1.24', '1.20', '1.26',
|
||||
'1.24'),
|
||||
]
|
||||
for path, core0, core1, core2, core3, avg, core0g, core1g, core2g, core3g, avgg in cases:
|
||||
cpu_freq_test(path, "{avg}", avg)
|
||||
cpu_freq_test(path, "{core0}", core0)
|
||||
cpu_freq_test(path, "{core1}", core1)
|
||||
cpu_freq_test(path, "{core2}", core2)
|
||||
cpu_freq_test(path, "{core3}", core3)
|
||||
cpu_freq_test(path, "{core0g}", core0g)
|
||||
cpu_freq_test(path, "{core1g}", core1g)
|
||||
cpu_freq_test(path, "{core2g}", core2g)
|
||||
cpu_freq_test(path, "{core3g}", core3g)
|
||||
cpu_freq_test(path, "{avgg}", avgg)
|
Loading…
Reference in New Issue
Block a user