public HomeController(ILogger <HomeController> logger, IConfigRepository configRepository, IDatabaseBackupRepository databaseBackupRepository, IBackupFilePurger backupFilePurger, IBackupAuditRepository backupAuditRepository) { _logger = logger; _configRepository = configRepository; _databaseBackupRepository = databaseBackupRepository; _backupFilePurger = backupFilePurger; _backupAuditRepository = backupAuditRepository; }
private async Task UploadLastBackupAsync(IDatabaseBackupRepository databaseBackupRepository, DatabaseBackup dbBackup, string backupPath, IDropboxUploadClient dropboxUploadClient) { var backupFile = new FileInfo(DatabaseBackupJob.GetBackupFilename(dbBackup, backupPath, dbBackup.LastBackupTime.GetValueOrDefault())); if (!backupFile.Exists) { _logger.LogWarning($"Database backup file [{backupFile.FullName}] does not exist, cannot perform upload"); return; } _logger.LogInformation($"Uploading latest database backup [{dbBackup.DatabasePath}]: {backupFile}"); await dropboxUploadClient.UploadFileAsync(backupFile, $"{Path.GetFileName(dbBackup.DatabasePath)}.{dbBackup.DatabaseBackupId}"); _logger.LogInformation($"Successfully uploaded latest database backup: {dbBackup.DatabasePath}"); dbBackup.LastUploadToDropboxTime = DateTime.UtcNow; await databaseBackupRepository.UpdateAsync(dbBackup); }
private async Task BackupDbAsync(IDatabaseBackupRepository databaseBackupRepository, DatabaseBackup dbBackup, string backupPath, IBackupAuditRepository backupAuditRepository) { if (!File.Exists(dbBackup.DatabasePath)) { _logger.LogWarning($"Database file [{dbBackup.DatabasePath}] does not exist, cannot perform backup"); await backupAuditRepository.AuditEventAsync(dbBackup, "Backup failed: database file does not exist"); return; } var backupTime = DateTime.UtcNow; var backupFilename = GetBackupFilename(dbBackup, backupPath, backupTime); if (File.Exists(backupFilename)) { _logger.LogError($"Backup file named [{backupFilename}] already exists, cannot perform backup"); await backupAuditRepository.AuditEventAsync(dbBackup, "Backup failed: file already exists"); return; } if (!Directory.Exists(backupPath)) { Directory.CreateDirectory(backupPath); } using var dbToBackupConn = new SQLiteConnection($"Data Source={dbBackup.DatabasePath};FailIfMissing=True;"); await dbToBackupConn.OpenAsync(); using var dbCommand = dbToBackupConn.CreateCommand(); dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = $"vacuum into @vacuumInto"; var dbParam = dbCommand.CreateParameter(); dbParam.ParameterName = "@vacuumInto"; dbParam.Value = backupFilename; dbCommand.Parameters.Add(dbParam); await dbCommand.ExecuteNonQueryAsync(); _logger.LogInformation($"Successfully backed up database: {dbBackup.DatabasePath}"); dbBackup.LastBackupTime = backupTime; await databaseBackupRepository.UpdateAsync(dbBackup); }