Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions backend/charts/monitoring/dashboards/general/omi-core-features.json
Original file line number Diff line number Diff line change
Expand Up @@ -3871,6 +3871,116 @@
],
"title": "Rejections by class",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"description": "Failed requests per second by lane, largest ten. A lane that fails on low traffic barely shows here, so read this with the error rate panel. Reads a recording rule, so it lags about 5 minutes.",
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line",
"fillOpacity": 12,
"lineWidth": 1,
"showPoints": "never",
"stacking": {
"group": "A",
"mode": "normal"
}
},
"unit": "ops"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 51
},
"id": 91,
"interval": "5m",
"options": {
"legend": {
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"expr": "topk(10, sum by (lane_id) (lane_outcome:llm_gateway_requests:rate5m_offset5m{outcome=\"error\"}) > 0)",
"legendFormat": "{{lane_id}}",
"refId": "A"
}
],
"title": "Gateway errors by lane",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"description": "Share of each lane's requests that failed, for lanes above about 1 request a minute, highest ten. Reads a recording rule, so it lags about 5 minutes.",
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line",
"fillOpacity": 12,
"lineWidth": 1,
"showPoints": "never",
"stacking": {
"group": "A",
"mode": "none"
}
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 51
},
"id": 92,
"interval": "5m",
"options": {
"legend": {
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"expr": "topk(10, 100 * sum by (lane_id) (lane_outcome:llm_gateway_requests:rate5m_offset5m{outcome=\"error\"}) / (sum by (lane_id) (lane_outcome:llm_gateway_requests:rate5m_offset5m) > 0.0167) > 0)",
"legendFormat": "{{lane_id}}",
"refId": "A"
}
],
"title": "Gateway error rate by lane",
"type": "timeseries"
}
],
"title": "AI responses — the LLM gateway behind chat and extraction",
Expand Down
35 changes: 35 additions & 0 deletions web/admin/grafana/build_wall_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
STAT_H = 3
STRIP_H = 1
WALL_H = 27
FUNNEL_H = 9
# One value size and label size on every stat; sized so the widest value
# ("10,287", "$72.4K") fits a three-value column at 1440 px.
STAT_VALUE_SIZE, STAT_LABEL_SIZE = 26, 13
Expand Down Expand Up @@ -258,7 +259,7 @@
"an estimate older than 35 days is marked stale under Margin by plan. ")


def columns():

Check warning on line 262 in web/admin/grafana/build_wall_dashboard.py

View workflow job for this annotation

GitHub Actions / Hygiene

Long function

columns is 154 lines; consider extracting focused helpers over 150 lines.
growth = [
stat("Growth · active users", USERS + "Weekly, daily and monthly users over the trailing 7 / 1 / 30 complete UTC days (MCP-only included). Change below: relative % vs the prior 7 / 1 / 30 days.",
[("headline", "wau", "Weekly", "locale", 0), ("headline", "dau", "Daily", "locale", 0),
Expand Down Expand Up @@ -588,6 +589,35 @@
d["noValue"] = "Cohorts still filling" # an empty frame, not "Cannot visualize data"


def funnel_row():
"""Below the TV's fixed wall: a full-width row reached by scrolling."""
proxy = ("Device = paired an Omi within 48 hours of first seen. It is a proxy: a buyer who never paired counts as "
"organic, and pairing is itself an early success, so the gap between the two is overstated. ")
series_colors = [color("Device", MAGENTA), color("Organic", NEUTRAL)]
funnel = chart("Funnel · device vs organic",
proxy + "Latest matured weekly new-user cohort, except Kept, which uses the newest cohort old "
"enough to measure it. Install is not shown because PostHog sees nobody before sign-up; first "
"summary is not shown because it has no event.",
[target("activation", "funnel", [("step", "Step", "string"), ("Device", "Device", "number"),
("Organic", "Organic", "number")])],
unit="percent", decimals=0, kind="barchart", overrides=series_colors,
extra=barchart_options(max_value=100, value_size=13))
weekly = chart("Activated · device vs organic",
proxy + "Week-one activation for each matured weekly cohort, dated by its last day.",
[target("activation", "funnelWeekly", [DATE, ("Device", "Device", "number"),
("Organic", "Organic", "number")])],
unit="percent", decimals=0, soft_min=0, time_from="60d", overrides=series_colors)
platforms = chart("Funnel by platform",
proxy + "Week-one activation in the latest matured weekly new-user cohort, by the platform users "
"first arrived on, with its size in the label. Small platforms move a lot week to week.",
[target("activation", "funnelPlatforms", [("platform", "Platform", "string"),
("Device", "Device", "number"),
("Organic", "Organic", "number")])],
unit="percent", decimals=0, kind="barchart", overrides=series_colors,
extra=barchart_options(horizontal=True, max_value=100, value_size=13))
return [(11, funnel), (7, weekly), (6, platforms)]


def build_wall_board():
panels = []
for name, items in columns().items():
Expand All @@ -602,6 +632,11 @@
panels.append({**panel, "gridPos": {"x": x, "y": y, "w": w, "h": h}})
y += h
assert y == WALL_H, (name, y) # every column fills the TV exactly, no scroll
x = 0
for w, panel in funnel_row():
panels.append({**panel, "gridPos": {"x": x, "y": WALL_H, "w": w, "h": FUNNEL_H}})
x += w
assert x == 24
for i, panel in enumerate(panels, 1):
panel["id"] = i
return {"uid": "omi-tv-v2", "title": "Omi TV · v3", "schemaVersion": 39, "version": 1, "timezone": "utc",
Expand Down
Loading
Loading