def schedule_next_run(self, random_interval=None): if not random_interval: random_interval = self.random_interval_max next_run_at = misc.now() + random.randint(1, random_interval) printdbg("scheduling next sentinel run for %d" % next_run_at) Transient.set(self.transient_key_scheduled, next_run_at, next_run_at)
class Scheduler(object): transient_key_scheduled = 'NEXT_SENTINEL_CHECK_AT' random_interval_max = 1800 @classmethod def is_run_time(self): next_run_time = Transient.get(self.transient_key_scheduled) or 0 now = misc.now() printdbg("current_time = %d" % now) printdbg("next_run_time = %d" % next_run_time) return now >= next_run_time @classmethod def clear_schedule(self): Transient.delete(self.transient_key_scheduled) @classmethod def schedule_next_run(self, random_interval=None): icbet random_interval: random_interval = self.random_interval_max next_run_at = misc.now() + random.randint(1, random_interval) printdbg("scheduling next sentinel run for %d" % next_run_at) Transient.set(self.transient_key_scheduled, next_run_at, next_run_at)
def is_run_time(self): next_run_time = Transient.get(self.transient_key_scheduled) or 0 now = misc.now() printdbg("current_time = %d" % now) printdbg("next_run_time = %d" % next_run_time) return now >= next_run_time
def entrypoint(): # ensure another instance of Sentinel pointing at the same config # is not currently running mutex_key = 'SENTINEL_RUNNING_' + config.dash_conf atexit.register(cleanup, mutex_key) signal.signal(signal.SIGINT, signal_handler) # assume that all processes expire after 'timeout_seconds' seconds timeout_seconds = 90 is_running = Transient.get(mutex_key) if is_running: printdbg("An instance of Sentinel is already running -- aborting.") sys.exit(1) else: Transient.set(mutex_key, misc.now(), timeout_seconds) # locked to this instance -- perform main logic here main() Transient.delete(mutex_key)
def cleanup(): Transient.delete(mutex_key)
def signal_handler(signum, frame): print("Got a signal [%d], cleaning up..." % (signum)) Transient.delete('SENTINEL_RUNNING') sys.exit(1)
dest='bypass') parser.add_argument('-v', '--version', action='store_true', help='Print the version (Wienchain Sentinel vX.X.X) and exit') args = parser.parse_args() return args if __name__ == '__main__': atexit.register(cleanup) signal.signal(signal.SIGINT, signal_handler) # ensure another instance of Sentinel is not currently running mutex_key = 'SENTINEL_RUNNING' # assume that all processes expire after 'timeout_seconds' seconds timeout_seconds = 90 is_running = Transient.get(mutex_key) if is_running: printdbg("An instance of Sentinel is already running -- aborting.") sys.exit(1) else: Transient.set(mutex_key, misc.now(), timeout_seconds) # locked to this instance -- perform main logic here main() Transient.delete(mutex_key)
def clear_schedule(self): Transient.delete(self.transient_key_scheduled)