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 453f2c36e5a634aa9351a5641784d09bfa4732fe Author: Claus Ibsen <[email protected]> AuthorDate: Tue Dec 19 06:48:13 2023 +0100 Experiment --- .../main/camel-main-configuration-metadata.json | 1 + ...rometerExchangeEventNotifierNamingStrategy.java | 23 +++++++++++++----- .../jbang/core/commands/process/ListMetric.java | 28 +++++++++++++++++++++- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json index d7d8b717315..3a1734b8152 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json @@ -173,6 +173,7 @@ { "name": "camel.lra.localParticipantContextPath", "description": "The context-path for the local participant. Is default \/lra-participant", "sourceType": "org.apache.camel.main.LraConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "\/lra-participant" }, { "name": "camel.lra.localParticipantUrl", "description": "The URL for the local participant", "sourceType": "org.apache.camel.main.LraConfigurationProperties", "type": "string", "javaType": "java.lang.String" }, { "name": "camel.metrics.binders", "description": "Additional Micrometer binders to include such as jvm-memory, processor, jvm-thread, and so forth. Multiple binders can be separated by comma. The following binders currently is available from Micrometer: class-loader, commons-object-pool2, file-descriptor, hystrix-metrics-binder, jvm-compilation, jvm-gc, jvm-heap-pressure, jvm-info, jvm-memory, jvm-thread, log4j2, logback, processor, uptime", "sourceType": "org.apache.camel.main.Metr [...] + { "name": "camel.metrics.clearOnReload", "description": "Clear the captured metrics data when Camel is reloading routes such as when using Camel JBang.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true }, { "name": "camel.metrics.enabled", "description": "To enable Micrometer metrics.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.metrics.enableExchangeEventNotifier", "description": "Set whether to enable the MicrometerExchangeEventNotifier for capturing metrics on exchange processing times.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true }, { "name": "camel.metrics.enableMessageHistory", "description": "Set whether to enable the MicrometerMessageHistoryFactory for capturing metrics on individual route node processing times. Depending on the number of configured route nodes, there is the potential to create a large volume of metrics. Therefore, this option is disabled by default.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java index fdaa1c91053..065c7c1c38e 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java @@ -69,12 +69,23 @@ public interface MicrometerExchangeEventNotifierNamingStrategy { // use sanitized uri to not reveal sensitive information uri = endpoint.toString(); } - return Tags.of( - CAMEL_CONTEXT_TAG, event.getExchange().getContext().getName(), - SERVICE_NAME, MicrometerEventNotifierService.class.getSimpleName(), - EVENT_TYPE_TAG, event.getClass().getSimpleName(), - ENDPOINT_NAME, uri, - FAILED_TAG, Boolean.toString(event.getExchange().isFailed())); + String routeId = event.getExchange().getFromRouteId(); + if (routeId != null) { + return Tags.of( + CAMEL_CONTEXT_TAG, event.getExchange().getContext().getName(), + SERVICE_NAME, MicrometerEventNotifierService.class.getSimpleName(), + EVENT_TYPE_TAG, event.getClass().getSimpleName(), + ROUTE_ID_TAG, routeId, + ENDPOINT_NAME, uri, + FAILED_TAG, Boolean.toString(event.getExchange().isFailed())); + } else { + return Tags.of( + CAMEL_CONTEXT_TAG, event.getExchange().getContext().getName(), + SERVICE_NAME, MicrometerEventNotifierService.class.getSimpleName(), + EVENT_TYPE_TAG, event.getClass().getSimpleName(), + ENDPOINT_NAME, uri, + FAILED_TAG, Boolean.toString(event.getExchange().isFailed())); + } } default Tags getInflightExchangesTags(ExchangeEvent event, Endpoint endpoint) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java index 6427b955a08..7b637e99a2d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.StringJoiner; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -48,6 +49,10 @@ public class ListMetric extends ProcessWatchCommand { description = "Filter metric by type or name") String filter; + @CommandLine.Option(names = { "--tags" }, + description = "Show metric tags", defaultValue = "false") + boolean tags; + @CommandLine.Option(names = { "--custom" }, description = "Only show custom metrics", defaultValue = "false") boolean custom; @@ -96,6 +101,7 @@ public class ListMetric extends ProcessWatchCommand { row.metricName = jo.getString("name"); row.metricDescription = jo.getString("description"); row.metricRouteId = extractRouteId(jo); + row.tags = extractTags(jo); row.count = jo.getDouble("count"); if (custom && row.metricName.startsWith("Camel")) { @@ -118,6 +124,7 @@ public class ListMetric extends ProcessWatchCommand { row.metricName = jo.getString("name"); row.metricDescription = jo.getString("description"); row.metricRouteId = extractRouteId(jo); + row.tags = extractTags(jo); row.count = jo.getDouble("count"); row.mean = jo.getDouble("mean"); row.max = jo.getDouble("max"); @@ -143,6 +150,7 @@ public class ListMetric extends ProcessWatchCommand { row.metricName = jo.getString("name"); row.metricDescription = jo.getString("description"); row.metricRouteId = extractRouteId(jo); + row.tags = extractTags(jo); row.count = jo.getDouble("value"); if (custom && row.metricName.startsWith("Camel")) { @@ -165,6 +173,7 @@ public class ListMetric extends ProcessWatchCommand { row.metricName = jo.getString("name"); row.metricDescription = jo.getString("description"); row.metricRouteId = extractRouteId(jo); + row.tags = extractTags(jo); row.count = jo.getDouble("value"); row.mean = jo.getDouble("mean"); row.max = jo.getDouble("max"); @@ -205,7 +214,10 @@ public class ListMetric extends ProcessWatchCommand { new Column().header("MAX").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) .with(r -> getNumber(r.max)), new Column().header("TOTAL").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT) - .with(r -> getNumber(r.total))))); + .with(r -> getNumber(r.total)), + new Column().header("TAGS").visible(tags).dataAlign(HorizontalAlign.LEFT) + .maxWidth(60, OverflowBehaviour.NEWLINE) + .with(r -> r.tags)))); } return 0; @@ -266,6 +278,19 @@ public class ListMetric extends ProcessWatchCommand { return ""; } + private String extractTags(JsonObject jo) { + StringJoiner sj = new StringJoiner(" "); + List<JsonObject> tags = jo.getCollection("tags"); + if (tags != null) { + for (JsonObject t : tags) { + String k = t.getString("key"); + String v = t.getString("value"); + sj.add(k + "=" + v); + } + } + return sj.toString(); + } + private static class Row implements Cloneable { String pid; String name; @@ -275,6 +300,7 @@ public class ListMetric extends ProcessWatchCommand { String metricName; String metricDescription; String metricRouteId; + String tags; double count; double mean; double max;
