diff --git a/judge/judger_controller/tasks.py b/judge/judger_controller/tasks.py index a25972e..40c032b 100644 --- a/judge/judger_controller/tasks.py +++ b/judge/judger_controller/tasks.py @@ -10,6 +10,8 @@ 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.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) + r.incr("judge_queue_length") try: command = "%s run -t -i --privileged --rm=true " \ "-v %s:/var/judger/test_case/ " \ @@ -36,4 +38,5 @@ 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() \ No newline at end of file + conn.close() + r.decr("judge_queue_length") \ No newline at end of file diff --git a/monitor/views.py b/monitor/views.py index 21561bf..15c62b4 100644 --- a/monitor/views.py +++ b/monitor/views.py @@ -3,13 +3,17 @@ import redis import datetime from rest_framework.views import APIView from judge.judger.result import result +from judge.judger_controller.settings import redis_config 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() + r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) + waiting_number = r.get("judge_queue_length") + if waiting_number is None: + waiting_number = 0 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