first(); $totalSizeBytes = (int) Backup::sum('size_bytes'); $failedCount = Backup::where('status', 'failed')->count(); $totalCount = Backup::count(); return [ 'backups' => Backup::query()->with('site')->orderByDesc('completed_at')->paginate(10), 'lastBackupAt' => $last?->completed_at, 'totalSize' => $totalSizeBytes, 'totalSizeGb' => round($totalSizeBytes / 1024 / 1024 / 1024, 1), 'recoveryPoints' => $totalCount, 'failedCount' => $failedCount, 'storageQuotaGb' => 500, 'storageUsedPct' => min(100, (int) round(($totalSizeBytes / 1024 / 1024 / 1024) / 500 * 100)), 'totalSites' => Site::count(), ]; } }; ?>

Backups

{{ $recoveryPoints }} wiederherstellungspunkte · {{ $totalSites }} sites
aktiv
{{-- Metrics --}}
Letztes Backup
{{ $lastBackupAt?->diffForHumans() ?? '—' }}
letzter erfolgreicher Lauf
Storage
{{ $totalSizeGb }}GB
von {{ $storageQuotaGb }} GB ({{ $storageUsedPct }}%)
Recovery-Points
{{ $recoveryPoints }}
30 Tage Retention
Fehlgeschlagen
{{ $failedCount }}
@if($failedCount > 0)Aufmerksamkeit nötig @else alle OK @endif
{{-- 2-col: Recent backups + Sticky summary --}}

Neueste Backups

letzte 7 Tage
@forelse ($backups as $b) @empty @endforelse
Site Typ Größe Wann Status
{{ mb_substr($b->site->domain ?? '?', 0, 1) }}
{{ $b->site->domain ?? '—' }} {{ $b->storage_location ?? 's3://clupilot-backups' }}
{{ ucfirst($b->type) }} {{ $b->size_mb }} MB {{ $b->completed_at?->diffForHumans() ?? '—' }} @if ($b->status === 'ok') ok @elseif ($b->status === 'failed') failed @else {{ $b->status }} @endif
Noch keine Backups.
{{ $backups->firstItem() ?? 0 }}–{{ $backups->lastItem() ?? 0 }} von {{ $backups->total() }}
{{-- Sticky summary --}}

Konfiguration

Storage
{{ $totalSizeGb }} GB used {{ $storageUsedPct }}%
AES-256 verschlüsselt · S3 Frankfurt · 30 Tage Retention