Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial implementation #1

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -4,9 +4,10 @@
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

target
Binary file added .mvn/wrapper/maven-wrapper.jar
Binary file not shown.
1 change: 1 addition & 0 deletions .mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
28 changes: 28 additions & 0 deletions .settings.xml
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>sonatype</id>
<username>${env.SONATYPE_USER}</username>
<password>${env.SONATYPE_PASSWORD}</password>
</server>
<server>
<id>bintray</id>
<username>${env.BINTRAY_USER}</username>
<password>${env.BINTRAY_KEY}</password>
</server>
<server>
<id>jfrog-snapshots</id>
<username>${env.BINTRAY_USER}</username>
<password>${env.BINTRAY_KEY}</password>
</server>
<server>
<id>github.com</id>
<username>${env.GH_USER}</username>
<password>${env.GH_TOKEN}</password>
</server>
</servers>
</settings>
43 changes: 43 additions & 0 deletions .travis.yml
@@ -0,0 +1,43 @@
sudo: required
dist: trusty

language: java
jdk:
- oraclejdk8

cache:
directories:
- $HOME/.m2/repository

before_install:
# allocate commits to CI, not the owner of the deploy key
- git config user.name "opentracingci"
- git config user.email "opentracingci+opentracing@googlegroups.com"

# setup https authentication credentials, used by ./mvnw release:prepare
- git config credential.helper "store --file=.git/credentials"
- echo "https://$GH_TOKEN:@github.com" > .git/credentials

install:
# Override default travis to use the maven wrapper
- ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V

script:
- ./travis/publish.sh

branches:
except:
- /^[0-9]/

