You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/10/13 11:33:44 UTC

[camel] branch main updated: CAMEL-18254: camel-jbang/camel-main - Kamelets should only log explicit configured options on startup

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 4b39b60e459 CAMEL-18254: camel-jbang/camel-main - Kamelets should only log explicit configured options on startup
4b39b60e459 is described below

commit 4b39b60e4591219e4ae8defa72421a1f3b0d8514
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Oct 13 13:33:28 2022 +0200

    CAMEL-18254: camel-jbang/camel-main - Kamelets should only log explicit configured options on startup
---
 .../org/apache/camel/PropertiesLookupListener.java |  9 +++---
 .../properties/DefaultPropertiesLookup.java        | 19 ++++++++----
 .../properties/DefaultPropertiesParser.java        | 22 +++++++++-----
 .../org/apache/camel/impl/DefaultCamelContext.java | 12 ++++++--
 .../java/org/apache/camel/impl/DefaultModel.java   |  3 ++
 .../org/apache/camel/model/RouteDefinition.java    | 10 +++++++
 .../PropertiesComponentLookupListenerTest.java     |  2 +-
 .../org/apache/camel/main/BaseMainSupport.java     | 22 +++++++++-----
 .../camel/util/OrderedLocationProperties.java      | 34 ++++++++++++++++++++--
 9 files changed, 102 insertions(+), 31 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/PropertiesLookupListener.java b/core/camel-api/src/main/java/org/apache/camel/PropertiesLookupListener.java
index 05c85629899..1c9c4c158af 100644
--- a/core/camel-api/src/main/java/org/apache/camel/PropertiesLookupListener.java
+++ b/core/camel-api/src/main/java/org/apache/camel/PropertiesLookupListener.java
@@ -25,10 +25,11 @@ public interface PropertiesLookupListener {
     /**
      * Triggers when the given property was found.
      *
-     * @param name   property name
-     * @param value  the resolved value
-     * @param source optional source containing the properties
+     * @param name         property name
+     * @param value        the resolved value
+     * @param defaultValue optional default value
+     * @param source       optional source containing the properties
      */
-    void onLookup(String name, String value, String source);
+    void onLookup(String name, String value, String defaultValue, String source);
 
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
index 1fc42e2c653..adf7602be79 100644
--- a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
+++ b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
@@ -57,7 +57,14 @@ public class DefaultPropertiesLookup implements PropertiesLookup {
             if (value != null) {
                 answer = component.getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, value);
                 String loc = location(local, name, "LocalProperties");
-                onLookup(name, answer, loc);
+                String defaultValue = null;
+                if (local instanceof OrderedLocationProperties) {
+                    Object val = ((OrderedLocationProperties) local).getDefaultValue(name);
+                    if (val != null) {
+                        defaultValue = component.getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, val);
+                    }
+                }
+                onLookup(name, answer, defaultValue, loc);
             }
         }
 
@@ -68,7 +75,7 @@ public class DefaultPropertiesLookup implements PropertiesLookup {
             if (value != null) {
                 answer = component.getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, value);
                 String loc = location(local, name, "OverrideProperties");
-                onLookup(name, answer, loc);
+                onLookup(name, answer, null, loc);
             }
         }
         if (answer == null) {
@@ -92,7 +99,7 @@ public class DefaultPropertiesLookup implements PropertiesLookup {
                             source = olp.getLocation(name);
                         }
                     }
-                    onLookup(name, answer, source);
+                    onLookup(name, answer, null, source);
                     break;
                 }
             }
@@ -104,17 +111,17 @@ public class DefaultPropertiesLookup implements PropertiesLookup {
             if (value != null) {
                 answer = component.getCamelContext().getTypeConverter().mandatoryConvertTo(String.class, value);
                 String loc = location(local, name, "InitialProperties");
-                onLookup(name, answer, loc);
+                onLookup(name, answer, null, loc);
             }
         }
 
         return answer;
     }
 
