From a9c33b44eb5bf663a059bce9ecc136de2228622b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 18 Dec 2025 00:58:50 +0900 Subject: [PATCH] Fix: Register /metrics endpoint handler in platform metrics router MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The metrics endpoint was showing 404 because the HTTP handler was not being registered in initMetricsRouter(). Added MetricsHandlerProvider interface to check if metrics implementation provides a handler, and register it automatically. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- channels/app/platform/metrics.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/channels/app/platform/metrics.go b/channels/app/platform/metrics.go index 1ca1dc8e..fdbe89b3 100644 --- a/channels/app/platform/metrics.go +++ b/channels/app/platform/metrics.go @@ -136,6 +136,11 @@ func (pm *platformMetrics) startMetricsServer() error { return nil } +// MetricsHandlerProvider is an interface for metrics implementations that can provide an HTTP handler +type MetricsHandlerProvider interface { + Handler() http.Handler +} + func (pm *platformMetrics) initMetricsRouter() error { pm.router = mux.NewRouter() runtime.SetBlockProfileRate(*pm.cfgFn().MetricsSettings.BlockProfileRate) @@ -170,6 +175,14 @@ func (pm *platformMetrics) initMetricsRouter() error { pm.router.HandleFunc("/", rootHandler) pm.router.StrictSlash(true) + // Register /metrics handler if metrics implementation provides a handler + if pm.metricsImpl != nil { + if handlerProvider, ok := pm.metricsImpl.(MetricsHandlerProvider); ok { + pm.router.Handle("/metrics", handlerProvider.Handler()) + pm.logger.Info("Metrics endpoint registered at /metrics") + } + } + pm.router.Handle("/debug", http.RedirectHandler("/", http.StatusMovedPermanently)) pm.router.HandleFunc("/debug/pprof/", pprof.Index) pm.router.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)