[sysmon] Move loop class to its own module
BUG=chromium:655796
TEST=Run sysmon
Change-Id: I2f2cd98abd0f5697a062eb81792df2febd9b2010
Reviewed-on: https://chromium-review.googlesource.com/421098
Commit-Ready: Allen Li <ayatane@chromium.org>
Tested-by: Allen Li <ayatane@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
diff --git a/scripts/sysmon/__main__.py b/scripts/sysmon/__main__.py
index 1673e2a..a1095a9 100644
--- a/scripts/sysmon/__main__.py
+++ b/scripts/sysmon/__main__.py
@@ -17,6 +17,7 @@
from chromite.lib import ts_mon_config
from chromite.scripts.sysmon import puppet_metrics
from chromite.scripts.sysmon import system_metrics
+from chromite.scripts.sysmon import loop
from infra_libs.ts_mon.common import interface
DEFAULT_LOG_LEVEL = 'DEBUG'
@@ -25,45 +26,6 @@
logger = logging.getLogger(__name__)
-class _MainLoop(object):
- """Main loop for sysmon."""
-
- def __init__(self, loop_func, interval=60):
- """Initialize instance.
-
- Args:
- loop_func: Function to call on each loop.
- interval: Time between loops in seconds.
- """
- self._loop_func = loop_func
- self._interval = interval
- self._cycles = 0
-
- def loop_once(self):
- """Do actions for a single loop."""
- try:
- self._loop_func(self._cycles)
- except Exception:
- logger.exception('Error during loop.')
-
- def loop_forever(self):
- while True:
- self.loop_once()
- _force_sleep(self._interval)
- self._cycles = (self._cycles + 1) % 60
-
-
-def _force_sleep(secs):
- """Force sleep for at least the given number of seconds."""
- now = time.time()
- finished_time = now + secs
- while now < finished_time:
- remaining = finished_time - now
- logger.debug('Sleeping for %d, %d remaining', secs, remaining)
- time.sleep(remaining)
- now = time.time()
-
-
def collect_metrics(cycles):
system_metrics.get_uptime()
system_metrics.get_cpu_info()
@@ -105,9 +67,8 @@
interface.state.metric_name_prefix = (interface.state.metric_name_prefix
+ 'chromeos/sysmon/')
- mainloop = _MainLoop(loop_func=collect_metrics,
- interval=opts.interval)
- mainloop.loop_forever()
+ loop.SleepLoop(callback=collect_metrics,
+ interval=opts.interval).loop_forever()
if __name__ == '__main__':