From 94c84d7c58d1dc41097424adaeac78cc1aa21aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Tr=C3=A1vn=C3=ADk?= Date: Fri, 2 Jan 2026 14:22:03 +0100 Subject: [PATCH] feat: include schedule name in backup notifications and logs (#215) * feat: include schedule name in backup notifications and logs * lint fixes --- app/server/modules/backups/backups.service.ts | 17 +++++++++++++---- .../notifications/notifications.service.ts | 12 +++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/server/modules/backups/backups.service.ts b/app/server/modules/backups/backups.service.ts index ea2b5fe5..379b9edb 100644 --- a/app/server/modules/backups/backups.service.ts +++ b/app/server/modules/backups/backups.service.ts @@ -236,7 +236,7 @@ const executeBackup = async (scheduleId: number, manual = false) => { throw new BadRequestError("Volume is not mounted"); } - logger.info(`Starting backup for volume ${volume.name} to repository ${repository.name}`); + logger.info(`Starting backup ${schedule.name} for volume ${volume.name} to repository ${repository.name}`); serverEvents.emit("backup:started", { scheduleId, @@ -248,6 +248,7 @@ const executeBackup = async (scheduleId: number, manual = false) => { .sendBackupNotification(scheduleId, "start", { volumeName: volume.name, repositoryName: repository.name, + scheduleName: schedule.name, }) .catch((error) => { logger.error(`Failed to send backup start notification: ${toMessage(error)}`); @@ -341,9 +342,13 @@ const executeBackup = async (scheduleId: number, manual = false) => { .where(eq(backupSchedulesTable.id, scheduleId)); if (finalStatus === "warning") { - logger.warn(`Backup completed with warnings for volume ${volume.name} to repository ${repository.name}`); + logger.warn( + `Backup ${schedule.name} completed with warnings for volume ${volume.name} to repository ${repository.name}`, + ); } else { - logger.info(`Backup completed successfully for volume ${volume.name} to repository ${repository.name}`); + logger.info( + `Backup ${schedule.name} completed successfully for volume ${volume.name} to repository ${repository.name}`, + ); } serverEvents.emit("backup:completed", { @@ -357,12 +362,15 @@ const executeBackup = async (scheduleId: number, manual = false) => { .sendBackupNotification(scheduleId, finalStatus === "success" ? "success" : "warning", { volumeName: volume.name, repositoryName: repository.name, + scheduleName: schedule.name, }) .catch((error) => { logger.error(`Failed to send backup success notification: ${toMessage(error)}`); }); } catch (error) { - logger.error(`Backup failed for volume ${volume.name} to repository ${repository.name}: ${toMessage(error)}`); + logger.error( + `Backup ${schedule.name} failed for volume ${volume.name} to repository ${repository.name}: ${toMessage(error)}`, + ); await db .update(backupSchedulesTable) @@ -385,6 +393,7 @@ const executeBackup = async (scheduleId: number, manual = false) => { .sendBackupNotification(scheduleId, "failure", { volumeName: volume.name, repositoryName: repository.name, + scheduleName: schedule.name, error: toMessage(error), }) .catch((notifError) => { diff --git a/app/server/modules/notifications/notifications.service.ts b/app/server/modules/notifications/notifications.service.ts index 0a7c150e..383f7eeb 100644 --- a/app/server/modules/notifications/notifications.service.ts +++ b/app/server/modules/notifications/notifications.service.ts @@ -388,6 +388,7 @@ function buildNotificationMessage( body: [ `Volume: ${context.volumeName}`, `Repository: ${context.repositoryName}`, + context.scheduleName ? `Schedule: ${context.scheduleName}` : null, context.duration ? `Duration: ${Math.round(context.duration / 1000)}s` : null, context.filesProcessed !== undefined ? `Files: ${context.filesProcessed}` : null, context.bytesProcessed ? `Size: ${context.bytesProcessed}` : null, @@ -404,6 +405,7 @@ function buildNotificationMessage( body: [ `Volume: ${context.volumeName}`, `Repository: ${context.repositoryName}`, + context.scheduleName ? `Schedule: ${context.scheduleName}` : null, context.duration ? `Duration: ${Math.round(context.duration / 1000)}s` : null, context.filesProcessed !== undefined ? `Files: ${context.filesProcessed}` : null, context.bytesProcessed ? `Size: ${context.bytesProcessed}` : null, @@ -421,6 +423,7 @@ function buildNotificationMessage( body: [ `Volume: ${context.volumeName}`, `Repository: ${context.repositoryName}`, + context.scheduleName ? `Schedule: ${context.scheduleName}` : null, context.error ? `Error: ${context.error}` : null, `Time: ${date} - ${time}`, ] @@ -431,7 +434,14 @@ function buildNotificationMessage( default: return { title: "Backup Notification", - body: `Volume: ${context.volumeName}\nRepository: ${context.repositoryName}\nTime: ${date} - ${time}`, + body: [ + `Volume: ${context.volumeName}`, + `Repository: ${context.repositoryName}`, + context.scheduleName ? `Schedule: ${context.scheduleName}` : null, + `Time: ${date} - ${time}`, + ] + .filter(Boolean) + .join("\n"), }; } }