def do_work(container): """ Performs initial startup actions with the container as requested in arguments. Then remains in container shell or infinite wait until container stops. Returns when container should stop. Raises an exception if anything failed. """ if opts.proc: # Run a one-off process (with the -x argument) mod, proc = opts.proc.rsplit('.', 1) print "pycc: Starting process %s" % opts.proc container.spawn_process(proc, mod, proc, config={'process':{'type':'immediate'}}) # And end return if opts.rel: # Start a rel file start_ok = container.start_rel_from_url(opts.rel) if not start_ok: raise Exception("Cannot start deploy file '%s'" % opts.rel) if opts.mx: from pyon.public import CFG port = CFG.get_safe('container.flask_webapp.port',8080) container.spawn_process("ContainerUI", "ion.core.containerui", "ContainerUI") print "pycc: Container UI started ... listening on http://localhost:%s" % port if opts.signalparent: import signal print 'pycc: Signal parent pid %d that pycc pid %d service start process is complete...' % (os.getppid(), os.getpid()) os.kill(os.getppid(), signal.SIGUSR1) def is_parent_gone(): while os.getppid() != 1: gevent.sleep(1) print 'pycc: Now I am an orphan ... notifying serve_forever to stop' os.kill(os.getpid(), signal.SIGINT) import gevent ipg = gevent.spawn(is_parent_gone) container.gl_parent_watch = ipg if opts.enable_gbmonitor: from pyon.util.gevent_block_plugin import get_gevent_monitor_block get_gevent_monitor_block().start() if not opts.noshell and not opts.daemon: # Keep container running while there is an interactive shell from pyon.container.shell_api import get_shell_api setup_ipython_shell(get_shell_api(container)) elif not opts.nomanhole: from pyon.container.shell_api import get_shell_api setup_ipython_embed(get_shell_api(container)) else: container.serve_forever()
def handle_request(self, action): if action.alarm_mode: gevent_block = get_gevent_alarm_block() else: gevent_block = get_gevent_monitor_block() gevent_block.start()