';
if (guestStatus.last7DaysBackupStatus && guestStatus.last7DaysBackupStatus.length === 7) {
guestStatus.last7DaysBackupStatus.forEach(dayInfo => {
- let dotClass = 'bg-gray-300 dark:bg-gray-600'; // Default for 'none'
- let dotTitle = `${dayInfo.date}: ${dayInfo.details}`;
+ let barContent = '';
+ let barTitle = `${dayInfo.date}: ${dayInfo.details}`;
- if (dayInfo.status === 'ok') {
- dotClass = 'bg-green-500';
- } else if (dayInfo.status === 'failed') {
- dotClass = 'bg-red-500';
+ if (dayInfo.backupTypes && dayInfo.backupTypes.length > 0) {
+ // Sort types by priority: snapshot -> pve -> pbs
+ const sortedTypes = dayInfo.backupTypes.sort((a, b) => {
+ const order = { 'snapshot': 0, 'pve': 1, 'pbs': 2 };
+ return order[a] - order[b];
+ });
+
+ const typeClasses = {
+ 'snapshot': 'bg-blue-500', // Blue for snapshots (local)
+ 'pve': 'bg-yellow-500', // Yellow for PVE (cluster)
+ 'pbs': 'bg-green-500' // Green for PBS (remote)
+ };
+
+ // Use dots for multiple backup types to avoid overlap
+ if (sortedTypes.length === 1) {
+ // Single backup type - solid square
+ const type = sortedTypes[0];
+ const colorClass = typeClasses[type];
+ const failureBorder = dayInfo.hasFailures ? 'border border-red-500' : '';
+ barContent = `
`;
+ } else {
+ // Multiple backup types - stacked dots
+ const failureBorder = dayInfo.hasFailures ? 'border border-red-500' : '';
+
+ barContent = `
`;
+
+ if (sortedTypes.length === 2) {
+ // Two types - split top/bottom
+ sortedTypes.forEach((type, index) => {
+ const colorClass = typeClasses[type];
+ barContent += `
`;
+ });
+ } else {
+ // Three types - show as striped pattern
+ const primaryType = sortedTypes[0]; // Show most important type
+ const colorClass = typeClasses[primaryType];
+ barContent = `
`;
+ barContent += `
`;
+ barContent += '
';
+ }
+
+ if (sortedTypes.length === 2) {
+ barContent += '
';
+ }
+ }
+ } else {
+ // No backup activity
+ barContent = `
`;
}
- sevenDayDots += `
`;
+ sevenDayDots += barContent;
});
} else {
for (let i = 0; i < 7; i++) {
- sevenDayDots += '
';
+ sevenDayDots += '
';
}
}
sevenDayDots += '
';
@@ -450,8 +756,8 @@ PulseApp.ui.backups = (() => {
// Create PBS backup cell with visual indicator
let pbsBackupCell = '';
if (guestStatus.pbsBackups > 0) {
- const pbsIcon = '`;
+
+ dayData.guests.forEach(guest => {
+ const typeLabels = {
+ pbsSnapshots: '
PBS',
+ pveBackups: '
PVE',
+ vmSnapshots: '
SNAP'
+ };
+
+ const typesArray = Array.isArray(guest.types) ? guest.types : Array.from(guest.types);
+ const labels = typesArray.map(t => {
+ return typeLabels[t] || `
${t}`;
+ }).join(' ');
+
+ content += `
${guest.type} ${guest.vmid} (${guest.name}) ${labels} (${guest.backupCount})
`;
+ });
+
+ content += `
`;
+
+ if (dayData.hasFailures) {
+ content += '