Esempio n. 1
0
File: cli.py Progetto: oznakn/judge
def cli_main():
    import logging
    from dmoj import judgeenv, contrib, executors

    judgeenv.load_env(cli=True)

    executors.load_executors()
    contrib.load_contrib_modules()

    print('Running local judge...')

    logging.basicConfig(filename=judgeenv.log_file, level=logging.INFO,
                        format='%(levelname)s %(asctime)s %(module)s %(message)s')

    judge = LocalJudge()

    for warning in judgeenv.startup_warnings:
        print_ansi('#ansi[Warning: %s](yellow)' % warning)
    del judgeenv.startup_warnings
    print()

    from dmoj.commands import all_commands, commands, register_command
    for command in all_commands:
        register_command(command(judge))

    def run_command(line):
        if not line:
            return 127

        if line[0] in commands:
            cmd = commands[line[0]]
            try:
                return cmd.execute(line[1:])
            except InvalidCommandException as e:
                if e.message:
                    print_ansi("#ansi[%s](red|bold)\n" % e.message)
                print()
                return 1
        else:
            print_ansi('#ansi[Unrecognized command %s](red|bold)' % line[0])
            print()
            return 127

    with judge:
        try:
            judge.listen()

            if judgeenv.cli_command:
                return run_command(judgeenv.cli_command)
            else:
                while True:
                    command = input(ansi_style("#ansi[dmoj](magenta)#ansi[>](green) ")).strip()
                    run_command(shlex.split(command))
        except (EOFError, KeyboardInterrupt):
            print()
        finally:
            judge.murder()
Esempio n. 2
0
def main():
    judgeenv.load_env(cli=True, testsuite=True)

    logging.basicConfig(filename=judgeenv.log_file, level=logging.INFO,
                        format='%(levelname)s %(asctime)s %(module)s %(message)s')

    executors.load_executors()
    contrib.load_contrib_modules()

    tester = Tester(judgeenv.problem_regex, judgeenv.case_regex)
    fails = tester.test_all()
    print()
    print('Test complete')
    if fails:
        print_ansi('#ansi[A total of %d case(s) failed](red|bold).' % fails)
    else:
        print_ansi('#ansi[All cases passed.](green|bold)')
    raise SystemExit(int(fails != 0))
Esempio n. 3
0
def main():  # pragma: no cover
    unicode_stdout_stderr()

    if not sanity_check():
        return 1

    from dmoj import judgeenv, contrib, executors

    judgeenv.load_env()

    executors.load_executors()
    contrib.load_contrib_modules()

    if hasattr(signal, 'SIGUSR2'):
        signal.signal(signal.SIGUSR2, signal.SIG_IGN)

    print('Running live judge...')

    for warning in judgeenv.startup_warnings:
        print_ansi('#ansi[Warning: %s](yellow)' % warning)
    del judgeenv.startup_warnings

    if 'judges' in env:
        logfile = judgeenv.log_file
        try:
            logfile = logfile % 'master'
        except TypeError:
            pass
        logging.basicConfig(
            filename=logfile,
            level=logging.INFO,
            format='%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'
        )
        if env.pidfile:
            with open(env.pidfile) as f:
                f.write(str(os.getpid()))
        manager = JudgeManager(env.judges)
        manager.run()
    else:
        return judge_proc(need_monitor=True)
Esempio n. 4
0
def main():  # pragma: no cover
    unicode_stdout_stderr()

    if not sanity_check():
        return 1

    from dmoj import judgeenv, contrib, executors

    judgeenv.load_env()

    executors.load_executors()
    contrib.load_contrib_modules()

    print('Running live judge...')

    for warning in judgeenv.startup_warnings:
        print_ansi('#ansi[Warning: %s](yellow)' % warning)
    del judgeenv.startup_warnings

    logfile = judgeenv.log_file

    try:
        logfile = logfile % env['id']
    except TypeError:
        pass

    logging.basicConfig(
        filename=logfile,
        level=logging.INFO,
        format='%(levelname)s %(asctime)s %(process)d %(module)s %(message)s')

    setproctitle('DMOJ Judge %s on %s' % (env['id'], make_host_port(judgeenv)))

    judge = ClassicJudge(
        judgeenv.server_host,
        judgeenv.server_port,
        secure=judgeenv.secure,
        no_cert_check=judgeenv.no_cert_check,
        cert_store=judgeenv.cert_store,
    )
    monitor = Monitor()
    monitor.callback = judge.update_problems

    if hasattr(signal, 'SIGUSR2'):

        def update_problem_signal(signum, frame):
            judge.update_problems()

        signal.signal(signal.SIGUSR2, update_problem_signal)

    if judgeenv.api_listen:
        judge_instance = judge

        class Handler(JudgeControlRequestHandler):
            judge = judge_instance

        api_server = HTTPServer(judgeenv.api_listen, Handler)
        thread = threading.Thread(target=api_server.serve_forever)
        thread.daemon = True
        thread.start()
    else:
        api_server = None

    print()
    with monitor:
        try:
            judge.listen()
        except KeyboardInterrupt:
            pass
        except Exception:
            traceback.print_exc()
        finally:
            judge.murder()
            if api_server:
                api_server.shutdown()
