def main(): parser = argparse.ArgumentParser(description='Run the Web Console') parser.add_argument('--fd', help='FD', default=None) parser.add_argument('--host', help='Host', default='0.0.0.0') parser.add_argument('--port', help='port', default=8080) parser.add_argument('--server', help='web server to use', default=SocketIOServer) parser.add_argument('--endpoint', default=None, help='Circus Endpoint. If not specified, Circus will ask you which ' 'system you want to connect to') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--log-level', dest='loglevel', default='info', choices=LOG_LEVELS.keys() + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--ssh', default=None, help='SSH Server') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) if args.endpoint is not None: connect_to_circus(args.endpoint, args.ssh) run(app, host=args.host, port=args.port, server=args.server, fd=args.fd)
def main(): parser = argparse.ArgumentParser(description='Run the Web Console') parser.add_argument('--fd', help='FD', default=None) parser.add_argument('--host', help='Host', default='0.0.0.0') parser.add_argument('--port', help='port', default=8080) parser.add_argument('--server', help='web server to use', default=SocketIOServer) parser.add_argument('--endpoint', default=None, help='Circus Endpoint. If not specified, Circus will ' 'ask you which system you want to connect to') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--log-level', dest='loglevel', default='info', choices=LOG_LEVELS.keys() + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--ssh', default=None, help='SSH Server') parser.add_argument('--multicast', dest="multicast", default="udp://237.219.251.97:12027", help="Multicast endpoint. If not specified, Circus " "will use default one") args = parser.parse_args() if args.version: print(__version__) sys.exit(0) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) if args.endpoint is not None: connect_to_circus(args.endpoint, args.ssh) try: sys.stderr.write(' ') quiet = False except IOError: quiet = True setup_auto_discovery(args.multicast) run(app, host=args.host, port=args.port, server=args.server, fd=args.fd, quiet=quiet)
def main(): define("port", default=8080, type=int) parser = argparse.ArgumentParser(description='Run the Web Console') parser.add_argument('--fd', help='FD', default=None, type=int) parser.add_argument('--host', help='Host', default='0.0.0.0') parser.add_argument('--port', help='port', default=8080) parser.add_argument('--endpoint', default=None, help='Circus Endpoint. If not specified, Circus will ' 'ask you which system you want to connect to') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--log-level', dest='loglevel', default='info', choices=LOG_LEVELS.keys() + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--ssh', default=None, help='SSH Server') parser.add_argument('--multicast', dest="multicast", default="udp://237.219.251.97:12027", help="Multicast endpoint. If not specified, Circus " "will use default one") args = parser.parse_args() if args.version: print(__version__) sys.exit(0) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) # Get the tornado ioloop singleton loop = tornado.ioloop.IOLoop.instance() if args.endpoint is not None: connect_to_circus(loop, args.endpoint, args.ssh) app.auto_discovery = AutoDiscovery(args.multicast, loop) http_server = tornado.httpserver.HTTPServer(app) if args.fd: sock = socket.fromfd(args.fd, socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.setblocking(0) http_server.add_sockets([sock]) logger.info("Starting circus web ui on fd %d" % args.fd) else: http_server.listen(args.port, args.host) logger.info("Starting circus web ui on %s:%s" % (args.host, args.port)) loop.start()
def main(): desc = 'Runs the stats aggregator for Circus' parser = argparse.ArgumentParser(description=desc) parser.add_argument('--endpoint', help='The circusd ZeroMQ socket to connect to', default=util.DEFAULT_ENDPOINT_DEALER) parser.add_argument('--pubsub', help='The circusd ZeroMQ pub/sub socket to connect to', default=util.DEFAULT_ENDPOINT_SUB) parser.add_argument('--statspoint', help='The ZeroMQ pub/sub socket to send data to', default=util.DEFAULT_ENDPOINT_STATS) parser.add_argument('--log-level', dest='loglevel', default='info', help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--ssh', default=None, help='SSH Server') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) stats = StatsStreamer(args.endpoint, args.pubsub, args.statspoint, args.ssh) # Register some sighandlers to stop the loop when killed for sig in SysHandler.SIGNALS: signal.signal( sig, lambda *_: stats.loop.add_callback_from_signal(stats.stop) ) try: stats.start() finally: stats.stop() sys.exit(0)
def main(): import zmq try: zmq_version = [int(part) for part in zmq.__version__.split('.')] if len(zmq_version) < 2: raise ValueError() except (AttributeError, ValueError): print('Unknown PyZQM version - aborting...') sys.exit(0) if zmq_version[0] < 13 or (zmq_version[0] == 13 and zmq_version[1] < 1): print('circusd needs PyZMQ >= 13.1.0 to run - aborting...') sys.exit(0) parser = argparse.ArgumentParser(description='Run some watchers.') parser.add_argument('config', help='configuration file', nargs='?') # XXX we should be able to add all these options in the config file as well parser.add_argument('--log-level', dest='loglevel', choices=list(LOG_LEVELS.keys()) + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument( '--log-output', dest='logoutput', help=( "The location where the logs will be written. The default behavior " "is to write to stdout (you can force it by passing '-' to " "this option). Takes a filename otherwise.")) parser.add_argument( "--logger-config", dest="loggerconfig", help=("The location where a standard Python logger configuration INI, " "JSON or YAML file can be found. This can be used to override " "the default logging configuration for the arbiter.")) parser.add_argument('--daemon', dest='daemonize', action='store_true', help="Start circusd in the background") parser.add_argument('--pidfile', dest='pidfile') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.config is None: parser.print_usage() sys.exit(0) if args.daemonize: daemonize() # From here it can also come from the arbiter configuration # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) # go ahead and set umask early if it is in the config if arbiter.umask is not None: os.umask(arbiter.umask) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' loggerconfig = args.loggerconfig or arbiter.loggerconfig or None configure_logger(logger, loglevel, logoutput, loggerconfig) # Main loop restart = True while restart: try: arbiter = arbiter or Arbiter.load_from_config(args.config) future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise (e) except KeyboardInterrupt: pass finally: arbiter = None if pidfile is not None: pidfile.unlink() sys.exit(0)
arbiter = Arbiter.load_from_config(args.config) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError, e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' configure_logger(logger, loglevel, logoutput) try: arbiter.start() except KeyboardInterrupt: pass finally: arbiter.stop() if pidfile is not None: pidfile.unlink() sys.exit(0) if __name__ == '__main__': main()
import os from circus.util import configure_logger from circus import logger _CONFIGURED = False if not _CONFIGURED and 'TESTING' in os.environ: configure_logger(logger, level='CRITICAL', output=os.devnull) _CONFIGURED = True def setUp(): from circus import _patch # NOQA
def main(): parser = argparse.ArgumentParser(description='Runs a plugin.') parser.add_argument('--endpoint', help='The circusd ZeroMQ socket to connect to', default=DEFAULT_ENDPOINT_DEALER) parser.add_argument('--pubsub', help='The circusd ZeroMQ pub/sub socket to connect to', default=DEFAULT_ENDPOINT_SUB) parser.add_argument('--config', help='The plugin configuration', default=None) parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--check-delay', type=float, default=5., help='Checck delay.') parser.add_argument('plugin', help='Fully qualified name of the plugin class.', nargs='?') parser.add_argument('--log-level', dest='loglevel', default='info', help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--ssh', default=None, help='SSH Server') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.plugin is None: parser.print_usage() sys.exit(0) factory = resolve_name(args.plugin) # configure the logger configure_logger(logger, args.loglevel, args.logoutput, name=factory.name) # load the plugin and run it. logger.info('Loading the plugin...') logger.info('Endpoint: %r' % args.endpoint) logger.info('Pub/sub: %r' % args.pubsub) plugin = factory(args.endpoint, args.pubsub, args.check_delay, args.ssh, **_str2cfg(args.config)) logger.info('Starting') try: plugin.start() except KeyboardInterrupt: pass finally: logger.info('Stopping') plugin.stop() sys.exit(0)
import os from circus.util import configure_logger from circus import logger _CONFIGURED = False if not _CONFIGURED and 'TESTING' in os.environ: configure_logger(logger, level='CRITICAL') _CONFIGURED = True def setUp(): from circus import _patch # NOQA
if args.daemonize: daemonize() pidfile = None if args.pidfile: pidfile = Pidfile(args.pidfile) try: pidfile.create(os.getpid()) except RuntimeError, e: print(str(e)) sys.exit(1) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) # load the arbiter from config arbiter = None try: restart_after_stop = True while restart_after_stop: arbiter = Arbiter.load_from_config(args.config) restart_after_stop = arbiter.start() except KeyboardInterrupt: pass finally: if arbiter: arbiter.stop() if pidfile is not None: pidfile.unlink()
def test_syslog_configuration(self): # this test will fail, if the syslog formatter is configured incorrectly configure_logger(None, output='syslog://localhost:514?test')
import os from circus.util import configure_logger from circus import logger _CONFIGURED = False if not _CONFIGURED and 'TESTING' in os.environ: configure_logger(logger, level='CRITICAL', output="/dev/null") _CONFIGURED = True def setUp(): from circus import _patch # NOQA
def main(): define("port", default=8080, type=int) parser = argparse.ArgumentParser(description='Run the Web Console') parser.add_argument('--fd', help='FD', default=None, type=int) parser.add_argument('--host', help='Host', default='0.0.0.0') parser.add_argument('--port', help='port', default=8080) parser.add_argument('--endpoint', default=None, help='Circus Endpoint. If not specified, Circus will ' 'ask you which system you want to connect to') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') parser.add_argument('--log-level', dest='loglevel', default='info', choices=list(LOG_LEVELS.keys()) + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', default='-', help="log output") parser.add_argument('--ssh', default=None, help='SSH Server') parser.add_argument('--multicast', dest="multicast", default="udp://237.219.251.97:12027", help="Multicast endpoint. If not specified, Circus " "will use default one") args = parser.parse_args() if args.version: print(__version__) sys.exit(0) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) # Get the tornado ioloop singleton loop = tornado.ioloop.IOLoop.instance() if args.endpoint is not None: connect_to_circus(loop, args.endpoint, args.ssh) app.auto_discovery = AutoDiscovery(args.multicast, loop) http_server = tornado.httpserver.HTTPServer(app, xheaders=True) if args.fd: sock = socket.fromfd(args.fd, socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.setblocking(0) http_server.add_sockets([sock]) logger.info("Starting circus web ui on fd %d" % args.fd) else: http_server.listen(args.port, args.host) logger.info("Starting circus web ui on %s:%s" % (args.host, args.port)) loop.start()
def _start_circus(foreground): """ This will actually launch the circus daemon, either daemonized in the background or in the foreground, printing all logs to stdout. .. note:: this should not be called directly from the commandline! """ from circus import get_arbiter from circus import logger as circus_logger from circus.circusd import daemonize from circus.pidfile import Pidfile from circus.util import check_future_exception_and_log, configure_logger client = DaemonClient() loglevel = client.loglevel logoutput = '-' if not foreground: logoutput = client.circus_log_file arbiter_config = { 'controller': client.get_controller_endpoint(), 'pubsub_endpoint': client.get_pubsub_endpoint(), 'stats_endpoint': client.get_stats_endpoint(), 'logoutput': logoutput, 'loglevel': loglevel, 'debug': False, 'statsd': True, 'pidfile': client.circus_pid_file, 'watchers': [{ 'name': client.daemon_name, 'cmd': client.cmd_string, 'virtualenv': client.virtualenv, 'copy_env': True, 'stdout_stream': { 'class': 'FileStream', 'filename': client.daemon_log_file, }, 'env': get_env_with_venv_bin(), }] } # yapf: disable if not foreground: daemonize() arbiter = get_arbiter(**arbiter_config) pidfile = Pidfile(arbiter.pidfile) try: pidfile.create(os.getpid()) except RuntimeError as exception: click.echo(str(exception)) sys.exit(1) # Configure the logger loggerconfig = None loggerconfig = loggerconfig or arbiter.loggerconfig or None configure_logger(circus_logger, loglevel, logoutput, loggerconfig) # Main loop should_restart = True while should_restart: try: arbiter = arbiter future = arbiter.start() should_restart = False if check_future_exception_and_log(future) is None: should_restart = arbiter._restarting # pylint: disable=protected-access except Exception as exception: # Emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) # pylint: disable=protected-access raise exception except KeyboardInterrupt: pass finally: arbiter = None if pidfile is not None: pidfile.unlink() sys.exit(0)
def main(): import zmq try: zmq_version = [int(part) for part in zmq.__version__.split(".")] if len(zmq_version) < 2: raise ValueError() except (AttributeError, ValueError): print("Unknown PyZQM version - aborting...") sys.exit(0) if zmq_version[0] < 13 or (zmq_version[0] == 13 and zmq_version[1] < 1): print("circusd needs PyZMQ >= 13.1.0 to run - aborting...") sys.exit(0) parser = argparse.ArgumentParser(description="Run some watchers.") parser.add_argument("config", help="configuration file", nargs="?") # XXX we should be able to add all these options in the config file as well parser.add_argument( "--log-level", dest="loglevel", choices=list(LOG_LEVELS.keys()) + [key.upper() for key in LOG_LEVELS.keys()], help="log level", ) parser.add_argument( "--log-output", dest="logoutput", help=( "The location where the logs will be written. The default behavior " "is to write to stdout (you can force it by passing '-' to " "this option). Takes a filename otherwise." ), ) parser.add_argument( "--logger-config", dest="loggerconfig", help=( "The location where a standard Python logger configuration INI, " "JSON or YAML file can be found. This can be used to override " "the default logging configuration for the arbiter." ), ) parser.add_argument("--daemon", dest="daemonize", action="store_true", help="Start circusd in the background") parser.add_argument("--pidfile", dest="pidfile") parser.add_argument("--version", action="store_true", default=False, help="Displays Circus version and exits.") args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.config is None: parser.print_usage() sys.exit(0) if args.daemonize: daemonize() # From here it can also come from the arbiter configuration # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) # go ahead and set umask early if it is in the config if arbiter.umask is not None: os.umask(arbiter.umask) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or "info" logoutput = args.logoutput or arbiter.logoutput or "-" loggerconfig = args.loggerconfig or arbiter.loggerconfig or None configure_logger(logger, loglevel, logoutput, loggerconfig) # Main loop restart = True while restart: try: arbiter = arbiter or Arbiter.load_from_config(args.config) future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise (e) except KeyboardInterrupt: pass finally: arbiter = None if pidfile is not None: pidfile.unlink() sys.exit(0)
if args.daemonize: daemonize() pidfile = None if args.pidfile: pidfile = Pidfile(args.pidfile) try: pidfile.create(os.getpid()) except RuntimeError, e: print(str(e)) sys.exit(1) # configure the logger configure_logger(logger, args.loglevel, args.logoutput) # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) try: arbiter.start() except KeyboardInterrupt: pass finally: arbiter.stop() if pidfile is not None: pidfile.unlink() sys.exit(0)
def main(): parser = argparse.ArgumentParser(description='Run some watchers.') parser.add_argument('config', help='configuration file', nargs='?') # XXX we should be able to add all these options in the config file as well parser.add_argument('--log-level', dest='loglevel', choices=list(LOG_LEVELS.keys()) + [ key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', help=( "The location where the logs will be written. The default behavior " "is to write to stdout (you can force it by passing '-' to " "this option). Takes a filename otherwise.")) parser.add_argument('--daemon', dest='daemonize', action='store_true', help="Start circusd in the background") parser.add_argument('--pidfile', dest='pidfile') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.config is None: parser.print_usage() sys.exit(0) if args.daemonize: daemonize() # basic logging configuration logging.basicConfig() # From here it can also come from the arbiter configuration # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' configure_logger(logger, loglevel, logoutput) # configure the main loop #ioloop.install() #loop = ioloop.IOLoop.instance() #cb = functools.partial(manage_restart, loop, arbiter) #periodic = tornado.ioloop.PeriodicCallback(cb, 1000, loop) #periodic.start() # schedule the arbiter start #arbiter = Arbiter.load_from_config(args.config, loop=loop) #loop.add_future(arbiter.start(), _arbiter_start_cb) # Main loop restart = True while restart: try: arbiter = Arbiter.load_from_config(args.config) future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise(e) except KeyboardInterrupt: pass finally: if pidfile is not None: pidfile.unlink() sys.exit(0)
arbiter = Arbiter.load_from_config(args.config) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError, e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' configure_logger(logger, loglevel, logoutput) try: restart_after_stop = True while restart_after_stop: while True: try: arbiter = Arbiter.load_from_config(args.config) restart_after_stop = arbiter.start() except ReloadArbiterException: pass else: break except KeyboardInterrupt: pass finally:
def main(): import zmq try: zmq_version = [int(part) for part in zmq.__version__.split('.')] if len(zmq_version) < 2: raise ValueError() except (AttributeError, ValueError): print('Unknown PyZQM version - aborting...') sys.exit(0) if zmq_version[0] < 13 or (zmq_version[0] == 13 and zmq_version[1] < 1): print('circusd needs PyZMQ >= 13.1.0 to run - aborting...') sys.exit(0) parser = argparse.ArgumentParser(description='Run some watchers.') parser.add_argument('config', help='configuration file', nargs='?') # XXX we should be able to add all these options in the config file as well parser.add_argument('--log-level', dest='loglevel', choices=list(LOG_LEVELS.keys()) + [ key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument('--log-output', dest='logoutput', help=( "The location where the logs will be written. The default behavior " "is to write to stdout (you can force it by passing '-' to " "this option). Takes a filename otherwise.")) parser.add_argument('--daemon', dest='daemonize', action='store_true', help="Start circusd in the background") parser.add_argument('--pidfile', dest='pidfile') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.config is None: parser.print_usage() sys.exit(0) if args.daemonize: daemonize() # This config call is done to avoid any # "no handlers could be found for logger" # # error while loding the configuration and setting up the arbiter. # The real logging configuration is done right after via # a configure_logger() call logging.basicConfig() # From here it can also come from the arbiter configuration # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) # go ahead and set umask early if it is in the config if arbiter.umask is not None: os.umask(arbiter.umask) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' configure_logger(logger, loglevel, logoutput) # Main loop restart = True while restart: try: arbiter = arbiter or Arbiter.load_from_config(args.config) future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise(e) except KeyboardInterrupt: pass finally: arbiter = None if pidfile is not None: pidfile.unlink() sys.exit(0)
def main(profile, loggerconfig, foreground, pidfile): """Run an aiida daemon""" import zmq try: zmq_version = [int(part) for part in zmq.__version__.split('.')[:2]] if len(zmq_version) < 2: raise ValueError() except (AttributeError, ValueError): print('Unknown PyZQM version - aborting...') sys.exit(0) if zmq_version[0] < 13 or (zmq_version[0] == 13 and zmq_version[1] < 1): print('circusd needs PyZMQ >= 13.1.0 to run - aborting...') sys.exit(0) loglevel = 'INFO' logoutput = '-' if not foreground: logoutput = 'balrog-{}.log'.format(profile) daemonize() # Create the arbiter profile_config = ProfileConfig(profile) arbiter = get_arbiter( controller=profile_config.get_endpoint(0), pubsub_endpoint=profile_config.get_endpoint(1), stats_endpoint=profile_config.get_endpoint(2), logoutput=logoutput, loglevel=loglevel, debug=False, statsd=True, pidfile='balrog-{}.pid'.format( profile ), # aiida.common.setup.AIIDA_CONFIG_FOLDER + '/daemon/aiida-{}.pid'.format(uuid) watchers=[{ 'name': profile_config.daemon_name, 'cmd': profile_config.cmd_string, 'virtualenv': VIRTUALENV, 'copy_env': True, 'stdout_stream': { 'class': 'FileStream', 'filename': '{}.log'.format(profile_config.daemon_name) }, 'env': { 'PYTHONUNBUFFERED': 'True' } }]) # go ahead and set umask early if it is in the config if arbiter.umask is not None: os.umask(arbiter.umask) pidfile = pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = loglevel or arbiter.loglevel or 'info' logoutput = logoutput or arbiter.logoutput or '-' loggerconfig = loggerconfig or arbiter.loggerconfig or None configure_logger(logger, loglevel, logoutput, loggerconfig) # Main loop restart = True while restart: try: arbiter = arbiter future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise (e) except KeyboardInterrupt: pass finally: arbiter = None if pidfile is not None: pidfile.unlink() sys.exit(0)
def main(): parser = argparse.ArgumentParser(description='Run some watchers.') parser.add_argument('config', help='configuration file', nargs='?') # XXX we should be able to add all these options in the config file as well parser.add_argument('--log-level', dest='loglevel', choices=list(LOG_LEVELS.keys()) + [key.upper() for key in LOG_LEVELS.keys()], help="log level") parser.add_argument( '--log-output', dest='logoutput', help=( "The location where the logs will be written. The default behavior " "is to write to stdout (you can force it by passing '-' to " "this option). Takes a filename otherwise.")) parser.add_argument('--daemon', dest='daemonize', action='store_true', help="Start circusd in the background") parser.add_argument('--pidfile', dest='pidfile') parser.add_argument('--version', action='store_true', default=False, help='Displays Circus version and exits.') args = parser.parse_args() if args.version: print(__version__) sys.exit(0) if args.config is None: parser.print_usage() sys.exit(0) if args.daemonize: daemonize() # basic logging configuration logging.basicConfig() # From here it can also come from the arbiter configuration # load the arbiter from config arbiter = Arbiter.load_from_config(args.config) pidfile = args.pidfile or arbiter.pidfile or None if pidfile: pidfile = Pidfile(pidfile) try: pidfile.create(os.getpid()) except RuntimeError as e: print(str(e)) sys.exit(1) # configure the logger loglevel = args.loglevel or arbiter.loglevel or 'info' logoutput = args.logoutput or arbiter.logoutput or '-' configure_logger(logger, loglevel, logoutput) # configure the main loop #ioloop.install() #loop = ioloop.IOLoop.instance() #cb = functools.partial(manage_restart, loop, arbiter) #periodic = tornado.ioloop.PeriodicCallback(cb, 1000, loop) #periodic.start() # schedule the arbiter start #arbiter = Arbiter.load_from_config(args.config, loop=loop) #loop.add_future(arbiter.start(), _arbiter_start_cb) # Main loop restart = True while restart: try: arbiter = Arbiter.load_from_config(args.config) future = arbiter.start() restart = False if check_future_exception_and_log(future) is None: restart = arbiter._restarting except Exception as e: # emergency stop arbiter.loop.run_sync(arbiter._emergency_stop) raise (e) except KeyboardInterrupt: pass finally: if pidfile is not None: pidfile.unlink() sys.exit(0)