You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2017/07/06 12:15:23 UTC

camel git commit: CAMEL-11518: Add an Mvc Actuator endpoint for exposing Camel routes

Repository: camel
Updated Branches:
  refs/heads/master 380705097 -> 1724bf278


CAMEL-11518: Add an Mvc Actuator endpoint for exposing Camel routes


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1724bf27
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1724bf27
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1724bf27

Branch: refs/heads/master
Commit: 1724bf27863dc60961bdd4764870010d072381d1
Parents: 3807050
Author: lburgazzoli <lb...@gmail.com>
Authored: Thu Jul 6 14:14:52 2017 +0200
Committer: lburgazzoli <lb...@gmail.com>
Committed: Thu Jul 6 14:14:52 2017 +0200

----------------------------------------------------------------------
 .../endpoint/CamelMvcRoutesEndpoint.java        | 69 ++++++++++++++++++++
 .../actuate/endpoint/CamelRoutesEndpoint.java   | 20 ++++--
 .../CamelRoutesEndpointAutoConfiguration.java   | 20 +++---
 .../endpoint/CamelMvcRoutesEndpointTest.java    | 67 +++++++++++++++++++
 .../endpoint/CamelRoutesEndpointTest.java       |  2 +
 5 files changed, 164 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1724bf27/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpoint.java
new file mode 100644
index 0000000..1886f07
--- /dev/null
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpoint.java
@@ -0,0 +1,69 @@
+/**
+ * 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.spring.boot.actuate.endpoint;
+
+import org.springframework.boot.actuate.endpoint.mvc.ActuatorMediaTypes;
+import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * Adapter to expose {@link CamelRoutesEndpoint} as an {@link MvcEndpoint}.
+ *
+ * @author Ben Hale
+ * @author Kazuki Shimizu
+ * @author EddĂș MelĂ©ndez
+ * @since 1.5.0
+ */
+@ConfigurationProperties(prefix = "endpoints." + CamelRoutesEndpoint.ENDPOINT_ID)
+public class CamelMvcRoutesEndpoint extends EndpointMvcAdapter {
+    private static final ResponseEntity<?> NOT_FOUND = ResponseEntity.notFound().build();
+    private final CamelRoutesEndpoint delegate;
+
+    public CamelMvcRoutesEndpoint(CamelRoutesEndpoint delegate) {
+        super(delegate);
+
+        this.delegate = delegate;
+    }
+
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/{id}",
+        produces = {
+            ActuatorMediaTypes.APPLICATION_ACTUATOR_V1_JSON_VALUE,
+            MediaType.APPLICATION_JSON_VALUE
+        }
+    )
+    @ResponseBody
+    public Object get(@PathVariable String id) {
+        if (!delegate.isEnabled()) {
+            return getDisabledResponse();
+        }
+
+        Object result = delegate.getRouteInfo(id);
+        if (result == null) {
+            result = NOT_FOUND;
+        }
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/1724bf27/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index a131ed1..f8e31a9 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -21,7 +21,6 @@ import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Route;
 import org.apache.camel.StatefulService;
@@ -47,11 +46,22 @@ public class CamelRoutesEndpoint extends AbstractEndpoint<List<RouteEndpointInfo
 
     @Override
     public List<RouteEndpointInfo> invoke() {
-        // @formatter:off
+        return getRoutesInfo();
+    }
+
+    public List<RouteEndpointInfo> getRoutesInfo() {
         return camelContext.getRoutes().stream()
-                .map(RouteEndpointInfo::new)
-                .collect(Collectors.toList());
-        // @formatter:on
+            .map(RouteEndpointInfo::new)
+            .collect(Collectors.toList());
+    }
+
+    public RouteEndpointInfo getRouteInfo(String id) {
+        Route route = camelContext.getRoute(id);
+        if (route != null) {
+            return new RouteEndpointInfo(route);
+        }
+
+        return null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/1724bf27/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
index 628a705..485c28c 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
@@ -33,15 +33,17 @@ import org.springframework.context.annotation.Configuration;
 @ConditionalOnBean(CamelAutoConfiguration.class)
 @AutoConfigureAfter(CamelAutoConfiguration.class)
 public class CamelRoutesEndpointAutoConfiguration {
+    @Bean
+    @ConditionalOnClass(CamelContext.class)
+    @ConditionalOnMissingBean
+    public CamelRoutesEndpoint camelEndpoint(CamelContext camelContext) {
+        return new CamelRoutesEndpoint(camelContext);
+    }
 
-    @ConditionalOnClass({CamelContext.class})
-    @ConditionalOnMissingBean(CamelRoutesEndpoint.class)
-    protected static class CamelEndpointInitializer {
-
-        @Bean
-        public CamelRoutesEndpoint camelEndpoint(CamelContext camelContext) {
-            return new CamelRoutesEndpoint(camelContext);
-        }
-
+    @Bean
+    @ConditionalOnClass(CamelContext.class)
+    @ConditionalOnMissingBean
+    public CamelMvcRoutesEndpoint camelMvcEndpoint(CamelRoutesEndpoint delegate) {
+        return new CamelMvcRoutesEndpoint(delegate);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/1724bf27/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpointTest.java
new file mode 100644
index 0000000..518b7a2
--- /dev/null
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelMvcRoutesEndpointTest.java
@@ -0,0 +1,67 @@
+/**
+ * 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.spring.boot.actuate.endpoint;
+
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
+ */
+@DirtiesContext
+@RunWith(SpringRunner.class)
+@EnableAutoConfiguration
+@SpringBootApplication
+@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
+public class CamelMvcRoutesEndpointTest extends Assert {
+
+    @Autowired
+    CamelMvcRoutesEndpoint endpoint;
+
+    @Autowired
+    CamelContext camelContext;
+
+    @Test
+    public void testRoutesEndpoint() throws Exception {
+        List<RouteEndpointInfo> routes = (List<RouteEndpointInfo>)endpoint.invoke();
+
+        assertFalse(routes.isEmpty());
+        assertEquals(routes.size(), camelContext.getRoutes().size());
+        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    }
+
+    @Test
+    public void testMvcRoutesEndpoint() throws Exception {
+        Object result = endpoint.get("foo-route");
+
+        assertTrue(result instanceof RouteEndpointInfo);
+        assertEquals("foo-route", ((RouteEndpointInfo)result).getId());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/1724bf27/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
index 45e2ffb..ea6e8cb 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
@@ -28,11 +28,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
  */
+@DirtiesContext
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication