You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/03/02 16:25:25 UTC
[camel-k-runtime] branch master updated: Refactor health support
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
The following commit(s) were added to refs/heads/master by this push:
new fbc5a2a Refactor health support
new b99a93a Merge pull request #249 from lburgazzoli/health-refactor
fbc5a2a is described below
commit fbc5a2a10c9854f2557d2e8e9dc1e1a348e2daa1
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Mon Mar 2 16:30:44 2020 +0100
Refactor health support
---
.../camel-k-runtime-health}/pom.xml | 39 +++-
.../camel/k/health/HealthContextCustomizer.java | 159 +++++++++++++++
.../services/org/apache/camel/k/customizer/health | 0
.../camel/k/health/HealthCustomizerTest.java | 82 ++++++++
.../src/test/resources/log4j2-test.xml | 5 +-
.../camel-k-runtime-inspector}/pom.xml | 43 ++--
.../k/inspector/InspectorContextCustomizer.java | 22 +--
.../camel/k/inspector/InspectorCustomizer.java | 15 +-
.../camel/k/inspector/InspectorEndpoint.java | 220 +++++++++++++++++++++
.../org/apache/camel/k/customizer/inspector | 2 +-
.../camel/k/inspector/InspectorCustomizerTest.java | 74 +++++++
.../src/test/resources/log4j2-test.xml | 2 +-
.../camel-k-runtime-main}/pom.xml | 2 +-
.../java/org/apache/camel/k/main/Application.java | 0
.../apache/camel/k/main/ApplicationRuntime.java | 0
.../apache/camel/k/main/ApplicationSupport.java | 0
.../src/main/resources/log4j2.properties | 0
.../test/java/org/apache/camel/k/main/MyBean.java | 0
.../org/apache/camel/k/main/PropertiesTest.java | 0
.../java/org/apache/camel/k/main/RuntimeTest.java | 0
.../org/apache/camel/k/main/TestCustomizer.java | 0
.../services/org/apache/camel/k/customizer/test | 0
.../src/test/resources/MyRoutesConfig.java | 0
.../src/test/resources/MyRoutesWithBeans.java | 0
.../src/test/resources/conf.d/001/conf.properties | 0
.../src/test/resources/conf.d/002/conf.properties | 0
.../src/test/resources/conf.properties | 0
.../src/test/resources/log4j2-test.xml | 0
.../src/test/resources/my-resource.txt | 0
.../camel-k-runtime-main}/src/test/resources/r1.js | 0
.../src/test/resources/r2.mytype | 0
.../src/test/resources/rests.xml | 0
.../src/test/resources/routes-with-expression.xml | 0
.../src/test/resources/routes.xml | 0
.../log4j2-test.xml => camel-k-main/pom.xml | 32 +--
camel-k-runtime-bom/pom.xml | 2 +-
.../camel/k/health/HealthContextCustomizer.java | 51 -----
.../org/apache/camel/k/health/HealthEndpoint.java | 63 ------
.../camel/k/health/HealthCustomizerTest.java | 51 -----
.../apache/camel/k/servlet/ServletEndpoint.java | 87 --------
.../camel/k/servlet/ServletRegistration.java | 82 --------
.../ServletRegistrationContextCustomizer.java | 68 -------
.../apache/camel/k/customizer/servletregistration | 18 --
.../camel/k/servlet/ServletCustomizerTest.java | 50 -----
.../servlet/ServletRegistrationCustomizerTest.java | 50 -----
.../camel-k-runtime-example-health/README.adoc | 15 +-
examples/camel-k-runtime-example-health/pom.xml | 6 +-
.../src/main/resources/application.properties | 4 +-
.../src/main/resources/routes.groovy | 3 +-
.../camel-k-runtime-example-servlet/README.adoc | 14 --
examples/camel-k-runtime-example-servlet/pom.xml | 84 --------
.../src/main/resources/application.properties | 35 ----
examples/camel-k-runtime-example-yaml/pom.xml | 4 -
examples/pom.xml | 1 -
pom.xml | 11 +-
.../src/it/generate-catalog-main/pom.xml | 2 +-
.../src/it/generate-catalog-main/verify.groovy | 12 +-
.../src/it/generate-catalog-quarkus/pom.xml | 2 +-
.../src/it/generate-catalog-quarkus/verify.groovy | 10 +-
.../camel/k/tooling/maven/GenerateCatalogMojo.java | 20 +-
.../{crd/RuntimeSpec.java => CamelCapability.java} | 25 +--
.../k/tooling/maven/model/crd/RuntimeSpec.java | 6 +
.../maven/processors/CatalogProcessor3x.java | 2 +-
.../maven/processors/CatalogProcessor3Test.java | 2 +-
64 files changed, 728 insertions(+), 749 deletions(-)
diff --git a/camel-k-runtime-health/pom.xml b/camel-k-main/camel-k-runtime-health/pom.xml
similarity index 75%
rename from camel-k-runtime-health/pom.xml
rename to camel-k-main/camel-k-runtime-health/pom.xml
index fc7d405..3024878 100644
--- a/camel-k-runtime-health/pom.xml
+++ b/camel-k-main/camel-k-runtime-health/pom.xml
@@ -20,7 +20,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-parent</artifactId>
+ <artifactId>camel-k-main</artifactId>
<version>1.1.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -45,7 +45,13 @@
</dependency>
<dependency>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
+ <artifactId>camel-k-runtime-inspector</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>io.vertx</groupId>
+ <artifactId>vertx-web</artifactId>
+ <version>${vertx.version}</version>
</dependency>
<!-- ****************************** -->
@@ -59,6 +65,16 @@
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-direct</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
@@ -73,11 +89,24 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-params</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <version>${rest-assured.version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
@@ -91,6 +120,12 @@
<version>${log4j2.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-jcl</artifactId>
+ <version>${log4j2.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/camel-k-main/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java b/camel-k-main/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java
new file mode 100644
index 0000000..8d70f10
--- /dev/null
+++ b/camel-k-main/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.health;
+
+import java.util.Collection;
+import java.util.Map;
+
+import io.vertx.core.http.HttpMethod;
+import io.vertx.core.json.Json;
+import io.vertx.core.json.JsonArray;
+import io.vertx.core.json.JsonObject;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Ordered;
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.health.HealthCheckFilter;
+import org.apache.camel.health.HealthCheckHelper;
+import org.apache.camel.health.HealthCheckRegistry;
+import org.apache.camel.impl.health.AbstractHealthCheck;
+import org.apache.camel.impl.health.ContextHealthCheck;
+import org.apache.camel.impl.health.RoutesHealthCheckRepository;
+import org.apache.camel.k.ContextCustomizer;
+import org.apache.camel.k.inspector.InspectorCustomizer;
+
+public class HealthContextCustomizer implements ContextCustomizer {
+ public static final String DEFAULT_PATH = "/health";
+
+ private String path;
+ private String healthGroupFilterExclude;
+ private boolean includeRoutes;
+ private boolean includeContext;
+
+ public HealthContextCustomizer() {
+ this.path = DEFAULT_PATH;
+ this.includeRoutes = true;
+ this.includeContext = true;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getHealthGroupFilterExclude() {
+ return healthGroupFilterExclude;
+ }
+
+ public void setHealthGroupFilterExclude(String healthGroupFilterExclude) {
+ this.healthGroupFilterExclude = healthGroupFilterExclude;
+ }
+
+ public boolean isIncludeRoutes() {
+ return includeRoutes;
+ }
+
+ public void setIncludeRoutes(boolean includeRoutes) {
+ this.includeRoutes = includeRoutes;
+ }
+
+ public boolean isIncludeContext() {
+ return includeContext;
+ }
+
+ public void setIncludeContext(boolean includeContext) {
+ this.includeContext = includeContext;
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.HIGHEST;
+ }
+
+ @Override
+ public void apply(CamelContext camelContext) {
+ try {
+ HealthCheckRegistry reg = HealthCheckRegistry.get(camelContext);
+ if (includeRoutes) {
+ reg.addRepository(new RoutesHealthCheckRepository());
+ }
+ if (includeContext) {
+ ContextHealthCheck contextHealthCheck = new ContextHealthCheck();
+ contextHealthCheck.getConfiguration().setEnabled(true);
+
+ reg.register(contextHealthCheck);
+ }
+
+ camelContext.addService(reg);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ camelContext.getRegistry().bind(
+ "health-route",
+ customizer(camelContext)
+ );
+ }
+
+ private InspectorCustomizer customizer(CamelContext camelContext) {
+ return router -> router.route(HttpMethod.GET, path).handler(routingContext -> {
+ int code = 200;
+
+ Collection<HealthCheck.Result> results = HealthCheckHelper.invoke(
+ camelContext,
+ (HealthCheckFilter) check -> check.getGroup() != null && check.getGroup().equals(getHealthGroupFilterExclude()));
+
+ JsonObject response = new JsonObject();
+ response.put("status", "UP");
+
+ JsonArray checks = new JsonArray();
+
+ for (HealthCheck.Result result: results) {
+ Map<String, Object> details = result.getDetails();
+ boolean enabled = true;
+
+ if (details.containsKey(AbstractHealthCheck.CHECK_ENABLED)) {
+ enabled = (boolean) details.get(AbstractHealthCheck.CHECK_ENABLED);
+ }
+
+ if (enabled) {
+ JsonObject check = new JsonObject();
+ check.put("name", result.getCheck().getId());
+ check.put("status", result.getState().name());
+
+ if (result.getState() == HealthCheck.State.DOWN) {
+ response.put("status", "DOWN");
+ code = 503;
+ }
+
+ checks.add(check);
+ }
+ }
+
+ if (!checks.isEmpty()) {
+ response.put("checks", checks);
+ }
+
+ routingContext.response()
+ .putHeader("content-type", "application/json")
+ .setStatusCode(code)
+ .end(Json.encodePrettily(response));
+ });
+ }
+}
diff --git a/camel-k-runtime-health/src/main/resources/META-INF/services/org/apache/camel/k/customizer/health b/camel-k-main/camel-k-runtime-health/src/main/resources/META-INF/services/org/apache/camel/k/customizer/health
similarity index 100%
rename from camel-k-runtime-health/src/main/resources/META-INF/services/org/apache/camel/k/customizer/health
rename to camel-k-main/camel-k-runtime-health/src/main/resources/META-INF/services/org/apache/camel/k/customizer/health
diff --git a/camel-k-main/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java b/camel-k-main/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java
new file mode 100644
index 0000000..1a7fb06
--- /dev/null
+++ b/camel-k-main/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.health;
+
+import java.net.URL;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.k.Runtime;
+import org.apache.camel.k.inspector.InspectorContextCustomizer;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.util.ObjectHelper;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static io.restassured.RestAssured.when;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItems;
+
+public class HealthCustomizerTest {
+
+ @ParameterizedTest
+ @ValueSource(strings = { "", "/test", "/test/nested" })
+ public void testHealthConfigurer(String path) throws Exception {
+ Runtime runtime = Runtime.on(new DefaultCamelContext());
+ runtime.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .routeId("my-route")
+ .to("mock:end");
+ }
+ });
+
+ HealthContextCustomizer healthCustomizer = new HealthContextCustomizer();
+ healthCustomizer.apply(runtime.getCamelContext());
+
+ InspectorContextCustomizer inspectorCustomizer = new InspectorContextCustomizer();
+ inspectorCustomizer.setBindPort(AvailablePortFinder.getNextAvailable());
+
+ String url;
+ if (ObjectHelper.isEmpty(path)) {
+ url = "http://localhost:" + inspectorCustomizer.getBindPort() + HealthContextCustomizer.DEFAULT_PATH;
+ } else {
+ inspectorCustomizer.setPath(path);
+
+ url = "http://localhost:" + inspectorCustomizer.getBindPort() + path + HealthContextCustomizer.DEFAULT_PATH;
+ }
+
+ inspectorCustomizer.apply(runtime.getCamelContext());
+
+ try {
+ runtime.getCamelContext().start();
+
+ when()
+ .get(new URL(url))
+ .then()
+ .statusCode(200)
+ .body(
+ "status", equalTo("UP"),
+ "checks.name", hasItems("context", "route:my-route"),
+ "checks.status", hasItems("UP", "UP")
+ );
+ } finally {
+ runtime.stop();
+ }
+ }
+}
diff --git a/camel-k-runtime-health/src/test/resources/log4j2-test.xml b/camel-k-main/camel-k-runtime-health/src/test/resources/log4j2-test.xml
similarity index 88%
copy from camel-k-runtime-health/src/test/resources/log4j2-test.xml
copy to camel-k-main/camel-k-runtime-health/src/test/resources/log4j2-test.xml
index 48bdd0c..0f393ea 100644
--- a/camel-k-runtime-health/src/test/resources/log4j2-test.xml
+++ b/camel-k-main/camel-k-runtime-health/src/test/resources/log4j2-test.xml
@@ -26,10 +26,9 @@
</Appenders>
<Loggers>
- <Logger name="io.netty" level="INFO"/>
- <Logger name="io.netty.handler.logging" level="DEBUG"/>
+ <Logger name="io.vertx" level="INFO"/>
<Root level="INFO">
- <!--<AppenderRef ref="STDOUT"/>-->
+ <!-- <AppenderRef ref="STDOUT"/> -->
<AppenderRef ref="NONE"/>
</Root>
</Loggers>
diff --git a/camel-k-runtime-servlet/pom.xml b/camel-k-main/camel-k-runtime-inspector/pom.xml
similarity index 82%
rename from camel-k-runtime-servlet/pom.xml
rename to camel-k-main/camel-k-runtime-inspector/pom.xml
index f506317..9b3a8c7 100644
--- a/camel-k-runtime-servlet/pom.xml
+++ b/camel-k-main/camel-k-runtime-inspector/pom.xml
@@ -20,12 +20,12 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-parent</artifactId>
+ <artifactId>camel-k-main</artifactId>
<version>1.1.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>camel-k-runtime-servlet</artifactId>
+ <artifactId>camel-k-runtime-inspector</artifactId>
<dependencies>
@@ -40,27 +40,14 @@
<artifactId>camel-core-engine</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-servlet</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.camel.k</groupId>
<artifactId>camel-k-runtime-core</artifactId>
</dependency>
- <!--
- the following dependencies should be kept in sync with the version
- used by camel
- -->
- <dependency>
- <groupId>io.undertow</groupId>
- <artifactId>undertow-core</artifactId>
- <version>${undertow.version}</version>
- </dependency>
<dependency>
- <groupId>io.undertow</groupId>
- <artifactId>undertow-servlet</artifactId>
- <version>1.4.26.Final</version>
+ <groupId>io.vertx</groupId>
+ <artifactId>vertx-web</artifactId>
+ <version>${vertx.version}</version>
</dependency>
<!-- ****************************** -->
@@ -88,6 +75,13 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-params</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
@@ -95,6 +89,13 @@
</dependency>
<dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <version>${rest-assured.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
@@ -106,6 +107,12 @@
<version>${log4j2.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-jcl</artifactId>
+ <version>${log4j2.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletContextCustomizer.java b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorContextCustomizer.java
similarity index 85%
rename from camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletContextCustomizer.java
rename to camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorContextCustomizer.java
index 9986889..5bcc396 100644
--- a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletContextCustomizer.java
+++ b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorContextCustomizer.java
@@ -14,23 +14,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.k.servlet;
+package org.apache.camel.k.inspector;
import org.apache.camel.CamelContext;
import org.apache.camel.Ordered;
import org.apache.camel.k.ContextCustomizer;
-public class ServletContextCustomizer implements ContextCustomizer {
+public class InspectorContextCustomizer implements ContextCustomizer {
public static final String DEFAULT_BIND_HOST = "0.0.0.0";
- public static final int DEFAULT_BIND_PORT = 8080;
+ public static final int DEFAULT_BIND_PORT = 8081;
public static final String DEFAULT_PATH = "/";
private String bindHost;
private int bindPort;
private String path;
- private ServletEndpoint endpoint;
+ private InspectorEndpoint endpoint;
- public ServletContextCustomizer() {
+ public InspectorContextCustomizer() {
this.bindHost = DEFAULT_BIND_HOST;
this.bindPort = DEFAULT_BIND_PORT;
this.path = DEFAULT_PATH;
@@ -61,8 +61,13 @@ public class ServletContextCustomizer implements ContextCustomizer {
}
@Override
+ public int getOrder() {
+ return Ordered.LOWEST;
+ }
+
+ @Override
public void apply(CamelContext camelContext) {
- endpoint = new ServletEndpoint(camelContext, bindHost, bindPort, path);
+ endpoint = new InspectorEndpoint(camelContext, bindHost, bindPort, path);
try {
camelContext.addService(endpoint, true, true);
@@ -70,9 +75,4 @@ public class ServletContextCustomizer implements ContextCustomizer {
throw new RuntimeException(e);
}
}
-
- @Override
- public int getOrder() {
- return Ordered.LOWEST;
- }
}
diff --git a/examples/camel-k-runtime-example-servlet/src/main/resources/routes.groovy b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorCustomizer.java
similarity index 71%
rename from examples/camel-k-runtime-example-servlet/src/main/resources/routes.groovy
rename to camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorCustomizer.java
index 452b215..06b4cbb 100644
--- a/examples/camel-k-runtime-example-servlet/src/main/resources/routes.groovy
+++ b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorCustomizer.java
@@ -14,7 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.camel.k.inspector;
-from('servlet:/test')
- .convertBodyTo(String.class)
- .to('log:info')
\ No newline at end of file
+import java.util.function.Consumer;
+
+import io.vertx.ext.web.Router;
+
+/**
+ * Marker interface to easily lookup Vertx customizer from the
+ * camel {@link org.apache.camel.spi.Registry}.
+ */
+@FunctionalInterface
+public interface InspectorCustomizer extends Consumer<Router> {
+}
diff --git a/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorEndpoint.java b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorEndpoint.java
new file mode 100644
index 0000000..71eafde
--- /dev/null
+++ b/camel-k-main/camel-k-runtime-inspector/src/main/java/org/apache/camel/k/inspector/InspectorEndpoint.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.inspector;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.VertxOptions;
+import io.vertx.core.http.HttpServer;
+import io.vertx.ext.web.Router;
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.service.ServiceSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class InspectorEndpoint extends ServiceSupport {
+ private static final Logger LOGGER = LoggerFactory.getLogger(InspectorEndpoint.class);
+
+ private final CamelContext context;
+ private final String bindHost;
+ private final int bindPort;
+ private final String path;
+
+ private Vertx vertx;
+ private boolean localVertx;
+ private ExecutorService executor;
+ private HttpServerWrapper vertxHttpServer;
+
+ public InspectorEndpoint(CamelContext context, String bindHost, int bindPort, String path) {
+ this.context = context;
+ this.bindHost = bindHost;
+ this.bindPort = bindPort;
+ this.path = path;
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ this.executor = context.getExecutorServiceManager().newSingleThreadExecutor(this, "main-actuator");
+ this.vertx = CamelContextHelper.findByType(context, Vertx.class);
+
+ if (this.vertx != null) {
+ LOGGER.info("Found Vert.x instance in registry: {}", this.vertx);
+ } else {
+ VertxOptions options = CamelContextHelper.findByType(context, VertxOptions.class);
+ if (options == null) {
+ options = new VertxOptions();
+ }
+
+ LOGGER.info("Creating new Vert.x instance");
+
+ this.vertx = Vertx.vertx(options);
+ this.localVertx = true;
+ }
+
+ vertxHttpServer = new HttpServerWrapper();
+ vertxHttpServer.start();
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ if (this.vertxHttpServer != null) {
+ vertxHttpServer.stop();
+ }
+
+ if (this.vertx != null && this.localVertx) {
+ Future<?> future = this.executor.submit(
+ () -> {
+ CountDownLatch latch = new CountDownLatch(1);
+
+ this.vertx.close(result -> {
+ try {
+ if (result.failed()) {
+ LOGGER.warn("Failed to close Vert.x reason: {}",
+ result.cause().getMessage()
+ );
+
+ throw new RuntimeException(result.cause());
+ }
+
+ LOGGER.info("Vert.x stopped");
+ } finally {
+ latch.countDown();
+ }
+ });
+
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ );
+
+ try {
+ future.get();
+ } finally {
+ this.vertx = null;
+ this.localVertx = false;
+ }
+ }
+
+ if (this.executor != null) {
+ context.getExecutorServiceManager().shutdownNow(this.executor);
+ }
+ }
+
+ private final class HttpServerWrapper extends ServiceSupport {
+ private HttpServer server;
+
+ @Override
+ protected void doStart() throws Exception {
+ startAsync().toCompletableFuture().join();
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ try {
+ if (server != null) {
+ stopAsync().toCompletableFuture().join();
+ }
+ } finally {
+ this.server = null;
+ }
+ }
+
+ private CompletionStage<Void> startAsync() {
+ final Router router = Router.router(vertx);
+ final Router subRouter = Router.router(vertx);
+
+ context.getRegistry().findByType(InspectorCustomizer.class).forEach(customizer -> {
+ LOGGER.debug("InspectorCustomizer: {}", customizer);
+ customizer.accept(subRouter);
+ });
+
+ router.mountSubRouter(path, subRouter);
+
+ server = vertx.createHttpServer();
+ return CompletableFuture.runAsync(
+ () -> {
+ CountDownLatch latch = new CountDownLatch(1);
+
+ server.requestHandler(router).listen(bindPort, bindHost, result -> {
+ try {
+ if (result.failed()) {
+ LOGGER.warn("Failed to start Vert.x HttpServer on {}:{}, reason: {}",
+ bindHost,
+ bindPort,
+ result.cause().getMessage()
+ );
+
+ throw new RuntimeException(result.cause());
+ }
+
+ LOGGER.info("Vert.x HttpServer started on {}:{}", bindHost, bindPort);
+ } finally {
+ latch.countDown();
+ }
+ });
+
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ },
+ executor
+ );
+ }
+
+ protected CompletionStage<Void> stopAsync() {
+ return CompletableFuture.runAsync(
+ () -> {
+ CountDownLatch latch = new CountDownLatch(1);
+
+ server.close(result -> {
+ try {
+ if (result.failed()) {
+ LOGGER.warn("Failed to close Vert.x HttpServer reason: {}",
+ result.cause().getMessage()
+ );
+
+ throw new RuntimeException(result.cause());
+ }
+
+ LOGGER.info("Vert.x HttpServer stopped");
+ } finally {
+ latch.countDown();
+ }
+ });
+
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ },
+ executor
+ );
+ }
+ }
+}
diff --git a/camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servlet b/camel-k-main/camel-k-runtime-inspector/src/main/resources/META-INF/services/org/apache/camel/k/customizer/inspector
similarity index 92%
rename from camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servlet
rename to camel-k-main/camel-k-runtime-inspector/src/main/resources/META-INF/services/org/apache/camel/k/customizer/inspector
index 46bb724..6fa86ed 100644
--- a/camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servlet
+++ b/camel-k-main/camel-k-runtime-inspector/src/main/resources/META-INF/services/org/apache/camel/k/customizer/inspector
@@ -15,4 +15,4 @@
# limitations under the License.
#
-class=org.apache.camel.k.servlet.ServletContextCustomizer
+class=org.apache.camel.k.inspector.InspectorContextCustomizer
diff --git a/camel-k-main/camel-k-runtime-inspector/src/test/java/org/apache/camel/k/inspector/InspectorCustomizerTest.java b/camel-k-main/camel-k-runtime-inspector/src/test/java/org/apache/camel/k/inspector/InspectorCustomizerTest.java
new file mode 100644
index 0000000..d103b1f
--- /dev/null
+++ b/camel-k-main/camel-k-runtime-inspector/src/test/java/org/apache/camel/k/inspector/InspectorCustomizerTest.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.inspector;
+
+import java.net.URL;
+
+import io.vertx.core.http.HttpMethod;
+import io.vertx.core.json.Json;
+import io.vertx.core.json.JsonObject;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.k.Runtime;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.util.ObjectHelper;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static io.restassured.RestAssured.when;
+import static org.hamcrest.Matchers.equalTo;
+
+public class InspectorCustomizerTest {
+
+ @ParameterizedTest
+ @ValueSource(strings = { "", "/test", "/test/nested" })
+ public void testInspectorConfigurer(String path) throws Exception {
+ Runtime runtime = Runtime.on(new DefaultCamelContext());
+
+ runtime.getRegistry().bind("my-customizer", (InspectorCustomizer) router ->
+ router.route(HttpMethod.GET, "/my/path")
+ .handler(routingContext -> {
+ JsonObject response = new JsonObject();
+ response.put("status", "UP");
+
+ routingContext.response()
+ .putHeader("content-type", "application/json")
+ .setStatusCode(200)
+ .end(Json.encodePrettily(response));
+ })
+ );
+
+ InspectorContextCustomizer inspectorCustomizer = new InspectorContextCustomizer();
+ inspectorCustomizer.setBindPort(AvailablePortFinder.getNextAvailable());
+
+ String url;
+ if (ObjectHelper.isEmpty(path)) {
+ url = "http://localhost:" + inspectorCustomizer.getBindPort() + "/my/path";
+ } else {
+ inspectorCustomizer.setPath(path);
+
+ url = "http://localhost:" + inspectorCustomizer.getBindPort() + path + "/my/path";
+ }
+
+ inspectorCustomizer.apply(runtime.getCamelContext());
+
+ when()
+ .get(new URL(url))
+ .then()
+ .statusCode(200)
+ .body("status", equalTo("UP"));
+ }
+}
diff --git a/camel-k-runtime-servlet/src/test/resources/log4j2-test.xml b/camel-k-main/camel-k-runtime-inspector/src/test/resources/log4j2-test.xml
similarity index 95%
rename from camel-k-runtime-servlet/src/test/resources/log4j2-test.xml
rename to camel-k-main/camel-k-runtime-inspector/src/test/resources/log4j2-test.xml
index 384e622..d0ac3a4 100644
--- a/camel-k-runtime-servlet/src/test/resources/log4j2-test.xml
+++ b/camel-k-main/camel-k-runtime-inspector/src/test/resources/log4j2-test.xml
@@ -26,7 +26,7 @@
</Appenders>
<Loggers>
- <Logger name="io.undertow" level="INFO"/>
+ <Logger name="io.vertx" level="INFO"/>
<Root level="INFO">
<!--<AppenderRef ref="STDOUT"/>-->
<AppenderRef ref="NONE"/>
diff --git a/camel-k-runtime-main/pom.xml b/camel-k-main/camel-k-runtime-main/pom.xml
similarity index 99%
rename from camel-k-runtime-main/pom.xml
rename to camel-k-main/camel-k-runtime-main/pom.xml
index 2ae7c16..4b32b82 100644
--- a/camel-k-runtime-main/pom.xml
+++ b/camel-k-main/camel-k-runtime-main/pom.xml
@@ -20,7 +20,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-parent</artifactId>
+ <artifactId>camel-k-main</artifactId>
<version>1.1.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/Application.java b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/Application.java
similarity index 100%
rename from camel-k-runtime-main/src/main/java/org/apache/camel/k/main/Application.java
rename to camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/Application.java
diff --git a/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
similarity index 100%
rename from camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
rename to camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
diff --git a/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationSupport.java b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationSupport.java
similarity index 100%
rename from camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationSupport.java
rename to camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationSupport.java
diff --git a/camel-k-runtime-main/src/main/resources/log4j2.properties b/camel-k-main/camel-k-runtime-main/src/main/resources/log4j2.properties
similarity index 100%
rename from camel-k-runtime-main/src/main/resources/log4j2.properties
rename to camel-k-main/camel-k-runtime-main/src/main/resources/log4j2.properties
diff --git a/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/MyBean.java b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/MyBean.java
similarity index 100%
rename from camel-k-runtime-main/src/test/java/org/apache/camel/k/main/MyBean.java
rename to camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/MyBean.java
diff --git a/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/PropertiesTest.java b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/PropertiesTest.java
similarity index 100%
rename from camel-k-runtime-main/src/test/java/org/apache/camel/k/main/PropertiesTest.java
rename to camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/PropertiesTest.java
diff --git a/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
similarity index 100%
rename from camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
rename to camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
diff --git a/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/TestCustomizer.java b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/TestCustomizer.java
similarity index 100%
rename from camel-k-runtime-main/src/test/java/org/apache/camel/k/main/TestCustomizer.java
rename to camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/TestCustomizer.java
diff --git a/camel-k-runtime-main/src/test/resources/META-INF/services/org/apache/camel/k/customizer/test b/camel-k-main/camel-k-runtime-main/src/test/resources/META-INF/services/org/apache/camel/k/customizer/test
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/META-INF/services/org/apache/camel/k/customizer/test
rename to camel-k-main/camel-k-runtime-main/src/test/resources/META-INF/services/org/apache/camel/k/customizer/test
diff --git a/camel-k-runtime-main/src/test/resources/MyRoutesConfig.java b/camel-k-main/camel-k-runtime-main/src/test/resources/MyRoutesConfig.java
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/MyRoutesConfig.java
rename to camel-k-main/camel-k-runtime-main/src/test/resources/MyRoutesConfig.java
diff --git a/camel-k-runtime-main/src/test/resources/MyRoutesWithBeans.java b/camel-k-main/camel-k-runtime-main/src/test/resources/MyRoutesWithBeans.java
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/MyRoutesWithBeans.java
rename to camel-k-main/camel-k-runtime-main/src/test/resources/MyRoutesWithBeans.java
diff --git a/camel-k-runtime-main/src/test/resources/conf.d/001/conf.properties b/camel-k-main/camel-k-runtime-main/src/test/resources/conf.d/001/conf.properties
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/conf.d/001/conf.properties
rename to camel-k-main/camel-k-runtime-main/src/test/resources/conf.d/001/conf.properties
diff --git a/camel-k-runtime-main/src/test/resources/conf.d/002/conf.properties b/camel-k-main/camel-k-runtime-main/src/test/resources/conf.d/002/conf.properties
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/conf.d/002/conf.properties
rename to camel-k-main/camel-k-runtime-main/src/test/resources/conf.d/002/conf.properties
diff --git a/camel-k-runtime-main/src/test/resources/conf.properties b/camel-k-main/camel-k-runtime-main/src/test/resources/conf.properties
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/conf.properties
rename to camel-k-main/camel-k-runtime-main/src/test/resources/conf.properties
diff --git a/camel-k-runtime-main/src/test/resources/log4j2-test.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/log4j2-test.xml
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/log4j2-test.xml
rename to camel-k-main/camel-k-runtime-main/src/test/resources/log4j2-test.xml
diff --git a/camel-k-runtime-main/src/test/resources/my-resource.txt b/camel-k-main/camel-k-runtime-main/src/test/resources/my-resource.txt
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/my-resource.txt
rename to camel-k-main/camel-k-runtime-main/src/test/resources/my-resource.txt
diff --git a/camel-k-runtime-main/src/test/resources/r1.js b/camel-k-main/camel-k-runtime-main/src/test/resources/r1.js
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/r1.js
rename to camel-k-main/camel-k-runtime-main/src/test/resources/r1.js
diff --git a/camel-k-runtime-main/src/test/resources/r2.mytype b/camel-k-main/camel-k-runtime-main/src/test/resources/r2.mytype
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/r2.mytype
rename to camel-k-main/camel-k-runtime-main/src/test/resources/r2.mytype
diff --git a/camel-k-runtime-main/src/test/resources/rests.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/rests.xml
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/rests.xml
rename to camel-k-main/camel-k-runtime-main/src/test/resources/rests.xml
diff --git a/camel-k-runtime-main/src/test/resources/routes-with-expression.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/routes-with-expression.xml
rename to camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
diff --git a/camel-k-runtime-main/src/test/resources/routes.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/routes.xml
similarity index 100%
rename from camel-k-runtime-main/src/test/resources/routes.xml
rename to camel-k-main/camel-k-runtime-main/src/test/resources/routes.xml
diff --git a/camel-k-runtime-health/src/test/resources/log4j2-test.xml b/camel-k-main/pom.xml
similarity index 55%
rename from camel-k-runtime-health/src/test/resources/log4j2-test.xml
rename to camel-k-main/pom.xml
index 48bdd0c..083386d 100644
--- a/camel-k-runtime-health/src/test/resources/log4j2-test.xml
+++ b/camel-k-main/pom.xml
@@ -17,21 +17,21 @@
limitations under the License.
-->
-<Configuration status="INFO">
- <Appenders>
- <Console name="STDOUT" target="SYSTEM_OUT">
- <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%t|%c - %msg%n"/>
- </Console>
- <Null name="NONE"/>
- </Appenders>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.camel.k</groupId>
+ <artifactId>camel-k-runtime-parent</artifactId>
+ <version>1.1.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>pom</packaging>
- <Loggers>
- <Logger name="io.netty" level="INFO"/>
- <Logger name="io.netty.handler.logging" level="DEBUG"/>
- <Root level="INFO">
- <!--<AppenderRef ref="STDOUT"/>-->
- <AppenderRef ref="NONE"/>
- </Root>
- </Loggers>
+ <artifactId>camel-k-main</artifactId>
-</Configuration>
\ No newline at end of file
+ <modules>
+ <module>camel-k-runtime-main</module>
+ <module>camel-k-runtime-health</module>
+ <module>camel-k-runtime-inspector</module>
+ </modules>
+
+</project>
diff --git a/camel-k-runtime-bom/pom.xml b/camel-k-runtime-bom/pom.xml
index 067a260..bace3f9 100644
--- a/camel-k-runtime-bom/pom.xml
+++ b/camel-k-runtime-bom/pom.xml
@@ -135,7 +135,7 @@
</dependency>
<dependency>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
+ <artifactId>camel-k-runtime-inspector</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java b/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java
deleted file mode 100644
index cab06e3..0000000
--- a/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthContextCustomizer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.health;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.k.ContextCustomizer;
-import org.apache.camel.k.servlet.ServletRegistration;
-
-public class HealthContextCustomizer implements ContextCustomizer {
- public static final String DEFAULT_PATH = "/health";
-
- private String path;
-
- public HealthContextCustomizer() {
- this.path = DEFAULT_PATH;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- @Override
- public void apply(CamelContext camelContext) {
- camelContext.getRegistry().bind(
- "health-servlet",
- new ServletRegistration(
- "HealthServlet",
- new HealthEndpoint(camelContext),
- path
- )
- );
- }
-}
diff --git a/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthEndpoint.java b/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthEndpoint.java
deleted file mode 100644
index 62172b4..0000000
--- a/camel-k-runtime-health/src/main/java/org/apache/camel/k/health/HealthEndpoint.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.health;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ServiceStatus;
-
-public class HealthEndpoint extends HttpServlet {
- private final CamelContext context;
-
- public HealthEndpoint(CamelContext context) {
- this.context = context;
- }
-
- @Override
- protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
- if (context.getStatus() == ServiceStatus.Started) {
- resp.setContentType("text/plain");
- resp.setContentLength(2);
- resp.setStatus(HttpServletResponse.SC_OK);
-
- try (PrintWriter writer = resp.getWriter()) {
- writer.write("OK");
- }
-
- } else {
- resp.setContentType("text/plain");
- resp.setContentLength(2);
- resp.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
-
- try (PrintWriter writer = resp.getWriter()) {
- writer.write("KO");
- }
- }
- }
-
- @Override
- protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
- doGet(req, resp);
- }
-}
diff --git a/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java b/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java
deleted file mode 100644
index 5946a96..0000000
--- a/camel-k-runtime-health/src/test/java/org/apache/camel/k/health/HealthCustomizerTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.health;
-
-import io.undertow.servlet.Servlets;
-import io.undertow.servlet.api.DeploymentManager;
-import io.undertow.servlet.core.ManagedServlet;
-import io.undertow.servlet.core.ManagedServlets;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.k.servlet.ServletContextCustomizer;
-import org.apache.camel.test.AvailablePortFinder;
-import org.junit.jupiter.api.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class HealthCustomizerTest {
-
- @Test
- public void testServletConfigurer() {
- Runtime runtime = Runtime.on(new DefaultCamelContext());
-
- HealthContextCustomizer healthCustomizer = new HealthContextCustomizer();
- healthCustomizer.apply(runtime.getCamelContext());
-
- ServletContextCustomizer servletCustomizer = new ServletContextCustomizer();
- servletCustomizer.setBindPort(AvailablePortFinder.getNextAvailable());
- servletCustomizer.apply(runtime.getCamelContext());
-
- DeploymentManager manager = Servlets.defaultContainer().getDeploymentByPath("/");
- ManagedServlets managedServlets = manager.getDeployment().getServlets();
- ManagedServlet servlet = managedServlets.getManagedServlet("HealthServlet");
-
- assertThat(servlet).isNotNull();
- assertThat(servlet.getServletInfo().getMappings()).contains("/health");
- }
-}
diff --git a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletEndpoint.java b/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletEndpoint.java
deleted file mode 100644
index afff9a1..0000000
--- a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletEndpoint.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.servlet;
-
-import javax.servlet.http.HttpServlet;
-
-import io.undertow.Handlers;
-import io.undertow.Undertow;
-import io.undertow.server.handlers.PathHandler;
-import io.undertow.servlet.Servlets;
-import io.undertow.servlet.api.DeploymentInfo;
-import io.undertow.servlet.api.DeploymentManager;
-import io.undertow.servlet.util.ImmediateInstanceHandle;
-import org.apache.camel.CamelContext;
-import org.apache.camel.support.service.ServiceSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ServletEndpoint extends ServiceSupport {
- private static final Logger LOGGER = LoggerFactory.getLogger(ServletEndpoint.class);
-
- private final CamelContext context;
- private final String bindHost;
- private final int bindPort;
- private final String path;
-
- private Undertow server;
- private DeploymentManager manager;
-
- public ServletEndpoint(CamelContext context, String bindHost, int bindPort, String path) {
- this.context = context;
- this.bindHost = bindHost;
- this.bindPort = bindPort;
- this.path = path;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected void doStart() throws Exception {
- DeploymentInfo servletBuilder = Servlets.deployment()
- .setClassLoader(ServletEndpoint.class.getClassLoader())
- .setContextPath(path)
- .setDeploymentName("camel-k.war");
-
- context.getRegistry().findByType(ServletRegistration.class)
- .forEach(r -> {
- LOGGER.info("Registering servlet: {}", r);
-
- servletBuilder.addServlet(
- Servlets.servlet(r.getName(), HttpServlet.class, () -> new ImmediateInstanceHandle(r.getServlet())).addMappings(r.getMappings())
- );
- }
- );
-
- this.manager = Servlets.defaultContainer().addDeployment(servletBuilder);
- this.manager.deploy();
-
- PathHandler path = Handlers.path(Handlers.redirect(this.path)).addPrefixPath(this.path, manager.start());
-
- LOGGER.info("Starting servlet engine on {}:{}{}", this.bindHost, this.bindPort, this.path);
-
- this.server = Undertow.builder().addHttpListener(this.bindPort, this.bindHost).setHandler(path).build();
- this.server.start();
- }
-
- @Override
- protected void doStop() throws Exception {
- if (this.server != null) {
- LOGGER.info("Stopping servlet engine");
- this.server.stop();
- }
- }
-}
diff --git a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistration.java b/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistration.java
deleted file mode 100644
index 2a3f06e..0000000
--- a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistration.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.servlet;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import javax.servlet.Servlet;
-
-/**
- * An helper class used to register servlets.
- *
- * <pre>{@code
- * public class WebhookCustomizer implements ContextCustomizer {
- * {@literal @}Override
- * public void apply(CamelContext camelContext, Runtime.Registry registry) {
- * registry.bind(
- * "webhook-servlet",
- * new ServletRegistration("CamelServlet", new CamelHttpTransportServlet(), "/webhook/*")
- * );
- * }
- * }
- * }</pre>
- */
-public final class ServletRegistration {
- private final Servlet servlet;
- private final String name;
- private final Set<String> mappings;
-
- public ServletRegistration(String name, Servlet servlet, Collection<String> mappings) {
- this.name = name;
- this.servlet = servlet;
- this.mappings = new LinkedHashSet<>();
- this.mappings.addAll(mappings);
- }
-
- public ServletRegistration(String name, Servlet servlet, String... mappings) {
- this.name = name;
- this.servlet = servlet;
- this.mappings = new LinkedHashSet<>();
-
- for (String mapping: mappings) {
- this.mappings.add(mapping);
- }
- }
-
- public String getName() {
- return name;
- }
-
- public Servlet getServlet() {
- return servlet;
- }
-
- public Collection<String> getMappings() {
- return mappings;
- }
-
- @Override
- public String toString() {
- return "ServletRegistration{"
- + "servlet=" + servlet
- + ", name='" + name + '\''
- + ", mappings=" + mappings
- + '}';
- }
-}
diff --git a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistrationContextCustomizer.java b/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistrationContextCustomizer.java
deleted file mode 100644
index 274964c..0000000
--- a/camel-k-runtime-servlet/src/main/java/org/apache/camel/k/servlet/ServletRegistrationContextCustomizer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.servlet;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Ordered;
-import org.apache.camel.component.servlet.CamelHttpTransportServlet;
-import org.apache.camel.k.ContextCustomizer;
-
-public class ServletRegistrationContextCustomizer implements ContextCustomizer {
- public static final String DEFAULT_PATH = "/camel/*";
- public static final String DEFAULT_CAMEL_SERVLET_NAME = "CamelServlet";
-
- private String path;
- private String camelServletName;
-
- public ServletRegistrationContextCustomizer() {
- this(DEFAULT_PATH, DEFAULT_CAMEL_SERVLET_NAME);
- }
-
- public ServletRegistrationContextCustomizer(String path, String camelServletName) {
- this.path = path;
- this.camelServletName = camelServletName;
- }
-
- @Override
- public void apply(CamelContext camelContext) {
- camelContext.getRegistry().bind(
- camelServletName,
- new ServletRegistration(camelServletName, new CamelHttpTransportServlet(), path)
- );
- }
-
- @Override
- public int getOrder() {
- return Ordered.HIGHEST;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public String getCamelServletName() {
- return camelServletName;
- }
-
- public void setCamelServletName(String camelServletName) {
- this.camelServletName = camelServletName;
- }
-}
\ No newline at end of file
diff --git a/camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servletregistration b/camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servletregistration
deleted file mode 100644
index 018dda8..0000000
--- a/camel-k-runtime-servlet/src/main/resources/META-INF/services/org/apache/camel/k/customizer/servletregistration
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-class=org.apache.camel.k.servlet.ServletRegistrationContextCustomizer
diff --git a/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletCustomizerTest.java b/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletCustomizerTest.java
deleted file mode 100644
index 0cc7ca7..0000000
--- a/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletCustomizerTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.servlet;
-
-import io.undertow.servlet.Servlets;
-import io.undertow.servlet.api.DeploymentManager;
-import io.undertow.servlet.core.ManagedServlet;
-import io.undertow.servlet.core.ManagedServlets;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.test.AvailablePortFinder;
-import org.junit.jupiter.api.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class ServletCustomizerTest {
-
- @Test
- public void testServletConfigurer() {
- Runtime runtime = Runtime.on(new DefaultCamelContext());
-
- ServletRegistrationContextCustomizer servletRegistrationCustomizer = new ServletRegistrationContextCustomizer("/webhook/*", "webhook-servlet");
- servletRegistrationCustomizer.apply(runtime.getCamelContext());
-
- ServletContextCustomizer servletCustomizer = new ServletContextCustomizer();
- servletCustomizer.setBindPort(AvailablePortFinder.getNextAvailable());
- servletCustomizer.apply(runtime.getCamelContext());
-
- DeploymentManager manager = Servlets.defaultContainer().getDeploymentByPath("/");
- ManagedServlets managedServlets = manager.getDeployment().getServlets();
- ManagedServlet servlet = managedServlets.getManagedServlet("webhook-servlet");
-
- assertThat(servlet).isNotNull();
- assertThat(servlet.getServletInfo().getMappings()).contains("/webhook/*");
- }
-}
diff --git a/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletRegistrationCustomizerTest.java b/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletRegistrationCustomizerTest.java
deleted file mode 100644
index 2c3eea9..0000000
--- a/camel-k-runtime-servlet/src/test/java/org/apache/camel/k/servlet/ServletRegistrationCustomizerTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.k.servlet;
-
-import io.undertow.servlet.Servlets;
-import io.undertow.servlet.api.DeploymentManager;
-import io.undertow.servlet.core.ManagedServlet;
-import io.undertow.servlet.core.ManagedServlets;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.test.AvailablePortFinder;
-import org.junit.jupiter.api.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class ServletRegistrationCustomizerTest {
-
- @Test
- public void testServletRegistrationConfigurer() {
- Runtime runtime = Runtime.on(new DefaultCamelContext());
-
- ServletRegistrationContextCustomizer servletRegistrationCustomizer = new ServletRegistrationContextCustomizer();
- servletRegistrationCustomizer.apply(runtime.getCamelContext());
-
- ServletContextCustomizer servletCustomizer = new ServletContextCustomizer();
- servletCustomizer.setBindPort(AvailablePortFinder.getNextAvailable());
- servletCustomizer.apply(runtime.getCamelContext());
-
- DeploymentManager manager = Servlets.defaultContainer().getDeploymentByPath("/");
- ManagedServlets managedServlets = manager.getDeployment().getServlets();
- ManagedServlet servlet = managedServlets.getManagedServlet("CamelServlet");
-
- assertThat(servlet).isNotNull();
- assertThat(servlet.getServletInfo().getMappings()).contains("/camel/*");
- }
-}
diff --git a/examples/camel-k-runtime-example-health/README.adoc b/examples/camel-k-runtime-example-health/README.adoc
index dbecf56..1c19469 100644
--- a/examples/camel-k-runtime-example-health/README.adoc
+++ b/examples/camel-k-runtime-example-health/README.adoc
@@ -9,6 +9,17 @@ mvn clean exec:java
```
while it is running (from another terminal) you can access the rest camel route exposed through the servlet with:
```bash
-curl http://localhost:8080/health
+curl http://localhost:8082/health
```
-if the camel context has started properly that should get `OK`.
+if the camel context has started properly that should get:
+```json
+{
+ "checks": [
+ {
+ "name": "route:my-route",
+ "status": "UP"
+ }
+ ],
+ "status": "UP"
+}
+```
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-health/pom.xml b/examples/camel-k-runtime-example-health/pom.xml
index 11a570a..15f2a2f 100644
--- a/examples/camel-k-runtime-example-health/pom.xml
+++ b/examples/camel-k-runtime-example-health/pom.xml
@@ -38,11 +38,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
+ <artifactId>camel-k-runtime-health</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-health</artifactId>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-netty-http</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
diff --git a/examples/camel-k-runtime-example-health/src/main/resources/application.properties b/examples/camel-k-runtime-example-health/src/main/resources/application.properties
index 2e302fb..cf08a83 100644
--- a/examples/camel-k-runtime-example-health/src/main/resources/application.properties
+++ b/examples/camel-k-runtime-example-health/src/main/resources/application.properties
@@ -30,6 +30,6 @@ camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
#
# Camel K
#
-customizer.servlet.enabled = true
-customizer.servletregistration.enabled = true
+customizer.inspector.enabled = true
+customizer.inspector.bind-port = 8082
customizer.health.enabled = true
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-health/src/main/resources/routes.groovy b/examples/camel-k-runtime-example-health/src/main/resources/routes.groovy
index 452b215..a1818bd 100644
--- a/examples/camel-k-runtime-example-health/src/main/resources/routes.groovy
+++ b/examples/camel-k-runtime-example-health/src/main/resources/routes.groovy
@@ -15,6 +15,7 @@
* limitations under the License.
*/
-from('servlet:/test')
+from('netty-http:http:0.0.0.0:8080//test')
+ .routeId('my-route')
.convertBodyTo(String.class)
.to('log:info')
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-servlet/README.adoc b/examples/camel-k-runtime-example-servlet/README.adoc
deleted file mode 100644
index 601c3be..0000000
--- a/examples/camel-k-runtime-example-servlet/README.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-Servlet Apache Camel K Runtime example
-======================================
-
-This repository contains an Apache Camel-K Runtime application that use camel servlet.
-
-In order to run it:
-```bash
-mvn clean exec:java
-```
-while it is running (from another terminal) you can access the rest camel route exposed through the servlet with:
-```bash
-curl http://localhost:8080/mypath/test
-```
-that should log and empty exchange in the running application console logs.
diff --git a/examples/camel-k-runtime-example-servlet/pom.xml b/examples/camel-k-runtime-example-servlet/pom.xml
deleted file mode 100644
index dc7c790..0000000
--- a/examples/camel-k-runtime-example-servlet/pom.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-examples</artifactId>
- <version>1.1.1-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>camel-k-runtime-example-servlet</artifactId>
-
- <dependencies>
-
- <!-- ****************************** -->
- <!-- -->
- <!-- RUNTIME -->
- <!-- -->
- <!-- ****************************** -->
-
- <dependency>
- <groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-main</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-loader-groovy</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <defaultGoal>exec:java</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <version>${exec-maven-plugin.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>java</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <mainClass>org.apache.camel.k.main.Application</mainClass>
- <classpathScope>runtime</classpathScope>
- <systemProperties>
- <systemProperty>
- <key>camel.k.conf</key>
- <value>${project.basedir}/src/main/resources/application.properties</value>
- </systemProperty>
- <systemProperty>
- <key>camel.k.routes</key>
- <value>file:${project.basedir}/src/main/resources/routes.groovy</value>
- </systemProperty>
- </systemProperties>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/examples/camel-k-runtime-example-servlet/src/main/resources/application.properties b/examples/camel-k-runtime-example-servlet/src/main/resources/application.properties
deleted file mode 100644
index 08f0a0c..0000000
--- a/examples/camel-k-runtime-example-servlet/src/main/resources/application.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-## ---------------------------------------------------------------------------
-## Licensed to the Apache Software Foundation (ASF) under one or more
-## contributor license agreements. See the NOTICE file distributed with
-## this work for additional information regarding copyright ownership.
-## The ASF licenses this file to You under the Apache License, Version 2.0
-## (the "License"); you may not use this file except in compliance with
-## the License. You may obtain a copy of the License at
-##
-## http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-## ---------------------------------------------------------------------------
-
-#
-# Logging
-#
-logging.level.org.apache.camel.k = DEBUG
-
-#
-# camel - main
-#
-camel.main.name = camel-k
-camel.main.stream-caching-enabled = true
-camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
-
-#
-# Camel K
-#
-customizer.servletregistration.enabled = true
-customizer.servletregistration.path = /mypath/*
-customizer.servlet.enabled = true
diff --git a/examples/camel-k-runtime-example-yaml/pom.xml b/examples/camel-k-runtime-example-yaml/pom.xml
index 526385a..ae92d71 100644
--- a/examples/camel-k-runtime-example-yaml/pom.xml
+++ b/examples/camel-k-runtime-example-yaml/pom.xml
@@ -34,10 +34,6 @@
</dependency>
<dependency>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.camel.k</groupId>
<artifactId>camel-k-loader-yaml</artifactId>
</dependency>
<dependency>
diff --git a/examples/pom.xml b/examples/pom.xml
index aaa22eb..040a6a0 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -33,7 +33,6 @@
</properties>
<modules>
- <module>camel-k-runtime-example-servlet</module>
<module>camel-k-runtime-example-health</module>
<module>camel-k-runtime-example-yaml</module>
<module>camel-k-runtime-example-knative</module>
diff --git a/pom.xml b/pom.xml
index c087ff5..2381a0d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,7 @@
<jandex.version>2.1.2.Final</jandex.version>
<javapoet.version>1.11.1</javapoet.version>
<auto-service.version>1.0-rc6</auto-service.version>
+ <rest-assured.version>4.2.0</rest-assured.version>
<gmavenplus-plugin.version>1.7.1</gmavenplus-plugin.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
@@ -205,7 +206,7 @@
<module>camel-knative</module>
<module>camel-k-runtime-core</module>
- <module>camel-k-runtime-main</module>
+ <module>camel-k-main</module>
<module>camel-k-quarkus</module>
<module>camel-k-loader-groovy</module>
@@ -216,15 +217,13 @@
<module>camel-k-loader-java</module>
<module>camel-k-loader-knative</module>
- <module>camel-k-runtime-bom</module>
-
<module>camel-k-runtime-cron</module>
- <module>camel-k-runtime-health</module>
<module>camel-k-runtime-knative</module>
<module>camel-k-runtime-master</module>
- <module>camel-k-runtime-servlet</module>
<module>camel-k-runtime-webhook</module>
+ <module>camel-k-runtime-bom</module>
+
<module>examples</module>
<module>distribution</module>
</modules>
@@ -320,7 +319,7 @@
</dependency>
<dependency>
<groupId>org.apache.camel.k</groupId>
- <artifactId>camel-k-runtime-servlet</artifactId>
+ <artifactId>camel-k-runtime-inspector</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/pom.xml b/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/pom.xml
index 61dd65b..1b4b08e 100644
--- a/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/pom.xml
+++ b/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/pom.xml
@@ -32,7 +32,7 @@
<catalog.runtime>main</catalog.runtime>
<catalog.file>catalog.yaml</catalog.file>
- <runtime.version>1.1.0-SNAPSHOT</runtime.version>
+ <runtime.version>1.1.1-SNAPSHOT</runtime.version>
</properties>
<build>
diff --git a/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/verify.groovy b/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/verify.groovy
index 835a5cf..78c9221 100644
--- a/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/verify.groovy
+++ b/tooling/camel-k-maven-plugin/src/it/generate-catalog-main/verify.groovy
@@ -14,11 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-def runtimeVersion = '1.1.0-SNAPSHOT'
+def runtimeVersion = '1.1.1-SNAPSHOT'
def source = new File(basedir, "catalog.yaml")
def catalog = new org.yaml.snakeyaml.Yaml().load(new FileInputStream(source))
assert catalog.spec.runtime.version == runtimeVersion
assert catalog.spec.runtime.applicationClass == 'org.apache.camel.k.main.Application'
-assert catalog.metadata.labels['camel.apache.org/runtime.version'] == runtimeVersion
\ No newline at end of file
+
+assert catalog.spec.runtime.capabilities['health'].dependencies[0].groupId == 'org.apache.camel.k'
+assert catalog.spec.runtime.capabilities['health'].dependencies[0].artifactId == 'camel-k-runtime-health'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[0].groupId == 'org.apache.camel'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[0].artifactId == 'camel-rest'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[1].groupId == 'org.apache.camel'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[1].artifactId == 'camel-undertow'
+
+assert catalog.metadata.labels['camel.apache.org/runtime.version'] == runtimeVersion
diff --git a/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/pom.xml b/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/pom.xml
index 39b467f..5a2a129 100644
--- a/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/pom.xml
+++ b/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/pom.xml
@@ -32,7 +32,7 @@
<catalog.runtime>quarkus</catalog.runtime>
<catalog.file>catalog.yaml</catalog.file>
- <runtime.version>1.1.0-SNAPSHOT</runtime.version>
+ <runtime.version>1.1.1-SNAPSHOT</runtime.version>
</properties>
<build>
diff --git a/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/verify.groovy b/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/verify.groovy
index 4ca1d1b..5e10855 100644
--- a/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/verify.groovy
+++ b/tooling/camel-k-maven-plugin/src/it/generate-catalog-quarkus/verify.groovy
@@ -14,11 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-def runtimeVersion = '1.1.0-SNAPSHOT'
+def runtimeVersion = '1.1.1-SNAPSHOT'
def source = new File(basedir, "catalog.yaml")
def catalog = new org.yaml.snakeyaml.Yaml().load(new FileInputStream(source))
assert catalog.spec.runtime.version == runtimeVersion
assert catalog.spec.runtime.applicationClass == 'io.quarkus.runner.GeneratedMain'
+
+assert catalog.spec.runtime.capabilities['health'].dependencies[0].groupId == 'org.apache.camel.quarkus'
+assert catalog.spec.runtime.capabilities['health'].dependencies[0].artifactId == 'camel-quarkus-microprofile-health'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[0].groupId == 'org.apache.camel.quarkus'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[0].artifactId == 'camel-quarkus-rest'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[1].groupId == 'org.apache.camel.quarkus'
+assert catalog.spec.runtime.capabilities['rest'].dependencies[1].artifactId == 'camel-quarkus-platform-http'
+
assert catalog.metadata.labels['camel.apache.org/runtime.version'] == runtimeVersion
\ No newline at end of file
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
index cd62f2e..9a37a02 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
@@ -38,6 +38,7 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.catalog.DefaultRuntimeProvider;
import org.apache.camel.catalog.quarkus.QuarkusRuntimeProvider;
import org.apache.camel.impl.engine.AbstractCamelContext;
+import org.apache.camel.k.tooling.maven.model.CamelCapability;
import org.apache.camel.k.tooling.maven.model.CatalogProcessor;
import org.apache.camel.k.tooling.maven.model.crd.CamelCatalog;
import org.apache.camel.k.tooling.maven.model.crd.CamelCatalogSpec;
@@ -85,7 +86,6 @@ public class GenerateCatalogMojo extends AbstractMojo {
if (Files.notExists(output.getParent())) {
Files.createDirectories(output.getParent());
}
-
if (Files.exists(output)) {
Files.delete(output);
}
@@ -123,11 +123,29 @@ public class GenerateCatalogMojo extends AbstractMojo {
catalog.setRuntimeProvider(new DefaultRuntimeProvider());
runtimeSpec.applicationClass("org.apache.camel.k.main.Application");
runtimeSpec.addDependency("org.apache.camel.k", "camel-k-runtime-main");
+ runtimeSpec.putCapability(
+ "health",
+ CamelCapability.forArtifact("org.apache.camel.k", "camel-k-runtime-health"));
+ runtimeSpec.putCapability(
+ "rest",
+ new CamelCapability.Builder()
+ .addDependency("org.apache.camel", "camel-rest")
+ .addDependency("org.apache.camel", "camel-undertow")
+ .build());
break;
case "quarkus":
catalog.setRuntimeProvider(new QuarkusRuntimeProvider());
runtimeSpec.applicationClass("io.quarkus.runner.GeneratedMain");
runtimeSpec.addDependency("org.apache.camel.k", "camel-k-runtime-quarkus");
+ runtimeSpec.putCapability(
+ "health",
+ CamelCapability.forArtifact("org.apache.camel.quarkus", "camel-quarkus-microprofile-health"));
+ runtimeSpec.putCapability(
+ "rest",
+ new CamelCapability.Builder()
+ .addDependency("org.apache.camel.quarkus", "camel-quarkus-rest")
+ .addDependency("org.apache.camel.quarkus", "camel-quarkus-platform-http")
+ .build());
break;
default:
throw new IllegalArgumentException("catalog.runtime parameter value [" + runtime + "] is not supported!");
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/CamelCapability.java
similarity index 74%
copy from tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java
copy to tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/CamelCapability.java
index ee1b3f7..3c44274 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/CamelCapability.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.k.tooling.maven.model.crd;
+package org.apache.camel.k.tooling.maven.model;
import java.util.Collections;
import java.util.Map;
@@ -22,29 +22,30 @@ import java.util.Set;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import org.apache.camel.k.tooling.maven.model.MavenArtifact;
import org.immutables.value.Value;
@Value.Immutable
@Value.Style(depluralize = true)
-@JsonDeserialize(builder = RuntimeSpec.Builder.class)
-@JsonPropertyOrder({ "version", "runtimeVersion", "artifacts" })
-public interface RuntimeSpec {
- String getVersion();
- String getProvider();
- String getApplicationClass();
+@JsonDeserialize(builder = CamelCapability.Builder.class)
+@JsonPropertyOrder({"groupId", "artifactId", "version"})
+public interface CamelCapability {
+ @Value.Auxiliary
+ @Value.Default
+ default Set<Artifact> getDependencies() {
+ return Collections.emptySet();
+ }
+ @Value.Auxiliary
@Value.Default
default Map<String, String> getMetadata() {
return Collections.emptyMap();
}
- @Value.Default
- default Set<MavenArtifact> getDependencies() {
- return Collections.emptySet();
+ static CamelCapability forArtifact(String groupId, String artifactId) {
+ return new Builder().addDependency(groupId, artifactId).build();
}
- class Builder extends ImmutableRuntimeSpec.Builder {
+ class Builder extends ImmutableCamelCapability.Builder {
public Builder addDependency(String groupId, String artifactId) {
addDependencies(MavenArtifact.from(groupId, artifactId));
return this;
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java
index ee1b3f7..06f5986 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/model/crd/RuntimeSpec.java
@@ -22,6 +22,7 @@ import java.util.Set;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import org.apache.camel.k.tooling.maven.model.CamelCapability;
import org.apache.camel.k.tooling.maven.model.MavenArtifact;
import org.immutables.value.Value;
@@ -44,6 +45,11 @@ public interface RuntimeSpec {
return Collections.emptySet();
}
+ @Value.Default
+ default Map<String, CamelCapability> getCapabilities() {
+ return Collections.emptyMap();
+ }
+
class Builder extends ImmutableRuntimeSpec.Builder {
public Builder addDependency(String groupId, String artifactId) {
addDependencies(MavenArtifact.from(groupId, artifactId));
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
index 0fe6453..3b183b8 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
@@ -132,7 +132,7 @@ public class CatalogProcessor3x implements CatalogProcessor {
specBuilder.putArtifact(
new CamelArtifact.Builder()
.groupId("org.apache.camel.k")
- .artifactId("camel-k-runtime-servlet")
+ .artifactId("camel-k-runtime-inspector")
.build()
);
specBuilder.putArtifact(
diff --git a/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3Test.java b/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3Test.java
index 18e9388..82e99a5 100644
--- a/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3Test.java
+++ b/tooling/camel-k-maven-plugin/src/test/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3Test.java
@@ -82,7 +82,7 @@ public class CatalogProcessor3Test extends AbstractCatalogProcessorTest {
Map<String, CamelArtifact> artifactMap = spec.getArtifacts();
assertThat(artifactMap).containsKeys("camel-k-runtime-health");
- assertThat(artifactMap).containsKeys("camel-k-runtime-servlet");
+ assertThat(artifactMap).containsKeys("camel-k-runtime-inspector");
assertThat(artifactMap).containsKeys("camel-k-runtime-webhook");
assertThat(artifactMap.get("camel-k-runtime-knative")).satisfies(a -> {