From a0b0e59389e491001828c2895f930488af441775 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 7 Mar 2021 21:21:40 +0800 Subject: [PATCH] =?UTF-8?q?judge:=20daemon:=20=E4=B8=8A=E6=8A=A5=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrojudge/package.json | 2 +- packages/hydrojudge/setting.yaml | 4 ++++ packages/hydrojudge/src/hosts/hydro.ts | 13 ++++++++++++- packages/hydrojudge/src/service.ts | 4 +++- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/judge.ts | 3 +++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index e4884e366..6aee814ae 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.4.7", + "version": "2.4.8", "os": [ "linux" ], diff --git a/packages/hydrojudge/setting.yaml b/packages/hydrojudge/setting.yaml index 3b7d55fd3..13331a25d 100644 --- a/packages/hydrojudge/setting.yaml +++ b/packages/hydrojudge/setting.yaml @@ -34,6 +34,10 @@ parallelism: type: number name: Runner parallelism default: 2 +disable: + type: boolean + name: Disable builtin judge + default: false langs: type: textarea name: Language file settings diff --git a/packages/hydrojudge/src/hosts/hydro.ts b/packages/hydrojudge/src/hosts/hydro.ts index e505f3b8a..b4b4075da 100644 --- a/packages/hydrojudge/src/hosts/hydro.ts +++ b/packages/hydrojudge/src/hosts/hydro.ts @@ -14,6 +14,7 @@ import { FormatError, CompileError, SystemError } from '../error'; import { STATUS_COMPILE_ERROR, STATUS_SYSTEM_ERROR } from '../status'; import readCases from '../cases'; import judge from '../judge'; +import * as sysinfo from '../sysinfo'; class JudgeTask { stat: Record; @@ -258,7 +259,17 @@ export default class Hydro { }, 30000); }); await new Promise((resolve) => { - this.ws.once('open', () => { resolve(null); }); + this.ws.once('open', async () => { + if (!this.config.noStatus) { + const info = await sysinfo.get(); + this.ws.send(JSON.stringify({ key: 'status', info })); + setInterval(async () => { + const [mid, inf] = await sysinfo.update(); + this.ws.send(JSON.stringify({ key: 'status', info: { mid, ...inf } })); + }, 1200000); + } + resolve(null); + }); }); log.info(`[${this.config.host}] 已连接`); } diff --git a/packages/hydrojudge/src/service.ts b/packages/hydrojudge/src/service.ts index 94c5f0818..47ebdb53e 100644 --- a/packages/hydrojudge/src/service.ts +++ b/packages/hydrojudge/src/service.ts @@ -26,6 +26,7 @@ declare module 'hydrooj/dist/interface' { 'hydrojudge.testcases_max': number, 'hydrojudge.total_time_limit': number, 'hydrojudge.parallelism': number, + 'hydrojudge.disable': boolean, } } @@ -37,10 +38,11 @@ async function postInit() { const judge = require('./judge'); const sysinfo = require('./sysinfo'); - const { task } = global.Hydro.model; + const { task, system } = global.Hydro.model; const { storage } = global.Hydro.service; const _judge = global.Hydro.handler.judge as any; + if (system.get('hydrojudge.disable')) return; const info = await sysinfo.get(); monitor.updateJudger(info); setInterval(async () => { diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index c18cb90f0..6de59e9e1 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.20.4", + "version": "2.20.5", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index 6ce9b5f08..7bfe7e617 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -13,6 +13,7 @@ import { Route, Handler, Connection, ConnectionHandler, post, Types, } from '../service/server'; import storage from '../service/storage'; +import { updateJudger } from '../service/monitor'; const logger = new Logger('judge'); @@ -134,6 +135,8 @@ class JudgeConnectionHandler extends ConnectionHandler { await end({ judger: this.user._id, ...msg }); this.processing = null; await this.newTask(); + } else if (msg.key === 'status') { + await updateJudger(msg.info); } }