class MonitorScheduler: #logger = LoggerUtil.getLogger('MonitorScheduler') def __init__(self,events): self.scheduler = Scheduler(daemonic = False) self.scheduler.add_cron_job(self.monitorListener, second='*/3') self.events = events self.flag = True self.runflag = True if self.events !=None: self.flag = True self.monitor_tasks = {} def monitorListener(self): if self.flag == True: print "first monitorListener:" self.flag = False ConfigUtil().setEvents(self.events) self.monitor_tasks_start(self.events) else: events = CDSUtil.getEvents(CDSUtil) eventInfos = self.event_filter(events) if eventInfos == None or len(eventInfos) == 0: return ConfigUtil().setEvents(events) self.monitor_tasks_start(eventInfos) def start(self): print('MonitorScheduler start ...') self.scheduler.start() def stop(self): self.scheduler._stopped() # Filtering duplicate events def event_filter(self,events): eventInfos = [] if events == None or len(events) == 0: return None for event in events: if ConfigUtil().is_config_has_event(event) == False: eventInfos.append(event) return eventInfos def monitor_task_start(self,monitorTask): monitorTask.start() def monitor_tasks_start(self,events): if events == None and len(events) == 0: return for event in events: monitorTask = self.monitor_tasks.get(str(event.monitorId)+'_'+str(event.dbConfig.db_info_id)) print event.monitorId if event.eventType == None: break if event.eventType == 'MONITOR_START': if monitorTask: monitorTask.stop() print 'save start ...' monitorTask = MonitorTaskProcess(event) self.monitor_tasks[str(event.monitorId)+'_'+str(event.dbConfig.db_info_id)] = monitorTask print(self.monitor_tasks) try: monitorTask.start() print 'save end ...' except Exception as e: print(e) else: if monitorTask: monitorTask.stop() monitorTask.terminate() self.monitor_tasks[str(event.monitorId)+'_'+str(event.dbConfig.db_info_id)] = None def err_listener(self,cls,event): if event.exception: cls.logger.exception('%s error.', str(event.job)) else: cls.logger.info('%s miss', str(event.job)) def err_listener(self): self.scheduler.add_listener(self.err_listener, self.apscheduler.events.EVENT_JOB_ERROR | self.apscheduler.events.EVENT_JOB_MISSED)