Operations

Pulse & Health tab

Externa embeds Laravel Pulse for exceptions, queues, and slow jobs/queries. The Inertia dashboard Health tab shows native Externa-styled aggregates and charts — not an embedded Livewire Pulse UI and not a primary “Open Pulse” button. The full Livewire dashboard remains at /pulse for super-admin deep dives.

Upstream

Laravel Pulse (Redis ingest + trimming) · UI: Dashboard · Stack: Minimal vs full

What Externa does

ItemDetail
Configconfig/pulse.php
IngestPrefer PULSE_INGEST_DRIVER=redis + connection pulse
TrimDefault keep 2 days (PULSE_STORAGE_KEEP / PULSE_INGEST_KEEP)
Recorders on by defaultExceptions, Queues, SlowJobs, SlowQueries
Recorders off by defaultCache interactions, slow requests/outgoing, user jobs/requests
GateviewPulse — super-admin (full /pulse UI only)
Primary UIDashboard → Health tab (DashboardHealthMetrics)
Advanced UI/pulse (optional; no primary CTA from Health)

Env / commands

PULSE_ENABLED=true
PULSE_INGEST_DRIVER=redis
PULSE_REDIS_CONNECTION=pulse
PULSE_STORAGE_KEEP="2 days"
PULSE_INGEST_KEEP="2 days"
php84 artisan pulse:work
# After deploy:
php84 artisan pulse:restart

Without Redis, set PULSE_INGEST_DRIVER=storage (or PULSE_ENABLED=false) and skip pulse:work.

Health tab vs /pulse

SurfaceContents
Dashboard HealthQueue/broadcast driver, Redis OK, pending/failed jobs; Pulse exception / slow-job / slow-query 24h counts + bar chart; Horizon status / pending / failed / throughput / workloads
/pulseFull Livewire Pulse dashboard (power users; bookmark)

Do not mount Pulse Livewire inside Inertia — Health reads Pulse tables / Horizon Redis APIs and renders Externa cards instead. Empty states appear when Pulse is off or pulse_aggregates is missing.

Native Pulse fields on Health

From DashboardHealthMetrics::summary():

PropSource
pulse_enabledconfig('pulse.enabled')
pulse_ingestingest driver name
pulse_availableenabled and pulse_aggregates table exists
exceptions_24hsum of Pulse aggregates type=exception (last 24h buckets)
slow_jobs_24htype=slow_job
slow_queries_24htype=slow_query

Horizon fields on the same tab are documented on Horizon and Dashboard.

Health badge prop

HandleInertiaRequests shares healthBadge from DashboardHealthMetrics::badge() (ok / warn / fail). Open Health via Dashboard → Health (/dashboard?tab=health); there is no sidebar badge. See Dashboard.

Settings → Performance (/settings/performance) shows an Observability section with quick links to Jobs, Pulse, and Horizon (when the user has the relevant permissions). Super-admins with viewPulse can navigate to /pulse from there. See Operations.

Previous
Reverb & Echo