mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-12-28 16:12:13 +00:00
add judge server is_disabled field
This commit is contained in:
parent
290be9f8bc
commit
03cf356bab
20
conf/migrations/0003_judgeserver_is_disabled.py
Normal file
20
conf/migrations/0003_judgeserver_is_disabled.py
Normal file
@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.4 on 2017-12-24 03:44
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('conf', '0002_auto_20171011_1214'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='judgeserver',
|
||||
name='is_disabled',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
@ -13,6 +13,7 @@ class JudgeServer(models.Model):
|
||||
create_time = models.DateTimeField(auto_now_add=True)
|
||||
task_number = models.IntegerField(default=0)
|
||||
service_url = models.CharField(max_length=256, blank=True, null=True)
|
||||
is_disabled = models.BooleanField(default=False)
|
||||
|
||||
@property
|
||||
def status(self):
|
||||
|
@ -44,3 +44,8 @@ class JudgeServerHeartbeatSerializer(serializers.Serializer):
|
||||
cpu = serializers.FloatField(min_value=0, max_value=100)
|
||||
action = serializers.ChoiceField(choices=("heartbeat", ))
|
||||
service_url = serializers.CharField(max_length=256)
|
||||
|
||||
|
||||
class EditJudgeServerSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
is_disabled = serializers.BooleanField()
|
||||
|
@ -105,9 +105,9 @@ class JudgeServerHeartbeatTest(APITestCase):
|
||||
|
||||
class JudgeServerAPITest(APITestCase):
|
||||
def setUp(self):
|
||||
JudgeServer.objects.create(**{"hostname": "testhostname", "judger_version": "1.0.4",
|
||||
"cpu_core": 4, "cpu_usage": 90.5, "memory_usage": 80.3,
|
||||
"last_heartbeat": timezone.now()})
|
||||
self.server = JudgeServer.objects.create(**{"hostname": "testhostname", "judger_version": "1.0.4",
|
||||
"cpu_core": 4, "cpu_usage": 90.5, "memory_usage": 80.3,
|
||||
"last_heartbeat": timezone.now()})
|
||||
self.url = self.reverse("judge_server_api")
|
||||
self.create_super_admin()
|
||||
|
||||
@ -121,6 +121,11 @@ class JudgeServerAPITest(APITestCase):
|
||||
self.assertSuccess(resp)
|
||||
self.assertFalse(JudgeServer.objects.filter(hostname="testhostname").exists())
|
||||
|
||||
def test_disabled_judge_server(self):
|
||||
resp = self.client.put(self.url, data={"is_disabled": True, "id": self.server.id})
|
||||
self.assertSuccess(resp)
|
||||
self.assertTrue(JudgeServer.objects.get(id=self.server.id).is_disabled)
|
||||
|
||||
|
||||
class LanguageListAPITest(APITestCase):
|
||||
def test_get_languages(self):
|
||||
|
@ -17,7 +17,7 @@ from .models import JudgeServer
|
||||
from .serializers import (CreateEditWebsiteConfigSerializer,
|
||||
CreateSMTPConfigSerializer, EditSMTPConfigSerializer,
|
||||
JudgeServerHeartbeatSerializer,
|
||||
JudgeServerSerializer, TestSMTPConfigSerializer)
|
||||
JudgeServerSerializer, TestSMTPConfigSerializer, EditJudgeServerSerializer)
|
||||
|
||||
|
||||
class SMTPAPI(APIView):
|
||||
@ -102,6 +102,12 @@ class JudgeServerAPI(APIView):
|
||||
JudgeServer.objects.filter(hostname=hostname).delete()
|
||||
return self.success()
|
||||
|
||||
@validate_serializer(EditJudgeServerSerializer)
|
||||
@super_admin_required
|
||||
def put(self, request):
|
||||
JudgeServer.objects.filter(id=request.data["id"]).update(is_disabled=request.data["is_disabled"])
|
||||
return self.success()
|
||||
|
||||
|
||||
class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
|
||||
@validate_serializer(JudgeServerHeartbeatSerializer)
|
||||
|
@ -6,7 +6,6 @@ from urllib.parse import urljoin
|
||||
import requests
|
||||
from django.db import transaction
|
||||
from django.db.models import F
|
||||
from django.conf import settings
|
||||
|
||||
from account.models import User
|
||||
from conf.models import JudgeServer
|
||||
@ -47,7 +46,7 @@ class DispatcherBase(object):
|
||||
@staticmethod
|
||||
def choose_judge_server():
|
||||
with transaction.atomic():
|
||||
servers = JudgeServer.objects.select_for_update().all().order_by("task_number")
|
||||
servers = JudgeServer.objects.select_for_update().filter(is_disabled=False).order_by("task_number")
|
||||
servers = [s for s in servers if s.status == "normal"]
|
||||
if servers:
|
||||
server = servers[0]
|
||||
|
Loading…
Reference in New Issue
Block a user