コード例 #1
0
    def on_internal_error(self, packet):
        try:
            raise ValueError('\n\n' + packet['message'])
        except ValueError:
            logger.exception('Judge %s failed while handling submission %s',
                             self.name, packet['submission-id'])
        self._free_self(packet)

        id = packet['submission-id']
        if Submission.objects.filter(id=id).update(status='IE',
                                                   result='IE',
                                                   error=packet['message']):
            event.post('sub_%s' % Submission.get_id_secret(id),
                       {'type': 'internal-error'})
            self._post_update_submission(id, 'internal-error', done=True)
            json_log.info(
                self._make_json_log(packet,
                                    action='internal-error',
                                    message=packet['message'],
                                    finish=True,
                                    result='IE'))
        else:
            logger.warning('Unknown submission: %s', id)
            json_log.error(
                self._make_json_log(packet,
                                    action='internal-error',
                                    info='unknown submission',
                                    message=packet['message'],
                                    finish=True,
                                    result='IE'))
コード例 #2
0
    def on_submission_terminated(self, packet):
        logger.info('%s: Submission aborted: %s', self.name,
                    packet['submission-id'])
        self._free_self(packet)

        if Submission.objects.filter(id=packet['submission-id']).update(
                status='AB', result='AB'):
            event.post(
                'sub_%s' % Submission.get_id_secret(packet['submission-id']),
                {'type': 'aborted-submission'})
            self._post_update_submission(packet['submission-id'],
                                         'terminated',
                                         done=True)
            json_log.info(
                self._make_json_log(packet,
                                    action='aborted',
                                    finish=True,
                                    result='AB'))
        else:
            logger.warning('Unknown submission: %s', packet['submission-id'])
            json_log.error(
                self._make_json_log(packet,
                                    action='aborted',
                                    info='unknown submission',
                                    finish=True,
                                    result='AB'))
コード例 #3
0
    def on_grading_begin(self, packet):
        logger.info('%s: Grading has begun on: %s', self.name,
                    packet['submission-id'])
        self.batch_id = None

        if Submission.objects.filter(id=packet['submission-id']).update(
                status='G',
                is_pretested=packet['pretested'],
                current_testcase=1,
                batch=False,
                judged_date=timezone.now()):
            SubmissionTestCase.objects.filter(
                submission_id=packet['submission-id']).delete()
            event.post(
                'sub_%s' % Submission.get_id_secret(packet['submission-id']),
                {'type': 'grading-begin'})
            self._post_update_submission(packet['submission-id'],
                                         'grading-begin')
            json_log.info(self._make_json_log(packet, action='grading-begin'))
        else:
            logger.warning('Unknown submission: %s', packet['submission-id'])
            json_log.error(
                self._make_json_log(packet,
                                    action='grading-begin',
                                    info='unknown submission'))
コード例 #4
0
    def on_compile_error(self, packet):
        logger.info('%s: Submission failed to compile: %s', self.name,
                    packet['submission-id'])
        self._free_self(packet)

        if Submission.objects.filter(id=packet['submission-id']).update(
                status='CE', result='CE', error=packet['log']):
            event.post(
                'sub_%s' % Submission.get_id_secret(packet['submission-id']), {
                    'type': 'compile-error',
                    'log': packet['log'],
                })
            self._post_update_submission(packet['submission-id'],
                                         'compile-error',
                                         done=True)
            json_log.info(
                self._make_json_log(packet,
                                    action='compile-error',
                                    log=packet['log'],
                                    finish=True,
                                    result='CE'))
        else:
            logger.warning('Unknown submission: %s', packet['submission-id'])
            json_log.error(
                self._make_json_log(packet,
                                    action='compile-error',
                                    info='unknown submission',
                                    log=packet['log'],
                                    finish=True,
                                    result='CE'))
コード例 #5
0
    def on_internal_error(self, packet):
        super(DjangoJudgeHandler, self).on_internal_error(packet)

        id = packet['submission-id']
        if Submission.objects.filter(id=id).update(status='IE',
                                                   result='IE',
                                                   error=packet['message']):
            event.post('sub_%s' % Submission.get_id_secret(id),
                       {'type': 'internal-error'})
            self._post_update_submission(id, 'internal-error', done=True)
            json_log.info(
                self._make_json_log(packet,
                                    action='internal-error',
                                    message=packet['message'],
                                    finish=True,
                                    result='IE'))
        else:
            logger.warning('Unknown submission: %d', id)
            json_log.error(
                self._make_json_log(packet,
                                    action='internal-error',
                                    info='unknown submission',
                                    message=packet['message'],
                                    finish=True,
                                    result='IE'))
