grafana dashboards: shorten panel descriptions
Cut every panel/board description down to a short statement of what the number is. Drops the design-reasoning prose, edge-case notes, and operator-attributed quotes that had accumulated in an earlier pass — useful context while building the boards, wrong shape for a tooltip an operator glances at mid-incident.
This commit is contained in:
parent
9fd5a7a689
commit
8b8a322369
8 changed files with 94 additions and 94 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"uid": "hyperhive-claude-usage",
|
||||
"title": "hyperhive · claude usage",
|
||||
"description": "How Claude is being used, rather than which agent is using it: the axes here are model, effort, token type and query source. Per-agent resource usage lives on the 'agents' dashboard; the only overlap is the cost/token headline. Metric names are the OTLP DOTTED form, so every query uses the {__name__=\"...\"} selector — the underscore spelling matches nothing in this store. Every total uses increase(): the claude_code.* counters are cumulative (forced in nix/agent-modules/otel.nix) but reset once per turn, because each turn is a new claude process, so sum_over_time would be wrong. Rate panels pin a 10m minimum interval — agents export every 60s, and a shorter window silently drops most series while still drawing a plausible line.",
|
||||
"description": "How Claude is used, by model, effort, token type, and source.",
|
||||
"tags": ["hyperhive", "claude"],
|
||||
"timezone": "utc",
|
||||
"schemaVersion": 39,
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
"id": 1,
|
||||
"type": "stat",
|
||||
"title": "Cost",
|
||||
"description": "claude_code.cost.usage, summed over the selected range.",
|
||||
"description": "Total USD spent on Claude Code usage.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
"id": 2,
|
||||
"type": "stat",
|
||||
"title": "Tokens",
|
||||
"description": "claude_code.token.usage across every type (input, output, cacheRead, cacheCreation).",
|
||||
"description": "Total tokens used, across all types.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -155,7 +155,7 @@
|
|||
"id": 3,
|
||||
"type": "stat",
|
||||
"title": "Cache read share",
|
||||
"description": "cacheRead as a fraction of all tokens. High is good and cheap: cached input is billed at a fraction of fresh input. A sudden drop usually means prompts stopped being stable, not that more work happened.",
|
||||
"description": "Cache-read tokens as a fraction of all tokens.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -203,7 +203,7 @@
|
|||
"id": 4,
|
||||
"type": "stat",
|
||||
"title": "Active time",
|
||||
"description": "claude_code.active_time.total — seconds actually spent working, not wall-clock uptime.",
|
||||
"description": "Seconds actually spent working.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -251,7 +251,7 @@
|
|||
"id": 10,
|
||||
"type": "timeseries",
|
||||
"title": "Token rate by type",
|
||||
"description": "Tokens per minute, split by type. cacheRead usually dominates by an order of magnitude — that is the cache working, not a bug. 10m minimum step: agents export every 60s, so a shorter window drops series silently.",
|
||||
"description": "Tokens per minute, split by type.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -313,7 +313,7 @@
|
|||
"id": 11,
|
||||
"type": "bargauge",
|
||||
"title": "Tokens by model",
|
||||
"description": "Which model the tokens went to, over the selected range.",
|
||||
"description": "Tokens used, split by model.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -372,7 +372,7 @@
|
|||
"id": 20,
|
||||
"type": "timeseries",
|
||||
"title": "Cost rate by model",
|
||||
"description": "USD per minute, split by model. Same 10m minimum step as the token panel.",
|
||||
"description": "USD per minute, split by model.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -430,7 +430,7 @@
|
|||
"id": 21,
|
||||
"type": "bargauge",
|
||||
"title": "Cost by effort",
|
||||
"description": "claude_code.cost.usage split by the effort label (high / medium / xhigh).",
|
||||
"description": "USD spent, split by effort level.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -489,7 +489,7 @@
|
|||
"id": 22,
|
||||
"type": "bargauge",
|
||||
"title": "Cost by query source",
|
||||
"description": "'main' is the turn you asked for; 'auxiliary' is everything Claude runs on the side (titles, summaries, small helper calls). Worth watching as a ratio — auxiliary creeping up means spend that no turn asked for.",
|
||||
"description": "USD spent, split by main vs. auxiliary queries.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -548,7 +548,7 @@
|
|||
"id": 30,
|
||||
"type": "bargauge",
|
||||
"title": "Edit tool decisions by language",
|
||||
"description": "claude_code.code_edit_tool.decision. The decision is in the legend rather than assumed: today every recorded decision is 'accept', so a title saying 'accepted' would be silently wrong the first time one is rejected.",
|
||||
"description": "Edit-tool accept/reject decisions, split by language.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -607,7 +607,7 @@
|
|||
"id": 31,
|
||||
"type": "bargauge",
|
||||
"title": "Edit tool decisions by tool",
|
||||
"description": "Same series split by tool_name (Edit / Write) instead of language.",
|
||||
"description": "Edit-tool accept/reject decisions, split by tool.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -666,7 +666,7 @@
|
|||
"id": 5,
|
||||
"type": "stat",
|
||||
"title": "Turns",
|
||||
"description": "claude_code.session.count. Each turn runs a new claude process, so a session record is emitted per turn — this is a PROXY for turn count, not a turn metric. Nothing exports turn stats to OTEL today; they live in each agent turn-stats.sqlite and are aggregated only for the hive dashboard.",
|
||||
"description": "Number of Claude turns run.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -714,7 +714,7 @@
|
|||
"id": 6,
|
||||
"type": "stat",
|
||||
"title": "Active time per turn",
|
||||
"description": "Mean of claude_code.active_time.total divided by the session count above. This is ACTIVE seconds per turn, not wall-clock turn duration — time spent waiting on a tool or on the operator is not in it. A counter gives a mean only; there is no p50/p95 without the harness exporting a histogram.",
|
||||
"description": "Average active seconds per turn.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -762,7 +762,7 @@
|
|||
"id": 40,
|
||||
"type": "timeseries",
|
||||
"title": "Turns per hour by agent",
|
||||
"description": "Turns per hour, as a rolling 1h count. PROXY: each turn runs a new claude process, so a session record stands in for a turn.\n\n⚠️ The window is a fixed [1h] and deliberately does NOT follow the zoom: \"per hour\" is the definition of the number, not a resolution choice. rate() cannot be used here at all — a session series is only 1-3 samples long, so rate() returns a series whose value is zero, which draws a flat line rather than an error.",
|
||||
"description": "Turns per hour, per agent.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -820,7 +820,7 @@
|
|||
"id": 41,
|
||||
"type": "bargauge",
|
||||
"title": "Active time per turn by agent",
|
||||
"description": "Mean active seconds per turn, per agent, over the selected range. A high value is a long working turn, not a slow one — waiting is not counted.",
|
||||
"description": "Average active seconds per turn, per agent.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -879,7 +879,7 @@
|
|||
"id": 42,
|
||||
"type": "bargauge",
|
||||
"title": "Cost by agent",
|
||||
"description": "claude_code.cost.usage summed over the selected range, broken out by agent — which agent the spend belongs to, as opposed to the model/effort/source breakdowns above.",
|
||||
"description": "USD spent, split by agent.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
@ -938,7 +938,7 @@
|
|||
"id": 43,
|
||||
"type": "bargauge",
|
||||
"title": "Tokens by agent",
|
||||
"description": "claude_code.token.usage summed over the selected range, broken out by agent (all token types combined).",
|
||||
"description": "Tokens used, split by agent.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "@datasourceUid@"
|
||||
|
|
|
|||
Loading…
Reference in a new issue