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()
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()
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()
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()
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()
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()
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()