Skip to content

Commit

Permalink
Micrometer: Router policy should be disabled by default (to be consis…
Browse files Browse the repository at this point in the history
…tent with Camel) apache#5028
  • Loading branch information
JiriOndrusek committed Jun 29, 2023
1 parent ee39494 commit 38721cf
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 8 deletions.
13 changes: 13 additions & 0 deletions docs/modules/ROOT/pages/migration-guide/3.0.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,16 @@ The following extensions have been removed.
|===


== Change to default values of `camel.metrics.enableRoutePolicy` configuration

In previous releases, the Micrometer extension default was to enable MicrometerRoutePolicyFactory (value `true`).

This has now changed to reflect behavior in Camel.

To enable MicrometerRoutePolicyFactory, you can add configuration propertty to `application.properties`.

```
quarkus.camel.metrics.enable-route-policy=true
```

For more information, refer to the xref:reference/extensions/micrometerr.adoc[Camel Quarkus Micrometer Extension] documentation.
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ Prometheus backend ignores negative values during increment of Counter metrics.

Set whether to enable the MicrometerRoutePolicyFactory for capturing metrics on route processing times.
| `boolean`
| `true`
| `false`

|icon:lock[title=Fixed at build time] [[quarkus.camel.metrics.enable-message-history]]`link:#quarkus.camel.metrics.enable-message-history[quarkus.camel.metrics.enable-message-history]`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import io.quarkus.test.QuarkusUnitTest;
import jakarta.inject.Inject;
import org.apache.camel.CamelContext;
import org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory;
import org.apache.camel.component.micrometer.spi.InstrumentedThreadPoolFactory;
import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
import org.apache.camel.spi.EventNotifier;
Expand Down Expand Up @@ -51,8 +50,7 @@ public class MicrometerMetricsConfigDefaultsTest {
@Test
public void testMicrometerMetricsConfiguration() {
List<RoutePolicyFactory> routePolicyFactories = context.getRoutePolicyFactories();
assertEquals(1, routePolicyFactories.size());
assertTrue(routePolicyFactories.get(0) instanceof MicrometerRoutePolicyFactory);
assertEquals(0, routePolicyFactories.size());

MessageHistoryFactory messageHistoryFactory = context.getMessageHistoryFactory();
assertNotNull(messageHistoryFactory);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.quarkus.component.micrometer.deployment;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
import java.util.Properties;

import io.quarkus.test.QuarkusUnitTest;
import jakarta.inject.Inject;
import org.apache.camel.CamelContext;
import org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory;
import org.apache.camel.spi.RoutePolicyFactory;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class MicrometerMetricsConfigRoutePolicyTest {

@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource(applicationProperties(), "application.properties"));

@Inject
CamelContext context;

@Test
public void testRouteConfigEnabledConfiguration() {
List<RoutePolicyFactory> routePolicyFactories = context.getRoutePolicyFactories();
assertEquals(1, routePolicyFactories.size());
assertTrue(routePolicyFactories.get(0) instanceof MicrometerRoutePolicyFactory);
}

public static final Asset applicationProperties() {
Writer writer = new StringWriter();

Properties props = new Properties();
props.setProperty("camel.metrics.enableRoutePolicy", "true");

try {
props.store(writer, "");
} catch (IOException e) {
throw new RuntimeException(e);
}

return new StringAsset(writer.toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class CamelMicrometerConfig {
* Set whether to enable the MicrometerRoutePolicyFactory for capturing metrics
* on route processing times.
*/
@ConfigItem(defaultValue = "true")
@ConfigItem(defaultValue = "false")
public boolean enableRoutePolicy;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.quarkus.component.micrometer.it;

import java.util.Map;

import io.quarkus.test.junit.QuarkusTestProfile;

public class MicrometerRoutePolicyProfile implements QuarkusTestProfile {

@Override
public Map<String, String> getConfigOverrides() {
return Map.of("quarkus.camel.metrics.enable-route-policy", "true");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.quarkus.component.micrometer.it;

import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.TestProfile;
import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

@QuarkusTest
@TestProfile(MicrometerRoutePolicyProfile.class)
class MicrometerRoutePolicyTest extends AbstractMicrometerTest {

@Test
public void testMicrometerRoutePolicyFactory() {
RestAssured.get("/micrometer/timer")
.then()
.statusCode(200);
assertTrue(
getMetricValue(Integer.class, "counter", "camel.exchanges.succeeded", "routeId=micrometer-metrics-timer") > 0);
assertEquals(0, getMetricValue(Integer.class, "counter", "camel.exchanges.failed", "routeId=micrometer-metrics-timer"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,11 @@ public void testMicrometerRoutePolicyFactory() {
RestAssured.get("/micrometer/timer")
.then()
.statusCode(200);
assertTrue(
getMetricValue(Integer.class, "counter", "camel.exchanges.succeeded", "routeId=micrometer-metrics-timer") > 0);
assertEquals(0, getMetricValue(Integer.class, "counter", "camel.exchanges.failed", "routeId=micrometer-metrics-timer"));

assertEquals("Metric does not exist",
getMetricValue(String.class, "counter", "camel.exchanges.succeeded", "routeId=micrometer-metrics-timer", 500));
assertEquals("Metric does not exist",
getMetricValue(String.class, "counter", "camel.exchanges.failed", "routeId=micrometer-metrics-timer", 500));
}

@Test
Expand Down

0 comments on commit 38721cf

Please sign in to comment.