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

commit 4ff1ae3619e87c0f00b45ced0868d7c3e12552f3
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Sep 22 10:28:22 2022 +0200

    camel-jbang - Collect extended stats for endpoint usage.
---
 .../camel/impl/console/EndpointsDevConsole.java    | 51 +++++++++++++++++++---
 .../java/org/apache/camel/main/KameletMain.java    |  1 +
 2 files changed, 45 insertions(+), 7 deletions(-)

diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointsDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointsDevConsole.java
index 7f9ab81b56d..ce2cfa27410 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointsDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointsDevConsole.java
@@ -20,9 +20,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.EndpointRegistry;
+import org.apache.camel.spi.RuntimeEndpointRegistry;
 import org.apache.camel.spi.annotations.DevConsole;
 import org.apache.camel.util.json.JsonObject;
 
@@ -37,14 +40,26 @@ public class EndpointsDevConsole extends AbstractDevConsole 
{
     protected String doCallText(Map<String, Object> options) {
         StringBuilder sb = new StringBuilder();
 
-        EndpointRegistry reg = getCamelContext().getEndpointRegistry();
+        // runtime registry is optional but if enabled we have additional 
statistics to use in output
+        List<RuntimeEndpointRegistry.Statistic> stats = null;
+        RuntimeEndpointRegistry runtimeReg = 
getCamelContext().adapt(ExtendedCamelContext.class).getRuntimeEndpointRegistry();
+        if (runtimeReg != null) {
+            stats = runtimeReg.getEndpointStatistics();
+        }
+        EndpointRegistry<?> reg = getCamelContext().getEndpointRegistry();
         sb.append(
-                String.format("    Endpoints: %s (static: %s dynamic: %s\n", 
reg.size(), reg.staticSize(), reg.dynamicSize()));
+                String.format("    Endpoints: %s (static: %s dynamic: %s)\n", 
reg.size(), reg.staticSize(), reg.dynamicSize()));
         sb.append(String.format("    Maximum Cache Size: %s\n", 
reg.getMaximumCacheSize()));
         Collection<Endpoint> col = reg.getReadOnlyValues();
         if (!col.isEmpty()) {
             for (Endpoint e : col) {
-                sb.append(String.format("\n    %s", e.toString()));
+                var stat = findStats(stats, e.getEndpointUri());
+                if (stat.isPresent()) {
+                    var st = stat.get();
+                    sb.append(String.format("\n    %s (direction: %s, usage: 
%s)", e, st.getDirection(), st.getHits()));
+                } else {
+                    sb.append(String.format("\n    %s", e));
+                }
             }
         }
         sb.append("\n");
@@ -56,7 +71,13 @@ public class EndpointsDevConsole extends AbstractDevConsole {
     protected JsonObject doCallJson(Map<String, Object> options) {
         JsonObject root = new JsonObject();
 
-        EndpointRegistry reg = getCamelContext().getEndpointRegistry();
+        // runtime registry is optional but if enabled we have additional 
statistics to use in output
+        List<RuntimeEndpointRegistry.Statistic> stats = null;
+        RuntimeEndpointRegistry runtimeReg = 
getCamelContext().adapt(ExtendedCamelContext.class).getRuntimeEndpointRegistry();
+        if (runtimeReg != null) {
+            stats = runtimeReg.getEndpointStatistics();
+        }
+        EndpointRegistry<?> reg = getCamelContext().getEndpointRegistry();
         root.put("size", reg.size());
         root.put("staticSize", reg.staticSize());
         root.put("dynamicSize", reg.dynamicSize());
@@ -66,11 +87,27 @@ public class EndpointsDevConsole extends AbstractDevConsole 
{
         root.put("endpoints", list);
         Collection<Endpoint> col = reg.getReadOnlyValues();
         for (Endpoint e : col) {
-            JsonObject uri = new JsonObject();
-            uri.put("uri", e.toString());
-            list.add(uri);
+            JsonObject jo = new JsonObject();
+            jo.put("uri", jo.toString());
+            var stat = findStats(stats, e.getEndpointUri());
+            if (stat.isPresent()) {
+                var st = stat.get();
+                jo.put("direction", st.getDirection());
+                jo.put("hits", st.getHits());
+                jo.put("routeId", st.getRouteId());
+            }
+            list.add(jo);
         }
 
         return root;
     }
+
+    private static Optional<RuntimeEndpointRegistry.Statistic> 
findStats(List<RuntimeEndpointRegistry.Statistic> stats, String uri) {
+        if (stats == null) {
+            return Optional.empty();
+        }
+        return stats.stream()
+                .filter(s -> uri.equals(s.getUri()))
+                .findFirst();
+    }
 }
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index f1b80f99a07..ab8e485d3e7 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -446,6 +446,7 @@ public class KameletMain extends MainCommandLineSupport {
         addInitialProperty("camel.component.kamelet.location", location);
         addInitialProperty("camel.component.rest.consumerComponentName", 
"platform-http");
         addInitialProperty("camel.component.rest.producerComponentName", 
"vertx-http");
+        addInitialProperty("camel.main.jmxManagementStatisticsLevel", 
"Extended");
         addInitialProperty("camel.main.shutdownTimeout", "10");
     }
 

Reply via email to