Skip to content

Commit 82b6b5b

Browse files
fix(deps): update opentelemetry.instrumentation.alpha to v2.13.0-alpha (#826)
* fix(deps): update opentelemetry.instrumentation.alpha to v2.13.0-alpha * update sdk in demo app and fix events api usage * fix tests --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jason Plumb <[email protected]>
1 parent 22c24a6 commit 82b6b5b

File tree

11 files changed

+72
-73
lines changed

11 files changed

+72
-73
lines changed

core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@
4747
import io.opentelemetry.android.internal.session.SessionIdTimeoutHandler;
4848
import io.opentelemetry.android.session.SessionManager;
4949
import io.opentelemetry.api.common.Attributes;
50-
import io.opentelemetry.api.common.KeyValue;
51-
import io.opentelemetry.api.common.Value;
52-
import io.opentelemetry.api.incubator.events.EventLogger;
50+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
5351
import io.opentelemetry.api.logs.Logger;
5452
import io.opentelemetry.api.logs.Severity;
5553
import io.opentelemetry.api.metrics.LongCounter;
@@ -62,9 +60,9 @@
6260
import io.opentelemetry.contrib.disk.buffering.SpanToDiskExporter;
6361
import io.opentelemetry.sdk.OpenTelemetrySdk;
6462
import io.opentelemetry.sdk.logs.data.LogRecordData;
63+
import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData;
6564
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
6665
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
67-
import io.opentelemetry.sdk.logs.internal.SdkEventLoggerProvider;
6866
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
6967
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
7068
import io.opentelemetry.sdk.metrics.data.MetricData;
@@ -186,28 +184,32 @@ public void shouldBuildLogRecordProvider() {
186184
SimpleLogRecordProcessor.create(logsExporter)))
187185
.build();
188186

189-
OpenTelemetrySdk sdk = (OpenTelemetrySdk) openTelemetryRum.getOpenTelemetry();
190-
EventLogger eventLogger =
191-
SdkEventLoggerProvider.create(sdk.getSdkLoggerProvider())
192-
.get("otel.initialization.events");
187+
Logger logger =
188+
openTelemetryRum
189+
.getOpenTelemetry()
190+
.getLogsBridge()
191+
.loggerBuilder("otel.initialization.events")
192+
.build();
193+
ExtendedLogRecordBuilder eventLogger = (ExtendedLogRecordBuilder) logger.logRecordBuilder();
193194
Attributes attrs = Attributes.of(stringKey("mega"), "hit");
194-
eventLogger.builder("test.event").put("body.field", "foo").setAttributes(attrs).emit();
195+
eventLogger
196+
.setEventName("test.event")
197+
.setAllAttributes(attrs)
198+
.setAttribute(stringKey("body.field"), "foo")
199+
.emit();
195200

196201
List<LogRecordData> logs = logsExporter.getFinishedLogRecordItems();
197202
assertThat(logs).hasSize(1);
198203
assertThat(logs.get(0))
199204
.hasAttributesSatisfyingExactly(
200205
equalTo(SESSION_ID, openTelemetryRum.getRumSessionId()),
201-
equalTo(stringKey("event.name"), "test.event"),
202206
equalTo(SCREEN_NAME_KEY, CUR_SCREEN_NAME),
203-
equalTo(stringKey("mega"), "hit"))
207+
equalTo(stringKey("mega"), "hit"),
208+
equalTo(stringKey("body.field"), "foo"))
204209
.hasResource(resource);
205-
206-
Value<?> bodyValue = logs.get(0).getBodyValue();
207-
List<KeyValue> payload = (List<KeyValue>) bodyValue.getValue();
208-
assertThat(payload).hasSize(1);
209-
KeyValue expected = KeyValue.of("body.field", Value.of("foo"));
210-
assertThat(payload.get(0)).isEqualTo(expected);
210+
// TODO: verify event name inline above when the assertions framework can handle it
211+
ExtendedLogRecordData log0 = (ExtendedLogRecordData) logs.get(0);
212+
assertThat(log0.getEventName()).isEqualTo("test.event");
211213
}
212214

213215
@Test

demo-app/gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
2-
opentelemetry = "1.46.0"
3-
opentelemetry-alpha = "1.46.0-alpha"
2+
opentelemetry = "1.47.0"
3+
opentelemetry-alpha = "1.47.0-alpha"
44
junit = "5.11.4"
55
spotless = "7.0.2"
66
kotlin = "2.1.10"

