One Artwork panel: full, hit rate and evictions together (#198)

Evictions are bars on a right-hand axis of their own, since they are images,
not a share.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-11 20:29:19 +00:00
parent c28accb8e4
commit afd3cf448d

View File

@@ -191,17 +191,19 @@ ts("Backlogs", [prom('max(ipx_deadair_backlog{job="ipx"})', legend="DeadAir to l
prom('sum(increase(ipx_events_missed_total{job="ipx"}[$__rate_interval]))', ref="D", legend="live updates missed")], prom('sum(increase(ipx_events_missed_total{job="ipx"}[$__rate_interval]))', ref="D", legend="live updates missed")],
16, w=8) 16, w=8)
y += 8 y += 8
ts("DeadAir on a file", [prom('max(ipx_deadair_busy_seconds{job="ipx"})', legend="for")], 0, w=8, unit="s", ts("DeadAir on a file", [prom('max(ipx_deadair_busy_seconds{job="ipx"})', legend="for")], 0, w=12, unit="s",
desc="How long DeadAir has been on the file it is analysing; a few seconds each.") desc="How long DeadAir has been on the file it is analysing; a few seconds each.")
ts("Artwork", [prom('max(ipx_art_cache_bytes{job="ipx"}) / max(ipx_art_cache_limit_bytes{job="ipx"})', legend="full"), ts("Artwork", [prom('max(ipx_art_cache_bytes{job="ipx"}) / max(ipx_art_cache_limit_bytes{job="ipx"})', legend="full"),
prom('sum(increase(ipx_art_requests_total{job="ipx", result="hit"}[$__rate_interval])) / ' prom('sum(increase(ipx_art_requests_total{job="ipx", result="hit"}[$__rate_interval])) / '
'sum(increase(ipx_art_requests_total{job="ipx"}[$__rate_interval]))', ref="B", legend="served from disk")], 'sum(increase(ipx_art_requests_total{job="ipx"}[$__rate_interval]))', ref="B", legend="served from disk"),
8, w=8, unit="percentunit", prom('sum(increase(ipx_art_evicted_total{job="ipx"}[$__rate_interval]))', ref="C", legend="images evicted")],
12, w=12, unit="percentunit",
desc="Full sits near 100% once the cache has filled, since each sweep trims it to fit. Served from disk is the hit rate: " desc="Full sits near 100% once the cache has filled, since each sweep trims it to fit. Served from disk is the hit rate: "
"the rest was fetched from the publisher.") "the rest was fetched from the publisher. Evicted, on the right, is images each sweep threw out to stay under the "
ts("Artwork evicted", [prom('sum(increase(ipx_art_evicted_total{job="ipx"}[$__rate_interval]))', legend="images")], "limit: many at every sweep, with a falling hit rate, means the limit is too small.")["fieldConfig"]["overrides"] = [
16, w=8, bars=True, {"matcher": {"id": "byName", "options": "images evicted"},
desc="Images each sweep threw out to stay under the limit. Many at every sweep, with a falling hit rate, means the limit is too small.") "properties": [{"id": "unit", "value": "short"}, {"id": "custom.axisPlacement", "value": "right"},
{"id": "custom.drawStyle", "value": "bars"}, {"id": "custom.fillOpacity", "value": 60}]}]
y += 8 y += 8
# ---- Traces # ---- Traces