Пример #1
0
 def put(self, request):
     is_disabled = request.data.get("is_disabled", False)
     JudgeServer.objects.filter(id=request.data["id"]).update(
         is_disabled=is_disabled)
     if not is_disabled:
         process_pending_task()
     return self.success()
Пример #2
0
    def post(self, request):
        data = request.data
        client_token = request.META.get("HTTP_X_JUDGE_SERVER_TOKEN")
        if hashlib.sha256(SysOptions.judge_server_token.encode("utf-8")).hexdigest() != client_token:
            return self.error("Invalid token")

        try:
            server = JudgeServer.objects.get(hostname=data["hostname"])
            server.judger_version = data["judger_version"]
            server.cpu_core = data["cpu_core"]
            server.memory_usage = data["memory"]
            server.cpu_usage = data["cpu"]
            server.service_url = data["service_url"]
            server.ip = request.ip
            server.last_heartbeat = timezone.now()
            server.save(update_fields=["judger_version", "cpu_core", "memory_usage", "service_url", "ip", "last_heartbeat"])
        except JudgeServer.DoesNotExist:
            JudgeServer.objects.create(hostname=data["hostname"],
                                       judger_version=data["judger_version"],
                                       cpu_core=data["cpu_core"],
                                       memory_usage=data["memory"],
                                       cpu_usage=data["cpu"],
                                       ip=request.META["REMOTE_ADDR"],
                                       service_url=data["service_url"],
                                       last_heartbeat=timezone.now(),
                                       )
        # 新server上线 处理队列中的,防止没有新的提交而导致一直waiting
        process_pending_task()

        return self.success()
Пример #3
0
    def post(self, request):
        data = request.data
        client_token = request.META.get("HTTP_X_JUDGE_SERVER_TOKEN")
        if hashlib.sha256(SysOptions.judge_server_token.encode("utf-8")).hexdigest() != client_token:
            return self.error("Invalid token")

        try:
            server = JudgeServer.objects.get(hostname=data["hostname"])
            server.judger_version = data["judger_version"]
            server.cpu_core = data["cpu_core"]
            server.memory_usage = data["memory"]
            server.cpu_usage = data["cpu"]
            server.service_url = data["service_url"]
            server.ip = request.ip
            server.last_heartbeat = timezone.now()
            server.save()
        except JudgeServer.DoesNotExist:
            JudgeServer.objects.create(hostname=data["hostname"],
                                       judger_version=data["judger_version"],
                                       cpu_core=data["cpu_core"],
                                       memory_usage=data["memory"],
                                       cpu_usage=data["cpu"],
                                       ip=request.META["REMOTE_ADDR"],
                                       service_url=data["service_url"],
                                       last_heartbeat=timezone.now(),
                                       )
            # 新server上线 处理队列中的,防止没有新的提交而导致一直waiting
            process_pending_task()

        return self.success()
Пример #4
0
 def put(self, request):
     # 修改Judge_Server的信息:关闭测评机,使用JSON的方式传数据就是用data.get, 注意后面的False
     is_disabled = request.data.get("is_disabled",
                                    False)  # is_disabled ->True
     print(is_disabled)
     JudgeServer.objects.filter(id=request.data["id"]).update(
         is_disabled=is_disabled)
     if not is_disabled:
         # 解析排在队列里面的任务
         process_pending_task()
     return self.success()
Пример #5
0
    def post(self, request):
        # 获取数据和请求头加密口令字段HTTP_X_JUDGE_SERVER_TOKEN
        data = request.data
        client_token = request.META.get("HTTP_X_JUDGE_SERVER_TOKEN")
        # 使用摘要算法判断口令是否相等
        if hashlib.sha256(SysOptions.judge_server_token.encode(
                "utf-8")).hexdigest() != client_token:
            return self.error("Invalid token")

        try:
            # 配置服务其的信息
            server = JudgeServer.objects.get(hostname=data["hostname"])
            server.judger_version = data["judger_version"]
            server.cpu_core = data["cpu_core"]
            server.memory_usage = data["memory"]
            server.cpu_usage = data["cpu"]
            server.service_url = data["service_url"]
            server.ip = request.ip
            server.last_heartbeat = timezone.now()
            server.save()
        except JudgeServer.DoesNotExist:
            # 若果不存在就配置,例如刚开始hostname不存在的
            JudgeServer.objects.create(
                hostname=data["hostname"],
                judger_version=data["judger_version"],
                cpu_core=data["cpu_core"],
                memory_usage=data["memory"],
                cpu_usage=data["cpu"],
                ip=request.META["REMOTE_ADDR"],
                service_url=data["service_url"],
                last_heartbeat=timezone.now(),
            )
            # 新server上线 处理队列中的任务,防止没有新的提交而导致一直waiting
            # 将处于等待的(CacheKey.waiting_queue)任务加载到异步队列里面去
            process_pending_task()

        return self.success()
Пример #6
0
    def post(self, request):
        self.serializer_class = JudgeServerHeartbeatSerializer
        data = request.data
        client_token = request.META.get("HTTP_X_JUDGE_SERVER_TOKEN")
        # SysOptions의 judge_server_token을 불러오지 못함
        # if hashlib.sha256(SysOptions.judge_server_token.encode("utf-8")).hexdigest() != client_token:
        #     return self.error("Invalid token")

        try:
            server = JudgeServer.objects.get(hostname=data["hostname"])
            server.judger_version = data["judger_version"]
            server.cpu_core = data["cpu_core"]
            server.memory_usage = data["memory"]
            server.cpu_usage = data["cpu"]
            server.service_url = data["service_url"]
            server.ip = request.ip
            server.last_heartbeat = timezone.now()
            server.save(update_fields=[
                "judger_version", "cpu_core", "memory_usage", "service_url",
                "ip", "last_heartbeat"
            ])
        except JudgeServer.DoesNotExist:
            JudgeServer.objects.create(
                hostname=data["hostname"],
                judger_version=data["judger_version"],
                cpu_core=data["cpu_core"],
                memory_usage=data["memory"],
                cpu_usage=data["cpu"],
                ip=request.META["REMOTE_ADDR"],
                service_url=data["service_url"],
                last_heartbeat=timezone.now(),
            )
        # 새 서버가 온라인 상태입니다. 새 제출이 없을 때까지 기다리지 않도록 대기열을 처리합니다
        process_pending_task()

        return self.success()
Пример #7
0
 def put(self, request):
     is_disabled = request.data.get("is_disabled", False)
     JudgeServer.objects.filter(id=request.data["id"]).update(is_disabled=is_disabled)
     if not is_disabled:
         process_pending_task()
     return self.success()