Performance - v1.0.0
Models
All models live under ArtisanPackUI\Performance\Models.
PerformanceMetric
Stored in performance_metrics. Aggregated Web Vitals — one row per (metric, date, aggregation window) with computed percentiles.
| Column | Type | Purpose |
|---|---|---|
metric |
string | Metric key (LCP, CLS, FID, INP, TTFB, FCP) |
date |
date | Bucket date |
interval |
string | hourly or daily |
p50 / p75 / p95 / p99 |
float | Computed percentiles |
sample_count |
int | Number of raw samples that fed this row |
context |
json | Optional dimensions (route, device class, etc.) |
Populated by MetricsAggregator::aggregate() (run via perf:aggregate-metrics).
RawMetric
Stored in performance_raw_metrics. Individual RUM samples posted by the browser bundle.
| Column | Type | Purpose |
|---|---|---|
metric |
string | Metric key |
value |
float | Raw sample value |
url |
string|null | Page the sample originated from |
session_id |
string|null | Anonymous session identifier |
context |
json | Additional client-side context |
created_at |
datetime | Sample time |
Rows are drained into performance_metrics by the aggregator and pruned according to monitoring.retention_days.
SlowQuery
Stored in performance_slow_queries. Written by SlowQueryLogger when slow_query_logging.store_in_database is enabled.
| Column | Type | Purpose |
|---|---|---|
query |
text | Raw SQL |
normalized |
text | Query with parameter placeholders replaced by ? |
time_ms |
float | Execution time |
bindings |
json | Bindings for the raw query |
route |
string|null | Route name if resolvable |
trace |
json|null | Trimmed stack trace |
created_at |
datetime | Capture time |
The QueryAnalyzer Livewire component groups rows by normalized so repeat offenders collapse to a single dashboard entry.