-    private void onLookup(String name, String value, String source) {
+    private void onLookup(String name, String value, String defaultValue, String source) {
         for (PropertiesLookupListener listener : component.getPropertiesLookupListeners()) {
             try {
-                listener.onLookup(name, value, source);
+                listener.onLookup(name, value, defaultValue, source);
             } catch (Exception e) {
                 // ignore
             }
diff --git a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
index 83a1e16a3cf..80b52b0518c 100644
--- a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
+++ b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
@@ -385,8 +385,16 @@ public class DefaultPropertiesParser implements PropertiesParser {
             if (local != null) {
                 value = local.getProperty(key);
                 if (value != null) {
+                    String defaultValue = null;
                     String loc = location(local, key, "LocalProperties");
-                    onLookup(key, value, loc);
+                    if (local instanceof OrderedLocationProperties) {
+                        Object val = ((OrderedLocationProperties) local).getDefaultValue(key);
+                        if (val != null) {
+                            defaultValue
+                                    = propertiesComponent.getCamelContext().getTypeConverter().tryConvertTo(String.class, val);
+                        }
+                    }
+                    onLookup(key, value, defaultValue, loc);
                     log.debug("Found local property: {} with value: {} to be used.", key, value);
                 }
             }
@@ -402,14 +410,14 @@ public class DefaultPropertiesParser implements PropertiesParser {
             if (value == null && envMode == PropertiesComponent.ENVIRONMENT_VARIABLES_MODE_OVERRIDE) {
                 value = lookupEnvironmentVariable(key);
                 if (value != null) {
-                    onLookup(key, value, "ENV");
+                    onLookup(key, value, null, "ENV");
                     log.debug("Found an OS environment property: {} with value: {} to be used.", key, value);
                 }
             }
             if (value == null && sysMode == PropertiesComponent.SYSTEM_PROPERTIES_MODE_OVERRIDE) {
                 value = System.getProperty(key);
                 if (value != null) {
-                    onLookup(key, value, "SYS");
+                    onLookup(key, value, null, "SYS");
                     log.debug("Found a JVM system property: {} with value: {} to be used.", key, value);
                 }
             }
@@ -424,14 +432,14 @@ public class DefaultPropertiesParser implements PropertiesParser {
             if (value == null && envMode == PropertiesComponent.ENVIRONMENT_VARIABLES_MODE_FALLBACK) {
                 value = lookupEnvironmentVariable(key);
                 if (value != null) {
-                    onLookup(key, value, "ENV");
+                    onLookup(key, value, null, "ENV");
                     log.debug("Found an OS environment property: {} with value: {} to be used.", key, value);
                 }
             }
             if (value == null && sysMode == PropertiesComponent.SYSTEM_PROPERTIES_MODE_FALLBACK) {
                 value = System.getProperty(key);
                 if (value != null) {
-                    onLookup(key, value, "SYS");
+                    onLookup(key, value, null, "SYS");
                     log.debug("Found a JVM system property: {} with value: {} to be used.", key, value);
                 }
             }
@@ -445,10 +453,10 @@ public class DefaultPropertiesParser implements PropertiesParser {
         }
     }
 
-    private void onLookup(String name, String value, String source) {
+    private void onLookup(String name, String value, String defaultValue, String source) {
         for (PropertiesLookupListener listener : propertiesComponent.getPropertiesLookupListeners()) {
             try {
-                listener.onLookup(name, value, source);
+                listener.onLookup(name, value, defaultValue, source);
             } catch (Exception e) {
                 // ignore
             }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 4ab1f496d3a..253f1d6c322 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -821,7 +821,7 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame
                                 .accept(routeDefinition.getRouteTemplateContext());
                     }
 
-                    // copy parameters/bean repository to not cause side-effect
+                    // copy parameters/bean repository to not cause side effect
                     Map<Object, Object> params = new HashMap<>(routeDefinition.getTemplateParameters());
                     LocalBeanRegistry bbr
                             = (LocalBeanRegistry) routeDefinition.getRouteTemplateContext().getLocalBeanRepository();
@@ -866,7 +866,15 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame
                     }
 
                     OrderedLocationProperties prop = new OrderedLocationProperties();
-                    prop.putAll(routeDefinition.getLocation(), params);
+                    if (routeDefinition.getTemplateDefaultParameters() != null) {
+                        // need to keep track if a parameter is set as default value or end user configured value
+                        params.forEach((k, v) -> {
+                            Object dv = routeDefinition.getTemplateDefaultParameters().get(k);
+                            prop.put(routeDefinition.getLocation(), k, v, dv);
+                        });
+                    } else {
+                        prop.putAll(routeDefinition.getLocation(), params);
+                    }
                     pc.setLocalProperties(prop);
 
                     // we need to shadow the bean registry on the CamelContext with the local beans from the route template context
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 3fa3c154db0..380af8b5b8f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -383,6 +383,7 @@ public class DefaultModel implements Model {
 
         // support both camelCase and kebab-case keys
         final Map<String, Object> prop = new HashMap<>();
+        final Map<String, Object> propDefaultValues = new HashMap<>();
         // include default values first from the template (and validate that we have inputs for all required parameters)
         if (target.getTemplateParameters() != null) {
             StringJoiner templatesBuilder = new StringJoiner(", ");
@@ -390,6 +391,7 @@ public class DefaultModel implements Model {
             for (RouteTemplateParameterDefinition temp : target.getTemplateParameters()) {
                 if (temp.getDefaultValue() != null) {
                     addProperty(prop, temp.getName(), temp.getDefaultValue());
+                    addProperty(propDefaultValues, temp.getName(), temp.getDefaultValue());
                 } else {
                     if (temp.isRequired() && !routeTemplateContext.hasParameter(temp.getName())) {
                         // this is a required parameter which is missing
@@ -441,6 +443,7 @@ public class DefaultModel implements Model {
             def.setId(routeId);
         }
         def.setTemplateParameters(prop);
+        def.setTemplateDefaultParameters(propDefaultValues);
         def.setRouteTemplateContext(routeTemplateContext);
 
         // setup local beans
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
index 9bf93e5ac9d..9f591c6205a 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -91,6 +91,7 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition>
     private OutputTypeDefinition outputType;
     private List<PropertyDefinition> routeProperties;
     private Map<String, Object> templateParameters;
+    private Map<String, Object> templateDefaultParameters;
     private RouteTemplateContext routeTemplateContext;
     private Resource resource;
     private String precondition;
@@ -724,6 +725,15 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition>
         this.templateParameters = templateParameters;
     }
 
+    public Map<String, Object> getTemplateDefaultParameters() {
+        return templateDefaultParameters;
+    }
+
+    @XmlTransient
+    public void setTemplateDefaultParameters(Map<String, Object> templateDefaultParameters) {
+        this.templateDefaultParameters = templateDefaultParameters;
+    }
+
     public RouteTemplateContext getRouteTemplateContext() {
         return routeTemplateContext;
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentLookupListenerTest.java b/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentLookupListenerTest.java
index 5d09a4750c4..7f8668dfc13 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentLookupListenerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentLookupListenerTest.java
@@ -70,7 +70,7 @@ public class PropertiesComponentLookupListenerTest extends ContextTestSupport {
         private Map<String, String[]> map = new HashMap<>();
 
         @Override
-        public void onLookup(String name, String value, String source) {
+        public void onLookup(String name, String value, String defaultValue, String source) {
             map.put(name, new String[] { value, source });
         }
 
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 533263a604d..410652910f3 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -727,12 +727,18 @@ public abstract class BaseMainSupport extends BaseService {
                         for (var entry : propertyPlaceholders.entrySet()) {
                             String k = entry.getKey().toString();
                             Object v = entry.getValue();
-                            String loc = locationSummary(propertyPlaceholders, k);
-
-                            if (SensitiveUtils.containsSensitive(k)) {
-                                LOG.info("    {} {}=xxxxxx", loc, k);
-                            } else {
-                                LOG.info("    {} {}={}", loc, k, v);
+                            Object dv = propertyPlaceholders.getDefaultValue(k);
+                            // skip logging configurations that are using default-value
+                            // or a kamelet that uses templateId as a parameter
+                            boolean same = ObjectHelper.equal(v, dv);
+                            boolean skip = "templateId".equals(k);
+                            if (!same && !skip) {
+                                String loc = locationSummary(propertyPlaceholders, k);
+                                if (SensitiveUtils.containsSensitive(k)) {
+                                    LOG.info("    {} {}=xxxxxx", loc, k);
+                                } else {
+                                    LOG.info("    {} {}={}", loc, k, v);
+                                }
                             }
                         }
                     }
@@ -1766,11 +1772,11 @@ public abstract class BaseMainSupport extends BaseService {
         }
 
         @Override
-        public void onLookup(String name, String value, String source) {
+        public void onLookup(String name, String value, String defaultValue, String source) {
             if (source == null) {
                 source = "unknown";
             }
-            olp.put(source, name, value);
+            olp.put(source, name, value, defaultValue);
         }
     }
 
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/OrderedLocationProperties.java b/core/camel-util/src/main/java/org/apache/camel/util/OrderedLocationProperties.java
index 60c65762125..3e7d97e153b 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/OrderedLocationProperties.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/OrderedLocationProperties.java
@@ -21,25 +21,35 @@ import java.util.Map;
 import java.util.Properties;
 
 /**
- * An {@link OrderedProperties} that also keeps track from which location the properties are sourced from.
+ * An {@link OrderedProperties} that also keeps track from which location the properties are sourced from, and default
+ * values.
  *
  * This can be used to track all the various sources for configuration that a Camel application uses (properties file,
  * ENV variables, hardcoded in java, spring-boot, quarkus, camel-k modeline, camel-yaml-dsl etc.
  *
- * <b>Important:</b> Use the put method that takes location as argument to store location information.
+ * <b>Important:</b> Use the put method that takes location as argument to store location information, and the put
+ * method that takes default value as argument to store default value information.
  */
 public final class OrderedLocationProperties extends BaseOrderedProperties {
 
     private final Map<Object, String> locations = new HashMap<>();
+    private final Map<Object, Object> defaultValues = new HashMap<>();
 
     public void put(String location, Object key, Object value) {
         locations.put(key, location);
         put(key, value);
     }
 
+    public void put(String location, Object key, Object value, Object defaultValue) {
+        put(location, key, value);
+        if (defaultValue != null) {
+            defaultValues.put(key, defaultValue);
+        }
+    }
+
     public void putAll(OrderedLocationProperties other) {
         for (var entry : other.entrySet()) {
-            put(other.getLocation(entry.getKey()), entry.getKey(), entry.getValue());
+            put(other.getLocation(entry.getKey()), entry.getKey(), entry.getValue(), other.getDefaultValue(entry.getKey()));
         }
     }
 
@@ -55,19 +65,37 @@ public final class OrderedLocationProperties extends BaseOrderedProperties {
         }
     }
 
+    /**
+     * Gets the location from where the property was resolved
+     *
+     * @param  key the property key
+     * @return     the location, or <tt>null</tt> if not possible to determine the location.
+     */
     public String getLocation(Object key) {
         return locations.get(key);
     }
 
+    /**
+     * Gets the default value of the property, if a default value exists
+     *
+     * @param  key the property key
+     * @return     the default value, or <tt>null</tt> if not possible to determine the default value.
+     */
+    public Object getDefaultValue(Object key) {
+        return defaultValues.get(key);
+    }
+
     @Override
     public synchronized void clear() {
         locations.clear();
+        defaultValues.clear();
         super.clear();
     }
 
     @Override
     public synchronized Object remove(Object key) {
         locations.remove(key);
+        defaultValues.remove(key);
         return super.remove(key);
     }
 }