示例#1
0
文件: main.py 项目: Tim-luo/Notes
class MonitorServer(object): #创建主的类,调用连接Redis&调用serialize序列化,把监控模板上传至Redis
    def __init__(self):
        self.r = RedisHelper()
        self.save_configs()
        self.sub = self.r.subscribe()

    def start(self):
        self.monitor_data_processing()
        while True:
            client_data = json.loads(self.sub.parse_response()[2])
            client_data['last_update'] = time.time()
            #print client_data
            business_type = client_data.keys()[0]
            action_process.action_process(self,business_type,client_data)
            '''
            self.r.set('ServiceData::%s:%s' % (client_data['report_monitor_data']['ip_address'],
                                               client_data['report_monitor_data']['service_name']),
                                               client_data)
                                               '''
            #数据存入到Redis中并且存储的相同数据只保留一条,数据不断刷新
    def monitor_data_processing(self): #启用多进程处理任务
        p = multiprocessing.Process(target=self.monitor_data_handling,)
        p.daemon = True #设置为dameon模式,主进程挂掉之后,关闭进程
        p.start()

    def monitor_data_handling(self):#所有的数据逻辑处理方法
        print '''---starting a new process to deal with monitor data ---'''
        while True:
            client_data = self.r.keys("ServiceData::*")
            for i in client_data:
                host_ip,host_server = i.split('::')[1].split(':')
                action_process.action_work(self,i,host_server)
                self.r.del_key(i)
                print i,'is work done'

    def save_configs(self):
        serialize.push_config_toredis(self,hosts.monitored_groups)#这里把self传过去,在push_config_toredis中即可调用实例