diff --git a/pom.xml b/pom.xml
index b0c66d9..b30be1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,9 @@
oauth2-ribbon
ribbon-default-config
ribbon-eureka
+ sleuth
turbine
+ zipkin
zuul
zuul-config-discovery
zuul-proxy
diff --git a/sleuth/README.md b/sleuth/README.md
new file mode 100755
index 0000000..7c781b8
--- /dev/null
+++ b/sleuth/README.md
@@ -0,0 +1 @@
+Test with zuul server only. No proxy and no eureka.
diff --git a/sleuth/pom.xml b/sleuth/pom.xml
new file mode 100644
index 0000000..490e3c5
--- /dev/null
+++ b/sleuth/pom.xml
@@ -0,0 +1,128 @@
+
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-sample-sleuth
+ Brixton.BUILD-SNAPSHOT
+ jar
+
+ spring-cloud-sample-sleuth
+ Demo project for Spring Cloud
+
+
+ org.springframework.cloud
+ spring-cloud-starter-parent
+ Brixton.BUILD-SNAPSHOT
+
+
+
+
+ UTF-8
+ demo.DemoApplication
+ 1.7
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-parent
+ Brixton.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zipkin
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ http://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ http://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ http://repo.spring.io/release
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ http://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ http://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ http://repo.spring.io/release
+
+ false
+
+
+
+
+
diff --git a/sleuth/src/main/java/demo/TraceApplication.java b/sleuth/src/main/java/demo/TraceApplication.java
new file mode 100644
index 0000000..ade624f
--- /dev/null
+++ b/sleuth/src/main/java/demo/TraceApplication.java
@@ -0,0 +1,19 @@
+package demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.sleuth.sampler.AlwaysSampler;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+public class TraceApplication {
+
+ @Bean
+ public AlwaysSampler alwaysSampler() {
+ return new AlwaysSampler();
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(TraceApplication.class, args);
+ }
+}
diff --git a/sleuth/src/main/resources/application.yml b/sleuth/src/main/resources/application.yml
new file mode 100644
index 0000000..1647069
--- /dev/null
+++ b/sleuth/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+spring:
+ application:
+ name: sleuthSample
+ sleuth:
+ log:
+ json:
+ enabled: true
+
+logging:
+ pattern:
+ console: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([trace=%X{X-Trace-Id:-},span=%X{X-Span-Id:-}]){yellow} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex'
diff --git a/sleuth/src/test/java/demo/TraceApplicationTests.java b/sleuth/src/test/java/demo/TraceApplicationTests.java
new file mode 100644
index 0000000..73d44e4
--- /dev/null
+++ b/sleuth/src/test/java/demo/TraceApplicationTests.java
@@ -0,0 +1,32 @@
+package demo;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.cloud.sleuth.Trace;
+import org.springframework.cloud.sleuth.trace.DefaultTrace;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringApplicationConfiguration(classes = TraceApplication.class)
+@WebAppConfiguration
+@DirtiesContext
+public class TraceApplicationTests {
+
+ @Autowired
+ Trace trace;
+
+ @Test
+ public void contextLoads() {
+ }
+
+ @Test
+ public void traceIsDefaultTrace() {
+ assertTrue("trace is wrong type", this.trace instanceof DefaultTrace);
+ }
+}
diff --git a/zipkin/README.md b/zipkin/README.md
new file mode 100755
index 0000000..7c781b8
--- /dev/null
+++ b/zipkin/README.md
@@ -0,0 +1 @@
+Test with zuul server only. No proxy and no eureka.
diff --git a/zipkin/pom.xml b/zipkin/pom.xml
new file mode 100644
index 0000000..16f8ec3
--- /dev/null
+++ b/zipkin/pom.xml
@@ -0,0 +1,128 @@
+
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-sample-zipkin
+ Brixton.BUILD-SNAPSHOT
+ jar
+
+ spring-cloud-sample-zipkin
+ Demo project for Spring Cloud
+
+
+ org.springframework.cloud
+ spring-cloud-starter-parent
+ Brixton.BUILD-SNAPSHOT
+
+
+
+
+ UTF-8
+ demo.DemoApplication
+ 1.7
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-parent
+ Brixton.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zipkin
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ http://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ http://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ http://repo.spring.io/release
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ http://repo.spring.io/libs-snapshot-local
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ http://repo.spring.io/libs-milestone-local
+
+ false
+
+
+
+ spring-releases
+ Spring Releases
+ http://repo.spring.io/release
+
+ false
+
+
+
+
+
diff --git a/zipkin/src/main/java/demo/ZipkinApplication.java b/zipkin/src/main/java/demo/ZipkinApplication.java
new file mode 100644
index 0000000..ce8039f
--- /dev/null
+++ b/zipkin/src/main/java/demo/ZipkinApplication.java
@@ -0,0 +1,30 @@
+package demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.sleuth.sampler.AlwaysSampler;
+import org.springframework.context.annotation.Bean;
+
+import com.github.kristofa.brave.LoggingSpanCollectorImpl;
+import com.github.kristofa.brave.SpanCollector;
+
+@SpringBootApplication
+public class ZipkinApplication {
+
+ @Bean
+ public AlwaysSampler alwaysSampler() {
+ return new AlwaysSampler();
+ }
+
+ // Use this for debugging (or if there is no Zipkin collector running on port 9410)
+ @Bean
+ @ConditionalOnProperty(value="sample.zipkin.enabled", havingValue="false")
+ public SpanCollector spanCollector() {
+ return new LoggingSpanCollectorImpl();
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(ZipkinApplication.class, args);
+ }
+}
diff --git a/zipkin/src/main/resources/application.yml b/zipkin/src/main/resources/application.yml
new file mode 100644
index 0000000..1647069
--- /dev/null
+++ b/zipkin/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+spring:
+ application:
+ name: sleuthSample
+ sleuth:
+ log:
+ json:
+ enabled: true
+
+logging:
+ pattern:
+ console: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([trace=%X{X-Trace-Id:-},span=%X{X-Span-Id:-}]){yellow} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex'
diff --git a/zipkin/src/test/java/demo/ZipkinApplicationTests.java b/zipkin/src/test/java/demo/ZipkinApplicationTests.java
new file mode 100644
index 0000000..720edf3
--- /dev/null
+++ b/zipkin/src/test/java/demo/ZipkinApplicationTests.java
@@ -0,0 +1,31 @@
+package demo;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.cloud.sleuth.zipkin.ZipkinSpanListener;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringApplicationConfiguration(classes = ZipkinApplication.class)
+@WebAppConfiguration
+@DirtiesContext
+public class ZipkinApplicationTests {
+
+ @Autowired
+ ZipkinSpanListener listener;
+
+ @Test
+ public void contextLoads() {
+ }
+
+ @Test
+ public void listenerIsInjected() {
+ assertTrue("listener is wrong type", this.listener instanceof ZipkinSpanListener);
+ }
+}