Mercurial > bitten > bitten-test
changeset 95:1984b2e01998
Make the repository poll interval configurable. It now defaults to 2 minutes instead of 10 seconds.
author | cmlenz |
---|---|
date | Fri, 15 Jul 2005 16:07:11 +0000 |
parents | e5d1a792aa45 |
children | c8c36f34ff5a |
files | bitten/master.py bitten/util/beep.py |
diffstat | 2 files changed, 27 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/bitten/master.py +++ b/bitten/master.py @@ -18,6 +18,7 @@ # # Author: Christopher Lenz <cmlenz@gmx.de> +from datetime import datetime, timedelta from itertools import ifilter import logging import os.path @@ -34,15 +35,18 @@ log = logging.getLogger('bitten.master') +DEFAULT_CHECK_INTERVAL = 120 # 2 minutes + + class Master(beep.Listener): - TRIGGER_INTERVAL = 10 - - def __init__(self, env_path, ip, port): + def __init__(self, env_path, ip, port, + check_interval=DEFAULT_CHECK_INTERVAL): beep.Listener.__init__(self, ip, port) self.profiles[OrchestrationProfileHandler.URI] = OrchestrationProfileHandler self.env = Environment(env_path) + self.check_interval = check_interval self.slaves = {} @@ -53,7 +57,7 @@ for rev, format, path in snapshots: self.snapshots[(config.name, rev, format)] = path - self.schedule(self.TRIGGER_INTERVAL, self._check_build_triggers) + self.schedule(self.check_interval, self._check_build_triggers) def close(self): # Remove all pending builds @@ -62,7 +66,7 @@ beep.Listener.close(self) def _check_build_triggers(self, when): - self.schedule(self.TRIGGER_INTERVAL, self._check_build_triggers) + self.schedule(self.check_interval, self._check_build_triggers) repos = self.env.get_repository() try: @@ -80,7 +84,7 @@ builds = Build.select(self.env, config.name, rev, platform.id) if not list(builds): - log.info('Enqueuing build of configuration "%s"at ' + log.info('Enqueuing build of configuration "%s" at ' 'revision [%s] on %s', config.name, rev, platform.name) build = Build(self.env) @@ -95,8 +99,8 @@ finally: repos.close() - self.schedule(5, self._check_build_queue) - self.schedule(60, self._cleanup_snapshots) + self.schedule(self.check_interval * 0.2, self._check_build_queue) + self.schedule(self.check_interval * 1.8, self._cleanup_snapshots) def _check_build_queue(self, when): if not self.slaves: @@ -161,6 +165,8 @@ 'platforms', handler.name) return False + self.schedule(self.check_interval * 0.2, self._check_build_queue) + log.info('Registered slave "%s"', handler.name) return True @@ -366,6 +372,9 @@ help='the host name or IP address to bind to') parser.add_option('-l', '--log', dest='logfile', metavar='FILENAME', help='write log messages to FILENAME') + parser.add_option('-i', '--interval', dest='interval', metavar='SECONDS', + default=DEFAULT_CHECK_INTERVAL, type='int', + help='poll interval for changeset detection') parser.add_option('--debug', action='store_const', dest='loglevel', const=logging.DEBUG, help='enable debugging output') parser.add_option('-v', '--verbose', action='store_const', dest='loglevel', @@ -412,7 +421,7 @@ log.warning('Reverse host name lookup failed (%s)', e) host = ip - master = Master(env_path, host, port) + master = Master(env_path, host, port, check_interval=options.interval) try: master.run(timeout=5.0) except KeyboardInterrupt:
--- a/bitten/util/beep.py +++ b/bitten/util/beep.py @@ -30,6 +30,7 @@ import asynchat import asyncore import bisect +from datetime import datetime, timedelta import email import logging import socket @@ -101,11 +102,12 @@ def run(self, timeout=15.0, granularity=5): """Start listening to incoming connections.""" + granularity = timedelta(seconds=granularity) socket_map = asyncore.socket_map - last_event_check = 0 + last_event_check = datetime.min while socket_map: - now = int(time.time()) - if (now - last_event_check) >= granularity: + now = datetime.now() + if now - last_event_check >= granularity: last_event_check = now fired = [] i = j = 0 @@ -130,7 +132,10 @@ invoked @param callback: The function to call """ - bisect.insort(self.eventqueue, (int(time.time()) + delta, callback)) + when = datetime.now() + timedelta(seconds=delta) + log.debug('Scheduling event %s to run at %s', callback.__name__, when) + + bisect.insort(self.eventqueue, (when, callback)) def quit(self): if not self.sessions: