-
-
Requests
-
{{ compactNumber($overview['requests'] ?? 0) }}
-
- @include('livewire.traffic._sparkline', [
- 'id' => $chartId.'-spark-requests',
- 'initial' => $this->requestsSpark(),
- 'colorVar' => '--chart-status-3xx',
- 'event' => 'refreshChartData-'.$chartId.'-status',
- 'key' => 'requestsSpark',
- ])
+
+
+ Unique visitors
+ @if ($uniquesApproximate)
+ {!! $approxBadge('Summed across services; visitors of more than one service may be double-counted.') !!}
+ @endif
+
+
{{ compactNumber($overview['uniqueVisitors'] ?? 0) }}
+
+ @include('livewire.traffic._sparkline', [
+ 'id' => $chartId.'-spark-visitors',
+ 'initial' => $this->uniquesSpark(),
+ 'colorVar' => '--chart-status-2xx',
+ 'event' => 'refreshChartData-'.$chartId.'-status',
+ 'key' => 'uniquesSpark',
+ ])
+
+
+
+
Bandwidth
+
{{ formatBytes($this->bandwidthBytes()) }}
+
+ @include('livewire.traffic._sparkline', [
+ 'id' => $chartId.'-spark-bandwidth',
+ 'initial' => $this->bandwidthSpark(),
+ 'colorVar' => '--chart-spark-bandwidth',
+ 'event' => 'refreshChartData-'.$chartId.'-status',
+ 'key' => 'bandwidthSpark',
+ ])
+
+
+
+
Error rate
+
{{ $this->errorRate() }}%
+
+ @include('livewire.traffic._sparkline', [
+ 'id' => $chartId.'-spark-errors',
+ 'initial' => $this->errorsSpark(),
+ 'colorVar' => '--chart-status-5xx',
+ 'event' => 'refreshChartData-'.$chartId.'-status',
+ 'key' => 'errorsSpark',
+ ])
+
+
+
+
+ p95 latency
+ @if ($latencyApproximate)
+ {!! $approxBadge('Highest p95 latency across services; not a true merged percentile.') !!}
+ @endif
+
+
{{ formatLatency($overview['latencyP95'] ?? 0) }}
+
+ @include('livewire.traffic._sparkline', [
+ 'id' => $chartId.'-spark-latency',
+ 'initial' => $this->latencySpark(),
+ 'colorVar' => '--chart-status-4xx',
+ 'event' => 'refreshChartData-'.$chartId.'-status',
+ 'key' => 'latencySpark',
+ ])
+
-
-
- Unique visitors
- @if ($uniquesApproximate)
- {!! $approxBadge('Summed across services; visitors of more than one service may be double-counted.') !!}
- @endif
-
-
{{ compactNumber($overview['uniqueVisitors'] ?? 0) }}
-
- @include('livewire.traffic._sparkline', [
- 'id' => $chartId.'-spark-visitors',
- 'initial' => $this->uniquesSpark(),
- 'colorVar' => '--chart-status-2xx',
- 'event' => 'refreshChartData-'.$chartId.'-status',
- 'key' => 'uniquesSpark',
- ])
-
-
-
-
Bandwidth
-
{{ formatBytes($this->bandwidthBytes()) }}
-
- @include('livewire.traffic._sparkline', [
- 'id' => $chartId.'-spark-bandwidth',
- 'initial' => $this->bandwidthSpark(),
- 'colorVar' => '--chart-spark-bandwidth',
- 'event' => 'refreshChartData-'.$chartId.'-status',
- 'key' => 'bandwidthSpark',
- ])
-
-
-
-
Error rate
-
{{ $this->errorRate() }}%
-
- @include('livewire.traffic._sparkline', [
- 'id' => $chartId.'-spark-errors',
- 'initial' => $this->errorsSpark(),
- 'colorVar' => '--chart-status-5xx',
- 'event' => 'refreshChartData-'.$chartId.'-status',
- 'key' => 'errorsSpark',
- ])
-
-
-
-
- p95 latency
- @if ($latencyApproximate)
- {!! $approxBadge('Highest p95 latency across services; not a true merged percentile.') !!}
- @endif
-
-
{{ formatLatency($overview['latencyP95'] ?? 0) }}
-
- @include('livewire.traffic._sparkline', [
- 'id' => $chartId.'-spark-latency',
- 'initial' => $this->latencySpark(),
- 'colorVar' => '--chart-status-4xx',
- 'event' => 'refreshChartData-'.$chartId.'-status',
- 'key' => 'latencySpark',
- ])
-
-
-
-
-
-
- @include('livewire.traffic._requests-chart')
-
-
-
- @include('livewire.traffic._status-codes')
-
-
-
- @include('livewire.traffic._paths-list', ['paths' => $topPaths])
-
-
- @include('livewire.traffic._geo', [
- 'countries' => data_get($breakdowns, 'country', []),
- 'cities' => trafficCityRows(data_get($breakdowns, 'city', [])),
- 'attribution' => $attribution,
- ])
-
- {{-- Requests by device type (donut) + HTTP versions / cache / status. --}}
-
-
- @php $deviceChart = $this->deviceChartData(); @endphp
- @include('livewire.traffic._device-chart', [
- 'labels' => $deviceChart['labels'],
- 'series' => $deviceChart['series'],
- ])
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'protocol',
- 'label' => 'Top HTTP versions',
- 'rows' => data_get($breakdowns, 'protocol', []),
- 'helper' => 'Request volume by negotiated HTTP protocol version.',
- ])
-
+
+ @include('livewire.traffic._requests-chart')
+
-
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'cache',
- 'label' => 'Top cache statuses',
- 'rows' => data_get($breakdowns, 'cache', []),
- 'helper' => 'Reverse-proxy cache outcome (hit, miss, bypass, …) by request count.',
+
+ @include('livewire.traffic._status-codes')
+
+
+
+ @include('livewire.traffic._paths-list', ['paths' => $topPaths])
+
+
+ @include('livewire.traffic._geo', [
+ 'countries' => data_get($breakdowns, 'country', []),
+ 'cities' => trafficCityRows(data_get($breakdowns, 'city', [])),
+ 'attribution' => $attribution,
])
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'status',
- 'label' => 'Top status codes',
- 'rows' => data_get($breakdowns, 'status', []),
- 'helper' => 'Most frequent HTTP response status codes for the selected range.',
- ])
-
+
+ {{-- Requests by device type (donut) + HTTP versions / cache / status. --}}
+
+
+ @php $deviceChart = $this->deviceChartData(); @endphp
+ @include('livewire.traffic._device-chart', [
+ 'labels' => $deviceChart['labels'],
+ 'series' => $deviceChart['series'],
+ ])
+
- {{-- Referrers / browsers / OS / AI agents / IPs, two per row. --}}
-
- @foreach ($dimensionLabels as $dimension => $label)
@include('livewire.traffic._breakdown-section', [
- 'dimension' => $dimension,
- 'label' => $label,
- 'rows' => data_get($breakdowns, $dimension, []),
+ 'dimension' => 'protocol',
+ 'label' => 'Top HTTP versions',
+ 'rows' => data_get($breakdowns, 'protocol', []),
+ 'helper' => 'Request volume by negotiated HTTP protocol version.',
])
- @endforeach
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'agent',
- 'label' => 'AI agents & bots',
- 'rows' => data_get($breakdowns, 'agent', []),
- 'helper' => 'Bot and AI-crawler traffic (GPTBot, ClaudeBot, Googlebot, …) by request count.',
- ])
- @php($ipModeEnum = \App\Enums\TrafficIpMode::tryFrom($ipMode) ?? \App\Enums\TrafficIpMode::Full)
- @if ($ipModeEnum !== \App\Enums\TrafficIpMode::Off)
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'ip',
- 'label' => $ipModeEnum->breakdownLabel(),
- 'rows' => data_get($breakdowns, 'ip', []),
- 'helper' => $ipModeEnum->breakdownHelper(),
- ])
- @endif
-
+
- {{-- User agents (full width — raw UA strings are long). --}}
- @include('livewire.traffic._breakdown-section', [
- 'dimension' => 'useragent',
- 'label' => 'Top user agents',
- 'rows' => data_get($breakdowns, 'useragent', []),
- 'helper' => 'Most frequent raw User-Agent strings for the selected range.',
- ])
+
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => 'cache',
+ 'label' => 'Top cache statuses',
+ 'rows' => data_get($breakdowns, 'cache', []),
+ 'helper' => 'Reverse-proxy cache outcome (hit, miss, bypass, …) by request count.',
+ ])
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => 'status',
+ 'label' => 'Top status codes',
+ 'rows' => data_get($breakdowns, 'status', []),
+ 'helper' => 'Most frequent HTTP response status codes for the selected range.',
+ ])
+
+
+ {{-- Referrers / browsers / OS / AI agents / IPs, two per row. --}}
+
+ @foreach ($dimensionLabels as $dimension => $label)
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => $dimension,
+ 'label' => $label,
+ 'rows' => data_get($breakdowns, $dimension, []),
+ ])
+ @endforeach
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => 'agent',
+ 'label' => 'AI agents & bots',
+ 'rows' => data_get($breakdowns, 'agent', []),
+ 'helper' => 'Bot and AI-crawler traffic (GPTBot, ClaudeBot, Googlebot, …) by request count.',
+ ])
+ @php($ipModeEnum = \App\Enums\TrafficIpMode::tryFrom($ipMode) ?? \App\Enums\TrafficIpMode::Full)
+ @if ($ipModeEnum !== \App\Enums\TrafficIpMode::Off)
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => 'ip',
+ 'label' => $ipModeEnum->breakdownLabel(),
+ 'rows' => data_get($breakdowns, 'ip', []),
+ 'helper' => $ipModeEnum->breakdownHelper(),
+ ])
+ @endif
+
+
+ {{-- User agents (full width — raw UA strings are long). --}}
+ @include('livewire.traffic._breakdown-section', [
+ 'dimension' => 'useragent',
+ 'label' => 'Top user agents',
+ 'rows' => data_get($breakdowns, 'useragent', []),
+ 'helper' => 'Most frequent raw User-Agent strings for the selected range.',
+ ])
+
@endif