@@ -109,17 +109,38 @@ PulseApp.ui.backups = (() => {
109
109
// Calculate 7-day backup status (dot matrix)
110
110
const last7DaysBackupStatus = [ ] ;
111
111
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
121
125
) ;
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 ) ;
123
144
}
124
145
125
146
return {
@@ -192,16 +213,21 @@ PulseApp.ui.backups = (() => {
192
213
// Generate 7-day backup dots
193
214
let sevenDayDots = '<div class="flex space-x-0.5" title="Last 7 days backup history (oldest to newest)">' ;
194
215
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' ;
200
225
}
226
+ sevenDayDots += `<span class="w-2 h-2 ${ dotClass } rounded-full" title="${ dotTitle } "></span>` ;
201
227
} ) ;
202
228
} else {
203
229
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
205
231
}
206
232
}
207
233
sevenDayDots += '</div>' ;
0 commit comments