demo-app/src/main/java/io/opentelemetry/android/demo/OtelDemoApplication.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfig
1515
import io.opentelemetry.android.instrumentation.sessions.SessionInstrumentation
1616
import io.opentelemetry.api.common.AttributeKey.stringKey
1717
import io.opentelemetry.api.common.Attributes
18-
import io.opentelemetry.api.incubator.events.EventBuilder
18+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder
19+
import io.opentelemetry.api.logs.LogRecordBuilder
1920
import io.opentelemetry.api.metrics.LongCounter
2021
import io.opentelemetry.api.trace.Tracer
2122
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter
2223
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter
2324
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter
2425
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter
25-
import io.opentelemetry.sdk.logs.internal.SdkEventLoggerProvider
2626

2727
const val TAG = "otel.demo"
2828

@@ -95,11 +95,10 @@ class OtelDemoApplication : Application() {
9595
return rum?.openTelemetry?.meterProvider?.get("demo.app")?.counterBuilder(name)?.build()
9696
}
9797

98-
fun eventBuilder(scopeName: String, eventName: String): EventBuilder {
99-
val loggerProvider = rum?.openTelemetry?.logsBridge
100-
val eventLogger =
101-
SdkEventLoggerProvider.create(loggerProvider).get(scopeName)
102-
return eventLogger.builder(eventName)
98+
fun eventBuilder(scopeName: String, eventName: String): LogRecordBuilder {
99+
val logger = rum?.openTelemetry?.logsBridge?.loggerBuilder(scopeName)?.build()
100+
var builder: ExtendedLogRecordBuilder = logger?.logRecordBuilder() as ExtendedLogRecordBuilder
101+
return builder.setEventName(eventName)
103102
}
104103
}
105104
}

demo-app/src/main/java/io/opentelemetry/android/demo/shop/ui/AstronomyShopActivity.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,21 @@ import androidx.compose.runtime.mutableStateOf
2020
import androidx.compose.runtime.remember
2121
import androidx.compose.ui.Modifier
2222
import androidx.compose.ui.platform.LocalContext
23+
import androidx.lifecycle.viewmodel.compose.viewModel
2324
import androidx.navigation.compose.NavHost
2425
import androidx.navigation.compose.composable
26+
import io.opentelemetry.android.demo.OtelDemoApplication
2527
import io.opentelemetry.android.demo.shop.clients.ProductCatalogClient
26-
import io.opentelemetry.android.demo.theme.DemoAppTheme
2728
import io.opentelemetry.android.demo.shop.ui.cart.CartScreen
28-
import io.opentelemetry.android.demo.shop.ui.products.ProductDetails
29-
import io.opentelemetry.android.demo.shop.ui.products.ProductList
3029
import io.opentelemetry.android.demo.shop.ui.cart.CartViewModel
31-
import androidx.lifecycle.viewmodel.compose.viewModel
32-
import io.opentelemetry.android.demo.OtelDemoApplication
3330
import io.opentelemetry.android.demo.shop.ui.cart.CheckoutConfirmationScreen
3431
import io.opentelemetry.android.demo.shop.ui.cart.CheckoutInfoViewModel
3532
import io.opentelemetry.android.demo.shop.ui.cart.InfoScreen
33+
import io.opentelemetry.android.demo.shop.ui.products.ProductDetails
34+
import io.opentelemetry.android.demo.shop.ui.products.ProductList
35+
import io.opentelemetry.android.demo.theme.DemoAppTheme
36+
import io.opentelemetry.api.common.AttributeKey.doubleKey
37+
import io.opentelemetry.api.common.AttributeKey.stringKey
3638

