From 5f23bff3c5a9040c4292fdd0a3c231e02eb07a71 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 21 Sep 2015 13:56:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=89=8D=E5=8F=B0=E9=A2=98?= =?UTF-8?q?=E7=9B=AE=E7=9A=84=E9=87=8D=E6=96=B0=E5=88=A4=E9=A2=98=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/urls.py | 4 ++- .../js/app/admin/problem/submissionList.js | 14 +++++++++ submission/serializers.py | 4 +++ submission/views.py | 30 ++++++++++++++++++- .../src/admin/problem/submission_list.html | 1 + 5 files changed, 51 insertions(+), 2 deletions(-) diff --git a/oj/urls.py b/oj/urls.py index 6f16acf8..5b65e4c0 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -17,7 +17,8 @@ from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView, from admin.views import AdminTemplateView from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView -from submission.views import SubmissionAPIView, SubmissionAdminAPIView, SubmissionShareAPIView +from submission.views import (SubmissionAPIView, SubmissionAdminAPIView, + SubmissionShareAPIView, SubmissionRejudgeAdminAPIView) from contest_submission.views import ContestSubmissionAPIView, ContestSubmissionAdminAPIView from monitor.views import QueueLengthMonitorAPIView from utils.views import SimditorImageUploadAPIView @@ -119,4 +120,5 @@ urlpatterns = [ url(r'^api/account_security_check/$', AccountSecurityAPIView.as_view(), name="account_security_check"), url(r'^api/contest/time/$', ContestTimeAPIView.as_view(), name="contest_time_api_view"), + url(r'^api/admin/rejudge/$', SubmissionRejudgeAdminAPIView.as_view(), name="submission_rejudge_api"), ] diff --git a/static/src/js/app/admin/problem/submissionList.js b/static/src/js/app/admin/problem/submissionList.js index 1af2e6ce..e8d00bb0 100644 --- a/static/src/js/app/admin/problem/submissionList.js +++ b/static/src/js/app/admin/problem/submissionList.js @@ -51,6 +51,20 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT }, showProblemListPage: function(){ vm.$fire("up!showProblemListPage"); + }, + rejudge: function(submission_id){ + $.ajax({ + beforeSend: csrfTokenHeader, + url: "/api/admin/rejudge/", + method: "post", + data: {"submission_id": submission_id}, + success: function(data){ + if(!data.code){ + bsAlert("重判任务提交成功"); + } + } + + }) } }); } diff --git a/submission/serializers.py b/submission/serializers.py index 8fd62787..3a5308cd 100644 --- a/submission/serializers.py +++ b/submission/serializers.py @@ -26,3 +26,7 @@ class SubmissionhareSerializer(serializers.Serializer): submission_id = serializers.CharField(max_length=40) +class SubmissionRejudgeSerializer(serializers.Serializer): + submission_id = serializers.CharField(max_length=40) + + diff --git a/submission/views.py b/submission/views.py index 6eb69fae..396cdfe8 100644 --- a/submission/views.py +++ b/submission/views.py @@ -19,7 +19,8 @@ from announcement.models import Announcement from utils.shortcuts import serializer_invalid_response, error_response, success_response, error_page, paginate from .models import Submission -from .serializers import CreateSubmissionSerializer, SubmissionSerializer, SubmissionhareSerializer +from .serializers import (CreateSubmissionSerializer, SubmissionSerializer, + SubmissionhareSerializer, SubmissionRejudgeSerializer) logger = logging.getLogger("app_info") @@ -219,3 +220,30 @@ class SubmissionShareAPIView(APIView): return success_response(submission.shared) else: return serializer_invalid_response(serializer) + + +class SubmissionRejudgeAdminAPIView(APIView): + def post(self, request): + serializer = SubmissionRejudgeSerializer(data=request.data) + if serializer.is_valid(): + submission_id = serializer.data["submission_id"] + try: + submission = Submission.objects.get(id=submission_id) + except Submission.DoesNotExist: + return error_response(u"提交不存在") + # 目前只考虑前台公开题目的重新判题 + try: + problem = Problem.objects.get(id=submission.problem_id) + except Problem.DoesNotExist: + return error_response(u"题目不存在") + try: + judge.delay(submission_id, problem.time_limit, problem.memory_limit, problem.test_case_id) + except Exception as e: + logger.error(e) + return error_response(u"提交判题任务失败") + + # 增加redis 中判题队列长度的计数器 + r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) + r.incr("judge_queue_length") + else: + return serializer_invalid_response(serializer) \ No newline at end of file diff --git a/template/src/admin/problem/submission_list.html b/template/src/admin/problem/submission_list.html index 28eaebd4..e0880af5 100644 --- a/template/src/admin/problem/submission_list.html +++ b/template/src/admin/problem/submission_list.html @@ -22,6 +22,7 @@ {{ results[el.result] }} 详情 + 重判