diff --git a/backend/src/jobs/index.ts b/backend/src/jobs/index.ts index 803c614be..b6a1bdfad 100644 --- a/backend/src/jobs/index.ts +++ b/backend/src/jobs/index.ts @@ -1,4 +1,5 @@ import updateLeaderboards from "./update-leaderboards"; import deleteOldLogs from "./delete-old-logs"; +import logCollectionSizes from "./log-collection-sizes"; -export default [updateLeaderboards, deleteOldLogs]; +export default [updateLeaderboards, deleteOldLogs, logCollectionSizes]; diff --git a/backend/src/jobs/log-collection-sizes.ts b/backend/src/jobs/log-collection-sizes.ts new file mode 100644 index 000000000..051b33689 --- /dev/null +++ b/backend/src/jobs/log-collection-sizes.ts @@ -0,0 +1,25 @@ +import { CronJob } from "cron"; +import * as db from "../init/db"; +import * as Prometheus from "../utils/prometheus"; + +const CRON_SCHEDULE = "0 0 * * * *"; + +function main(): void { + Promise.all([ + set("ape-keys"), + set("configs"), + set("errors"), + set("logs"), + set("presets"), + set("reports"), + set("results"), + set("users"), + ]); +} + +async function set(collection: string): Promise { + const size = await db.collection(collection).estimatedDocumentCount(); + Prometheus.setCollectionSize(collection, size); +} + +export default new CronJob(CRON_SCHEDULE, main); diff --git a/backend/src/utils/prometheus.ts b/backend/src/utils/prometheus.ts index 4cf95f759..619e3cdd2 100644 --- a/backend/src/utils/prometheus.ts +++ b/backend/src/utils/prometheus.ts @@ -267,3 +267,13 @@ const uidRequestCount = new Counter({ export function recordRequestForUid(uid: string): void { uidRequestCount.inc({ uid }); } + +const collectionSize = new Gauge({ + name: "db_collection_size", + help: "Size of a collection", + labelNames: ["collection"], +}); + +export function setCollectionSize(collection: string, size: number): void { + collectionSize.set({ collection }, size); +}