3739
class AstronomyShopActivity : AppCompatActivity() {
3840
override fun onCreate(savedInstanceState: Bundle?) {
@@ -140,8 +142,8 @@ private fun generateOrderPlacedEvent(
140142
) {
141143
val eventBuilder = OtelDemoApplication.eventBuilder("otel.demo.app", "order.placed")
142144
eventBuilder
143-
.put("order.total.value", cartViewModel.getTotalPrice())
144-
.put("buyer.state", checkoutInfoViewModel.shippingInfo.state)
145+
.setAttribute(doubleKey("order.total.value"), cartViewModel.getTotalPrice())
146+
.setAttribute(stringKey("buyer.state"), checkoutInfoViewModel.shippingInfo.state)
145147
.emit()
146148
}
147149

demo-app/src/main/java/io/opentelemetry/android/demo/shop/ui/Navigation.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.navigation.NavHostController
1313
import androidx.navigation.compose.rememberNavController
1414
import androidx.compose.material3.*
1515
import io.opentelemetry.android.demo.OtelDemoApplication
16+
import io.opentelemetry.api.common.AttributeKey.stringKey
1617

1718

1819
sealed class BottomNavItem(val route: String, val icon: ImageVector, val label: String) {
@@ -100,7 +101,7 @@ class InstrumentedAstronomyShopNavController(
100101
private fun generateNavigationEvent(eventName: String, payload: Map<String, String>) {
101102
val eventBuilder = OtelDemoApplication.eventBuilder("otel.demo.app.navigation", eventName)
102103
payload.forEach { (key, value) ->
103-
eventBuilder.put(key, value)
104+
eventBuilder.setAttribute(stringKey(key), value)
104105
}
105106
eventBuilder.emit()
106107
}

demo-app/src/main/java/io/opentelemetry/android/demo/shop/ui/cart/Cart.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@ import androidx.compose.foundation.layout.*
44
import androidx.compose.foundation.lazy.LazyColumn
55
import androidx.compose.material3.*
66
import androidx.compose.runtime.*
7-
import androidx.compose.ui.Modifier
8-
import java.util.Locale
9-
import androidx.compose.ui.unit.dp
10-
import androidx.lifecycle.viewmodel.compose.viewModel
11-
import io.opentelemetry.android.demo.shop.ui.products.ProductCard
127
import androidx.compose.ui.Alignment
8+
import androidx.compose.ui.Modifier
139
import androidx.compose.ui.graphics.Color
1410
import androidx.compose.ui.platform.LocalContext
11+
import androidx.compose.ui.unit.dp
12+
import androidx.lifecycle.viewmodel.compose.viewModel
1513
import io.opentelemetry.android.demo.OtelDemoApplication
1614
import io.opentelemetry.android.demo.shop.clients.ProductCatalogClient
1715
import io.opentelemetry.android.demo.shop.clients.RecommendationService
16+
import io.opentelemetry.android.demo.shop.ui.products.ProductCard
1817
import io.opentelemetry.android.demo.shop.ui.products.RecommendedSection
18+
import io.opentelemetry.api.common.AttributeKey.doubleKey
19+
import java.util.Locale
1920

2021
@Composable
2122
fun CartScreen(
@@ -99,6 +100,6 @@ private fun clearCart(cartViewModel: CartViewModel) {
99100

100101
private fun generateEmptiedCartEvent(cartViewModel: CartViewModel) {
101102
val eventBuilder = OtelDemoApplication.eventBuilder("otel.demo.app", "cart.emptied")
102-
eventBuilder.put("cart.total.value", cartViewModel.getTotalPrice())
103+
eventBuilder.setAttribute(doubleKey("cart.total.value"), cartViewModel.getTotalPrice())
103104
.emit()
104105
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
opentelemetry-instrumentation-alpha = "2.12.0-alpha"
2+
opentelemetry-instrumentation-alpha = "2.13.0-alpha"
33
#opentelemetry-instrumentation = "2.9.0" // alpha bom includes non-alpha bom
44
opentelemetry-semconv = "1.30.0-rc.1"
55
opentelemetry-semconv-alpha = "1.30.0-alpha-rc.1"

instrumentation/sessions/src/main/kotlin/io/opentelemetry/android/instrumentation/sessions/SessionIdEventSender.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import io.opentelemetry.android.common.RumConstants.Events.EVENT_SESSION_END
99
import io.opentelemetry.android.common.RumConstants.Events.EVENT_SESSION_START
1010
import io.opentelemetry.android.session.Session
1111
import io.opentelemetry.android.session.SessionObserver
12-
import io.opentelemetry.api.incubator.events.EventLogger
12+
import io.opentelemetry.api.incubator.logs.ExtendedLogger
1313
import io.opentelemetry.semconv.incubating.SessionIncubatingAttributes.SESSION_ID
1414
import io.opentelemetry.semconv.incubating.SessionIncubatingAttributes.SESSION_PREVIOUS_ID
1515

@@ -18,19 +18,20 @@ import io.opentelemetry.semconv.incubating.SessionIncubatingAttributes.SESSION_P
1818
* specified in the OpenTelemetry semantic conventions.
1919
*/
2020
internal class SessionIdEventSender(
21-
private val eventLogger: EventLogger,
21+
private val eventLogger: ExtendedLogger,
2222
) : SessionObserver {
2323
override fun onSessionStarted(
2424
newSession: Session,
2525
previousSession: Session,
2626
) {
2727
val eventBuilder =
2828
eventLogger
29-
.builder(EVENT_SESSION_START)
30-
.put(SESSION_ID, newSession.getId())
29+
.logRecordBuilder()
30+
.setEventName(EVENT_SESSION_START)
31+
.setAttribute(SESSION_ID, newSession.getId())
3132
val previousSessionId = previousSession.getId()
3233
if (previousSessionId.isNotEmpty()) {
33-
eventBuilder.put(SESSION_PREVIOUS_ID, previousSessionId)
34+
eventBuilder.setAttribute(SESSION_PREVIOUS_ID, previousSessionId)
3435
}
3536
eventBuilder.emit()
3637
}
@@ -40,8 +41,9 @@ internal class SessionIdEventSender(
4041
return
4142
}
4243
eventLogger
43-
.builder(EVENT_SESSION_END)
44-
.put(SESSION_ID, session.getId())
44+
.logRecordBuilder()
45+
.setEventName(EVENT_SESSION_END)
46+
.setAttribute(SESSION_ID, session.getId())
4547
.emit()
4648
}
4749
}

instrumentation/sessions/src/main/kotlin/io/opentelemetry/android/instrumentation/sessions/SessionInstrumentation.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,16 @@
55

66
package io.opentelemetry.android.instrumentation.sessions
77

8-
import io.opentelemetry.android.OpenTelemetryRum
98
import io.opentelemetry.android.instrumentation.AndroidInstrumentation
109
import io.opentelemetry.android.instrumentation.InstallationContext
11-
import io.opentelemetry.sdk.logs.internal.SdkEventLoggerProvider
10+
import io.opentelemetry.api.incubator.logs.ExtendedLogger
1211

1312
class SessionInstrumentation : AndroidInstrumentation {
1413
override fun install(ctx: InstallationContext) {
15-
val eventLogger =
16-
SdkEventLoggerProvider
17-
.create(ctx.openTelemetry.logsBridge)
18-
.get(OpenTelemetryRum::class.java.simpleName)
19-
14+
val eventLogger: ExtendedLogger =
15+
ctx.openTelemetry.logsBridge
16+
.loggerBuilder("otel.session")
17+
.build() as ExtendedLogger
2018
ctx.sessionManager.addObserver(SessionIdEventSender(eventLogger))
2119
}
2220
}

instrumentation/startup/src/main/java/io/opentelemetry/android/instrumentation/startup/SdkInitializationEvents.kt

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import io.opentelemetry.api.OpenTelemetry
1313
import io.opentelemetry.api.common.AttributeKey
1414
import io.opentelemetry.api.common.Attributes
1515
import io.opentelemetry.api.common.Value
16-
import io.opentelemetry.sdk.logs.internal.SdkEventLoggerProvider
16+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder
1717
import io.opentelemetry.sdk.trace.export.SpanExporter
1818
import java.time.Instant
1919
import java.util.function.Supplier
@@ -60,29 +60,22 @@ class SdkInitializationEvents(
6060

6161
internal fun finish(openTelemetry: OpenTelemetry) {
6262
val loggerProvider = openTelemetry.logsBridge
63-
val eventLogger =
64-
SdkEventLoggerProvider.create(loggerProvider).get("otel.initialization.events")
63+
val logger = loggerProvider.loggerBuilder("otel.initialization.events").build()
6564
events.forEach { event: Event ->
66-
val eventBuilder =
67-
eventLogger
68-
.builder(event.name)
69-
.setTimestamp(event.timestamp)
70-
.setAttributes(event.attributes)
71-
if (event.body != null) {
72-
// TODO: Config is technically correct because config is the only startup event
73-
// with a body, but this is ultimately clunky/fragile.
74-
eventBuilder.put("config", event.body)
75-
}
65+
val eventBuilder: ExtendedLogRecordBuilder = logger.logRecordBuilder() as ExtendedLogRecordBuilder
66+
eventBuilder
67+
.setEventName(event.name)
68+
.setTimestamp(event.timestamp)
69+
event.attributes?.let { eventBuilder.setAllAttributes(it) }
7670
eventBuilder.emit()
7771
}
7872
}
7973

8074
private fun addEvent(
8175
name: String,
8276
attr: Attributes? = null,
83-
body: Value<*>? = null,
8477
) {
85-
events.add(Event(clock.get(), name, attr, body))
78+
events.add(Event(clock.get(), name, attr))
8679
}
8780

8881
private data class Event(

0 commit comments

Comments
 (0)