Skip to content

refactor(metrics): centralize registry and lifecycle tracking - #446

Merged
zijiren233 merged 10 commits into
synctv-org:mainfrom
zijiren233:refactor/metrics-architecture
Aug 25, 2026
Merged

refactor(metrics): centralize registry and lifecycle tracking#446
zijiren233 merged 10 commits into
synctv-org:mainfrom
zijiren233:refactor/metrics-architecture

Conversation

@zijiren233

@zijiren233 zijiren233 commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • split Prometheus definitions into domain-owned modules backed by one registry
  • eagerly initialize every metric family and fail startup on invalid or duplicate definitions
  • add reusable RAII guards for gauges and relay durations across cancellation, panic, and retry paths
  • centralize HTTP, WebSocket, gRPC, and relay recording behind bounded-label helpers
  • enforce the 65-metric bilingual catalog from registered descriptors
  • persist completed explicit-message deletion and user-ban moderation steps
  • update the pinned Rust toolchain and CI jobs to nightly-2026-08-25
  • make the CI Clippy job fail on every Rust warning with -D warnings
  • keep Helm configuration-validation builds visible to avoid silent-run termination
  • separate Rust caches by artifact type and let Helm reuse codegen artifacts from the Build job
  • work around the nightly global next-solver memory regression and remove obsolete rustc recursion-limit overrides
  • preserve workspace Rust flags in Docker builds while applying linker flags to the final binary

Compatibility

  • preserve all existing metric names, HELP text, label order, and histogram buckets
  • keep route-template and bounded status/error labels
  • return HTTP 500 when Prometheus exposition encoding fails
  • keep the latest nightly while restoring the previous coherence-only trait-solver behavior

Nightly memory regression

The failed CI jobs were terminated by the runner while compiling synctv-api-http (SIGTERM, exit 143). Local peak-RSS measurements for that crate were:

Configuration Peak RSS
nightly-2026-08-21 6.62 GB
nightly-2026-08-25, global next solver 10.76 GB
nightly-2026-08-25, -Znext-solver=coherence 6.64 GB

Rust enabled -Znext-solver=globally by default on nightly in rust-lang/rust#160619. The same memory blow-up is tracked in rust-lang/rust#161748, and the official tracking issue documents -Znext-solver=coherence as the temporary opt-out. The workspace now applies that option in .cargo/config.toml.

The Dockerfile previously set RUSTFLAGS for linker options, which overrode the workspace configuration and re-enabled the global solver inside image builds. It now uses cargo rustc to pass linker flags only to the final binary, preserving the workspace solver setting for every crate.

All rustc #![recursion_limit = "256"] attributes were removed. The default limit passes with the coherence-only solver, confirming that a higher recursion limit was unrelated to the CI termination.

Validation

  • make build-workspace
  • make clippy-check (--workspace --all-targets -- -D warnings)
  • cargo check --locked -p synctv-api-http
  • cargo check --locked -p synctv-api-common -p synctv-api-grpc
  • cargo test -p synctv-api-common --lib (655 passed, 165 Docker tests ignored)
  • cargo test -p synctv-core metrics --lib (9 passed)
  • make fmt-check
  • docker build --check .
  • make validate-helm
  • actionlint .github/workflows/ci.yml .github/workflows/helm-ci.yml
  • npm run validate in docs (124 pages, 353 links, Astro 0 errors/warnings)

@zijiren233
zijiren233 merged commit 2445da8 into synctv-org:main Aug 25, 2026
20 checks passed
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