Merge branch 'dev'
* dev: 修改 admin 界面,ip 太宽了 jquery选择器参数字符串里多打了一个空格 修复小组邀请赛的密码验证的问题,感觉之前测试过了呀,结果还是有问题,因为验证密码api里选择比赛时限定比赛类型中只有带密码的公开赛,所以无法验证带密码的小组赛 Conflicts: judge_dispatcher/tasks.py oj/settings.py static/src/js/build.js static/src/js/config.js
This commit is contained in:
25
judge_dispatcher/migrations/0003_auto_20151223_0029.py
Normal file
25
judge_dispatcher/migrations/0003_auto_20151223_0029.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('judge_dispatcher', '0002_auto_20151207_2310'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='judgeserver',
|
||||
name='create_time',
|
||||
field=models.DateTimeField(auto_now_add=True, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='judgeserver',
|
||||
name='name',
|
||||
field=models.CharField(default='judger', max_length=30),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -3,6 +3,7 @@ from django.db import models
|
||||
|
||||
|
||||
class JudgeServer(models.Model):
|
||||
name = models.CharField(max_length=30)
|
||||
ip = models.GenericIPAddressField()
|
||||
port = models.IntegerField()
|
||||
# 这个服务器最大可能运行的判题实例数量
|
||||
@@ -14,6 +15,7 @@ class JudgeServer(models.Model):
|
||||
lock = models.BooleanField(default=False)
|
||||
# status 为 false 的时候代表不使用这个服务器
|
||||
status = models.BooleanField(default=True)
|
||||
create_time = models.DateTimeField(auto_now_add=True, blank=True, null=True)
|
||||
|
||||
def use_judge_instance(self):
|
||||
# 因为use 和 release 中间是判题时间,可能这个 model 的数据已经被修改了,所以不能直接使用self.xxx,否则取到的是旧数据
|
||||
|
||||
29
judge_dispatcher/serializers.py
Normal file
29
judge_dispatcher/serializers.py
Normal file
@@ -0,0 +1,29 @@
|
||||
# coding=utf-8
|
||||
import json
|
||||
from rest_framework import serializers
|
||||
from .models import JudgeServer
|
||||
|
||||
|
||||
class CreateJudgesSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(max_length=30)
|
||||
ip = serializers.IPAddressField()
|
||||
port = serializers.IntegerField()
|
||||
# 这个服务器最大可能运行的判题实例数量
|
||||
max_instance_number = serializers.IntegerField()
|
||||
token = serializers.CharField(max_length=30)
|
||||
|
||||
|
||||
class EditJudgesSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
name = serializers.CharField(max_length=30)
|
||||
ip = serializers.IPAddressField()
|
||||
port = serializers.IntegerField()
|
||||
# 这个服务器最大可能运行的判题实例数量
|
||||
max_instance_number = serializers.IntegerField()
|
||||
token = serializers.CharField(max_length=30)
|
||||
status = serializers.BooleanField()
|
||||
|
||||
|
||||
class JudgesSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = JudgeServer
|
||||
@@ -90,8 +90,8 @@ class JudgeDispatcher(object):
|
||||
waiting_submission.delete()
|
||||
|
||||
_judge.delay(submission, time_limit=waiting_submission.time_limit,
|
||||
memory_limit=waiting_submission.memory_limit, test_case_id=waiting_submission.test_case_id,
|
||||
is_waiting_task=True)
|
||||
memory_limit=waiting_submission.memory_limit,
|
||||
test_case_id=waiting_submission.test_case_id, is_waiting_task=True)
|
||||
|
||||
def update_problem_status(self):
|
||||
problem = Problem.objects.get(id=self.submission.problem_id)
|
||||
@@ -119,7 +119,8 @@ class JudgeDispatcher(object):
|
||||
logger.info("Contest debug mode, id: " + str(contest.id) + ", submission id: " + self.submission.id)
|
||||
return
|
||||
with transaction.atomic():
|
||||
contest_problem = ContestProblem.objects.select_for_update().get(contest=contest, id=self.submission.problem_id)
|
||||
contest_problem = ContestProblem.objects.select_for_update().get(contest=contest,
|
||||
id=self.submission.problem_id)
|
||||
|
||||
contest_problem.add_submission_number()
|
||||
|
||||
|
||||
71
judge_dispatcher/views.py
Normal file
71
judge_dispatcher/views.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# coding=utf-8
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from account.decorators import super_admin_required
|
||||
from utils.shortcuts import success_response, serializer_invalid_response, error_response, paginate
|
||||
from .serializers import CreateJudgesSerializer, JudgesSerializer, EditJudgesSerializer
|
||||
from .models import JudgeServer
|
||||
|
||||
|
||||
class AdminJudgeServerAPIView(APIView):
|
||||
@super_admin_required
|
||||
def post(self, request):
|
||||
"""
|
||||
添加判题服务器 json api接口
|
||||
---
|
||||
request_serializer: CreateJudgesSerializer
|
||||
response_serializer: JudgesSerializer
|
||||
"""
|
||||
serializer = CreateJudgesSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
judge_server = JudgeServer.objects.create(name=data["name"], ip=data["ip"], port=data["port"],
|
||||
max_instance_number=data["max_instance_number"],
|
||||
token=data["token"],
|
||||
created_by=request.user)
|
||||
return success_response(JudgesSerializer(judge_server).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
@super_admin_required
|
||||
def put(self, request):
|
||||
"""
|
||||
修改判题服务器信息 json api接口
|
||||
---
|
||||
request_serializer: EditJudgesSerializer
|
||||
response_serializer: JudgesSerializer
|
||||
"""
|
||||
serializer = EditJudgesSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
judge_server = JudgeServer.objects.get(pk=data["id"])
|
||||
except JudgeServer.DoesNotExist:
|
||||
return error_response(u"此判题服务器不存在!")
|
||||
|
||||
judge_server.name = data["name"]
|
||||
judge_server.ip = data["ip"]
|
||||
judge_server.port = data["port"]
|
||||
judge_server.max_instance_number = data["max_instance_number"]
|
||||
judge_server.token = data["token"]
|
||||
judge_server.status = data["status"]
|
||||
judge_server.save()
|
||||
return success_response(JudgesSerializer(judge_server).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
@super_admin_required
|
||||
def get(self, request):
|
||||
"""
|
||||
获取全部判题服务器
|
||||
"""
|
||||
judge_server_id = request.GET.get("judge_server_id", None)
|
||||
if judge_server_id:
|
||||
try:
|
||||
judge_server = JudgeServer.objects.get(id=judge_server_id)
|
||||
except JudgeServer.DoesNotExist:
|
||||
return error_response(u"判题服务器不存在")
|
||||
return success_response(JudgesSerializer(judge_server).data)
|
||||
judge_server = JudgeServer.objects.all()
|
||||
|
||||
return paginate(request, judge_server, JudgesSerializer)
|
||||
Reference in New Issue
Block a user