diff --git a/download.js b/download.js new file mode 100644 index 0000000..ad8f711 --- /dev/null +++ b/download.js @@ -0,0 +1,45 @@ +require('dotenv').config(); +const { + downloadBackupFile, + compressBackupFile, + formatBytes, + sendTelegramBroadcast +} = require('./index.js'); + +async function downloadOnly() { + try { + console.log('Starting download process...'); + + // Download backup file from SMB share + const localBackupFile = await downloadBackupFile(); + console.log('Download completed:', localBackupFile); + + // Optionally compress the file + if (process.argv.includes('--compress')) { + const compressedFile = await compressBackupFile(localBackupFile); + console.log('Compression completed:', compressedFile); + + // Optionally send notification + if (process.argv.includes('--notify')) { + await sendTelegramBroadcast('all', `Backup downloaded and compressed ✅\nFile: ${compressedFile}`); + } + } else if (process.argv.includes('--notify')) { + await sendTelegramBroadcast('all', `Backup downloaded ✅\nFile: ${localBackupFile}`); + } + + } catch (error) { + console.error('Download failed:', error); + + // Optionally notify on error + if (process.argv.includes('--notify')) { + await sendTelegramBroadcast('errors', `Download failed 🔴\nError: ${error.message}`); + } + } +} + +// Run if called directly +if (require.main === module) { + downloadOnly(); +} + +module.exports = { downloadOnly }; diff --git a/index.js b/index.js index 8795c42..0961ae5 100644 --- a/index.js +++ b/index.js @@ -310,44 +310,59 @@ async function runBackupProcess() { } } -// Run backup immediately when starting -(async () => { - try { - const latestBackupTime = await getLatestBackupTime(); - const now = new Date(); - let delay = 0; +// Only run startup logic if this file is executed directly (not imported) +if (require.main === module) { + // Run backup immediately when starting + (async () => { + try { + const latestBackupTime = await getLatestBackupTime(); + const now = new Date(); + let delay = 0; - if (latestBackupTime) { - const nextBackupTime = new Date(latestBackupTime.getTime() + 86400000); - if (nextBackupTime > now) { - delay = nextBackupTime - now; - console.log(`Scheduling first backup in ${Math.floor(delay / 3600000)} hours.`); + if (latestBackupTime) { + const nextBackupTime = new Date(latestBackupTime.getTime() + 86400000); + if (nextBackupTime > now) { + delay = nextBackupTime - now; + console.log(`Scheduling first backup in ${Math.floor(delay / 3600000)} hours.`); + } } - } - if (delay > 0) { - setTimeout(runBackupProcess, delay); - } else { + if (delay > 0) { + setTimeout(runBackupProcess, delay); + } else { + runBackupProcess(); + } + } catch (err) { + console.error('Error during startup check, proceeding with backup:', err); runBackupProcess(); } - } catch (err) { - console.error('Error during startup check, proceeding with backup:', err); - runBackupProcess(); - } -})(); + })(); + console.log('Database backup service started. Running backups every 24 hours.'); -console.log('Database backup service started. Running backups every 24 hours.'); + // Startup health notification + (async () => { + try { + const when = new Date().toISOString(); + const host = require('os').hostname(); + const region = process.env.AWS_REGION || 'n/a'; + const bucket = process.env.S3_BUCKET_NAME || 'n/a'; + await sendTelegramBroadcast('all', `Backup service started ✅\nDB: ${process.env.MSSQL_DATABASE}\nHost: ${host}\nAWS: ${region}/${bucket}\nTime: ${when}`); + } catch (e) { + console.warn('Startup broadcast failed:', e.message); + } + })(); +} -// Startup health notification -(async () => { - try { - const when = new Date().toISOString(); - const host = require('os').hostname(); - const region = process.env.AWS_REGION || 'n/a'; - const bucket = process.env.S3_BUCKET_NAME || 'n/a'; - await sendTelegramBroadcast('all', `Backup service started ✅\nDB: ${process.env.MSSQL_DATABASE}\nHost: ${host}\nAWS: ${region}/${bucket}\nTime: ${when}`); - } catch (e) { - console.warn('Startup broadcast failed:', e.message); - } -})(); +// Export functions for reuse in other scripts +module.exports = { + downloadBackupFile, + compressBackupFile, + formatBytes, + sendTelegramBroadcast, + getDbSizeBytes, + // Export configurations that might be needed + smbConfig, + config: config, // MSSQL config + s3 // S3 client +};