server-ts: Port backup service

This commit is contained in:
Elian Doran 2024-02-17 19:33:29 +02:00
parent 6b8ee084e6
commit 8936a3fa3b
No known key found for this signature in database
8 changed files with 23 additions and 21 deletions

View File

@ -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');

View File

@ -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) => {

View File

@ -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');

View File

@ -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,

View File

@ -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');

View File

@ -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

View File

@ -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');

View File

@ -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);