env:
global:
# travis encrypt -r org/repo GH_TOKEN=XXX-https://github.com/settings/tokens-XXX
- secure: "PLgIwcMbz0wNQAvWgJm6YnRlajidWw7LklhIZ/ywUrt/IbKTicMGnMyRuUZ+Z3ASK6XM3RKeyF8UgTxczhB+jXO+SNkvMgCwTiQlzlnFG4Iz9d/Esu6zLddUk3HEiBvrCdfqEtFbJJN+BpiOzOip/99CuppjhxUZZuwAVK4hJXBlEjzb0VUo6XS4nwqglp56vqLBexDM+AsyUo3MHsrB+xRiLSp+gvVFZtZXnF7vgY+3SPFEY0qDIcdcpdvyHrACvGiIRI57xZjE0ak4t4wsbGMCNXNebRuluwqwA7bCCCy0PGzZDLM6Vhc6U2gFSEfl3SU6Sp+zfYswHeDZvFaIQF1m7i2jMXNc/ywIqWt9QMFHVAgOMh2bMewJLjyIKa7pFhjIGO152aPgYeHlStyQYuNELAl+hByiR7nLP4IRx0PTtg8DB/uHhT9D2iB5MbOonNYQrvjrvsu5o2Nr9FD2Vac0hHRTxF6TW27nY3Th6/AIW8INf24NejaRgZrf1KsyMlMVzdjkAGe7SOdzIfjiGibD/+3U0lSrmZ72FvXop+K/7VhMEk+rkACneH45Py85O74sf0pBa9fOWZQmi11B9IR/HXOfl/gM1Dl7ZcYFQxR6OaQX2ITZW9xJB79QJLbeoKu1CoDczi5a9f3c0aOZ0mtO+XZpXXVjU3242n8Rfb8="
# travis encrypt -r org/repo SONATYPE_USER=your_sonatype_account
- secure: "IneY58q340X2QUJI3SJj6T51S5HPCfRIzao0IYEdn0+uPunr1RqOLG3lWrsWyPGQ/otYzPcXK/KCrSpqgf5FatpBvsaWrf/JC5XBYt3pr3tvXAFjMDX5LO5/j7Q4sRZQbHzh57N6oobiVJawKGmxQEmvuuGml7VpWTDRG7IqBxr6B/voxBPpjrkU6rTE1Lk8xyJN1kCBUoN7a2LoyUs4Gwy9nXxdHO/xRJs+9zhGlpwb5KMyqOcbXMIsRMjAXSOIa0rx//Hz2qzWqtMHDC5ORv9PdlWWN/AvCCIOTqjl5LpbEd4JfazszN33fYj7HqzicSMtEHhkX27zraHT1SgvWJOUoMoypj9cN/k8o4TdYHQUs4fSiCKSY6oEwhJNzrhQlTHCBUBnsTNhkU+hn2+GSm/zlxg24Z+LcvJk36v/wjL2+sxuNauDINOgQWJ60rt3UMW+6VXFjxt88J7DHgblVNhZ3aUusJlDYmJO6a9NfkSb6rfwh8/ZcUi8I2xJcc+GL3gW0877FAEPsNJqNHYDVZDM8LUZkUEaFKABoRvxVWwMIwojc4glNS0IxVUdHbj1VPuB74TnEGBvWEy/BrCaokdJZX5o1B5DkH2tpjmPkhRn2mt12OIjsUtuOwFx+cs3xqHZOE/eGX506LJqOV3wYei3YgT5hQJ7HJQtHLH1wQo="
# travis encrypt -r org/repo SONATYPE_PASSWORD=your_sonatype_password
- secure: "YScD3XfVqhsb8W1PnZNTP5vN7CzJyO82D7ipoQMvZAkuoP4OUwEhElPUd39tPKXok0wCBFnrcdCV1Ku2xD/xCCQl1Aa58NW6GG9008ndQNxWUXTDrQ9gz33vDNMVh5gsBUyQ860q9V8tf8KyMoqbs/QDGyFWL/4DF3Phv5DlUPrIkv2cg1C9eETdpSD7/97k/YMyLjQ9+jjh/j8jaMH2VYXSu7wpi/akjowAAzQLE0HWD3tgvrWf+Ec/tPZ7hrjU1g5nm4oT2d4NS0h4xaxTqqohRpccv1MQ3WspLP41gYE487mpYS6Uqh4vWK5BCdqpd6SCu7WEBq6zfNXEIVQ0Tg+hn5ClKzx91+yrOmA5j1dwOSM8GxgTt1nut/sgQYzlyOiWKBtm7kXjyRp1KKRTHG0k6kJt1AF7hrkTz3KG0qVNNX2ZrpgSmwrt0/YgfZ+RV6Tk2tEeo0/LeWPn9W/BKlNS7QaxOjgmNYhE0SERfLkg5C0OGFrUUPeHtjjK204I6NuaVa9/EZziNCNXbWSGi1UExrk/zW1+6G4q/Zh65BkfjG1kiXEJhwrZpc2Y4iLQkwe+Y3rPverp+wEWvO55fKrX3fZN+GbCUF4kuAMWwA796+GnDSLFpGR+UMUerTcsPVXurvr/DXrYy27xFogkHkz9/iFqM/8MQE9GhvySMXk="
# travis encrypt -r org/repo BINTRAY_USER=your_github_account
- secure: "MT+N6Ejska5ZtHHg4JU9i0lpKXxVFWUmJP796mC8YV8vGJ1yIpiGFKRuBrkbZ88pG3s/ZjtlWo7mffpPxdHhpt65crPxUJGzj9M7PDSu4e4QocTkxAydPHReQtFeMujNcpK5fqh37x8YXJIzs5n056Y11cPtWti8xdoR+SJ7HoOI8ojB19nPYOpmXl2KtkI8xEsAT7oTooter8m8p9VorbtlgTGIdkvawNqXBRxSQTnTlhBGhS7rgwLn4gqmrSTmLKAXRuH2WXQ0MDFx2lhkS2/MxZvIzive1f5LINrKqgdVLpHrC2sExBB/j0Si3QBHdxuk1WeIDWaf2yT15Bxx9YMC+UxLGTO6SQzdzDbBisAzMDq/9ayt3JUAOzS9JvUfOrOFZVeEbOAs6NMF+BPtdgVGszVdUnoqbI6eg2gSFSKy5HMn7WYD6b7IHEGC5Swi/GU/HgZpbA6UdZ2w0tEXrFCCExeuyme/rRzbdDBUGJBFGF2UOcliYrrSWAJL6G1BAYu5qpb/do3KEKz2kph7yNlLfHjluZ78QKpWrUoFdOeZX80gaspRbX8/9KYFIJ9X/DzEVBueX2UeSdiY0+ZhnzacsFMem0/tQj2l4oBSnL33DnGk7icvKF86uEEegwFCuaI0TVnXDPqdy0QDZiZWX8Lk7+bvMgZepLFPfsy8Sqc="
# travis encrypt -r org/repo BINTRAY_KEY=xxx-https://bintray.com/profile/edit-xxx
- secure: "jfR+YEf/x9ROKUvK8dotSDi7EYdsABBgsIVvmj9yq/86OXHid7MW3qt+HiQEDhEXkzvWcmfTltYSI4p8wGcVlmoP733u2m9gnweq0qIL2ovF9Ttfdi8XFG157WFbth4w/NSaliS68taFF/P89LUJXinKTWX4A4dcYljtNvWafbouaVpt2Pb+lDzVkXqWJT2Fttces+D3lk85hjsEjgufkS160G9WLy995PjgZsPir4CO6LqzuWKKTn/2MqFK3hlziVxqGKIwwDJOPQm7kUfvcks+0lHCuBPY2z9VPK4SarvWjd/9EtgFwAVOt00jTtLNiQdH9fmscq1lLB3DAjX7/1+pIsClqhmB4uY4qSMRpa0TU7gMV7PzefcrLqnTzZpc9FhNSO0+fRQgHAXSWHltVE0C+Gx3FSOqMniEAjIT5VodrX3X06+I6gpuq9PvgxATAsVM4gn6goNtoBxzC4OndOQvyjcih/9qClsVL+vwluMBW3my9ysClS6IjALz7w+cDWRqssuxw61qehz03golJiOQQbruIp8wtCRahP9EQMulPcAwpAQhOc+PQzJuh+j0MOdQbGMUq60fpkl/qn+f+euQMj4h05nGRLlEZ3OL6i3BvfZwXz53vUMMYLjO2fwwdOUJoVOqzt3W1t2uEIvASjKIz56hvtpyvDn9eDR8IUs="
81 changes: 81 additions & 0 deletions README.md
@@ -0,0 +1,81 @@
[![Build Status][ci-img]][ci] [![Released Version][maven-img]][maven]

