mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: add RecordDetailHandler.postCancel
judge: allow judge without config
This commit is contained in:
1 parent
e3266ca9e6
commit
ee62870e70
8 files changed
+31
-13
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@hydrooj/hydrojudge",
|
"name": "@hydrooj/hydrojudge",
|
||||||
"bin": "bin/hydrojudge.js",
|
"bin": "bin/hydrojudge.js",
|
||||||
"version": "2.1.8",
|
"version": "2.1.9",
|
||||||
"main": "package.json",
|
"main": "package.json",
|
||||||
"author": "masnn",
|
"author": "masnn",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ function convertIniConfig(ini: string) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function readCases(folder: string, cfg: Record<string, any>, args) {
|
export default async function readCases(folder: string, cfg: Record<string, any> = {}, args) {
|
||||||
const iniConfig = path.resolve(folder, 'config.ini');
|
const iniConfig = path.resolve(folder, 'config.ini');
|
||||||
const yamlConfig = path.resolve(folder, 'config.yaml');
|
const yamlConfig = path.resolve(folder, 'config.yaml');
|
||||||
let config;
|
let config;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function judgeCase(c) {
|
|||||||
status = STATUS.STATUS_RUNTIME_ERROR;
|
status = STATUS.STATUS_RUNTIME_ERROR;
|
||||||
if (code < 32) message = signals[code];
|
if (code < 32) message = signals[code];
|
||||||
else message = `您的程序返回了 ${code}.`;
|
else message = `您的程序返回了 ${code}.`;
|
||||||
} else[status, score, message] = resInteractor.files.stderr.split('\n');
|
} else [status, score, message] = resInteractor.files.stderr.split('\n');
|
||||||
ctxSubtask.score = Score[ctxSubtask.subtask.type](ctxSubtask.score, score);
|
ctxSubtask.score = Score[ctxSubtask.subtask.type](ctxSubtask.score, score);
|
||||||
ctxSubtask.status = Math.max(ctxSubtask.status, status);
|
ctxSubtask.status = Math.max(ctxSubtask.status, status);
|
||||||
ctx.total_time_usage_ms += time_usage_ms;
|
ctx.total_time_usage_ms += time_usage_ms;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ declare module 'hydrooj/dist/interface' {
|
|||||||
|
|
||||||
async function postInit() {
|
async function postInit() {
|
||||||
// Only start a single daemon
|
// Only start a single daemon
|
||||||
if (!cluster.isFirstWorker) return;
|
if (!global.Hydro.isFirstWorker) return;
|
||||||
const { compilerText } = require('./utils');
|
const { compilerText } = require('./utils');
|
||||||
const tmpfs = require('./tmpfs');
|
const tmpfs = require('./tmpfs');
|
||||||
const { FormatError, CompileError, SystemError } = require('./error');
|
const { FormatError, CompileError, SystemError } = require('./error');
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "hydrooj",
|
"name": "hydrooj",
|
||||||
"version": "2.13.27",
|
"version": "2.13.28",
|
||||||
"bin": "bin/hydrooj.js",
|
"bin": "bin/hydrooj.js",
|
||||||
"main": "dist/loader.js",
|
"main": "dist/loader.js",
|
||||||
"typings": "dist/loader.d.ts",
|
"typings": "dist/loader.d.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ObjectID } from 'mongodb';
|
import { ObjectID } from 'mongodb';
|
||||||
import { PermissionError, RecordNotFoundError } from '../error';
|
import { PermissionError, RecordNotFoundError } from '../error';
|
||||||
import { PERM, CONSTANT } from '../model/builtin';
|
import { PERM, CONSTANT, STATUS } from '../model/builtin';
|
||||||
import * as problem from '../model/problem';
|
import * as problem from '../model/problem';
|
||||||
import * as file from '../model/file';
|
import * as file from '../model/file';
|
||||||
import * as record from '../model/record';
|
import * as record from '../model/record';
|
||||||
@@ -97,6 +97,27 @@ class RecordDetailHandler extends RecordHandler {
|
|||||||
}
|
}
|
||||||
this.back();
|
this.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@param('rid', Types.ObjectID)
|
||||||
|
async postCancel(domainId: string, rid: ObjectID) {
|
||||||
|
const rdoc = await record.get(domainId, rid);
|
||||||
|
if (rdoc) {
|
||||||
|
const $set = {
|
||||||
|
status: STATUS.STATUS_CANCELED,
|
||||||
|
score: 0,
|
||||||
|
time: 0,
|
||||||
|
memory: 0,
|
||||||
|
testCases: [{
|
||||||
|
status: 9, score: 0, time: 0, memory: 0, message: 'score canceled',
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
await Promise.all([
|
||||||
|
record.update(domainId, rid, $set),
|
||||||
|
bus.emit('record/change', rdoc, $set),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
this.back();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RecordHackHandler extends Handler {
|
class RecordHackHandler extends Handler {
|
||||||
@@ -130,11 +151,11 @@ class RecordHackHandler extends Handler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
* use RecordDetailHandler.postRejudge instead.
|
||||||
*/
|
*/
|
||||||
class RecordRejudgeHandler extends Handler {
|
class RecordRejudgeHandler extends Handler {
|
||||||
@param('rid', Types.ObjectID)
|
@param('rid', Types.ObjectID)
|
||||||
async post(domainId: string, rid: ObjectID) {
|
async post(domainId: string, rid: ObjectID) {
|
||||||
this.checkPerm(PERM.PERM_REJUDGE);
|
|
||||||
const rdoc = await record.get(domainId, rid);
|
const rdoc = await record.get(domainId, rid);
|
||||||
if (rdoc) {
|
if (rdoc) {
|
||||||
await record.reset(domainId, rid, true);
|
await record.reset(domainId, rid, true);
|
||||||
|
|||||||
@@ -569,12 +569,9 @@ declare global {
|
|||||||
error: typeof import('./error'),
|
error: typeof import('./error'),
|
||||||
Logger: typeof import('./logger'),
|
Logger: typeof import('./logger'),
|
||||||
locales: Dict<Dict<string>>,
|
locales: Dict<Dict<string>>,
|
||||||
|
isFirstWorker: boolean,
|
||||||
},
|
},
|
||||||
addons: string[],
|
addons: string[],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module 'cluster' {
|
|
||||||
let isFirstWorker: boolean;
|
|
||||||
}
|
|
||||||
@@ -228,8 +228,8 @@ export async function load() {
|
|||||||
await entry({ entry: argv.entry as string });
|
await entry({ entry: argv.entry as string });
|
||||||
logger.success(`Worker ${process.pid} Started as ${argv.entry}`);
|
logger.success(`Worker ${process.pid} Started as ${argv.entry}`);
|
||||||
} else {
|
} else {
|
||||||
if (argv.firstWorker) cluster.isFirstWorker = true;
|
if (argv.firstWorker) global.Hydro.isFirstWorker = true;
|
||||||
else cluster.isFirstWorker = false;
|
else global.Hydro.isFirstWorker = false;
|
||||||
logger.info(`Worker ${process.pid} Starting`);
|
logger.info(`Worker ${process.pid} Starting`);
|
||||||
await entry({ entry: 'worker' });
|
await entry({ entry: 'worker' });
|
||||||
logger.success(`Worker ${process.pid} Started`);
|
logger.success(`Worker ${process.pid} Started`);
|
||||||
|
|||||||
Reference in new issue
Block a user