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)