# OpenTracing Spring Web Handler Interceptor

This library provides instrumentation for Spring Web applications.

## How does this work?

Server span is started in [Web Servlet Filter](https://github.com/opentracing-contrib/java-web-servlet-filter),
then tracing interceptor adds spring related logs, for instance when `preHandle` and `afterCompletion` for given
handler were called. There are use case when spring boot invokes a handler after a request processing in filter
finished, in this case interceptor starts a new span as `followsFrom` which references initial span created in
the servlet filter.


## Configuration

Configuration needs to add `TracingFilter` and `TracingHandlerInterceptor`. Both of these classes
are required!

Tracing interceptor can be instantiated manually or injected via CDI, but
it needs beans of type `Tracer` and `List<SpanDecorator>` configured.

Java based configuration:
```java
@Configuration
@Import({TracingHandlerInterceptor.class})
public class MVCConfiguration extends WebMvcConfigurerAdapter {

@Autowired
private Tracer tracer;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TracingHandlerInterceptor(tracer, Arrays.asList(SpanDecorator.STANDARD_TAGS)));
}

@Bean
public FilterRegistrationBean tracingFilter() {
TracingFilter tracingFilter = new TracingFilter(tracer, Arrays.asList(io.opentracing.contrib.web.servlet.filter.SpanDecorator.STANDARD_TAGS));

FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(tracingFilter);
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setOrder(Integer.MIN_VALUE);
filterRegistrationBean.setAsyncSupported(true);

return filterRegistrationBean;
}
}
```

XML based configuration can be used too. Filter can be also directly defined in `web.xml`.

## Access server span context
```java
@RequestMapping("/hello")
public String hello(HttpServletRequest request) {
SpanContext serverSpanContext = TracingHandlerInterceptor.serverSpanContext(request);

Span span = tracer.buildSpan("localSpan");
.asChildOf(serverSpanContext)
.start();

span.finish();
return "Hello world!";
}
```

## Development
```shell
./mvnw clean install
```

## Release
Follow instructions in [RELEASE](RELEASE.md)


[ci-img]: https://travis-ci.org/opentracing-contrib/java-spring-web.svg?branch=master
[ci]: https://travis-ci.org/opentracing-contrib/java-spring-web
[maven-img]: https://img.shields.io/maven-central/v/io.opentracing.contrib/opentracing-spring-web-handler-interceptor.svg?maxAge=2592000
[maven]: http://search.maven.org/#search%7Cga%7C1%7Copentracing-spring-web-handler-interceptor
6 changes: 6 additions & 0 deletions RELEASE.md
@@ -0,0 +1,6 @@
# OpenTracing Release Process

This repo uses semantic versions. Please keep this in mind when choosing version numbers.

For the up-to-date release process, please refer the
[release process from the OpenTracing Java API](https://github.com/opentracing/opentracing-java/blob/master/RELEASE.md).