Skip to content

feat(dashboards): an Overview board as the folder's entry point - #617

Merged
QuentinBisson merged 1 commit into
mainfrom
feat/overview-dashboard
Sep 22, 2026
Merged

QuentinBisson merged 1 commit into
mainfrom
feat/overview-dashboard

Conversation

@QuentinBisson

@QuentinBisson QuentinBisson commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Problem

The six alerts in agent-platform.rules.yml page with a runbook and no graph. The platform has no board of its own health, and Postgres and Valkey have no board at all — the one board that exists reads agentgateway_gen_ai_*, so it is an LLM cost and latency view, not a platform view.

Change

dashboards in both charts renders one ConfigMap per JSON under the connectivity chart's dashboards/ directory, discovered by observability-operator through the app.giantswarm.io/kind: dashboard label and placed by the observability.giantswarm.io/organization and .../folder annotations. Both values are display names carrying a space, so neither can be a label.

It ships one board: Overview, uid agent-platform-overview, in Shared Org / Agent Platform.

Row What it shows
What this is What the platform is, and a table of which board covers what, with a dashboard link
Component health HelmReleases not ready, kagent-controller replicas, MCP servers failed and connected, Postgres clusters unhealthy, containers restarting, muster session store, Valkey memory — plus readiness and restarts over time
What it is doing Tokens/s, cost/hour, tool calls/s, agents calling, gateway error ratio, MCP servers; tokens by agent and tool calls by MCP server
Postgres Cluster phase, backends waiting, WAL archive lag
Valkey Memory against the limit, connected clients, keys evicted

Every health panel reads the same series as the alert that pages for itgotk_resource_info, kube_deployment_status_replicas_available, muster_mcpserver_state, kube_cnpg_cluster_info, kube_pod_container_status_restarts_total, muster_session_store_backend, redis_memory_used_bytes — and each panel description names that alert. A panel and a page cannot disagree.

Postgres gets rows here rather than a board: giantswarm/cloudnative-pg-app (Team Shield) already ships the full CloudNativePG board fleet-wide, and duplicating its JSON into our folder would be the worst of both. Its board is in the staff-only Giant Swarm organization, so for a customer these rows are the whole Postgres story.

The ConfigMaps render under the resolved global.observability.metrics.serviceMonitor.enabled: the operator that picks them up is part of the observability platform the monitors write to, and a board over series nobody collects is worse than no board. A component's own board still comes from that component's chart.

A row only renders where its data exists

A default installation runs neither CloudNativePG nor the agentgateway data plane, and several run no Valkey. The board shipped verbatim, so those rows opened as tiles of "No data" for the customers who reach this folder.

Each component-owned row now repeats over a hidden variable, label_values(<metric>, __name__), which yields exactly one value while the metric exists and none while it does not:

Gate Probe metric What it hides
postgres_present kube_cnpg_cluster_info the Postgres row
valkey_present redis_memory_used_bytes the Valkey row
agentgateway_present agentgateway_requests_total the six agentgateway panels of "what it is doing"

The agentgateway gate is per panel, not per row: MCP servers and tool calls by MCP server in the same row read muster's series, which every installation has.

This gates on data rather than on components.<name>.enabled. A component that is enabled but not yet scraped is hidden the same way, and the JSON stays a file that can be pasted into Grafana.

Checks

  • dashboard-linter --strict with giantswarm/dashboards' own lint config, at the version its install-tools.sh pins: clean, exit 0.
  • Classic v1 schema (schemaVersion: 41, no stripped v2 envelope), editable: false, uid and owner:team-bumblebee tag present — what check-dashboard-schema.sh and validate-dashboards.sh assert.
  • All 54 verify-* targets pass. Re-run after the rebase on feat(dashboards): load the muster board into Shared Org / Agent Platform #615 and the gating: verify-target, verify-modes, verify-wiring, and dashboard-linter --strict (exit 0).

Note on the golden comparisons

verify-modes, verify-wiring and verify-target drop the board by name, not with --set: GOLDEN_REF's schema has no dashboards key, so a values hold fails its render outright and then every document reads as added. While fixing that I found the verify-modes stripper loses the leading --- whenever the dropped document is the first one; it now keeps it.

Third of three PRs putting every agent platform board in one folder, after #615 (merged) and #616. Rebased on #615. Part of giantswarm/giantswarm#36711.

@circleci-architect

circleci-architect Bot commented Sep 21, 2026

Copy link
Copy Markdown

Published Helm chart agent-platform

4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
Chart agent-platform
Version 4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
OCI reference oci://gsoci.azurecr.io/charts/giantswarm/agent-platform:4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
Digest sha256:74105b3341f3fdc3d606361f1510adfff872f8d2f0b0722172d30ea707aae465
Registry public — gsoci.azurecr.io
Git catalog giantswarm-test-catalog (index)
Pull this chart
helm pull oci://gsoci.azurecr.io/charts/giantswarm/agent-platform --version 4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28

Posted by architect-orb · build 11027 · commit 8505e28 · updated in place on every push

@circleci-architect

circleci-architect Bot commented Sep 21, 2026

Copy link
Copy Markdown

Published Helm chart agent-platform-connectivity

4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
Chart agent-platform-connectivity
Version 4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
OCI reference oci://gsoci.azurecr.io/charts/giantswarm/agent-platform-connectivity:4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28
Digest sha256:53897754b2e382b4c2e779f5d4de066c16308a869f42d45e21dfa34766741dd1
Registry public — gsoci.azurecr.io
Git catalog giantswarm-test-catalog (index)
Pull this chart
helm pull oci://gsoci.azurecr.io/charts/giantswarm/agent-platform-connectivity --version 4.51.1-dev.feat-overview-dashboard.2026-09-22.08-58-35.h8505e28

Posted by architect-orb · build 11026 · commit 8505e28 · updated in place on every push

@QuentinBisson
QuentinBisson force-pushed the feat/overview-dashboard branch from 45bda74 to f6493fc Compare September 22, 2026 08:35
The six alerts of agent-platform.rules.yml hand on-call a runbook and
no graph: the platform had no board of its own health, and Postgres and
Valkey had no board at all.

dashboards renders one ConfigMap per JSON under the connectivity chart's
dashboards/ directory, discovered by observability-operator through the
app.giantswarm.io/kind label and placed by the organization and folder
annotations — both values carry a space, so neither can be a label.

overview.json is the first board: what the platform is and which board
covers what, component health, what it is doing, and the Postgres and
Valkey rows. Every health panel reads the same series as the alert that
pages for it, so a panel and a page cannot disagree.

The ConfigMaps render under the resolved
global.observability.metrics.serviceMonitor.enabled: the operator that
picks them up is part of the observability platform the monitors write
to, and a board over series nobody collects is worse than no board.

A component's own board still comes from that component's chart. The
golden comparisons of verify-modes, verify-wiring and verify-target drop
the board by name: GOLDEN_REF's schema has no dashboards key, so a --set
hold would fail its render outright. The stripper of verify-modes also
lost the leading document separator whenever the dropped document was
the first one.
@QuentinBisson
QuentinBisson force-pushed the feat/overview-dashboard branch from f6493fc to 8505e28 Compare September 22, 2026 08:59
@QuentinBisson
QuentinBisson marked this pull request as ready for review September 22, 2026 09:02
@QuentinBisson
QuentinBisson requested a review from a team as a code owner September 22, 2026 09:02
@QuentinBisson
QuentinBisson merged commit 4231c36 into main Sep 22, 2026
13 checks passed
@QuentinBisson
QuentinBisson deleted the feat/overview-dashboard branch September 22, 2026 09:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant