Merge remote-tracking branch 'zyx-i/threaded-cpu_load_percent' into develop

This commit is contained in:
Kim Silkebækken 2013-04-08 11:39:23 +02:00
commit 0c7cc25a02
2 changed files with 58 additions and 17 deletions

View File

@ -560,16 +560,27 @@ try:
def _get_user(segment_info):
return psutil.Process(os.getpid()).username
def cpu_load_percent(pl, measure_interval=.5):
'''Return the average CPU load as a percentage.
class CPULoadPercentSegment(ThreadedSegment):
interval = 1
Requires the ``psutil`` module.
def update(self, old_cpu):
return psutil.cpu_percent(interval=None)
:param float measure_interval:
interval used to measure CPU load (in seconds)
'''
cpu_percent = int(psutil.cpu_percent(interval=measure_interval))
return '{0}%'.format(cpu_percent)
def run(self):
while not self.shutdown_event.is_set():
try:
self.update_value = psutil.cpu_percent(interval=self.interval)
except Exception as e:
self.exception('Exception while calculating cpu_percent: {0}', str(e))
def render(self, cpu_percent, format='{0:.0f}%', **kwargs):
if not cpu_percent:
return None
return [{
'contents': format.format(cpu_percent),
'gradient_level': cpu_percent,
'highlight_group': ['cpu_load_percent_gradient', 'cpu_load_percent'],
}]
except ImportError:
def _get_bytes(interface): # NOQA
with open('/sys/class/net/{interface}/statistics/rx_bytes'.format(interface=interface), 'rb') as file_obj:
@ -587,18 +598,39 @@ except ImportError:
def _get_user(segment_info): # NOQA
return segment_info['environ'].get('USER', None)
def cpu_load_percent(pl, measure_interval=.5): # NOQA
'''Return the average CPU load as a percentage.
class CPULoadPercentSegment(ThreadedSegment): # NOQA
interval = 1
Requires the ``psutil`` module.
@staticmethod
def startup(**kwargs):
pass
:param float measure_interval:
interval used to measure CPU load (in seconds)
'''
@staticmethod
def start():
pass
@staticmethod
def shutdown():
pass
@staticmethod
def render(cpu_percent, pl, format='{0:.0f}%', **kwargs):
pl.warn('psutil package is not installed, thus CPU load is not available')
return None
cpu_load_percent = with_docstring(CPULoadPercentSegment(),
'''Return the average CPU load as a percentage.
Requires the ``psutil`` module.
:param str format:
Output format. Accepts measured CPU load as the first argument.
Highlight groups used: ``cpu_load_percent_gradient`` (gradient) or ``cpu_load_percent``.
''')
username = False
# os.geteuid is not available on windows
_geteuid = getattr(os, 'geteuid', lambda: 1)

View File

@ -244,7 +244,16 @@ class TestCommon(TestCase):
def test_cpu_load_percent(self):
pl = Pl()
with replace_module_module(common, 'psutil', cpu_percent=lambda **kwargs: 52.3):
self.assertEqual(common.cpu_load_percent(pl=pl), '52%')
self.assertEqual(common.cpu_load_percent(pl=pl), [{
'contents': '52%',
'gradient_level': 52.3,
'highlight_group': ['cpu_load_percent_gradient', 'cpu_load_percent'],
}])
self.assertEqual(common.cpu_load_percent(pl=pl, format='{0:.1f}%'), [{
'contents': '52.3%',
'gradient_level': 52.3,
'highlight_group': ['cpu_load_percent_gradient', 'cpu_load_percent'],
}])
def test_network_load(self):
from time import sleep