Esempio n. 5
0
def ci_test(executors_to_test, overrides, allow_fail=frozenset()):
    result = {}
    failed = False
    failed_executors = []

    for name in executors_to_test:
        executor = import_module('dmoj.executors.' + name)

        print_ansi('%-34s%s' % ('Testing #ansi[%s](|underline):' % name, ''),
                   end=' ')

        if not hasattr(executor, 'Executor'):
            failed = True
            print_ansi(
                '#ansi[Does not export](red|bold) #ansi[Executor](red|underline)'
            )
            continue

        if not hasattr(executor.Executor, 'autoconfig'):
            print_ansi('#ansi[Could not autoconfig](magenta|bold)')
            continue

        try:
            if name in overrides:
                if not overrides[name]:
                    print_ansi('#ansi[Environment not found on Travis](red)')
                    continue
                print_ansi('#ansi[(manual config)](yellow)', end=' ')
                data = executor.Executor.autoconfig_run_test(overrides[name])
            else:
                data = executor.Executor.autoconfig()
            config = data[0]
            success = data[1]
            feedback = data[2]
            errors = '' if len(data) < 4 else data[3]
        except Exception:
            print_ansi('#ansi[Autoconfig broken](red|bold)')
            traceback.print_exc()
            if name not in allow_fail:
                failed = True
                failed_executors.append(name)
        else:
            print_ansi(
                ['#ansi[%s](red|bold)', '#ansi[%s](green|bold)'][success] %
                (feedback or ['Failed', 'Success'][success]))

            if success:
                result.update(config)
                executor.Executor.runtime_dict = config
                executors[name] = executor
                for runtime, ver in executor.Executor.get_runtime_versions():
                    print_ansi('  #ansi[%s](cyan): %s' %
                               (runtime,
                                '.'.join(map(str, ver))) if ver else 'unknown')
            else:
                if feedback == 'Could not find JVM':
                    continue

                if config:
                    print('  Attempted:')
                    print(
                        '   ',
                        yaml.safe_dump(
                            config, default_flow_style=False).rstrip().replace(
                                '\n', '\n' + ' ' * 4))

                if errors:
                    print('  Errors:')
                    print('   ', errors.replace('\n', '\n' + ' ' * 4))
                if name not in allow_fail:
                    failed = True
                    failed_executors.append(name)

    print()
    print_ansi('#ansi[Configuration result](green|bold|underline):')
    print(
        yaml.safe_dump({
            'runtime': result
        }, default_flow_style=False).rstrip())
    print()
    if failed:
        print_ansi('#ansi[Executor configuration failed.](red|bold)')
        print_ansi('#ansi[Failed executors:](|bold)',
                   ', '.join(failed_executors))
    else:
        print_ansi('#ansi[Executor configuration succeeded.](green|bold)')
    load_contrib_modules()
    print()
    print()
    print('Running test cases...')
    judgeenv.problem_dirs = [
        os.path.normpath(
            os.path.join(os.path.dirname(__file__), '..', 'testsuite'))
    ]
    tester = Tester()
    fails = tester.test_all()
    print()
    print('Test complete.')
    if fails:
        print_ansi('#ansi[A total of %d case(s) failed](red|bold).' % fails)
    else:
        print_ansi('#ansi[All cases passed.](green|bold)')
    failed |= fails != 0
    raise SystemExit(int(failed))