From 93fd7f97c500631e8edf7e35c9ce380880341055 Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 13 Apr 2022 14:28:11 +0800 Subject: [PATCH] core: support auto delete submission files --- packages/hydrooj/package.json | 6 +++--- packages/hydrooj/src/model/storage.ts | 12 +++++++++++- packages/hydrooj/src/service/server.ts | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index e692a0611..44ec9cb32 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.11.17", + "version": "3.11.18", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", @@ -45,7 +45,7 @@ "notp": "^2.0.3", "p-queue": "^7.2.0", "require-resolve-hook": "^1.1.0", - "semver": "^7.3.5", + "semver": "^7.3.6", "serialize-javascript": "^6.0.0", "sockjs": "^0.3.24", "source-map-support": "^0.5.21", @@ -73,7 +73,7 @@ "@types/sockjs": "^0.3.33", "@types/source-map-support": "^0.5.4", "@types/superagent": "^4.1.15", - "moment": "^2.29.1", + "moment": "^2.29.2", "pm2": "^5.2.0" }, "peerDependencies": { diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index eec781a54..d35ffd91e 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -102,6 +102,16 @@ export class StorageModel { } async function cleanFiles() { + const submissionKeepDate = system.get('submission.saveDays'); + if (submissionKeepDate) { + const shouldDelete = moment().subtract(submissionKeepDate, 'day').toDate(); + const res = await StorageModel.coll.find({ + path: /^submission\//g, + lastModified: { $lt: shouldDelete }, + }).toArray(); + const paths = res.map((i) => i.path); + await StorageModel.del(paths); + } if (system.get('server.keepFiles')) return; let res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } }); while (res.value) { @@ -122,7 +132,7 @@ bus.once('app/started', async () => { await TaskModel.add({ type: 'schedule', subType: 'storage.prune', - executeAfter: moment().minute(0).second(0).millisecond(0).toDate(), + executeAfter: moment().startOf('hour').toDate(), interval: [1, 'hour'], }); } diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index ccaf42e3e..f175ff810 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -519,7 +519,7 @@ export class Handler extends HandlerCommon { async init({ domainId }) { let error; - if (!argv.options.benchmark && !this.notUsage) await this.limitRate('global', 10, 88); + if (!argv.options.benchmark && !this.notUsage) await this.limitRate('global', 5, 88); const [absoluteDomain, inferDomain, bdoc] = await Promise.all([ domain.get(domainId), domain.getByHost(this.request.host),