Skip to content

Commit 90b334c

Browse files
authored
Merge branch 'main' into convert-groovy-cache-provider
2 parents 42e5840 + c48dfea commit 90b334c

File tree

9 files changed

+181
-1
lines changed

9 files changed

+181
-1
lines changed

instrumentation/hibernate/hibernate-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionFactoryInstrumentation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public void transform(TypeTransformer transformer) {
4545
namedOneOf(
4646
"org.hibernate.Session",
4747
"org.hibernate.StatelessSession",
48-
"org.hibernate.internal.SessionImpl"))),
48+
"org.hibernate.internal.SessionImpl",
49+
"org.hibernate.engine.spi.SessionImplementor"))),
4950
SessionFactoryInstrumentation.class.getName() + "$SessionFactoryAdvice");
5051
}
5152

instrumentation/logback/logback-appender-1.0/javaagent/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ dependencies {
4646

4747
implementation(project(":instrumentation:logback:logback-appender-1.0:library"))
4848

49+
testInstrumentation(project(":instrumentation:logback:logback-mdc-1.0:javaagent"))
50+
4951
testImplementation("org.awaitility:awaitility")
5052
}
5153

instrumentation/logback/logback-appender-1.0/javaagent/src/test/java/io/opentelemetry/instrumentation/logback/appender/v1_0/LogbackTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.opentelemetry.api.common.AttributeKey;
1818
import io.opentelemetry.api.logs.Severity;
1919
import io.opentelemetry.api.trace.SpanContext;
20+
import io.opentelemetry.api.trace.TraceFlags;
2021
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
2122
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
2223
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
@@ -167,6 +168,15 @@ private static void test(
167168
satisfies(
168169
EXCEPTION_STACKTRACE, v -> v.contains(LogbackTest.class.getName()))));
169170
}
171+
if (withParent) {
172+
SpanContext spanContext = testing.spans().get(0).getSpanContext();
173+
attributeAsserts.addAll(
174+
Arrays.asList(
175+
equalTo(AttributeKey.stringKey("trace_id"), spanContext.getTraceId()),
176+
equalTo(AttributeKey.stringKey("span_id"), spanContext.getSpanId()),
177+
equalTo(
178+
AttributeKey.stringKey("trace_flags"), TraceFlags.getSampled().asHex())));
179+
}
170180
logRecord.hasAttributesSatisfyingExactly(attributeAsserts);
171181
});
172182
} else {

instrumentation/logback/logback-appender-1.0/library/src/test/java/io/opentelemetry/instrumentation/logback/appender/v1_0/internal/LoggingEventMapperTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
import java.util.HashMap;
1818
import java.util.Map;
1919
import org.junit.jupiter.api.Test;
20+
import org.junit.jupiter.api.condition.DisabledInNativeImage;
2021

22+
@DisabledInNativeImage // conflict with Mockito
2123
class LoggingEventMapperTest {
2224

2325
@Test

instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackMdcInstrumentationModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,11 @@ public List<TypeInstrumentation> typeInstrumentations() {
2929
public boolean isIndyReady() {
3030
return true;
3131
}
32+
33+
@Override
34+
public int order() {
35+
// run before logback appender instrumentation so that the appender instrumentation can observe
36+
// the attributes added to the mdc by this instrumentation
37+
return -1;
38+
}
3239
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.tooling;
7+
8+
import com.google.auto.service.AutoService;
9+
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
10+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizer;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ConsoleExporterModel;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel;
15+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporterModel;
16+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
17+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
18+
19+
/** Adds span logging exporter for debug mode */
20+
@AutoService(DeclarativeConfigurationCustomizerProvider.class)
21+
public class SpanLoggingCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
22+
23+
@Override
24+
public void customize(DeclarativeConfigurationCustomizer customizer) {
25+
customizer.addModelCustomizer(
26+
model -> {
27+
maybeEnableLoggingExporter(model);
28+
return model;
29+
});
30+
}
31+
32+
private static void maybeEnableLoggingExporter(OpenTelemetryConfigurationModel model) {
33+
// read from system properties as it's an early init property and the config bridge is not
34+
// available here
35+
if (!ConfigPropertiesUtil.getBoolean("otel.javaagent.debug", false)) {
36+
return;
37+
}
38+
// don't install another instance if the user has already explicitly requested it.
39+
if (loggingExporterIsAlreadyConfigured(model)) {
40+
return;
41+
}
42+
TracerProviderModel tracerProvider = model.getTracerProvider();
43+
if (tracerProvider == null) {
44+
tracerProvider = new TracerProviderModel();
45+
model.withTracerProvider(tracerProvider);
46+
}
47+
SpanProcessorModel processor =
48+
new SpanProcessorModel()
49+
.withSimple(
50+
new SimpleSpanProcessorModel()
51+
.withExporter(new SpanExporterModel().withConsole(new ConsoleExporterModel())));
52+
tracerProvider.getProcessors().add(processor);
53+
}
54+
55+
private static boolean loggingExporterIsAlreadyConfigured(OpenTelemetryConfigurationModel model) {
56+
TracerProviderModel tracerProvider = model.getTracerProvider();
57+
if (tracerProvider == null) {
58+
return false;
59+
}
60+
for (SpanProcessorModel processor : tracerProvider.getProcessors()) {
61+
SimpleSpanProcessorModel simple = processor.getSimple();
62+
if (simple == null) {
63+
continue;
64+
}
65+
SpanExporterModel exporter = simple.getExporter();
66+
if (exporter == null) {
67+
continue;
68+
}
69+
if (exporter.getConsole() != null) {
70+
return true;
71+
}
72+
}
73+
return false;
74+
}
75+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.tooling;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
12+
import java.io.ByteArrayInputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
import java.util.function.Function;
17+
import org.junit.jupiter.params.ParameterizedTest;
18+
import org.junit.jupiter.params.provider.CsvSource;
19+
import org.junitpioneer.jupiter.ClearSystemProperty;
20+
21+
class SpanLoggingCustomizerProviderTest {
22+
23+
@ParameterizedTest
24+
@CsvSource({
25+
"true, false, true",
26+
"false, false, false",
27+
", false, false", // empty value means property is not set
28+
"invalid, false, false",
29+
"true, true, true",
30+
})
31+
@ClearSystemProperty(key = "otel.javaagent.debug")
32+
void addSpanLoggingExporter(String propertyValue, boolean alreadyAdded, boolean expected) {
33+
if (propertyValue != null) {
34+
System.setProperty("otel.javaagent.debug", propertyValue);
35+
}
36+
String yaml =
37+
alreadyAdded
38+
? "file_format: \"1.0-rc.1\"\n"
39+
+ "tracer_provider:\n"
40+
+ " processors:\n"
41+
+ " - simple:\n"
42+
+ " exporter:\n"
43+
+ " console: {}\n"
44+
: "file_format: \"1.0-rc.1\"\n";
45+
46+
OpenTelemetryConfigurationModel model =
47+
applyCustomizer(
48+
DeclarativeConfiguration.parse(
49+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8))),
50+
new SpanLoggingCustomizerProvider());
51+
52+
String console = "ConsoleExporterModel";
53+
if (expected) {
54+
assertThat(model.toString()).containsOnlyOnce(console);
55+
} else {
56+
assertThat(model.toString()).doesNotContain(console);
57+
}
58+
}
59+
60+
private static OpenTelemetryConfigurationModel applyCustomizer(
61+
OpenTelemetryConfigurationModel model, SpanLoggingCustomizerProvider provider) {
62+
List<Function<OpenTelemetryConfigurationModel, OpenTelemetryConfigurationModel>> customizers =
63+
new ArrayList<>();
64+
provider.customize(c -> customizers.add(c));
65+
for (Function<OpenTelemetryConfigurationModel, OpenTelemetryConfigurationModel> customizer :
66+
customizers) {
67+
model = customizer.apply(model);
68+
}
69+
return model;
70+
}
71+
}

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/provider/TestExporterCustomizerProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
import java.util.List;
2727

2828
public class TestExporterCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
29+
30+
@Override
31+
public int order() {
32+
return Integer.MIN_VALUE; // run before other customizers that might add exporters
33+
}
34+
2935
@Override
3036
public void customize(DeclarativeConfigurationCustomizer customizer) {
3137
if (TestSpanExporterComponentProvider.getSpanExporter() == null) {

testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/provider/AgentTestExporterCustomizerProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@
3030
@AutoService(DeclarativeConfigurationCustomizerProvider.class)
3131
public class AgentTestExporterCustomizerProvider
3232
implements DeclarativeConfigurationCustomizerProvider {
33+
34+
@Override
35+
public int order() {
36+
return Integer.MIN_VALUE; // run before other customizers that might add exporters
37+
}
38+
3339
@Override
3440
public void customize(DeclarativeConfigurationCustomizer customizer) {
3541
TestExportersUtil.initTestExporters();

0 commit comments

Comments
 (0)