0

I'm exposing some custom metrics from my Quarkus application using microprofile MetricRegistry class. Those metrics are consumed and exposed to Prometheus through the /metrics endpoint.

For testing purposes I'd like to reset/clear all metrics during the tearDown() part of the test. I don't mind creating a REST endpoint, that'll only be available under the test profile, to clear these metrics via an API call.

I couldn't find how to achieve that on the internet so far, does anybody have any idea on how to do that?

João Pedro Schmitt
  • 1,046
  • 1
  • 11
  • 25

1 Answers1

0

I think I have found an alternative, it's just a matter of exposing the following API:

package com.operation;

import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.eclipse.microprofile.metrics.MetricRegistry;


@Path("/")
@ApplicationScoped
@IfBuildProfile("functional")
public class MetricReset {

    MetricRegistry metricRegistry;

    public MetricReset(MetricRegistry metricRegistry) {
        this.metricRegistry = metricRegistry;
    }

    @GET
    @Path("/clearmetrics")
    @Produces({ MediaType.TEXT_PLAIN })
    public Response clearAllPollerMetrics() {
        metricRegistry.removeMatching((id, metric) -> id.getName().contains("custometric"));
        return Response.ok().build();
    }
}

and later on calling this endpoint before each functional test:

//...
    @BeforeEach
    public void setUp() {
        utils.resetAll();
        ClientBuilder.newClient()
                .target("http://localhost:8080/clearmetrics")
                .request()
                .get();
    }
//...
João Pedro Schmitt
  • 1,046
  • 1
  • 11
  • 25