def sighandler_term(signum=None, frame=None): if _flags.sigterm_sent: return _flags.sigterm_sent = True background_job(suicide, daemon=True)() logging.info('got TERM signal, exiting') if config.db_update == 2: try: do_save() except: eva.core.log_traceback() core_shutdown() unlink_pid_file() logging.info('EVA core shut down')
def setValues(self, addr, values): super().setValues(addr, values) if not self.event_handlers_lock.acquire( timeout=eva.core.config.timeout): logging.critical('WatchBlock::setValues locking broken') eva.core.critical() return False try: if addr not in self.event_handlers: return for f in self.event_handlers[addr]: background_job(f)(addr, values) finally: self.event_handlers_lock.release()
def shutdown_core(self, **kwargs): """ shutdown the controller Controller process will be exited and then (should be) restarted by watchdog. This allows to restart controller remotely. Args: k: .master """ parse_api_params(kwargs) os.system('touch {}/{}_reload'.format(eva.core.dir_var, eva.core.product.code)) background_job(eva.core.sighandler_term)() return True, api_result_accepted
def start(): eva.lm.extapi.start() Q.start() for i, r in dm_rules.items(): DM.append_rule(r, do_sort=False) DM.sort() plc.start_processors() uc_pool.start() for i, v in remote_ucs.items(): background_job(connect_remote_controller, daemon=True)(v) for i, v in lvars_by_full_id.items(): v.start_processors() for i, v in cycles_by_id.copy().items(): v.start(autostart=True) for i, r in jobs.items(): try: r.schedule() except: eva.core.log_traceback() eva.lm.jobs.scheduler.start()
def handle_event(item): oid = item.oid if oid in custom_event_handlers: for f in custom_event_handlers.get(oid): background_job(exec_event_handler)(f, item) return True