Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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 @@ -766,6 +766,9 @@ targets:
- type: gradle
path: ./
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.47:javaagent'
- type: gradle
path: ./
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.50:javaagent'
- type: gradle
path: ./
target: ':instrumentation:pekko:pekko-actor-1.0:javaagent'
Expand Down
2 changes: 1 addition & 1 deletion dependencyManagement/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
data class DependencySet(val group: String, val version: String, val modules: List<String>)

// this line is managed by .github/scripts/update-sdk-version.sh
val otelSdkVersion = "1.49.0"
val otelSdkVersion = "1.50.0"
val otelContribVersion = "1.46.0-alpha"
val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1")

Expand Down
2 changes: 1 addition & 1 deletion examples/distro/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ subprojects {
ext {
versions = [
// this line is managed by .github/scripts/update-sdk-version.sh
opentelemetrySdk : "1.49.0",
opentelemetrySdk : "1.50.0",

// these lines are managed by .github/scripts/update-version.sh
opentelemetryJavaagent : "2.16.0-SNAPSHOT",
Expand Down
2 changes: 1 addition & 1 deletion examples/extension/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ version '1.0'
ext {
versions = [
// this line is managed by .github/scripts/update-sdk-version.sh
opentelemetrySdk : "1.49.0",
opentelemetrySdk : "1.50.0",

// these lines are managed by .github/scripts/update-version.sh
opentelemetryJavaagent : "2.16.0-SNAPSHOT",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,22 @@ private static ApplicationMeterFactory getMeterFactory(String className) {
}

private static ApplicationLoggerFactory getLoggerFactory() {
// this class is defined in opentelemetry-api-1.47
// this class is defined in opentelemetry-api-1.50
ApplicationLoggerFactory loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs.ApplicationLoggerFactory147Incubator");
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_50.incubator.logs.ApplicationLoggerFactory150Incubator");
if (loggerFactory == null) {
// this class is defined in opentelemetry-api-1.50
loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_50.logs.ApplicationLoggerFactory150");
}
if (loggerFactory == null) {
// this class is defined in opentelemetry-api-1.47
loggerFactory =
getLoggerFactory(
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs.ApplicationLoggerFactory147Incubator");
}
if (loggerFactory == null) {
// this class is defined in opentelemetry-api-1.42
loggerFactory =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ configurations.configureEach {
force("io.opentelemetry:opentelemetry-api:1.31.0")
}
}
if (name == "testRuntimeClasspath" || name == "noopTestRuntimeClasspath") {
exclude(group = "io.opentelemetry", module = "opentelemetry-api-incubator")
}
}

testing {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ configurations.configureEach {
force("io.opentelemetry:opentelemetry-api:1.32.0")
}
}
if (name == "testRuntimeClasspath") {
if (name == "testRuntimeClasspath" || name == "incubatorTestRuntimeClasspath" || name == "noopTestRuntimeClasspath") {
exclude(group = "io.opentelemetry", module = "opentelemetry-api-incubator")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ configurations.configureEach {
if (name == "testRuntimeClasspath") {
exclude(group = "io.opentelemetry", module = "opentelemetry-api-incubator")
}
resolutionStrategy {
// use older version of opentelemetry-sdk-testing that does not depend on opentelemetry-api-incubator
force("io.opentelemetry:opentelemetry-sdk-testing:1.47.0")
}
}

testing {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public LogRecordBuilder setBody(Value<?> body) {
}

@SuppressWarnings("unchecked")
private static io.opentelemetry.api.common.Value<?> convertValue(Value<?> value) {
protected static io.opentelemetry.api.common.Value<?> convertValue(Value<?> value) {
if (value == null) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,14 @@ dependencies {

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

configurations.configureEach {
if (name.endsWith("testRuntimeClasspath", true) || name.endsWith("testCompileClasspath", true)) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api:1.47.0")
force("io.opentelemetry:opentelemetry-api-incubator:1.47.0-alpha")
// use older version of opentelemetry-sdk-testing that works with opentelemetry-api-incubator:1.47.0-alpha
force("io.opentelemetry:opentelemetry-sdk-testing:1.47.0")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

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;
Expand All @@ -25,8 +26,12 @@ public OpenTelemetryApiIncubatorInstrumentationModule() {
@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
return hasClassesNamed(
"application.io.opentelemetry.api.common.Value",
"application.io.opentelemetry.api.incubator.logs.ExtendedLogger");
"application.io.opentelemetry.api.common.Value",
"application.io.opentelemetry.api.incubator.logs.ExtendedLogger")
.and(
not(
hasClassesNamed(
"application.io.opentelemetry.api.incubator.common.ExtendedAttributes")));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs;

import application.io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
import io.opentelemetry.api.logs.LogRecordBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLogRecordBuilder142;

public class ApplicationLogRecordBuilder147Incubator extends ApplicationLogRecordBuilder142
implements ExtendedLogRecordBuilder {

private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder;

ApplicationLogRecordBuilder147Incubator(LogRecordBuilder agentLogRecordBuilder) {
ApplicationLogRecordBuilder147Incubator(
io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) {
super(agentLogRecordBuilder);
this.agentLogRecordBuilder = agentLogRecordBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.logs;
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs;

import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.metrics;
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.metrics;

import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.trace;
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.trace;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
plugins {
id("otel.javaagent-instrumentation")
}

dependencies {
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_50"))
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"))

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

testing {
suites {
val incubatorTest by registering(JvmTestSuite::class) {
dependencies {
implementation("io.opentelemetry:opentelemetry-api-incubator:1.50.0-alpha")
}
}
}
}

tasks {
test {
jvmArgs("-Dotel.instrumentation.opentelemetry-api-incubator-1.50.enabled=false")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_50.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.logs.data.internal.ExtendedLogRecordData;
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());

((ExtendedLogger) logger)
.logRecordBuilder()
.setEventName("eventName")
.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())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what do you think about adding extended attributes to the test?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. Looks like I forgot to implement bridging for these. Should be fixed now.

.emit();

await()
.untilAsserted(
() ->
assertThat(testing.logRecords())
.satisfiesExactly(
logRecordData -> {
assertThat(logRecordData.getInstrumentationScopeInfo().getName())
.isEqualTo(instrumentationName);
assertThat(((ExtendedLogRecordData) logRecordData).getEventName())
.isEqualTo("eventName");
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()));
}
}
Loading
Loading