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);
}
}