@ -18,28 +18,38 @@
package org.springframework.cloud.netflix.zuul ;
package org.springframework.cloud.netflix.zuul ;
import org.springframework.boot.actuate.endpoint.mvc.ActuatorMediaTypes ;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter ;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter ;
import org.springframework.cloud.netflix.zuul.filters.Route ;
import org.springframework.cloud.netflix.zuul.filters.RouteLocator ;
import org.springframework.cloud.netflix.zuul.filters.RouteLocator ;
import org.springframework.context.ApplicationEventPublisher ;
import org.springframework.context.ApplicationEventPublisher ;
import org.springframework.context.ApplicationEventPublisherAware ;
import org.springframework.context.ApplicationEventPublisherAware ;
import org.springframework.http.MediaType ;
import org.springframework.jmx.export.annotation.ManagedOperation ;
import org.springframework.jmx.export.annotation.ManagedOperation ;
import org.springframework.jmx.export.annotation.ManagedResource ;
import org.springframework.jmx.export.annotation.ManagedResource ;
import org.springframework.web.bind.annotation.GetMapping ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestMethod ;
import org.springframework.web.bind.annotation.RequestMethod ;
import org.springframework.web.bind.annotation.RequestParam ;
import org.springframework.web.bind.annotation.ResponseBody ;
import org.springframework.web.bind.annotation.ResponseBody ;
/ * *
/ * *
* Endpoint used to reset the reverse proxy routes
* Endpoint used to reset the reverse proxy routes
* @author Ryan Baxter
* @author Ryan Baxter
* @author Gregor Zurowski
* /
* /
@ManagedResource ( description = "Can be used to reset the reverse proxy routes" )
@ManagedResource ( description = "Can be used to reset the reverse proxy routes" )
public class RoutesMvcEndpoint extends EndpointMvcAdapter implements ApplicationEventPublisherAware {
public class RoutesMvcEndpoint extends EndpointMvcAdapter implements ApplicationEventPublisherAware {
static final String FORMAT_DETAILS = "details" ;
private final RoutesEndpoint endpoint ;
private RouteLocator routes ;
private RouteLocator routes ;
private ApplicationEventPublisher publisher ;
private ApplicationEventPublisher publisher ;
public RoutesMvcEndpoint ( RoutesEndpoint endpoint , RouteLocator routes ) {
public RoutesMvcEndpoint ( RoutesEndpoint endpoint , RouteLocator routes ) {
super ( endpoint ) ;
super ( endpoint ) ;
this . endpoint = endpoint ;
this . routes = routes ;
this . routes = routes ;
}
}
@ -55,4 +65,18 @@ public class RoutesMvcEndpoint extends EndpointMvcAdapter implements Application
this . publisher . publishEvent ( new RoutesRefreshedEvent ( this . routes ) ) ;
this . publisher . publishEvent ( new RoutesRefreshedEvent ( this . routes ) ) ;
return super . invoke ( ) ;
return super . invoke ( ) ;
}
}
}
/ * *
* Expose Zuul { @link Route } information with details .
* /
@GetMapping ( params = "format" , produces = { ActuatorMediaTypes . APPLICATION_ACTUATOR_V1_JSON_VALUE ,
MediaType . APPLICATION_JSON_VALUE } )
@ResponseBody
public Object invokeRouteDetails ( @RequestParam String format ) {
if ( FORMAT_DETAILS . equalsIgnoreCase ( format ) ) {
return endpoint . invokeRouteDetails ( ) ;
} else {
return super . invoke ( ) ;
}
}
}