コード例 #6
0
ファイル: judgecallback.py プロジェクト: advenia/wlmoj
    def on_compile_error(self, packet):
        super(DjangoJudgeHandler, self).on_compile_error(packet)

        if Submission.objects.filter(id=packet['submission-id']).update(
                status='CE', result='CE', error=packet['log']):
            event.post(
                'sub_%s' % Submission.get_id_secret(packet['submission-id']), {
                    'type': 'compile-error',
                    'log': packet['log']
                })
            self._post_update_submission(packet['submission-id'],
                                         'compile-error',
                                         done=True)
            json_log.info(
                self._make_json_log(packet,
                                    action='compile-error',
                                    log=packet['log'],
                                    finish=True,
                                    result='CE'))
        else:
            logger.warning('Unknown submission: %d', packet['submission-id'])
            json_log.error(
                self._make_json_log(packet,
                                    action='compile-error',
                                    info='unknown submission',
                                    log=packet['log'],
                                    finish=True,
                                    result='CE'))
コード例 #7
0
 def on_submission_processing(self, packet):
     id = packet['submission-id']
     if Submission.objects.filter(id=id).update(status='P', judged_on=self.judge):
         event.post('sub_%s' % Submission.get_id_secret(id), {'type': 'processing'})
         self._post_update_submission(id, 'processing')
         json_log.info(self._make_json_log(packet, action='processing'))
     else:
         logger.warning('Unknown submission: %d', id)
         json_log.error(self._make_json_log(packet, action='processing', info='unknown submission'))
コード例 #8
0
ファイル: judge_handler.py プロジェクト: kipply/site
    def on_compile_message(self, packet):
        logger.info('%s: Submission generated compiler messages: %s', self.name, packet['submission-id'])

        if Submission.objects.filter(id=packet['submission-id']).update(error=packet['log']):
            event.post('sub_%s' % Submission.get_id_secret(packet['submission-id']), {'type': 'compile-message'})
            json_log.info(self._make_json_log(packet, action='compile-message', log=packet['log']))
        else:
            logger.warning('Unknown submission: %s', packet['submission-id'])
            json_log.error(self._make_json_log(packet, action='compile-message', info='unknown submission',
                                               log=packet['log']))
コード例 #9
0
    def on_compile_message(self, packet):
        super(DjangoJudgeHandler, self).on_compile_message(packet)

        if Submission.objects.filter(id=packet['submission-id']).update(error=packet['log']):
            event.post('sub_%s' % Submission.get_id_secret(packet['submission-id']), {'type': 'compile-message'})
            json_log.info(self._make_json_log(packet, action='compile-message', log=packet['log']))
        else:
            logger.warning('Unknown submission: %d', packet['submission-id'])
            json_log.error(self._make_json_log(packet, action='compile-message', info='unknown submission',
                                               log=packet['log']))
コード例 #10
0
 def on_grading_begin(self, packet):
     super(DjangoJudgeHandler, self).on_grading_begin(packet)
     if Submission.objects.filter(id=packet['submission-id']).update(
             status='G', is_pretested=packet['pretested'],
             current_testcase=1, batch=False):
         SubmissionTestCase.objects.filter(submission_id=packet['submission-id']).delete()
         event.post('sub_%s' % Submission.get_id_secret(packet['submission-id']), {'type': 'grading-begin'})
         self._post_update_submission(packet['submission-id'], 'grading-begin')
         json_log.info(self._make_json_log(packet, action='grading-begin'))
     else:
         logger.warning('Unknown submission: %d', packet['submission-id'])
         json_log.error(self._make_json_log(packet, action='grading-begin', info='unknown submission'))
