import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CrazyMonitor.settings") from monitor.backends.management import execute_from_command_line execute_from_command_line(sys.argv)
def trigger_watch(self): '''start to listen triggers''' trigger_watch = trigger_handler.TriggerHandler(settings) trigger_watch.start_watching()
一、支持三個參數,啓動、中止監控觸發器python
二、經過反射的形式,
三、監聽全部的觸發器
四、同一個頻道,聲明一下就開始接收了redis
class TriggerHandler(object): def __init__(self,django_settings): self.django_settings = django_settings self.redis = redis_conn.redis_conn(self.django_settings) self.alert_counters ={} #紀錄每一個action的觸發報警次數 '''alert_counters = { 1: {2:{'counter':0,'last_alert':None}, #k 1是主機id, {2:{'counter'}} 2是trigger id 4:{'counter':1,'last_alert':None}}, #k是action id, #2: {2:0}, }'''
一、打開收音機
二、調頻
三、準備接聽
四、阻塞有數據的話,就往下走django
def start_watching(self): ''' start listening and watching the needed to be handled triggers from other process :return: ''' radio = self.redis.pubsub() #打開收音機 radio.subscribe(self.django_settings.TRIGGER_CHAN) #調頻 radio.parse_response() #ready to watch 準備接聽 print("\033[43;1m************start listening new triggers**********\033[0m") self.trigger_count = 0 while True: msg = radio.parse_response() #阻塞有數據的話,就往下走 self.trigger_consume(msg)
settings配置以下內容blog
TRIGGER_CHAN = 'trigger_event_channel'