You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by ab...@apache.org on 2019/04/21 21:02:24 UTC

[incubator-zipkin-website] branch sync-from-githubio created (now efa7178)

This is an automated email from the ASF dual-hosted git repository.

abesto pushed a change to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git.


      at efa7178  First pass at meeting ASF requirements for website (#1)

This branch includes the following new commits:

     new 8c5c235  add kamon (kamon-zipkin) to the supported community instrumentations.
     new 729675e  Update kamon-zipkin link label
     new febd736  Adds integration page (#119)
     new d12cabd  Renames "Existing" pages (#121)
     new a0f55f3  Add pitchfork to extension choices
     new e646cb2  fixed case format of jaeger
     new fa26402  fixes kafka08 note
     new a543d73  Kafka interceptor and storage (#123)
     new a6b4590  Docker compose for testing (#124)
     new 9cdbc05  Adds some community libraries (#125)
     new 9056ea8  Update community_tracers_instrumentation.yml (#126)
     new 22eb99b  Adding haystack to supported extensions (#127)
     new 956ce8c  Temporary duct-tape to revive https://zipkin.io/zipkin-api/
     new bea8181  Further duct-tape to work around https://github.com/apache/incubator-zipkin-api/issues/62
     new d20b51d  Added Jenkinsfile
     new efa7178  First pass at meeting ASF requirements for website (#1)

The 16 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-zipkin-website] 04/16: Renames "Existing" pages (#121)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit d12cabd17c1184723303500b043766a2c0fd4589
Author: Adrian Cole <ad...@users.noreply.github.com>
AuthorDate: Tue Jan 1 14:49:04 2019 +0800

    Renames "Existing" pages (#121)
    
    The word existing is a bit redundant. This clarifies content according to what they contain.
    
    * Existing instrumentations -> Tracers and Instrumentation
    * Existing integrations -> Server Extensions and Choices
---
 Gemfile.lock                                       | 38 ++++++++--------
 README.md                                          |  4 +-
 ...t_integrations.yml => community_extensions.yml} |  0
 ...s.yml => community_tracers_instrumentation.yml} |  0
 ..._integrations.yml => openzipkin_extensions.yml} |  0
 ....yml => openzipkin_tracers_instrumentation.yml} |  0
 index.md                                           |  4 +-
 pages/architecture.md                              |  4 +-
 pages/community.md                                 |  4 +-
 pages/existing_transport_integrations.md           | 39 ----------------
 pages/extensions_choices.md                        | 53 ++++++++++++++++++++++
 pages/instrumenting.md                             |  2 +-
 ...trumentations.md => tracers_instrumentation.md} | 14 +++---
 13 files changed, 88 insertions(+), 74 deletions(-)

diff --git a/Gemfile.lock b/Gemfile.lock
index 683e484..f31c717 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -13,9 +13,9 @@ GEM
       execjs
     coffee-script-source (1.11.1)
     colorator (1.1.0)
-    commonmarker (0.17.12)
+    commonmarker (0.17.13)
       ruby-enum (~> 0.5)
-    concurrent-ruby (1.0.5)
+    concurrent-ruby (1.1.4)
     dnsruby (1.61.2)
       addressable (~> 2.5)
     em-websocket (0.5.1)
@@ -25,12 +25,12 @@ GEM
       ffi (>= 1.3.0)
     eventmachine (1.2.7)
     execjs (2.7.0)
-    faraday (0.15.2)
+    faraday (0.15.4)
       multipart-post (>= 1.2, < 3)
     ffi (1.9.25)
     forwardable-extended (2.6.0)
     gemoji (3.0.0)
-    github-pages (192)
+    github-pages (193)
       activesupport (= 4.2.10)
       github-pages-health-check (= 1.8.1)
       jekyll (= 3.7.4)
@@ -38,7 +38,7 @@ GEM
       jekyll-coffeescript (= 1.1.1)
       jekyll-commonmark-ghpages (= 0.1.5)
       jekyll-default-layout (= 0.1.4)
-      jekyll-feed (= 0.10.0)
+      jekyll-feed (= 0.11.0)
       jekyll-gist (= 1.5.0)
       jekyll-github-metadata (= 2.9.4)
       jekyll-mentions (= 1.4.1)
@@ -81,7 +81,7 @@ GEM
       octokit (~> 4.0)
       public_suffix (~> 2.0)
       typhoeus (~> 1.3)
-    html-pipeline (2.8.4)
+    html-pipeline (2.9.1)
       activesupport (>= 2)
       nokogiri (>= 1.4)
     http_parser.rb (0.6.0)
@@ -114,7 +114,7 @@ GEM
       rouge (~> 2)
     jekyll-default-layout (0.1.4)
       jekyll (~> 3.0)
-    jekyll-feed (0.10.0)
+    jekyll-feed (0.11.0)
       jekyll (~> 3.3)
     jekyll-gist (1.5.0)
       octokit (~> 4.2)
@@ -185,7 +185,7 @@ GEM
       jekyll-seo-tag (~> 2.0)
     jekyll-titles-from-headings (0.5.1)
       jekyll (~> 3.3)
-    jekyll-watch (2.0.0)
+    jekyll-watch (2.1.2)
       listen (~> 3.0)
     jemoji (0.10.1)
       gemoji (~> 3.0)
@@ -198,30 +198,30 @@ GEM
       rb-inotify (~> 0.9, >= 0.9.7)
       ruby_dep (~> 1.2)
     mercenary (0.3.6)
-    mini_portile2 (2.3.0)
+    mini_portile2 (2.4.0)
     minima (2.5.0)
       jekyll (~> 3.5)
       jekyll-feed (~> 0.9)
       jekyll-seo-tag (~> 2.1)
     minitest (5.11.3)
     multipart-post (2.0.0)
-    nokogiri (1.8.4)
-      mini_portile2 (~> 2.3.0)
-    octokit (4.11.0)
+    nokogiri (1.9.1)
+      mini_portile2 (~> 2.4.0)
+    octokit (4.13.0)
       sawyer (~> 0.8.0, >= 0.5.3)
-    pathutil (0.16.1)
+    pathutil (0.16.2)
       forwardable-extended (~> 2.6)
     public_suffix (2.0.5)
     rb-fsevent (0.10.3)
-    rb-inotify (0.9.10)
-      ffi (>= 0.5.0, < 2)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
     rouge (2.2.1)
     ruby-enum (0.7.2)
       i18n
     ruby_dep (1.5.0)
     rubyzip (1.2.2)
     safe_yaml (1.0.4)
-    sass (3.5.7)
+    sass (3.7.2)
       sass-listen (~> 4.0.0)
     sass-listen (4.0.0)
       rb-fsevent (~> 0.9, >= 0.9.4)
@@ -232,18 +232,18 @@ GEM
     terminal-table (1.8.0)
       unicode-display_width (~> 1.1, >= 1.1.1)
     thread_safe (0.3.6)
-    typhoeus (1.3.0)
+    typhoeus (1.3.1)
       ethon (>= 0.9.0)
     tzinfo (1.2.5)
       thread_safe (~> 0.1)
-    unicode-display_width (1.4.0)
+    unicode-display_width (1.4.1)
     yaml-lint (0.0.10)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
-  github-pages (= 192)
+  github-pages (= 193)
   yaml-lint (~> 0.0.9)
 
 BUNDLED WITH
diff --git a/README.md b/README.md
index 4fde567..c69eb1b 100644
--- a/README.md
+++ b/README.md
@@ -89,8 +89,8 @@ The rest of the repository contains scaffolding; here's a list to give you a
 basic idea of what's what:
 
  * [`_data`](_data) contains lists of things that are rendered into various
-   parts of the page. For instance the list of existing tracers is defined here
-   in a structured way.
+   parts of the page. For instance the list of tracers and instrumentation
+   is defined here in a structured way.
  * [`_includes`](_includes) contains HTML snippets that are shared by some or
    all pages.
  * [`_layouts`](_layouts) contains the basic HTML shared by all pages - and
diff --git a/_data/community_transport_integrations.yml b/_data/community_extensions.yml
similarity index 100%
rename from _data/community_transport_integrations.yml
rename to _data/community_extensions.yml
diff --git a/_data/community_instrumentations.yml b/_data/community_tracers_instrumentation.yml
similarity index 100%
rename from _data/community_instrumentations.yml
rename to _data/community_tracers_instrumentation.yml
diff --git a/_data/openzipkin_transport_integrations.yml b/_data/openzipkin_extensions.yml
similarity index 100%
rename from _data/openzipkin_transport_integrations.yml
rename to _data/openzipkin_extensions.yml
diff --git a/_data/openzipkin_instrumentations.yml b/_data/openzipkin_tracers_instrumentation.yml
similarity index 100%
rename from _data/openzipkin_instrumentations.yml
rename to _data/openzipkin_tracers_instrumentation.yml
diff --git a/index.md b/index.md
index 2541962..7237a43 100644
--- a/index.md
+++ b/index.md
@@ -16,8 +16,8 @@ Applications are instrumented to report timing data to Zipkin. The Zipkin UI als
 ## Where to go next?
 
  * To try out Zipkin, check out our [Quickstart guide]({{ site.github.url }}/pages/quickstart)
- * See if your platform has an [existing instrumentation library]({{ site.github.url
-}}/pages/existing_instrumentations)
+ * See if your platform has a [tracer or instrumentation library]({{ site.github.url }}/pages/tracers_instrumentation)
+ * See if a [server extension or alternative]({{ site.github.url }}/pages/extensions_choices) is relevant to your site.
  * Join the [Zipkin Gitter chat channel](https://gitter.im/openzipkin/zipkin)
  * The source code is on GitHub as [openzipkin/zipkin](https://github.com/openzipkin/zipkin/)
  * Issues are also tracked on [GitHub](https://github.com/openzipkin/zipkin/issues)
diff --git a/pages/architecture.md b/pages/architecture.md
index a591649..490a3c2 100644
--- a/pages/architecture.md
+++ b/pages/architecture.md
@@ -30,8 +30,8 @@ Here's a diagram describing this flow:
 
 ![Zipkin architecture]({{ site.github.url }}/public/img/architecture-1.png)
 
-To see if an instrumentation library already exists for your platform, see the
-list of [existing instrumentations]({{ site.github.url}}/pages/existing_instrumentations).
+To see if a tracer or instrumentation library already exists for your platform, see
+[our list]({{ site.github.url}}/pages/tracers_instrumentation).
 
 Example flow
 -----------------------
diff --git a/pages/community.md b/pages/community.md
index efc6a1f..2ec6ac6 100644
--- a/pages/community.md
+++ b/pages/community.md
@@ -14,7 +14,7 @@ Zipkin code, docs, specs and support. It includes github projects, this web site
 ### Keeping up to date
 Follow [@zipkinproject](https://twitter.com/zipkinproject) on Twitter for news
 including release announcements and community events. You can also ask on [gitter](https://gitter.im/openzipkin/zipkin) about something specific. If you are working on code, you can also
-follow projects like the [server](https://github.com/openzipkin/zipkin) or an [instrumentation](https://zipkin.io/pages/existing_instrumentations.html) you use.
+follow projects like the [server](https://github.com/openzipkin/zipkin) or an [instrumentation](https://zipkin.io/pages/tracers_instrumentation.html) you use.
 
 ### Being an active part of the community
 OpenZipkin is primarily volunteers, and there are a lot of ways to help. Once you
@@ -50,4 +50,4 @@ Smaller sizes might break the delicate design of the logo.
 
 Use the logo with a cut-line for printing kiss-cut stickers.
 A minimum size for kiss-cut stickers would be 7.5 cm x 4.62 cm. 
-Smaller sizes might give you problems with the inner corners when you want to peel-off the sticker.
\ No newline at end of file
+Smaller sizes might give you problems with the inner corners when you want to peel-off the sticker.
diff --git a/pages/existing_transport_integrations.md b/pages/existing_transport_integrations.md
deleted file mode 100644
index 638b101..0000000
--- a/pages/existing_transport_integrations.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Existing server integrations
-weight: 4
----
-
-### OpenZipkin server integrations
-Zipkin server bundles integration for span collection and storage. By default spans can be collected over http, Kafka or RabbitMQ transports and stored in-memory or in MySQL, Cassandra or Elasticsearch. Zipkin is extensible with external modules which allow alternate transport or storage options. Here is a list of ones maintained by the core team.
-
-| Type | Module | Related product | Other notes |
-|:-----|:--------|:----------------|:------------|{% for integration in site.data.openzipkin_transport_integrations %}
-| {{ integration.type }} | {{ integration.module }} | {{integration.product}} | {{ integration.notes }} |{% endfor %}
-{: .wide-table}
-
-
-### Community server integrations
-   
-| Type | Module | Related product | Other notes |
-|:-----|:--------|:----------------|:------------|{% for integration in site.data.community_transport_integrations %}
-| {{ integration.type }} | {{ integration.module }} | {{integration.product}} | {{ integration.notes }} |{% endfor %}
-{: .wide-table}
-
-
-### Community server Alternatives
-Listed below are alternative servers that accept Zipkin format. Some use the same code as Zipkin on the same endpoints while others are on alternative endpoints or partially support features. In any case, these integrations aim to allow existing zipkin clients to use alternative backends the OpenZipkin team does not support. Hence, direct questions to their respective communities.
-    
- - [Apache SkyWalking](https://github.com/apache/incubator-skywalking)
-   - When [zipkin-receiver](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/backend/backend-receivers.md) is enabled, Skywalking exposes the same HTTP POST endpoints Zipkin does
-     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, proto) POST requests.
-     - this integration uses the same encoding library and same endpoints as zipkin does.
- - [jaeger](https://github.com/jaegertracing/jaeger)
-   - When `COLLECTOR_ZIPKIN_HTTP_PORT=9411` is set, Jaeger exposes a partial implementation of Zipkin's HTTP POST endpoints
-     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, but not proto) POST requests.
-   - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads zipkin v1 thrift encoded span messages from a Kafka topic.
-     - Note: The above is a [deprecated practice](https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/kafka#legacy-encoding) in Zipkin. Most instrumentation bundle multiple spans per message in v2 format.
-
-
-Did we miss an integration? Please open a pull-request to
-[openzipkin.github.io](https://github.com/openzipkin/openzipkin.github.io).
-
diff --git a/pages/extensions_choices.md b/pages/extensions_choices.md
new file mode 100644
index 0000000..a90a02a
--- /dev/null
+++ b/pages/extensions_choices.md
@@ -0,0 +1,53 @@
+---
+title: Server extensions and choices
+weight: 4
+---
+
+## Server extensions
+Zipkin server bundles extension for span collection and storage. By default spans can be collected over http, Kafka or RabbitMQ transports and stored in-memory or in MySQL, Cassandra or Elasticsearch.
+
+The following modules add storage or transport extensions to the default server build.
+Please refer to their individual documentation for setup and configuration guides.
+
+### OpenZipkin supported
+
+The following extensions are supported by the OpenZipkin team and are hosted at
+the [OpenZipkin GitHub](https://github.com/openzipkin/) group. You can reach out to
+the team on [Zipkin Gitter](https://gitter.im/openzipkin/zipkin/) chat.
+
+| Type | Module | Related product | Other notes |
+|:-----|:--------|:----------------|:------------|{% for extension in site.data.openzipkin_extensions %}
+| {{ extension.type }} | {{ extension.module }} | {{extension.product}} | {{ extension.notes }} |{% endfor %}
+{: .wide-table}
+
+### Community supported
+
+| Type | Module | Related product | Other notes |
+|:-----|:--------|:----------------|:------------|{% for extension in site.data.community_extensions %}
+| {{ extension.type }} | {{ extension.module }} | {{extension.product}} | {{ extension.notes }} |{% endfor %}
+{: .wide-table}
+
+
+## Alternative servers
+
+The OpenZipkin team publish apis, data formats, and shared libraries that allow alternate backends to process the
+same data sent to the default Zipkin server.
+
+### Community supported
+
+Listed below are alternative backends that accept Zipkin format. Some use the same code as Zipkin on the same endpoints while others are on alternative endpoints or partially support features. In any case, the following aim to allow existing zipkin clients to use backends the OpenZipkin team does not support. Hence, direct questions to their respective communities.
+    
+ - [Apache SkyWalking](https://github.com/apache/incubator-skywalking)
+   - When [zipkin-receiver](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/backend/backend-receivers.md) is enabled, Skywalking exposes the same HTTP POST endpoints Zipkin does
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, proto) POST requests.
+     - this extension uses the same encoding library and same endpoints as zipkin does.
+ - [jaeger](https://github.com/jaegertracing/jaeger)
+   - When `COLLECTOR_ZIPKIN_HTTP_PORT=9411` is set, Jaeger exposes a partial implementation of Zipkin's HTTP POST endpoints
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, but not proto) POST requests.
+   - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads zipkin v1 thrift encoded span messages from a Kafka topic.
+     - Note: The above is a [deprecated practice](https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/kafka#legacy-encoding) in Zipkin. Most instrumentation bundle multiple spans per message in v2 format.
+
+
+Did we miss a server extension or alternative? Please open a pull-request to
+[openzipkin.github.io](https://github.com/openzipkin/openzipkin.github.io).
+
diff --git a/pages/instrumenting.md b/pages/instrumenting.md
index ab4a916..4ea6d6b 100644
--- a/pages/instrumenting.md
+++ b/pages/instrumenting.md
@@ -4,7 +4,7 @@ title: Instrumenting a library
 
 This is an advanced topic. Before reading further, you may want to check whether
 an instrumentation library for your platform [already exists]({{ site.github.url
-}}/pages/existing_instrumentations). If not and if you want to take on creating an instrumentation library, first things first; jump on
+}}/pages/tracers_instrumentation). If not and if you want to take on creating an instrumentation library, first things first; jump on
 [Zipkin Gitter chat channel](https://gitter.im/openzipkin/zipkin) and let us know. We'll be extremely
 happy to help you along the way.
 {: .message}
diff --git a/pages/existing_instrumentations.md b/pages/tracers_instrumentation.md
similarity index 83%
rename from pages/existing_instrumentations.md
rename to pages/tracers_instrumentation.md
index 64f4cae..a073a56 100644
--- a/pages/existing_instrumentations.md
+++ b/pages/tracers_instrumentation.md
@@ -1,5 +1,5 @@
 ---
-title: Existing instrumentations
+title: Tracers and Instrumentation
 weight: 3
 ---
 
@@ -12,22 +12,22 @@ The following libraries exist to provide instrumentation on various platforms.
 Please refer to their individual documentation for setup and configuration
 guides.
 
-### OpenZipkin libraries
+### OpenZipkin supported
 
-The following libraries are supported by the OpenZipkin authors and are hosted at
+The following libraries are supported by the OpenZipkin team and are hosted at
 the [OpenZipkin GitHub](https://github.com/openzipkin/) group. You can reach out to
-the authors at the [Zipkin Gitter](https://gitter.im/openzipkin/zipkin/) chat.
+the team on [Zipkin Gitter](https://gitter.im/openzipkin/zipkin/) chat.
 
 | Language | Library | Framework | Propagation Supported | Transports Supported | Sampling Supported? | Other notes |
-|:---------|:--------|:----------|:----------------------|:---------------------|:--------------------|:------------|{% for lib in site.data.openzipkin_instrumentations %}
+|:---------|:--------|:----------|:----------------------|:---------------------|:--------------------|:------------|{% for lib in site.data.openzipkin_tracers_instrumentation %}
 | {{ lib.language }} | {{ lib.library }} | {{lib.framework}} | {{ lib.propagation }} | {{ lib.transports }} | {{ lib.sampling }} | {{ lib.notes }} |{% endfor %}
 {: .wide-table}
 
 
-### Community libraries
+### Community supported
 
 | Language | Library | Framework | Propagation Supported | Transports Supported | Sampling Supported? | Other notes |
-|:---------|:--------|:----------|:----------------------|:---------------------|:--------------------|:------------|{% for lib in site.data.community_instrumentations %}
+|:---------|:--------|:----------|:----------------------|:---------------------|:--------------------|:------------|{% for lib in site.data.community_tracers_instrumentation %}
 | {{ lib.language }} | {{ lib.library }} | {{lib.framework}} | {{ lib.propagation }} | {{ lib.transports }} | {{ lib.sampling }} | {{ lib.notes }} |{% endfor %}
 {: .wide-table}
 


[incubator-zipkin-website] 06/16: fixed case format of jaeger

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit e646cb2c2dbcbc39f6afa54dd3b015f67cfb6df4
Author: Adrian Cole <ad...@users.noreply.github.com>
AuthorDate: Fri Jan 4 07:57:01 2019 +0800

    fixed case format of jaeger
---
 pages/extensions_choices.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pages/extensions_choices.md b/pages/extensions_choices.md
index 878ac07..5dd6d10 100644
--- a/pages/extensions_choices.md
+++ b/pages/extensions_choices.md
@@ -41,7 +41,7 @@ Listed below are alternative backends that accept Zipkin format. Some use the sa
    - When [zipkin-receiver](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/backend/backend-receivers.md) is enabled, Skywalking exposes the same HTTP POST endpoints Zipkin does
      - http port 9411 accepts `/api/v1/spans` (thrift, json) and `/api/v2/spans` (json, proto) POST requests.
      - this extension uses the same encoding library and same endpoints as Zipkin does.
- - [jaeger](https://github.com/jaegertracing/jaeger)
+ - [Jaeger](https://github.com/jaegertracing/jaeger)
    - When `COLLECTOR_ZIPKIN_HTTP_PORT=9411` is set, Jaeger exposes a partial implementation of Zipkin's HTTP POST endpoints
      - http port 9411 accepts `/api/v1/spans` (thrift, json) and `/api/v2/spans` (json, but not proto) POST requests.
    - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads Zipkin v1 thrift encoded span messages from a Kafka topic.


[incubator-zipkin-website] 11/16: Update community_tracers_instrumentation.yml (#126)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 9056ea8b37f7a380bb9b03885c539b13d5807204
Author: Dudi Likvornik <li...@gmail.com>
AuthorDate: Tue Apr 16 03:24:00 2019 +0300

    Update community_tracers_instrumentation.yml (#126)
---
 _data/community_tracers_instrumentation.yml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/_data/community_tracers_instrumentation.yml b/_data/community_tracers_instrumentation.yml
index 800d826..e68a6f7 100644
--- a/_data/community_tracers_instrumentation.yml
+++ b/_data/community_tracers_instrumentation.yml
@@ -1,3 +1,12 @@
+- language: "C++,Python"
+  library: >-
+    [cppkin](https://github.com/Dudi119/cppKin)
+  framework: Any
+  propagation: Http (B3), Thrift
+  transports: Http, Scribe
+  sampling: "Yes"
+  notes: cpp version also available in windows.
+
 - language: "C,C++"
   library: >-
     [zipkin-cpp](https://github.com/flier/zipkin-cpp)


[incubator-zipkin-website] 09/16: Docker compose for testing (#124)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit a6b459011c8bae5be3cd38e5614349157df8876a
Author: Jorge Quilcate Otoya <qu...@gmail.com>
AuthorDate: Tue Mar 5 20:30:43 2019 +0100

    Docker compose for testing (#124)
---
 Gemfile            |  1 +
 Gemfile.lock       | 43 ++++++++++++++++++++++---------------------
 docker-compose.yml |  9 +++++++++
 3 files changed, 32 insertions(+), 21 deletions(-)

diff --git a/Gemfile b/Gemfile
index 1058dd8..4160c3d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,3 +7,4 @@ require 'open-uri'
 versions = JSON.parse(open('https://pages.github.com/versions.json').read)
 gem 'github-pages', versions['github-pages']
 gem "yaml-lint", "~> 0.0.9"
+gem "terminal-table", "~> 1.4"
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index f31c717..7f1dcec 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -21,18 +21,18 @@ GEM
     em-websocket (0.5.1)
       eventmachine (>= 0.12.9)
       http_parser.rb (~> 0.6.0)
-    ethon (0.11.0)
+    ethon (0.12.0)
       ffi (>= 1.3.0)
     eventmachine (1.2.7)
     execjs (2.7.0)
     faraday (0.15.4)
       multipart-post (>= 1.2, < 3)
-    ffi (1.9.25)
+    ffi (1.10.0)
     forwardable-extended (2.6.0)
     gemoji (3.0.0)
-    github-pages (193)
+    github-pages (197)
       activesupport (= 4.2.10)
-      github-pages-health-check (= 1.8.1)
+      github-pages-health-check (= 1.16.1)
       jekyll (= 3.7.4)
       jekyll-avatar (= 0.6.0)
       jekyll-coffeescript (= 1.1.1)
@@ -40,13 +40,13 @@ GEM
       jekyll-default-layout (= 0.1.4)
       jekyll-feed (= 0.11.0)
       jekyll-gist (= 1.5.0)
-      jekyll-github-metadata (= 2.9.4)
+      jekyll-github-metadata (= 2.12.1)
       jekyll-mentions (= 1.4.1)
       jekyll-optional-front-matter (= 0.3.0)
       jekyll-paginate (= 1.1.0)
       jekyll-readme-index (= 0.2.0)
       jekyll-redirect-from (= 0.14.0)
-      jekyll-relative-links (= 0.5.3)
+      jekyll-relative-links (= 0.6.0)
       jekyll-remote-theme (= 0.3.1)
       jekyll-sass-converter (= 1.5.2)
       jekyll-seo-tag (= 2.5.0)
@@ -66,22 +66,22 @@ GEM
       jekyll-theme-tactile (= 0.1.1)
       jekyll-theme-time-machine (= 0.1.1)
       jekyll-titles-from-headings (= 0.5.1)
-      jemoji (= 0.10.1)
+      jemoji (= 0.10.2)
       kramdown (= 1.17.0)
       liquid (= 4.0.0)
       listen (= 3.1.5)
       mercenary (~> 0.3)
       minima (= 2.5.0)
-      nokogiri (>= 1.8.2, < 2.0)
+      nokogiri (>= 1.8.5, < 2.0)
       rouge (= 2.2.1)
       terminal-table (~> 1.4)
-    github-pages-health-check (1.8.1)
+    github-pages-health-check (1.16.1)
       addressable (~> 2.3)
       dnsruby (~> 1.60)
       octokit (~> 4.0)
-      public_suffix (~> 2.0)
+      public_suffix (~> 3.0)
       typhoeus (~> 1.3)
-    html-pipeline (2.9.1)
+    html-pipeline (2.10.0)
       activesupport (>= 2)
       nokogiri (>= 1.4)
     http_parser.rb (0.6.0)
@@ -118,8 +118,8 @@ GEM
       jekyll (~> 3.3)
     jekyll-gist (1.5.0)
       octokit (~> 4.2)
-    jekyll-github-metadata (2.9.4)
-      jekyll (~> 3.1)
+    jekyll-github-metadata (2.12.1)
+      jekyll (~> 3.4)
       octokit (~> 4.0, != 4.4.0)
     jekyll-mentions (1.4.1)
       html-pipeline (~> 2.3)
@@ -131,7 +131,7 @@ GEM
       jekyll (~> 3.0)
     jekyll-redirect-from (0.14.0)
       jekyll (~> 3.3)
-    jekyll-relative-links (0.5.3)
+    jekyll-relative-links (0.6.0)
       jekyll (~> 3.3)
     jekyll-remote-theme (0.3.1)
       jekyll (~> 3.5)
@@ -187,7 +187,7 @@ GEM
       jekyll (~> 3.3)
     jekyll-watch (2.1.2)
       listen (~> 3.0)
-    jemoji (0.10.1)
+    jemoji (0.10.2)
       gemoji (~> 3.0)
       html-pipeline (~> 2.2)
       jekyll (~> 3.0)
@@ -205,13 +205,13 @@ GEM
       jekyll-seo-tag (~> 2.1)
     minitest (5.11.3)
     multipart-post (2.0.0)
-    nokogiri (1.9.1)
+    nokogiri (1.10.1)
       mini_portile2 (~> 2.4.0)
     octokit (4.13.0)
       sawyer (~> 0.8.0, >= 0.5.3)
     pathutil (0.16.2)
       forwardable-extended (~> 2.6)
-    public_suffix (2.0.5)
+    public_suffix (3.0.3)
     rb-fsevent (0.10.3)
     rb-inotify (0.10.0)
       ffi (~> 1.0)
@@ -220,8 +220,8 @@ GEM
       i18n
     ruby_dep (1.5.0)
     rubyzip (1.2.2)
-    safe_yaml (1.0.4)
-    sass (3.7.2)
+    safe_yaml (1.0.5)
+    sass (3.7.3)
       sass-listen (~> 4.0.0)
     sass-listen (4.0.0)
       rb-fsevent (~> 0.9, >= 0.9.4)
@@ -243,8 +243,9 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
-  github-pages (= 193)
+  github-pages (= 197)
+  terminal-table (~> 1.4)
   yaml-lint (~> 0.0.9)
 
 BUNDLED WITH
-   1.16.2
+   1.17.3
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..396d9b7
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,9 @@
+version: '3'
+services:
+  jekyll:
+    image: jekyll/jekyll:latest
+    command: jekyll serve --watch --force_polling --verbose
+    ports:
+      - 4000:4000
+    volumes:
+      - .:/srv/jekyll
\ No newline at end of file


[incubator-zipkin-website] 05/16: Add pitchfork to extension choices

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit a0f55f357cd5b2fb0c0e88fc9cce291b7341caf3
Author: Daniel Albuquerque <dm...@hotels.com>
AuthorDate: Thu Jan 3 15:01:21 2019 +0000

    Add pitchfork to extension choices
---
 pages/extensions_choices.md | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/pages/extensions_choices.md b/pages/extensions_choices.md
index a90a02a..878ac07 100644
--- a/pages/extensions_choices.md
+++ b/pages/extensions_choices.md
@@ -39,14 +39,16 @@ Listed below are alternative backends that accept Zipkin format. Some use the sa
     
  - [Apache SkyWalking](https://github.com/apache/incubator-skywalking)
    - When [zipkin-receiver](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/backend/backend-receivers.md) is enabled, Skywalking exposes the same HTTP POST endpoints Zipkin does
-     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, proto) POST requests.
-     - this extension uses the same encoding library and same endpoints as zipkin does.
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and `/api/v2/spans` (json, proto) POST requests.
+     - this extension uses the same encoding library and same endpoints as Zipkin does.
  - [jaeger](https://github.com/jaegertracing/jaeger)
    - When `COLLECTOR_ZIPKIN_HTTP_PORT=9411` is set, Jaeger exposes a partial implementation of Zipkin's HTTP POST endpoints
-     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, but not proto) POST requests.
-   - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads zipkin v1 thrift encoded span messages from a Kafka topic.
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and `/api/v2/spans` (json, but not proto) POST requests.
+   - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads Zipkin v1 thrift encoded span messages from a Kafka topic.
      - Note: The above is a [deprecated practice](https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/kafka#legacy-encoding) in Zipkin. Most instrumentation bundle multiple spans per message in v2 format.
-
+ - [Pitchfork](https://github.com/HotelsDotCom/pitchfork)
+   - Pitchfork exposes the same HTTP POST endpoints Zipkin does
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and `/api/v2/spans` (json, proto) POST requests.
 
 Did we miss a server extension or alternative? Please open a pull-request to
 [openzipkin.github.io](https://github.com/openzipkin/openzipkin.github.io).


[incubator-zipkin-website] 01/16: add kamon (kamon-zipkin) to the supported community instrumentations.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 8c5c2352c7356e88d55c28f63eea387a135617e4
Author: Daniel Schroeter <ds...@scaling.ch>
AuthorDate: Mon Nov 19 16:50:16 2018 +0100

    add kamon (kamon-zipkin) to the supported community instrumentations.
---
 _data/community_instrumentations.yml | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/_data/community_instrumentations.yml b/_data/community_instrumentations.yml
index 3a4094f..083854f 100644
--- a/_data/community_instrumentations.yml
+++ b/_data/community_instrumentations.yml
@@ -201,6 +201,17 @@
 
 - language: Scala
   library: >-
+    [sttp](https://github.com/kamon-io/kamon-zipkin)
+  framework: >-
+    [akka](https://doc.akka.io/docs/akka/current/index.html),
+    [akka-http](https://doc.akka.io/docs/akka-http/current/index.html),
+  propagation: Http (B3)
+  transports: Http
+  sampling: "Yes"
+  notes: Toolkit for tracing and monitoring for jvm based applications
+
+- language: Scala
+  library: >-
     [akka-tracing](https://github.com/levkhomich/akka-tracing)
   framework: >-
     [Akka](https://akka.io), [Spray](https://spray.io), [Play](https://www.playframework.com)


[incubator-zipkin-website] 14/16: Further duct-tape to work around https://github.com/apache/incubator-zipkin-api/issues/62

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit bea818141dec038c0497863ea17ee058ce94c686
Author: Zoltan Nagy <ab...@gmail.com>
AuthorDate: Sun Apr 21 21:38:52 2019 +0100

    Further duct-tape to work around https://github.com/apache/incubator-zipkin-api/issues/62
---
 {public/zipkin-api => zipkin-api}/404.html                  |   0
 {public/zipkin-api => zipkin-api}/CONTRIBUTING.md           |   0
 {public/zipkin-api => zipkin-api}/LICENSE                   |   0
 {public/zipkin-api => zipkin-api}/README.md                 |   0
 {public/zipkin-api => zipkin-api}/config.json               |   0
 {public/zipkin-api => zipkin-api}/favicon-16x16.png         | Bin
 {public/zipkin-api => zipkin-api}/favicon-32x32.png         | Bin
 {public/zipkin-api => zipkin-api}/index.html                |   0
 {public/zipkin-api => zipkin-api}/package.json              |   0
 {public/zipkin-api => zipkin-api}/swagger-ui-bundle.js      |   0
 {public/zipkin-api => zipkin-api}/swagger-ui-bundle.js.map  |   0
 .../swagger-ui-standalone-preset.js                         |   0
 .../swagger-ui-standalone-preset.js.map                     |   0
 {public/zipkin-api => zipkin-api}/swagger-ui.css            |   0
 {public/zipkin-api => zipkin-api}/swagger-ui.css.map        |   0
 {public/zipkin-api => zipkin-api}/swagger-ui.js             |   0
 {public/zipkin-api => zipkin-api}/swagger-ui.js.map         |   0
 {public/zipkin-api => zipkin-api}/thrift/zipkinCore.thrift  |   0
 .../thrift/zipkinDependencies.thrift                        |   0
 {public/zipkin-api => zipkin-api}/validate.js               |   0
 {public/zipkin-api => zipkin-api}/zipkin-api.yaml           |   0
 {public/zipkin-api => zipkin-api}/zipkin.proto              |   0
 {public/zipkin-api => zipkin-api}/zipkin2-api.yaml          |   0
 23 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/public/zipkin-api/404.html b/zipkin-api/404.html
similarity index 100%
rename from public/zipkin-api/404.html
rename to zipkin-api/404.html
diff --git a/public/zipkin-api/CONTRIBUTING.md b/zipkin-api/CONTRIBUTING.md
similarity index 100%
rename from public/zipkin-api/CONTRIBUTING.md
rename to zipkin-api/CONTRIBUTING.md
diff --git a/public/zipkin-api/LICENSE b/zipkin-api/LICENSE
similarity index 100%
rename from public/zipkin-api/LICENSE
rename to zipkin-api/LICENSE
diff --git a/public/zipkin-api/README.md b/zipkin-api/README.md
similarity index 100%
rename from public/zipkin-api/README.md
rename to zipkin-api/README.md
diff --git a/public/zipkin-api/config.json b/zipkin-api/config.json
similarity index 100%
rename from public/zipkin-api/config.json
rename to zipkin-api/config.json
diff --git a/public/zipkin-api/favicon-16x16.png b/zipkin-api/favicon-16x16.png
similarity index 100%
rename from public/zipkin-api/favicon-16x16.png
rename to zipkin-api/favicon-16x16.png
diff --git a/public/zipkin-api/favicon-32x32.png b/zipkin-api/favicon-32x32.png
similarity index 100%
rename from public/zipkin-api/favicon-32x32.png
rename to zipkin-api/favicon-32x32.png
diff --git a/public/zipkin-api/index.html b/zipkin-api/index.html
similarity index 100%
rename from public/zipkin-api/index.html
rename to zipkin-api/index.html
diff --git a/public/zipkin-api/package.json b/zipkin-api/package.json
similarity index 100%
rename from public/zipkin-api/package.json
rename to zipkin-api/package.json
diff --git a/public/zipkin-api/swagger-ui-bundle.js b/zipkin-api/swagger-ui-bundle.js
similarity index 100%
rename from public/zipkin-api/swagger-ui-bundle.js
rename to zipkin-api/swagger-ui-bundle.js
diff --git a/public/zipkin-api/swagger-ui-bundle.js.map b/zipkin-api/swagger-ui-bundle.js.map
similarity index 100%
rename from public/zipkin-api/swagger-ui-bundle.js.map
rename to zipkin-api/swagger-ui-bundle.js.map
diff --git a/public/zipkin-api/swagger-ui-standalone-preset.js b/zipkin-api/swagger-ui-standalone-preset.js
similarity index 100%
rename from public/zipkin-api/swagger-ui-standalone-preset.js
rename to zipkin-api/swagger-ui-standalone-preset.js
diff --git a/public/zipkin-api/swagger-ui-standalone-preset.js.map b/zipkin-api/swagger-ui-standalone-preset.js.map
similarity index 100%
rename from public/zipkin-api/swagger-ui-standalone-preset.js.map
rename to zipkin-api/swagger-ui-standalone-preset.js.map
diff --git a/public/zipkin-api/swagger-ui.css b/zipkin-api/swagger-ui.css
similarity index 100%
rename from public/zipkin-api/swagger-ui.css
rename to zipkin-api/swagger-ui.css
diff --git a/public/zipkin-api/swagger-ui.css.map b/zipkin-api/swagger-ui.css.map
similarity index 100%
rename from public/zipkin-api/swagger-ui.css.map
rename to zipkin-api/swagger-ui.css.map
diff --git a/public/zipkin-api/swagger-ui.js b/zipkin-api/swagger-ui.js
similarity index 100%
rename from public/zipkin-api/swagger-ui.js
rename to zipkin-api/swagger-ui.js
diff --git a/public/zipkin-api/swagger-ui.js.map b/zipkin-api/swagger-ui.js.map
similarity index 100%
rename from public/zipkin-api/swagger-ui.js.map
rename to zipkin-api/swagger-ui.js.map
diff --git a/public/zipkin-api/thrift/zipkinCore.thrift b/zipkin-api/thrift/zipkinCore.thrift
similarity index 100%
rename from public/zipkin-api/thrift/zipkinCore.thrift
rename to zipkin-api/thrift/zipkinCore.thrift
diff --git a/public/zipkin-api/thrift/zipkinDependencies.thrift b/zipkin-api/thrift/zipkinDependencies.thrift
similarity index 100%
rename from public/zipkin-api/thrift/zipkinDependencies.thrift
rename to zipkin-api/thrift/zipkinDependencies.thrift
diff --git a/public/zipkin-api/validate.js b/zipkin-api/validate.js
similarity index 100%
rename from public/zipkin-api/validate.js
rename to zipkin-api/validate.js
diff --git a/public/zipkin-api/zipkin-api.yaml b/zipkin-api/zipkin-api.yaml
similarity index 100%
rename from public/zipkin-api/zipkin-api.yaml
rename to zipkin-api/zipkin-api.yaml
diff --git a/public/zipkin-api/zipkin.proto b/zipkin-api/zipkin.proto
similarity index 100%
rename from public/zipkin-api/zipkin.proto
rename to zipkin-api/zipkin.proto
diff --git a/public/zipkin-api/zipkin2-api.yaml b/zipkin-api/zipkin2-api.yaml
similarity index 100%
rename from public/zipkin-api/zipkin2-api.yaml
rename to zipkin-api/zipkin2-api.yaml


[incubator-zipkin-website] 10/16: Adds some community libraries (#125)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 9cdbc0522c7a037967d68e46478fdcf41576e0f8
Author: José Carlos Chávez <jc...@gmail.com>
AuthorDate: Tue Mar 19 07:32:03 2019 +0100

    Adds some community libraries (#125)
---
 _data/community_tracers_instrumentation.yml | 30 +++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/_data/community_tracers_instrumentation.yml b/_data/community_tracers_instrumentation.yml
index 7f4b379..800d826 100644
--- a/_data/community_tracers_instrumentation.yml
+++ b/_data/community_tracers_instrumentation.yml
@@ -277,3 +277,33 @@
   transports: Http, Kafka
   sampling: "Yes"
   notes: Java 8+, meant to be used for off-the-shelf components like Kafka Connectors, KSQL or Kafka REST Proxy. Instrumentation for Kafka Clients and Kafka Streams are included as Brave instrumentation.
+
+- language: Go
+  library: >-
+    [zipkin-instrumentation-sql](https://github.com/jcchavezs/zipkin-instrumentation-sql)
+  framework: Any
+  notes: SQL Wrapper for golang database/sql
+
+- language: PHP
+  library: >-
+    [zipkin-instrumentation-symfony](https://github.com/jcchavezs/zipkin-instrumentation-symfony)
+  framework: >-
+    [Symfony](https://symfony.com/)
+  propagation: "B3"
+  transports: "http, log file"
+  sampling: "Yes"
+  notes: A Zipkin integration for Symfony applications 
+
+- language: PHP
+  library: >-
+    [zipkin-instrumentation-doctrine](https://github.com/jcchavezs/zipkin-instrumentation-doctrine)
+  framework: >-
+    [Doctrine](https://www.doctrine-project.org/)
+  notes: Zipkin instrumentation for Doctrine ORM
+
+- language: PHP
+  library: >-
+    [zipkin-instrumentation-guzzle](https://github.com/jcchavezs/zipkin-instrumentation-guzzle)
+  framework: >-
+    [Guzzle](http://docs.guzzlephp.org)
+  notes: Zipkin instrumentation for Guzzle HTTP Client


[incubator-zipkin-website] 16/16: First pass at meeting ASF requirements for website (#1)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit efa7178ed4cb090b334c4656cd5f35c7dc10fc0d
Author: Brian Devins-Suresh <ba...@gmail.com>
AuthorDate: Wed Mar 20 20:58:40 2019 -0400

    First pass at meeting ASF requirements for website (#1)
---
 .gitignore             |  1 +
 _includes/sidebar.html | 12 +++++++++---
 _layouts/default.html  | 15 +++++++++++++++
 public/css/zipkin.css  |  8 ++++++++
 4 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 45c1505..12fbc18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 _site
 .sass-cache
 .jekyll-metadata
+.idea
diff --git a/_includes/sidebar.html b/_includes/sidebar.html
index 7a3d507..8a04b50 100644
--- a/_includes/sidebar.html
+++ b/_includes/sidebar.html
@@ -21,9 +21,15 @@
           {% endif %}
         {% endif %}
       {% endfor %}
-
     </nav>
-
-    <p>&copy; {{ site.time | date: '%Y' }}. All rights reserved.</p>
+    <nav>
+      <span>Apache Links</span>
+      <a class="sidebar-nav-item" href="http://www.apache.org/">Apache Software Foundation</a>
+      <a class="sidebar-nav-item" href="http://www.apache.org/licenses/">License</a>
+      <a class="sidebar-nav-item" href="http://www.apache.org/events/current-event">Events</a>
+      <a class="sidebar-nav-item" href="http://www.apache.org/foundation/thanks">Thanks</a>
+      <a class="sidebar-nav-item" href="http://www.apache.org/security">Security</a>
+      <a class="sidebar-nav-item" href="http://www.apache.org/foundation/sponsorship">Sponsor Apache</a>
+    </nav>
   </div>
 </div>
diff --git a/_layouts/default.html b/_layouts/default.html
index c438350..54b1e3f 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -11,5 +11,20 @@
       {{ content }}
     </div>
 
+    <footer class="content container">
+      <p class="disclaimer">
+        <strong>Disclaimer</strong><br/>
+        Apache Zipkin (incubating) is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored
+        by Incubator. Incubation is required of all newly accepted projects until a further review indicates that the
+        infrastructure, communications, and decision making process have stabilized in a manner consistent with other
+        successful ASF projects. While incubation status is not necessarily a reflection of the completeness or
+        stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
+      </p>
+      <p class="notice">
+        &copy; {{ site.time | date: '%Y' }}, the Apache Software Foundation, Apache Zipkin, Zipkin, Apache, the Apache
+        feather Logo, and the Apache Zipkin project logo are either registered trademarks or trademarks of the Apache
+        Software Foundation.
+      </p>
+    </footer>
   </body>
 </html>
diff --git a/public/css/zipkin.css b/public/css/zipkin.css
index 720163b..0696911 100644
--- a/public/css/zipkin.css
+++ b/public/css/zipkin.css
@@ -51,3 +51,11 @@ table.wide-table td {
 table.wide-table th {
   font-size: 0.8em;
 }
+
+p.disclaimer {
+  font-size: 0.8em;
+}
+
+p.notice {
+  font-size: 0.8em;
+}
\ No newline at end of file


[incubator-zipkin-website] 08/16: Kafka interceptor and storage (#123)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit a543d732e4c5355770b6007fbab07e1bd60ddeaa
Author: Jorge Quilcate Otoya <qu...@gmail.com>
AuthorDate: Mon Mar 4 17:37:59 2019 +0100

    Kafka interceptor and storage (#123)
---
 _data/community_extensions.yml              |  6 ++++++
 _data/community_tracers_instrumentation.yml | 12 +++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/_data/community_extensions.yml b/_data/community_extensions.yml
index 200c6e4..726b8b3 100644
--- a/_data/community_extensions.yml
+++ b/_data/community_extensions.yml
@@ -4,3 +4,9 @@
   product: >-
     [Scouter APM](https://github.com/scouter-project/scouter)
   notes: only supports sending to an Scouter
+- type: Storage
+  module: >-
+    [zipkin-storage-kafka](https://github.com/jeqo/zipkin-storage-kafka)
+  product: >-
+    [Apache kafka](https://kafka.apache.org/)
+  notes: Supports aggregation and indexing of tracing data via Kafka Streams State Store.
\ No newline at end of file
diff --git a/_data/community_tracers_instrumentation.yml b/_data/community_tracers_instrumentation.yml
index b0ea0db..7f4b379 100644
--- a/_data/community_tracers_instrumentation.yml
+++ b/_data/community_tracers_instrumentation.yml
@@ -60,7 +60,7 @@
   library: >-
     [cassandra-zipkin-tracing](https://github.com/thelastpickle/cassandra-zipkin-tracing)
   framework: >-
-    [Apache Cassandra](http://cassandra.apache.org)
+    [Apache Cassandra](https://cassandra.apache.org)
   propagation: CQL (B3)
   transports: Http, Kafka, Scribe
   sampling: "Yes"
@@ -267,3 +267,13 @@
   transports: "http, log file"
   sampling: "Yes"
   notes: Zipkin V2 client with OpenTracing API
+
+- language: Java
+  library: >-
+    [kafka-interceptor-zipkin](https://github.com/sysco-middleware/kafka-interceptor-zipkin)
+  framework: >-
+    [Apache Kafka](https://kafka.apache.org)
+  propagation: "B3"
+  transports: Http, Kafka
+  sampling: "Yes"
+  notes: Java 8+, meant to be used for off-the-shelf components like Kafka Connectors, KSQL or Kafka REST Proxy. Instrumentation for Kafka Clients and Kafka Streams are included as Brave instrumentation.


[incubator-zipkin-website] 07/16: fixes kafka08 note

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit fa264020327dfe033b4f718c3a20e7352dbfbc67
Author: Adrian Cole <ad...@users.noreply.github.com>
AuthorDate: Tue Jan 8 09:04:59 2019 +0800

    fixes kafka08 note
---
 _data/openzipkin_extensions.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_data/openzipkin_extensions.yml b/_data/openzipkin_extensions.yml
index deabfe7..b181a92 100644
--- a/_data/openzipkin_extensions.yml
+++ b/_data/openzipkin_extensions.yml
@@ -38,7 +38,7 @@
     [zipkin-collector kafka08](https://github.com/openzipkin/zipkin/tree/master/zipkin-autoconfigure/collector-kafka08)
   product: >-
     [Apache kafka](https://kafka.apache.org/)
-  notes: Kafka 8.2.2+
+  notes: Only use this for Legacy Kafka 0.8-0.9 The default server includes support for Kafka 0.10+
 
 - type: Collector
   module: >-


[incubator-zipkin-website] 15/16: Added Jenkinsfile

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit d20b51d3617df8a23724e140fe781c109d6b0081
Author: Zoltán Nagy <ab...@apache.org>
AuthorDate: Sun Nov 4 13:20:31 2018 +0000

    Added Jenkinsfile
---
 Jenkinsfile | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..4068696
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,99 @@
+pipeline {
+	agent {
+		label 'git-websites'
+	}
+
+	options {
+		buildDiscarder(logRotator(numToKeepStr: '10'))
+		timestamps()
+	}
+
+	triggers {
+		pollSCM('H/15 * * * *')
+	}
+
+	stages {
+		stage('SCM Checkout') {
+			steps {
+				deleteDir()
+				checkout scm
+			}
+		}
+
+		stage('Check environment') {
+			steps {
+				sh 'env'
+				sh 'pwd'
+				sh 'ls'
+				sh 'alias'
+				sh 'git config --list --local'
+				sh 'git config --list --global'
+				sh 'git status'
+			}
+		}
+
+		stage('Install Jekyll') {
+			steps {
+				sh '''
+				. "${rvm_path}/scripts/rvm"
+				set -e
+				gem install bundler
+				bundle install
+				'''
+			}
+		}
+
+		stage('Build site') {
+			steps {
+				sh '''
+				. "${rvm_path}/scripts/rvm"
+				set -e 
+				bundle exec jekyll build --verbose
+				'''
+				sh 'ls -lR _site'
+			}
+		}
+
+		stage('Publish') {
+			steps {
+				sh '''
+				set -xeuo pipefail
+
+				srchash="$(git rev-parse --short HEAD)"
+				commitmsg="Automatic site generation from ${srchash}"
+
+				builddir="$(mktemp -d)"
+				mv _site "${builddir}/"
+				ls -lR "${builddir}/_site/"
+
+				git fetch origin
+				git reset --hard
+				git checkout asf-site
+				git log -3
+				git status
+
+				rsync -avrh --delete --exclude=".git" "${builddir}/_site/" ./
+				git status
+				git diff
+
+				git add .
+
+				if [ -z "$(git status --porcelain)" ]; then
+					echo 'No changes to commit/push'
+				else
+					git commit -m "$commitmsg"
+					git pull --rebase
+					git log asf-site -3
+					git push origin asf-site
+				fi
+				'''
+			}
+		}
+	}
+
+	post {
+		always {
+			deleteDir()
+		}
+	}
+}


[incubator-zipkin-website] 12/16: Adding haystack to supported extensions (#127)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 22eb99b8bd85d981d6009c4ccfbf5447a6f7bf98
Author: Raghvendra Singh <ra...@gmail.com>
AuthorDate: Fri Apr 19 15:03:21 2019 +0530

    Adding haystack to supported extensions (#127)
    
    * Adding haystack to supported extensions
    
    * Making the type for haystack as Reporter
---
 _data/community_extensions.yml | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/_data/community_extensions.yml b/_data/community_extensions.yml
index 726b8b3..dc4df03 100644
--- a/_data/community_extensions.yml
+++ b/_data/community_extensions.yml
@@ -9,4 +9,10 @@
     [zipkin-storage-kafka](https://github.com/jeqo/zipkin-storage-kafka)
   product: >-
     [Apache kafka](https://kafka.apache.org/)
-  notes: Supports aggregation and indexing of tracing data via Kafka Streams State Store.
\ No newline at end of file
+  notes: Supports aggregation and indexing of tracing data via Kafka Streams State Store.
+- type: Reporter
+  module: >-
+    [spring-cloud-sleuth-haystack-reporter](https://github.com/ExpediaDotCom/spring-cloud-sleuth-haystack-reporter)
+  product: >-
+    [Haystack](https://github.com/ExpediaDotCom/haystack)
+  notes: Supports sending data to Haystack, a resilient, scalable tracing and analysis system.


[incubator-zipkin-website] 02/16: Update kamon-zipkin link label

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 729675e0edee007209f09d46769030c0d4c750ea
Author: Jakub Kozłowski <ku...@gmail.com>
AuthorDate: Fri Dec 28 19:05:31 2018 +0100

    Update kamon-zipkin link label
---
 _data/community_instrumentations.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_data/community_instrumentations.yml b/_data/community_instrumentations.yml
index 083854f..b0ea0db 100644
--- a/_data/community_instrumentations.yml
+++ b/_data/community_instrumentations.yml
@@ -201,7 +201,7 @@
 
 - language: Scala
   library: >-
-    [sttp](https://github.com/kamon-io/kamon-zipkin)
+    [kamon-zipkin](https://github.com/kamon-io/kamon-zipkin)
   framework: >-
     [akka](https://doc.akka.io/docs/akka/current/index.html),
     [akka-http](https://doc.akka.io/docs/akka-http/current/index.html),


[incubator-zipkin-website] 13/16: Temporary duct-tape to revive https://zipkin.io/zipkin-api/

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit 956ce8c0e5a69d71230e7eff5a84ba2668eec9f8
Author: Zoltan Nagy <ab...@gmail.com>
AuthorDate: Sun Apr 21 21:24:45 2019 +0100

    Temporary duct-tape to revive https://zipkin.io/zipkin-api/
    
    See https://github.com/apache/incubator-zipkin-api/issues/62
---
 public/zipkin-api/404.html                         | 137 ++++++
 public/zipkin-api/CONTRIBUTING.md                  |   9 +
 public/zipkin-api/LICENSE                          | 201 ++++++++
 public/zipkin-api/README.md                        |  14 +
 public/zipkin-api/config.json                      |   3 +
 public/zipkin-api/favicon-16x16.png                | Bin 0 -> 445 bytes
 public/zipkin-api/favicon-32x32.png                | Bin 0 -> 1141 bytes
 public/zipkin-api/index.html                       |  95 ++++
 public/zipkin-api/package.json                     |  27 ++
 public/zipkin-api/swagger-ui-bundle.js             |  81 ++++
 public/zipkin-api/swagger-ui-bundle.js.map         |   1 +
 public/zipkin-api/swagger-ui-standalone-preset.js  |  13 +
 .../zipkin-api/swagger-ui-standalone-preset.js.map |   1 +
 public/zipkin-api/swagger-ui.css                   |   2 +
 public/zipkin-api/swagger-ui.css.map               |   1 +
 public/zipkin-api/swagger-ui.js                    |   8 +
 public/zipkin-api/swagger-ui.js.map                |   1 +
 public/zipkin-api/thrift/zipkinCore.thrift         | 507 +++++++++++++++++++++
 public/zipkin-api/thrift/zipkinDependencies.thrift |  38 ++
 public/zipkin-api/validate.js                      |  31 ++
 public/zipkin-api/zipkin-api.yaml                  | 423 +++++++++++++++++
 public/zipkin-api/zipkin.proto                     | 213 +++++++++
 public/zipkin-api/zipkin2-api.yaml                 | 464 +++++++++++++++++++
 23 files changed, 2270 insertions(+)

diff --git a/public/zipkin-api/404.html b/public/zipkin-api/404.html
new file mode 100644
index 0000000..2a43bd3
--- /dev/null
+++ b/public/zipkin-api/404.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Page Not Found :(</title><style>
+            ::-moz-selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+
+            ::selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+
+            html {
+                padding: 30px 10px;
+                font-size: 20px;
+                line-height: 1.4;
+                color: #737373;
+                background: #f0f0f0;
+                -webkit-text-size-adjust: 100%;
+                -ms-text-size-adjust: 100%;
+            }
+
+            html,
+            input {
+                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+            }
+
+            body {
+                max-width: 500px;
+                _width: 500px;
+                padding: 30px 20px 50px;
+                border: 1px solid #b3b3b3;
+                border-radius: 4px;
+                margin: 0 auto;
+                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
+                background: #fcfcfc;
+            }
+
+            h1 {
+                margin: 0 10px;
+                font-size: 50px;
+                text-align: center;
+            }
+
+            h1 span {
+                color: #bbb;
+            }
+
+            h3 {
+                margin: 1.5em 0 0.5em;
+            }
+
+            p {
+                margin: 1em 0;
+            }
+
+            ul {
+                padding: 0 0 0 40px;
+                margin: 1em 0;
+            }
+
+            .container {
+                max-width: 380px;
+                _width: 380px;
+                margin: 0 auto;
+            }
+
+            /* google search */
+
+            #goog-fixurl ul {
+                list-style: none;
+                padding: 0;
+                margin: 0;
+            }
+
+            #goog-fixurl form {
+                margin: 0;
+            }
+
+            #goog-wm-qt,
+            #goog-wm-sb {
+                border: 1px solid #bbb;
+                font-size: 16px;
+                line-height: normal;
+                vertical-align: top;
+                color: #444;
+                border-radius: 2px;
+            }
+
+            #goog-wm-qt {
+                width: 220px;
+                height: 20px;
+                padding: 5px;
+                margin: 5px 10px 0 0;
+                box-shadow: inset 0 1px 1px #ccc;
+            }
+
+            #goog-wm-sb {
+                display: inline-block;
+                height: 32px;
+                padding: 0 10px;
+                margin: 5px 0 0;
+                white-space: nowrap;
+                cursor: pointer;
+                background-color: #f5f5f5;
+                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                -webkit-appearance: none;
+                -moz-appearance: none;
+                appearance: none;
+                *overflow: visible;
+                *display: inline;
+                *zoom: 1;
+            }
+
+            #goog-wm-sb:hover,
+            #goog-wm-sb:focus {
+                border-color: #aaa;
+                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+                background-color: #f8f8f8;
+            }
+
+            #goog-wm-qt:hover,
+            #goog-wm-qt:focus {
+                border-color: #105cb6;
+                outline: 0;
+                color: #222;
+            }
+
+            input::-moz-focus-inner {
+                padding: 0;
+                border: 0;
+            }
+        </style></head><body><div class="container"><h1>Not found <span>:(</span></h1><p>Sorry, but the page you were trying to view does not exist.</p><p>It looks like this was the result of either:</p><ul><li>a mistyped address</li><li>an out-of-date link</li></ul><script>
+                var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
+            </script><script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script></div></body></html>
\ No newline at end of file
diff --git a/public/zipkin-api/CONTRIBUTING.md b/public/zipkin-api/CONTRIBUTING.md
new file mode 100644
index 0000000..c947d23
--- /dev/null
+++ b/public/zipkin-api/CONTRIBUTING.md
@@ -0,0 +1,9 @@
+# Contributing to Zipkin
+
+If you would like to contribute code you can do so through GitHub by forking the repository and sending a pull request (on a branch other than `master` or `gh-pages`).
+
+## License
+
+By contributing your code, you agree to license your contribution under the terms of the APLv2: https://github.com/openzipkin/zipkin/blob/master/LICENSE
+
+All files are released with the Apache 2.0 license.
diff --git a/public/zipkin-api/LICENSE b/public/zipkin-api/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/public/zipkin-api/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   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.
diff --git a/public/zipkin-api/README.md b/public/zipkin-api/README.md
new file mode 100644
index 0000000..617a077
--- /dev/null
+++ b/public/zipkin-api/README.md
@@ -0,0 +1,14 @@
+# Zipkin API
+
+[![Build Status](https://travis-ci.org/openzipkin/zipkin-api.svg?branch=master)](https://travis-ci.org/openzipkin/zipkin-api)
+
+This repo includes an [OpenAPI Spec](./zipkin-api.yaml) and [Protocol Buffers interchange format](./zipkin.proto).
+
+## Language independent interchange format for Zipkin transports
+* [Protocol Buffers v3](./zipkin.proto) - Requires Zipkin 2.8+ or similar to parse it.
+
+## OpenApi (Http endpoint of the zipkin server)
+* [/api/v1](./zipkin-api.yaml) - Still supported on zipkin-server
+* [/api/v2](./zipkin2-api.yaml) - Most recent and published [here](http://zipkin.io/zipkin-api/#/)
+
+Take a look at the [example repository](https://github.com/openzipkin/zipkin-api-example) for how to use this.
diff --git a/public/zipkin-api/config.json b/public/zipkin-api/config.json
new file mode 100644
index 0000000..425cf2f
--- /dev/null
+++ b/public/zipkin-api/config.json
@@ -0,0 +1,3 @@
+{
+  "loadSwaggerFrom": "./zipkin2-api.yaml"
+}
diff --git a/public/zipkin-api/favicon-16x16.png b/public/zipkin-api/favicon-16x16.png
new file mode 100644
index 0000000..0f7e13b
Binary files /dev/null and b/public/zipkin-api/favicon-16x16.png differ
diff --git a/public/zipkin-api/favicon-32x32.png b/public/zipkin-api/favicon-32x32.png
new file mode 100644
index 0000000..b0a3352
Binary files /dev/null and b/public/zipkin-api/favicon-32x32.png differ
diff --git a/public/zipkin-api/index.html b/public/zipkin-api/index.html
new file mode 100644
index 0000000..1ee425e
--- /dev/null
+++ b/public/zipkin-api/index.html
@@ -0,0 +1,95 @@
+<!-- HTML for static distribution bundle build -->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>Swagger UI</title>
+  <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
+  <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
+  <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
+  <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+  <style>
+    html
+    {
+      box-sizing: border-box;
+      overflow: -moz-scrollbars-vertical;
+      overflow-y: scroll;
+    }
+    *,
+    *:before,
+    *:after
+    {
+      box-sizing: inherit;
+    }
+
+    body {
+      margin:0;
+      background: #fafafa;
+    }
+  </style>
+</head>
+
+<body>
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
+  <defs>
+    <symbol viewBox="0 0 20 20" id="unlocked">
+          <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
+    </symbol>
+
+    <symbol viewBox="0 0 20 20" id="locked">
+      <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
+    </symbol>
+
+    <symbol viewBox="0 0 20 20" id="close">
+      <path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
+    </symbol>
+
+    <symbol viewBox="0 0 20 20" id="large-arrow">
+      <path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
+    </symbol>
+
+    <symbol viewBox="0 0 20 20" id="large-arrow-down">
+      <path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
+    </symbol>
+
+
+    <symbol viewBox="0 0 24 24" id="jump-to">
+      <path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
+    </symbol>
+
+    <symbol viewBox="0 0 24 24" id="expand">
+      <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
+    </symbol>
+
+  </defs>
+</svg>
+
+<div id="swagger-ui"></div>
+
+<script src="./swagger-ui-bundle.js"> </script>
+<script src="./swagger-ui-standalone-preset.js"> </script>
+<script>
+window.onload = function() {
+  
+  // Build a system
+  const ui = SwaggerUIBundle({
+    url: "https://zipkin.io/zipkin-api/zipkin2-api.yaml",
+    dom_id: '#swagger-ui',
+    deepLinking: true,
+    presets: [
+      SwaggerUIBundle.presets.apis,
+      SwaggerUIStandalonePreset
+    ],
+    plugins: [
+      SwaggerUIBundle.plugins.DownloadUrl
+    ],
+    layout: "StandaloneLayout"
+  })
+
+  window.ui = ui
+}
+</script>
+</body>
+
+</html>
diff --git a/public/zipkin-api/package.json b/public/zipkin-api/package.json
new file mode 100644
index 0000000..d31c803
--- /dev/null
+++ b/public/zipkin-api/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "zipkin-api",
+  "version": "0.0.0",
+  "description": "Zipkin API ",
+  "main": "validate.js",
+  "scripts": {
+    "test": "node validate.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/openzipkin/zipkin-api.git"
+  },
+  "keywords": [
+    "zipkin",
+    "api"
+  ],
+  "author": "",
+  "license": "ASL",
+  "bugs": {
+    "url": "https://github.com/openzipkin/zipkin-api/issues"
+  },
+  "homepage": "https://github.com/openzipkin/zipkin-api#readme",
+  "devDependencies": {
+    "js-yaml": "^3.6.0",
+    "sway": "^1.0.0"
+  }
+}
diff --git a/public/zipkin-api/swagger-ui-bundle.js b/public/zipkin-api/swagger-ui-bundle.js
new file mode 100644
index 0000000..df85dc8
--- /dev/null
+++ b/public/zipkin-api/swagger-ui-bundle.js
@@ -0,0 +1,81 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{c [...]
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+var i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmn [...]
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var Y=n(593),$=n(706),Z=n(364);t.Buffer=o,t.SlowBuffer=m,t.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=r(),o.poolSize=8192,o._augment=function(e){return e.__proto__=o.prototype,e},o.from=function(e,t,n){return a( [...]
+ * @description Recursive object extending
+ * @author Viacheslav Lotsmanov <lo...@gmail.com>
+ * @license MIT
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2013-2015 Viacheslav Lotsmanov
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function i(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?Array.isArray(e)?t[a]=i(e):n(e)?t[a]=r(e):t[a]=o({},e):t[a]=e}),t}var o=e.exports=function(){if(arguments.length<1||"object"! [...]
+ * Checks if an event is supported in the current execution environment.
+ *
+ * NOTE: This will not work correctly for non-generic events such as `change`,
+ * `reset`, `load`, `error`, and `select`.
+ *
+ * Borrows from Modernizr.
+ *
+ * @param {string} eventNameSuffix Event name, e.g. "click".
+ * @param {?boolean} capture Check if the capture phase is supported.
+ * @return {boolean} True if the event is supported.
+ * @internal
+ * @license Modernizr 3.0.0pre (Custom Build) | MIT
+ */
+function r(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&i&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var i,o=n(22);o.canUseDOM&&(i=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=r},function(e,t,n){"use strict";function r(e,t){va [...]
+ * Autolinker.js
+ * 0.15.3
+ *
+ * Copyright(c) 2015 Gregory Jacobs <gr...@greg-jacobs.com>
+ * MIT Licensed. http://www.opensource.org/licenses/mit-license.php
+ *
+ * https://github.com/gregjacobs/Autolinker.js
+ */
+var e=function(t){e.Util.assign(this,t)};return e.prototype={constructor:e,urls:!0,email:!0,twitter:!0,newWindow:!0,stripPrefix:!0,truncate:void 0,className:"",htmlParser:void 0,matchParser:void 0,tagBuilder:void 0,link:function(e){for(var t=this.getHtmlParser(),n=t.parse(e),r=0,i=[],o=0,a=n.length;o<a;o++){var s=n[o],u=s.getType(),c=s.getText();if("element"===u)"a"===s.getTagName()&&(s.isClosing()?r=Math.max(r-1,0):r++),i.push(c);else if("entity"===u)i.push(c);else if(0===r){var l=this. [...]
+ * Bowser - a browser detector
+ * https://github.com/ded/bowser
+ * MIT License | (c) Dustin Diaz 2015
+ */
+!function(t,r,i){void 0!==e&&e.exports?e.exports=i():n(1230)("bowser",i)}(0,0,function(){function e(e){function t(t){var n=e.match(t);return n&&n.length>1&&n[1]||""}var n,r=t(/(ipod|iphone|ipad)/i).toLowerCase(),i=/like android/i.test(e),o=!i&&/android/i.test(e),s=/nexus\s*[0-6]\s*/i.test(e),u=!s&&/nexus\s*[0-9]+/i.test(e),c=/CrOS/.test(e),l=/silk/i.test(e),p=/sailfish/i.test(e),f=/tizen/i.test(e),h=/(web|hpw)os/i.test(e),d=/windows phone/i.test(e),m=(/SamsungBrowser/i.test(e),!d&&/windo [...]
+if(String.fromCodePoint)e.exports=function(e){try{return String.fromCodePoint(e)}catch(e){if(e instanceof RangeError)return String.fromCharCode(65533);throw e}};else{var r=String.fromCharCode,i=Math.floor,o=function(){var e,t,n=[],o=-1,a=arguments.length;if(!a)return"";for(var s="";++o<a;){var u=Number(arguments[o]);if(!isFinite(u)||u<0||u>1114111||i(u)!==u)return String.fromCharCode(65533);u<=65535?n.push(u):(u-=65536,e=55296+(u>>10),t=u%1024+56320,n.push(e,t)),(o+1===a||n.length>16384) [...]
+ * https://github.com/Starcounter-Jack/JSON-Patch
+ * json-patch-duplex.js version: 1.1.10
+ * (c) 2013 Joachim Wester
+ * MIT license
+ */
+var n;if(function(e){function t(e,n){switch(typeof e){case"undefined":case"boolean":case"string":case"number":return e===n;case"object":if(null===e)return null===n;if(S(e)){if(!S(n)||e.length!==n.length)return!1;for(var r=0,i=e.length;r<i;r++)if(!t(e[r],n[r]))return!1;return!0}var o=y(n),a=o.length;if(y(e).length!==a)return!1;for(var r=0;r<a;r++)if(!t(e[r],n[r]))return!1;return!0;default:return!1}}function n(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace [...]
+ * pascalcase <https://github.com/jonschlinkert/pascalcase>
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+function n(e){if("string"!=typeof e)throw new TypeError("expected a string.");return e=e.replace(/([A-Z])/g," $1"),1===e.length?e.toUpperCase():(e=e.replace(/^[\W_]+|[\W_]+$/g,"").toLowerCase(),e=e.charAt(0).toUpperCase()+e.slice(1),e.replace(/[\W_]+(\w|$)/g,function(e,t){return t.toUpperCase()}))}e.exports=n},function(e,t,n){"use strict";function r(e,t,n,r,i){}e.exports=r},function(e,t,n){"use strict";var r=n(26),i=n(7),o=n(403);e.exports=function(){function e(e,t,n,r,a,s){s!==o&&i(!1," [...]
+String.prototype.repeat||function(){"use strict";var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch(e){}return n}(),t=function(e){if(null==this)throw TypeError();var t=String(this),n=e?Number(e):0;if(n!=n&&(n=0),n<0||n==1/0)throw RangeError();for(var r="";n;)n%2==1&&(r+=t),n>1&&(t+=t),n>>=1;return r};e?e(String.prototype,"repeat",{value:t,configurable:!0,writable:!0}):String.prototype.repeat=t}()},function(e,t,n){var r=n(69),i=n(39),o=r(i,"DataView");e.exports=o},f [...]
+//# sourceMappingURL=swagger-ui-bundle.js.map
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui-bundle.js.map b/public/zipkin-api/swagger-ui-bundle.js.map
new file mode 100644
index 0000000..4f3e8b1
--- /dev/null
+++ b/public/zipkin-api/swagger-ui-bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;;;;;AAoyKA;;;;;;AAm/EA;;;;;;;;;;;;;;;;;;;;;;;;;;AAs6TA;;;;;;;;;;;;;;AAs8JA;;;;;;;;;AAogpBA;;;;;AAk1QA;AAm4DA;;;;;;AAo4YA;;;;;;AA8jaA;AAumvBA","sourceRoot":""}
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui-standalone-preset.js b/public/zipkin-api/swagger-ui-standalone-preset.js
new file mode 100644
index 0000000..7604d76
--- /dev/null
+++ b/public/zipkin-api/swagger-ui-standalone-preset.js
@@ -0,0 +1,13 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SwaggerUIStandalonePreset=e():t.SwaggerUIStandalonePreset=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.d [...]
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+var i=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmn [...]
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var V=n(139),$=n(174),Z=n(175);e.Buffer=s,e.SlowBuffer=m,e.INSPECT_MAX_BYTES=50,s.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=r(),s.poolSize=8192,s._augment=function(t){return t.__proto__=s.prototype,t},s.from=function(t,e,n){return o( [...]
+//# sourceMappingURL=swagger-ui-standalone-preset.js.map
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui-standalone-preset.js.map b/public/zipkin-api/swagger-ui-standalone-preset.js.map
new file mode 100644
index 0000000..b31b700
--- /dev/null
+++ b/public/zipkin-api/swagger-ui-standalone-preset.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"swagger-ui-standalone-preset.js","sources":["webpack:///swagger-ui-standalone-preset.js"],"mappings":"AAAA;;;;;AA21CA;;;;;;AAspFA","sourceRoot":""}
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui.css b/public/zipkin-api/swagger-ui.css
new file mode 100644
index 0000000..a75d9db
--- /dev/null
+++ b/public/zipkin-api/swagger-ui.css
@@ -0,0 +1,2 @@
+.swagger-ui{font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .wrapper{width:100%;max-width:1460px;margin:0 auto;padding:0 20px}.swagger-ui .opblock-tag-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swagger-ui .opblock-tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 20px 10 [...]
+/*# sourceMappingURL=swagger-ui.css.map*/
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui.css.map b/public/zipkin-api/swagger-ui.css.map
new file mode 100644
index 0000000..dbf47ea
--- /dev/null
+++ b/public/zipkin-api/swagger-ui.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"swagger-ui.css","sources":[],"mappings":"","sourceRoot":""}
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui.js b/public/zipkin-api/swagger-ui.js
new file mode 100644
index 0000000..2ac676c
--- /dev/null
+++ b/public/zipkin-api/swagger-ui.js
@@ -0,0 +1,8 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types"),require("immutable"),require("react-immutable-proptypes"),require("reselect"),require("serialize-error"),require("deep-extend"),require("react-collapse"),require("swagger-client"),require("base64-js"),require("ieee754"),require("isarray"),require("js-yaml"),require("memoizee"),require("react-dom"),require("react-markdown"),require("react-redux"),require("react-remarkab [...]
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var G=n(510),X=n(511),Z=n(512);t.Buffer=a,t.SlowBuffer=m,t.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=r(),a.poolSize=8192,a._augment=function(e){return e.__proto__=a.prototype,e},a.from=function(e,t,n){return u( [...]
+//# sourceMappingURL=swagger-ui.js.map
\ No newline at end of file
diff --git a/public/zipkin-api/swagger-ui.js.map b/public/zipkin-api/swagger-ui.js.map
new file mode 100644
index 0000000..95e79fd
--- /dev/null
+++ b/public/zipkin-api/swagger-ui.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AA0/cA","sourceRoot":""}
\ No newline at end of file
diff --git a/public/zipkin-api/thrift/zipkinCore.thrift b/public/zipkin-api/thrift/zipkinCore.thrift
new file mode 100644
index 0000000..3db9a91
--- /dev/null
+++ b/public/zipkin-api/thrift/zipkinCore.thrift
@@ -0,0 +1,507 @@
+# Copyright 2012 Twitter Inc.
+#
+# 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.
+namespace java com.twitter.zipkin.thriftjava
+#@namespace scala com.twitter.zipkin.thriftscala
+namespace rb Zipkin
+
+#************** Annotation.value **************
+/**
+ * The client sent ("cs") a request to a server. There is only one send per
+ * span. For example, if there's a transport error, each attempt can be logged
+ * as a WIRE_SEND annotation.
+ *
+ * If chunking is involved, each chunk could be logged as a separate
+ * CLIENT_SEND_FRAGMENT in the same span.
+ *
+ * Annotation.host is not the server. It is the host which logged the send
+ * event, almost always the client. When logging CLIENT_SEND, instrumentation
+ * should also log the SERVER_ADDR.
+ */
+const string CLIENT_SEND = "cs"
+/**
+ * The client received ("cr") a response from a server. There is only one
+ * receive per span. For example, if duplicate responses were received, each
+ * can be logged as a WIRE_RECV annotation.
+ *
+ * If chunking is involved, each chunk could be logged as a separate
+ * CLIENT_RECV_FRAGMENT in the same span.
+ *
+ * Annotation.host is not the server. It is the host which logged the receive
+ * event, almost always the client. The actual endpoint of the server is
+ * recorded separately as SERVER_ADDR when CLIENT_SEND is logged.
+ */
+const string CLIENT_RECV = "cr"
+/**
+ * The server sent ("ss") a response to a client. There is only one response
+ * per span. If there's a transport error, each attempt can be logged as a
+ * WIRE_SEND annotation.
+ *
+ * Typically, a trace ends with a server send, so the last timestamp of a trace
+ * is often the timestamp of the root span's server send.
+ *
+ * If chunking is involved, each chunk could be logged as a separate
+ * SERVER_SEND_FRAGMENT in the same span.
+ *
+ * Annotation.host is not the client. It is the host which logged the send
+ * event, almost always the server. The actual endpoint of the client is
+ * recorded separately as CLIENT_ADDR when SERVER_RECV is logged.
+ */
+const string SERVER_SEND = "ss"
+/**
+ * The server received ("sr") a request from a client. There is only one
+ * request per span.  For example, if duplicate responses were received, each
+ * can be logged as a WIRE_RECV annotation.
+ *
+ * Typically, a trace starts with a server receive, so the first timestamp of a
+ * trace is often the timestamp of the root span's server receive.
+ *
+ * If chunking is involved, each chunk could be logged as a separate
+ * SERVER_RECV_FRAGMENT in the same span.
+ *
+ * Annotation.host is not the client. It is the host which logged the receive
+ * event, almost always the server. When logging SERVER_RECV, instrumentation
+ * should also log the CLIENT_ADDR.
+ */
+const string SERVER_RECV = "sr"
+/**
+ * Message send ("ms") is a request to send a message to a destination, usually
+ * a broker. This may be the only annotation in a messaging span. If WIRE_SEND
+ * exists in the same span, it follows this moment and clarifies delays sending
+ * the message, such as batching.
+ *
+ * Unlike RPC annotations like CLIENT_SEND, messaging spans never share a span
+ * ID. For example, "ms" should always be the parent of "mr".
+ *
+ * Annotation.host is not the destination, it is the host which logged the send
+ * event: the producer. When annotating MESSAGE_SEND, instrumentation should
+ * also tag the MESSAGE_ADDR.
+ */
+const string MESSAGE_SEND = "ms"
+/**
+ * A consumer received ("mr") a message from a broker. This may be the only
+ * annotation in a messaging span. If WIRE_RECV exists in the same span, it
+ * precedes this moment and clarifies any local queuing delay.
+ *
+ * Unlike RPC annotations like SERVER_RECV, messaging spans never share a span
+ * ID. For example, "mr" should always be a child of "ms" unless it is a root
+ * span.
+ *
+ * Annotation.host is not the broker, it is the host which logged the receive
+ * event: the consumer.  When annotating MESSAGE_RECV, instrumentation should
+ * also tag the MESSAGE_ADDR.
+ */
+const string MESSAGE_RECV = "mr"
+/**
+ * Optionally logs an attempt to send a message on the wire. Multiple wire send
+ * events could indicate network retries. A lag between client or server send
+ * and wire send might indicate queuing or processing delay.
+ */
+const string WIRE_SEND = "ws"
+/**
+ * Optionally logs an attempt to receive a message from the wire. Multiple wire
+ * receive events could indicate network retries. A lag between wire receive
+ * and client or server receive might indicate queuing or processing delay.
+ */
+const string WIRE_RECV = "wr"
+/**
+ * Optionally logs progress of a (CLIENT_SEND, WIRE_SEND). For example, this
+ * could be one chunk in a chunked request.
+ */
+const string CLIENT_SEND_FRAGMENT = "csf"
+/**
+ * Optionally logs progress of a (CLIENT_RECV, WIRE_RECV). For example, this
+ * could be one chunk in a chunked response.
+ */
+const string CLIENT_RECV_FRAGMENT = "crf"
+/**
+ * Optionally logs progress of a (SERVER_SEND, WIRE_SEND). For example, this
+ * could be one chunk in a chunked response.
+ */
+const string SERVER_SEND_FRAGMENT = "ssf"
+/**
+ * Optionally logs progress of a (SERVER_RECV, WIRE_RECV). For example, this
+ * could be one chunk in a chunked request.
+ */
+const string SERVER_RECV_FRAGMENT = "srf"
+
+#***** BinaryAnnotation.key ******
+/**
+ * The domain portion of the URL or host header. Ex. "mybucket.s3.amazonaws.com"
+ *
+ * Used to filter by host as opposed to ip address.
+ */
+const string HTTP_HOST = "http.host"
+
+/**
+ * The HTTP method, or verb, such as "GET" or "POST".
+ *
+ * Used to filter against an http route.
+ */
+const string HTTP_METHOD = "http.method"
+
+/**
+ * The absolute http path, without any query parameters. Ex. "/objects/abcd-ff"
+ *
+ * Used as a filter or to clarify the request path for a given route. For example, the path for
+ * a route "/objects/:objectId" could be "/objects/abdc-ff". This does not limit cardinality like
+ * HTTP_ROUTE("http.route") can, so is not a good input to a span name.
+ *
+ * The Zipkin query api only supports equals filters. Dropping query parameters makes the number
+ * of distinct URIs less. For example, one can query for the same resource, regardless of signing
+ * parameters encoded in the query line. Dropping query parameters also limits the security impact
+ * of this tag.
+ *
+ * Historical note: This was commonly expressed as "http.uri" in zipkin, even though it was most
+ */
+const string HTTP_PATH = "http.path"
+
+/**
+ * The route which a request matched or "" (empty string) if routing is supported, but there was no
+ * match. Ex "/users/{userId}"
+ *
+ * Unlike HTTP_PATH("http.path"), this value is fixed cardinality, so is a safe input to a span
+ * name function or a metrics dimension. Different formats are possible. For example, the following
+ * are all valid route templates: "/users" "/users/:userId" "/users/*"
+ *
+ * Route-based span name generation often uses other tags, such as HTTP_METHOD("http.method") and
+ * HTTP_STATUS_CODE("http.status_code"). Route-based names can look like "get /users/{userId}",
+ * "post /users", "get not_found" or "get redirected".
+ */
+const string HTTP_ROUTE = "http.route"
+
+/**
+ * The entire URL, including the scheme, host and query parameters if available. Ex.
+ * "https://mybucket.s3.amazonaws.com/objects/abcd-ff?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Algorithm=AWS4-HMAC-SHA256..."
+ *
+ * Combined with HTTP_METHOD, you can understand the fully-qualified request line.
+ *
+ * This is optional as it may include private data or be of considerable length.
+ */
+const string HTTP_URL = "http.url"
+
+/**
+ * The HTTP status code, when not in 2xx range. Ex. "503"
+ *
+ * Used to filter for error status.
+ */
+const string HTTP_STATUS_CODE = "http.status_code"
+
+/**
+ * The size of the non-empty HTTP request body, in bytes. Ex. "16384"
+ *
+ * Large uploads can exceed limits or contribute directly to latency.
+ */
+const string HTTP_REQUEST_SIZE = "http.request.size"
+
+/**
+ * The size of the non-empty HTTP response body, in bytes. Ex. "16384"
+ *
+ * Large downloads can exceed limits or contribute directly to latency.
+ */
+const string HTTP_RESPONSE_SIZE = "http.response.size"
+
+/**
+ * The value of "lc" is the component or namespace of a local span.
+ *
+ * BinaryAnnotation.host adds service context needed to support queries.
+ *
+ * Local Component("lc") supports three key features: flagging, query by
+ * service and filtering Span.name by namespace.
+ *
+ * While structurally the same, local spans are fundamentally different than
+ * RPC spans in how they should be interpreted. For example, zipkin v1 tools
+ * center on RPC latency and service graphs. Root local-spans are neither
+ * indicative of critical path RPC latency, nor have impact on the shape of a
+ * service graph. By flagging with "lc", tools can special-case local spans.
+ *
+ * Zipkin v1 Spans are unqueryable unless they can be indexed by service name.
+ * The only path to a service name is by (Binary)?Annotation.host.serviceName.
+ * By logging "lc", a local span can be queried even if no other annotations
+ * are logged.
+ *
+ * The value of "lc" is the namespace of Span.name. For example, it might be
+ * "finatra2", for a span named "bootstrap". "lc" allows you to resolves
+ * conflicts for the same Span.name, for example "finatra/bootstrap" vs
+ * "finch/bootstrap". Using local component, you'd search for spans named
+ * "bootstrap" where "lc=finch"
+ */
+const string LOCAL_COMPONENT = "lc"
+
+#***** Annotation.value or BinaryAnnotation.key ******
+/**
+ * When an annotation value, this indicates when an error occurred. When a
+ * binary annotation key, the value is a human readable message associated
+ * with an error.
+ *
+ * Due to transient errors, an ERROR annotation should not be interpreted
+ * as a span failure, even the annotation might explain additional latency.
+ * Instrumentation should add the ERROR binary annotation when the operation
+ * failed and couldn't be recovered.
+ *
+ * Here's an example: A span has an ERROR annotation, added when a WIRE_SEND
+ * failed. Another WIRE_SEND succeeded, so there's no ERROR binary annotation
+ * on the span because the overall operation succeeded.
+ *
+ * Note that RPC spans often include both client and server hosts: It is
+ * possible that only one side perceived the error.
+ */
+const string ERROR = "error"
+
+#***** BinaryAnnotation.key where value = [1] and annotation_type = BOOL ******
+/**
+ * Indicates a client address ("ca") in a span. Most likely, there's only one.
+ * Multiple addresses are possible when a client changes its ip or port within
+ * a span.
+ */
+const string CLIENT_ADDR = "ca"
+/**
+ * Indicates a server address ("sa") in a span. Most likely, there's only one.
+ * Multiple addresses are possible when a client is redirected, or fails to a
+ * different server ip or port.
+ */
+const string SERVER_ADDR = "sa"
+/**
+ * Indicates the remote address of a messaging span, usually the broker.
+ */
+const string MESSAGE_ADDR = "ma"
+
+/**
+ * Indicates the network context of a service recording an annotation with two
+ * exceptions.
+ *
+ * When a BinaryAnnotation, and key is CLIENT_ADDR or SERVER_ADDR,
+ * the endpoint indicates the source or destination of an RPC. This exception
+ * allows zipkin to display network context of uninstrumented services, or
+ * clients such as web browsers.
+ */
+struct Endpoint {
+  /**
+   * IPv4 host address packed into 4 bytes.
+   *
+   * Ex for the ip 1.2.3.4, it would be (1 << 24) | (2 << 16) | (3 << 8) | 4
+   */
+  1: i32 ipv4
+  /**
+   * IPv4 port or 0, if unknown.
+   *
+   * Note: this is to be treated as an unsigned integer, so watch for negatives.
+   */
+  2: i16 port
+  /**
+   * Classifier of a source or destination in lowercase, such as "zipkin-web".
+   *
+   * This is the primary parameter for trace lookup, so should be intuitive as
+   * possible, for example, matching names in service discovery.
+   *
+   * Conventionally, when the service name isn't known, service_name = "unknown".
+   * However, it is also permissible to set service_name = "" (empty string).
+   * The difference in the latter usage is that the span will not be queryable
+   * by service name unless more information is added to the span with non-empty
+   * service name, e.g. an additional annotation from the server.
+   *
+   * Particularly clients may not have a reliable service name at ingest. One
+   * approach is to set service_name to "" at ingest, and later assign a
+   * better label based on binary annotations, such as user agent.
+   */
+  3: string service_name
+  /**
+   * IPv6 host address packed into 16 bytes. Ex Inet6Address.getBytes()
+   */
+  4: optional binary ipv6
+}
+
+/**
+ * Associates an event that explains latency with a timestamp.
+ *
+ * Unlike log statements, annotations are often codes: for example "sr".
+ */
+struct Annotation {
+  /**
+   * Microseconds from epoch.
+   *
+   * This value should use the most precise value possible. For example,
+   * gettimeofday or multiplying currentTimeMillis by 1000.
+   */
+  1: i64 timestamp
+  /**
+   * Usually a short tag indicating an event, like "sr" or "finagle.retry".
+   */
+  2: string value
+  /**
+   * The host that recorded the value, primarily for query by service name.
+   */
+  3: optional Endpoint host
+  // don't reuse 4: optional i32 OBSOLETE_duration         // how long did the operation take? microseconds
+}
+
+/**
+ * A subset of thrift base types, except BYTES.
+ */
+enum AnnotationType {
+  /**
+   * Set to 0x01 when key is CLIENT_ADDR or SERVER_ADDR
+   */
+  BOOL,
+  /**
+   * No encoding, or type is unknown.
+   */
+  BYTES,
+  I16,
+  I32,
+  I64,
+  DOUBLE,
+  /**
+   * the only type zipkin v1 supports search against.
+   */
+  STRING
+}
+
+/**
+ * Binary annotations are tags applied to a Span to give it context. For
+ * example, a binary annotation of HTTP_PATH ("http.path") could the path
+ * to a resource in a RPC call.
+ *
+ * Binary annotations of type STRING are always queryable, though more a
+ * historical implementation detail than a structural concern.
+ *
+ * Binary annotations can repeat, and vary on the host. Similar to Annotation,
+ * the host indicates who logged the event. This allows you to tell the
+ * difference between the client and server side of the same key. For example,
+ * the key "http.path" might be different on the client and server side due to
+ * rewriting, like "/api/v1/myresource" vs "/myresource. Via the host field,
+ * you can see the different points of view, which often help in debugging.
+ */
+struct BinaryAnnotation {
+  /**
+   * Name used to lookup spans, such as "http.path" or "finagle.version".
+   */
+  1: string key,
+  /**
+   * Serialized thrift bytes, in TBinaryProtocol format.
+   *
+   * For legacy reasons, byte order is big-endian. See THRIFT-3217.
+   */
+  2: binary value,
+  /**
+   * The thrift type of value, most often STRING.
+   *
+   * annotation_type shouldn't vary for the same key.
+   */
+  3: AnnotationType annotation_type,
+  /**
+   * The host that recorded value, allowing query by service name or address.
+   *
+   * There are two exceptions: when key is "ca" or "sa", this is the source or
+   * destination of an RPC. This exception allows zipkin to display network
+   * context of uninstrumented services, such as browsers or databases.
+   */
+  4: optional Endpoint host
+}
+
+/**
+ * A trace is a series of spans (often RPC calls) which form a latency tree.
+ *
+ * Spans are usually created by instrumentation in RPC clients or servers, but
+ * can also represent in-process activity. Annotations in spans are similar to
+ * log statements, and are sometimes created directly by application developers
+ * to indicate events of interest, such as a cache miss.
+ *
+ * The root span is where parent_id = Nil; it usually has the longest duration
+ * in the trace.
+ *
+ * Span identifiers are packed into i64s, but should be treated opaquely.
+ * String encoding is fixed-width lower-hex, to avoid signed interpretation.
+ */
+struct Span {
+  /**
+   * Unique 8-byte identifier for a trace, set on all spans within it.
+   */
+  1: i64 trace_id
+  /**
+   * Span name in lowercase, rpc method for example. Conventionally, when the
+   * span name isn't known, name = "unknown".
+   */
+  3: string name,
+  /**
+   * Unique 8-byte identifier of this span within a trace. A span is uniquely
+   * identified in storage by (trace_id, id).
+   */
+  4: i64 id,
+  /**
+   * The parent's Span.id; absent if this the root span in a trace.
+   */
+  5: optional i64 parent_id,
+  /**
+   * Associates events that explain latency with a timestamp. Unlike log
+   * statements, annotations are often codes: for example SERVER_RECV("sr").
+   * Annotations are sorted ascending by timestamp.
+   */
+  6: list<Annotation> annotations,
+  /**
+   * Tags a span with context, usually to support query or aggregation. For
+   * example, a binary annotation key could be "http.path".
+   */
+  8: list<BinaryAnnotation> binary_annotations
+  /**
+   * True is a request to store this span even if it overrides sampling policy.
+   */
+  9: optional bool debug = 0
+  /**
+   * Epoch microseconds of the start of this span, absent if this an incomplete
+   * span.
+   *
+   * This value should be set directly by instrumentation, using the most
+   * precise value possible. For example, gettimeofday or syncing nanoTime
+   * against a tick of currentTimeMillis.
+   *
+   * For compatibility with instrumentation that precede this field, collectors
+   * or span stores can derive this via Annotation.timestamp.
+   * For example, SERVER_RECV.timestamp or CLIENT_SEND.timestamp.
+   *
+   * Timestamp is nullable for input only. Spans without a timestamp cannot be
+   * presented in a timeline: Span stores should not output spans missing a
+   * timestamp.
+   *
+   * There are two known edge-cases where this could be absent: both cases
+   * exist when a collector receives a span in parts and a binary annotation
+   * precedes a timestamp. This is possible when..
+   *  - The span is in-flight (ex not yet received a timestamp)
+   *  - The span's start event was lost
+   */
+  10: optional i64 timestamp,
+  /**
+   * Measurement in microseconds of the critical path, if known. Durations of
+   * less than one microsecond must be rounded up to 1 microsecond.
+   *
+   * This value should be set directly, as opposed to implicitly via annotation
+   * timestamps. Doing so encourages precision decoupled from problems of
+   * clocks, such as skew or NTP updates causing time to move backwards.
+   *
+   * For compatibility with instrumentation that precede this field, collectors
+   * or span stores can derive this by subtracting Annotation.timestamp.
+   * For example, SERVER_SEND.timestamp - SERVER_RECV.timestamp.
+   *
+   * If this field is persisted as unset, zipkin will continue to work, except
+   * duration query support will be implementation-specific. Similarly, setting
+   * this field non-atomically is implementation-specific.
+   *
+   * This field is i64 vs i32 to support spans longer than 35 minutes.
+   */
+  11: optional i64 duration
+  /**
+   * Optional unique 8-byte additional identifier for a trace. If non zero, this
+   * means the trace uses 128 bit traceIds instead of 64 bit.
+   */
+  12: optional i64 trace_id_high
+}
diff --git a/public/zipkin-api/thrift/zipkinDependencies.thrift b/public/zipkin-api/thrift/zipkinDependencies.thrift
new file mode 100644
index 0000000..30ce57d
--- /dev/null
+++ b/public/zipkin-api/thrift/zipkinDependencies.thrift
@@ -0,0 +1,38 @@
+# Copyright 2013 Twitter Inc.
+#
+# 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.
+namespace java com.twitter.zipkin.thriftjava
+#@namespace scala com.twitter.zipkin.thriftscala
+namespace rb Zipkin
+
+struct DependencyLink {
+  /** parent service name (caller) */
+  1: string parent
+  /** child service name (callee) */
+  2: string child
+  # 3: Moments OBSOLETE_duration_moments
+  /** total traced calls made from parent to child */
+  4: i64 callCount
+  /** how many calls are known to be errors */
+  5: i64 errorCount
+  # histogram?
+}
+
+/* An aggregate representation of services paired with every service they call. */
+struct Dependencies {
+  /** milliseconds from epoch */
+  1: i64 start_ts
+  /** milliseconds from epoch */
+  2: i64 end_ts
+  3: list<DependencyLink> links
+}
diff --git a/public/zipkin-api/validate.js b/public/zipkin-api/validate.js
new file mode 100644
index 0000000..b7e7140
--- /dev/null
+++ b/public/zipkin-api/validate.js
@@ -0,0 +1,31 @@
+'use strict';
+
+const Sway = require('sway');
+const read = require('fs').readFileSync;
+const load = require('js-yaml').load;
+const yamls = ['./zipkin-api.yaml', './zipkin2-api.yaml'];
+
+yamls.forEach(yaml => {
+  const zipkinAPI = read(yaml).toString();
+
+  Sway.create({definition: load(zipkinAPI)}).then(api => {
+    const result = api.validate();
+
+    if (result.errors.length) {
+      console.error(`Validation failed for ${yaml}`)
+      console.error(JSON.stringify(result.errors));
+      return;
+    }
+
+    if (result.warnings.length) {
+      console.warn(`Warnings in ${yaml}:`)
+      console.warn(JSON.stringify(result.warnings));
+    }
+
+    console.log(`Validation of ${yaml} passed`);
+  })
+  .catch(error=> {
+    console.error(`Error loading ${yaml}`);
+    console.error(error);
+  });
+});
diff --git a/public/zipkin-api/zipkin-api.yaml b/public/zipkin-api/zipkin-api.yaml
new file mode 100644
index 0000000..3330b64
--- /dev/null
+++ b/public/zipkin-api/zipkin-api.yaml
@@ -0,0 +1,423 @@
+swagger: "2.0"
+info:
+  version: "1.0.0"
+  title: Zipkin API
+  description: |
+    Zipkin's Query api is rooted at `api/v1`, on a host that by default listens
+    on port 9411. It primarily serves the zipkin-ui, although it includes a POST
+    endpoint that can receive spans.
+host: localhost:9411
+basePath: /api/v1
+schemes:
+  - http
+  - https
+consumes:
+  - application/json
+produces:
+  - application/json
+paths:
+  /services:
+    get:
+      description: |
+        Returns a list of all service names associated with annotations.
+      responses:
+        '200':
+          description: Succes
+          schema:
+            type: array
+            items:
+              type: string
+        '400':
+          description: Bad Request Error
+  /spans:
+    get:
+      description: Get all the span names logged by a particular service
+      parameters:
+      - name: serviceName
+        in: query
+        required: true
+        description: |
+          Ex zipkin-server (required) - service that logged an annotation in a
+          trace. The /services endpoint enumerates possible input values.
+        type: string
+      responses:
+        '200':
+          description: OK
+          schema:
+            type: array
+            items:
+              type: string
+        '400':
+          description: Bad Request Error
+    post:
+      description: |
+          Uploads a list of spans encoded per content-type, for example json
+          or thrift (TBinaryProtocol big-endian).
+      consumes:
+        - application/json
+        - application/x-thrift
+      produces: []
+      parameters:
+        - name: span
+          in: body
+          description: A list of spans that belong to any trace.
+          required: true
+          schema:
+            $ref: "#/definitions/ListOfSpans"
+      responses:
+        '202':
+          description: Accepted
+  /traces:
+    get:
+      description: |
+          Invoking this request retrieves traces matching the below filters.
+
+          Results should be filtered against endTs, subject to limit and
+          lookback. For example, if endTs is 10:20 today, limit is 10, and
+          lookback is 7 days, traces returned should be those nearest to 10:20
+          today, not 10:20 a week ago.
+
+          Time units of endTs and lookback are milliseconds as opposed to
+          microseconds, the grain of Span.timestamp. Milliseconds is a more
+          familiar and supported granularity for query, index and windowing
+          functions
+      parameters:
+        - name: serviceName
+          in: query
+          required: false
+          description: |
+            Ex zipkin-server - service that logged an annotation in a trace.
+            Required when constraining on parameters except time and duration.
+            The /services endpoint enumerates possible input values.
+          type: string
+        - name: spanName
+          in: query
+          required: false
+          description: |
+            Ex my_span_name - name of a span in a trace.
+            Only return traces that contains spans with this name.
+          type: string
+        - name: annotationQuery
+          in: query
+          type: string
+          required: false
+          description: |
+             Ex. `http.uri=/foo and retried` - If key/value (has an `=`),
+             constrains against Span.binaryAnnotations of time string. If just
+             a word, constrains against Span.annotations. Any values are AND
+             against eachother. This means a span in the trace must match all of
+             these.
+        - name: minDuration
+          in: query
+          type: integer
+          description: |
+             Ex. 100000 (for 100ms). Only return traces whose `Span.duration` is
+             greater than or equal to minDuration microseconds.
+        - name: maxDuration
+          in: query
+          type: integer
+          description: |
+            Only return traces whose Span.duration is less than or equal to
+            `maxDuration` microseconds. Only valid with minDuration.
+        - name: endTs
+          in: query
+          type: integer
+          format: int64
+          description: |
+            Only return traces where all Span.timestamp are at or before this
+            time in epoch milliseconds. Defaults to current time.
+        - name: lookback
+          type: integer
+          format: int64
+          in: query
+          description: |
+            Only return traces where all Span.timestamp are at or after
+            (`endTs - * lookback`) in milliseconds. Defaults to `endTs`, limited
+            to a system parameter `QUERY_LOOKBACK`.
+        - name: limit
+          in: query
+          default: 10
+          type: integer
+          description: |
+            Maximum number of traces to return. Defaults to 10
+      responses:
+        '200':
+          description: OK
+          schema:
+            $ref: "#/definitions/ListOfTraces"
+  /trace/{traceId}:
+    get:
+      parameters:
+        - name: traceId
+          in: path
+          required: true
+          description: the 64 or 128-bit hex-encoded id of the trace as a path parameter.
+          type: string
+        - name: raw
+          in: query
+          required: false
+          description: |
+            Note this flag has no value. Ex. /trace/{traceId}?raw
+
+            Normally, the trace endpoint cleans trace data. For example, it merges
+            spans by id, adds missing timestamp or duration, corrects clock skew..
+
+            Specifying this flag is a debug case, when you are debugging zipkin
+            logic or zipkin instrumentation, and want to see the input to these
+            adjusters. For example, this might explain or rule out clock skew.
+          type: boolean
+      responses:
+        '200':
+          description: OK
+          schema:
+            $ref: "#/definitions/Trace"
+        '404':
+          description: "`traceId` not found"
+  /dependencies:
+    get:
+      description: |
+        Returns dependency links derived from spans.
+
+        Span names are in lowercase, rpc method for example. Conventionally,
+        when the span name isn't known, name = "unknown".
+      parameters:
+        - name: endTs
+          in: query
+          description: |
+            Only return links from spans where `Span.timestamp` are at or before
+            this time in epoch milliseconds.
+          required: true
+          type: integer
+          format: int64
+        - name: lookback
+          in: query
+          description: |
+            Only return links from spans where all Span.timestamp are at or after
+            (`endTs - * lookback`) in milliseconds. Defaults to `endTs`, limited
+            to a system parameter `QUERY_LOOKBACK`.
+          type: integer
+          format: int64
+      responses:
+        '200':
+          description: OK
+          schema:
+            type: array
+            title: ListOfDependencyLinks
+            items:
+              $ref: "#/definitions/DependencyLink"
+definitions:
+  Endpoint:
+    type: object
+    title: Endpoint
+    description: The network context of a node in the service graph
+    required:
+      - serviceName
+    properties:
+      serviceName:
+        type: string
+        description: |
+                    Lower-case label of this node in the service graph, such as "favstar". Set
+                    to empty string if unknown.
+                    
+                    This is a primary label for trace lookup and aggregation, so it should be
+                    intuitive and consistent. Many use a name from service discovery.
+      ipv4:
+        type: string
+        format: ipv4
+        description: |
+                    The text representation of the primary IPv4 address associated with this
+                    connection. Ex. 192.168.99.100 Absent if unknown.
+      ipv6:
+        type: string
+        format: ipv6
+        description: |
+                    The text representation of the primary IPv6 address associated with a
+                    connection. Ex. 2001:db8::c001 Absent if unknown.
+                    
+                    Prefer using the ipv4 field for mapped addresses.
+      port:
+        type: integer
+        description: |
+                    Depending on context, this could be a listen port or the client-side of a
+                    socket. Absent if unknown. Please don't set to zero.
+  Annotation:
+    title: Annotation
+    type: object
+    required:
+      - timestamp
+      - value
+    description: |
+                Associates an event that explains latency with a timestamp.
+                Unlike log statements, annotations are often codes. Ex. "sr" for ServerReceive
+    properties:     
+      timestamp:
+        type: integer
+        description: |
+                    Epoch **microseconds** of this event.
+                    
+                    For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+                    
+                    This value should be set directly by instrumentation, using the most precise
+                    value possible. For example, gettimeofday or multiplying epoch millis by 1000.
+      value:
+        type: string
+        description: |
+                  Usually a short tag indicating an event, like "sr"
+                  
+                  While possible to add larger data, such as garbage collection details, low
+                  cardinality event names both keep the size of spans down and also are easy
+                  to search against.
+      endpoint:
+        $ref: "#/definitions/Endpoint"
+        description: |
+                    The host that recorded this span, primarily for query by service name.
+                    
+                    Instrumentation should always record this. Usually, absent implies late
+                    data. The IP address corresponding to this is usually the site local or
+                    advertised service address. When present, the port indicates the listen
+                    port.
+  BinaryAnnotation:
+    title: BinaryAnnotation
+    type: object
+    required:
+      - key
+      - value
+    description: |
+                Adds context to a span, for search, viewing and analysis.
+                
+                For example, a key "your_app.version" would let you lookup traces by version.
+                A tag "sql.query" isn't searchable, but it can help in debugging when viewing
+                a trace.
+    properties:
+      key:
+        type: string
+      value:
+        type: string
+      endpoint:
+        $ref: "#/definitions/Endpoint"
+        description: |
+                    The host that recorded this span, primarily for query by service name.
+                    
+                    There is an exception, when the key is "sa", "ca" or "ma" this is an
+                    address annotation. In such case, the endpoint is not what recorded the
+                    span, rather the remote address. The value field is set to boolean true
+                    in this case. This feature was refactored in v2 format as "remoteEndpoint"
+  ListOfSpans:
+    title: ListOfSpans
+    description: 'A list of spans with possibly different trace ids, in no particular order'
+    type: array
+    items:
+      $ref: "#/definitions/Span"
+  Trace:
+    title: Trace
+    type: array
+    description: 'List of spans who have the same trace id. Spans in the trace, and annotations in a span are sorted ascending by timestamp. ie first event should be first in the spans list.'
+    items:
+      $ref: "#/definitions/Span"
+  ListOfTraces:
+    title: ListOfTraces
+    type: array
+    items:
+      $ref: "#/definitions/Trace"
+  Span:
+    title: Span
+    type: object
+    required:
+      - traceId
+      - id
+      - name
+    properties:
+      traceId:
+        type: string
+        maxLength: 32
+        minLength: 16
+        pattern: "[a-z0-9]{16,32}"
+        description: |
+                    Randomly generated, unique identifier for a trace, set on all spans within it.
+                    
+                    Encoded as 16 or 32 lowercase hex characters corresponding to 64 or 128 bits.
+                    For example, a 128bit trace ID looks like 4e441824ec2b6a44ffdc9bb9a6453df3
+      name:
+        type: string
+        description: |
+                    The logical operation this span represents in lowercase (e.g. rpc method).
+                    Set to empty string if unknown.
+                    
+                    As these are lookup labels, take care to ensure names are low cardinality.
+                    For example, do not embed variables into the name.
+      parentId:
+        type: string
+        pattern: "[a-z0-9]{16}"
+        maxLength: 16
+        minLength: 16
+        description: 'The parent span ID or absent if this the root span in a trace.'
+      id:
+        type: string
+        maxLength: 16
+        minLength: 16
+        pattern: "[a-z0-9]{16}"
+        description: |
+                    Unique 64bit identifier for this operation within the trace.
+                    
+                    Encoded as 16 lowercase hex characters. For example ffdc9bb9a6453df3
+      timestamp:
+        type: integer
+        format: int64
+        description: |
+                    Epoch microseconds of the start of this span, possibly absent if
+                    incomplete.
+                    
+                    For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+                    
+                    This value should be set directly by instrumentation, using the most
+                    precise value possible. For example, gettimeofday or multiplying epoch
+                    millis by 1000.
+                    
+                    There are three known edge-cases where this could be reported absent.
+                     * A span was allocated but never started (ex not yet received a timestamp)
+                     * The span's start event was lost
+                     * Data about a completed span (ex tags) were sent after the fact
+      duration:
+        type: integer
+        format: int64
+        minimum: 1
+        description: |
+                    Duration in **microseconds** of the critical path, if known. Durations of less
+                    than one are rounded up. Duration of children can be longer than their
+                    parents due to asynchronous operations.
+                    
+                    For example 150 milliseconds is 150000 microseconds.
+      debug:
+        type: boolean
+        description: |
+                    True is a request to store this span even if it overrides sampling policy.
+                    
+                    This is true when the `X-B3-Flags` header has a value of 1.
+      annotations:
+        title: ListOfAnnotations
+        type: array
+        description: 'Associates events that explain latency with the time they happened.'
+        items:
+          $ref: '#/definitions/Annotation'
+      binaryAnnotations:
+        title: ListOfBinaryAnnotations
+        type: array
+        description: 'Binary Annotations are tags that give your span context for search, viewing and analysis.'
+        items:
+          $ref: '#/definitions/BinaryAnnotation'
+  DependencyLink:
+    title: DependencyLink
+    type: object
+    required:
+      - parent
+      - child
+      - callCount
+    properties:
+      parent:
+        type: string
+      child:
+        type: string
+      callCount:
+        type: integer
+      errorCount:
+        type: integer
diff --git a/public/zipkin-api/zipkin.proto b/public/zipkin-api/zipkin.proto
new file mode 100644
index 0000000..9a4b336
--- /dev/null
+++ b/public/zipkin-api/zipkin.proto
@@ -0,0 +1,213 @@
+// Copyright 2018 The OpenZipkin 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.
+
+syntax = "proto3";
+
+package zipkin.proto3;
+
+// In Java, the closest model type to this proto is in the "zipkin2" package
+option java_package = "zipkin2.proto3";
+option java_multiple_files = true;
+
+// A span is a single-host view of an operation. A trace is a series of spans
+// (often RPC calls) which nest to form a latency tree. Spans are in the same
+// trace when they share the same trace ID. The parent_id field establishes the
+// position of one span in the tree.
+//
+// The root span is where parent_id is Absent and usually has the longest
+// duration in the trace. However, nested asynchronous work can materialize as
+// child spans whose duration exceed the root span.
+//
+// Spans usually represent remote activity such as RPC calls, or messaging
+// producers and consumers. However, they can also represent in-process
+// activity in any position of the trace. For example, a root span could
+// represent a server receiving an initial client request. A root span could
+// also represent a scheduled job that has no remote context.
+//
+// Encoding notes:
+//
+// Epoch timestamp are encoded fixed64 as varint would also be 8 bytes, and more
+// expensive to encode and size. Duration is stored uint64, as often the numbers
+// are quite small.
+//
+// Default values are ok, as only natural numbers are used. For example, zero is
+// an invalid timestamp and an invalid duration, false values for debug or shared
+// are ignorable, and zero-length strings also coerce to null.
+//
+// The next id is 14.
+//
+// Note fields up to 15 take 1 byte to encode. Take care when adding new fields
+// https://developers.google.com/protocol-buffers/docs/proto3#assigning-tags
+message Span {
+  // Randomly generated, unique identifier for a trace, set on all spans within
+  // it.
+  //
+  // This field is required and encoded as 8 or 16 opaque bytes.
+  bytes trace_id = 1;
+  // The parent span ID or absent if this the root span in a trace.
+  bytes parent_id = 2;
+  // Unique identifier for this operation within the trace.
+  //
+  // This field is required and encoded as 8 opaque bytes.
+  bytes id = 3;
+  // When present, kind clarifies timestamp, duration and remote_endpoint. When
+  // absent, the span is local or incomplete. Unlike client and server, there
+  // is no direct critical path latency relationship between producer and
+  // consumer spans.
+  enum Kind {
+    // Default value interpreted as absent.
+    SPAN_KIND_UNSPECIFIED = 0;
+    // The span represents the client side of an RPC operation, implying the
+    // following:
+    //
+    // timestamp is the moment a request was sent to the server.
+    // duration is the delay until a response or an error was received.
+    // remote_endpoint is the server.
+    CLIENT = 1;
+    // The span represents the server side of an RPC operation, implying the
+    // following:
+    //
+    // timestamp is the moment a client request was received.
+    // duration is the delay until a response was sent or an error.
+    // remote_endpoint is the client.
+    SERVER = 2;
+    // The span represents production of a message to a remote broker, implying
+    // the following:
+    //
+    // timestamp is the moment a message was sent to a destination.
+    // duration is the delay sending the message, such as batching.
+    // remote_endpoint is the broker.
+    PRODUCER = 3;
+    // The span represents consumption of a message from a remote broker, not
+    // time spent servicing it. For example, a message processor would be an
+    // in-process child span of a consumer. Consumer spans imply the following:
+    //
+    // timestamp is the moment a message was received from an origin.
+    // duration is the delay consuming the message, such as from backlog.
+    // remote_endpoint is the broker.
+    CONSUMER = 4;
+  }
+  // When present, used to interpret remote_endpoint
+  Kind kind = 4;
+  // The logical operation this span represents in lowercase (e.g. rpc method).
+  // Leave absent if unknown.
+  //
+  // As these are lookup labels, take care to ensure names are low cardinality.
+  // For example, do not embed variables into the name.
+  string name = 5;
+  // Epoch microseconds of the start of this span, possibly absent if
+  // incomplete.
+  //
+  // For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+  //
+  // This value should be set directly by instrumentation, using the most
+  // precise value possible. For example, gettimeofday or multiplying epoch
+  // millis by 1000.
+  //
+  // There are three known edge-cases where this could be reported absent.
+  // - A span was allocated but never started (ex not yet received a timestamp)
+  // - The span's start event was lost
+  // - Data about a completed span (ex tags) were sent after the fact
+  fixed64 timestamp = 6;
+  // Duration in microseconds of the critical path, if known. Durations of less
+  // than one are rounded up. Duration of children can be longer than their
+  // parents due to asynchronous operations.
+  //
+  // For example 150 milliseconds is 150000 microseconds.
+  uint64 duration = 7;
+  // The host that recorded this span, primarily for query by service name.
+  //
+  // Instrumentation should always record this. Usually, absent implies late
+  // data. The IP address corresponding to this is usually the site local or
+  // advertised service address. When present, the port indicates the listen
+  // port.
+  Endpoint local_endpoint = 8;
+  // When an RPC (or messaging) span, indicates the other side of the
+  // connection.
+  //
+  // By recording the remote endpoint, your trace will contain network context
+  // even if the peer is not tracing. For example, you can record the IP from
+  // the "X-Forwarded-For" header or the service name and socket of a remote
+  // peer.
+  Endpoint remote_endpoint = 9;
+  // Associates events that explain latency with the time they happened.
+  repeated Annotation annotations = 10;
+  // Tags give your span context for search, viewing and analysis.
+  //
+  // For example, a key "your_app.version" would let you lookup traces by
+  // version. A tag "sql.query" isn't searchable, but it can help in debugging
+  // when viewing a trace.
+  map<string, string> tags = 11;
+  // True is a request to store this span even if it overrides sampling policy.
+  //
+  // This is true when the "X-B3-Flags" header has a value of 1.
+  bool debug = 12;
+  // True if we are contributing to a span started by another tracer (ex on a
+  // different host).
+  bool shared = 13;
+}
+
+// The network context of a node in the service graph.
+//
+// The next id is 5.
+message Endpoint {
+  // Lower-case label of this node in the service graph, such as "favstar".
+  // Leave absent if unknown.
+  //
+  // This is a primary label for trace lookup and aggregation, so it should be
+  // intuitive and consistent. Many use a name from service discovery.
+  string service_name = 1;
+  // 4 byte representation of the primary IPv4 address associated with this
+  // connection. Absent if unknown.
+  bytes ipv4 = 2;
+  // 16 byte representation of the primary IPv6 address associated with this
+  // connection. Absent if unknown.
+  //
+  // Prefer using the ipv4 field for mapped addresses.
+  bytes ipv6 = 3;
+  // Depending on context, this could be a listen port or the client-side of a
+  // socket. Absent if unknown.
+  int32 port = 4;
+}
+
+// Associates an event that explains latency with a timestamp.
+// Unlike log statements, annotations are often codes. Ex. "ws" for WireSend
+//
+// The next id is 3.
+message Annotation {
+  // Epoch microseconds of this event.
+  //
+  // For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+  //
+  // This value should be set directly by instrumentation, using the most
+  // precise value possible. For example, gettimeofday or multiplying epoch
+  // millis by 1000.
+  fixed64 timestamp = 1;
+  // Usually a short tag indicating an event, like "error"
+  //
+  // While possible to add larger data, such as garbage collection details, low
+  // cardinality event names both keep the size of spans down and also are easy
+  // to search against.
+  string value = 2;
+}
+
+// A list of spans with possibly different trace ids, in no particular order.
+//
+// This is used for all transports: POST, Kafka messages etc. No other fields
+// are expected, This message facilitates the mechanics of encoding a list, as
+// a field number is required. The name of this type is the same in the OpenApi
+// aka Swagger specification. https://zipkin.io/zipkin-api/#/default/post_spans
+message ListOfSpans {
+  repeated Span spans = 1;
+}
diff --git a/public/zipkin-api/zipkin2-api.yaml b/public/zipkin-api/zipkin2-api.yaml
new file mode 100644
index 0000000..2aa6ff9
--- /dev/null
+++ b/public/zipkin-api/zipkin2-api.yaml
@@ -0,0 +1,464 @@
+swagger: "2.0"
+info:
+  version: "1.0.0"
+  title: Zipkin API
+  description: |
+    Zipkin's v2 api currently includes a POST endpoint that can receive spans.
+host: localhost:9411
+basePath: /api/v2
+schemes:
+  - http
+  - https
+consumes:
+  - application/json
+paths:
+  /services:
+    get:
+      description: |
+        Returns a list of all service names associated with span endpoints.
+      responses:
+        '200':
+          description: Succes
+          schema:
+            type: array
+            items:
+              type: string
+        '400':
+          description: Bad Request Error
+  /spans:
+    get:
+      description: Get all the span names recorded by a particular service
+      parameters:
+      - name: serviceName
+        in: query
+        required: true
+        description: |
+          Ex favstar (required) - Lower-case label of a node in the service
+          graph. The /services endpoint enumerates possible input values.
+        type: string
+      responses:
+        '200':
+          description: OK
+          schema:
+            type: array
+            items:
+              type: string
+        '400':
+          description: Bad Request Error  
+    post:
+      description: |
+          Uploads a list of spans encoded per content-type, for example json.
+      consumes:
+        - application/json
+        - application/x-protobuf
+      produces: []
+      parameters:
+        - name: spans
+          in: body
+          description: A list of spans that belong to any trace.
+          required: true
+          schema:
+            $ref: "#/definitions/ListOfSpans"
+      responses:
+        '202':
+          description: Accepted
+  /traces:
+    get:
+      description: |
+          Invoking this request retrieves traces matching the below filters.
+
+          Results should be filtered against endTs, subject to limit and
+          lookback. For example, if endTs is 10:20 today, limit is 10, and
+          lookback is 7 days, traces returned should be those nearest to 10:20
+          today, not 10:20 a week ago.
+
+          Time units of endTs and lookback are milliseconds as opposed to
+          microseconds, the grain of Span.timestamp. Milliseconds is a more
+          familiar and supported granularity for query, index and windowing
+          functions
+      parameters:
+        - name: serviceName
+          in: query
+          required: false
+          description: |
+            Ex favstar (required) - Lower-case label of a node in the service
+            graph. The /services endpoint enumerates possible input values.
+          type: string
+        - name: spanName
+          in: query
+          required: false
+          description: |
+            Ex get - name of a span in a trace.
+            Only return traces that contains spans with this name.
+          type: string
+        - name: annotationQuery
+          in: query
+          type: string
+          required: false
+          description: |
+             Ex. `http.uri=/foo and retried` - If key/value (has an `=`),
+             constrains against Span.tags entres. If just a word, constrains
+             against Span.annotations[].value or Span.tags[].key. Any values are
+             AND against eachother. This means a span in the trace must match
+             all of these.
+        - name: minDuration
+          in: query
+          type: integer
+          description: |
+             Ex. 100000 (for 100ms). Only return traces whose `Span.duration` is
+             greater than or equal to minDuration microseconds.
+        - name: maxDuration
+          in: query
+          type: integer
+          description: |
+            Only return traces whose Span.duration is less than or equal to
+            `maxDuration` microseconds. Only valid with minDuration.
+        - name: endTs
+          in: query
+          type: integer
+          format: int64
+          description: |
+            Only return traces where all Span.timestamp are at or before this
+            time in epoch milliseconds. Defaults to current time.
+        - name: lookback
+          type: integer
+          format: int64
+          in: query
+          description: |
+            Only return traces where all  Span.timestamp are at or after (endTs
+            - * lookback) in milliseconds. Defaults to endTs, limited to a
+            system parameter QUERY_LOOKBACK
+        - name: limit
+          in: query
+          default: 10
+          type: integer
+          description: |
+            Maximum number of traces to return. Defaults to 10
+      responses:
+        '200':
+          description: OK
+          schema:
+            $ref: "#/definitions/ListOfTraces"
+  /trace/{traceId}:
+    get:
+      parameters:
+        - name: traceId
+          in: path
+          required: true
+          type: string
+          maxLength: 32
+          minLength: 16
+          pattern: "[a-z0-9]{16,32}"
+          description: |
+                      Trace identifier, set on all spans within it.
+                      
+                      Encoded as 16 or 32 lowercase hex characters corresponding to 64 or 128 bits.
+                      For example, a 128bit trace ID looks like 4e441824ec2b6a44ffdc9bb9a6453df3
+      responses:
+        '200':
+          description: OK
+          schema:
+            $ref: "#/definitions/Trace"
+        '404':
+          description: "`traceId` not found"
+  /dependencies:
+    get:
+      description: |
+        Returns service links derived from spans.
+      parameters:
+        - name: endTs
+          in: query
+          description: |
+            only return links from spans where `Span.timestamp`  are at or before
+            this time in epoch milliseconds.
+          required: true
+          type: integer
+          format: int64
+        - name: lookback
+          in: query
+          description: |
+            only return links where all Span.timestamp are at or after
+            (`endTs - * lookback`) in milliseconds. Defaults to `endTs`, limited
+            to a system parameter `QUERY_LOOKBACK`
+          type: integer
+          format: int64
+      responses:
+        '200':
+          description: OK
+          schema:
+            type: array
+            title: ListOfDependencyLinks
+            items:
+              $ref: "#/definitions/DependencyLink"
+definitions:
+  Endpoint:
+    type: object
+    title: Endpoint
+    description: The network context of a node in the service graph
+    properties:
+      serviceName:
+        type: string
+        description: |
+                    Lower-case label of this node in the service graph, such as "favstar". Leave
+                    absent if unknown.
+                    
+                    This is a primary label for trace lookup and aggregation, so it should be
+                    intuitive and consistent. Many use a name from service discovery.
+      ipv4:
+        type: string
+        format: ipv4
+        description: |
+                    The text representation of the primary IPv4 address associated with this
+                    connection. Ex. 192.168.99.100 Absent if unknown.
+      ipv6:
+        type: string
+        format: ipv6
+        description: |
+                    The text representation of the primary IPv6 address associated with a
+                    connection. Ex. 2001:db8::c001 Absent if unknown.
+                    
+                    Prefer using the ipv4 field for mapped addresses.
+      port:
+        type: integer
+        description: |
+                    Depending on context, this could be a listen port or the client-side of a
+                    socket. Absent if unknown. Please don't set to zero.
+  Annotation:
+    title: Annotation
+    type: object
+    description: |
+                Associates an event that explains latency with a timestamp.
+                Unlike log statements, annotations are often codes. Ex. "ws" for WireSend
+                
+                Zipkin v1 core annotations such as "cs" and "sr" have been replaced with
+                Span.Kind, which interprets timestamp and duration.
+    required:
+      - timestamp
+      - value
+    properties:
+      timestamp:
+        type: integer
+        description: |
+                    Epoch **microseconds** of this event.
+                    
+                    For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+                    
+                    This value should be set directly by instrumentation, using the most precise
+                    value possible. For example, gettimeofday or multiplying epoch millis by 1000.
+      value:
+        type: string
+        description: |
+                  Usually a short tag indicating an event, like "error"
+                  
+                  While possible to add larger data, such as garbage collection details, low
+                  cardinality event names both keep the size of spans down and also are easy
+                  to search against.
+  Tags:
+    type: object
+    title: Tags
+    description: |
+                Adds context to a span, for search, viewing and analysis.
+                
+                For example, a key "your_app.version" would let you lookup traces by version.
+                A tag "sql.query" isn't searchable, but it can help in debugging when viewing
+                a trace.
+    additionalProperties:
+      type: string
+  ListOfSpans:
+    title: ListOfSpans
+    description: 'A list of spans with possibly different trace ids, in no particular order'
+    type: array
+    items:
+      $ref: "#/definitions/Span"
+  Trace:
+    title: Trace
+    type: array
+    description: 'List of spans who have the same trace ID.'
+    items:
+      $ref: "#/definitions/Span"
+  ListOfTraces:
+    title: ListOfTraces
+    type: array
+    items:
+      $ref: "#/definitions/Trace"      
+  Span:
+    title: Span
+    description: |
+                A span is a single-host view of an operation. A trace is a series of spans
+                (often RPC calls) which nest to form a latency tree. Spans are in the same
+                trace when they share the same trace ID. The parent_id field establishes the
+                position of one span in the tree.
+                 
+                The root span is where parent_id is Absent and usually has the longest
+                duration in the trace. However, nested asynchronous work can materialize as
+                child spans whose duration exceed the root span.
+                 
+                Spans usually represent remote activity such as RPC calls, or messaging
+                producers and consumers. However, they can also represent in-process
+                activity in any position of the trace. For example, a root span could
+                represent a server receiving an initial client request. A root span could
+                also represent a scheduled job that has no remote context.
+    type: object
+    required:
+      - traceId
+      - id
+    properties:
+      traceId:
+        type: string
+        maxLength: 32
+        minLength: 16
+        pattern: "[a-z0-9]{16,32}"
+        description: |
+                    Randomly generated, unique identifier for a trace, set on all spans within it.
+                    
+                    Encoded as 16 or 32 lowercase hex characters corresponding to 64 or 128 bits.
+                    For example, a 128bit trace ID looks like 4e441824ec2b6a44ffdc9bb9a6453df3
+      name:
+        type: string
+        description: |
+                    The logical operation this span represents in lowercase (e.g. rpc method).
+                    Leave absent if unknown.
+                    
+                    As these are lookup labels, take care to ensure names are low cardinality.
+                    For example, do not embed variables into the name.
+      parentId:
+        type: string
+        pattern: "[a-z0-9]{16}"
+        maxLength: 16
+        minLength: 16
+        description: 'The parent span ID or absent if this the root span in a trace.'
+      id:
+        type: string
+        pattern: "[a-z0-9]{16}"
+        maxLength: 16
+        minLength: 16
+        description: |
+                    Unique 64bit identifier for this operation within the trace.
+                    
+                    Encoded as 16 lowercase hex characters. For example ffdc9bb9a6453df3
+      kind:
+        type: string
+        enum:
+          - CLIENT
+          - SERVER
+          - PRODUCER
+          - CONSUMER
+        description: |
+                    When present, kind clarifies timestamp, duration and remoteEndpoint. When
+                    absent, the span is local or incomplete. Unlike client and server, there
+                    is no direct critical path latency relationship between producer and
+                    consumer spans.
+                    
+                    * `CLIENT`
+                      * timestamp is the moment a request was sent to the server. (in v1 "cs")
+                      * duration is the delay until a response or an error was received. (in v1 "cr"-"cs")
+                      * remoteEndpoint is the server. (in v1 "sa")
+                    * `SERVER`
+                      * timestamp is the moment a client request was received. (in v1 "sr")
+                      * duration is the delay until a response was sent or an error. (in v1 "ss"-"sr")
+                      * remote_endpoint is the client. (in v1 "ca")
+                    * `PRODUCER`
+                      * timestamp is the moment a message was sent to a destination. (in v1  "ms")
+                      * duration is the delay sending the message, such as batching.
+                      * remoteEndpoint is the broker.
+                    * `CONSUMER`
+                      * timestamp is the moment a message was received from an origin. (in v1 "mr")
+                      * duration is the delay consuming the message, such as from backlog.
+                      * remoteEndpoint - Represents the broker. Leave serviceName absent if unknown.
+      timestamp:
+        type: integer
+        format: int64
+        description: |
+                    Epoch microseconds of the start of this span, possibly absent if
+                    incomplete.
+                    
+                    For example, 1502787600000000 corresponds to 2017-08-15 09:00 UTC
+                    
+                    This value should be set directly by instrumentation, using the most
+                    precise value possible. For example, gettimeofday or multiplying epoch
+                    millis by 1000.
+                    
+                    There are three known edge-cases where this could be reported absent.
+                     * A span was allocated but never started (ex not yet received a timestamp)
+                     * The span's start event was lost
+                     * Data about a completed span (ex tags) were sent after the fact
+      duration:
+        type: integer
+        format: int64
+        minimum: 1
+        description: |
+                    Duration in **microseconds** of the critical path, if known. Durations of less
+                    than one are rounded up. Duration of children can be longer than their
+                    parents due to asynchronous operations.
+                    
+                    For example 150 milliseconds is 150000 microseconds.
+      debug:
+        type: boolean
+        description: |
+                    True is a request to store this span even if it overrides sampling policy.
+                    
+                    This is true when the `X-B3-Flags` header has a value of 1.
+      shared:
+        type: boolean
+        description: 'True if we are contributing to a span started by another tracer (ex on a different host).'
+      localEndpoint:
+        $ref: "#/definitions/Endpoint"
+        description: |
+                    The host that recorded this span, primarily for query by service name.
+                    
+                    Instrumentation should always record this. Usually, absent implies late
+                    data. The IP address corresponding to this is usually the site local or
+                    advertised service address. When present, the port indicates the listen
+                    port.
+      remoteEndpoint:
+        $ref: "#/definitions/Endpoint"
+        description: |
+                    When an RPC (or messaging) span, indicates the other side of the
+                    connection.
+                    
+                    By recording the remote endpoint, your trace will contain network context
+                    even if the peer is not tracing. For example, you can record the IP from
+                    the `X-Forwarded-For` header or the service name and socket of a remote
+                    peer.
+      annotations:
+        type: array
+        uniqueItems: true
+        items:
+          $ref: '#/definitions/Annotation'
+        description: 'Associates events that explain latency with the time they happened.'
+      tags:
+        $ref: '#/definitions/Tags'
+        description: 'Tags give your span context for search, viewing and analysis.'
+  DependencyLink:
+    title: DependencyLink
+    description: |
+                The count of traced calls between services, or between a service and a broker.
+
+                The direction of the link is parent to child, and can be one of:
+                 * client to server
+                 * producer to broker
+                 * broker to consumer
+
+                Note: This is related to span ID count between a sender and receiver, but there
+                is nuance that makes it more difficult than counting unique span IDs. Ex. the
+                parent or child might be uninstrumented: detected via the remote endpoint. There
+                can also be scenarios where both sides are instrumented. Please use existing tools
+                such as zipkin-dependencies to derive links as they avoid under or over counting.
+    type: object
+    required:
+      - parent
+      - child
+      - callCount
+    properties:
+      parent:
+        type: string
+        description: 'The service name of the caller: client or message producer or broker.'
+      child:
+        type: string
+        description: 'The service name of the callee: server or message consumer or broker.'
+      callCount:
+        type: integer
+        description: 'Total traced calls made from the parent to the child.'
+      errorCount:
+        type: integer
+        description: 'Total traced calls made from the parent to the child known to be in error.'


[incubator-zipkin-website] 03/16: Adds integration page (#119)

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

abesto pushed a commit to branch sync-from-githubio
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin-website.git

commit febd736f0e8da4fd1b4cc6cc72fc8dd53fdef40f
Author: Gunhee Lee <gu...@gmail.com>
AuthorDate: Tue Jan 1 13:56:25 2019 +0900

    Adds integration page (#119)
---
 _data/community_transport_integrations.yml  |  6 ++++
 _data/openzipkin_transport_integrations.yml | 50 +++++++++++++++++++++++++++++
 pages/existing_transport_integrations.md    | 39 ++++++++++++++++++++++
 3 files changed, 95 insertions(+)

diff --git a/_data/community_transport_integrations.yml b/_data/community_transport_integrations.yml
new file mode 100644
index 0000000..200c6e4
--- /dev/null
+++ b/_data/community_transport_integrations.yml
@@ -0,0 +1,6 @@
+- type: Storage
+  module: >-
+    [zipkin-scouter storage-scouter](https://github.com/scouter-project/zipkin-scouter)
+  product: >-
+    [Scouter APM](https://github.com/scouter-project/scouter)
+  notes: only supports sending to an Scouter
diff --git a/_data/openzipkin_transport_integrations.yml b/_data/openzipkin_transport_integrations.yml
new file mode 100644
index 0000000..deabfe7
--- /dev/null
+++ b/_data/openzipkin_transport_integrations.yml
@@ -0,0 +1,50 @@
+- type: Collector
+  module: >-
+    [zipkin-aws collector-sqs](https://github.com/openzipkin/zipkin-aws/tree/master/autoconfigure/collector-sqs)
+  product: >-
+    [AWS SQS](https://aws.amazon.com/sqs/)
+  notes:
+
+- type: Collector
+  module: >-
+    [zipkin-aws collector-kinesis](https://github.com/openzipkin/zipkin-aws/tree/master/autoconfigure/collector-kinesis)
+  product: >-
+    [AWS Kinesis](https://aws.amazon.com/kinesis/)
+  notes:
+
+- type: Storage
+  module: >-
+    [zipkin-aws storage-elasticsearch-aws](https://github.com/openzipkin/zipkin-aws/tree/master/autoconfigure/storage-elasticsearch-aws)
+  product: >-
+    [AWS Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/)
+  notes:
+
+- type: Storage
+  module: >-
+    [zipkin-aws storage-xray](https://github.com/openzipkin/zipkin-aws/tree/master/autoconfigure/storage-xray)
+  product: >-
+    [AWS X-Ray](https://aws.amazon.com/xray/)
+  notes: only supports sending to an XRay UDP daemon
+
+- type: Storage
+  module: >-
+    [zipkin-gcp storage-stackdriver](https://github.com/openzipkin/zipkin-gcp/tree/master/autoconfigure/storage-stackdriver)
+  product: >-
+    [GCP Stackdriver](https://cloud.google.com/stackdriver/)
+  notes: only supports sending to an Stackdriver
+
+- type: Collector
+  module: >-
+    [zipkin-collector kafka08](https://github.com/openzipkin/zipkin/tree/master/zipkin-autoconfigure/collector-kafka08)
+  product: >-
+    [Apache kafka](https://kafka.apache.org/)
+  notes: Kafka 8.2.2+
+
+- type: Collector
+  module: >-
+    [zipkin-collector scribe](https://github.com/openzipkin/zipkin/tree/master/zipkin-autoconfigure/collector-scribe)
+  product: >-
+    [Scribe](https://github.com/facebookarchive/scribe)
+  notes:
+
+
diff --git a/pages/existing_transport_integrations.md b/pages/existing_transport_integrations.md
new file mode 100644
index 0000000..638b101
--- /dev/null
+++ b/pages/existing_transport_integrations.md
@@ -0,0 +1,39 @@
+---
+title: Existing server integrations
+weight: 4
+---
+
+### OpenZipkin server integrations
+Zipkin server bundles integration for span collection and storage. By default spans can be collected over http, Kafka or RabbitMQ transports and stored in-memory or in MySQL, Cassandra or Elasticsearch. Zipkin is extensible with external modules which allow alternate transport or storage options. Here is a list of ones maintained by the core team.
+
+| Type | Module | Related product | Other notes |
+|:-----|:--------|:----------------|:------------|{% for integration in site.data.openzipkin_transport_integrations %}
+| {{ integration.type }} | {{ integration.module }} | {{integration.product}} | {{ integration.notes }} |{% endfor %}
+{: .wide-table}
+
+
+### Community server integrations
+   
+| Type | Module | Related product | Other notes |
+|:-----|:--------|:----------------|:------------|{% for integration in site.data.community_transport_integrations %}
+| {{ integration.type }} | {{ integration.module }} | {{integration.product}} | {{ integration.notes }} |{% endfor %}
+{: .wide-table}
+
+
+### Community server Alternatives
+Listed below are alternative servers that accept Zipkin format. Some use the same code as Zipkin on the same endpoints while others are on alternative endpoints or partially support features. In any case, these integrations aim to allow existing zipkin clients to use alternative backends the OpenZipkin team does not support. Hence, direct questions to their respective communities.
+    
+ - [Apache SkyWalking](https://github.com/apache/incubator-skywalking)
+   - When [zipkin-receiver](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/backend/backend-receivers.md) is enabled, Skywalking exposes the same HTTP POST endpoints Zipkin does
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, proto) POST requests.
+     - this integration uses the same encoding library and same endpoints as zipkin does.
+ - [jaeger](https://github.com/jaegertracing/jaeger)
+   - When `COLLECTOR_ZIPKIN_HTTP_PORT=9411` is set, Jaeger exposes a partial implementation of Zipkin's HTTP POST endpoints
+     - http port 9411 accepts `/api/v1/spans` (thrift, json) and /api/v2/spans (json, but not proto) POST requests.
+   - When `SPAN_STORAGE_TYPE=kafka` and `zipkin-thrift`, Jaeger reads zipkin v1 thrift encoded span messages from a Kafka topic.
+     - Note: The above is a [deprecated practice](https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/kafka#legacy-encoding) in Zipkin. Most instrumentation bundle multiple spans per message in v2 format.
+
+
+Did we miss an integration? Please open a pull-request to
+[openzipkin.github.io](https://github.com/openzipkin/openzipkin.github.io).
+