Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .fossa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -826,6 +826,9 @@ targets:
- type: gradle
path: ./
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.52:javaagent'
- type: gradle
path: ./
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.56:javaagent'
- type: gradle
path: ./
target: ':instrumentation:pekko:pekko-actor-1.0:javaagent'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ public class ApplicationOpenTelemetry implements OpenTelemetry {
public static final OpenTelemetry INSTANCE;

static {
OpenTelemetry instance = getOpenTelemetry127();
OpenTelemetry instance = getOpenTelemetry156();
if (instance == null) {
instance = getOpenTelemetry127();
}
if (instance == null) {
instance = getOpenTelemetry110();
}
Expand Down Expand Up @@ -52,26 +55,27 @@ public ContextPropagators getPropagators() {
return applicationContextPropagators;
}

@Nullable
private static OpenTelemetry getOpenTelemetry156() {
return getOpenTelemetry(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.incubator.ApplicationOpenTelemetry156Incubator");
}

@Nullable
private static OpenTelemetry getOpenTelemetry127() {
try {
// this class is defined in opentelemetry-api-1.27
Class<?> clazz =
Class.forName(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.ApplicationOpenTelemetry127");
return (OpenTelemetry) clazz.getField("INSTANCE").get(null);
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException exception) {
return null;
}
return getOpenTelemetry(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.ApplicationOpenTelemetry127");
}

@Nullable
private static OpenTelemetry getOpenTelemetry110() {
return getOpenTelemetry(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.ApplicationOpenTelemetry110");
}

private static OpenTelemetry getOpenTelemetry(String className) {
try {
// this class is defined in opentelemetry-api-1.10
Class<?> clazz =
Class.forName(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.ApplicationOpenTelemetry110");
Class<?> clazz = Class.forName(className);
return (OpenTelemetry) clazz.getField("INSTANCE").get(null);
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException exception) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace.ApplicationTracerProvider14;
import java.lang.reflect.InvocationTargetException;

public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
public class ApplicationOpenTelemetry127 implements OpenTelemetry {

// Accessed with reflection
@SuppressWarnings("unused")
Expand All @@ -34,7 +34,7 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
private final LoggerProvider applicationLoggerProvider;

@SuppressWarnings("UnnecessarilyFullyQualified")
private ApplicationOpenTelemetry127() {
protected ApplicationOpenTelemetry127() {
io.opentelemetry.api.OpenTelemetry agentOpenTelemetry =
io.opentelemetry.api.GlobalOpenTelemetry.get();
applicationTracerProvider =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
plugins {
id("otel.javaagent-instrumentation")
}

dependencies {
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_56"))
compileOnly("io.opentelemetry:opentelemetry-api-incubator")

implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.40:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.42:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.47:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.50:javaagent"))
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.52:javaagent"))

testImplementation("io.opentelemetry:opentelemetry-api-incubator")
}

tasks.withType<Test>().configureEach {
jvmArgs(
"-Dotel.experimental.config.file=$projectDir/src/test/resources/declarative-config.yaml"
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.incubator;

import application.io.opentelemetry.api.OpenTelemetry;
import application.io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
import application.io.opentelemetry.api.incubator.config.ConfigProvider;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.ApplicationOpenTelemetry127;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.incubator.config.ApplicationConfigProvider156Incubator;
import javax.annotation.Nullable;

public final class ApplicationOpenTelemetry156Incubator extends ApplicationOpenTelemetry127
implements ExtendedOpenTelemetry {

// Accessed with reflection
@Nullable
@SuppressWarnings("unused")
public static final OpenTelemetry INSTANCE = create();

private final ConfigProvider configProvider;

@Nullable
private static ApplicationOpenTelemetry156Incubator create() {
io.opentelemetry.api.OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
if (openTelemetry instanceof io.opentelemetry.api.incubator.ExtendedOpenTelemetry) {
return new ApplicationOpenTelemetry156Incubator(
((io.opentelemetry.api.incubator.ExtendedOpenTelemetry) openTelemetry)
.getConfigProvider());
}
return null;
}

public ApplicationOpenTelemetry156Incubator(
io.opentelemetry.api.incubator.config.ConfigProvider configProvider) {
this.configProvider = new ApplicationConfigProvider156Incubator(configProvider);
}

@Override
public ConfigProvider getConfigProvider() {
return configProvider;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.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.56", "opentelemetry-api-incubator-1.56");
}

@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed(
"application.io.opentelemetry.api.common.Value",
"application.io.opentelemetry.api.incubator.ExtendedOpenTelemetry");
}

@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new OpenTelemetryIncubatorInstrumentation());
}

@Override
public String getModuleGroup() {
return "opentelemetry-api-bridge";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.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 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 the classes are
// recognized as helper class and injected into class loader
ApplicationOpenTelemetry156Incubator.class.getName();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.incubator.config;

import application.io.opentelemetry.api.incubator.config.ConfigProvider;
import application.io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import javax.annotation.Nullable;

public final class ApplicationConfigProvider156Incubator implements ConfigProvider {

private final DeclarativeConfigProperties declarativeConfigProperties;

public ApplicationConfigProvider156Incubator(
io.opentelemetry.api.incubator.config.ConfigProvider configProvider) {
this.declarativeConfigProperties =
new ApplicationDeclarativeConfigProperties156Incubator(
configProvider.getInstrumentationConfig());
}

@Nullable
@Override
public DeclarativeConfigProperties getInstrumentationConfig() {
return declarativeConfigProperties;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_56.incubator.config;

import application.io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import application.io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import application.io.opentelemetry.common.ComponentLoader;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Nullable;

public final class ApplicationDeclarativeConfigProperties156Incubator
implements DeclarativeConfigProperties {
private final io.opentelemetry.api.incubator.config.DeclarativeConfigProperties
instrumentationConfig;

public ApplicationDeclarativeConfigProperties156Incubator(
io.opentelemetry.api.incubator.config.DeclarativeConfigProperties instrumentationConfig) {
this.instrumentationConfig = instrumentationConfig;
}

@Nullable
@Override
public String getString(String name) {
return instrumentationConfig.getString(name);
}

@Override
public String getString(String name, String defaultValue) {
return instrumentationConfig.getString(name, defaultValue);
}

@Nullable
@Override
public Boolean getBoolean(String name) {
return instrumentationConfig.getBoolean(name);
}

@Override
public boolean getBoolean(String name, boolean defaultValue) {
return instrumentationConfig.getBoolean(name, defaultValue);
}

@Nullable
@Override
public Integer getInt(String name) {
return instrumentationConfig.getInt(name);
}

@Override
public int getInt(String name, int defaultValue) {
return instrumentationConfig.getInt(name, defaultValue);
}

@Nullable
@Override
public Long getLong(String name) {
return instrumentationConfig.getLong(name);
}

@Override
public long getLong(String name, long defaultValue) {
return instrumentationConfig.getLong(name, defaultValue);
}

@Nullable
@Override
public Double getDouble(String name) {
return instrumentationConfig.getDouble(name);
}

@Override
public double getDouble(String name, double defaultValue) {
return instrumentationConfig.getDouble(name, defaultValue);
}

@Nullable
@Override
public <T> List<T> getScalarList(String name, Class<T> scalarType) {
return instrumentationConfig.getScalarList(name, scalarType);
}

@Override
public <T> List<T> getScalarList(String name, Class<T> scalarType, List<T> defaultValue) {
return instrumentationConfig.getScalarList(name, scalarType, defaultValue);
}

@Nullable
@Override
public DeclarativeConfigProperties getStructured(String name) {
return new ApplicationDeclarativeConfigProperties156Incubator(
instrumentationConfig.getStructured(name));
}

@Nullable
@Override
public List<DeclarativeConfigProperties> getStructuredList(String name) {
List<io.opentelemetry.api.incubator.config.DeclarativeConfigProperties> structuredList =
instrumentationConfig.getStructuredList(name);
if (structuredList == null) {
return null;
}

return structuredList.stream()
.map(e -> new ApplicationDeclarativeConfigProperties156Incubator(e))
.collect(Collectors.toList());
}

@Override
public Set<String> getPropertyKeys() {
return instrumentationConfig.getPropertyKeys();
}

@Override
public ComponentLoader getComponentLoader() {
throw new DeclarativeConfigException(
"getComponentLoader is not supported in application code. "
+ "It is only used to set up the OpenTelemetry SDK in the agent.");
}
}
Loading
Loading