Merge branch 'master' into newads

This commit is contained in:
Miodec 2023-03-06 17:25:09 +01:00
commit c32005ac2b
5 changed files with 69 additions and 56 deletions

View file

@ -5,24 +5,36 @@ import { getCurrentDayTimestamp, getCurrentWeekTimestamp } from "../utils/misc";
const QUEUE_NAME = "later";
type LaterTasks = "daily-leaderboard-results" | "weekly-xp-leaderboard-results";
export type LaterTaskType =
| "daily-leaderboard-results"
| "weekly-xp-leaderboard-results";
export interface LaterTask {
taskName: LaterTasks;
ctx: any;
export interface LaterTask<T extends LaterTaskType> {
taskName: LaterTaskType;
ctx: LaterTaskContexts[T];
}
export type LaterTaskContexts = {
"daily-leaderboard-results": {
yesterdayTimestamp: number;
modeRule: MonkeyTypes.ValidModeRule;
};
"weekly-xp-leaderboard-results": {
lastWeekTimestamp: number;
};
};
const ONE_MINUTE_IN_MILLISECONDS = 1000 * 60;
const ONE_DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;
class LaterQueue extends MonkeyQueue<LaterTask> {
class LaterQueue extends MonkeyQueue<LaterTask<LaterTaskType>> {
private scheduledJobCache = new LRUCache<string, boolean>({
max: 100,
});
private async scheduleTask(
taskName: string,
task: LaterTask,
task: LaterTask<LaterTaskType>,
jobId: string,
delay: number
): Promise<void> {
@ -41,9 +53,8 @@ class LaterQueue extends MonkeyQueue<LaterTask> {
}
async scheduleForNextWeek(
taskName: LaterTasks,
taskId: string,
taskContext?: any
taskName: LaterTaskType,
taskId: string
): Promise<void> {
const currentWeekTimestamp = getCurrentWeekTimestamp();
const jobId = `${taskName}:${currentWeekTimestamp}:${taskId}`;
@ -52,10 +63,9 @@ class LaterQueue extends MonkeyQueue<LaterTask> {
return;
}
const task: LaterTask = {
const task: LaterTask<LaterTaskType> = {
taskName,
ctx: {
...taskContext,
lastWeekTimestamp: currentWeekTimestamp,
},
};
@ -70,9 +80,9 @@ class LaterQueue extends MonkeyQueue<LaterTask> {
}
async scheduleForTomorrow(
taskName: LaterTasks,
taskName: LaterTaskType,
taskId: string,
taskContext: any
modeRule: MonkeyTypes.ValidModeRule
): Promise<void> {
const currentDayTimestamp = getCurrentDayTimestamp();
const jobId = `${taskName}:${currentDayTimestamp}:${taskId}`;
@ -81,10 +91,10 @@ class LaterQueue extends MonkeyQueue<LaterTask> {
return;
}
const task: LaterTask = {
const task: LaterTask<LaterTaskType> = {
taskName,
ctx: {
...taskContext,
modeRule,
yesterdayTimestamp: currentDayTimestamp,
},
};

View file

@ -101,9 +101,7 @@ export class DailyLeaderboard {
await LaterQueue.scheduleForTomorrow(
"daily-leaderboard-results",
this.leaderboardModeKey,
{
modeRule: this.modeRule,
}
this.modeRule
);
}

View file

@ -8,21 +8,16 @@ import { buildMonkeyMail } from "../utils/monkey-mail";
import { DailyLeaderboard } from "../utils/daily-leaderboards";
import { getCachedConfiguration } from "../init/configuration";
import { formatSeconds, getOrdinalNumberString, mapRange } from "../utils/misc";
import LaterQueue, { LaterTask } from "../queues/later-queue";
import LaterQueue, {
LaterTask,
LaterTaskContexts,
LaterTaskType,
} from "../queues/later-queue";
import { WeeklyXpLeaderboard } from "../services/weekly-xp-leaderboard";
import { recordTimeToCompleteJob } from "../utils/prometheus";
interface DailyLeaderboardMailContext {
yesterdayTimestamp: number;
modeRule: MonkeyTypes.ValidModeRule;
}
interface WeeklyXpLeaderboardResultContext {
lastWeekTimestamp: number;
}
async function handleDailyLeaderboardResults(
ctx: DailyLeaderboardMailContext
ctx: LaterTaskContexts["daily-leaderboard-results"]
): Promise<void> {
const { yesterdayTimestamp, modeRule } = ctx;
const { language, mode, mode2 } = modeRule;
@ -106,7 +101,7 @@ async function handleDailyLeaderboardResults(
}
async function handleWeeklyXpLeaderboardResults(
ctx: WeeklyXpLeaderboardResultContext
ctx: LaterTaskContexts["weekly-xp-leaderboard-results"]
): Promise<void> {
const {
leaderboards: { weeklyXp: weeklyXpConfig },
@ -184,15 +179,18 @@ async function handleWeeklyXpLeaderboardResults(
}
async function jobHandler(job: Job): Promise<void> {
const { taskName, ctx }: LaterTask = job.data;
const { taskName, ctx }: LaterTask<LaterTaskType> = job.data;
Logger.info(`Starting job: ${taskName}`);
const start = performance.now();
if (taskName === "daily-leaderboard-results") {
await handleDailyLeaderboardResults(ctx);
const taskCtx = ctx as LaterTaskContexts["daily-leaderboard-results"];
await handleDailyLeaderboardResults(taskCtx);
} else if (taskName === "weekly-xp-leaderboard-results") {
await handleWeeklyXpLeaderboardResults(ctx);
const taskCtx = ctx as LaterTaskContexts["weekly-xp-leaderboard-results"];
await handleWeeklyXpLeaderboardResults(taskCtx);
}
const elapsed = performance.now() - start;

View file

@ -2,7 +2,7 @@ import * as ActivePage from "../states/active-page";
let visible = false;
$(".scrollToTopButton").on("click", () => {
$(document).on("click", ".scrollToTopButton", () => {
window.scrollTo({ top: 0, behavior: "smooth" });
});

View file

@ -2151,6 +2151,31 @@
id="--bg-color"
/>
</div>
<label class="colorText">sub alt</label>
<div class="colorPicker inputAndButton">
<input
type="text"
value="#000000"
class="input"
id="--sub-alt-color-txt"
/>
<label
for="--sub-alt-color"
class="button"
style="
color: var(--text-color);
background: var(--sub-alt-color);
"
>
<i class="fas fa-fw fa-palette"></i>
</label>
<input
type="color"
class="color"
value="#000000"
id="--sub-alt-color"
/>
</div>
<label class="colorText">main</label>
<div class="colorPicker inputAndButton">
<input
@ -2169,24 +2194,6 @@
id="--main-color"
/>
</div>
<label class="colorText">caret</label>
<div class="colorPicker inputAndButton">
<input
type="text"
value="#000000"
class="input"
id="--caret-color-txt"
/>
<label for="--caret-color" class="button">
<i class="fas fa-fw fa-palette"></i>
</label>
<input
type="color"
class="color"
value="#000000"
id="--caret-color"
/>
</div>
<label class="colorText">sub</label>
<div class="colorPicker inputAndButton">
<input
@ -2205,22 +2212,22 @@
id="--sub-color"
/>
</div>
<label class="colorText">sub alt</label>
<label class="colorText">caret</label>
<div class="colorPicker inputAndButton">
<input
type="text"
value="#000000"
class="input"
id="--sub-alt-color-txt"
id="--caret-color-txt"
/>
<label for="--sub-alt-color" class="button">
<label for="--caret-color" class="button">
<i class="fas fa-fw fa-palette"></i>
</label>
<input
type="color"
class="color"
value="#000000"
id="--sub-alt-color"
id="--caret-color"
/>
</div>
<label class="colorText">text</label>