@@ -881,6 +881,42 @@ func testREDMetricsForHTTPLibraryNoRoute(t *testing.T, url, svcName string) {
881881 require .Empty (t , results )
882882}
883883
884+ func testREDMetricsForHTTPLibraryNoRouteLowCardinality (t * testing.T , url , svcName string ) {
885+ validNames := []string {"user" , "customer" , "test" , "option" , "metric" }
886+
887+ // Call 3 times the instrumented service, forcing it to:
888+ // - take at least 30ms to respond
889+ // - returning a 404 code
890+ for i := 0 ; i < 3 ; i ++ {
891+ for _ , s := range validNames {
892+ ti .DoHTTPGet (t , url + "/api/" + s + "?delay=30ms&status=404" , 404 )
893+ }
894+ }
895+
896+ // Eventually, Prometheus would make this query visible
897+ pq := prom.Client {HostPort : prometheusHostPort }
898+ var results []prom.Result
899+ test .Eventually (t , testTimeout , func (t require.TestingT ) {
900+ var err error
901+ results , err = pq .Query (`http_server_request_duration_seconds_count{` +
902+ `http_request_method="GET",` +
903+ `http_response_status_code="404",` +
904+ `service_namespace="integration-test",` +
905+ `service_name="` + svcName + `",` +
906+ `http_route="/api/*"}` )
907+ require .NoError (t , err )
908+ // check duration_count has 3 calls and all the arguments
909+ enoughPromResults (t , results )
910+ val := totalPromCount (t , results )
911+ assert .LessOrEqual (t , 3 , val )
912+ if len (results ) > 0 {
913+ res := results [0 ]
914+ addr := res .Metric ["client_address" ]
915+ assert .NotNil (t , addr )
916+ }
917+ })
918+ }
919+
884920func testREDMetricsHTTPNoRoute (t * testing.T ) {
885921 for _ , testCaseURL := range []string {
886922 instrumentedServiceGorillaURL ,
@@ -892,6 +928,17 @@ func testREDMetricsHTTPNoRoute(t *testing.T) {
892928 }
893929}
894930
931+ func testREDMetricsHTTPNoRouteLowCardinality (t * testing.T ) {
932+ for _ , testCaseURL := range []string {
933+ instrumentedServiceStdURL ,
934+ } {
935+ t .Run (testCaseURL , func (t * testing.T ) {
936+ waitForTestComponents (t , testCaseURL )
937+ testREDMetricsForHTTPLibraryNoRouteLowCardinality (t , testCaseURL , "testserver" )
938+ })
939+ }
940+ }
941+
895942func testREDMetricsUnsupportedHTTP (t * testing.T ) {
896943 for _ , testCaseURL := range []string {
897944 instrumentedServiceStdURL ,
0 commit comments