From b949ef49b8b925fa8c5bd80fce68d1331268e894 Mon Sep 17 00:00:00 2001 From: Wes Date: Sun, 5 Apr 2026 19:09:23 -0400 Subject: [PATCH] fix: add Go and Raw registries to metrics detection and health endpoint (#97) detect_registry() in metrics.rs was missing branches for /go/ and /raw/ paths, causing all requests to those registries to be labeled "other" in Prometheus metrics. dashboard_metrics.rs already lists all seven registries, so this was an oversight. Also adds go and raw fields to RegistriesHealth so the /health endpoint reports all seven registries consistently. Fixes the test_detect_registry_go_path test which previously asserted the wrong behavior ("other" instead of "go"), and adds tests for raw path detection and prefix collision safety. // ticktockbent Co-authored-by: DevITWay | Pavel Volkov --- CHANGELOG.md | 6 ++++++ nora-registry/src/health.rs | 4 ++++ nora-registry/src/metrics.rs | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e0063b..df1c606 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ # Changelog +## [Unreleased] + +### Fixed +- Go and Raw registries missing from Prometheus metrics (`detect_registry` labeled both as "other") +- Go and Raw registries missing from `/health` endpoint `registries` object + ## [0.4.0] - 2026-04-05 ### Added diff --git a/nora-registry/src/health.rs b/nora-registry/src/health.rs index 2adeba6..da53646 100644 --- a/nora-registry/src/health.rs +++ b/nora-registry/src/health.rs @@ -31,6 +31,8 @@ pub struct RegistriesHealth { pub npm: String, pub cargo: String, pub pypi: String, + pub go: String, + pub raw: String, } pub fn routes() -> Router> { @@ -70,6 +72,8 @@ async fn health_check(State(state): State>) -> (StatusCode, Json String { "cargo".to_string() } else if path.starts_with("/simple") || path.starts_with("/packages") { "pypi".to_string() + } else if path.starts_with("/go/") { + "go".to_string() + } else if path.starts_with("/raw/") { + "raw".to_string() } else if path.starts_with("/ui") { "ui".to_string() } else { @@ -205,8 +209,19 @@ mod tests { fn test_detect_registry_go_path() { assert_eq!( detect_registry("/go/github.com/user/repo/@v/v1.0.0.info"), - "other" + "go" ); + assert_eq!(detect_registry("/go/github.com/user/repo/@latest"), "go"); + // Bare prefix without trailing slash should not match + assert_eq!(detect_registry("/goblin/something"), "other"); + } + + #[test] + fn test_detect_registry_raw_path() { + assert_eq!(detect_registry("/raw/my-project/artifact.tar.gz"), "raw"); + assert_eq!(detect_registry("/raw/data/file.bin"), "raw"); + // Bare prefix without trailing slash should not match + assert_eq!(detect_registry("/rawdata/file"), "other"); } #[test]