@extends('layouts.admin', ['heading' => 'Performance Monitoring', 'subheading' => 'Cron, queue, and system throughput visibility']) @section('content')
Users
{{ number_format((int) $summary['users']) }}
Orders
{{ number_format((int) $summary['orders']) }}
Wallet Txn
{{ number_format((int) $summary['wallet_transactions']) }}
Pending Jobs
{{ number_format((int) $summary['pending_jobs']) }}
Failed Jobs
{{ number_format((int) $summary['failed_jobs']) }}
Last Cron
{{ $summary['last_successful_cron'] ? \Illuminate\Support\Carbon::parse($summary['last_successful_cron'])->format('d M Y H:i') : '-' }}
@csrf
cPanel Go-Live and Cron Job Guide

Use this on shared hosting where SSH is not available. Replace USERNAME and project path as needed.

  1. Set QUEUE_CONNECTION=database in .env (no Redis required).
  2. Create cron job every minute for scheduler:
* * * * * /usr/local/bin/php /home/USERNAME/public_html/artisan schedule:run >> /home/USERNAME/cron-schedule.log 2>&1

Optional worker cron (if you want background queue processing):

* * * * * /usr/local/bin/php /home/USERNAME/public_html/artisan queue:work --queue=default --tries=3 --timeout=120 --stop-when-empty >> /home/USERNAME/cron-queue.log 2>&1
  1. Build frontend assets once (npm run build) and ensure public/hot is removed on production hosting.
  2. Run php artisan storage:link once after deployment.
  3. Ensure installer is locked and APP_ENV=production, APP_DEBUG=false.
  4. Check this page for cron entries and failed jobs after enabling cron.
Recent Cron Runs
@forelse($recentCrons as $cron) @empty @endforelse
CommandStatusStartedFinished
{{ $cron->command }} {{ ucfirst($cron->status) }} {{ optional($cron->started_at)->format('d M Y H:i:s') }} {{ optional($cron->finished_at)->format('d M Y H:i:s') ?: '-' }}
No cron log entries.
Performance Metrics
@forelse($metrics as $metric) @empty @endforelse
GroupKeyValueTime
{{ $metric->metric_group }} {{ $metric->metric_key }} {{ number_format((float) $metric->metric_value, 4) }} {{ $metric->unit }} {{ optional($metric->recorded_at)->format('d M Y H:i:s') }}
No metric snapshots.
@endsection