Esempio n. 1
0
    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
Esempio n. 2
0
    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())
Esempio n. 3
0
    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())
Esempio n. 4
0
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())
Esempio n. 5
0
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())
Esempio n. 6
0
    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
Esempio n. 7
0
    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'])