From: JINMEI Tatuya Date: Thu, 25 Oct 2012 00:06:46 +0000 (-0700) Subject: [2297] added a pretty-form of uptime in addition to the bare seconds X-Git-Tag: trac2487_base~32^2~2^2~9^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01c85b2bf83b55be659ebe1526eaa1c5aa55b6aa;p=thirdparty%2Fkea.git [2297] added a pretty-form of uptime in addition to the bare seconds --- diff --git a/src/bin/sysinfo/sysinfo.py.in b/src/bin/sysinfo/sysinfo.py.in index 90204cd7a6..477b9de466 100755 --- a/src/bin/sysinfo/sysinfo.py.in +++ b/src/bin/sysinfo/sysinfo.py.in @@ -85,7 +85,8 @@ def main(): write_value(f, ' + Machine name: %s\n', s.get_platform_machine) write_value(f, ' + Hostname: %s\n', s.get_platform_hostname) - write_value(f, ' + Uptime: %d seconds\n', s.get_uptime) + write_value(f, ' + Uptime: %d seconds', s.get_uptime) + write_value(f, ' (%s)\n', s.get_uptime_desc) write_value(f, ' + Loadavg: %f %f %f\n', s.get_loadavg) diff --git a/src/lib/python/isc/sysinfo/sysinfo.py b/src/lib/python/isc/sysinfo/sysinfo.py index 2f4b84e210..fd457ea455 100644 --- a/src/lib/python/isc/sysinfo/sysinfo.py +++ b/src/lib/python/isc/sysinfo/sysinfo.py @@ -22,6 +22,7 @@ import subprocess import os.path import platform import time +from datetime import timedelta class SysInfo: def __init__(self): @@ -93,6 +94,26 @@ class SysInfo: """Returns the uptime in seconds.""" return self._uptime + def get_uptime_desc(self): + """Returns the uptime in human readable form. + + Specifically, the format is '[DD day[s],] hh:mm'. + It returns None if _uptime is None. + + """ + if self._uptime is None: + return None + + uptime_desc = '' + time_delta = timedelta(seconds=self._uptime) + days = time_delta.days + if days > 0: + uptime_desc += ('%d day%s, ' % (days, 's' if days > 1 else '')) + hours = int(time_delta.seconds / 3600) + minutes = int((time_delta.seconds - hours * 3600) / 60) + uptime_desc += ('%d:%02d' % (hours, minutes)) + return uptime_desc + def get_loadavg(self): """Returns the load average as 3 floating point values in an array.""" return self._loadavg diff --git a/src/lib/python/isc/sysinfo/tests/sysinfo_test.py b/src/lib/python/isc/sysinfo/tests/sysinfo_test.py index c71422ac51..f7760534f6 100644 --- a/src/lib/python/isc/sysinfo/tests/sysinfo_test.py +++ b/src/lib/python/isc/sysinfo/tests/sysinfo_test.py @@ -49,7 +49,7 @@ class MyLinuxFile: elif self._filename == '/proc/version': return 'An SMP version string' elif self._filename == '/proc/uptime': - return '86400.75 139993.71' + return '172800.75 139993.71' elif self._filename == '/proc/loadavg': return '0.1 0.2 0.3 0.4' else: @@ -255,6 +255,7 @@ class SysInfoTest(unittest.TestCase): self.assertEqual('Unknown', s.get_platform_machine()) self.assertFalse(s.get_platform_is_smp()) self.assertEqual(None, s.get_uptime()) + self.assertEqual(None, s.get_uptime_desc()) self.assertEqual(None, s.get_loadavg()) self.assertEqual(None, s.get_mem_total()) self.assertEqual(None, s.get_mem_free()) @@ -270,7 +271,11 @@ class SysInfoTest(unittest.TestCase): def test_sysinfo_factory(self): """Test that SysInfoFromFactory returns a valid system-specific - SysInfo implementation.""" + SysInfo implementation. + + See sysinfo.SysInfoTestcase() for some ofthe parameters. + + """ old_platform_system = platform.system platform.system = _my_testcase_platform_system @@ -284,6 +289,8 @@ class SysInfoTest(unittest.TestCase): self.assertEqual('Unknown', s.get_platform_machine()) self.assertFalse(s.get_platform_is_smp()) self.assertEqual(131072, s.get_uptime()) + # We check we do NOT add 's' to 'day' (because it's singular): + self.assertEqual('1 day, 12:24', s.get_uptime_desc()) self.assertEqual(None, s.get_loadavg()) self.assertEqual(None, s.get_mem_total()) self.assertEqual(None, s.get_mem_free()) @@ -315,7 +322,10 @@ class SysInfoTest(unittest.TestCase): self.assertEqual(NPROCESSORS_LINUX, s.get_num_processors()) self.assertEqual('myhostname', s.get_platform_hostname()) self.assertTrue(s.get_platform_is_smp()) - self.assertEqual(86401, s.get_uptime()) + self.assertEqual(172801, s.get_uptime()) + # We check we add 's' to 'day', and the mm part has an additional + # 0, i.e., not '0:0' but '0:00': + self.assertEqual('2 days, 0:00', s.get_uptime_desc()) self.assertEqual((0.1, 0.2, 0.3), s.get_loadavg()) self.assertEqual(3157884928, s.get_mem_total()) self.assertEqual(891383808, s.get_mem_free())