Centralize archive deletion loop; stagger different centralized loops slightly
This commit is contained in:
parent
2d84a02d48
commit
617a4ea7fc
4 changed files with 44 additions and 18 deletions
21
backend/src/data/Archives.ts
Normal file
21
backend/src/data/Archives.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import { getRepository, Repository } from "typeorm";
|
||||||
|
import { ArchiveEntry } from "./entities/ArchiveEntry";
|
||||||
|
import { BaseRepository } from "./BaseRepository";
|
||||||
|
|
||||||
|
export class Archives extends BaseRepository {
|
||||||
|
protected archives: Repository<ArchiveEntry>;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.archives = getRepository(ArchiveEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
public deleteExpiredArchives() {
|
||||||
|
this.archives
|
||||||
|
.createQueryBuilder()
|
||||||
|
.andWhere("expires_at IS NOT NULL")
|
||||||
|
.andWhere("expires_at <= NOW()")
|
||||||
|
.delete()
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,20 +27,6 @@ export class GuildArchives extends BaseGuildRepository {
|
||||||
constructor(guildId) {
|
constructor(guildId) {
|
||||||
super(guildId);
|
super(guildId);
|
||||||
this.archives = getRepository(ArchiveEntry);
|
this.archives = getRepository(ArchiveEntry);
|
||||||
|
|
||||||
// Clean expired archives at start and then every hour
|
|
||||||
this.deleteExpiredArchives();
|
|
||||||
setInterval(() => this.deleteExpiredArchives(), 1000 * 60 * 60);
|
|
||||||
}
|
|
||||||
|
|
||||||
private deleteExpiredArchives() {
|
|
||||||
this.archives
|
|
||||||
.createQueryBuilder()
|
|
||||||
.where("guild_id = :guild_id", { guild_id: this.guildId })
|
|
||||||
.andWhere("expires_at IS NOT NULL")
|
|
||||||
.andWhere("expires_at <= NOW()")
|
|
||||||
.delete()
|
|
||||||
.execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async find(id: string): Promise<ArchiveEntry | undefined> {
|
async find(id: string): Promise<ArchiveEntry | undefined> {
|
||||||
|
|
12
backend/src/data/loops/expiredArchiveDeletionLoop.ts
Normal file
12
backend/src/data/loops/expiredArchiveDeletionLoop.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { lazyMemoize, MINUTES } from "../../utils";
|
||||||
|
import { Archives } from "../Archives";
|
||||||
|
import moment from "moment-timezone";
|
||||||
|
|
||||||
|
const LOOP_INTERVAL = 15 * MINUTES;
|
||||||
|
const getArchivesRepository = lazyMemoize(() => new Archives());
|
||||||
|
|
||||||
|
export async function runExpiredArchiveDeletionLoop() {
|
||||||
|
console.log("[EXPIRED ARCHIVE DELETION LOOP] Deleting expired archives");
|
||||||
|
await getArchivesRepository().deleteExpiredArchives();
|
||||||
|
setTimeout(() => runExpiredArchiveDeletionLoop(), LOOP_INTERVAL);
|
||||||
|
}
|
|
@ -17,7 +17,7 @@ import { RecoverablePluginError } from "./RecoverablePluginError";
|
||||||
import { SimpleError } from "./SimpleError";
|
import { SimpleError } from "./SimpleError";
|
||||||
import { ZeppelinGlobalConfig, ZeppelinGuildConfig } from "./types";
|
import { ZeppelinGlobalConfig, ZeppelinGuildConfig } from "./types";
|
||||||
import { startUptimeCounter } from "./uptime";
|
import { startUptimeCounter } from "./uptime";
|
||||||
import { errorMessage, isDiscordAPIError, isDiscordHTTPError, SECONDS, successMessage } from "./utils";
|
import { errorMessage, isDiscordAPIError, isDiscordHTTPError, SECONDS, sleep, successMessage } from "./utils";
|
||||||
import { loadYamlSafely } from "./utils/loadYamlSafely";
|
import { loadYamlSafely } from "./utils/loadYamlSafely";
|
||||||
import { DecayingCounter } from "./utils/DecayingCounter";
|
import { DecayingCounter } from "./utils/DecayingCounter";
|
||||||
import { PluginNotLoadedError } from "knub/dist/plugins/PluginNotLoadedError";
|
import { PluginNotLoadedError } from "knub/dist/plugins/PluginNotLoadedError";
|
||||||
|
@ -28,6 +28,7 @@ import { runUpcomingRemindersLoop } from "./data/loops/upcomingRemindersLoop";
|
||||||
import { runUpcomingScheduledPostsLoop } from "./data/loops/upcomingScheduledPostsLoop";
|
import { runUpcomingScheduledPostsLoop } from "./data/loops/upcomingScheduledPostsLoop";
|
||||||
import { runExpiringTempbansLoop } from "./data/loops/expiringTempbansLoop";
|
import { runExpiringTempbansLoop } from "./data/loops/expiringTempbansLoop";
|
||||||
import { runExpiringVCAlertsLoop } from "./data/loops/expiringVCAlertsLoop";
|
import { runExpiringVCAlertsLoop } from "./data/loops/expiringVCAlertsLoop";
|
||||||
|
import { runExpiredArchiveDeletionLoop } from "./data/loops/expiredArchiveDeletionLoop";
|
||||||
|
|
||||||
if (!process.env.KEY) {
|
if (!process.env.KEY) {
|
||||||
// tslint:disable-next-line:no-console
|
// tslint:disable-next-line:no-console
|
||||||
|
@ -327,12 +328,18 @@ connect().then(async () => {
|
||||||
logRateLimit(data);
|
logRateLimit(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
bot.on("loadingFinished", () => {
|
bot.on("loadingFinished", async () => {
|
||||||
runExpiringMutesLoop();
|
runExpiringMutesLoop();
|
||||||
|
await sleep(10 * SECONDS);
|
||||||
runExpiringTempbansLoop();
|
runExpiringTempbansLoop();
|
||||||
runExpiringVCAlertsLoop();
|
await sleep(10 * SECONDS);
|
||||||
runUpcomingRemindersLoop();
|
|
||||||
runUpcomingScheduledPostsLoop();
|
runUpcomingScheduledPostsLoop();
|
||||||
|
await sleep(10 * SECONDS);
|
||||||
|
runUpcomingRemindersLoop();
|
||||||
|
await sleep(10 * SECONDS);
|
||||||
|
runExpiringVCAlertsLoop();
|
||||||
|
await sleep(10 * SECONDS);
|
||||||
|
runExpiredArchiveDeletionLoop();
|
||||||
});
|
});
|
||||||
|
|
||||||
bot.initialize();
|
bot.initialize();
|
||||||
|
|
Loading…
Add table
Reference in a new issue