35
35
import io .opentelemetry .sdk .metrics .internal .data .ImmutableSumData ;
36
36
import io .opentelemetry .sdk .resources .Resource ;
37
37
import io .prometheus .metrics .exporter .httpserver .HTTPServer ;
38
+ import io .prometheus .metrics .exporter .httpserver .MetricsHandler ;
38
39
import io .prometheus .metrics .model .registry .PrometheusRegistry ;
39
40
import java .io .ByteArrayInputStream ;
40
41
import java .io .IOException ;
@@ -229,7 +230,7 @@ void fetchOpenMetrics() {
229
230
void fetchFiltered () {
230
231
AggregatedHttpResponse response =
231
232
client
232
- .get ("/?name[]=grpc_name_unit_total&name[]=bears_total&name[]=target_info" )
233
+ .get ("/metrics ?name[]=grpc_name_unit_total&name[]=bears_total&name[]=target_info" )
233
234
.aggregate ()
234
235
.join ();
235
236
assertThat (response .status ()).isEqualTo (HttpStatus .OK );
@@ -245,6 +246,47 @@ void fetchFiltered() {
245
246
+ "target_info{kr=\" vr\" } 1\n " );
246
247
}
247
248
249
+ @ Test
250
+ void fetchOverrideDefaultHandler () {
251
+ PrometheusRegistry registry = new PrometheusRegistry ();
252
+ try (PrometheusHttpServer prometheusServer =
253
+ PrometheusHttpServer .builder ()
254
+ .setHost ("localhost" )
255
+ .setPort (0 )
256
+ .setPrometheusRegistry (registry )
257
+ // Set the default handler to serve metrics on /**
258
+ .setDefaultHandler (new MetricsHandler (registry ))
259
+ .build ()) {
260
+ prometheusServer .register (
261
+ new CollectionRegistration () {
262
+ @ Override
263
+ public Collection <MetricData > collectAllMetrics () {
264
+ return metricData .get ();
265
+ }
266
+ });
267
+ WebClient client =
268
+ WebClient .builder ("http://localhost:" + prometheusServer .getAddress ().getPort ())
269
+ .decorator (RetryingClient .newDecorator (RetryRule .failsafe ()))
270
+ .build ();
271
+
272
+ // Fetch metrics from / instead of /metrics
273
+ AggregatedHttpResponse response = client .get ("/" ).aggregate ().join ();
274
+ assertThat (response .status ()).isEqualTo (HttpStatus .OK );
275
+ assertThat (response .headers ().get (HttpHeaderNames .CONTENT_TYPE ))
276
+ .isEqualTo ("text/plain; version=0.0.4; charset=utf-8" );
277
+ assertThat (response .contentUtf8 ())
278
+ .isEqualTo (
279
+ "# HELP grpc_name_unit_total long_description\n "
280
+ + "# TYPE grpc_name_unit_total counter\n "
281
+ + "grpc_name_unit_total{kp=\" vp\" ,otel_scope_name=\" grpc\" ,otel_scope_version=\" version\" } 5.0\n "
282
+ + "# HELP http_name_unit_total double_description\n "
283
+ + "# TYPE http_name_unit_total counter\n "
284
+ + "http_name_unit_total{kp=\" vp\" ,otel_scope_name=\" http\" ,otel_scope_version=\" version\" } 3.5\n "
285
+ + "# TYPE target_info gauge\n "
286
+ + "target_info{kr=\" vr\" } 1\n " );
287
+ }
288
+ }
289
+
248
290
@ SuppressWarnings ("resource" )
249
291
@ Test
250
292
void fetchPrometheusCompressed () throws IOException {
@@ -275,7 +317,7 @@ void fetchPrometheusCompressed() throws IOException {
275
317
@ SuppressWarnings ("resource" )
276
318
@ Test
277
319
void fetchHead () {
278
- AggregatedHttpResponse response = client .head ("/" ).aggregate ().join ();
320
+ AggregatedHttpResponse response = client .head ("/metrics " ).aggregate ().join ();
279
321
assertThat (response .status ()).isEqualTo (HttpStatus .OK );
280
322
assertThat (response .headers ().get (HttpHeaderNames .CONTENT_TYPE ))
281
323
.isEqualTo ("text/plain; version=0.0.4; charset=utf-8" );
0 commit comments