| @@ -206,3 +206,37 @@ func TestMetricsMiddleware_RequestDuration(t *testing.T) { | |||||
| assert.Equal(t, 1, testutil.CollectAndCount(m.RequestDuration)) | 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) | |||||
| } | |||||
| @@ -1,6 +1,8 @@ | |||||
| package router | package router | ||||
| import ( | 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/constant" | ||||
| "github.com/QuantumNous/new-api/controller" | "github.com/QuantumNous/new-api/controller" | ||||
| "github.com/QuantumNous/new-api/middleware" | "github.com/QuantumNous/new-api/middleware" | ||||
| @@ -18,6 +20,11 @@ func relayHandler(format types.RelayFormat) gin.HandlerFunc { | |||||
| } | } | ||||
| func SetRelayRouter(router *gin.Engine) { | 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.CORS()) | ||||
| router.Use(middleware.DecompressRequestMiddleware()) | router.Use(middleware.DecompressRequestMiddleware()) | ||||
| router.Use(middleware.BodyStorageCleanup()) // 清理请求体存储 | router.Use(middleware.BodyStorageCleanup()) // 清理请求体存储 | ||||