Files
backupService/backup.js
sebseb7 48f1fae32e x
2025-09-16 09:02:58 +02:00

105 lines
3.5 KiB
JavaScript

require('dotenv').config();
const {
createDatabaseBackup,
downloadBackupFile,
downloadBackupFileSMB,
sendTelegramBroadcast,
formatBytes,
config: sqlConfig
} = require('./index.js');
const fs = require('fs');
const path = require('path');
async function createAndDownloadBackup() {
try {
console.log('='.repeat(50));
console.log('FRESH BACKUP CREATION');
console.log('='.repeat(50));
console.log(`Database: ${process.env.MSSQL_DATABASE}`);
console.log(`Server: ${process.env.MSSQL_SERVER}:${process.env.MSSQL_PORT}`);
console.log('');
// Step 1: Create fresh backup on SQL Server
console.log('Step 1: Creating fresh database backup on SQL Server...');
const serverBackupPath = await createDatabaseBackup();
console.log(`Backup created on server: ${serverBackupPath}`);
console.log('');
// Step 2: Download the backup file to local folder
console.log('Step 2: Downloading backup file to local folder...');
// Try SCP first, fall back to SMB if it fails
let localBackupPath;
try {
localBackupPath = await downloadBackupFile();
console.log(`Backup downloaded via SCP to: ${localBackupPath}`);
} catch (scpError) {
console.log('SCP download failed, falling back to SMB...');
console.log(`SCP error: ${scpError.message}`);
localBackupPath = await downloadBackupFileSMB();
console.log(`Backup downloaded via SMB to: ${localBackupPath}`);
}
console.log('');
// Step 3: Check local file and show details
if (fs.existsSync(localBackupPath)) {
const stats = fs.statSync(localBackupPath);
const absolutePath = path.resolve(localBackupPath);
console.log('='.repeat(50));
console.log('BACKUP COMPLETED SUCCESSFULLY');
console.log('='.repeat(50));
console.log(`Local file: ${absolutePath}`);
console.log(`File size: ${formatBytes(stats.size)}`);
console.log(`Created: ${stats.ctime.toISOString()}`);
console.log('');
// Send success notification
const when = new Date().toISOString();
const msg = `Fresh backup created and downloaded ✅\nDB: ${process.env.MSSQL_DATABASE}\nFile: ${localBackupPath}\nSize: ${formatBytes(stats.size)}\nServer: ${process.env.MSSQL_SERVER}:${process.env.MSSQL_PORT}\nTime: ${when}`;
await sendTelegramBroadcast('all', msg);
return {
success: true,
localPath: absolutePath,
serverPath: serverBackupPath,
size: stats.size,
database: process.env.MSSQL_DATABASE
};
} else {
throw new Error(`Local backup file not found: ${localBackupPath}`);
}
} catch (err) {
console.error('');
console.error('='.repeat(50));
console.error('BACKUP FAILED');
console.error('='.repeat(50));
console.error('Error:', err.message);
console.error('');
// Send error notification
const when = new Date().toISOString();
const msg = `Fresh backup failed 🔴\nDB: ${process.env.MSSQL_DATABASE}\nServer: ${process.env.MSSQL_SERVER}:${process.env.MSSQL_PORT}\nTime: ${when}\nError: ${err.message}`;
await sendTelegramBroadcast('errors', msg);
throw err;
}
}
// Run if called directly
if (require.main === module) {
createAndDownloadBackup()
.then((result) => {
console.log('Fresh backup process completed successfully!');
console.log(`Ready to use: ${result.localPath}`);
process.exit(0);
})
.catch((error) => {
console.error('Fresh backup process failed:', error.message);
process.exit(1);
});
}
module.exports = { createAndDownloadBackup };