github.com/avenga/couper@v1.12.2/server/http_telemetry_test.go (about) 1 package server_test 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "regexp" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/avenga/couper/config" 13 "github.com/avenga/couper/internal/test" 14 ) 15 16 func TestServeMetrics(t *testing.T) { 17 t.Skip("TODO: stabilize metrics") 18 helper := test.New(t) 19 shutdown, _ := newCouper("testdata/integration/telemetry/01_couper.hcl", helper) 20 defer shutdown() 21 22 client := test.NewHTTPClient() 23 mreq, err := http.NewRequest(http.MethodGet, 24 fmt.Sprintf("http://localhost:%d/metrics", config.NewDefaultSettings().TelemetryMetricsPort), nil) 25 helper.Must(err) 26 27 paths := []string{ 28 "/", 29 "/down", 30 "/notfound", 31 } 32 for _, path := range paths { 33 go func(p string) { 34 clientReq, perr := http.NewRequest(http.MethodGet, "http://localhost:8080"+p, nil) 35 helper.Must(perr) 36 37 res, rerr := client.Do(clientReq) 38 helper.Must(rerr) 39 helper.Must(res.Body.Close()) 40 }(path) 41 42 } 43 44 time.Sleep(time.Second * 3) 45 46 res, err := client.Do(mreq) 47 if err != nil { 48 t.Fatalf("metrics endpoint could not be reached: %v", err) 49 } 50 51 b, err := io.ReadAll(res.Body) 52 helper.Must(err) 53 54 // due to random client remote port 55 result := regexp.MustCompile(`127\.0\.0\.1:\d{5}`).ReplaceAll(b, []byte("127.0.0.1")) 56 57 expMetrics := []string{ 58 `couper_backend_request_duration_seconds_count{backend_name="anything",code="200",hostname="127.0.0.1",method="GET",origin="127.0.0.1",service_name="my-service",service_version="0"} 1`, 59 `couper_backend_request_total{backend_name="anything",code="200",hostname="127.0.0.1",method="GET",origin="127.0.0.1",service_name="my-service",service_version="0"} 1`, 60 `couper_backend_up{backend_name="anything",hostname="127.0.0.1",origin="127.0.0.1",service_name="my-service",service_version="0"} 1`, 61 `couper_backend_up{backend_name="not_healthy",hostname="1.2.3.4",origin="1.2.3.4:80",service_name="my-service",service_version="0"} 0`, 62 `couper_client_request_duration_seconds_count{code="200",host="localhost:8080",method="GET",service_name="my-service",service_version="0"} 1`, 63 `couper_client_request_duration_seconds_count{code="404",host="localhost:8080",method="GET",service_name="my-service",service_version="0"} 1`, 64 `couper_client_request_total{code="200",host="localhost:8080",method="GET",service_name="my-service",service_version="0"} 1`, 65 `couper_client_request_total{code="404",host="localhost:8080",method="GET",service_name="my-service",service_version="0"} 1`, 66 `couper_client_request_error_types_total{error="route_not_found_error",service_name="my-service",service_version="0"} 1`, 67 `couper_client_connections_total{service_name="my-service",service_version="0"} 3`, 68 `go_goroutines{service_name="my-service",service_version="0"}`, 69 } 70 71 for _, expMetric := range expMetrics { 72 if !strings.Contains(string(result), expMetric) { 73 t.Errorf("missing metric: %s", expMetric) 74 } 75 } 76 77 if t.Failed() { 78 println(string(result)) 79 } 80 }