Description
Access users are exported only as a bare count; seat usage (Access seat, Gateway seat) drives licensing and is available on the users endpoint.
Acceptance Criteria
- #1 Access and Gateway seat counts are exported as gauges
- #2 No per-user metric attribute is emitted
- #3 Every new signal and attribute is declared in internal/semconv, listed in docs/signals.md, and has a panel in grafana/build_dashboard.py
Definition of Done
- #1 just check (fmt-check, lint, vet, test, tidy-check, build, vuln)
- #2 just ci before a change that touches the Dockerfile, goreleaser or the image (adds snapshot + image)
- #3 Every new signal or attribute name declared in internal/semconv and listed in docs/signals.md
Implementation Plan
Loop15 E48D: add access.seats snapshot collector in the owned Access package, preserving inventory.access. Root current official SDK verifies access_seat/gateway_seat booleans; non-empty live read-only canary matched both fields. Emit cloudflare.access.seats with bounded access/gateway type only, unit 1, full pagination and genuine false/empty zeros; absent/null/malformed flags fail without partial counts. Default enabled, 15-minute interval, no user/device/identity metric attributes. Dashboard panel is a separate DASH-chain slice before AC3 completion.
Implementation Notes
Code-level seat gauge and bounded-attribute criteria verified on public d08dce3: local registered HTTP/SDK behavior and exact root gate/API canary, literal-zero net/history scans, nine applicable exact-SHA workflows and six CI jobs succeeded. Seat panel source is included, but configuration readback and any applicable interactive evidence are separate; AC3 remains open. No deployed seat series or runtime-hour claim.
Final Summary
Source criteria complete on published d08dce3, inherited by a77ce0b: bounded Access/Gateway gauges tested through registered collector, real HTTP pagination and SDK, with no user metric attributes. Semconv and signal docs declared both names; dashboard generator includes the independent two-series panel. Exact source gate/API canary, zero-hit net/history scans, applicable CI and GitSync succeeded. Readback matches panel queries/viz/layout except API omission of an explicitly empty mappings array, recorded as one specific normalization rather than raw exact equality. AC3 is source declaration/documentation/panel presence, not a browser-rendering or live-series criterion. No deployed seat data, browser rendering or sustained-runtime claim.