* Database health checks * Cache health checks * Storage write and disk-space checks * Failed queue job monitoring * Production environment diagnostics * Persisted health-check history * Queue retry controls * Scheduler execution controls * Cache and optimisation clearing * Backup creation and retention * Backup deletion * SQLite database backup support * Backup manifests and module metadata * Artisan health and backup commands * Administration navigation * Enterprise permissions * Module registration and tests
25 lines
3.5 KiB
PHP
25 lines
3.5 KiB
PHP
<x-layouts.app :title="__('Enterprise Services')">
|
|
<div class="space-y-8">
|
|
<div><h1 class="text-2xl font-semibold">{{ __('Enterprise Services') }}</h1><p class="text-sm text-zinc-500">{{ __('Health, queues, scheduler, cache, backups and production diagnostics.') }}</p></div>
|
|
@if(session('status'))<flux:callout variant="success">{{ session('status') }}</flux:callout>@endif
|
|
@if($errors->any())<flux:callout variant="danger">{{ $errors->first() }}</flux:callout>@endif
|
|
|
|
<div class="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
|
|
<flux:card><div class="text-sm text-zinc-500">{{ __('Overall health') }}</div><div class="mt-2 text-xl font-semibold capitalize">{{ $health['status'] }}</div></flux:card>
|
|
<flux:card><div class="text-sm text-zinc-500">{{ __('Queue') }}</div><div class="mt-2 text-xl font-semibold">{{ $queueConnection }}</div><div class="text-sm text-zinc-500">{{ $failedJobs }} {{ __('failed') }}</div></flux:card>
|
|
<flux:card><div class="text-sm text-zinc-500">{{ __('Cache') }}</div><div class="mt-2 text-xl font-semibold">{{ $cacheStore }}</div></flux:card>
|
|
<flux:card><div class="text-sm text-zinc-500">{{ __('Runtime') }}</div><div class="mt-2 text-sm">PHP {{ $phpVersion }}</div><div class="text-sm">Laravel {{ $laravelVersion }}</div></flux:card>
|
|
</div>
|
|
|
|
<flux:card>
|
|
<div class="flex flex-wrap items-center justify-between gap-3"><h2 class="text-lg font-semibold">{{ __('Health checks') }}</h2><form method="POST" action="{{ route('administration.enterprise.health.run') }}">@csrf<flux:button type="submit" variant="primary">{{ __('Run checks') }}</flux:button></form></div>
|
|
<div class="mt-4 divide-y">@foreach($health['checks'] as $check)<div class="grid gap-2 py-3 md:grid-cols-[1fr_auto_2fr]"><strong>{{ $check['name'] }}</strong><span class="capitalize">{{ $check['status'] }}</span><span class="text-zinc-500">{{ $check['message'] }}</span></div>@endforeach</div>
|
|
</flux:card>
|
|
|
|
<div class="grid gap-6 xl:grid-cols-2">
|
|
<flux:card><h2 class="text-lg font-semibold">{{ __('Operations') }}</h2><div class="mt-4 flex flex-wrap gap-3"><form method="POST" action="{{ route('administration.enterprise.cache.clear') }}">@csrf<flux:button type="submit">{{ __('Clear cache') }}</flux:button></form><form method="POST" action="{{ route('administration.enterprise.scheduler.run') }}">@csrf<flux:button type="submit">{{ __('Run scheduler') }}</flux:button></form><form method="POST" action="{{ route('administration.enterprise.queue.retry') }}">@csrf<flux:button type="submit">{{ __('Retry failed jobs') }}</flux:button></form></div></flux:card>
|
|
<flux:card><div class="flex items-center justify-between"><h2 class="text-lg font-semibold">{{ __('Backups') }}</h2><form method="POST" action="{{ route('administration.enterprise.backups.store') }}">@csrf<flux:button type="submit" variant="primary">{{ __('Create backup') }}</flux:button></form></div>@forelse($backups as $backup)<div class="flex items-center justify-between border-b py-3"><div><div>{{ $backup->path }}</div><div class="text-sm text-zinc-500">{{ number_format($backup->size / 1024 / 1024, 2) }} MB · {{ $backup->created_at->diffForHumans() }}</div></div><form method="POST" action="{{ route('administration.enterprise.backups.destroy', $backup) }}">@csrf @method('DELETE')<flux:button size="sm" variant="danger">{{ __('Delete') }}</flux:button></form></div>@empty<p class="py-4 text-zinc-500">{{ __('No backups created.') }}</p>@endforelse</flux:card>
|
|
</div>
|
|
</div>
|
|
</x-layouts.app>
|