class TimerWheel(): def __init__(self): self.scheduler = Scheduler() def add_task(self, name, task, tick=20): logger.debug("add task", task, 'name', name, 'tick', tick) self.scheduler.schedule(name, every_second(tick), task) def start(self): logger.debug('run task for ever') self.add_task('default task', TimerWheel._pattern_rule) self.scheduler.run_forever() @staticmethod def _pattern_rule(): rules = _query_rules() if rules is None or len(rules) <= 0: logger.info('rules is empty') return for s_rule in rules: if not isinstance(s_rule, dict): logger.info('The rule is invalid', s_rule) continue need_alarm = True for obj, condition in s_rule.items(): # if not list ,skip and continue if not isinstance(condition, list): continue expression = _get_expression(condition) if len(expression) <= 0: continue if not validate(obj, expression): need_alarm = False break if need_alarm: _send_alarm(s_rule) _send_email(s_rule) def stop(self): self.scheduler.stop()
def __init__(self): self.scheduler = Scheduler()