`SpanHandler` is the base type for the now deprecated `FinishedSpanHandler`.
Notable, it can not just handle things at the end of a recording, but also the
beginning.
For example, this permits set-once baggage without the HTTP abstraction:
```java
static final BaggageField EPOCH_SECONDS = BaggageField.create("epoch_seconds");
static final class RootOnlyBaggage extends SpanHandler {
@Override
public boolean begin(TraceContext context, MutableSpan span, @Nullable TraceContext parent) {
if (EPOCH_SECONDS.getValue(context) == null) { // only set at the first span
long epochSeconds = System.currentTimeMillis() / 1000;
EPOCH_SECONDS.updateValue(context, String.valueOf(epochSeconds));
}
return true;
}
@Override public boolean end(TraceContext context, MutableSpan span, Cause cause) {
Tags.BAGGAGE_FIELD.tag(EPOCH_SECONDS, context, span);
return true;
}
}
```
As the parent is available, it can also facilitate advanced tasks like counting
children, or summarizing entire local roots.
See https://github.com/openzipkin/brave/tree/master/brave/src/test/java/brave/features/handler
and https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/handler/SpanHandler.java for more
== Spring Cloud Sleuth Benchmarks This module can run benchmarks using the following tools - JMH - JMeter === How to run it? In the root folder inside the `scripts` folder there are the following benchmark scripts: - runJmhBenchmark.sh - runJmeterBenchmarks.sh Just execute them from the root folder like this: [source] ---- ./scripts/runJmeterBenchmarks.sh ./scripts/runJmhBenchmarks.sh ---- === How do they work? For JMH we're building a shaded JAR file that is next executed. For JMeter we're running two applications, one with Sleuth, one without with Spring Boot Maven Plugin. Next a Maven JMeter plugin is executed that loads the `*.jmx` files, starts JMeter and prints out the results. At the end Spring Boot Maven Plugin stops the applications. === What are we testing? For now we're testing the performance impact of the following: - our custom Trace HTTP filter - instrumentation of controllers - `@Callable` returning and the sync one - instrumentation of RestTemplate - `@Async` annotated methods