Sauvegardes
État par site (bases + fichiers), envoyé par chaque serveur vers OVH Object Storage. Clique une carte pour l'historique complet. Une sauvegarde manquante ou de +{{ config('backups.stale_hours', 48) }} h déclenche une alerte.
@php $tone = [ 'ok' => ['✅', 'border-emerald-500/30 bg-emerald-500/5', 'text-emerald-300'], 'stale' => ['🟠', 'border-amber-500/30 bg-amber-500/5', 'text-amber-300'], 'failed' => ['🔴', 'border-red-500/30 bg-red-500/5', 'text-red-300'], 'missing' => ['⚪', 'border-slate-700 bg-slate-900/40', 'text-slate-400'], ]; $label = ['ok' => 'À jour', 'stale' => 'Périmée', 'failed' => 'Échec', 'missing' => 'Jamais reçue']; $counts = collect($targets)->groupBy('status')->map->count(); @endphp
{{ $counts['ok'] ?? 0 }} à jour
{{ $counts['stale'] ?? 0 }} périmée(s)
{{ $counts['failed'] ?? 0 }} échec(s)
{{ $counts['missing'] ?? 0 }} en attente
@foreach($targets as $t)
@php [$icon, $cls, $txt] = $tone[$t['status']] ?? $tone['missing']; @endphp
@endforeach
{{ $icon }}
{{ $t['name'] }}
{{ $label[$t['status']] ?? $t['status'] }}
{{ $t['server'] }}@if($t['what']) · {{ $t['what'] }}@endif
@if($t['at']){{ \Illuminate\Support\Carbon::parse($t['at'])->diffForHumans() }}@else - jamais @endif
@if($t['size_mb']){{ $t['size_mb'] }} Mo@endif
détails →
@if($t['error']){{ $t['error'] }}
@endif