HubPilotage
@include('partials.nav', ['active' => 'sauvegardes'])
Déconnexion

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
{{ $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
@endforeach
{{-- Popup historique --}}