Files
ressourcenplanung/server/backup.js
T
admin 60a0928d2f Automatische Datenbank-Backups
Sichert die SQLite-Datenbank periodisch (Standard: alle 24h) nach
server/data/backups und räumt alte Sicherungen auf (Standard: 14
behalten). Zusätzlich per POST /api/backup manuell auslösbar.
2026-07-04 11:56:38 +02:00

43 lines
1.3 KiB
JavaScript

const path = require('path');
const fs = require('fs');
const db = require('./db');
const dataDir = path.join(__dirname, 'data');
const backupDir = path.join(dataDir, 'backups');
const INTERVAL_HOURS = Number(process.env.BACKUP_INTERVAL_HOURS) || 24;
const RETENTION_COUNT = Number(process.env.BACKUP_RETENTION_COUNT) || 14;
function timestamp() {
return new Date().toISOString().replace(/[:.]/g, '-');
}
async function runBackup() {
if (!fs.existsSync(backupDir)) fs.mkdirSync(backupDir, { recursive: true });
const target = path.join(backupDir, `data-${timestamp()}.db`);
await db.backup(target);
cleanupOldBackups();
console.log(`Backup geschrieben: ${target}`);
return target;
}
function cleanupOldBackups() {
const files = fs
.readdirSync(backupDir)
.filter((f) => f.startsWith('data-') && f.endsWith('.db'))
.sort();
const excess = files.length - RETENTION_COUNT;
for (let i = 0; i < excess; i++) {
fs.unlinkSync(path.join(backupDir, files[i]));
}
}
function startBackupScheduler() {
runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err));
setInterval(() => {
runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err));
}, INTERVAL_HOURS * 60 * 60 * 1000);
}
module.exports = { startBackupScheduler, runBackup };