diff --git a/pom.xml b/pom.xml
index 8dbaf7069..b28d7bb4c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -169,6 +169,16 @@
aspectjweaver
${aspectj.version}
+
+ io.zipkin
+ zipkin-java-server
+ ${zipkin-java.version}
+
+
+ io.zipkin
+ zipkin-java-jdbc
+ ${zipkin-java.version}
+
org.spockframework
@@ -186,13 +196,12 @@
cglib
cglib-nodep
3.1
- test
org.objenesis
objenesis
2.1
- test
+
org.hamcrest
@@ -230,6 +239,7 @@
1.1.0.BUILD-SNAPSHOT
1.8.4
1.0-groovy-2.4
+ 0.1.1
diff --git a/spring-cloud-sleuth-samples/pom.xml b/spring-cloud-sleuth-samples/pom.xml
index 3e5520cbb..a0cdb690f 100644
--- a/spring-cloud-sleuth-samples/pom.xml
+++ b/spring-cloud-sleuth-samples/pom.xml
@@ -21,6 +21,7 @@
spring-cloud-sleuth-sample-messaging
spring-cloud-sleuth-sample-ribbon
spring-cloud-sleuth-sample-zipkin
+ spring-cloud-sleuth-sample-zipkin-stream
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile
new file mode 100644
index 000000000..840422f69
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/Dockerfile
@@ -0,0 +1,12 @@
+FROM springio/java8
+RUN chmod 777 -R /tmp
+VOLUME /tmp
+VOLUME /app
+EXPOSE 9411 8000
+RUN groupadd -g 1000 spring
+RUN useradd -u 1000 -g 1000 -ms /bin/bash spring
+VOLUME /home/spring
+ENV HOME /home/spring
+USER spring
+WORKDIR /app/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream
+CMD ["../../mvnw", "spring-boot:run"]
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md
new file mode 100644
index 000000000..d6cbc8074
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/README.md
@@ -0,0 +1,39 @@
+# Running a Zipkin Query Server
+
+There are 4 parts to Zipkin: the instrumented client apps, the web UI, the backend database and the query server. The database for this implementation is MySQL.
+
+## Zipkin Services
+
+Run this app using the docker-compose provided.
+
+```
+$ docker-compose build zipkin
+$ docker-compose up
+...
+```
+
+and test it
+
+```
+$ curl localhost:9411/api/v1/services
+["zipkin-query"]
+```
+
+The app might fail to start if mysql is not available when it needs it. If that happens you can just start it separately: just keep running `docker-compose up` until it works.
+
+
+## Instrumenting Apps
+
+Depend on [Spring Cloud Sleuth Stream](https://github.com/spring-cloud-spring-cloud-sleuth) and the rabbit binder (`spring-cloud-starter-stream-rabbit`).
+
+Once the apps start publishing spans they will appear in the span store as well.
+
+## Running in an IDE
+
+You can run this app in an IDE and still use docker-compose to create the middleware:
+
+```
+$ docker-compose up rabbitmq mysql
+```
+
+The web UI cannot access the docker host though, so you have to run that separately, or just test against the query server directly on port 9411.
diff --git a/spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml
similarity index 53%
rename from spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml
rename to spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml
index b3ae76a1b..a85bc67f5 100644
--- a/spring-cloud-sleuth-zipkin-stream/docker-compose.zipkin.yml
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/docker-compose.yml
@@ -1,5 +1,22 @@
+mysql:
+ image: mysql
+ ports:
+ - 3306:3306
+ environment:
+ - MYSQL_ROOT_PASSWORD=root
+ - MYSQL_DATABASE=test
+rabbitmq:
+ image: rabbitmq:management
+ expose:
+ - 5672
+ ports:
+ - 5672:5672
+ - 15672:15672
zipkin:
- image: springio/spring-cloud-sleuth-zipkin-stream
+ build: .
+ volumes:
+ - ../..:/app
+ - ~:/home/spring
environment:
- MYSQL_HOST=mysql
- RABBIT_HOST=rabbitmq
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml
new file mode 100644
index 000000000..0497b82bd
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/pom.xml
@@ -0,0 +1,89 @@
+
+
+ 4.0.0
+
+ spring-cloud-sleuth-sample-zipkin-stream
+ jar
+
+ spring-cloud-sleuth-sample-zipkin-stream
+ Spring Boot Zipkin Server
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-samples
+ 1.0.0.BUILD-SNAPSHOT
+ ..
+
+
+
+ springio
+ UTF-8
+ 1.8
+ 0.1.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+ org.springframework.cloud
+ spring-cloud-sleuth-zipkin-stream
+
+
+ org.springframework.integration
+ spring-integration-jmx
+
+
+ org.springframework.cloud
+ spring-cloud-stream-binder-rabbit
+
+
+ com.h2database
+ h2
+ true
+
+
+ mysql
+ mysql-connector-java
+ true
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ org.springframework.cloud
+ spring-cloud-stream-binder-local
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ exec
+
+
+
+
+
+
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java
new file mode 100644
index 000000000..0cbf30128
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/java/example/ZipkinStreamServerApplication.java
@@ -0,0 +1,15 @@
+package example;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;
+
+@SpringBootApplication
+@EnableZipkinStreamServer
+public class ZipkinStreamServerApplication {
+
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(ZipkinStreamServerApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/resources/zipkin-server.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/resources/application.yml
similarity index 100%
rename from spring-cloud-sleuth-zipkin-stream/src/main/resources/zipkin-server.yml
rename to spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/main/resources/application.yml
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java
new file mode 100644
index 000000000..9af6cd43e
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/example/ZipkinServerApplicationTests.java
@@ -0,0 +1,31 @@
+package example;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.IntegrationTest;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import example.ZipkinStreamServerApplication;
+import io.zipkin.SpanStore;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringApplicationConfiguration(classes = ZipkinStreamServerApplication.class)
+@IntegrationTest({ "server.port=0", "spring.datasource.initialize=true" })
+@ActiveProfiles("test")
+public class ZipkinServerApplicationTests {
+
+ @Autowired
+ private SpanStore store;
+
+ @Test
+ public void contextLoads() {
+ int count = this.store.getServiceNames().size();
+ assertEquals(0, count);
+ }
+
+}
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql
new file mode 100644
index 000000000..507f4f27f
--- /dev/null
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/resources/drop.sql
@@ -0,0 +1,5 @@
+drop table zipkin_spans;
+drop table zipkin_annotations;
+drop table zipkin_binary_annotations;
+drop table zipkin_dependencies;
+drop table zipkin_dependency_links;
\ No newline at end of file
diff --git a/spring-cloud-sleuth-zipkin-stream/README.md b/spring-cloud-sleuth-zipkin-stream/README.md
index f7cb1929d..3f03dab06 100644
--- a/spring-cloud-sleuth-zipkin-stream/README.md
+++ b/spring-cloud-sleuth-zipkin-stream/README.md
@@ -10,21 +10,27 @@ Depend on [Spring Cloud Sleuth Stream](https://github.com/spring-cloud-spring-cl
## Query Server
-Code is [here](https://github.com/spring-cloud-spring-cloud-sleuth/spring-cloud-sleuth-zipkin-stream).
+Depend on `spring-cloud-sleuth-zipkin-stream` and enable the server:
-Bind to MySQL and the same Stream service that you did in the apps (rabbit, redis, kafka). Set `spring.datasource.initialize=true` the first time you start to initialize the database. Alternatively, curl it:
+```java
+@SpringBootApplication
+@EnableZipkinStreamServer
+public class ZipkinStreamServerApplication {
-```
-$ curl zipkin-server.cfapps.io/env -d endpoints.restart.enabled=true
-$ curl zipkin-server.cfapps.io/env -d spring.datasource.initialize=true
-$ curl zipkin-server.cfapps.io/restart -d {}
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(ZipkinStreamServerApplication.class, args);
+ }
+
+}
```
-Uses the `zipkin-server` jar from the [OSS](https://github.com/openzipkin/zipkin-java) as well as `spring-cloud-sleuth-stream`.
+Bind to MySQL and the same Stream service that you did in the apps (rabbit, redis, kafka). Set `spring.datasource.initialize=true` the first time you start to initialize the database.
+
+Uses the `zipkin-server` library from the [OSS](https://github.com/openzipkin/zipkin-java) as well as `spring-cloud-sleuth-stream`.
> NOTE: running in the "test" profile you don't need MySQL (the span store is in memory). You could even run in PWS without MySQL.
-## Web UI
+## Web UI in Cloud Foundry
Get the jar from the [OSS](https://github.com/openzipkin/zipkin) and push it:
diff --git a/spring-cloud-sleuth-zipkin-stream/docker-compose.yml b/spring-cloud-sleuth-zipkin-stream/docker-compose.yml
deleted file mode 100644
index 08fe0f294..000000000
--- a/spring-cloud-sleuth-zipkin-stream/docker-compose.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-mysql:
- image: mysql
- ports:
- - "3306:3306"
- environment:
- - MYSQL_ROOT_PASSWORD=root
- - MYSQL_DATABASE=test
- volumes:
- - "./conf.d:/etc/mysql/conf.d:ro"
-rabbitmq:
- image: rabbitmq:management
- ports:
- - 5672:5672
- - 15672:15672
diff --git a/spring-cloud-sleuth-zipkin-stream/pom.xml b/spring-cloud-sleuth-zipkin-stream/pom.xml
index 4a5671e59..434a9d87b 100644
--- a/spring-cloud-sleuth-zipkin-stream/pom.xml
+++ b/spring-cloud-sleuth-zipkin-stream/pom.xml
@@ -19,7 +19,6 @@
springio
UTF-8
1.8
- 0.1.0
@@ -28,11 +27,6 @@
spring-boot-configuration-processor
true
-
- objenesis
- org.objenesis
- compile
-
org.springframework.boot
spring-boot-starter-web
@@ -66,12 +60,10 @@
io.zipkin
zipkin-java-server
- ${zipkin-java.version}
io.zipkin
zipkin-java-jdbc
- ${zipkin-java.version}
com.h2database
@@ -117,13 +109,6 @@
-
- org.springframework.boot
- spring-boot-maven-plugin
-
- exec
-
-
maven-resources-plugin
diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile b/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile
deleted file mode 100644
index 76917389e..000000000
--- a/spring-cloud-sleuth-zipkin-stream/src/main/docker/Dockerfile
+++ /dev/null
@@ -1,6 +0,0 @@
-FROM frolvlad/alpine-oraclejdk8
-VOLUME /tmp
-ADD @project.artifactId@-@project.version@-exec.jar app.jar
-RUN sh -c 'touch /app.jar'
-EXPOSE 9411
-CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
diff --git a/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java b/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java
deleted file mode 100644
index ad7a4dc80..000000000
--- a/spring-cloud-sleuth-zipkin-stream/src/main/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinStreamServerApplication.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.springframework.cloud.sleuth.zipkin.stream;
-
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-
-@SpringBootApplication
-@EnableZipkinStreamServer
-public class ZipkinStreamServerApplication {
-
- public static void main(String[] args) throws Exception {
- new SpringApplicationBuilder(ZipkinStreamServerApplication.class)
- .properties("spring.config.name=zipkin-server").run(args);
- }
-
-}
diff --git a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java
index ff200099d..6c2bb3845 100644
--- a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java
+++ b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinServerApplicationTests.java
@@ -5,8 +5,11 @@ import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.cloud.sleuth.zipkin.stream.ZipkinServerApplicationTests.ZipkinStreamServerApplication;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -27,4 +30,15 @@ public class ZipkinServerApplicationTests {
assertEquals(0, count);
}
+ @SpringBootApplication
+ @EnableZipkinStreamServer
+ public static class ZipkinStreamServerApplication {
+
+ public static void main(String[] args) throws Exception {
+ new SpringApplicationBuilder(ZipkinStreamServerApplication.class)
+ .profiles("test").properties("spring.datasource.initialize=true")
+ .run(args);
+ }
+
+ }
}