7 changed files with 152 additions and 170 deletions
@ -1,103 +0,0 @@
@@ -1,103 +0,0 @@
|
||||
/* |
||||
* Copyright 2013-2015 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.cloud.netflix.endpoint; |
||||
|
||||
import javax.servlet.Servlet; |
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
import org.springframework.beans.BeansException; |
||||
import org.springframework.beans.factory.InitializingBean; |
||||
// import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
// import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
|
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.context.ApplicationContextAware; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.context.ServletContextAware; |
||||
import org.springframework.web.servlet.ModelAndView; |
||||
import org.springframework.web.servlet.mvc.ServletWrappingController; |
||||
|
||||
//FIXME 2.0.x
|
||||
public abstract class ServletWrappingEndpoint implements InitializingBean, |
||||
ApplicationContextAware, ServletContextAware/*, MvcEndpoint*/ { |
||||
|
||||
// TODO: move to spring-boot?
|
||||
|
||||
private String path; |
||||
|
||||
private boolean sensitive; |
||||
|
||||
private boolean enabled = true; |
||||
|
||||
private final ServletWrappingController controller = new ServletWrappingController(); |
||||
|
||||
@Override |
||||
public void afterPropertiesSet() throws Exception { |
||||
this.controller.afterPropertiesSet(); |
||||
} |
||||
|
||||
@Override |
||||
public void setServletContext(ServletContext servletContext) { |
||||
this.controller.setServletContext(servletContext); |
||||
} |
||||
|
||||
@Override |
||||
public void setApplicationContext(ApplicationContext applicationContext) |
||||
throws BeansException { |
||||
this.controller.setApplicationContext(applicationContext); |
||||
} |
||||
|
||||
protected ServletWrappingEndpoint(Class<? extends Servlet> servletClass, |
||||
String servletName, String path, boolean sensitive, boolean enabled) { |
||||
this.controller.setServletClass(servletClass); |
||||
this.controller.setServletName(servletName); |
||||
this.path = path; |
||||
this.sensitive = sensitive; |
||||
this.enabled = enabled; |
||||
} |
||||
|
||||
@RequestMapping("**") |
||||
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response) |
||||
throws Exception { |
||||
return this.controller.handleRequest(request, response); |
||||
} |
||||
|
||||
public boolean isEnabled() { |
||||
return this.enabled; |
||||
} |
||||
|
||||
public ServletWrappingController getController() { |
||||
return this.controller; |
||||
} |
||||
|
||||
/*@Override |
||||
public String getPath() { |
||||
return this.path; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isSensitive() { |
||||
return this.sensitive; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends Endpoint<?>> getEndpointType() { |
||||
return null; |
||||
}*/ |
||||
|
||||
} |
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
/* |
||||
* Copyright 2013-2017 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.cloud.netflix.hystrix; |
||||
|
||||
import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect; |
||||
import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.web.servlet.ManagementServletContext; |
||||
import org.springframework.boot.actuate.health.Health; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
||||
import org.springframework.boot.web.servlet.ServletRegistrationBean; |
||||
import org.springframework.cloud.client.actuator.HasFeatures; |
||||
import org.springframework.context.annotation.Bean; |
||||
|
||||
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet; |
||||
|
||||
/** |
||||
* See original {@link org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration} |
||||
*/ |
||||
@ManagementContextConfiguration |
||||
@ConditionalOnProperty(value = "management.hystrix.enabled", matchIfMissing = true) |
||||
@ConditionalOnWebApplication |
||||
@ConditionalOnBean(HystrixCommandAspect.class) // only install the stream if enabled
|
||||
@ConditionalOnClass({ Health.class, HystrixMetricsStreamServlet.class }) |
||||
@EnableConfigurationProperties(HystrixProperties.class) |
||||
class HystrixManagementContextConfiguration { |
||||
|
||||
private final ManagementServletContext managementServletContext; |
||||
|
||||
private final HystrixProperties properties; |
||||
|
||||
public HystrixManagementContextConfiguration( |
||||
ManagementServletContext managementServletContext, |
||||
HystrixProperties properties) { |
||||
this.managementServletContext = managementServletContext; |
||||
this.properties = properties; |
||||
} |
||||
|
||||
@Bean |
||||
public ServletRegistrationBean<HystrixMetricsStreamServlet> jolokiaServlet() { |
||||
String path = this.managementServletContext.getContextPath() |
||||
+ this.properties.getPath(); |
||||
String urlMapping = (path.endsWith("/") ? path + "*" : path + "/*"); |
||||
ServletRegistrationBean<HystrixMetricsStreamServlet> registration = new ServletRegistrationBean<>( |
||||
new HystrixMetricsStreamServlet(), urlMapping); |
||||
registration.setInitParameters(this.properties.getConfig()); |
||||
return registration; |
||||
} |
||||
|
||||
@Bean |
||||
public HasFeatures hystrixStreamFeature() { |
||||
return HasFeatures.namedFeature("Hystrix Stream Servlet", HystrixMetricsStreamServlet.class); |
||||
} |
||||
} |
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
/* |
||||
* Copyright 2013-2017 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.cloud.netflix.hystrix; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties; |
||||
|
||||
/** |
||||
* Configuration properties for Hystrix Servlet. |
||||
* |
||||
* @author Spencer Gibb |
||||
* @since 2.0.0 |
||||
*/ |
||||
@ConfigurationProperties(prefix = "management.hystrix") |
||||
public class HystrixProperties { |
||||
|
||||
/** |
||||
* Enable Hystrix Stream. |
||||
*/ |
||||
private boolean enabled; |
||||
|
||||
/** |
||||
* Path at which Hystrix Stream will be available. |
||||
*/ |
||||
private String path = "/hystrix.stream"; |
||||
|
||||
/** |
||||
* Hystrix settings. These are traditionally set using servlet parameters. Refer to |
||||
* the documentation of Hystrix for more details. |
||||
*/ |
||||
private final Map<String, String> config = new HashMap<>(); |
||||
|
||||
public boolean isEnabled() { |
||||
return this.enabled; |
||||
} |
||||
|
||||
public void setEnabled(boolean enabled) { |
||||
this.enabled = enabled; |
||||
} |
||||
|
||||
public String getPath() { |
||||
return this.path; |
||||
} |
||||
|
||||
public void setPath(String path) { |
||||
this.path = path; |
||||
} |
||||
|
||||
public Map<String, String> getConfig() { |
||||
return this.config; |
||||
} |
||||
|
||||
} |
||||
|
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
/* |
||||
* Copyright 2013-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.cloud.netflix.hystrix; |
||||
|
||||
import org.springframework.cloud.netflix.endpoint.ServletWrappingEndpoint; |
||||
|
||||
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet; |
||||
|
||||
/** |
||||
* @author Spencer Gibb |
||||
*/ |
||||
public class HystrixStreamEndpoint extends ServletWrappingEndpoint { |
||||
|
||||
public HystrixStreamEndpoint() { |
||||
super(HystrixMetricsStreamServlet.class, "hystrixStream", "/hystrix.stream", |
||||
false, true); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue