完成服务器判题队列长度监控功能

This commit is contained in:
virusdefender
2015-08-20 13:47:57 +08:00
parent 9879195555
commit d8dd9cd72c
4 changed files with 18 additions and 11 deletions

View File

@@ -10,12 +10,6 @@ from settings import docker_config, source_code_dir, test_case_dir, submission_d
@app.task @app.task
def judge(submission_id, time_limit, memory_limit, test_case_id): 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: try:
command = "%s run -t -i --privileged --rm=true " \ command = "%s run -t -i --privileged --rm=true " \
"-v %s:/var/judger/test_case/ " \ "-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", cur.execute("update submission set result=%s, info=%s where id=%s",
(result["system_error"], str(e), submission_id)) (result["system_error"], str(e), submission_id))
conn.commit() conn.commit()
conn.close() 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)

0
monitor/__init__.py Normal file
View File

15
monitor/views.py Normal file
View File

@@ -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})

View File

@@ -15,6 +15,7 @@ from admin.views import AdminTemplateView
from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView
from submission.views import SubmissionAPIView, SubmissionAdminAPIView from submission.views import SubmissionAPIView, SubmissionAdminAPIView
from monitor.views import QueueLengthMonitorAPIView
urlpatterns = [ urlpatterns = [
@@ -58,5 +59,6 @@ urlpatterns = [
name="join_group_request_admin_api"), name="join_group_request_admin_api"),
url(r'^api/submission/$', SubmissionAPIView.as_view(), name="submission_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/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"),
url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"),
] ]