Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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,165 @@
/*
* 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.common.ExtendedAttributeKey;
import io.opentelemetry.api.incubator.common.ExtendedAttributes;
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("key1"), "value")
.setAttribute(ExtendedAttributeKey.stringKey("key2"), "value")
.setAllAttributes(Attributes.builder().put("key3", "value").build())
.setAllAttributes(ExtendedAttributes.builder().put("key4", "value").build())
.setAttribute(
ExtendedAttributeKey.extendedAttributesKey("key5"),
ExtendedAttributes.builder().put("key6", "value").build())
.emit();

await()
.untilAsserted(
() ->
assertThat(testing.logRecords())
.satisfiesExactly(
logRecordData -> {
assertThat(logRecordData.getInstrumentationScopeInfo().getName())
.isEqualTo(instrumentationName);
assertThat(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(
((ExtendedLogRecordData) logRecordData).getExtendedAttributes())
.isEqualTo(
ExtendedAttributes.builder()
.put("key1", "value")
.put("key2", "value")
.put("key3", "value")
.put("key4", "value")
.put(
"key5",
ExtendedAttributes.builder().put("key6", "value").build())
.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