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 b82c271231dbf569da795b4aed60730ed28343ab Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Nov 30 12:17:41 2021 +0100 CAMEL-15133: camel-health - Resolve health-checks from classpath and make it friendlier to provide custom health checks. --- .../src/main/java/org/apache/camel/CamelContext.java | 10 ++++++++++ .../camel/impl/engine/AbstractCamelContext.java | 11 +++++++++++ .../camel/impl/ExtendedCamelContextConfigurer.java | 6 ++++++ .../camel/impl/lw/LightweightCamelContext.java | 10 ++++++++++ .../impl/lw/LightweightRuntimeCamelContext.java | 10 ++++++++++ .../core/xml/AbstractCamelContextFactoryBean.java | 7 +++++++ .../main/MainConfigurationPropertiesConfigurer.java | 6 ++++++ .../META-INF/camel-main-configuration-metadata.json | 1 + core/camel-main/src/main/docs/main.adoc | 3 ++- .../camel/main/DefaultConfigurationConfigurer.java | 1 + .../camel/main/DefaultConfigurationProperties.java | 20 ++++++++++++++++++++ 11 files changed, 84 insertions(+), 1 deletion(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java index 8ef73c0..c9116f4 100644 --- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java +++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java @@ -1172,6 +1172,16 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio void setLoadTypeConverters(Boolean loadTypeConverters); /** + * Whether to load custom health checks by scanning classpath. + */ + Boolean isLoadHealthChecks(); + + /** + * Whether to load custom health checks by scanning classpath. + */ + void setLoadHealthChecks(Boolean loadHealthChecks); + + /** * Whether or not type converter statistics is enabled. * <p/> * By default the type converter utilization statistics is disabled. <b>Notice:</b> If enabled then there is a diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index 87905f6..e1a1498 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -259,6 +259,7 @@ public abstract class AbstractCamelContext extends BaseService private Boolean streamCache = Boolean.FALSE; private Boolean disableJMX = Boolean.FALSE; private Boolean loadTypeConverters = Boolean.FALSE; + private Boolean loadHealthChecks = Boolean.FALSE; private Boolean typeConverterStatisticsEnabled = Boolean.FALSE; private Boolean dumpRoutes = Boolean.FALSE; private Boolean useMDCLogging = Boolean.FALSE; @@ -4194,6 +4195,16 @@ public abstract class AbstractCamelContext extends BaseService } @Override + public Boolean isLoadHealthChecks() { + return loadHealthChecks != null && loadHealthChecks; + } + + @Override + public void setLoadHealthChecks(Boolean loadHealthChecks) { + this.loadHealthChecks = loadHealthChecks; + } + + @Override public Boolean isTypeConverterStatisticsEnabled() { return typeConverterStatisticsEnabled != null && typeConverterStatisticsEnabled; } diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java index 698e937..54bc4a1 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java @@ -93,6 +93,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com case "LanguageResolver": target.setLanguageResolver(property(camelContext, org.apache.camel.spi.LanguageResolver.class, value)); return true; case "lightweight": case "Lightweight": target.setLightweight(property(camelContext, boolean.class, value)); return true; + case "loadhealthchecks": + case "LoadHealthChecks": target.setLoadHealthChecks(property(camelContext, java.lang.Boolean.class, value)); return true; case "loadtypeconverters": case "LoadTypeConverters": target.setLoadTypeConverters(property(camelContext, java.lang.Boolean.class, value)); return true; case "logexhaustedmessagebody": @@ -274,6 +276,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com case "LanguageResolver": return org.apache.camel.spi.LanguageResolver.class; case "lightweight": case "Lightweight": return boolean.class; + case "loadhealthchecks": + case "LoadHealthChecks": return java.lang.Boolean.class; case "loadtypeconverters": case "LoadTypeConverters": return java.lang.Boolean.class; case "logexhaustedmessagebody": @@ -456,6 +460,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com case "LanguageResolver": return target.getLanguageResolver(); case "lightweight": case "Lightweight": return target.isLightweight(); + case "loadhealthchecks": + case "LoadHealthChecks": return target.isLoadHealthChecks(); case "loadtypeconverters": case "LoadTypeConverters": return target.isLoadTypeConverters(); case "logexhaustedmessagebody": diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java index 222df1e..5c1732c 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java @@ -886,6 +886,16 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam } @Override + public Boolean isLoadHealthChecks() { + return delegate.isLoadHealthChecks(); + } + + @Override + public void setLoadHealthChecks(Boolean loadHealthChecks) { + delegate.setLoadHealthChecks(loadHealthChecks); + } + + @Override public Boolean isDumpRoutes() { return delegate.isDumpRoutes(); } diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java index 348c627..0c6a135 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java @@ -1178,6 +1178,16 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat } @Override + public Boolean isLoadHealthChecks() { + throw new UnsupportedOperationException(); + } + + @Override + public void setLoadHealthChecks(Boolean loadHealthChecks) { + throw new UnsupportedOperationException(); + } + + @Override public Boolean isTypeConverterStatisticsEnabled() { throw new UnsupportedOperationException(); } diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index 25719c1..5cbb090 100644 --- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -209,6 +209,11 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex String s = getContext().resolvePropertyPlaceholders(getLoadTypeConverters()); getContext().setLoadTypeConverters(Boolean.parseBoolean(s)); } + // setup whether to load health checks as early as possible + if (getLoadHealthChecks() != null) { + String s = getContext().resolvePropertyPlaceholders(getLoadHealthChecks()); + getContext().setLoadHealthChecks(Boolean.parseBoolean(s)); + } // then set custom properties Map<String, String> mergedOptions = new HashMap<>(); @@ -992,6 +997,8 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex public abstract String getLoadTypeConverters(); + public abstract String getLoadHealthChecks(); + public abstract String getInflightRepositoryBrowseEnabled(); public abstract String getTypeConverterStatisticsEnabled(); diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java index ca41200..fde3590 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java @@ -97,6 +97,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp case "JmxManagementStatisticsLevel": target.setJmxManagementStatisticsLevel(property(camelContext, org.apache.camel.ManagementStatisticsLevel.class, value)); return true; case "lightweight": case "Lightweight": target.setLightweight(property(camelContext, boolean.class, value)); return true; + case "loadhealthchecks": + case "LoadHealthChecks": target.setLoadHealthChecks(property(camelContext, boolean.class, value)); return true; case "loadtypeconverters": case "LoadTypeConverters": target.setLoadTypeConverters(property(camelContext, boolean.class, value)); return true; case "logdebugmaxchars": @@ -308,6 +310,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp case "JmxManagementStatisticsLevel": return org.apache.camel.ManagementStatisticsLevel.class; case "lightweight": case "Lightweight": return boolean.class; + case "loadhealthchecks": + case "LoadHealthChecks": return boolean.class; case "loadtypeconverters": case "LoadTypeConverters": return boolean.class; case "logdebugmaxchars": @@ -520,6 +524,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp case "JmxManagementStatisticsLevel": return target.getJmxManagementStatisticsLevel(); case "lightweight": case "Lightweight": return target.isLightweight(); + case "loadhealthchecks": + case "LoadHealthChecks": return target.isLoadHealthChecks(); case "loadtypeconverters": case "LoadTypeConverters": return target.isLoadTypeConverters(); case "logdebugmaxchars": diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json index 195e25f..53bbc79 100644 --- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json +++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json @@ -48,6 +48,7 @@ { "name": "camel.main.jmxManagementNamePattern", "description": "The naming pattern for creating the CamelContext JMX management name. The default pattern is #name#", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "string", "javaType": "java.lang.String", "defaultValue": "#name#" }, { "name": "camel.main.jmxManagementStatisticsLevel", "description": "Sets the JMX statistics level, the level can be set to Extended to gather additional information The default value is Default.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "object", "javaType": "org.apache.camel.ManagementStatisticsLevel", "defaultValue": "Default", "enum": [ "Extended", "Default", "RoutesOnly", "Off" ] }, { "name": "camel.main.lightweight", "description": "Configure the context to be lightweight. This will trigger some optimizations and memory reduction options. Lightweight context have some limitations. At this moment, dynamic endpoint destinations are not supported.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.main.loadHealthChecks", "description": "Whether to load custom health checks by scanning classpath.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.main.loadTypeConverters", "description": "Whether to load custom type converters by scanning classpath. This is used for backwards compatibility with Camel 2.x. Its recommended to migrate to use fast type converter loading by setting Converter(loader = true) on your custom type converter classes.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, { "name": "camel.main.logDebugMaxChars", "description": "Is used to limit the maximum length of the logging Camel message bodies. If the message body is longer than the limit, the log message is clipped. Use -1 to have unlimited length. Use for example 1000 to log at most 1000 characters.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "integer", "javaType": "int" }, { "name": "camel.main.logExhaustedMessageBody", "description": "Sets whether to log exhausted message body with message history. Default is false.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc index e32adef..ffc7eee 100644 --- a/core/camel-main/src/main/docs/main.adoc +++ b/core/camel-main/src/main/docs/main.adoc @@ -21,7 +21,7 @@ The following tables lists all the options: // main options: START === Camel Main configurations -The camel.main supports 102 options, which are listed below. +The camel.main supports 103 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== @@ -64,6 +64,7 @@ The camel.main supports 102 options, which are listed below. | *camel.main.jmxManagementName{zwsp}Pattern* | The naming pattern for creating the CamelContext JMX management name. The default pattern is #name# | #name# | String | *camel.main.jmxManagement{zwsp}StatisticsLevel* | Sets the JMX statistics level, the level can be set to Extended to gather additional information The default value is Default. | Default | ManagementStatisticsLevel | *camel.main.lightweight* | Configure the context to be lightweight. This will trigger some optimizations and memory reduction options. Lightweight context have some limitations. At this moment, dynamic endpoint destinations are not supported. | false | boolean +| *camel.main.loadHealthChecks* | Whether to load custom health checks by scanning classpath. | false | boolean | *camel.main.loadTypeConverters* | Whether to load custom type converters by scanning classpath. This is used for backwards compatibility with Camel 2.x. Its recommended to migrate to use fast type converter loading by setting Converter(loader = true) on your custom type converter classes. | false | boolean | *camel.main.logDebugMaxChars* | Is used to limit the maximum length of the logging Camel message bodies. If the message body is longer than the limit, the log message is clipped. Use -1 to have unlimited length. Use for example 1000 to log at most 1000 characters. | | int | *camel.main.logExhaustedMessage{zwsp}Body* | Sets whether to log exhausted message body with message history. Default is false. | false | boolean diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java index 25a9a1b..9361435 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java @@ -226,6 +226,7 @@ public final class DefaultConfigurationConfigurer { camelContext.setUseMDCLogging(config.isUseMdcLogging()); camelContext.setMDCLoggingKeysPattern(config.getMdcLoggingKeysPattern()); camelContext.setLoadTypeConverters(config.isLoadTypeConverters()); + camelContext.setLoadHealthChecks(config.isLoadHealthChecks()); if (config.isRoutesReloadEnabled()) { RouteWatcherReloadStrategy reloader = new RouteWatcherReloadStrategy( config.getRoutesReloadDirectory(), config.isRoutesReloadDirectoryRecursive()); diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java index 8bec1b2..9d26166 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java @@ -52,6 +52,7 @@ public abstract class DefaultConfigurationProperties<T> { private int producerTemplateCacheSize = 1000; private int consumerTemplateCacheSize = 1000; private boolean loadTypeConverters; + private boolean loadHealthChecks; private int logDebugMaxChars; private boolean streamCachingEnabled; private String streamCachingSpoolDirectory; @@ -363,6 +364,17 @@ public abstract class DefaultConfigurationProperties<T> { this.loadTypeConverters = loadTypeConverters; } + public boolean isLoadHealthChecks() { + return loadHealthChecks; + } + + /** + * Whether to load custom health checks by scanning classpath. + */ + public void setLoadHealthChecks(boolean loadHealthChecks) { + this.loadHealthChecks = loadHealthChecks; + } + public int getLogDebugMaxChars() { return logDebugMaxChars; } @@ -1551,6 +1563,14 @@ public abstract class DefaultConfigurationProperties<T> { } /** + * Whether to load custom health checks by scanning classpath. + */ + public T withLoadHealthChecks(boolean loadHealthChecks) { + this.loadHealthChecks = loadHealthChecks; + return (T) this; + } + + /** * Is used to limit the maximum length of the logging Camel message bodies. If the message body is longer than the * limit, the log message is clipped. Use -1 to have unlimited length. Use for example 1000 to log at most 1000 * characters.