From 5c2e95b8bdf764d28413b12524c95100b355520d Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 23 Nov 2016 21:05:50 -0700 Subject: [PATCH] initial gateway actuator endpoint --- pom.xml | 1 + .../gateway/actuate/GatewayEndpoint.java | 38 +++++++++++++++++++ .../config/GatewayAutoConfiguration.java | 15 ++++++++ src/test/resources/application.yml | 10 +++-- 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java diff --git a/pom.xml b/pom.xml index 64677e0f..f1a76d1d 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,7 @@ org.springframework.boot spring-boot-starter-actuator + true org.springframework.boot.experimental diff --git a/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java b/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java new file mode 100644 index 00000000..9cce4330 --- /dev/null +++ b/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java @@ -0,0 +1,38 @@ +package org.springframework.cloud.gateway.actuate; + +import org.springframework.boot.actuate.endpoint.AbstractEndpoint; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Spencer Gibb + */ +@ConfigurationProperties(prefix = "endpoints.gateway") +public class GatewayEndpoint extends AbstractEndpoint> { + private List filters; + + public GatewayEndpoint(List filters) { + super("gateway"); + this.filters = filters; + AnnotationAwareOrderComparator.sort(this.filters); + } + + @Override + public Map invoke() { + HashMap map = new HashMap<>(); + + ArrayList filterNames = new ArrayList<>(); + for (GatewayFilter filter : this.filters) { + filterNames.add(filter.getClass().getName()); + } + map.put("filters", filterNames); + + return map; + } +} diff --git a/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 77a2a0fd..757520d6 100644 --- a/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -1,7 +1,10 @@ package org.springframework.cloud.gateway.config; +import org.springframework.boot.actuate.endpoint.Endpoint; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.gateway.actuate.GatewayEndpoint; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.RouteToUrlFilter; import org.springframework.cloud.gateway.handler.GatewayFilteringWebHandler; @@ -13,6 +16,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.web.client.reactive.WebClient; +import java.util.List; + /** * @author Spencer Gibb */ @@ -56,4 +61,14 @@ public class GatewayAutoConfiguration { return new GatewayHostHandlerMapping(properties, webHandler); } + @Configuration + @ConditionalOnClass(Endpoint.class) + protected static class GatewayActuatorConfiguration { + + @Bean + public GatewayEndpoint gatewayEndpoint(List filters) { + return new GatewayEndpoint(filters); + } + } + } diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 75492dec..15207acf 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -6,12 +6,16 @@ spring: cloud: gateway: routes: - test1: - requestPath: /** - downstreamUrl: http://httpbin.org:80 +# test1: +# requestPath: /** +# downstreamUrl: http://httpbin.org:80 test2: requestHost: '**.example.org' downstreamUrl: http://httpbin.org:80 logging: level: org.springframework.cloud.gateway: TRACE + +management: + context-path: /admin +# port: 8081