From 4707842642045d3b745b60db0bc7388037a4c001 Mon Sep 17 00:00:00 2001 From: Andrew Rumble Date: Wed, 26 Mar 2025 10:41:56 +0000 Subject: [PATCH] Add functions for monitoring backup status of db records GitOrigin-RevId: f0d3564dfd3b38ef9ee451de866c0c05acd0cb20 --- .../backupVerifier/ProjectMetrics.mjs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 services/history-v1/backupVerifier/ProjectMetrics.mjs diff --git a/services/history-v1/backupVerifier/ProjectMetrics.mjs b/services/history-v1/backupVerifier/ProjectMetrics.mjs new file mode 100644 index 0000000000..cfa74a8473 --- /dev/null +++ b/services/history-v1/backupVerifier/ProjectMetrics.mjs @@ -0,0 +1,35 @@ +import Metrics from '@overleaf/metrics' +import { objectIdFromDate } from './utils.mjs' +import { db } from '../storage/lib/mongodb.js' + +const projectsCollection = db.collection('projects') + +/** + * + * @param {Date} beforeTime + * @return {Promise} + */ +export async function measurePendingChangesBeforeTime(beforeTime) { + const pendingChangeCount = await projectsCollection.countDocuments({ + 'overleaf.backup.pendingChangeAt': { + $lt: beforeTime, + }, + }) + + Metrics.gauge('backup_verification_pending_changes', pendingChangeCount) +} + +/** + * + * @param {number} graceSeconds - Number of seconds projects are allowed before they must be backed up. + * @return {Promise} + */ +export async function measureNeverBackedUpProjects(graceSeconds) { + const now = new Date() + const startOfGracePeriod = new Date(now - graceSeconds * 1000) + const neverBackedUpCount = await projectsCollection.countDocuments({ + 'overleaf.backup.lastBackedUpVersion': null, + _id: { $lt: objectIdFromDate(startOfGracePeriod) }, + }) + Metrics.gauge('backup_verification_never_backed_up', neverBackedUpCount) +}