This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch mm in repository https://gitbox.apache.org/repos/asf/camel.git
commit 35bdfded905bb5cf9760d53a14da9759792bc2f3 Author: Claus Ibsen <[email protected]> AuthorDate: Tue Dec 19 12:43:23 2023 +0100 Experiment --- .../prometheus/MicrometerPrometheus.java | 6 ++-- .../MicrometerExchangeEventNotifier.java | 34 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java b/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java index 0fb8ae2257e..63289d4b668 100644 --- a/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java +++ b/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java @@ -297,11 +297,9 @@ public class MicrometerPrometheus extends ServiceSupport implements CamelMetrics for (Meter m : meterRegistry.getMeters()) { String n = m.getId().getName(); boolean camel = n.startsWith("camel_") || n.startsWith("camel."); - boolean inflight - = n.startsWith("camel.exchanges.inflight") || n.startsWith("camel_exchanges_inflight"); boolean keep = n.startsWith("camel.exchanges.") || n.startsWith("camel_exchanges_"); - // remove camel or inflight, but keep those special camel.exchanges. counters - boolean remove = camel && (inflight || !keep); + // remove camel but keep those special camel.exchanges. counters + boolean remove = camel && !keep; if (remove) { String t = m.getId().getTag("routeId"); if (t != null) { diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java index d4fc998b69f..61ce90e9526 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java @@ -16,10 +16,13 @@ */ package org.apache.camel.component.micrometer.eventnotifier; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Predicate; import io.micrometer.core.instrument.Gauge; +import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.Timer; import org.apache.camel.Exchange; @@ -30,9 +33,12 @@ import org.apache.camel.spi.CamelEvent.ExchangeEvent; import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent; import org.apache.camel.spi.CamelEvent.ExchangeSentEvent; import org.apache.camel.spi.InflightRepository; +import org.apache.camel.support.SimpleEventNotifierSupport; public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNotifier<ExchangeEvent> { private InflightRepository inflightRepository; + + private final Map<String, Meter> meterMap = new HashMap<>(); private Predicate<Exchange> ignoreExchanges = exchange -> false; private MicrometerExchangeEventNotifierNamingStrategy namingStrategy = MicrometerExchangeEventNotifierNamingStrategy.DEFAULT; @@ -59,8 +65,31 @@ public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNoti @Override protected void doStart() throws Exception { - inflightRepository = getCamelContext().getInflightRepository(); super.doStart(); + + inflightRepository = getCamelContext().getInflightRepository(); + + // need to be able to remove meter if a route is removed + getCamelContext().getManagementStrategy().addEventNotifier(new SimpleEventNotifierSupport() { + @Override + public void notify(CamelEvent event) throws Exception { + if (event instanceof CamelEvent.RouteRemovedEvent rre) { + String id = rre.getRoute().getRouteId(); + Meter meter = meterMap.remove(id); + if (meter != null) { + getMeterRegistry().remove(meter); + } + } + } + }); + } + + @Override + protected void doStop() throws Exception { + super.doStop(); + + meterMap.values().forEach(m -> getMeterRegistry().remove(m)); + meterMap.clear(); } @Override @@ -82,10 +111,11 @@ public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNoti if (exchange.getFromRouteId() != null && exchange.getFromEndpoint() != null) { String name = namingStrategy.getInflightExchangesName(exchange, exchange.getFromEndpoint()); Tags tags = namingStrategy.getInflightExchangesTags(exchangeEvent, exchange.getFromEndpoint()); - Gauge.builder(name, () -> getInflightExchangesInRoute(exchangeEvent)) + Meter meter = Gauge.builder(name, () -> getInflightExchangesInRoute(exchangeEvent)) .description("Route inflight messages") .tags(tags) .register(getMeterRegistry()); + meterMap.put(exchange.getFromRouteId(), meter); } }
