Files
spring-cloud-sleuth/benchmarks
Adrian Cole b1d39ce291 Updates to Brave 5.12 and introduces SpanHandler (#1632)
`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
2020-05-16 14:01:38 +08:00
..
2019-02-07 16:41:59 +01:00

== 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