This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 82db67ce746 CAMEL-22007: camel-micrometer - Configuring tags is not tooling friendly 82db67ce746 is described below commit 82db67ce7468fd04ef432759f3ec3d20babf88e0 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Apr 23 09:18:02 2025 +0200 CAMEL-22007: camel-micrometer - Configuring tags is not tooling friendly --- .../camel/catalog/components/micrometer.json | 10 ++--- .../micrometer/MicrometerEndpointConfigurer.java | 11 ++++++ .../micrometer/MicrometerEndpointUriFactory.java | 5 ++- .../camel/component/micrometer/micrometer.json | 10 ++--- .../micrometer/AbstractMicrometerProducer.java | 11 +++++- .../component/micrometer/MicrometerComponent.java | 45 ++++++++++++++-------- .../component/micrometer/MicrometerEndpoint.java | 34 ++++++++++++---- .../component/micrometer/CounterEndpointTest.java | 3 +- .../component/micrometer/CounterRouteTest.java | 2 +- .../DistributionSummaryEndpointTest.java | 3 +- .../micrometer/MicrometerComponentTest.java | 7 ++-- .../micrometer/MicrometerEndpointTest.java | 3 +- .../component/micrometer/TimerEndpointTest.java | 3 +- ...a => TimerRouteBackwardsCompatibleTagTest.java} | 3 +- .../camel/component/micrometer/TimerRouteTest.java | 2 +- .../ROOT/pages/camel-4x-upgrade-guide-4_12.adoc | 6 +++ .../builder/endpoint/StaticEndpointBuilders.java | 6 --- .../dsl/MicrometerEndpointBuilderFactory.java | 43 ++++++++++++++++++--- 18 files changed, 141 insertions(+), 66 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/micrometer.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/micrometer.json index bd9fcb5142f..3a9479ad622 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/micrometer.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/micrometer.json @@ -40,11 +40,11 @@ "properties": { "metricsType": { "index": 0, "kind": "path", "displayName": "Metrics Type", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "io.micrometer.core.instrument.Meter.Type", "enum": [ "counter", "summary", "timer" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Type of metrics" }, "metricsName": { "index": 1, "kind": "path", "displayName": "Metrics Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of metrics" }, - "tags": { "index": 2, "kind": "path", "displayName": "Tags", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.lang.Iterable<io.micrometer.core.instrument.Tag>", "deprecated": false, "autowired": false, "secret": false, "description": "Tags of metrics" }, - "action": { "index": 3, "kind": "parameter", "displayName": "Action", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "start", "stop" ], "deprecated": false, "autowired": false, "secret": false, "description": "Action expression when using timer type" }, - "decrement": { "index": 4, "kind": "parameter", "displayName": "Decrement", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Decrement value expression when using counter type" }, - "increment": { "index": 5, "kind": "parameter", "displayName": "Increment", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Increment value expression when using counter type" }, - "metricsDescription": { "index": 6, "kind": "parameter", "displayName": "Metrics Description", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Description of metrics" }, + "action": { "index": 2, "kind": "parameter", "displayName": "Action", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "start", "stop" ], "deprecated": false, "autowired": false, "secret": false, "description": "Action expression when using timer type" }, + "decrement": { "index": 3, "kind": "parameter", "displayName": "Decrement", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Decrement value expression when using counter type" }, + "increment": { "index": 4, "kind": "parameter", "displayName": "Increment", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Increment value expression when using counter type" }, + "metricsDescription": { "index": 5, "kind": "parameter", "displayName": "Metrics Description", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Description of metrics" }, + "tags": { "index": 6, "kind": "parameter", "displayName": "Tags", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "tags.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "Tags of metrics" }, "value": { "index": 7, "kind": "parameter", "displayName": "Value", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Value expression when using histogram type" }, "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] } diff --git a/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointConfigurer.java b/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointConfigurer.java index 1d2007a622b..b80fa4809a8 100644 --- a/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointConfigurer.java +++ b/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointConfigurer.java @@ -30,6 +30,7 @@ public class MicrometerEndpointConfigurer extends PropertyConfigurerSupport impl case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true; case "metricsdescription": case "metricsDescription": target.setMetricsDescription(property(camelContext, java.lang.String.class, value)); return true; + case "tags": target.setTags(property(camelContext, java.util.Map.class, value)); return true; case "value": target.setValue(property(camelContext, java.lang.String.class, value)); return true; default: return false; } @@ -45,6 +46,7 @@ public class MicrometerEndpointConfigurer extends PropertyConfigurerSupport impl case "lazyStartProducer": return boolean.class; case "metricsdescription": case "metricsDescription": return java.lang.String.class; + case "tags": return java.util.Map.class; case "value": return java.lang.String.class; default: return null; } @@ -61,9 +63,18 @@ public class MicrometerEndpointConfigurer extends PropertyConfigurerSupport impl case "lazyStartProducer": return target.isLazyStartProducer(); case "metricsdescription": case "metricsDescription": return target.getMetricsDescription(); + case "tags": return target.getTags(); case "value": return target.getValue(); default: return null; } } + + @Override + public Object getCollectionValueType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "tags": return java.lang.String.class; + default: return null; + } + } } diff --git a/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointUriFactory.java b/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointUriFactory.java index 8f923e55997..9e3a8a2773a 100644 --- a/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointUriFactory.java +++ b/components/camel-micrometer/src/generated/java/org/apache/camel/component/micrometer/MicrometerEndpointUriFactory.java @@ -35,7 +35,9 @@ public class MicrometerEndpointUriFactory extends org.apache.camel.support.compo props.add("value"); PROPERTY_NAMES = Collections.unmodifiableSet(props); SECRET_PROPERTY_NAMES = Collections.emptySet(); - MULTI_VALUE_PREFIXES = Collections.emptySet(); + Set<String> prefixes = new HashSet<>(1); + prefixes.add("tags."); + MULTI_VALUE_PREFIXES = Collections.unmodifiableSet(prefixes); } @Override @@ -52,7 +54,6 @@ public class MicrometerEndpointUriFactory extends org.apache.camel.support.compo uri = buildPathParameter(syntax, uri, "metricsType", null, true, copy); uri = buildPathParameter(syntax, uri, "metricsName", null, true, copy); - uri = buildPathParameter(syntax, uri, "tags", null, false, copy); uri = buildQueryParameters(uri, copy, encode); return uri; } diff --git a/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/component/micrometer/micrometer.json b/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/component/micrometer/micrometer.json index bd9fcb5142f..3a9479ad622 100644 --- a/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/component/micrometer/micrometer.json +++ b/components/camel-micrometer/src/generated/resources/META-INF/org/apache/camel/component/micrometer/micrometer.json @@ -40,11 +40,11 @@ "properties": { "metricsType": { "index": 0, "kind": "path", "displayName": "Metrics Type", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "io.micrometer.core.instrument.Meter.Type", "enum": [ "counter", "summary", "timer" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Type of metrics" }, "metricsName": { "index": 1, "kind": "path", "displayName": "Metrics Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of metrics" }, - "tags": { "index": 2, "kind": "path", "displayName": "Tags", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.lang.Iterable<io.micrometer.core.instrument.Tag>", "deprecated": false, "autowired": false, "secret": false, "description": "Tags of metrics" }, - "action": { "index": 3, "kind": "parameter", "displayName": "Action", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "start", "stop" ], "deprecated": false, "autowired": false, "secret": false, "description": "Action expression when using timer type" }, - "decrement": { "index": 4, "kind": "parameter", "displayName": "Decrement", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Decrement value expression when using counter type" }, - "increment": { "index": 5, "kind": "parameter", "displayName": "Increment", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Increment value expression when using counter type" }, - "metricsDescription": { "index": 6, "kind": "parameter", "displayName": "Metrics Description", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Description of metrics" }, + "action": { "index": 2, "kind": "parameter", "displayName": "Action", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "start", "stop" ], "deprecated": false, "autowired": false, "secret": false, "description": "Action expression when using timer type" }, + "decrement": { "index": 3, "kind": "parameter", "displayName": "Decrement", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Decrement value expression when using counter type" }, + "increment": { "index": 4, "kind": "parameter", "displayName": "Increment", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Increment value expression when using counter type" }, + "metricsDescription": { "index": 5, "kind": "parameter", "displayName": "Metrics Description", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Description of metrics" }, + "tags": { "index": 6, "kind": "parameter", "displayName": "Tags", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "tags.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "Tags of metrics" }, "value": { "index": 7, "kind": "parameter", "displayName": "Value", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Value expression when using histogram type" }, "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] } diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java index 60b79df4a39..c89b6b7234d 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java @@ -39,10 +39,18 @@ public abstract class AbstractMicrometerProducer<T extends Meter> extends Defaul private static final String HEADER_PATTERN = HEADER_PREFIX + "*"; + private Iterable<Tag> tags; + protected AbstractMicrometerProducer(MicrometerEndpoint endpoint) { super(endpoint); } + @Override + protected void doBuild() throws Exception { + super.doBuild(); + this.tags = getEndpoint().createTags(); + } + @Override public MicrometerEndpoint getEndpoint() { return (MicrometerEndpoint) super.getEndpoint(); @@ -55,9 +63,8 @@ public abstract class AbstractMicrometerProducer<T extends Meter> extends Defaul String finalMetricsName = getStringHeader(in, HEADER_METRIC_NAME, defaultMetricsName); String defaultMetricsDescription = simple(exchange, getEndpoint().getMetricsDescription(), String.class); String finalMetricsDescription = getStringHeader(in, HEADER_METRIC_DESCRIPTION, defaultMetricsDescription); - Iterable<Tag> defaultTags = getEndpoint().getTags(); Iterable<Tag> headerTags = getTagHeader(in, HEADER_METRIC_TAGS, Tags.empty()); - Iterable<Tag> finalTags = Tags.concat(defaultTags, headerTags).stream() + Iterable<Tag> finalTags = Tags.concat(tags, headerTags).stream() .map(tag -> Tag.of( simple(exchange, tag.getKey(), String.class), simple(exchange, tag.getValue(), String.class))) diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java index a1388867b36..ff0659ae128 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java @@ -16,13 +16,11 @@ */ package org.apache.camel.component.micrometer; +import java.util.HashMap; import java.util.Map; -import java.util.stream.Stream; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tag; -import io.micrometer.core.instrument.Tags; import org.apache.camel.Endpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.Registry; @@ -62,14 +60,38 @@ public class MicrometerComponent extends DefaultComponent { protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { String metricsName = getMetricsName(remaining); Meter.Type metricsType = getMetricsType(remaining); - Iterable<Tag> tags = getMetricsTag(parameters); - LOG.debug("Metrics type: {}; name: {}; tags: {}", metricsType, metricsName, tags); - Endpoint endpoint = new MicrometerEndpoint(uri, this, metricsRegistry, metricsType, metricsName, tags); + // backwards compatible + Map<String, String> map = getTags(parameters); + if (map != null && !map.isEmpty()) { + LOG.warn( + "Deprecated tags=key1=value&key2=value2 parameter in use. Migrate to use multi-valued tags.key1=value1&tags.key2=value2 syntax"); + } + + LOG.debug("Metrics type: {}; name: {}", metricsType, metricsName); + MicrometerEndpoint endpoint = new MicrometerEndpoint(uri, this, metricsRegistry, metricsType, metricsName); + if (map != null) { + endpoint.setTags(map); + } setProperties(endpoint, parameters); return endpoint; } + Map<String, String> getTags(Map<String, Object> parameters) { + String tagsString = getAndRemoveParameter(parameters, "tags", String.class, ""); + if (tagsString != null && !tagsString.isEmpty()) { + Map<String, String> answer = new HashMap<>(); + for (String tag : tagsString.split("\\s*,\\s*")) { + String[] e = tag.split("\\s*=\\s*"); + if (e.length == 2) { + answer.put(e[0], e[1]); + } + } + return answer; + } + return null; + } + String getMetricsName(String remaining) { String name = StringHelper.after(remaining, ":"); return name == null ? remaining : name; @@ -82,17 +104,6 @@ public class MicrometerComponent extends DefaultComponent { : MicrometerUtils.getByName(type); } - Iterable<Tag> getMetricsTag(Map<String, Object> parameters) { - String tagsString = getAndRemoveParameter(parameters, "tags", String.class, ""); - if (tagsString != null && !tagsString.isEmpty()) { - String[] tagStrings = tagsString.split("\\s*,\\s*"); - return Stream.of(tagStrings) - .map(s -> Tags.of(s.split("\\s*=\\s*"))) - .reduce(Tags.empty(), Tags::and); - } - return Tags.empty(); - } - public MeterRegistry getMetricsRegistry() { return metricsRegistry; } diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerEndpoint.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerEndpoint.java index 59bffdde62d..fa6011805ec 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerEndpoint.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerEndpoint.java @@ -16,6 +16,10 @@ */ package org.apache.camel.component.micrometer; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; @@ -49,8 +53,8 @@ public class MicrometerEndpoint extends DefaultEndpoint { protected final String metricsName; @UriParam(description = "Description of metrics") protected String metricsDescription; - @UriPath(description = "Tags of metrics") - protected final Iterable<Tag> tags; + @UriParam(description = "Tags of metrics", multiValue = true, prefix = "tags.") + protected Map<String, String> tags; @UriParam(description = "Action expression when using timer type", enums = "start,stop") private String action; @UriParam(description = "Value expression when using histogram type") @@ -61,12 +65,11 @@ public class MicrometerEndpoint extends DefaultEndpoint { private String decrement; public MicrometerEndpoint(String uri, Component component, MeterRegistry registry, Meter.Type metricsType, - String metricsName, Iterable<Tag> tags) { + String metricsName) { super(uri, component); this.registry = registry; this.metricsType = metricsType; this.metricsName = metricsName; - this.tags = tags; } @Override @@ -92,6 +95,17 @@ public class MicrometerEndpoint extends DefaultEndpoint { } } + Iterable<Tag> createTags() { + if (tags != null && !tags.isEmpty()) { + List<Tag> answer = new ArrayList<>(); + tags.forEach((k, v) -> { + answer.add(Tag.of(k, v)); + }); + return answer; + } + return null; + } + public MeterRegistry getRegistry() { return registry; } @@ -100,10 +114,6 @@ public class MicrometerEndpoint extends DefaultEndpoint { return metricsName; } - public Iterable<Tag> getTags() { - return tags; - } - public Meter.Type getMetricsType() { return metricsType; } @@ -116,6 +126,14 @@ public class MicrometerEndpoint extends DefaultEndpoint { this.metricsDescription = metricsDescription; } + public Map<String, String> getTags() { + return tags; + } + + public void setTags(Map<String, String> tags) { + this.tags = tags; + } + public String getAction() { return action; } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java index 89689f6ad90..a8529730f19 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java @@ -18,7 +18,6 @@ package org.apache.camel.component.micrometer; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tags; import org.apache.camel.Producer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -50,7 +49,7 @@ public class CounterEndpointTest { @BeforeEach public void setUp() { - endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.COUNTER, METRICS_NAME, Tags.empty()); + endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.COUNTER, METRICS_NAME); inOrder = Mockito.inOrder(registry); } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java index 578a9f9aefb..2e332a3721d 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java @@ -83,7 +83,7 @@ public class CounterRouteTest extends CamelSpringTestSupport { .to("mock:out"); from("direct:in-4") - .to("micrometer:counter:D?increment=${body.length}&tags=a=${body.length}") + .to("micrometer:counter:D?increment=${body.length}&tags.a=${body.length}") .to("mock:out"); } }; diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java index 184bd978479..b6669cb024c 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java @@ -18,7 +18,6 @@ package org.apache.camel.component.micrometer; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tags; import org.apache.camel.Producer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -50,7 +49,7 @@ public class DistributionSummaryEndpointTest { @BeforeEach public void setUp() { - endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.DISTRIBUTION_SUMMARY, METRICS_NAME, Tags.empty()); + endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.DISTRIBUTION_SUMMARY, METRICS_NAME); inOrder = Mockito.inOrder(registry); } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java index e26f78d0621..244d321034e 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java @@ -20,7 +20,6 @@ import java.util.Collections; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.apache.camel.CamelContext; @@ -75,7 +74,7 @@ public class MicrometerComponentTest { @Test public void testCreateNewEndpointForCounter() { - Endpoint endpoint = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.COUNTER, "a name", Tags.empty()); + Endpoint endpoint = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.COUNTER, "a name"); assertThat(endpoint, is(notNullValue())); assertThat(endpoint, is(instanceOf(MicrometerEndpoint.class))); } @@ -83,14 +82,14 @@ public class MicrometerComponentTest { @Test public void testCreateNewEndpointForHistogram() { Endpoint endpoint - = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.DISTRIBUTION_SUMMARY, "a name", Tags.empty()); + = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.DISTRIBUTION_SUMMARY, "a name"); assertThat(endpoint, is(notNullValue())); assertThat(endpoint, is(instanceOf(MicrometerEndpoint.class))); } @Test public void testCreateNewEndpointForTimer() { - Endpoint endpoint = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.TIMER, "a name", Tags.empty()); + Endpoint endpoint = new MicrometerEndpoint(null, null, metricRegistry, Meter.Type.TIMER, "a name"); assertThat(endpoint, is(notNullValue())); assertThat(endpoint, is(instanceOf(MicrometerEndpoint.class))); } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java index 06ef6e8ec72..c1fec5beac4 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java @@ -18,7 +18,6 @@ package org.apache.camel.component.micrometer; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tags; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; @@ -58,7 +57,7 @@ public class MicrometerEndpointTest { @BeforeEach public void setUp() { - endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.COUNTER, METRICS_NAME, Tags.empty()) { + endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.COUNTER, METRICS_NAME) { @Override public Producer createProducer() { return null; diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java index 5b87c9877cc..268ad7aa327 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java @@ -18,7 +18,6 @@ package org.apache.camel.component.micrometer; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Tags; import org.apache.camel.Producer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -49,7 +48,7 @@ public class TimerEndpointTest { @BeforeEach public void setUp() { - endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.TIMER, METRICS_NAME, Tags.empty()); + endpoint = new MicrometerEndpoint(null, null, registry, Meter.Type.TIMER, METRICS_NAME); inOrder = Mockito.inOrder(registry); } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteBackwardsCompatibleTagTest.java similarity index 97% copy from components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java copy to components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteBackwardsCompatibleTagTest.java index e4e1b8d6bf8..91a2b4445b2 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteBackwardsCompatibleTagTest.java @@ -41,7 +41,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @CamelSpringTest -public class TimerRouteTest extends CamelSpringTestSupport { +public class TimerRouteBackwardsCompatibleTagTest extends CamelSpringTestSupport { private static final long DELAY = 20L; @@ -84,6 +84,7 @@ public class TimerRouteTest extends CamelSpringTestSupport { from("direct:in-3") .to("micrometer:timer:C?action=start") .delay(DELAY) + // backwards compatible tags= parameter .to("micrometer:timer:C?action=stop&tags=a=${body}") .to("mock:out"); } diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java index e4e1b8d6bf8..5450d7afab9 100644 --- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java +++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java @@ -84,7 +84,7 @@ public class TimerRouteTest extends CamelSpringTestSupport { from("direct:in-3") .to("micrometer:timer:C?action=start") .delay(DELAY) - .to("micrometer:timer:C?action=stop&tags=a=${body}") + .to("micrometer:timer:C?action=stop&tags.a=${body}") .to("mock:out"); } }; diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_12.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_12.adoc index 72c16779261..26294c1f562 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_12.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_12.adoc @@ -89,3 +89,9 @@ not be able to add the `otherwise` block to the outer Choice. Add options allowing the addition of an `Authorization` header for Basic or Bearer authentication to client and asynchronous MDN requests. + +=== camel-micrometer + +The `tags` parameter has been _fixed_ to be multivalued and tooling friendly. So +instead of configuring `tags=a=1&b=2` then this should be configured as `tags.a=1&tags.b=2` and so forth. + diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java index 3acc111b0cf..72850be894f 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java @@ -10142,9 +10142,6 @@ public class StaticEndpointBuilders { * Path parameter: metricsName (required) * Name of metrics * - * Path parameter: tags - * Tags of metrics - * * @param path metricsType:metricsName * @return the dsl builder */ @@ -10169,9 +10166,6 @@ public class StaticEndpointBuilders { * Path parameter: metricsName (required) * Name of metrics * - * Path parameter: tags - * Tags of metrics - * * @param componentName to use a custom component name for the endpoint * instead of the default name * @param path metricsType:metricsName diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MicrometerEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MicrometerEndpointBuilderFactory.java index 49c72f43d9d..44725d4302e 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MicrometerEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MicrometerEndpointBuilderFactory.java @@ -101,6 +101,43 @@ public interface MicrometerEndpointBuilderFactory { doSetProperty("metricsDescription", metricsDescription); return this; } + /** + * Tags of metrics. + * + * The option is a: <code>java.util.Map<java.lang.String, + * java.lang.String></code> type. + * The option is multivalued, and you can use the tags(String, Object) + * method to add a value (call the method multiple times to set more + * values). + * + * Group: producer + * + * @param key the option key + * @param value the option value + * @return the dsl builder + */ + default MicrometerEndpointBuilder tags(String key, Object value) { + doSetMultiValueProperty("tags", "tags." + key, value); + return this; + } + /** + * Tags of metrics. + * + * The option is a: <code>java.util.Map<java.lang.String, + * java.lang.String></code> type. + * The option is multivalued, and you can use the tags(String, Object) + * method to add a value (call the method multiple times to set more + * values). + * + * Group: producer + * + * @param values the values + * @return the dsl builder + */ + default MicrometerEndpointBuilder tags(Map values) { + doSetMultiValueProperties("tags", "tags.", values); + return this; + } /** * Value expression when using histogram type. * @@ -209,9 +246,6 @@ public interface MicrometerEndpointBuilderFactory { * Path parameter: metricsName (required) * Name of metrics * - * Path parameter: tags - * Tags of metrics - * * @param path metricsType:metricsName * @return the dsl builder */ @@ -237,9 +271,6 @@ public interface MicrometerEndpointBuilderFactory { * Path parameter: metricsName (required) * Name of metrics * - * Path parameter: tags - * Tags of metrics - * * @param componentName to use a custom component name for the endpoint * instead of the default name * @param path metricsType:metricsName