Skip to content

Commit ee03972

Browse files
committed
Merge remote-tracking branch 'upstream/main' into changelog
2 parents 48b5938 + 925c920 commit ee03972

File tree

53 files changed

+2123
-1640
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2123
-1640
lines changed

conventions/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ dependencies {
6464
implementation("ru.vyarus:gradle-animalsniffer-plugin:1.7.1")
6565
implementation("org.spdx:spdx-gradle-plugin:0.8.0")
6666
// When updating, also update dependencyManagement/build.gradle.kts
67-
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.15.4")
67+
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.15.5")
6868
implementation("gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.6")
6969
implementation("me.champeau.jmh:jmh-gradle-plugin:0.7.2")
7070
implementation("net.ltgt.gradle:gradle-errorprone-plugin:4.0.1")

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ val DEPENDENCY_BOMS = listOf(
4141
val autoServiceVersion = "1.1.1"
4242
val autoValueVersion = "1.11.0"
4343
val errorProneVersion = "2.33.0"
44-
val byteBuddyVersion = "1.15.4"
44+
val byteBuddyVersion = "1.15.5"
4545
val asmVersion = "9.7.1"
4646
val jmhVersion = "1.37"
4747
val mockitoVersion = "4.11.0"

gradle-plugins/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ configurations.named("compileOnly") {
2424
extendsFrom(bbGradlePlugin)
2525
}
2626

27-
val byteBuddyVersion = "1.15.4"
27+
val byteBuddyVersion = "1.15.5"
2828
val aetherVersion = "1.1.0"
2929

3030
dependencies {

instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@
1313
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1414

1515
import com.amazonaws.services.lambda.runtime.Context;
16+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
1617
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
1718
import io.opentelemetry.context.Scope;
1819
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest;
20+
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils;
1921
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
2022
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2123
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2224
import java.util.Collections;
25+
import java.util.Map;
2326
import java.util.concurrent.TimeUnit;
2427
import net.bytebuddy.asm.Advice;
2528
import net.bytebuddy.description.type.TypeDescription;
@@ -60,7 +63,11 @@ public static void onEnter(
6063
@Advice.Local("otelFunctionScope") Scope functionScope,
6164
@Advice.Local("otelMessageContext") io.opentelemetry.context.Context messageContext,
6265
@Advice.Local("otelMessageScope") Scope messageScope) {
63-
input = AwsLambdaRequest.create(context, arg, Collections.emptyMap());
66+
Map<String, String> headers = Collections.emptyMap();
67+
if (arg instanceof APIGatewayProxyRequestEvent) {
68+
headers = MapUtils.lowercaseMap(((APIGatewayProxyRequestEvent) arg).getHeaders());
69+
}
70+
input = AwsLambdaRequest.create(context, arg, headers);
6471
io.opentelemetry.context.Context parentContext =
6572
AwsLambdaInstrumentationHelper.functionInstrumenter().extract(input);
6673

@@ -87,6 +94,7 @@ public static void onEnter(
8794
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
8895
public static void stopSpan(
8996
@Advice.Argument(value = 0, typing = Typing.DYNAMIC) Object arg,
97+
@Advice.Return Object result,
9098
@Advice.Thrown Throwable throwable,
9199
@Advice.Local("otelInput") AwsLambdaRequest input,
92100
@Advice.Local("otelFunctionContext") io.opentelemetry.context.Context functionContext,
@@ -103,7 +111,7 @@ public static void stopSpan(
103111
if (functionScope != null) {
104112
functionScope.close();
105113
AwsLambdaInstrumentationHelper.functionInstrumenter()
106-
.end(functionContext, input, null, throwable);
114+
.end(functionContext, input, result, throwable);
107115
}
108116

109117
OpenTelemetrySdkAccess.forceFlush(1, TimeUnit.SECONDS);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2;
7+
8+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
import static org.mockito.Mockito.when;
11+
12+
import com.amazonaws.services.lambda.runtime.Context;
13+
import com.amazonaws.services.lambda.runtime.RequestHandler;
14+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
15+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
16+
import io.opentelemetry.api.trace.SpanKind;
17+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
18+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
19+
import io.opentelemetry.semconv.HttpAttributes;
20+
import io.opentelemetry.semconv.UrlAttributes;
21+
import io.opentelemetry.semconv.UserAgentAttributes;
22+
import io.opentelemetry.semconv.incubating.FaasIncubatingAttributes;
23+
import java.util.HashMap;
24+
import java.util.Map;
25+
import org.junit.jupiter.api.AfterEach;
26+
import org.junit.jupiter.api.BeforeEach;
27+
import org.junit.jupiter.api.Test;
28+
import org.junit.jupiter.api.extension.ExtendWith;
29+
import org.junit.jupiter.api.extension.RegisterExtension;
30+
import org.mockito.Mock;
31+
import org.mockito.junit.jupiter.MockitoExtension;
32+
import org.mockito.junit.jupiter.MockitoSettings;
33+
import org.mockito.quality.Strictness;
34+
35+
@ExtendWith(MockitoExtension.class)
36+
@MockitoSettings(strictness = Strictness.LENIENT)
37+
public class AwsLambdaApiGatewayHandlerTest {
38+
39+
@RegisterExtension
40+
public static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
41+
42+
@Mock private Context context;
43+
44+
@BeforeEach
45+
void setUp() {
46+
when(context.getFunctionName()).thenReturn("test_function");
47+
when(context.getAwsRequestId()).thenReturn("1-22-2024");
48+
}
49+
50+
@AfterEach
51+
void tearDown() {
52+
assertThat(testing.forceFlushCalled()).isTrue();
53+
}
54+
55+
@Test
56+
void tracedWithHttpPropagation() {
57+
Map<String, String> headers = new HashMap<>();
58+
headers.put("traceparent", "00-ee13e7026227ebf4c74278ae29691d7a-0000000000000456-01");
59+
headers.put("User-Agent", "Clever Client");
60+
headers.put("host", "localhost:2024");
61+
headers.put("X-FORWARDED-PROTO", "http");
62+
63+
APIGatewayProxyRequestEvent input =
64+
new APIGatewayProxyRequestEvent()
65+
.withHttpMethod("PUT")
66+
.withResource("/hello/{param}")
67+
.withPath("/hello/world")
68+
.withBody("hello")
69+
.withHeaders(headers);
70+
71+
APIGatewayProxyResponseEvent result =
72+
new TestRequestHandlerApiGateway().handleRequest(input, context);
73+
assertThat(result.getBody()).isEqualTo("hello world");
74+
assertThat(result.getStatusCode()).isEqualTo(201);
75+
76+
testing.waitAndAssertTraces(
77+
trace ->
78+
trace.hasSpansSatisfyingExactly(
79+
span ->
80+
span.hasName("PUT /hello/{param}")
81+
.hasKind(SpanKind.SERVER)
82+
.hasTraceId("ee13e7026227ebf4c74278ae29691d7a")
83+
.hasParentSpanId("0000000000000456")
84+
.hasAttributesSatisfyingExactly(
85+
equalTo(FaasIncubatingAttributes.FAAS_INVOCATION_ID, "1-22-2024"),
86+
equalTo(FaasIncubatingAttributes.FAAS_TRIGGER, "http"),
87+
equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "PUT"),
88+
equalTo(UserAgentAttributes.USER_AGENT_ORIGINAL, "Clever Client"),
89+
equalTo(UrlAttributes.URL_FULL, "http://localhost:2024/hello/world"),
90+
equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 201L))));
91+
}
92+
93+
public static class TestRequestHandlerApiGateway
94+
implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
95+
96+
@Override
97+
public APIGatewayProxyResponseEvent handleRequest(
98+
APIGatewayProxyRequestEvent input, Context context) {
99+
return new APIGatewayProxyResponseEvent().withStatusCode(201).withBody("hello world");
100+
}
101+
}
102+
}

instrumentation/jsp-2.3/javaagent/build.gradle.kts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,22 @@ muzzle {
66
pass {
77
group.set("org.apache.tomcat")
88
module.set("tomcat-jasper")
9-
// version range [7.0.0,7.0.19) is missing from maven
109
// tomcat 10 uses JSP 3.0
1110
versions.set("[7.0.19,10)")
1211
// version 8.0.9 depends on org.eclipse.jdt.core.compiler:ecj:4.4RC4 which does not exist
1312
skip("8.0.9")
13+
// not using assertInverse.set(true) because org.eclipse.jdt.core.compiler:ecj:xxx dependency
14+
// is missing for versions in range [7.0.0, 7.0.19)
15+
}
16+
fail {
17+
group.set("org.apache.tomcat")
18+
module.set("tomcat-jasper")
19+
versions.set("[,7.0.0)")
20+
}
21+
fail {
22+
group.set("org.apache.tomcat")
23+
module.set("tomcat-jasper")
24+
versions.set("[10,)")
1425
}
1526
}
1627

instrumentation/log4j/log4j-appender-1.2/javaagent/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ muzzle {
99
versions.set("[1.2,)")
1010
// version 1.2.15 has a bad dependency on javax.jms:jms:1.1 which was released as pom only
1111
skip("1.2.15")
12+
assertInverse.set(true)
1213
}
1314
}
1415

instrumentation/log4j/log4j-mdc-1.2/javaagent/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ muzzle {
99
versions.set("[1.2,)")
1010
// version 1.2.15 has a bad dependency on javax.jms:jms:1.1 which was released as pom only
1111
skip("1.2.15")
12+
assertInverse.set(true)
1213
}
1314
}
1415

instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/Log4j1InstrumentationModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,26 @@
55

66
package io.opentelemetry.javaagent.instrumentation.log4j.mdc.v1_2;
77

8+
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
89
import static java.util.Arrays.asList;
910

1011
import com.google.auto.service.AutoService;
1112
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1213
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1314
import java.util.List;
15+
import net.bytebuddy.matcher.ElementMatcher;
1416

1517
@AutoService(InstrumentationModule.class)
1618
public class Log4j1InstrumentationModule extends InstrumentationModule {
1719
public Log4j1InstrumentationModule() {
1820
super("log4j-mdc", "log4j-mdc-1.2");
1921
}
2022

23+
@Override
24+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
25+
return hasClassesNamed("org.apache.log4j.MDC");
26+
}
27+
2128
@Override
2229
public List<TypeInstrumentation> typeInstrumentations() {
2330
return asList(new CategoryInstrumentation(), new LoggingEventInstrumentation());

instrumentation/mongo/mongo-3.1/javaagent/src/test/groovy/MongoClientTest.groovy

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)