def _inner_event_callback(self, event): process_id = event.origin state = event.state state_str = ProcessStateEnum._str_map.get(state, str(state)) if not (process_id and process_id in self.processes): # we receive events for all processes but ignore most return process = None for _ in range(3): try: process = self.client.read_process(process_id) break except Timeout: log.warn( "Timeout trying to read process from Process Dispatcher!", exc_info=True) pass # retry except NotFound: break if process: log.info("%sreceived process %s state=%s", self.logprefix, process_id, state_str) # replace the cached data about this process self.processes[process_id] = _process_dict_from_object(process) else: log.warn( "%sReceived process %s event but failed to read from Process Dispatcher", self.logprefix, process_id) #XXX better approach here? we at least have the state from the event, # so sticking that on cached process. We could miss other important # data like hostname however. self.processes[process_id]['state'] = process_state_to_pd_core( state) if self.callback: try: self.callback() except (KeyboardInterrupt, SystemExit): raise except: e = sys.exc_info()[0] log.warn("%sError in HAAgent callback: %s", self.logprefix, e, exc_info=True)
def _inner_event_callback(self, event): process_id = event.origin state = event.state state_str = ProcessStateEnum._str_map.get(state, str(state)) if not (process_id and process_id in self.processes): # we receive events for all processes but ignore most return process = None for _ in range(3): try: process = self.client.read_process(process_id) break except Timeout: log.warn("Timeout trying to read process from Process Dispatcher!", exc_info=True) pass # retry except NotFound: break if process: log.info("%sreceived process %s state=%s", self.logprefix, process_id, state_str) # replace the cached data about this process self.processes[process_id] = _process_dict_from_object(process) else: log.warn("%sReceived process %s event but failed to read from Process Dispatcher", self.logprefix, process_id) #XXX better approach here? we at least have the state from the event, # so sticking that on cached process. We could miss other important # data like hostname however. self.processes[process_id]['state'] = process_state_to_pd_core(state) if self.callback: try: self.callback() except (KeyboardInterrupt, SystemExit): raise except: e = sys.exc_info()[0] log.warn("%sError in HAAgent callback: %s", self.logprefix, e, exc_info=True)
def _process_dict_from_object(process): state = process_state_to_pd_core(process.process_state) dict_proc = {'upid': process.process_id, 'state': state} return dict_proc