def _load_base_arbiter(self): a = Arbiter.load_from_config(_CONF['reload_base']) a.evpub_socket = FakeSocket() # initialize watchers for watcher in a.iter_watchers(): a._watchers_names[watcher.name.lower()] = watcher return a
def setUp(self): conf = _CONF['reload_base'] self.a = Arbiter.load_from_config(conf) self.a.evpub_socket = FakeSocket() # initialize watchers for watcher in self.a.iter_watchers(): self.a._watchers_names[watcher.name.lower()] = watcher
def _load_base_arbiter(self, name='reload_base'): loop = tornado.ioloop.IOLoop().instance() a = Arbiter.load_from_config(_CONF[name], loop=loop) a.evpub_socket = FakeSocket() # initialize watchers for watcher in a.iter_watchers(): a._watchers_names[watcher.name.lower()] = watcher return a
def _load_base_arbiter(self, name='reload_base'): loop = tornado.ioloop.IOLoop.current() a = Arbiter.load_from_config(_CONF[name], loop=loop) a.evpub_socket = FakeSocket() # initialize watchers for watcher in a.iter_watchers(): a._watchers_names[watcher.name.lower()] = watcher return a
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=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, e: print(str(e)) sys.exit(1)
def test_plugin_priority(self): arbiter = Arbiter.load_from_config(_CONF['issue680']) watchers = arbiter.iter_watchers() self.assertEqual(watchers[0].priority, 30) self.assertEqual(watchers[0].name, 'plugin:myplugin') self.assertEqual(watchers[1].priority, 20) self.assertEqual(watchers[1].cmd, 'sleep 20') self.assertEqual(watchers[2].priority, 10) self.assertEqual(watchers[2].cmd, 'sleep 10')
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=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, e: print(str(e)) sys.exit(1)
def test_reload(self): a = Arbiter.load_from_config(_CONF["reload1"]) a.initialize() self.assertEqual(len(a.watchers), 1) a.reload_from_config(_CONF["reload2"]) self.assertEqual(len(a.watchers), 2) a.reload_from_config(_CONF["reload3"]) self.assertEqual(len(a.watchers), 1) a.reload_from_config(_CONF["reload4"]) self.assertEqual(len(a.watchers), 1) self.assertEqual(a.watchers[0].name, "test3") self.assertEqual(a.watchers[0].numprocesses, 1) w = a.watchers[0] a.reload_from_config(_CONF["reload5"]) self.assertEqual(a.watchers[0].name, "test3") self.assertEqual(a.watchers[0].numprocesses, 2) # check that just the number of processes is changed and that the watcher it self is not changed self.assertEqual(a.watchers[0], w) a.evpub_socket.close() a.stop()
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)
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: arbiter.stop() if pidfile is not None: pidfile.unlink() sys.exit(0)
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) if __name__ == '__main__': main()
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)
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)
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)
def test_find_hook_in_pythonpath(self): arbiter = Arbiter.load_from_config(_CONF['find_hook_in_pythonpath']) watcher = arbiter.iter_watchers()[0] self.assertEqual(watcher.hooks['before_start'].__doc__, 'relative_hook') self.assertTrue('before_start' not in watcher.ignore_hook_failure)
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)