diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 0b0d5e21..2ea0683e 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.21.9", + "version": "2.21.10", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 5465c8d0..6b30042d 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -7,6 +7,7 @@ import problem from '../model/problem'; import record from '../model/record'; import * as contest from '../model/contest'; import user from '../model/user'; +import TaskModel from '../model/task'; import paginate from '../lib/paginate'; import * as bus from '../service/bus'; import { @@ -66,7 +67,10 @@ class RecordListHandler extends RecordHandler { filterUidOrName: uidOrName, }; if (this.user.hasPriv(PRIV.PRIV_VIEW_JUDGE_STATISTICS)) { - this.response.body.statistics = await record.stat(all ? undefined : domainId); + this.response.body.statistics = { + ...await record.stat(all ? undefined : domainId), + delay: await TaskModel.getDelay({ type: 'judge' }), + }; } } } diff --git a/packages/hydrooj/src/model/task.ts b/packages/hydrooj/src/model/task.ts index a4740288..7bb2e4f7 100644 --- a/packages/hydrooj/src/model/task.ts +++ b/packages/hydrooj/src/model/task.ts @@ -48,6 +48,13 @@ class TaskModel { return null; } + static async getDelay(query?: FilterQuery) { + const now = new Date(); + const [res] = await coll.find(query).sort({ executeAfter: 1 }).limit(1).toArray(); + if (res) return [Math.max(0, now.getTime() - res.executeAfter.getTime()), res.executeAfter]; + return [0, now]; + } + static async consume(query: any, cb: Function) { let isRunning = false; const interval = setInterval(async () => { diff --git a/packages/ui-default/backendlib/template.js b/packages/ui-default/backendlib/template.js index 3ebb8b72..2b677e32 100644 --- a/packages/ui-default/backendlib/template.js +++ b/packages/ui-default/backendlib/template.js @@ -169,12 +169,13 @@ env.addGlobal('datetimeSpan', misc.datetimeSpan); env.addGlobal('paginate', misc.paginate); env.addGlobal('size', misc.size); env.addGlobal('gravatar', misc.gravatar); +env.addGlobal('formatSeconds', misc.formatSeconds); env.addGlobal('model', global.Hydro.model); env.addGlobal('ui', global.Hydro.ui); env.addGlobal('isIE', (str) => str.includes('MSIE') || str.includes('rv:11.0')); env.addGlobal('set', (obj, key, val) => { if (val !== undefined) obj[key] = val; - else obj = { ...obj, key }; + else Object.assign(obj, key); return ''; }); env.addGlobal('findSubModule', (prefix) => { diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 9d06361d..502fbdec 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.5.7", + "version": "4.5.8", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/record_main.html b/packages/ui-default/templates/record_main.html index e1f79267..b167ab2d 100644 --- a/packages/ui-default/templates/record_main.html +++ b/packages/ui-default/templates/record_main.html @@ -93,6 +93,7 @@
+
{{ _('Delay')}}
{{ formatSeconds(statistics.delay[0] / 1000) }}
{{ _('5 Min')}}
{{ statistics['d5min'] }}
{{ _('1 Hour')}}
{{ statistics['d1h'] }}
{{ _('Day') }}
{{ statistics['day'] }}