def render(self, procfile, options, environment, concurrency): files = [] context = { 'app': options.app, 'app_root': options.app_root, 'environment': environment, 'log': options.log, 'port': options.port, 'user': options.user, 'shell': options.shell } for name, cmd in compat.iteritems(procfile.processes): ctx = context.copy() ctx.update({'command': cmd, 'name': name}) master = "{0}-{1}.conf".format(options.app, name) master_content = self.get_template("process_master.conf").render(ctx) files.append((master, master_content)) for num in compat.xrange(1, concurrency[name] + 1): ctx.update({'num': num}) process = "{0}-{1}-{2}.conf".format(options.app, name, num) process_content = self.get_template("process.conf").render(ctx) files.append((process, process_content)) app = "{0}.conf".format(options.app) app_content = self.get_template("master.conf").render(context) files.append((app, app_content)) return files
def start(self, options): "Start the application (or a specific PROCESS)" self.set_env(self.read_env(options)) procfile = self.make_procfile(options.procfile) port = int(os.environ.get('PORT', options.port)) concurrency = self.parse_concurrency(options.concurrency) quiet = self.parse_quiet(options.quiet) if options.process is not None: try: commands = {options.process: procfile.commands[options.process]} except KeyError: raise CommandError("Process type '{0}' does not exist in Procfile".format(options.process)) else: commands = procfile.commands for name, cmd in compat.iteritems(commands): for i in compat.xrange(concurrency[name]): n = '{name}.{num}'.format(name=name, num=i + 1) os.environ['PORT'] = str(port + i) process_manager.add_process(n, cmd, quiet=(name in quiet)) port += 100 sys.exit(process_manager.loop())
def start(self, options): "Start the application (or a specific PROCESS)" self.set_env(self.read_env(options)) procfile = self.make_procfile(options.procfile) port = int(os.environ.get('PORT', options.port)) concurrency = self.parse_concurrency(options.concurrency) quiet = self.parse_quiet(options.quiet) processes = options.processes if len(processes) > 0: commands = {} for process in processes: try: commands[process] = procfile.commands[process] except KeyError: raise CommandError("Process type '{0}' does not exist in Procfile".format(process)) else: commands = procfile.commands for name, cmd in compat.iteritems(commands): for i in compat.xrange(concurrency[name]): n = '{name}.{num}'.format(name=name, num=i + 1) os.environ['PORT'] = str(port + i) process_manager.add_process(n, cmd, quiet=(name in quiet)) port += 100 sys.exit(process_manager.loop())
def command_start(args): procfile_path = _procfile_path(args.app_root, args.procfile) procfile = _procfile(procfile_path) os.environ.update(_read_env(procfile_path, args.env)) port = int(os.environ.get('PORT', args.port)) concurrency = _parse_concurrency(args.concurrency) quiet = _parse_quiet(args.quiet) processes = args.processes if len(processes) > 0: commands = {} for process in processes: try: commands[process] = procfile.commands[process] except KeyError: raise CommandError("Process type '{0}' does not exist in Procfile".format(process)) else: commands = procfile.commands for name, cmd in compat.iteritems(commands): for i in compat.xrange(concurrency[name]): n = '{name}.{num}'.format(name=name, num=i + 1) os.environ['PORT'] = str(port + i) process_manager.add_process(n, cmd, quiet=(name in quiet)) port += 100 sys.exit(process_manager.loop())
def command_start(args): procfile_path = _procfile_path(args.app_root, args.procfile) procfile = _procfile(procfile_path) os.environ.update(_read_env(procfile_path, args.env)) port = int(os.environ.get('PORT', args.port)) concurrency = _parse_concurrency(args.concurrency) quiet = _parse_quiet(args.quiet) processes = args.processes if len(processes) > 0: commands = {} for process in processes: try: commands[process] = procfile.commands[process] except KeyError: raise CommandError( "Process type '{0}' does not exist in Procfile".format( process)) else: commands = procfile.commands for name, cmd in compat.iteritems(commands): for i in compat.xrange(concurrency[name]): n = '{name}.{num}'.format(name=name, num=i + 1) os.environ['PORT'] = str(port + i) process_manager.add_process(n, cmd, quiet=(name in quiet)) port += 100 sys.exit(process_manager.loop())
def render(self, procfile, options, environment, concurrency): files = [] context = { 'app': options.app, 'app_root': options.app_root, 'environment': environment, 'log': options.log, 'port': options.port, 'user': options.user, 'shell': options.shell } master_template = self.get_template('process_master.conf', package='honcho') process_template = self.get_template('process.conf', package='honcho') app_template = self.get_template('master.conf', package='honcho') for name, cmd in compat.iteritems(procfile.processes): ctx = context.copy() ctx.update({'command': cmd, 'name': name}) master = "{0}-{1}.conf".format(options.app, name) master_content = master_template.render(ctx) files.append((master, master_content)) for num in compat.xrange(1, concurrency[name] + 1): ctx.update({'num': num}) process = "{0}-{1}-{2}.conf".format(options.app, name, num) process_content = process_template.render(ctx) files.append((process, process_content)) app = "{0}.conf".format(options.app) app_content = app_template.render(context) files.append((app, app_content)) return files
def _killall(self, force=False): """Kill all remaining processes, forcefully if requested.""" for_termination = [] for n, p in iteritems(self._processes): if 'returncode' not in p: for_termination.append(n) for n in for_termination: p = self._processes[n] signame = 'SIGKILL' if force else 'SIGTERM' self._system_print("sending %s to %s (pid %s)\n" % (signame, n, p['pid'])) if sys.platform == 'win32': import ctypes ctypes.windll.kernel32.SetConsoleCtrlHandler(0, True) ctypes.windll.kernel32.GenerateConsoleCtrlEvent(0, 0) time.sleep(0.1) ctypes.windll.kernel32.SetConsoleCtrlHandler(0, False) else: if force: self._env.kill(p['pid']) else: self._env.terminate(p['pid'])