@extends('dashboard.app') @section('page_title', 'Admin Webhooks') @section('page_subtitle', 'Monitor deliveries, failures, and replays.') @section('dashboard_content') @if (session('status'))
{{ session('status') }}
@endif
@foreach ([ ['label' => 'Events (total)', 'value' => number_format(\App\Models\WebhookEvent::count()), 'note' => 'All providers'], ['label' => 'Failures', 'value' => number_format(\App\Models\WebhookEvent::where('status', 'error')->count()), 'note' => 'Needs replay'], ['label' => 'Providers', 'value' => number_format(\App\Models\WebhookEvent::distinct('provider')->count('provider')), 'note' => 'Configured'], ] as $card)
{{ $card['label'] }}
{{ $card['value'] }}
{{ $card['note'] }}
@endforeach
Delivery log
Recent events
@csrf
@php $sortParam = $sort ?? 'id'; $dirParam = $dir ?? 'desc'; $toggle = fn ($field) => ($sortParam === $field && $dirParam === 'asc') ? 'desc' : 'asc'; $sortUrl = fn ($field) => request()->fullUrlWithQuery(['sort' => $field, 'dir' => $toggle($field)]); @endphp @forelse ($events ?? [] as $row) @empty @endforelse
Event Provider Status Time Actions
#{{ $row->id }}
{{ $row->event_type ?? 'event' }}
{{ $row->provider }} @php $pill = $row->status === 'error' ? ['bg' => 'bg-rose-100 dark:bg-rose-500/20', 'text' => 'text-rose-800 dark:text-rose-200'] : ($row->status === 'pending' || $row->status === 'received' ? ['bg' => 'bg-amber-100 dark:bg-amber-500/20', 'text' => 'text-amber-800 dark:text-amber-200'] : ['bg' => 'bg-emerald-100 dark:bg-emerald-500/20', 'text' => 'text-emerald-800 dark:text-emerald-200']); @endphp {{ $row->status }} {{ $row->received_at?->diffForHumans() ?? $row->created_at?->diffForHumans() }}
View
@csrf
No webhook events found.
{{ $events->links('vendor.pagination.dashboard') }}
@endsection