コード例 #11
0
ファイル: judge_handler.py プロジェクト: kipply/site
    def on_test_case(self, packet, max_feedback=SubmissionTestCase._meta.get_field('feedback').max_length):
        logger.info('%s: %d test case(s) completed on: %s', self.name, len(packet['cases']), packet['submission-id'])

        id = packet['submission-id']
        updates = packet['cases']
        max_position = max(map(itemgetter('position'), updates))

        if not Submission.objects.filter(id=id).update(current_testcase=max_position + 1):
            logger.warning('Unknown submission: %s', id)
            json_log.error(self._make_json_log(packet, action='test-case', info='unknown submission'))
            return

        bulk_test_case_updates = []
        for result in updates:
            test_case = SubmissionTestCase(submission_id=id, case=result['position'])
            status = result['status']
            if status & 4:
                test_case.status = 'TLE'
            elif status & 8:
                test_case.status = 'MLE'
            elif status & 64:
                test_case.status = 'OLE'
            elif status & 2:
                test_case.status = 'RTE'
            elif status & 16:
                test_case.status = 'IR'
            elif status & 1:
                test_case.status = 'WA'
            elif status & 32:
                test_case.status = 'SC'
            else:
                test_case.status = 'AC'
            test_case.time = result['time']
            test_case.memory = result['memory']
            test_case.points = result['points']
            test_case.total = result['total-points']
            test_case.batch = self.batch_id if self.in_batch else None
            test_case.feedback = (result.get('feedback') or '')[:max_feedback]
            test_case.extended_feedback = result.get('extended-feedback') or ''
            test_case.output = result['output']
            bulk_test_case_updates.append(test_case)

            json_log.info(self._make_json_log(
                packet, action='test-case', case=test_case.case, batch=test_case.batch,
                time=test_case.time, memory=test_case.memory, feedback=test_case.feedback,
                extended_feedback=test_case.extended_feedback, output=test_case.output,
                points=test_case.points, total=test_case.total, status=test_case.status,
            ))

        do_post = True

        if id in self.update_counter:
            cnt, reset = self.update_counter[id]
            cnt += 1
            if time.monotonic() - reset > UPDATE_RATE_TIME:
                del self.update_counter[id]
            else:
                self.update_counter[id] = (cnt, reset)
                if cnt > UPDATE_RATE_LIMIT:
                    do_post = False
        if id not in self.update_counter:
            self.update_counter[id] = (1, time.monotonic())

        if do_post:
            event.post('sub_%s' % Submission.get_id_secret(id), {
                'type': 'test-case',
                'id': max_position,
            })
            self._post_update_submission(id, state='test-case')

        SubmissionTestCase.objects.bulk_create(bulk_test_case_updates)
コード例 #12
0
        do_post = True

        if id in self.update_counter:
            cnt, reset = self.update_counter[id]
            cnt += 1
            if TIMER() - reset > UPDATE_RATE_TIME:
                del self.update_counter[id]
            else:
                self.update_counter[id] = (cnt, reset)
                if cnt > UPDATE_RATE_LIMIT:
                    do_post = False
        if id not in self.update_counter:
            self.update_counter[id] = (1, TIMER())

        if do_post:
            event.post('sub_%s' % Submission.get_id_secret(id), {
                'type': 'test-case',
                'id': packet['position'],
                'status': test_case.status,
                'time': '%.3f' % round(float(packet['time']), 3),
                'memory': packet['memory'],
                'points': float(test_case.points),
                'total': float(test_case.total),
                'output': packet['output']
            })
            self._post_update_submission(id, state='test-case')

    def on_supported_problems(self, packet):
        super(DjangoJudgeHandler, self).on_supported_problems(packet)
        self.judge.problems.set(Problem.objects.filter(code__in=list(self.problems.keys())))
        json_log.info(self._make_json_log(action='update-problems', count=len(self.problems)))
コード例 #13
0
ファイル: judgecallback.py プロジェクト: noomorph/site
        if id in self.update_counter:
            cnt, reset = self.update_counter[id]
            cnt += 1
            if TIMER() - reset > UPDATE_RATE_TIME:
                del self.update_counter[id]
            else:
                self.update_counter[id] = (cnt, reset)
                if cnt > UPDATE_RATE_LIMIT:
                    do_post = False
        if id not in self.update_counter:
            self.update_counter[id] = (1, TIMER())

        if do_post:
            event.post(
                'sub_%s' % Submission.get_id_secret(id), {
                    'type': 'test-case',
                    'id': packet['position'],
                    'status': test_case.status,
                    'time': '%.3f' % round(float(packet['time']), 3),
                    'memory': packet['memory'],
                    'points': float(test_case.points),
                    'total': float(test_case.total),
                    'output': packet['output'],
                })
            self._post_update_submission(id, state='test-case')

    def on_supported_problems(self, packet):
        super(DjangoJudgeHandler, self).on_supported_problems(packet)
        self.judge.problems.set(
            Problem.objects.filter(code__in=list(self.problems.keys())))