From 87d8dce5284b75fef0a419349b6801c55a61448b Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 19 Apr 2021 13:01:32 +0800 Subject: [PATCH] core: fix level & bus event payload --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/script/rating.ts | 6 ++---- packages/hydrooj/src/service/bus.ts | 5 ++++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 14a0ddc34..56792e584 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.23.4", + "version": "2.23.5", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/script/rating.ts b/packages/hydrooj/src/script/rating.ts index 4127b9a7e..27f6125c6 100644 --- a/packages/hydrooj/src/script/rating.ts +++ b/packages/hydrooj/src/script/rating.ts @@ -110,13 +110,11 @@ export async function calcLevel(domainId: string, report: Function) { report({ message: 'Updating users levelled {0}'.format(levels[i][0]) }); const query: FilterQuery = { domainId, - $and: [{ rank: { $lte: levels[i][1] } }], + $and: [{ rank: { $lte: (levels[i][1] * rank) / 100 } }], }; - if (i < levels.length - 1) query.$and.push({ rank: { $gt: levels[i + 1][1] } }); + if (i < levels.length - 1) query.$and.push({ rank: { $gt: (levels[i + 1][1] * rank) / 100 } }); bulk.find(query).update({ $set: { level: levels[i][0] } }); } - const i = levels.length - 1; - bulk.find({ domainId, rank: { $lte: levels[i][1] } }).update({ $set: { level: levels[i][0] } }); await bulk.execute(); } diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 902b3cb3f..436de9298 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -1,6 +1,7 @@ /* eslint-disable no-await-in-loop */ import cluster from 'cluster'; import type { Db, FilterQuery, OnlyFieldsOfType } from 'mongodb'; +import serialize from 'serialize-javascript'; import { argv } from 'yargs'; import type { Handler } from './server'; import { Logger } from '../logger'; @@ -179,13 +180,15 @@ export function boardcast(event: K, ...payload: Parame process.send({ event: 'bus', eventName: event, - payload, + payload: serialize(payload), }); } else parallel(event, ...payload); } async function messageHandler(worker: cluster.Worker, msg: any) { if (!msg) msg = worker; + // eslint-disable-next-line no-eval + if (typeof msg.payload === 'string') msg.payload = eval(msg.payload); if (msg.event) { if (msg.event === 'bus') { if (cluster.isMaster) {