Bridge more incubating api (#12230)

This commit is contained in:
Lauri Tulmin 2024-09-24 07:51:59 +03:00 committed by GitHub
parent a07e84a748
commit d3068c8c61
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
69 changed files with 1880 additions and 198 deletions

View File

@ -5,26 +5,20 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace;
import static io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging.toAgentOrNull;
import application.io.opentelemetry.api.common.AttributeKey;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.trace.Span;
import application.io.opentelemetry.api.trace.SpanBuilder;
import application.io.opentelemetry.api.trace.SpanContext;
import application.io.opentelemetry.api.trace.SpanKind;
import application.io.opentelemetry.api.trace.StatusCode;
import application.io.opentelemetry.context.Context;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
class ApplicationSpan implements Span {
public class ApplicationSpan implements Span {
private final io.opentelemetry.api.trace.Span agentSpan;
ApplicationSpan(io.opentelemetry.api.trace.Span agentSpan) {
public ApplicationSpan(io.opentelemetry.api.trace.Span agentSpan) {
this.agentSpan = agentSpan;
}
@ -190,103 +184,4 @@ class ApplicationSpan implements Span {
public int hashCode() {
return agentSpan.hashCode();
}
static class Builder implements SpanBuilder {
private final io.opentelemetry.api.trace.SpanBuilder agentBuilder;
Builder(io.opentelemetry.api.trace.SpanBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setParent(Context applicationContext) {
agentBuilder.setParent(AgentContextStorage.getAgentContext(applicationContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setNoParent() {
agentBuilder.setNoParent();
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder addLink(SpanContext applicationSpanContext) {
agentBuilder.addLink(Bridging.toAgent(applicationSpanContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder addLink(
SpanContext applicationSpanContext, Attributes applicationAttributes) {
agentBuilder.addLink(Bridging.toAgent(applicationSpanContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, String value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, long value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, double value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, boolean value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public <T> SpanBuilder setAttribute(AttributeKey<T> applicationKey, T value) {
@SuppressWarnings("unchecked")
io.opentelemetry.api.common.AttributeKey<T> agentKey = Bridging.toAgent(applicationKey);
if (agentKey != null) {
agentBuilder.setAttribute(agentKey, value);
}
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setSpanKind(SpanKind applicationSpanKind) {
io.opentelemetry.api.trace.SpanKind agentSpanKind = toAgentOrNull(applicationSpanKind);
if (agentSpanKind != null) {
agentBuilder.setSpanKind(agentSpanKind);
}
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit) {
agentBuilder.setStartTimestamp(startTimestamp, unit);
return this;
}
@Override
public Span startSpan() {
return new ApplicationSpan(agentBuilder.startSpan());
}
}
}

View File

@ -0,0 +1,117 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace;
import static io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging.toAgentOrNull;
import application.io.opentelemetry.api.common.AttributeKey;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.trace.Span;
import application.io.opentelemetry.api.trace.SpanBuilder;
import application.io.opentelemetry.api.trace.SpanContext;
import application.io.opentelemetry.api.trace.SpanKind;
import application.io.opentelemetry.context.Context;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import java.util.concurrent.TimeUnit;
public class ApplicationSpanBuilder implements SpanBuilder {
private final io.opentelemetry.api.trace.SpanBuilder agentBuilder;
protected ApplicationSpanBuilder(io.opentelemetry.api.trace.SpanBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setParent(Context applicationContext) {
agentBuilder.setParent(AgentContextStorage.getAgentContext(applicationContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setNoParent() {
agentBuilder.setNoParent();
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder addLink(SpanContext applicationSpanContext) {
agentBuilder.addLink(Bridging.toAgent(applicationSpanContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder addLink(SpanContext applicationSpanContext, Attributes applicationAttributes) {
agentBuilder.addLink(Bridging.toAgent(applicationSpanContext));
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, String value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, long value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, double value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setAttribute(String key, boolean value) {
agentBuilder.setAttribute(key, value);
return this;
}
@Override
@CanIgnoreReturnValue
public <T> SpanBuilder setAttribute(AttributeKey<T> applicationKey, T value) {
@SuppressWarnings("unchecked")
io.opentelemetry.api.common.AttributeKey<T> agentKey = Bridging.toAgent(applicationKey);
if (agentKey != null) {
agentBuilder.setAttribute(agentKey, value);
}
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setSpanKind(SpanKind applicationSpanKind) {
io.opentelemetry.api.trace.SpanKind agentSpanKind = toAgentOrNull(applicationSpanKind);
if (agentSpanKind != null) {
agentBuilder.setSpanKind(agentSpanKind);
}
return this;
}
@Override
@CanIgnoreReturnValue
public SpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit) {
agentBuilder.setStartTimestamp(startTimestamp, unit);
return this;
}
@Override
public Span startSpan() {
return new ApplicationSpan(agentBuilder.startSpan());
}
}

View File

@ -18,6 +18,6 @@ public class ApplicationTracer implements Tracer {
@Override
public SpanBuilder spanBuilder(String spanName) {
return new ApplicationSpan.Builder(agentTracer.spanBuilder(spanName));
return new ApplicationSpanBuilder(agentTracer.spanBuilder(spanName));
}
}

View File

@ -0,0 +1,11 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace;
public interface ApplicationTracerFactory {
ApplicationTracer newTracer(io.opentelemetry.api.trace.Tracer agentTracer);
}

View File

@ -7,7 +7,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace;
import application.io.opentelemetry.api.trace.Tracer;
import application.io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.api.GlobalOpenTelemetry;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
@ -16,10 +15,13 @@ public class ApplicationTracerProvider implements TracerProvider {
private static final MethodHandle TRACE_PROVIDER_14 = getApplicationTracerProvider14();
protected final ApplicationTracerFactory tracerFactory;
protected final io.opentelemetry.api.trace.TracerProvider agentTracerProvider;
protected ApplicationTracerProvider(
ApplicationTracerFactory tracerFactory,
io.opentelemetry.api.trace.TracerProvider agentTracerProvider) {
this.tracerFactory = tracerFactory;
this.agentTracerProvider = agentTracerProvider;
}
@ -48,17 +50,17 @@ public class ApplicationTracerProvider implements TracerProvider {
}
}
return new ApplicationTracerProvider(agentTracerProvider);
return new ApplicationTracerProvider(ApplicationTracer::new, agentTracerProvider);
}
@Override
public Tracer get(String instrumentationName) {
return new ApplicationTracer(agentTracerProvider.get(instrumentationName));
return tracerFactory.newTracer(agentTracerProvider.get(instrumentationName));
}
@Override
public Tracer get(String instrumentationName, String instrumentationVersion) {
return new ApplicationTracer(
GlobalOpenTelemetry.getTracerProvider().get(instrumentationName, instrumentationVersion));
return tracerFactory.newTracer(
agentTracerProvider.get(instrumentationName, instrumentationVersion));
}
}

View File

@ -11,11 +11,11 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
class ApplicationDoubleCounter implements DoubleCounter {
public class ApplicationDoubleCounter implements DoubleCounter {
private final io.opentelemetry.api.metrics.DoubleCounter agentCounter;
ApplicationDoubleCounter(io.opentelemetry.api.metrics.DoubleCounter agentCounter) {
protected ApplicationDoubleCounter(io.opentelemetry.api.metrics.DoubleCounter agentCounter) {
this.agentCounter = agentCounter;
}

View File

@ -11,11 +11,12 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
final class ApplicationDoubleHistogram implements DoubleHistogram {
public class ApplicationDoubleHistogram implements DoubleHistogram {
private final io.opentelemetry.api.metrics.DoubleHistogram agentHistogram;
ApplicationDoubleHistogram(io.opentelemetry.api.metrics.DoubleHistogram agentHistogram) {
protected ApplicationDoubleHistogram(
io.opentelemetry.api.metrics.DoubleHistogram agentHistogram) {
this.agentHistogram = agentHistogram;
}

View File

@ -11,11 +11,12 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
class ApplicationDoubleUpDownCounter implements DoubleUpDownCounter {
public class ApplicationDoubleUpDownCounter implements DoubleUpDownCounter {
private final io.opentelemetry.api.metrics.DoubleUpDownCounter agentCounter;
ApplicationDoubleUpDownCounter(io.opentelemetry.api.metrics.DoubleUpDownCounter agentCounter) {
protected ApplicationDoubleUpDownCounter(
io.opentelemetry.api.metrics.DoubleUpDownCounter agentCounter) {
this.agentCounter = agentCounter;
}

View File

@ -11,11 +11,11 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
class ApplicationLongCounter implements LongCounter {
public class ApplicationLongCounter implements LongCounter {
private final io.opentelemetry.api.metrics.LongCounter agentCounter;
ApplicationLongCounter(io.opentelemetry.api.metrics.LongCounter agentCounter) {
protected ApplicationLongCounter(io.opentelemetry.api.metrics.LongCounter agentCounter) {
this.agentCounter = agentCounter;
}

View File

@ -11,11 +11,11 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
final class ApplicationLongHistogram implements LongHistogram {
public class ApplicationLongHistogram implements LongHistogram {
private final io.opentelemetry.api.metrics.LongHistogram agentHistogram;
ApplicationLongHistogram(io.opentelemetry.api.metrics.LongHistogram agentHistogram) {
protected ApplicationLongHistogram(io.opentelemetry.api.metrics.LongHistogram agentHistogram) {
this.agentHistogram = agentHistogram;
}

View File

@ -11,11 +11,12 @@ import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
class ApplicationLongUpDownCounter implements LongUpDownCounter {
public class ApplicationLongUpDownCounter implements LongUpDownCounter {
private final io.opentelemetry.api.metrics.LongUpDownCounter agentCounter;
ApplicationLongUpDownCounter(io.opentelemetry.api.metrics.LongUpDownCounter agentCounter) {
protected ApplicationLongUpDownCounter(
io.opentelemetry.api.metrics.LongUpDownCounter agentCounter) {
this.agentCounter = agentCounter;
}

View File

@ -11,12 +11,14 @@ import application.io.opentelemetry.api.metrics.MeterProvider;
import application.io.opentelemetry.api.trace.TracerProvider;
import application.io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.propagation.ApplicationContextPropagators;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerFactory;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterProvider;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeterFactory115;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory127;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerProvider;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.trace.ApplicationTracerFactory127;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace.ApplicationTracerProvider14;
import java.lang.reflect.InvocationTargetException;
@ -36,7 +38,7 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
io.opentelemetry.api.OpenTelemetry agentOpenTelemetry =
io.opentelemetry.api.GlobalOpenTelemetry.get();
applicationTracerProvider =
new ApplicationTracerProvider14(agentOpenTelemetry.getTracerProvider());
new ApplicationTracerProvider14(getTracerFactory(), agentOpenTelemetry.getTracerProvider());
applicationContextPropagators =
new ApplicationContextPropagators(agentOpenTelemetry.getPropagators());
applicationMeterProvider =
@ -66,10 +68,16 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
}
private static ApplicationMeterFactory getMeterFactory() {
// this class is defined in opentelemetry-api-1.38
// this class is defined in opentelemetry-api-1.40
ApplicationMeterFactory meterFactory =
getMeterFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.incubator.metrics.ApplicationMeterFactory138Incubator");
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics.ApplicationMeterFactory140Incubator");
if (meterFactory == null) {
// this class is defined in opentelemetry-api-1.38
meterFactory =
getMeterFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.incubator.metrics.ApplicationMeterFactory138Incubator");
}
if (meterFactory == null) {
// this class is defined in opentelemetry-api-1.38
meterFactory =
@ -115,7 +123,18 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
// this class is defined in opentelemetry-api-1.42
ApplicationLoggerFactory loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLoggerFactory142");
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs.ApplicationLoggerFactory142Incubator");
if (loggerFactory == null) {
loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLoggerFactory142");
}
if (loggerFactory == null) {
// this class is defined in opentelemetry-api-1.40
loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs.ApplicationLoggerFactory140Incubator");
}
if (loggerFactory == null) {
loggerFactory = new ApplicationLoggerFactory127();
}
@ -127,6 +146,22 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
return getFactory(className, ApplicationLoggerFactory.class);
}
private static ApplicationTracerFactory getTracerFactory() {
// this class is defined in opentelemetry-api-1.40
ApplicationTracerFactory tracerFactory =
getTracerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace.ApplicationTracerFactory140Incubator");
if (tracerFactory == null) {
tracerFactory = new ApplicationTracerFactory127();
}
return tracerFactory;
}
private static ApplicationTracerFactory getTracerFactory(String className) {
return getFactory(className, ApplicationTracerFactory.class);
}
private static <T> T getFactory(String className, Class<T> factoryClass) {
try {
Class<?> clazz = Class.forName(className);

View File

@ -0,0 +1,18 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.trace;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerFactory;
public class ApplicationTracerFactory127 implements ApplicationTracerFactory {
@Override
public ApplicationTracer newTracer(Tracer agentTracer) {
return new ApplicationTracer(agentTracer);
}
}

View File

@ -11,12 +11,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleCounterBuilder;
import java.util.List;
final class ApplicationDoubleCounterBuilder137 extends ApplicationDoubleCounterBuilder
public class ApplicationDoubleCounterBuilder137 extends ApplicationDoubleCounterBuilder
implements ExtendedDoubleCounterBuilder {
private final io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder;
ApplicationDoubleCounterBuilder137(
protected ApplicationDoubleCounterBuilder137(
io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -12,12 +12,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
import java.util.List;
final class ApplicationDoubleHistogramBuilder137 extends ApplicationDoubleHistogramBuilder
public class ApplicationDoubleHistogramBuilder137 extends ApplicationDoubleHistogramBuilder
implements ExtendedDoubleHistogramBuilder {
private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
ApplicationDoubleHistogramBuilder137(
protected ApplicationDoubleHistogramBuilder137(
io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -11,12 +11,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleUpDownCounterBuilder;
import java.util.List;
final class ApplicationDoubleUpDownCounterBuilder137 extends ApplicationDoubleUpDownCounterBuilder
public class ApplicationDoubleUpDownCounterBuilder137 extends ApplicationDoubleUpDownCounterBuilder
implements ExtendedDoubleUpDownCounterBuilder {
private final io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder;
ApplicationDoubleUpDownCounterBuilder137(
protected ApplicationDoubleUpDownCounterBuilder137(
io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -12,12 +12,13 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
import java.util.List;
final class ApplicationLongCounterBuilder137 extends ApplicationLongCounterBuilder
public class ApplicationLongCounterBuilder137 extends ApplicationLongCounterBuilder
implements ExtendedLongCounterBuilder {
private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder;
ApplicationLongCounterBuilder137(io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
protected ApplicationLongCounterBuilder137(
io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}

View File

@ -11,12 +11,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongHistogramBuilder;
import java.util.List;
final class ApplicationLongHistogramBuilder137 extends ApplicationLongHistogramBuilder
public class ApplicationLongHistogramBuilder137 extends ApplicationLongHistogramBuilder
implements ExtendedLongHistogramBuilder {
private final io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder;
ApplicationLongHistogramBuilder137(
protected ApplicationLongHistogramBuilder137(
io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -12,12 +12,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
import java.util.List;
final class ApplicationLongUpDownCounterBuilder137 extends ApplicationLongUpDownCounterBuilder
public class ApplicationLongUpDownCounterBuilder137 extends ApplicationLongUpDownCounterBuilder
implements ExtendedLongUpDownCounterBuilder {
private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder;
ApplicationLongUpDownCounterBuilder137(
protected ApplicationLongUpDownCounterBuilder137(
io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -12,12 +12,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics.ApplicationDoubleGaugeBuilder138;
import java.util.List;
final class ApplicationDoubleGaugeBuilder138Incubator extends ApplicationDoubleGaugeBuilder138
public class ApplicationDoubleGaugeBuilder138Incubator extends ApplicationDoubleGaugeBuilder138
implements ExtendedDoubleGaugeBuilder {
private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
ApplicationDoubleGaugeBuilder138Incubator(
protected ApplicationDoubleGaugeBuilder138Incubator(
io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -11,12 +11,12 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridgin
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics.ApplicationLongGaugeBuilder138;
import java.util.List;
final class ApplicationLongGaugeBuilder138Incubator extends ApplicationLongGaugeBuilder138
public class ApplicationLongGaugeBuilder138Incubator extends ApplicationLongGaugeBuilder138
implements ExtendedLongGaugeBuilder {
private final io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder;
ApplicationLongGaugeBuilder138Incubator(
protected ApplicationLongGaugeBuilder138Incubator(
io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;

View File

@ -0,0 +1,39 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.metrics.DoubleGauge;
import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
public class ApplicationDoubleGauge138 implements DoubleGauge {
private final io.opentelemetry.api.metrics.DoubleGauge agentDoubleGauge;
protected ApplicationDoubleGauge138(io.opentelemetry.api.metrics.DoubleGauge agentDoubleGauge) {
this.agentDoubleGauge = agentDoubleGauge;
}
@Override
public void set(double value) {
agentDoubleGauge.set(value);
}
@Override
public void set(double value, Attributes attributes) {
agentDoubleGauge.set(value, Bridging.toAgent(attributes));
}
@Override
public void set(double value, Attributes attributes, Context applicationContext) {
agentDoubleGauge.set(
value,
Bridging.toAgent(attributes),
AgentContextStorage.getAgentContext(applicationContext));
}
}

View File

@ -5,12 +5,8 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.metrics.DoubleGauge;
import application.io.opentelemetry.api.metrics.LongGaugeBuilder;
import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
public class ApplicationDoubleGaugeBuilder138 extends ApplicationDoubleGaugeBuilder {
@ -31,25 +27,6 @@ public class ApplicationDoubleGaugeBuilder138 extends ApplicationDoubleGaugeBuil
@Override
public DoubleGauge build() {
io.opentelemetry.api.metrics.DoubleGauge agentDoubleGauge = agentBuilder.build();
return new DoubleGauge() {
@Override
public void set(double value) {
agentDoubleGauge.set(value);
}
@Override
public void set(double value, Attributes attributes) {
agentDoubleGauge.set(value, Bridging.toAgent(attributes));
}
@Override
public void set(double value, Attributes attributes, Context applicationContext) {
agentDoubleGauge.set(
value,
Bridging.toAgent(attributes),
AgentContextStorage.getAgentContext(applicationContext));
}
};
return new ApplicationDoubleGauge138(agentDoubleGauge);
}
}

View File

@ -0,0 +1,39 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.metrics.LongGauge;
import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
public class ApplicationLongGauge138 implements LongGauge {
private final io.opentelemetry.api.metrics.LongGauge agentLongGauge;
protected ApplicationLongGauge138(io.opentelemetry.api.metrics.LongGauge agentLongGauge) {
this.agentLongGauge = agentLongGauge;
}
@Override
public void set(long value) {
agentLongGauge.set(value);
}
@Override
public void set(long value, Attributes attributes) {
agentLongGauge.set(value, Bridging.toAgent(attributes));
}
@Override
public void set(long value, Attributes attributes, Context applicationContext) {
agentLongGauge.set(
value,
Bridging.toAgent(attributes),
AgentContextStorage.getAgentContext(applicationContext));
}
}

View File

@ -5,11 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.metrics.LongGauge;
import application.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongGaugeBuilder;
public class ApplicationLongGaugeBuilder138 extends ApplicationLongGaugeBuilder {
@ -25,24 +21,6 @@ public class ApplicationLongGaugeBuilder138 extends ApplicationLongGaugeBuilder
@Override
public LongGauge build() {
io.opentelemetry.api.metrics.LongGauge agentLongGauge = agentBuilder.build();
return new LongGauge() {
@Override
public void set(long value) {
agentLongGauge.set(value);
}
@Override
public void set(long value, Attributes attributes) {
agentLongGauge.set(value, Bridging.toAgent(attributes));
}
@Override
public void set(long value, Attributes attributes, Context applicationContext) {
agentLongGauge.set(
value,
Bridging.toAgent(attributes),
AgentContextStorage.getAgentContext(applicationContext));
}
};
return new ApplicationLongGauge138(agentLongGauge);
}
}

View File

@ -8,13 +8,17 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace;
import application.io.opentelemetry.api.trace.Tracer;
import application.io.opentelemetry.api.trace.TracerBuilder;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerFactory;
class ApplicationTracerBuilder implements TracerBuilder {
private final ApplicationTracerFactory tracerFactory;
private final io.opentelemetry.api.trace.TracerBuilder agentTracerBuilder;
public ApplicationTracerBuilder(io.opentelemetry.api.trace.TracerBuilder agentTracerBuilder) {
public ApplicationTracerBuilder(
ApplicationTracerFactory tracerFactory,
io.opentelemetry.api.trace.TracerBuilder agentTracerBuilder) {
this.tracerFactory = tracerFactory;
this.agentTracerBuilder = agentTracerBuilder;
}
@ -34,6 +38,6 @@ class ApplicationTracerBuilder implements TracerBuilder {
@Override
public Tracer build() {
return new ApplicationTracer(agentTracerBuilder.build());
return tracerFactory.newTracer(agentTracerBuilder.build());
}
}

View File

@ -6,6 +6,8 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace;
import application.io.opentelemetry.api.trace.TracerBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerFactory;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerProvider;
// this class is used from opentelemetry-api-1.0 via reflection
@ -15,11 +17,20 @@ public class ApplicationTracerProvider14 extends ApplicationTracerProvider {
@SuppressWarnings("UnnecessarilyFullyQualified")
public ApplicationTracerProvider14(
io.opentelemetry.api.trace.TracerProvider agentTracerProvider) {
super(agentTracerProvider);
this(ApplicationTracer::new, agentTracerProvider);
}
// Our convention for accessing agent package
@SuppressWarnings("UnnecessarilyFullyQualified")
public ApplicationTracerProvider14(
ApplicationTracerFactory tracerFactory,
io.opentelemetry.api.trace.TracerProvider agentTracerProvider) {
super(tracerFactory, agentTracerProvider);
}
@Override
public TracerBuilder tracerBuilder(String instrumentationName) {
return new ApplicationTracerBuilder(agentTracerProvider.tracerBuilder(instrumentationName));
return new ApplicationTracerBuilder(
tracerFactory, agentTracerProvider.tracerBuilder(instrumentationName));
}
}

View File

@ -0,0 +1,26 @@
plugins {
id("otel.javaagent-instrumentation")
}
dependencies {
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_40"))
compileOnly("io.opentelemetry:opentelemetry-api-incubator")
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.10:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent"))
}
configurations.configureEach {
if (name.endsWith("testRuntimeClasspath", true) || name.endsWith("testCompileClasspath", true)) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api:1.40.0")
}
}
}

View File

@ -0,0 +1,40 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static java.util.Collections.singletonList;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
import java.util.List;
import net.bytebuddy.matcher.ElementMatcher;
@AutoService(InstrumentationModule.class)
public class OpenTelemetryApiIncubatorInstrumentationModule extends InstrumentationModule
implements ExperimentalInstrumentationModule {
public OpenTelemetryApiIncubatorInstrumentationModule() {
super("opentelemetry-api", "opentelemetry-api-1.40", "opentelemetry-api-incubator-1.40");
}
@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed(
"application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram");
}
@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new OpenTelemetryIncubatorInstrumentation());
}
@Override
public String getModuleGroup() {
return "opentelemetry-api-bridge";
}
}

View File

@ -0,0 +1,44 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.none;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs.ApplicationLoggerFactory140Incubator;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics.ApplicationMeterFactory140Incubator;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace.ApplicationTracerFactory140Incubator;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
public class OpenTelemetryIncubatorInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
}
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
none(), OpenTelemetryIncubatorInstrumentation.class.getName() + "$InitAdvice");
}
@SuppressWarnings({"ReturnValueIgnored", "unused"})
public static class InitAdvice {
@Advice.OnMethodEnter
public static void init() {
// the sole purpose of this advice is to ensure that these classes are recognized as helper
// class and injected into class loader
ApplicationLoggerFactory140Incubator.class.getName();
ApplicationMeterFactory140Incubator.class.getName();
ApplicationTracerFactory140Incubator.class.getName();
}
}
}

View File

@ -0,0 +1,24 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs;
import application.io.opentelemetry.api.incubator.logs.ExtendedLogger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
public class ApplicationLogger140Incubator extends ApplicationLogger implements ExtendedLogger {
private final io.opentelemetry.api.logs.Logger agentLogger;
protected ApplicationLogger140Incubator(io.opentelemetry.api.logs.Logger agentLogger) {
super(agentLogger);
this.agentLogger = agentLogger;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.logs.ExtendedLogger) agentLogger).isEnabled();
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory;
// this class is used from opentelemetry-api-1.27.0 via reflection
public class ApplicationLoggerFactory140Incubator implements ApplicationLoggerFactory {
@Override
public ApplicationLogger newLogger(Logger agentLogger) {
return new ApplicationLogger140Incubator(agentLogger);
}
}

View File

@ -0,0 +1,25 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleCounter;
final class ApplicationDoubleCounter140Incubator extends ApplicationDoubleCounter
implements ExtendedDoubleCounter {
private final io.opentelemetry.api.metrics.DoubleCounter agentCounter;
ApplicationDoubleCounter140Incubator(io.opentelemetry.api.metrics.DoubleCounter agentCounter) {
super(agentCounter);
this.agentCounter = agentCounter;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounter) agentCounter)
.isEnabled();
}
}

View File

@ -0,0 +1,24 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleCounter;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationDoubleCounterBuilder137;
final class ApplicationDoubleCounterBuilder140Incubator extends ApplicationDoubleCounterBuilder137 {
private final io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder;
ApplicationDoubleCounterBuilder140Incubator(DoubleCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public DoubleCounter build() {
return new ApplicationDoubleCounter140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleGauge;
import io.opentelemetry.api.metrics.DoubleGauge;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics.ApplicationDoubleGauge138;
final class ApplicationDoubleGauge140Incubator extends ApplicationDoubleGauge138
implements ExtendedDoubleGauge {
private final io.opentelemetry.api.metrics.DoubleGauge agentDoubleGauge;
ApplicationDoubleGauge140Incubator(DoubleGauge agentDoubleGauge) {
super(agentDoubleGauge);
this.agentDoubleGauge = agentDoubleGauge;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleGauge) agentDoubleGauge)
.isEnabled();
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleGauge;
import application.io.opentelemetry.api.metrics.LongGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.incubator.metrics.ApplicationDoubleGaugeBuilder138Incubator;
final class ApplicationDoubleGaugeBuilder140Incubator
extends ApplicationDoubleGaugeBuilder138Incubator {
private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
ApplicationDoubleGaugeBuilder140Incubator(DoubleGaugeBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public LongGaugeBuilder ofLongs() {
return new ApplicationLongGaugeBuilder140Incubator(agentBuilder.ofLongs());
}
@Override
public DoubleGauge build() {
return new ApplicationDoubleGauge140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram;
import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogram;
final class ApplicationDoubleHistogram140Incubator extends ApplicationDoubleHistogram
implements ExtendedDoubleHistogram {
private final io.opentelemetry.api.metrics.DoubleHistogram agentHistogram;
ApplicationDoubleHistogram140Incubator(DoubleHistogram agentHistogram) {
super(agentHistogram);
this.agentHistogram = agentHistogram;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram) agentHistogram)
.isEnabled();
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleHistogram;
import application.io.opentelemetry.api.metrics.LongHistogramBuilder;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationDoubleHistogramBuilder137;
final class ApplicationDoubleHistogramBuilder140Incubator
extends ApplicationDoubleHistogramBuilder137 {
private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
ApplicationDoubleHistogramBuilder140Incubator(DoubleHistogramBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public LongHistogramBuilder ofLongs() {
return new ApplicationLongHistogramBuilder140Incubator(agentBuilder.ofLongs());
}
@Override
public DoubleHistogram build() {
return new ApplicationDoubleHistogram140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounter;
import io.opentelemetry.api.metrics.DoubleUpDownCounter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleUpDownCounter;
final class ApplicationDoubleUpDownCounter140Incubator extends ApplicationDoubleUpDownCounter
implements ExtendedDoubleUpDownCounter {
private final io.opentelemetry.api.metrics.DoubleUpDownCounter agentCounter;
ApplicationDoubleUpDownCounter140Incubator(DoubleUpDownCounter agentCounter) {
super(agentCounter);
this.agentCounter = agentCounter;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounter) agentCounter)
.isEnabled();
}
}

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleUpDownCounter;
import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationDoubleUpDownCounterBuilder137;
final class ApplicationDoubleUpDownCounterBuilder140Incubator
extends ApplicationDoubleUpDownCounterBuilder137 {
private final io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder;
ApplicationDoubleUpDownCounterBuilder140Incubator(DoubleUpDownCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public DoubleUpDownCounter build() {
return new ApplicationDoubleUpDownCounter140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,25 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedLongCounter;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounter;
final class ApplicationLongCounter140Incubator extends ApplicationLongCounter
implements ExtendedLongCounter {
private final io.opentelemetry.api.metrics.LongCounter agentCounter;
ApplicationLongCounter140Incubator(LongCounter agentCounter) {
super(agentCounter);
this.agentCounter = agentCounter;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedLongCounter) agentCounter).isEnabled();
}
}

View File

@ -0,0 +1,30 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleCounterBuilder;
import application.io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationLongCounterBuilder137;
final class ApplicationLongCounterBuilder140Incubator extends ApplicationLongCounterBuilder137 {
private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder;
ApplicationLongCounterBuilder140Incubator(LongCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public DoubleCounterBuilder ofDoubles() {
return new ApplicationDoubleCounterBuilder140Incubator(agentBuilder.ofDoubles());
}
@Override
public LongCounter build() {
return new ApplicationLongCounter140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedLongGauge;
import io.opentelemetry.api.metrics.LongGauge;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics.ApplicationLongGauge138;
final class ApplicationLongGauge140Incubator extends ApplicationLongGauge138
implements ExtendedLongGauge {
private final io.opentelemetry.api.metrics.LongGauge agentLongGauge;
ApplicationLongGauge140Incubator(LongGauge agentLongGauge) {
super(agentLongGauge);
this.agentLongGauge = agentLongGauge;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedLongGauge) agentLongGauge).isEnabled();
}
}

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.LongGauge;
import io.opentelemetry.api.metrics.LongGaugeBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.incubator.metrics.ApplicationLongGaugeBuilder138Incubator;
final class ApplicationLongGaugeBuilder140Incubator
extends ApplicationLongGaugeBuilder138Incubator {
private final io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder;
ApplicationLongGaugeBuilder140Incubator(LongGaugeBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public LongGauge build() {
return new ApplicationLongGauge140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedLongHistogram;
import io.opentelemetry.api.metrics.LongHistogram;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongHistogram;
final class ApplicationLongHistogram140Incubator extends ApplicationLongHistogram
implements ExtendedLongHistogram {
private final io.opentelemetry.api.metrics.LongHistogram agentHistogram;
ApplicationLongHistogram140Incubator(LongHistogram agentHistogram) {
super(agentHistogram);
this.agentHistogram = agentHistogram;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedLongHistogram) agentHistogram)
.isEnabled();
}
}

View File

@ -0,0 +1,25 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.LongHistogram;
import io.opentelemetry.api.metrics.LongHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationLongHistogramBuilder137;
final class ApplicationLongHistogramBuilder140Incubator extends ApplicationLongHistogramBuilder137 {
private final io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder;
ApplicationLongHistogramBuilder140Incubator(LongHistogramBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public LongHistogram build() {
return new ApplicationLongHistogram140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounter;
import io.opentelemetry.api.metrics.LongUpDownCounter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounter;
final class ApplicationLongUpDownCounter140Incubator extends ApplicationLongUpDownCounter
implements ExtendedLongUpDownCounter {
private final io.opentelemetry.api.metrics.LongUpDownCounter agentCounter;
ApplicationLongUpDownCounter140Incubator(LongUpDownCounter agentCounter) {
super(agentCounter);
this.agentCounter = agentCounter;
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounter) agentCounter)
.isEnabled();
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
import application.io.opentelemetry.api.metrics.LongUpDownCounter;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationLongUpDownCounterBuilder137;
final class ApplicationLongUpDownCounterBuilder140Incubator
extends ApplicationLongUpDownCounterBuilder137 {
private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder;
ApplicationLongUpDownCounterBuilder140Incubator(LongUpDownCounterBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = agentBuilder;
}
@Override
public DoubleUpDownCounterBuilder ofDoubles() {
return new ApplicationDoubleUpDownCounterBuilder140Incubator(agentBuilder.ofDoubles());
}
@Override
public LongUpDownCounter build() {
return new ApplicationLongUpDownCounter140Incubator(agentBuilder.build());
}
}

View File

@ -0,0 +1,43 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import application.io.opentelemetry.api.metrics.LongCounterBuilder;
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.BaseApplicationMeter137;
final class ApplicationMeter140Incubator extends BaseApplicationMeter137 {
private final io.opentelemetry.api.metrics.Meter agentMeter;
ApplicationMeter140Incubator(io.opentelemetry.api.metrics.Meter agentMeter) {
super(agentMeter);
this.agentMeter = agentMeter;
}
@Override
public LongCounterBuilder counterBuilder(String name) {
return new ApplicationLongCounterBuilder140Incubator(agentMeter.counterBuilder(name));
}
@Override
public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
return new ApplicationLongUpDownCounterBuilder140Incubator(
agentMeter.upDownCounterBuilder(name));
}
@Override
public DoubleHistogramBuilder histogramBuilder(String name) {
return new ApplicationDoubleHistogramBuilder140Incubator(agentMeter.histogramBuilder(name));
}
@Override
public DoubleGaugeBuilder gaugeBuilder(String name) {
return new ApplicationDoubleGaugeBuilder140Incubator(agentMeter.gaugeBuilder(name));
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeter;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
// this class is used from opentelemetry-api-1.27 via reflection
public final class ApplicationMeterFactory140Incubator implements ApplicationMeterFactory {
@Override
public ApplicationMeter newMeter(Meter agentMeter) {
return new ApplicationMeter140Incubator(agentMeter);
}
}

View File

@ -0,0 +1,202 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace;
import application.io.opentelemetry.api.common.AttributeKey;
import application.io.opentelemetry.api.common.Attributes;
import application.io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder;
import application.io.opentelemetry.api.incubator.trace.SpanCallable;
import application.io.opentelemetry.api.incubator.trace.SpanRunnable;
import application.io.opentelemetry.api.trace.Span;
import application.io.opentelemetry.api.trace.SpanContext;
import application.io.opentelemetry.api.trace.SpanKind;
import application.io.opentelemetry.context.Context;
import application.io.opentelemetry.context.propagation.ContextPropagators;
import application.io.opentelemetry.context.propagation.TextMapGetter;
import application.io.opentelemetry.context.propagation.TextMapPropagator;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.AgentContextStorage;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationSpan;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationSpanBuilder;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer;
import javax.annotation.Nullable;
final class ApplicationSpanBuilder140Incubator extends ApplicationSpanBuilder
implements ExtendedSpanBuilder {
private final io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder agentBuilder;
ApplicationSpanBuilder140Incubator(io.opentelemetry.api.trace.SpanBuilder agentBuilder) {
super(agentBuilder);
this.agentBuilder = (io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder) agentBuilder;
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setParent(Context applicationContext) {
return (ExtendedSpanBuilder) super.setParent(applicationContext);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setNoParent() {
return (ExtendedSpanBuilder) super.setNoParent();
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder addLink(SpanContext applicationSpanContext) {
return (ExtendedSpanBuilder) super.addLink(applicationSpanContext);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder addLink(
SpanContext applicationSpanContext, Attributes applicationAttributes) {
return (ExtendedSpanBuilder) super.addLink(applicationSpanContext, applicationAttributes);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setAttribute(String key, String value) {
return (ExtendedSpanBuilder) super.setAttribute(key, value);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setAttribute(String key, long value) {
return (ExtendedSpanBuilder) super.setAttribute(key, value);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setAttribute(String key, double value) {
return (ExtendedSpanBuilder) super.setAttribute(key, value);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setAttribute(String key, boolean value) {
return (ExtendedSpanBuilder) super.setAttribute(key, value);
}
@Override
@CanIgnoreReturnValue
public <T> ExtendedSpanBuilder setAttribute(AttributeKey<T> applicationKey, T value) {
return (ExtendedSpanBuilder) super.setAttribute(applicationKey, value);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setSpanKind(SpanKind applicationSpanKind) {
return (ExtendedSpanBuilder) super.setSpanKind(applicationSpanKind);
}
@Override
@CanIgnoreReturnValue
public ExtendedSpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit) {
return (ExtendedSpanBuilder) super.setStartTimestamp(startTimestamp, unit);
}
@Override
public ExtendedSpanBuilder setParentFrom(
ContextPropagators contextPropagators, Map<String, String> map) {
agentBuilder.setParentFrom(new AgentContextPropagators(contextPropagators), map);
return this;
}
@Override
public <T, E extends Throwable> T startAndCall(SpanCallable<T, E> spanCallable) throws E {
return agentBuilder.startAndCall(spanCallable::callInSpan);
}
@Override
public <T, E extends Throwable> T startAndCall(
SpanCallable<T, E> spanCallable, BiConsumer<Span, Throwable> biConsumer) throws E {
return agentBuilder.startAndCall(
spanCallable::callInSpan,
(span, throwable) -> biConsumer.accept(new ApplicationSpan(span), throwable));
}
@Override
public <E extends Throwable> void startAndRun(SpanRunnable<E> spanRunnable) throws E {
agentBuilder.startAndRun(spanRunnable::runInSpan);
}
@Override
public <E extends Throwable> void startAndRun(
SpanRunnable<E> spanRunnable, BiConsumer<Span, Throwable> biConsumer) throws E {
agentBuilder.startAndRun(
spanRunnable::runInSpan,
(span, throwable) -> biConsumer.accept(new ApplicationSpan(span), throwable));
}
private static class AgentContextPropagators
implements io.opentelemetry.context.propagation.ContextPropagators {
private final ContextPropagators applicationContextPropagators;
AgentContextPropagators(ContextPropagators applicationContextPropagators) {
this.applicationContextPropagators = applicationContextPropagators;
}
@Override
public io.opentelemetry.context.propagation.TextMapPropagator getTextMapPropagator() {
return new AgentTextMapPropagator(applicationContextPropagators.getTextMapPropagator());
}
}
private static class AgentTextMapPropagator
implements io.opentelemetry.context.propagation.TextMapPropagator {
private final TextMapPropagator applicationTextMapPropagator;
AgentTextMapPropagator(TextMapPropagator applicationTextMapPropagator) {
this.applicationTextMapPropagator = applicationTextMapPropagator;
}
@Override
public Collection<String> fields() {
return applicationTextMapPropagator.fields();
}
@Override
public <C> void inject(
io.opentelemetry.context.Context context,
@Nullable C c,
io.opentelemetry.context.propagation.TextMapSetter<C> textMapSetter) {
applicationTextMapPropagator.inject(
AgentContextStorage.toApplicationContext(context), c, textMapSetter::set);
}
@Override
public <C> io.opentelemetry.context.Context extract(
io.opentelemetry.context.Context context,
@Nullable C c,
io.opentelemetry.context.propagation.TextMapGetter<C> textMapGetter) {
return AgentContextStorage.getAgentContext(
applicationTextMapPropagator.extract(
AgentContextStorage.toApplicationContext(context),
c,
new TextMapGetter<C>() {
@Override
public Iterable<String> keys(C c) {
return textMapGetter.keys(c);
}
@Nullable
@Override
public String get(@Nullable C c, String s) {
return textMapGetter.get(c, s);
}
}));
}
}
}

View File

@ -0,0 +1,31 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace;
import application.io.opentelemetry.api.incubator.trace.ExtendedTracer;
import application.io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracer;
final class ApplicationTracer140Incubator extends ApplicationTracer implements ExtendedTracer {
private final io.opentelemetry.api.trace.Tracer agentTracer;
ApplicationTracer140Incubator(Tracer agentTracer) {
super(agentTracer);
this.agentTracer = agentTracer;
}
@Override
public SpanBuilder spanBuilder(String spanName) {
return new ApplicationSpanBuilder140Incubator(agentTracer.spanBuilder(spanName));
}
@Override
public boolean isEnabled() {
return ((io.opentelemetry.api.incubator.trace.ExtendedTracer) agentTracer).isEnabled();
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.ApplicationTracerFactory;
// this class is used from opentelemetry-api-1.27.0 via reflection
public class ApplicationTracerFactory140Incubator implements ApplicationTracerFactory {
@Override
public ApplicationTracer newTracer(Tracer agentTracer) {
return new ApplicationTracer140Incubator(agentTracer);
}
}

View File

@ -0,0 +1,33 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.incubator.logs.ExtendedLogger;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class LoggerTest {
@RegisterExtension
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
@Test
void isEnabled() {
Logger disabledLogger = testing.getOpenTelemetry().getLogsBridge().get("disabled-logger");
Logger enabledLogger = testing.getOpenTelemetry().getLogsBridge().get("enabled-logger");
testEnabled(disabledLogger, false);
testEnabled(enabledLogger, true);
}
private static void testEnabled(Logger logger, boolean expected) {
assertThat(logger).isInstanceOf(ExtendedLogger.class);
assertThat(((ExtendedLogger) logger).isEnabled()).isEqualTo(expected);
}
}

View File

@ -0,0 +1,85 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.metrics;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounter;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGauge;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram;
import io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounter;
import io.opentelemetry.api.incubator.metrics.ExtendedLongCounter;
import io.opentelemetry.api.incubator.metrics.ExtendedLongGauge;
import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogram;
import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounter;
import io.opentelemetry.api.metrics.DoubleCounter;
import io.opentelemetry.api.metrics.DoubleGauge;
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.api.metrics.DoubleUpDownCounter;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.api.metrics.LongGauge;
import io.opentelemetry.api.metrics.LongHistogram;
import io.opentelemetry.api.metrics.LongUpDownCounter;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class MeterTest {
@RegisterExtension
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
@Test
void isEnabled() {
Meter disabledMeter = testing.getOpenTelemetry().getMeter("disabled-meter");
Meter enabledMeter = testing.getOpenTelemetry().getMeter("enabled-meter");
testEnabled(disabledMeter, false);
testEnabled(enabledMeter, true);
}
private static void testEnabled(Meter meter, boolean expected) {
LongCounterBuilder counterBuilder = meter.counterBuilder("test");
LongCounter longCounter = counterBuilder.build();
assertThat(longCounter).isInstanceOf(ExtendedLongCounter.class);
assertThat(((ExtendedLongCounter) longCounter).isEnabled()).isEqualTo(expected);
DoubleCounter doubleCounter = counterBuilder.ofDoubles().build();
assertThat(doubleCounter).isInstanceOf(ExtendedDoubleCounter.class);
assertThat(((ExtendedDoubleCounter) doubleCounter).isEnabled()).isEqualTo(expected);
LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test");
LongUpDownCounter longUpDownCounter = upDownCounterBuilder.build();
assertThat(longUpDownCounter).isInstanceOf(ExtendedLongUpDownCounter.class);
assertThat(((ExtendedLongUpDownCounter) longUpDownCounter).isEnabled()).isEqualTo(expected);
DoubleUpDownCounter doubleUpDownCounter = upDownCounterBuilder.ofDoubles().build();
assertThat(doubleUpDownCounter).isInstanceOf(ExtendedDoubleUpDownCounter.class);
assertThat(((ExtendedDoubleUpDownCounter) doubleUpDownCounter).isEnabled()).isEqualTo(expected);
DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test");
DoubleGauge doubleGauge = gaugeBuilder.build();
assertThat(doubleGauge).isInstanceOf(ExtendedDoubleGauge.class);
assertThat(((ExtendedDoubleGauge) doubleGauge).isEnabled()).isEqualTo(expected);
LongGauge longGauge = gaugeBuilder.ofLongs().build();
assertThat(longGauge).isInstanceOf(ExtendedLongGauge.class);
assertThat(((ExtendedLongGauge) longGauge).isEnabled()).isEqualTo(expected);
DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test");
DoubleHistogram doubleHistogram = histogramBuilder.build();
assertThat(doubleHistogram).isInstanceOf(ExtendedDoubleHistogram.class);
assertThat(((ExtendedDoubleHistogram) doubleHistogram).isEnabled()).isEqualTo(expected);
LongHistogram longHistogram = histogramBuilder.ofLongs().build();
assertThat(longHistogram).isInstanceOf(ExtendedLongHistogram.class);
assertThat(((ExtendedLongHistogram) longHistogram).isEnabled()).isEqualTo(expected);
}
}

View File

@ -0,0 +1,118 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder;
import io.opentelemetry.api.incubator.trace.ExtendedTracer;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class TracerTest {
@RegisterExtension
private static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Test
void isEnabled() {
Tracer disabledTracer = testing.getOpenTelemetry().getTracer("disabled-tracer");
Tracer enabledTracer = testing.getOpenTelemetry().getTracer("enabled-tracer");
testEnabled(disabledTracer, false);
testEnabled(enabledTracer, true);
}
private static void testEnabled(Tracer tracer, boolean expected) {
assertThat(tracer).isInstanceOf(ExtendedTracer.class);
assertThat(((ExtendedTracer) tracer).isEnabled()).isEqualTo(expected);
}
@Test
void extendedSpanBuilder() {
Tracer tracer = testing.getOpenTelemetry().getTracer("test");
SpanBuilder spanBuilder = tracer.spanBuilder("test");
assertThat(spanBuilder).isInstanceOf(ExtendedSpanBuilder.class);
ExtendedSpanBuilder builder = (ExtendedSpanBuilder) spanBuilder;
{
Span span = builder.startAndCall(Span::current);
assertThat(span.getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
{
Span span = builder.startAndCall(Span::current, (s, t) -> {});
assertThat(span.getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
{
AtomicReference<Span> spanRef = new AtomicReference<>();
assertThatThrownBy(
() ->
builder.startAndCall(
() -> {
throw new IllegalStateException("fail");
},
(s, t) -> spanRef.set(s)))
.isInstanceOf(IllegalStateException.class);
assertThat(spanRef.get().getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
{
AtomicReference<Span> spanRef = new AtomicReference<>();
builder.startAndRun(() -> spanRef.set(Span.current()));
assertThat(spanRef.get().getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
{
AtomicReference<Span> spanRef = new AtomicReference<>();
builder.startAndRun(() -> spanRef.set(Span.current()), (s, t) -> {});
assertThat(spanRef.get().getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
{
AtomicReference<Span> spanRef = new AtomicReference<>();
assertThatThrownBy(
() ->
builder.startAndRun(
() -> {
throw new IllegalStateException("fail");
},
(s, t) -> spanRef.set(s)))
.isInstanceOf(IllegalStateException.class);
assertThat(spanRef.get().getSpanContext().getTraceId()).isNotEqualTo(TraceId.getInvalid());
}
Map<String, String> map = new HashMap<>();
Context context =
Context.root()
.with(
Span.wrap(
SpanContext.create(
TraceId.fromLongs(0, 1),
SpanId.fromLong(2),
TraceFlags.getDefault(),
TraceState.getDefault())));
W3CTraceContextPropagator.getInstance()
.inject(context, map, (m, key, value) -> m.put(key, value));
builder.setParentFrom(ContextPropagators.create(W3CTraceContextPropagator.getInstance()), map);
Span span = builder.startSpan();
assertThat(span.getSpanContext().getTraceId()).isEqualTo(TraceId.fromLongs(0, 1));
}
}

View File

@ -15,6 +15,7 @@ dependencies {
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.40:javaagent"))
}
configurations.configureEach {
@ -22,5 +23,26 @@ configurations.configureEach {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api:1.42.0")
}
if (name.startsWith("incubatorTest")) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api-incubator:1.42.0-alpha")
}
}
}
}
testing {
suites {
val incubatorTest by registering(JvmTestSuite::class) {
dependencies {
implementation("io.opentelemetry:opentelemetry-api-incubator:1.42.0-alpha")
}
}
}
}
tasks {
check {
dependsOn(testing.suites)
}
}

View File

@ -0,0 +1,145 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.KeyValue;
import io.opentelemetry.api.common.Value;
import io.opentelemetry.api.common.ValueType;
import io.opentelemetry.api.incubator.logs.ExtendedLogger;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.sdk.trace.IdGenerator;
import java.time.Instant;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class LoggerTest {
@RegisterExtension
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
private String instrumentationName;
private Logger logger;
@BeforeEach
void setupLogger(TestInfo test) {
instrumentationName = "test-" + test.getDisplayName();
logger =
GlobalOpenTelemetry.get()
.getLogsBridge()
.loggerBuilder(instrumentationName)
.setInstrumentationVersion("1.2.3")
.setSchemaUrl("http://schema.org")
.build();
}
@Test
void logRecordBuilder() {
assertThat(logger).isInstanceOf(ExtendedLogger.class);
SpanContext spanContext =
SpanContext.create(
IdGenerator.random().generateTraceId(),
IdGenerator.random().generateSpanId(),
TraceFlags.getDefault(),
TraceState.getDefault());
logger
.logRecordBuilder()
.setTimestamp(1, TimeUnit.SECONDS)
.setTimestamp(Instant.now())
.setContext(Context.current().with(Span.wrap(spanContext)))
.setSeverity(Severity.DEBUG)
.setSeverityText("debug")
.setBody("body")
.setAttribute(AttributeKey.stringKey("key"), "value")
.setAllAttributes(Attributes.builder().put("key", "value").build())
.emit();
await()
.untilAsserted(
() ->
assertThat(testing.logRecords())
.satisfiesExactly(
logRecordData -> {
assertThat(logRecordData.getInstrumentationScopeInfo().getName())
.isEqualTo(instrumentationName);
assertThat(logRecordData.getInstrumentationScopeInfo().getVersion())
.isEqualTo("1.2.3");
assertThat(logRecordData.getTimestampEpochNanos()).isGreaterThan(0);
assertThat(logRecordData.getSpanContext()).isEqualTo(spanContext);
assertThat(logRecordData.getSeverity()).isEqualTo(Severity.DEBUG);
assertThat(logRecordData.getSeverityText()).isEqualTo("debug");
assertThat(logRecordData.getBodyValue().getType())
.isEqualTo(ValueType.STRING);
assertThat(logRecordData.getBodyValue().getValue()).isEqualTo("body");
assertThat(logRecordData.getAttributes())
.isEqualTo(Attributes.builder().put("key", "value").build());
}));
}
private static Stream<Arguments> bodyValues() {
return Stream.of(
Arguments.of(Value.of("hello")),
Arguments.of(Value.of(42)),
Arguments.of(Value.of(42.42)),
Arguments.of(Value.of(true)),
Arguments.of(Value.of(new byte[] {4, 2})),
Arguments.of(Value.of(Value.of("hello"), Value.of(42))),
Arguments.of(Value.of(KeyValue.of("key", Value.of(42)))));
}
@ParameterizedTest
@MethodSource("bodyValues")
void logBodyValue() {
Value<?> value = Value.of(42);
logger.logRecordBuilder().setBody(value).emit();
await()
.untilAsserted(
() ->
assertThat(testing.logRecords())
.satisfiesExactly(
logRecordData -> {
assertThat(logRecordData.getBodyValue().getType())
.isEqualTo(value.getType());
assertThat(logRecordData.getBodyValue().getValue())
.isEqualTo(value.getValue());
}));
}
@Test
void logNullBody() {
Value<?> value = null;
logger.logRecordBuilder().setBody(value).emit();
await()
.untilAsserted(
() ->
assertThat(testing.logRecords())
.satisfiesExactly(
logRecordData -> assertThat(logRecordData.getBodyValue()).isNull()));
}
}

View File

@ -5,13 +5,16 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static java.util.Collections.singletonList;
import static net.bytebuddy.matcher.ElementMatchers.not;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
import java.util.List;
import net.bytebuddy.matcher.ElementMatcher;
@AutoService(InstrumentationModule.class)
public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule
@ -20,6 +23,11 @@ public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule
super("opentelemetry-api", "opentelemetry-api-1.42");
}
@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return not(hasClassesNamed("application.io.opentelemetry.api.incubator.logs.ExtendedLogger"));
}
@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new OpenTelemetryInstrumentation());

View File

@ -0,0 +1,39 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static java.util.Collections.singletonList;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
import java.util.List;
import net.bytebuddy.matcher.ElementMatcher;
@AutoService(InstrumentationModule.class)
public class OpenTelemetryApiIncubatorInstrumentationModule extends InstrumentationModule
implements ExperimentalInstrumentationModule {
public OpenTelemetryApiIncubatorInstrumentationModule() {
super("opentelemetry-api", "opentelemetry-api-1.42", "opentelemetry-api-incubator-1.42");
}
@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed("application.io.opentelemetry.api.incubator.logs.ExtendedLogger");
}
@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new OpenTelemetryIncubatorInstrumentation());
}
@Override
public String getModuleGroup() {
return "opentelemetry-api-bridge";
}
}

View File

@ -0,0 +1,40 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.none;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs.ApplicationLoggerFactory142Incubator;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
public class OpenTelemetryIncubatorInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
}
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
none(), OpenTelemetryIncubatorInstrumentation.class.getName() + "$InitAdvice");
}
@SuppressWarnings({"ReturnValueIgnored", "unused"})
public static class InitAdvice {
@Advice.OnMethodEnter
public static void init() {
// the sole purpose of this advice is to ensure that ApplicationLoggerFactory142Incubator is
// recognized as helper class and injected into class loader
ApplicationLoggerFactory142Incubator.class.getName();
}
}
}

View File

@ -0,0 +1,74 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs;
import application.io.opentelemetry.api.common.KeyValue;
import application.io.opentelemetry.api.common.Value;
import application.io.opentelemetry.api.logs.LogRecordBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogRecordBuilder;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
class ApplicationLogRecordBuilder142 extends ApplicationLogRecordBuilder
implements LogRecordBuilder {
private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder;
ApplicationLogRecordBuilder142(io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) {
super(agentLogRecordBuilder);
this.agentLogRecordBuilder = agentLogRecordBuilder;
}
@Override
public LogRecordBuilder setBody(Value<?> body) {
agentLogRecordBuilder.setBody(convertValue(body));
return this;
}
@SuppressWarnings("unchecked")
private static io.opentelemetry.api.common.Value<?> convertValue(Value<?> value) {
if (value == null) {
return null;
}
switch (value.getType()) {
case STRING:
return io.opentelemetry.api.common.Value.of((String) value.getValue());
case BOOLEAN:
return io.opentelemetry.api.common.Value.of((Boolean) value.getValue());
case LONG:
return io.opentelemetry.api.common.Value.of((Long) value.getValue());
case DOUBLE:
return io.opentelemetry.api.common.Value.of((Double) value.getValue());
case ARRAY:
List<Value<?>> values = (List<Value<?>>) value.getValue();
List<io.opentelemetry.api.common.Value<?>> convertedValues = new ArrayList<>();
for (Value<?> source : values) {
convertedValues.add(convertValue(source));
}
return io.opentelemetry.api.common.Value.of(convertedValues);
case KEY_VALUE_LIST:
List<KeyValue> keyValueList = (List<KeyValue>) value.getValue();
io.opentelemetry.api.common.KeyValue[] convertedKeyValueList =
new io.opentelemetry.api.common.KeyValue[keyValueList.size()];
int i = 0;
for (KeyValue source : keyValueList) {
convertedKeyValueList[i++] =
io.opentelemetry.api.common.KeyValue.of(
source.getKey(), convertValue(source.getValue()));
}
return io.opentelemetry.api.common.Value.of(convertedKeyValueList);
case BYTES:
ByteBuffer byteBuffer = (ByteBuffer) value.getValue();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
break;
}
throw new IllegalStateException("Unhandled value type: " + value.getType());
}
}

View File

@ -0,0 +1,24 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs;
import application.io.opentelemetry.api.logs.LogRecordBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs.ApplicationLogger140Incubator;
class ApplicationLogger142Incubator extends ApplicationLogger140Incubator {
private final io.opentelemetry.api.logs.Logger agentLogger;
ApplicationLogger142Incubator(io.opentelemetry.api.logs.Logger agentLogger) {
super(agentLogger);
this.agentLogger = agentLogger;
}
@Override
public LogRecordBuilder logRecordBuilder() {
return new ApplicationLogRecordBuilder142(agentLogger.logRecordBuilder());
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory;
// this class is used from opentelemetry-api-1.27.0 via reflection
public class ApplicationLoggerFactory142Incubator implements ApplicationLoggerFactory {
@Override
public ApplicationLogger newLogger(Logger agentLogger) {
return new ApplicationLogger142Incubator(agentLogger);
}
}

View File

@ -9,6 +9,7 @@ import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory;
// this class is used from opentelemetry-api-1.27.0 via reflection
public class ApplicationLoggerFactory142 implements ApplicationLoggerFactory {
@Override

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42;
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

View File

@ -58,6 +58,13 @@ val v1_38Deps by configurations.creating {
exclude("io.opentelemetry", "opentelemetry-bom")
exclude("io.opentelemetry", "opentelemetry-bom-alpha")
}
val v1_40Deps by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
// exclude the bom added by dependencyManagement
exclude("io.opentelemetry", "opentelemetry-bom")
exclude("io.opentelemetry", "opentelemetry-bom-alpha")
}
val v1_42Deps by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
@ -94,6 +101,10 @@ val v1_38 by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
}
val v1_40 by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
}
val v1_42 by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
@ -154,6 +165,11 @@ dependencies {
strictly("1.38.0-alpha")
}
}
v1_40Deps("io.opentelemetry:$it") {
version {
strictly("1.40.0-alpha")
}
}
v1_42Deps("io.opentelemetry:$it") {
version {
strictly("1.42.0-alpha")
@ -202,6 +218,10 @@ tasks {
configurations = listOf(v1_38Deps)
archiveClassifier.set("v1_38")
}
val v1_40Shadow by registering(ShadowJar::class) {
configurations = listOf(v1_40Deps)
archiveClassifier.set("v1_40")
}
val v1_42Shadow by registering(ShadowJar::class) {
configurations = listOf(v1_42Deps)
archiveClassifier.set("v1_42")
@ -215,6 +235,7 @@ tasks {
add(v1_32.name, v1_32Shadow)
add(v1_37.name, v1_37Shadow)
add(v1_38.name, v1_38Shadow)
add(v1_40.name, v1_40Shadow)
add(v1_42.name, v1_42Shadow)
}
}

View File

@ -457,6 +457,7 @@ include(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent")
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent")
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent")
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent")
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.40:javaagent")
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.42:javaagent")
include(":instrumentation:opentelemetry-extension-annotations-1.0:javaagent")
include(":instrumentation:opentelemetry-extension-kotlin-1.0:javaagent")

View File

@ -5,13 +5,21 @@
package io.opentelemetry.javaagent.testing.exporter;
import static io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder.nameEquals;
import com.google.auto.service.AutoService;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
import io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil;
import io.opentelemetry.sdk.metrics.export.MetricReader;
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
import io.opentelemetry.sdk.metrics.internal.MeterConfig;
import io.opentelemetry.sdk.metrics.internal.SdkMeterProviderUtil;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.internal.SdkTracerProviderUtil;
import io.opentelemetry.sdk.trace.internal.TracerConfig;
import java.time.Duration;
@AutoService(AutoConfigurationCustomizerProvider.class)
@ -36,6 +44,9 @@ public class AgentTestingCustomizer implements AutoConfigurationCustomizerProvid
public void customize(AutoConfigurationCustomizer autoConfigurationCustomizer) {
autoConfigurationCustomizer.addTracerProviderCustomizer(
(tracerProvider, config) -> {
SdkTracerProviderUtil.addTracerConfiguratorCondition(
tracerProvider, nameEquals("disabled-tracer"), TracerConfig.disabled());
// span processor is responsible for exporting spans, not adding it disables exporting of
// the spans
if (config.getBoolean("testing.exporter.enabled", true)) {
@ -46,6 +57,9 @@ public class AgentTestingCustomizer implements AutoConfigurationCustomizerProvid
autoConfigurationCustomizer.addMeterProviderCustomizer(
(meterProvider, config) -> {
SdkMeterProviderUtil.addMeterConfiguratorCondition(
meterProvider, nameEquals("disabled-meter"), MeterConfig.disabled());
// metric reader is responsible for exporting metrics, not adding it disables exporting of
// the metrics
if (config.getBoolean("testing.exporter.enabled", true)) {
@ -56,6 +70,9 @@ public class AgentTestingCustomizer implements AutoConfigurationCustomizerProvid
autoConfigurationCustomizer.addLoggerProviderCustomizer(
(logProvider, config) -> {
SdkLoggerProviderUtil.addLoggerConfiguratorCondition(
logProvider, nameEquals("disabled-logger"), LoggerConfig.disabled());
// log record processor is responsible for exporting logs, not adding it disables
// exporting of the logs
if (config.getBoolean("testing.exporter.enabled", true)) {