From d8dd9cd72cd49b632784f3ce6d7cc327e4916429 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Thu, 20 Aug 2015 13:47:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=88=A4=E9=A2=98=E9=98=9F=E5=88=97=E9=95=BF=E5=BA=A6=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- judge/judger_controller/tasks.py | 12 +----------- monitor/__init__.py | 0 monitor/views.py | 15 +++++++++++++++ oj/urls.py | 2 ++ 4 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 monitor/__init__.py create mode 100644 monitor/views.py diff --git a/judge/judger_controller/tasks.py b/judge/judger_controller/tasks.py index e61da72..a25972e 100644 --- a/judge/judger_controller/tasks.py +++ b/judge/judger_controller/tasks.py @@ -10,12 +10,6 @@ from settings import docker_config, source_code_dir, test_case_dir, submission_d @app.task def judge(submission_id, time_limit, memory_limit, test_case_id): - # 先更新判题队列长度 - r = redis.StrictRedis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) - length = r.incr("queue_length") - now = datetime.datetime.now() - # 使用hash key是今天的日期 value 的 key 是当前时分秒 12:02:03 value 是队列长度 - r.hset(str(datetime.date.today()), ":".join([str(now.hour), str(now.minute), str(now.second)]), length) try: command = "%s run -t -i --privileged --rm=true " \ "-v %s:/var/judger/test_case/ " \ @@ -42,8 +36,4 @@ def judge(submission_id, time_limit, memory_limit, test_case_id): cur.execute("update submission set result=%s, info=%s where id=%s", (result["system_error"], str(e), submission_id)) conn.commit() - conn.close() - r.decr("queue_length") - now = datetime.datetime.now() - # 使用hash key是今天的日期 value 的 key 是当前时分秒 12:02:03 value 是队列长度 - r.hset(str(datetime.date.today()), ":".join([str(now.hour), str(now.minute), str(now.second)]), length) + conn.close() \ No newline at end of file diff --git a/monitor/__init__.py b/monitor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitor/views.py b/monitor/views.py new file mode 100644 index 0000000..21561bf --- /dev/null +++ b/monitor/views.py @@ -0,0 +1,15 @@ +# coding=utf-8 +import redis +import datetime +from rest_framework.views import APIView +from judge.judger.result import result +from utils.shortcuts import success_response +from submission.models import Submission + + +class QueueLengthMonitorAPIView(APIView): + def get(self, request): + waiting_number = Submission.objects.filter(result=result["waiting"]).count() + now = datetime.datetime.now() + return success_response({"time": ":".join([str(now.hour), str(now.minute), str(now.second)]), + "count": waiting_number}) \ No newline at end of file diff --git a/oj/urls.py b/oj/urls.py index ef9e503..6018614 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -15,6 +15,7 @@ from admin.views import AdminTemplateView from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from submission.views import SubmissionAPIView, SubmissionAdminAPIView +from monitor.views import QueueLengthMonitorAPIView urlpatterns = [ @@ -58,5 +59,6 @@ urlpatterns = [ name="join_group_request_admin_api"), url(r'^api/submission/$', SubmissionAPIView.as_view(), name="submission_api"), url(r'^api/admin/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"), + url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"), ]