Skip to content

Commit d2153da

Browse files
bug: fix prometheus metrics on failed test (#2674)
Co-authored-by: Alex Justesen <[email protected]>
1 parent 405c1a5 commit d2153da

File tree

1 file changed

+32
-16
lines changed

1 file changed

+32
-16
lines changed

app/Services/PrometheusMetricsService.php

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Services;
44

5+
use App\Enums\ResultStatus;
56
use App\Models\Result;
67
use App\Settings\DataIntegrationSettings;
78
use Illuminate\Support\Facades\Cache;
@@ -44,6 +45,21 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
4445
$labelNames = array_keys($labels);
4546
$labelValues = array_values($labels);
4647

48+
// Info metric - always exported so users can see test status (including failures)
49+
$infoGauge = $registry->getOrRegisterGauge(
50+
'speedtest_tracker',
51+
'result_id',
52+
'Speedtest result id',
53+
$labelNames
54+
);
55+
$infoGauge->set($result->id, $labelValues);
56+
57+
// Only export numeric metrics for completed tests
58+
// Failed/incomplete tests won't have valid measurements
59+
if ($result->status !== ResultStatus::Completed) {
60+
return;
61+
}
62+
4763
// Download speed in bytes
4864
$downloadBytesGauge = $registry->getOrRegisterGauge(
4965
'speedtest_tracker',
@@ -96,7 +112,7 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
96112
'Ping jitter in milliseconds',
97113
$labelNames
98114
);
99-
$pingJitterGauge->set($result->ping_jitter ?? 0, $labelValues);
115+
$pingJitterGauge->set($result->ping_jitter, $labelValues);
100116

101117
// Download jitter
102118
$downloadJitterGauge = $registry->getOrRegisterGauge(
@@ -105,7 +121,7 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
105121
'Download jitter in milliseconds',
106122
$labelNames
107123
);
108-
$downloadJitterGauge->set($result->download_jitter ?? 0, $labelValues);
124+
$downloadJitterGauge->set($result->download_jitter, $labelValues);
109125

110126
// Upload jitter
111127
$uploadJitterGauge = $registry->getOrRegisterGauge(
@@ -114,7 +130,7 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
114130
'Upload jitter in milliseconds',
115131
$labelNames
116132
);
117-
$uploadJitterGauge->set($result->upload_jitter ?? 0, $labelValues);
133+
$uploadJitterGauge->set($result->upload_jitter, $labelValues);
118134

119135
// Packet loss
120136
$packetLossGauge = $registry->getOrRegisterGauge(
@@ -123,7 +139,7 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
123139
'Packet loss percentage',
124140
$labelNames
125141
);
126-
$packetLossGauge->set($result->packet_loss ?? 0, $labelValues);
142+
$packetLossGauge->set($result->packet_loss, $labelValues);
127143

128144
// Ping latency low/high
129145
$pingLowGauge = $registry->getOrRegisterGauge(
@@ -132,15 +148,15 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
132148
'Ping low latency in milliseconds',
133149
$labelNames
134150
);
135-
$pingLowGauge->set($result->ping_low ?? 0, $labelValues);
151+
$pingLowGauge->set($result->ping_low, $labelValues);
136152

137153
$pingHighGauge = $registry->getOrRegisterGauge(
138154
'speedtest_tracker',
139155
'ping_high_ms',
140156
'Ping high latency in milliseconds',
141157
$labelNames
142158
);
143-
$pingHighGauge->set($result->ping_high ?? 0, $labelValues);
159+
$pingHighGauge->set($result->ping_high, $labelValues);
144160

145161
// Download latency metrics (IQM = Interquartile Mean - more reliable than average)
146162
$downloadLatencyIqmGauge = $registry->getOrRegisterGauge(
@@ -149,23 +165,23 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
149165
'Download latency interquartile mean in milliseconds',
150166
$labelNames
151167
);
152-
$downloadLatencyIqmGauge->set($result->downloadlatencyiqm ?? 0, $labelValues);
168+
$downloadLatencyIqmGauge->set($result->downloadlatencyiqm, $labelValues);
153169

154170
$downloadLatencyLowGauge = $registry->getOrRegisterGauge(
155171
'speedtest_tracker',
156172
'download_latency_low_ms',
157173
'Download latency low in milliseconds',
158174
$labelNames
159175
);
160-
$downloadLatencyLowGauge->set($result->downloadlatency_low ?? 0, $labelValues);
176+
$downloadLatencyLowGauge->set($result->downloadlatency_low, $labelValues);
161177

162178
$downloadLatencyHighGauge = $registry->getOrRegisterGauge(
163179
'speedtest_tracker',
164180
'download_latency_high_ms',
165181
'Download latency high in milliseconds',
166182
$labelNames
167183
);
168-
$downloadLatencyHighGauge->set($result->downloadlatency_high ?? 0, $labelValues);
184+
$downloadLatencyHighGauge->set($result->downloadlatency_high, $labelValues);
169185

170186
// Upload latency metrics
171187
$uploadLatencyIqmGauge = $registry->getOrRegisterGauge(
@@ -174,23 +190,23 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
174190
'Upload latency interquartile mean in milliseconds',
175191
$labelNames
176192
);
177-
$uploadLatencyIqmGauge->set($result->uploadlatencyiqm ?? 0, $labelValues);
193+
$uploadLatencyIqmGauge->set($result->uploadlatencyiqm, $labelValues);
178194

179195
$uploadLatencyLowGauge = $registry->getOrRegisterGauge(
180196
'speedtest_tracker',
181197
'upload_latency_low_ms',
182198
'Upload latency low in milliseconds',
183199
$labelNames
184200
);
185-
$uploadLatencyLowGauge->set($result->uploadlatency_low ?? 0, $labelValues);
201+
$uploadLatencyLowGauge->set($result->uploadlatency_low, $labelValues);
186202

187203
$uploadLatencyHighGauge = $registry->getOrRegisterGauge(
188204
'speedtest_tracker',
189205
'upload_latency_high_ms',
190206
'Upload latency high in milliseconds',
191207
$labelNames
192208
);
193-
$uploadLatencyHighGauge->set($result->uploadlatency_high ?? 0, $labelValues);
209+
$uploadLatencyHighGauge->set($result->uploadlatency_high, $labelValues);
194210

195211
// Bytes transferred during test
196212
$downloadedBytesGauge = $registry->getOrRegisterGauge(
@@ -199,15 +215,15 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
199215
'Total bytes downloaded during test',
200216
$labelNames
201217
);
202-
$downloadedBytesGauge->set($result->downloaded_bytes ?? 0, $labelValues);
218+
$downloadedBytesGauge->set($result->downloaded_bytes, $labelValues);
203219

204220
$uploadedBytesGauge = $registry->getOrRegisterGauge(
205221
'speedtest_tracker',
206222
'uploaded_bytes',
207223
'Total bytes uploaded during test',
208224
$labelNames
209225
);
210-
$uploadedBytesGauge->set($result->uploaded_bytes ?? 0, $labelValues);
226+
$uploadedBytesGauge->set($result->uploaded_bytes, $labelValues);
211227

212228
// Test duration
213229
$downloadElapsedGauge = $registry->getOrRegisterGauge(
@@ -216,15 +232,15 @@ protected function registerMetrics(CollectorRegistry $registry, Result $result):
216232
'Download test duration in milliseconds',
217233
$labelNames
218234
);
219-
$downloadElapsedGauge->set($result->download_elapsed ?? 0, $labelValues);
235+
$downloadElapsedGauge->set($result->download_elapsed, $labelValues);
220236

221237
$uploadElapsedGauge = $registry->getOrRegisterGauge(
222238
'speedtest_tracker',
223239
'upload_elapsed_ms',
224240
'Upload test duration in milliseconds',
225241
$labelNames
226242
);
227-
$uploadElapsedGauge->set($result->upload_elapsed ?? 0, $labelValues);
243+
$uploadElapsedGauge->set($result->upload_elapsed, $labelValues);
228244
}
229245

230246
protected function buildLabels(Result $result): array

0 commit comments

Comments
 (0)