def main_loop(poller=None, conf=None, foreground=False): global shutting_down shutting_down = gevent.event.Event() gevent.monkey.patch_all(thread=False) # define custom signal handlers signal.signal(signal.SIGINT, shutdown_handler) signal.signal(signal.SIGTERM, shutdown_handler) # set up logging log_level_string = conf.get("PROVISION_LOG_LEVEL") or conf["LOG_LEVEL"] log_level = getattr(logging, log_level_string.upper(), logging.DEBUG) logging.getLogger().setLevel(log_level) if foreground: add_stderr_logger(logging.getLogger(), log_level=log_level) else: log_file = conf["PROVISION_LOG_FILE"] add_rotating_file_logger(logging.getLogger(), log_file, log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"]) logger.debug('Clearing old running commands') poller.clear_running_commands(u'Stale command cleared on startup') logger.debug('Entering main provision loop') while True: try: poller.poll() except: logger.exception('Failed to poll for queued commands') if shutting_down.wait(timeout=conf.get('SLEEP_TIME', 20)): gevent.hub.get_hub().join() # let running greenlets terminate break logger.debug('Exited main provision loop')
def main_loop(transfer, conf=None, foreground=False): """infinite daemon loop""" # define custom signal handlers signal.signal(signal.SIGTERM, daemon_shutdown) # set up logging log_level_string = conf.get("TRANSFER_LOG_LEVEL") or conf["LOG_LEVEL"] log_level = getattr(logging, log_level_string.upper(), logging.DEBUG) logging.getLogger().setLevel(log_level) if foreground: add_stderr_logger(logging.getLogger(), log_level=log_level) else: log_file = conf["TRANSFER_LOG_FILE"] add_rotating_file_logger(logging.getLogger(), log_file, log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"]) while True: try: transfer.hub._login() # Look for logs to transfer if none transfered then sleep if not transfer.transfer_logs(): logger.debug(80 * '-') transfer.sleep() # write to stdout / stderr sys.stdout.flush() sys.stderr.flush() except socket.sslerror: pass # will try again.. except (ShutdownException, KeyboardInterrupt): # ignore keyboard interrupts and sigterm signal.signal(signal.SIGINT, signal.SIG_IGN) signal.signal(signal.SIGTERM, signal.SIG_IGN) logger.info('Exiting...') break except: # this is a little extreme: log the exception and continue traceback = Traceback() logger.error(traceback.get_traceback()) transfer.sleep()
def main_loop(conf=None, foreground=False): """infinite daemon loop""" # define custom signal handlers signal.signal(signal.SIGTERM, daemon_shutdown) # set up logging log_level_string = conf.get("WATCHDOG_LOG_LEVEL") or conf["LOG_LEVEL"] log_level = getattr(logging, log_level_string.upper(), logging.DEBUG) logging.getLogger().setLevel(log_level) if foreground: add_stderr_logger(logging.getLogger(), log_level=log_level) else: log_file = conf["WATCHDOG_LOG_FILE"] add_rotating_file_logger(logging.getLogger(), log_file, log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"]) try: watchdog = Watchdog(conf=conf) except Exception, ex: sys.stderr.write("Error initializing Watchdog: %s\n" % ex) sys.exit(1)
def main_loop(proxy=None, conf=None, foreground=False): """infinite daemon loop""" global shutting_down shutting_down = gevent.event.Event() gevent.monkey.patch_all() # define custom signal handlers signal.signal(signal.SIGINT, daemon_shutdown) signal.signal(signal.SIGTERM, daemon_shutdown) # set up logging log_level_string = conf["LOG_LEVEL"] log_level = getattr(logging, log_level_string.upper(), logging.DEBUG) logging.getLogger().setLevel(log_level) if foreground: add_stderr_logger(logging.getLogger(), log_level=log_level) else: log_file = conf["LOG_FILE"] add_rotating_file_logger(logging.getLogger(), log_file, log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"]) login = RepeatTimer(conf['RENEW_SESSION_INTERVAL'], proxy.hub._login, stop_on_exception=False) login.daemon = True login.start() server = gevent.wsgi.WSGIServer(('', 8000), WSGIApplication(proxy), handler_class=WSGIHandler, spawn=gevent.pool.Pool()) server.stop_timeout = None server.start() try: shutting_down.wait() finally: server.stop() login.stop()