diff --git a/common/metrics/metrics_test.go b/common/metrics/metrics_test.go index ad09b42..04d042c 100644 --- a/common/metrics/metrics_test.go +++ b/common/metrics/metrics_test.go @@ -206,3 +206,37 @@ func TestMetricsMiddleware_RequestDuration(t *testing.T) { assert.Equal(t, 1, testutil.CollectAndCount(m.RequestDuration)) } + +func TestMetricsEndpoint_Format(t *testing.T) { + handler := NewMetricsHandler() + + req := httptest.NewRequest("GET", "/metrics", nil) + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + + assert.Equal(t, 200, w.Code) + assert.Contains(t, w.Header().Get("Content-Type"), "text/plain") +} + +func TestMetricsEndpoint_WithData(t *testing.T) { + reg := newTestRegistry() + _ = NewMetrics(reg) + + handler := NewMetricsHandlerWithRegistry(reg) + + req := httptest.NewRequest("GET", "/metrics", nil) + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + + assert.Equal(t, 200, w.Code) +} + +func TestMetricsEndpoint_EmptyNoPanic(t *testing.T) { + handler := NewMetricsHandler() + + req := httptest.NewRequest("GET", "/metrics", nil) + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + + assert.Equal(t, 200, w.Code) +} diff --git a/router/relay-router.go b/router/relay-router.go index f0e5e15..23c45e1 100644 --- a/router/relay-router.go +++ b/router/relay-router.go @@ -1,6 +1,8 @@ package router import ( + "github.com/QuantumNous/new-api/common" + "github.com/QuantumNous/new-api/common/metrics" "github.com/QuantumNous/new-api/constant" "github.com/QuantumNous/new-api/controller" "github.com/QuantumNous/new-api/middleware" @@ -18,6 +20,11 @@ func relayHandler(format types.RelayFormat) gin.HandlerFunc { } func SetRelayRouter(router *gin.Engine) { + if metrics.IsEnabled() { + metricsPath := common.GetEnvOrDefaultString("METRICS_PATH", "/metrics") + router.GET(metricsPath, gin.WrapH(metrics.NewMetricsHandler())) + } + router.Use(middleware.CORS()) router.Use(middleware.DecompressRequestMiddleware()) router.Use(middleware.BodyStorageCleanup()) // 清理请求体存储