diff --git a/pom.xml b/pom.xml index 92e0dc7a..2aa8a346 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ spring-cloud-consul-config spring-cloud-consul-discovery spring-cloud-consul-bus + spring-cloud-consul-ui spring-cloud-consul-sample spring-cloud-consul-tests docs @@ -93,6 +94,11 @@ spring-cloud-consul-discovery 1.0.0.BUILD-SNAPSHOT + + org.springframework.cloud + spring-cloud-consul-ui + 1.0.0.BUILD-SNAPSHOT + org.springframework.cloud spring-cloud-commons @@ -161,21 +167,6 @@ spring-cloud-starter-zuul ${spring-cloud-netflix.version} - - org.springframework.cloud - spring-cloud-netflix-sidecar - ${spring-cloud-netflix.version} - - - com.netflix.eureka - eureka-client - - - com.netflix.ribbon - ribbon-eureka - - - org.springframework.cloud spring-cloud-netflix-core diff --git a/spring-cloud-consul-sample/pom.xml b/spring-cloud-consul-sample/pom.xml index 3572d2c1..23c73822 100644 --- a/spring-cloud-consul-sample/pom.xml +++ b/spring-cloud-consul-sample/pom.xml @@ -57,6 +57,10 @@ org.springframework.cloud spring-cloud-consul-bus + + org.springframework.cloud + spring-cloud-consul-ui + org.projectlombok lombok diff --git a/spring-cloud-consul-sample/src/main/java/org/springframework/cloud/consul/sample/SampleApplication.java b/spring-cloud-consul-sample/src/main/java/org/springframework/cloud/consul/sample/SampleApplication.java index f0eb43ac..ae170fd8 100644 --- a/spring-cloud-consul-sample/src/main/java/org/springframework/cloud/consul/sample/SampleApplication.java +++ b/spring-cloud-consul-sample/src/main/java/org/springframework/cloud/consul/sample/SampleApplication.java @@ -28,6 +28,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.consul.bus.SimpleRemoteEvent; +import org.springframework.cloud.ui.EnableConsulUi; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,6 +43,7 @@ import org.springframework.web.bind.annotation.RestController; @Configuration @EnableAutoConfiguration @EnableDiscoveryClient +@EnableConsulUi @RestController @Slf4j public class SampleApplication implements ApplicationListener { diff --git a/spring-cloud-consul-ui/pom.xml b/spring-cloud-consul-ui/pom.xml new file mode 100644 index 00000000..1a2a0114 --- /dev/null +++ b/spring-cloud-consul-ui/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + spring-cloud-consul-ui + jar + Spring Cloud Consul UI + Spring Cloud Consul UI + + + org.springframework.cloud + spring-cloud-consul + 1.0.0.BUILD-SNAPSHOT + .. + + + + + org.springframework.cloud + spring-cloud-consul-core + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-zuul + + + org.projectlombok + lombok + + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + + + diff --git a/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiConfiguration.java b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiConfiguration.java new file mode 100644 index 00000000..df0a6787 --- /dev/null +++ b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiConfiguration.java @@ -0,0 +1,58 @@ +/* + * 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.ui; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.consul.ConsulProperties; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; +import org.springframework.cloud.netflix.zuul.filters.ZuulProperties; +import org.springframework.cloud.netflix.zuul.web.ZuulHandlerMapping; +import org.springframework.context.annotation.Bean; + +/** + * @author Spencer Gibb + */ +@EnableZuulProxy +public class ConsulUiConfiguration { + + @Autowired + private ZuulProperties zuulProperties; + + @Autowired + private ConsulProperties consulProperties; + + @Autowired + private ZuulHandlerMapping zuulHandlerMapping; + + @PostConstruct + public void init() { + String url = String.format("http://%s:%s", consulProperties.getHost(), + consulProperties.getPort()); + ZuulProperties.ZuulRoute route = new ZuulProperties.ZuulRoute("consulUi", + "/v1/**", null, url, false, false); + zuulProperties.getRoutes().put("consulUi", route); + + zuulHandlerMapping.registerHandlers(); + } + + @Bean + public ConsulUiController consulUiController() { + return new ConsulUiController(); + } +} diff --git a/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiController.java b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiController.java new file mode 100644 index 00000000..de559934 --- /dev/null +++ b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/ConsulUiController.java @@ -0,0 +1,34 @@ +/* + * 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.ui; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * @author Spencer Gibb + */ +@Controller +@RequestMapping("${spring.cloud.consul.ui.path:/ui}") +public class ConsulUiController { + + @RequestMapping(method = RequestMethod.GET) + public String index() { + return "forward:index.html"; + } +} diff --git a/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/EnableConsulUI.java b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/EnableConsulUI.java new file mode 100644 index 00000000..5204278d --- /dev/null +++ b/spring-cloud-consul-ui/src/main/java/org/springframework/cloud/ui/EnableConsulUI.java @@ -0,0 +1,40 @@ +/* + * 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.ui; + +import org.springframework.cloud.netflix.zuul.EnableZuulServer; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Spencer Gibb + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import(ConsulUiConfiguration.class) +@EnableZuulServer +public @interface EnableConsulUi { + +} diff --git a/consul_ui/index.html b/spring-cloud-consul-ui/src/main/resources/public/index.html similarity index 100% rename from consul_ui/index.html rename to spring-cloud-consul-ui/src/main/resources/public/index.html diff --git a/consul_ui/static/application.min.js b/spring-cloud-consul-ui/src/main/resources/public/static/application.min.js similarity index 100% rename from consul_ui/static/application.min.js rename to spring-cloud-consul-ui/src/main/resources/public/static/application.min.js diff --git a/consul_ui/static/base.css b/spring-cloud-consul-ui/src/main/resources/public/static/base.css similarity index 100% rename from consul_ui/static/base.css rename to spring-cloud-consul-ui/src/main/resources/public/static/base.css diff --git a/consul_ui/static/base.css.map b/spring-cloud-consul-ui/src/main/resources/public/static/base.css.map similarity index 100% rename from consul_ui/static/base.css.map rename to spring-cloud-consul-ui/src/main/resources/public/static/base.css.map diff --git a/consul_ui/static/bootstrap.min.css b/spring-cloud-consul-ui/src/main/resources/public/static/bootstrap.min.css similarity index 100% rename from consul_ui/static/bootstrap.min.css rename to spring-cloud-consul-ui/src/main/resources/public/static/bootstrap.min.css diff --git a/consul_ui/static/consul-logo.png b/spring-cloud-consul-ui/src/main/resources/public/static/consul-logo.png similarity index 100% rename from consul_ui/static/consul-logo.png rename to spring-cloud-consul-ui/src/main/resources/public/static/consul-logo.png diff --git a/consul_ui/static/favicon.png b/spring-cloud-consul-ui/src/main/resources/public/static/favicon.png similarity index 100% rename from consul_ui/static/favicon.png rename to spring-cloud-consul-ui/src/main/resources/public/static/favicon.png diff --git a/consul_ui/static/loading-cylon-purple.svg b/spring-cloud-consul-ui/src/main/resources/public/static/loading-cylon-purple.svg similarity index 100% rename from consul_ui/static/loading-cylon-purple.svg rename to spring-cloud-consul-ui/src/main/resources/public/static/loading-cylon-purple.svg diff --git a/src/main/bash/local_run_consul.sh b/src/main/bash/local_run_consul.sh index f3aac7f6..af5b5936 100755 --- a/src/main/bash/local_run_consul.sh +++ b/src/main/bash/local_run_consul.sh @@ -1,2 +1,2 @@ #!/bin/bash -consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -ui-dir `dirname $0`/../../../consul_ui +consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -ui-dir `dirname $0`/../../../spring-cloud-consul-ui/src/main/resources/public