This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch var in repository https://gitbox.apache.org/repos/asf/camel.git
commit 64febd93924dc0d18ff9c930e4634271c36422e0 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Dec 30 14:18:08 2023 +0100 CAMEL-19749: Add variables as concept to Camel --- .../api/management/mbean/CamelOpenMBeanTypes.java | 13 ++++++ .../mbean/ManagedVariableRepositoryMBean.java | 5 +++ .../mbean/ManagedVariableRepository.java | 47 ++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java index 93b01ebd60d..a89c5100773 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java @@ -295,4 +295,17 @@ public final class CamelOpenMBeanTypes { SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING }); } + public static CompositeType camelVariablesCompositeType() throws OpenDataException { + return new CompositeType( + "variables", "Variables", + new String[] { "id", "key", "className", "value" }, + new String[] { "Id", "Key", "className", "Value" }, + new OpenType[] { SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING }); + } + + public static TabularType camelVariablesTabularType() throws OpenDataException { + CompositeType ct = camelVariablesCompositeType(); + return new TabularType("variables", "Variables", ct, new String[] { "id", "key" }); + } + } diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java index afcd503e8ee..8614f2b812c 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java @@ -21,6 +21,8 @@ import java.util.Set; import org.apache.camel.api.management.ManagedAttribute; import org.apache.camel.api.management.ManagedOperation; +import javax.management.openmbean.TabularData; + public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean { @ManagedAttribute(description = "Repository ID") @@ -35,4 +37,7 @@ public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean { @ManagedOperation(description = "Variable names") Set<String> names(); + @ManagedOperation(description = "List all variables") + TabularData variables(); + } diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java index eef3e4c8306..ecf42907f5e 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java @@ -16,14 +16,23 @@ */ package org.apache.camel.management.mbean; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.apache.camel.CamelContext; +import org.apache.camel.RuntimeCamelException; import org.apache.camel.api.management.ManagedResource; +import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes; import org.apache.camel.api.management.mbean.ManagedVariableRepositoryMBean; import org.apache.camel.spi.BrowsableVariableRepository; +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.TabularData; +import javax.management.openmbean.TabularDataSupport; + @ManagedResource(description = "Managed VariableRepository") public class ManagedVariableRepository extends ManagedService implements ManagedVariableRepositoryMBean { private final BrowsableVariableRepository variableRepository; @@ -56,4 +65,42 @@ public class ManagedVariableRepository extends ManagedService implements Managed public Set<String> names() { return variableRepository.names().collect(Collectors.toSet()); } + + @Override + public TabularData variables() { + try { + final TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.camelVariablesTabularType()); + final CompositeType type = CamelOpenMBeanTypes.camelVariablesCompositeType(); + + for (Map.Entry<String, Object> entry : variableRepository.getVariables().entrySet()) { + String key = entry.getKey(); + String className = entry.getValue() != null ? entry.getValue().getClass().getName() : ""; + String value = entry.getValue() != null ? entry.getValue().toString() : ""; + if (value.length() > 1000) { + value = value.substring(0, 1000) + "..."; + } + + CompositeData data = new CompositeDataSupport( + type, + new String[] { + "id", + "key", + "className", + "value", + }, + new Object[] { + getId(), + key, + className, + value + }); + answer.put(data); + } + + return answer; + } catch (Exception e) { + throw RuntimeCamelException.wrapRuntimeCamelException(e); + } + } + }