This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new a5ad2fe CAMEL-15908: Add additional exchange metrics to
MicrometerRoutePolicy
a5ad2fe is described below
commit a5ad2fea485122e15d975e8bb6f377078312af0b
Author: James Netherton <[email protected]>
AuthorDate: Tue Dec 1 07:30:04 2020 +0000
CAMEL-15908: Add additional exchange metrics to MicrometerRoutePolicy
---
.../component/micrometer/MicrometerConstants.java | 5 ++
.../routepolicy/MicrometerRoutePolicy.java | 17 ++++++
.../MicrometerRoutePolicyNamingStrategy.java | 15 ++++++
.../ManagedMicrometerRoutePolicyTest.java | 4 +-
...MicrometerRoutePolicyMulticastSubRouteTest.java | 61 ++++++++++++++++++++--
.../MicrometerRoutePolicySubRouteTest.java | 4 +-
6 files changed, 97 insertions(+), 9 deletions(-)
diff --git
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
index d30ae6d..2494b14 100644
---
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
+++
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
@@ -33,6 +33,11 @@ public final class MicrometerConstants {
public static final String DEFAULT_CAMEL_MESSAGE_HISTORY_METER_NAME =
"CamelMessageHistory";
public static final String
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILED_METER_NAME = "CamelExchangesFailed";
public static final String
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_SUCCEEDED_METER_NAME =
"CamelExchangesSucceeded";
+ public static final String
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_TOTAL_METER_NAME = "CamelExchangesTotal";
+ public static final String
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILURES_HANDLED_METER_NAME
+ = "CamelExchangesFailuresHandled";
+ public static final String
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_EXTERNAL_REDELIVERIES_METER_NAME
+ = "CamelExchangesExternalRedeliveries";
public static final String DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME =
"CamelRoutePolicy";
public static final String DEFAULT_CAMEL_EXCHANGE_EVENT_METER_NAME =
"CamelExchangeEventNotifier";
public static final String DEFAULT_CAMEL_ROUTES_ADDED = "CamelRoutesAdded";
diff --git
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
index 33e3a09..811770a 100644
---
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
+++
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicy.java
@@ -27,6 +27,7 @@ import org.apache.camel.NonManagedService;
import org.apache.camel.Route;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.micrometer.MicrometerUtils;
+import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.RoutePolicySupport;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.util.ObjectHelper;
@@ -54,6 +55,9 @@ public class MicrometerRoutePolicy extends RoutePolicySupport
implements NonMana
private final MicrometerRoutePolicyNamingStrategy namingStrategy;
private final Counter exchangesSucceeded;
private final Counter exchangesFailed;
+ private final Counter exchangesTotal;
+ private final Counter externalRedeliveries;
+ private final Counter failuresHandled;
private MetricsStatistics(MeterRegistry meterRegistry, Route route,
MicrometerRoutePolicyNamingStrategy
namingStrategy) {
@@ -62,6 +66,9 @@ public class MicrometerRoutePolicy extends RoutePolicySupport
implements NonMana
this.route = route;
this.exchangesSucceeded =
createCounter(namingStrategy.getExchangesSucceededName(route));
this.exchangesFailed =
createCounter(namingStrategy.getExchangesFailedName(route));
+ this.exchangesTotal =
createCounter(namingStrategy.getExchangesTotalName(route));
+ this.externalRedeliveries =
createCounter(namingStrategy.getExternalRedeliveriesName(route));
+ this.failuresHandled =
createCounter(namingStrategy.getFailuresHandledName(route));
}
public void onExchangeBegin(Exchange exchange) {
@@ -79,10 +86,20 @@ public class MicrometerRoutePolicy extends
RoutePolicySupport implements NonMana
sample.stop(timer);
}
+ exchangesTotal.increment();
+
if (exchange.isFailed()) {
exchangesFailed.increment();
} else {
exchangesSucceeded.increment();
+
+ if (ExchangeHelper.isFailureHandled(exchange)) {
+ failuresHandled.increment();
+ }
+
+ if (exchange.isExternalRedelivered()) {
+ externalRedeliveries.increment();
+ }
}
}
diff --git
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
index 953b93f..9310d6a 100644
---
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
+++
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
@@ -24,8 +24,11 @@ import org.apache.camel.Exchange;
import org.apache.camel.Route;
import static
org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_EXTERNAL_REDELIVERIES_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILED_METER_NAME;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILURES_HANDLED_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_SUCCEEDED_METER_NAME;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_TOTAL_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.FAILED_TAG;
import static
org.apache.camel.component.micrometer.MicrometerConstants.ROUTE_ID_TAG;
@@ -51,6 +54,18 @@ public interface MicrometerRoutePolicyNamingStrategy {
return DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILED_METER_NAME;
}
+ default String getExchangesTotalName(Route route) {
+ return DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_TOTAL_METER_NAME;
+ }
+
+ default String getFailuresHandledName(Route route) {
+ return
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILURES_HANDLED_METER_NAME;
+ }
+
+ default String getExternalRedeliveriesName(Route route) {
+ return
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_EXTERNAL_REDELIVERIES_METER_NAME;
+ }
+
default Tags getTags(Route route, Exchange exchange) {
return Tags.of(
CAMEL_CONTEXT_TAG, route.getCamelContext().getName(),
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
index da5bfa9..905798d 100644
---
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
@@ -52,9 +52,9 @@ public class ManagedMicrometerRoutePolicyTest extends
AbstractMicrometerRoutePol
assertMockEndpointsSatisfied();
- // there should be 7 names
+ // there should be 13 names
List<Meter> meters = meterRegistry.getMeters();
- assertEquals(7, meters.size());
+ assertEquals(13, meters.size());
String name =
String.format("org.apache.camel:context=%s,type=services,name=MicrometerRoutePolicyService",
context.getManagementName());
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
index d992a00..429edde 100644
---
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
@@ -24,8 +24,11 @@ import io.micrometer.core.instrument.Timer;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_EXTERNAL_REDELIVERIES_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILED_METER_NAME;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILURES_HANDLED_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_SUCCEEDED_METER_NAME;
+import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_TOTAL_METER_NAME;
import static
org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
@@ -45,13 +48,14 @@ public class MicrometerRoutePolicyMulticastSubRouteTest
extends AbstractMicromet
for (int i = 0; i < count; i++) {
template.sendBody("direct:multicast", "Hello World");
+ template.send("direct:failure", e -> e.getMessage().setBody("Hello
World"));
}
assertMockEndpointsSatisfied();
- // there should be 9 names
+ // there should be 6 metrics per route
List<Meter> meters = meterRegistry.getMeters();
- assertEquals(9, meters.size());
+ assertEquals(6 * context.getRouteDefinitions().size(), meters.size());
meters.forEach(meter -> {
String meterName = meter.getId().getName();
@@ -62,13 +66,53 @@ public class MicrometerRoutePolicyMulticastSubRouteTest
extends AbstractMicromet
break;
case
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_SUCCEEDED_METER_NAME: {
Counter counter = (Counter) meter;
- assertEquals(count, counter.count(), 0.01D,
+ int expectedCount;
+ String routeId = counter.getId().getTag("routeId");
+ if (routeId.equals("failure")) {
+ expectedCount = 0;
+ } else {
+ expectedCount = count;
+ }
+ assertEquals(expectedCount, counter.count(), 0.01D,
"Counter " + counter.getId() + " should have count
of " + count);
break;
}
case DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILED_METER_NAME: {
Counter counter = (Counter) meter;
- assertEquals(0, counter.count(), 0.01D, "Counter " +
counter.getId() + " should have count of " + 0);
+ int expectedCount;
+ String routeId = counter.getId().getTag("routeId");
+ if (routeId.equals("failure")) {
+ expectedCount = count;
+ } else {
+ expectedCount = 0;
+ }
+ assertEquals(expectedCount, counter.count(), 0.01D,
+ "Counter " + counter.getId() + " should have count
of " + 0);
+ break;
+ }
+ case DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_TOTAL_METER_NAME: {
+ Counter counter = (Counter) meter;
+ assertEquals(count, counter.count(), 0.01D,
+ "Counter " + counter.getId() + " should have count
of " + count);
+ break;
+ }
+ case
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_EXTERNAL_REDELIVERIES_METER_NAME: {
+ Counter counter = (Counter) meter;
+ assertEquals(0, counter.count(), 0.01D,
+ "Counter " + counter.getId() + " should have count
of " + count);
+ break;
+ }
+ case
DEFAULT_CAMEL_ROUTE_POLICY_EXCHANGES_FAILURES_HANDLED_METER_NAME: {
+ Counter counter = (Counter) meter;
+ int expectedCount;
+ String routeId = counter.getId().getTag("routeId");
+ if (routeId.equals("failureHandled") ||
routeId.equals("multicast")) {
+ expectedCount = count;
+ } else {
+ expectedCount = 0;
+ }
+ assertEquals(expectedCount, counter.count(), 0.01D,
+ "Counter " + counter.getId() + " should have count
of " + count);
break;
}
default: {
@@ -84,12 +128,19 @@ public class MicrometerRoutePolicyMulticastSubRouteTest
extends AbstractMicromet
return new RouteBuilder() {
@Override
public void configure() {
+ onException(IllegalStateException.class)
+ .handled(true);
+
from("direct:foo").routeId("foo").to("mock:foo");
from("direct:bar").routeId("bar").multicast().to("mock:bar1",
"mock:bar2");
-
from("direct:multicast").routeId("multicast").multicast().to("direct:foo",
"direct:bar");
+
from("direct:multicast").routeId("multicast").multicast().to("direct:foo",
"direct:bar",
+ "direct:failureHandled");
+
+ from("direct:failure").routeId("failure").throwException(new
Exception("forced"));
+
from("direct:failureHandled").routeId("failureHandled").throwException(new
IllegalStateException("forced"));
}
};
}
diff --git
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
index 4f1f9be..effa16a 100644
---
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
+++
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
@@ -41,9 +41,9 @@ public class MicrometerRoutePolicySubRouteTest extends
AbstractMicrometerRoutePo
assertMockEndpointsSatisfied();
- // there should be 6 names
+ // there should be 6 metrics per route
List<Meter> meters = meterRegistry.getMeters();
- assertEquals(6, meters.size());
+ assertEquals(6 * context.getRouteDefinitions().size(), meters.size());
meters.forEach(meter -> assertTrue(meter instanceof Timer || meter
instanceof Counter));
}