help wantedtype: enhancement
Description
Looks like this would be another implementation of tracing that would be nice to have: https://github.com/DataDog/dd-trace-java/blob/master/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java
I believe this would be required to work with @NewSpan and @ContinueSpan, and @SpanTag annotations:
https://docs.micronaut.io/latest/guide/index.html#distributedTracing
Datadog has their own annotation for tracing: https://docs.datadoghq.com/tracing/setup_overview/setup/java/?tab=containers#trace-annotation
Required dependencies:
<dependency>
<groupId>com.datadoghq</groupId>
<artifactId>dd-trace-ot</artifactId>
<version>0.75.0</version>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-tracing</artifactId>
</dependency>
Barebones factory:
import datadog.opentracing.DDTracer;
import datadog.trace.core.CoreTracer;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Primary;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.env.Environment;
import io.micronaut.context.exceptions.BeanInstantiationException;
import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import javax.inject.Singleton;
@Slf4j
@Factory
public class DatadogTracerFactory {
@Primary
@Singleton
@Requires(classes = { DDTracer.class, Tracer.class }, env = Environment.CLOUD, notEnv = Environment.TEST)
Tracer ddTracer() {
val ddGlobalTracer = datadog.trace.api.GlobalTracer.get();
if (ddGlobalTracer instanceof DDTracer) {
val ddTracer = (DDTracer) ddGlobalTracer;
GlobalTracer.registerIfAbsent(ddTracer);
return ddTracer;
} else if (ddGlobalTracer instanceof CoreTracer) {
val ddTracer = new DDTracer((CoreTracer) ddGlobalTracer);
GlobalTracer.registerIfAbsent(ddTracer);
log.info("Successfully registered DDTracer for opentracing support");
return ddTracer;
}
// TODO: create DDTracer instance with builder and register
}
}