A four-state percentile fan: nested p50/p90/p99 bands over time with the median line on top, an SLO rule whose breach stretches are interpolated, counted and keyboard-reachable, and an optional log axis for a tail that dwarfs the median.
Preview in your theme
Loading preview…
This component is part of Pro
The install command, prompt and concept map are included with a Pro license — one purchase unlocks every Pro component, forever.
status="ready" · 48 five-minute buckets. The 10:35 deploy pushes p99 over the 500 ms SLO for four buckets and then recovers; from 12:35 it climbs again and the window ends with it still over — the ledger says so instead of letting it scroll off the edge. The highlight starts where the line crosses the rule, not at the bucket edge. 11:20 reported no p99, so the outer band and the p99 line break around the hole. The dashed rule is the injected now instant: nothing here reads the clock, so the server and the browser draw the same picture. Click a column, or tab in and press Enter, to see the readout below fill in.
Checkout API latency
Five-minute buckets · 12 Jun 09:05–13:00 UTC
Checkout API latency: p50, p90, p99 over 48 buckets, 09:05 to 13:00. p99 peaks at 789 ms at 10:50. p99 is over SLO 500 ms in 2 stretches, covering 20% of the window, and is still over it at the last bucket.
p50–p90p90–p99SLO 500 ms
666 msp99 at 13:00
2 stretches over SLO · 10 buckets · 20% of the window · still over at the last bucketworst p99 789 ms at 10:50
Point at the plot, or tab into it and use the arrow keys · Page Up / Page Down jump between breaches.
Checkout API latency: p50, p90, p99 over 48 buckets, 09:05 to 13:00. p99 peaks at 789 ms at 10:50. p99 is over SLO 500 ms in 2 stretches, covering 20% of the window, and is still over it at the last bucket.
Bucket
p50
p90
p99
Observations
Against SLO
09:05
113 ms
231 ms
361 ms
10,022
under
09:10
114 ms
227 ms
378 ms
10,556
under
09:15
127 ms
240 ms
414 ms
8,503
under
09:20
104 ms
200 ms
332 ms
10,364
under
09:25
101 ms
188 ms
316 ms
14,094
under
09:30
114 ms
225 ms
370 ms
11,179
under
09:35
109 ms
222 ms
354 ms
8,466
under
09:40
112 ms
209 ms
358 ms
10,031
under
09:45
106 ms
195 ms
354 ms
14,024
under
09:50
116 ms
219 ms
379 ms
9,687
under
09:55
126 ms
259 ms
418 ms
13,569
under
10:00
118 ms
251 ms
400 ms
11,518
under
10:05
111 ms
207 ms
343 ms
8,616
under
10:10
106 ms
217 ms
357 ms
8,544
under
10:15
120 ms
245 ms
432 ms
13,062
under
10:20
125 ms
246 ms
395 ms
12,708
under
10:25
112 ms
212 ms
395 ms
12,815
under
10:30
107 ms
201 ms
348 ms
8,360
under
10:35
125 ms
324 ms
650 ms
9,775
over by 150 ms
10:40
126 ms
326 ms
710 ms
14,172
over by 210 ms
10:45
106 ms
256 ms
634 ms
10,679
over by 134 ms
10:50
109 ms
265 ms
789 ms
7,664
over by 289 ms
10:55
117 ms
223 ms
377 ms
14,124
under
11:00
106 ms
204 ms
341 ms
8,812
under
11:05
119 ms
232 ms
421 ms
8,614
under
11:10
110 ms
208 ms
369 ms
13,736
under
11:15
101 ms
196 ms
318 ms
11,246
under
11:20
110 ms
216 ms
no reading
9,665
not comparable
11:25
115 ms
222 ms
417 ms
13,807
under
11:30
121 ms
243 ms
414 ms
12,336
under
11:35
115 ms
215 ms
388 ms
12,376
under
11:40
117 ms
222 ms
358 ms
7,453
under
11:45
128 ms
239 ms
405 ms
12,299
under
11:50
115 ms
223 ms
405 ms
12,889
under
11:55
138 ms
272 ms
438 ms
7,646
under
12:00
109 ms
227 ms
418 ms
11,916
under
12:05
116 ms
233 ms
373 ms
12,995
under
12:10
115 ms
223 ms
359 ms
12,806
under
12:15
127 ms
248 ms
396 ms
7,515
under
12:20
106 ms
198 ms
331 ms
8,068
under
12:25
115 ms
221 ms
364 ms
11,168
under
12:30
125 ms
243 ms
383 ms
10,044
under
12:35
124 ms
255 ms
550 ms
11,435
over by 50 ms
12:40
114 ms
237 ms
544 ms
7,599
over by 44 ms
12:45
111 ms
229 ms
573 ms
12,467
over by 73 ms
12:50
121 ms
245 ms
618 ms
10,710
over by 118 ms
12:55
120 ms
243 ms
656 ms
7,905
over by 156 ms
13:00
117 ms
234 ms
666 ms
13,351
over by 166 ms
onBucketSelect → nothing selected
status="empty" · a valid contract with no buckets, worded so it cannot be mistaken for a failed fetch — and it names the levels the card is still expecting.
Checkout API latency
Five-minute buckets · 12 Jun 09:05–13:00 UTC
No percentiles for this window
Bands need p50, p90, p99 per bucket — the quantiles of one sample, not one average per bucket.
status="loading" · a deterministic skeleton band with no timer involved, aria-hidden, and honouring prefers-reduced-motion.
Checkout API latency
Five-minute buckets · 12 Jun 09:05–13:00 UTC
Loading percentiles
status="error" · the fetch failed. Try again only appears when onRetry is passed, and clicking it flips the card to ready.
Checkout API latency
Five-minute buckets · 12 Jun 09:05–13:00 UTC
Couldn't load these percentiles
The data source didn't respond.
Awkward feed · every repair is counted under the chart rather than done quietly. One bucket carries no usable x and is dropped; a NaN and an Infinity reading are dropped; a p90 that came back below its own p50 is re-nested, because a band with negative height renders as a crossed ribbon that reads like an encoding; two buckets share one instant, so the stretch between them has no width and still draws; the rows arrive out of order; the last bucket has holes on both sides of its p90 and p99, so those readings are drawn as dots and their band as a narrow column — a lone reading paints nothing as a path; a cache-only minute is a genuine zero and sits on the floor; and the long label truncates with its full text on the title attribute instead of overflowing the tick slot.
Awkward feed
Everything a percentile exporter gets wrong, in one window
Awkward feed: p50, p90, p99 over 8 buckets, 09:05 to 09:35. p99 peaks at 712 ms at 09:25 (retry shard). p99 is over SLO 400 ms in 3 stretches, covering 19% of the window, and is still over it at the last bucket.
p50–p90p90–p99SLO 400 ms
508 msp99 at 09:35
3 stretches over SLO · 5 buckets · 19% of the window · still over at the last bucketworst p99 712 ms at 09:25 (retry shard)
Point at the plot, or tab into it and use the arrow keys · Page Up / Page Down jump between breaches.
Feed notes: 1 bucket dropped (no usable x) · 2 readings dropped (not a finite number) · 1 bucket re-nested (a percentile came back below a lower one) · 1 bucket share an x with another · buckets re-sorted by x.
Awkward feed: p50, p90, p99 over 8 buckets, 09:05 to 09:35. p99 peaks at 712 ms at 09:25 (retry shard). p99 is over SLO 400 ms in 3 stretches, covering 19% of the window, and is still over it at the last bucket.
Bucket
p50
p90
p99
Observations
Against SLO
09:05
96 ms
180 ms
402 ms
812
over by 2 ms
09:10
140 ms
140 ms
455 ms
640
over by 55 ms
09:15 · cache-only minute, no origin requests at all
0 ms
0 ms
0 ms
0
under
09:20
188 ms
344 ms
no reading
703
not comparable
09:25
210 ms
486 ms
690 ms
51
over by 290 ms
09:25 (retry shard)
232 ms
no reading
712 ms
44
over by 312 ms
09:30
174 ms
no reading
no reading
388
not comparable
09:35
151 ms
288 ms
508 ms
902
over by 108 ms
The same data on both axes · here on the default linear axis, where a p99 fifty times the median spends the whole height on the worst request and flattens p50 and p90 onto the baseline. Everything is honest and almost nothing is legible — which is the argument for the card below, not a reason to clip the tail.
Report export latency
Ten-minute buckets · a p99 fifty times the median
Report export latency: p50, p90, p99 over 36 buckets, 09:05 to 14:55. p99 peaks at 6,188 ms at 12:55. p99 is over Budget 3,000 ms in 1 stretch, covering 15% of the window.
p50–p90p90–p99Budget 3,000 ms
2,137 msp99 at 14:55
1 stretch over Budget · 5 buckets · 15% of the windowworst p99 6,188 ms at 12:55
Point at the plot, or tab into it and use the arrow keys · Page Up / Page Down jump between breaches.
Report export latency: p50, p90, p99 over 36 buckets, 09:05 to 14:55. p99 peaks at 6,188 ms at 12:55. p99 is over Budget 3,000 ms in 1 stretch, covering 15% of the window.
Bucket
p50
p90
p99
Observations
Against Budget
09:05
38 ms
173 ms
2,018 ms
2,630
under
09:15
40 ms
199 ms
2,629 ms
2,401
under
09:25
36 ms
157 ms
1,968 ms
1,473
under
09:35
39 ms
172 ms
1,924 ms
2,846
under
09:45
43 ms
199 ms
2,683 ms
1,377
under
09:55
47 ms
239 ms
2,353 ms
2,831
under
10:05
35 ms
189 ms
2,042 ms
1,350
under
10:15
42 ms
204 ms
2,174 ms
1,984
under
10:25
35 ms
172 ms
1,908 ms
2,190
under
10:35
42 ms
191 ms
2,381 ms
2,274
under
10:45
37 ms
167 ms
2,166 ms
1,596
under
10:55
32 ms
145 ms
1,676 ms
1,755
under
11:05
47 ms
228 ms
2,271 ms
1,699
under
11:15
37 ms
181 ms
1,819 ms
2,227
under
11:25
41 ms
220 ms
2,264 ms
1,195
under
11:35
38 ms
182 ms
2,084 ms
1,028
under
11:45
45 ms
201 ms
2,197 ms
1,984
under
11:55
36 ms
174 ms
2,020 ms
2,985
under
12:05
38 ms
202 ms
2,117 ms
3,038
under
12:15
35 ms
156 ms
1,767 ms
1,684
under
12:25
43 ms
210 ms
3,924 ms
1,589
over by 924 ms
12:35
41 ms
208 ms
4,664 ms
1,106
over by 1,664 ms
12:45
46 ms
212 ms
4,642 ms
1,596
over by 1,642 ms
12:55
45 ms
216 ms
6,188 ms
2,674
over by 3,188 ms
13:05
34 ms
166 ms
4,966 ms
1,905
over by 1,966 ms
13:15
47 ms
211 ms
2,776 ms
2,784
under
13:25
41 ms
196 ms
2,310 ms
2,129
under
13:35
47 ms
225 ms
2,496 ms
2,359
under
13:45
44 ms
240 ms
2,160 ms
1,792
under
13:55
41 ms
189 ms
2,025 ms
2,980
under
14:05
37 ms
167 ms
1,925 ms
1,072
under
14:15
40 ms
202 ms
2,039 ms
2,944
under
14:25
42 ms
198 ms
2,231 ms
1,392
under
14:35
40 ms
178 ms
1,985 ms
2,622
under
14:45
41 ms
183 ms
2,250 ms
2,338
under
14:55
35 ms
179 ms
2,137 ms
1,337
under
scale="log" · equal ratios now take equal space, so the median band is as readable as the tail and "p50 doubled" looks the same at the bottom as at the top. Ticks snap to the 1 / 2 / 5 × 10ᵏ rungs, and the breach highlight is interpolated in projected space, so its edge still lands exactly where the drawn line crosses the budget.
Report export latency
Ten-minute buckets · a p99 fifty times the median
Report export latency: p50, p90, p99 over 36 buckets, 09:05 to 14:55. p99 peaks at 6,188 ms at 12:55. p99 is over Budget 3,000 ms in 1 stretch, covering 15% of the window. Values are placed on a logarithmic axis.
p50–p90p90–p99Budget 3,000 ms
2,137 msp99 at 14:55
1 stretch over Budget · 5 buckets · 15% of the windowworst p99 6,188 ms at 12:55
Point at the plot, or tab into it and use the arrow keys · Page Up / Page Down jump between breaches.
Report export latency: p50, p90, p99 over 36 buckets, 09:05 to 14:55. p99 peaks at 6,188 ms at 12:55. p99 is over Budget 3,000 ms in 1 stretch, covering 15% of the window. Values are placed on a logarithmic axis.
Bucket
p50
p90
p99
Observations
Against Budget
09:05
38 ms
173 ms
2,018 ms
2,630
under
09:15
40 ms
199 ms
2,629 ms
2,401
under
09:25
36 ms
157 ms
1,968 ms
1,473
under
09:35
39 ms
172 ms
1,924 ms
2,846
under
09:45
43 ms
199 ms
2,683 ms
1,377
under
09:55
47 ms
239 ms
2,353 ms
2,831
under
10:05
35 ms
189 ms
2,042 ms
1,350
under
10:15
42 ms
204 ms
2,174 ms
1,984
under
10:25
35 ms
172 ms
1,908 ms
2,190
under
10:35
42 ms
191 ms
2,381 ms
2,274
under
10:45
37 ms
167 ms
2,166 ms
1,596
under
10:55
32 ms
145 ms
1,676 ms
1,755
under
11:05
47 ms
228 ms
2,271 ms
1,699
under
11:15
37 ms
181 ms
1,819 ms
2,227
under
11:25
41 ms
220 ms
2,264 ms
1,195
under
11:35
38 ms
182 ms
2,084 ms
1,028
under
11:45
45 ms
201 ms
2,197 ms
1,984
under
11:55
36 ms
174 ms
2,020 ms
2,985
under
12:05
38 ms
202 ms
2,117 ms
3,038
under
12:15
35 ms
156 ms
1,767 ms
1,684
under
12:25
43 ms
210 ms
3,924 ms
1,589
over by 924 ms
12:35
41 ms
208 ms
4,664 ms
1,106
over by 1,664 ms
12:45
46 ms
212 ms
4,642 ms
1,596
over by 1,642 ms
12:55
45 ms
216 ms
6,188 ms
2,674
over by 3,188 ms
13:05
34 ms
166 ms
4,966 ms
1,905
over by 1,966 ms
13:15
47 ms
211 ms
2,776 ms
2,784
under
13:25
41 ms
196 ms
2,310 ms
2,129
under
13:35
47 ms
225 ms
2,496 ms
2,359
under
13:45
44 ms
240 ms
2,160 ms
1,792
under
13:55
41 ms
189 ms
2,025 ms
2,980
under
14:05
37 ms
167 ms
1,925 ms
1,072
under
14:15
40 ms
202 ms
2,039 ms
2,944
under
14:25
42 ms
198 ms
2,231 ms
1,392
under
14:35
40 ms
178 ms
1,985 ms
2,622
under
14:45
41 ms
183 ms
2,250 ms
2,338
under
14:55
35 ms
179 ms
2,137 ms
1,337
under
Five levels, no threshold · p50 / p75 / p90 / p99 / p99.9 make four nested bands from one hue at four alphas, densest next to the median. Identity comes from the direct labels stacked in the right gutter — pushed apart so none overlaps — and from a distinct dash per percentile, never from the fill alone.
Search API latency by percentile
Five levels, four nested bands · no threshold
Search API latency by percentile: p50, p75, p90, p99, p99.9 over 30 buckets, 09:05 to 16:20. p99.9 peaks at 1,024 ms at 16:20.
p50–p75p75–p90p90–p99p99–p99.9
1,024 msp99.9 at 16:20
Point at the plot, or tab into it and use the arrow keys.
Search API latency by percentile: p50, p75, p90, p99, p99.9 over 30 buckets, 09:05 to 16:20. p99.9 peaks at 1,024 ms at 16:20.