From 8936a3fa3b62d9f3d8e7726f9c874639601acbfd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 17 Feb 2024 19:33:29 +0200 Subject: [PATCH] server-ts: Port backup service --- src/app.js | 2 +- src/etapi/backup.js | 2 +- src/routes/api/database.js | 2 +- src/routes/routes.js | 2 +- src/services/backend_script_api.js | 2 +- src/services/{backup.js => backup.ts} | 28 ++++++++++++++------------- src/services/migration.js | 2 +- src/services/sql_init.js | 4 ++-- 8 files changed, 23 insertions(+), 21 deletions(-) rename src/services/{backup.js => backup.ts} (74%) diff --git a/src/app.js b/src/app.js index a2e7b4f31..5ef616538 100644 --- a/src/app.js +++ b/src/app.js @@ -46,7 +46,7 @@ require('./routes/error_handlers.js').register(app); require('./services/sync.js'); // triggers backup timer -require('./services/backup.js'); +require('./services/backup'); // trigger consistency checks timer require('./services/consistency_checks.js'); diff --git a/src/etapi/backup.js b/src/etapi/backup.js index 2897c36b2..7900570c4 100644 --- a/src/etapi/backup.js +++ b/src/etapi/backup.js @@ -1,5 +1,5 @@ const eu = require('./etapi_utils'); -const backupService = require('../services/backup.js'); +const backupService = require('../services/backup'); function register(router) { eu.route(router, 'put', '/etapi/backup/:backupName', async (req, res, next) => { diff --git a/src/routes/api/database.js b/src/routes/api/database.js index 566e2e468..4ea27e8ad 100644 --- a/src/routes/api/database.js +++ b/src/routes/api/database.js @@ -2,7 +2,7 @@ const sql = require('../../services/sql'); const log = require('../../services/log'); -const backupService = require('../../services/backup.js'); +const backupService = require('../../services/backup'); const anonymizationService = require('../../services/anonymization'); const consistencyChecksService = require('../../services/consistency_checks.js'); diff --git a/src/routes/routes.js b/src/routes/routes.js index c3120d657..cd323231c 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -69,7 +69,7 @@ const etapiBranchRoutes = require('../etapi/branches.js'); const etapiNoteRoutes = require('../etapi/notes.js'); const etapiSpecialNoteRoutes = require('../etapi/special_notes.js'); const etapiSpecRoute = require('../etapi/spec.js'); -const etapiBackupRoute = require('../etapi/backup.js'); +const etapiBackupRoute = require('../etapi/backup'); const csrfMiddleware = csurf({ cookie: true, diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index b67f970ea..66408f367 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -20,7 +20,7 @@ const specialNotesService = require('./special_notes.js'); const branchService = require('./branches.js'); const exportService = require('./export/zip.js'); const syncMutex = require('./sync_mutex'); -const backupService = require('./backup.js'); +const backupService = require('./backup'); const optionsService = require('./options'); diff --git a/src/services/backup.js b/src/services/backup.ts similarity index 74% rename from src/services/backup.js rename to src/services/backup.ts index 7fa41eb5e..3000c9c9a 100644 --- a/src/services/backup.js +++ b/src/services/backup.ts @@ -1,14 +1,16 @@ "use strict"; -const dateUtils = require('./date_utils'); -const optionService = require('./options'); -const fs = require('fs-extra'); -const dataDir = require('./data_dir'); -const log = require('./log'); -const syncMutexService = require('./sync_mutex'); -const cls = require('./cls'); -const sql = require('./sql'); -const path = require('path'); +import dateUtils = require('./date_utils'); +import optionService = require('./options'); +import fs = require('fs-extra'); +import dataDir = require('./data_dir'); +import log = require('./log'); +import syncMutexService = require('./sync_mutex'); +import cls = require('./cls'); +import sql = require('./sql'); +import path = require('path'); + +type BackupType = ("daily" | "weekly" | "monthly"); function getExistingBackups() { if (!fs.existsSync(dataDir.BACKUP_DIR)) { @@ -35,13 +37,13 @@ function regularBackup() { }); } -function isBackupEnabled(backupType) { +function isBackupEnabled(backupType: BackupType) { const optionName = `${backupType}BackupEnabled`; return optionService.getOptionBool(optionName); } -function periodBackup(optionName, backupType, periodInSeconds) { +function periodBackup(optionName: string, backupType: BackupType, periodInSeconds: number) { if (!isBackupEnabled(backupType)) { return; } @@ -56,7 +58,7 @@ function periodBackup(optionName, backupType, periodInSeconds) { } } -async function backupNow(name) { +async function backupNow(name: string) { // we don't want to back up DB in the middle of sync with potentially inconsistent DB state return await syncMutexService.doExclusively(async () => { const backupFile = `${dataDir.BACKUP_DIR}/backup-${name}.db`; @@ -73,7 +75,7 @@ if (!fs.existsSync(dataDir.BACKUP_DIR)) { fs.mkdirSync(dataDir.BACKUP_DIR, 0o700); } -module.exports = { +export = { getExistingBackups, backupNow, regularBackup diff --git a/src/services/migration.js b/src/services/migration.js index 95105270d..fc6c04443 100644 --- a/src/services/migration.js +++ b/src/services/migration.js @@ -1,4 +1,4 @@ -const backupService = require('./backup.js'); +const backupService = require('./backup'); const sql = require('./sql'); const fs = require('fs-extra'); const log = require('./log'); diff --git a/src/services/sql_init.js b/src/services/sql_init.js index da28b35d8..201b9432b 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -166,10 +166,10 @@ dbReady.then(() => { return; } - setInterval(() => require('./backup.js').regularBackup(), 4 * 60 * 60 * 1000); + setInterval(() => require('./backup').regularBackup(), 4 * 60 * 60 * 1000); // kickoff first backup soon after start up - setTimeout(() => require('./backup.js').regularBackup(), 5 * 60 * 1000); + setTimeout(() => require('./backup').regularBackup(), 5 * 60 * 1000); // optimize is usually inexpensive no-op, so running it semi-frequently is not a big deal setTimeout(() => optimize(), 60 * 60 * 1000);