Skip to content

Commit 1f90ed6

Browse files
committed
refactor(backups): Refine 7-day history dots to show success/failure/none
1 parent 7c4fcb1 commit 1f90ed6

File tree

1 file changed

+42
-16
lines changed

1 file changed

+42
-16
lines changed

src/public/js/ui/backups.js

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,38 @@ PulseApp.ui.backups = (() => {
109109
// Calculate 7-day backup status (dot matrix)
110110
const last7DaysBackupStatus = [];
111111
for (let i = 6; i >= 0; i--) { // Iterate from 6 days ago to today
112-
const dayStart = new Date(now);
113-
dayStart.setDate(now.getDate() - i);
114-
const dayStartTimestamp = Math.floor(dayStart.getTime() / 1000);
115-
const dayEnd = new Date(dayStart);
116-
dayEnd.setDate(dayStart.getDate() + 1);
117-
const dayEndTimestamp = Math.floor(dayEnd.getTime() / 1000);
118-
119-
const backupOnThisDay = guestSnapshots.some(
120-
snap => snap['backup-time'] >= dayStartTimestamp && snap['backup-time'] < dayEndTimestamp
112+
const dayTarget = new Date(now);
113+
dayTarget.setDate(now.getDate() - i);
114+
const dayStartTimestamp = Math.floor(dayTarget.getTime() / 1000);
115+
116+
const dayEndTarget = new Date(dayTarget);
117+
dayEndTarget.setDate(dayTarget.getDate() + 1);
118+
const dayEndTimestamp = Math.floor(dayEndTarget.getTime() / 1000);
119+
120+
let dailyStatus = 'none'; // Default to 'none'
121+
122+
// Check tasks for this day
123+
const tasksOnThisDay = guestTasks.filter(task =>
124+
task.startTime >= dayStartTimestamp && task.startTime < dayEndTimestamp
121125
);
122-
last7DaysBackupStatus.push(backupOnThisDay);
126+
127+
const failedTaskOnThisDay = tasksOnThisDay.find(task => task.status !== 'OK');
128+
const successfulTaskOnThisDay = tasksOnThisDay.find(task => task.status === 'OK');
129+
130+
if (failedTaskOnThisDay) {
131+
dailyStatus = 'failed';
132+
} else if (successfulTaskOnThisDay) {
133+
dailyStatus = 'ok';
134+
} else {
135+
// If no tasks, check for snapshots as a fallback for successful backup indication
136+
const snapshotOnThisDay = guestSnapshots.some(
137+
snap => snap['backup-time'] >= dayStartTimestamp && snap['backup-time'] < dayEndTimestamp
138+
);
139+
if (snapshotOnThisDay) {
140+
dailyStatus = 'ok';
141+
}
142+
}
143+
last7DaysBackupStatus.push(dailyStatus);
123144
}
124145

125146
return {
@@ -192,16 +213,21 @@ PulseApp.ui.backups = (() => {
192213
// Generate 7-day backup dots
193214
let sevenDayDots = '<div class="flex space-x-0.5" title="Last 7 days backup history (oldest to newest)">';
194215
if (guestStatus.last7DaysBackupStatus && guestStatus.last7DaysBackupStatus.length === 7) {
195-
guestStatus.last7DaysBackupStatus.forEach(hasBackup => {
196-
if (hasBackup) {
197-
sevenDayDots += '<span class="w-2 h-2 bg-green-500 rounded-full"></span>';
198-
} else {
199-
sevenDayDots += '<span class="w-2 h-2 bg-gray-300 dark:bg-gray-600 rounded-full"></span>';
216+
guestStatus.last7DaysBackupStatus.forEach(status => {
217+
let dotClass = 'bg-gray-300 dark:bg-gray-600'; // Default for 'none'
218+
let dotTitle = 'No backup';
219+
if (status === 'ok') {
220+
dotClass = 'bg-green-500';
221+
dotTitle = 'Successful backup';
222+
} else if (status === 'failed') {
223+
dotClass = 'bg-red-500';
224+
dotTitle = 'Failed backup';
200225
}
226+
sevenDayDots += `<span class="w-2 h-2 ${dotClass} rounded-full" title="${dotTitle}"></span>`;
201227
});
202228
} else {
203229
for (let i = 0; i < 7; i++) {
204-
sevenDayDots += '<span class="w-2 h-2 bg-gray-200 dark:bg-gray-700 rounded-full"></span>'; // Placeholder if data is missing
230+
sevenDayDots += '<span class="w-2 h-2 bg-gray-200 dark:bg-gray-700 rounded-full" title="Data unavailable"></span>'; // Placeholder if data is missing
205231
}
206232
}
207233
sevenDayDots += '</div>';

0 commit comments

Comments
 (0)