mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08: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)
|
create_time = models.DateTimeField(auto_now_add=True)
|
||||||
task_number = models.IntegerField(default=0)
|
task_number = models.IntegerField(default=0)
|
||||||
service_url = models.CharField(max_length=256, blank=True, null=True)
|
service_url = models.CharField(max_length=256, blank=True, null=True)
|
||||||
|
is_disabled = models.BooleanField(default=False)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def status(self):
|
def status(self):
|
||||||
|
|||||||
@ -44,3 +44,8 @@ class JudgeServerHeartbeatSerializer(serializers.Serializer):
|
|||||||
cpu = serializers.FloatField(min_value=0, max_value=100)
|
cpu = serializers.FloatField(min_value=0, max_value=100)
|
||||||
action = serializers.ChoiceField(choices=("heartbeat", ))
|
action = serializers.ChoiceField(choices=("heartbeat", ))
|
||||||
service_url = serializers.CharField(max_length=256)
|
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):
|
class JudgeServerAPITest(APITestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
JudgeServer.objects.create(**{"hostname": "testhostname", "judger_version": "1.0.4",
|
self.server = JudgeServer.objects.create(**{"hostname": "testhostname", "judger_version": "1.0.4",
|
||||||
"cpu_core": 4, "cpu_usage": 90.5, "memory_usage": 80.3,
|
"cpu_core": 4, "cpu_usage": 90.5, "memory_usage": 80.3,
|
||||||
"last_heartbeat": timezone.now()})
|
"last_heartbeat": timezone.now()})
|
||||||
self.url = self.reverse("judge_server_api")
|
self.url = self.reverse("judge_server_api")
|
||||||
self.create_super_admin()
|
self.create_super_admin()
|
||||||
|
|
||||||
@ -121,6 +121,11 @@ class JudgeServerAPITest(APITestCase):
|
|||||||
self.assertSuccess(resp)
|
self.assertSuccess(resp)
|
||||||
self.assertFalse(JudgeServer.objects.filter(hostname="testhostname").exists())
|
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):
|
class LanguageListAPITest(APITestCase):
|
||||||
def test_get_languages(self):
|
def test_get_languages(self):
|
||||||
|
|||||||
@ -17,7 +17,7 @@ from .models import JudgeServer
|
|||||||
from .serializers import (CreateEditWebsiteConfigSerializer,
|
from .serializers import (CreateEditWebsiteConfigSerializer,
|
||||||
CreateSMTPConfigSerializer, EditSMTPConfigSerializer,
|
CreateSMTPConfigSerializer, EditSMTPConfigSerializer,
|
||||||
JudgeServerHeartbeatSerializer,
|
JudgeServerHeartbeatSerializer,
|
||||||
JudgeServerSerializer, TestSMTPConfigSerializer)
|
JudgeServerSerializer, TestSMTPConfigSerializer, EditJudgeServerSerializer)
|
||||||
|
|
||||||
|
|
||||||
class SMTPAPI(APIView):
|
class SMTPAPI(APIView):
|
||||||
@ -102,6 +102,12 @@ class JudgeServerAPI(APIView):
|
|||||||
JudgeServer.objects.filter(hostname=hostname).delete()
|
JudgeServer.objects.filter(hostname=hostname).delete()
|
||||||
return self.success()
|
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):
|
class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
|
||||||
@validate_serializer(JudgeServerHeartbeatSerializer)
|
@validate_serializer(JudgeServerHeartbeatSerializer)
|
||||||
|
|||||||
@ -6,7 +6,6 @@ from urllib.parse import urljoin
|
|||||||
import requests
|
import requests
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from conf.models import JudgeServer
|
from conf.models import JudgeServer
|
||||||
@ -47,7 +46,7 @@ class DispatcherBase(object):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def choose_judge_server():
|
def choose_judge_server():
|
||||||
with transaction.atomic():
|
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"]
|
servers = [s for s in servers if s.status == "normal"]
|
||||||
if servers:
|
if servers:
|
||||||
server = servers[0]
|
server = servers[0]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user