diff --git a/core/src/main/java/io/opentelemetry/android/NoopOpenTelemetryRum.java b/core/src/main/java/io/opentelemetry/android/NoopOpenTelemetryRum.java index 78e4a804..60eef516 100644 --- a/core/src/main/java/io/opentelemetry/android/NoopOpenTelemetryRum.java +++ b/core/src/main/java/io/opentelemetry/android/NoopOpenTelemetryRum.java @@ -6,6 +6,7 @@ package io.opentelemetry.android; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.TraceId; enum NoopOpenTelemetryRum implements OpenTelemetryRum { @@ -21,4 +22,7 @@ public String getRumSessionId() { // RUM session.id has the same format as traceId return TraceId.getInvalid(); } + + @Override + public void emitEvent(String eventName, String body, Attributes attributes) {} } diff --git a/core/src/main/java/io/opentelemetry/android/OpenTelemetryRum.java b/core/src/main/java/io/opentelemetry/android/OpenTelemetryRum.java index 3187220d..c8a54dda 100644 --- a/core/src/main/java/io/opentelemetry/android/OpenTelemetryRum.java +++ b/core/src/main/java/io/opentelemetry/android/OpenTelemetryRum.java @@ -9,6 +9,7 @@ import io.opentelemetry.android.config.OtelRumConfig; import io.opentelemetry.android.internal.services.Services; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.logs.SdkLoggerProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider; @@ -88,4 +89,52 @@ static OpenTelemetryRum noop() { * recommended that you do not cache this value, but always retrieve it from here when needed. */ String getRumSessionId(); + + /** + * Emits an event with the specified name. + * + *
This method serves as a convenience overload that emits an event with an empty set of + * attributes. + * + * @param eventName The name of the event to emit. + */ + default void emitEvent(String eventName) { + emitEvent(eventName, Attributes.empty()); + } + + /** + * Emits an event with the specified name and body. + * + *
This method serves as a convenience overload that emits an event with an empty set of + * attributes. + * + * @param eventName The name of the event to emit. + * @param body The body of the event, typically containing additional data. + */ + default void emitEvent(String eventName, String body) { + emitEvent(eventName, body, Attributes.empty()); + } + + /** + * Emits an event with the specified name and attributes. + * + *
This method serves as a convenience overload that emits an event with an empty body. + * + * @param eventName The name of the event to emit. + * @param attributes The attributes associated with the event. + */ + default void emitEvent(String eventName, Attributes attributes) { + emitEvent(eventName, "", attributes); + } + + /** + * Emits an event with the specified name, body, and attributes. + * + *
Implementations of this method should define how the event is handled and recorded.
+ *
+ * @param eventName The name of the event to emit.
+ * @param body The body of the event, typically containing additional data.
+ * @param attributes The attributes associated with the event, providing metadata.
+ */
+ void emitEvent(String eventName, String body, Attributes attributes);
}
diff --git a/core/src/main/java/io/opentelemetry/android/OpenTelemetryRumImpl.java b/core/src/main/java/io/opentelemetry/android/OpenTelemetryRumImpl.java
index e45afa1f..1524914d 100644
--- a/core/src/main/java/io/opentelemetry/android/OpenTelemetryRumImpl.java
+++ b/core/src/main/java/io/opentelemetry/android/OpenTelemetryRumImpl.java
@@ -7,6 +7,9 @@
import io.opentelemetry.android.session.SessionManager;
import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
+import io.opentelemetry.api.incubator.logs.ExtendedLogger;
import io.opentelemetry.sdk.OpenTelemetrySdk;
final class OpenTelemetryRumImpl implements OpenTelemetryRum {
@@ -14,9 +17,17 @@ final class OpenTelemetryRumImpl implements OpenTelemetryRum {
private final OpenTelemetrySdk openTelemetrySdk;
private final SessionManager sessionManager;
+ private final ExtendedLogger logger;
+
OpenTelemetryRumImpl(OpenTelemetrySdk openTelemetrySdk, SessionManager sessionManager) {
this.openTelemetrySdk = openTelemetrySdk;
this.sessionManager = sessionManager;
+ this.logger =
+ (ExtendedLogger)
+ openTelemetrySdk
+ .getLogsBridge()
+ .loggerBuilder("io.opentelemetry.rum.events")
+ .build();
}
@Override
@@ -28,4 +39,10 @@ public OpenTelemetry getOpenTelemetry() {
public String getRumSessionId() {
return sessionManager.getSessionId();
}
+
+ @Override
+ public void emitEvent(String eventName, String body, Attributes attributes) {
+ ExtendedLogRecordBuilder logRecordBuilder = logger.logRecordBuilder();
+ logRecordBuilder.setEventName(eventName).setBody(body).setAllAttributes(attributes).emit();
+ }
}
diff --git a/core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java b/core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java
index 54f907fc..d63f0ac5 100644
--- a/core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java
+++ b/core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java
@@ -45,7 +45,6 @@
import io.opentelemetry.android.internal.session.SessionIdTimeoutHandler;
import io.opentelemetry.android.session.SessionManager;
import io.opentelemetry.api.common.Attributes;
-import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.metrics.LongCounter;
@@ -182,19 +181,8 @@ public void shouldBuildLogRecordProvider() {
SimpleLogRecordProcessor.create(logsExporter)))
.build();
- Logger logger =
- openTelemetryRum
- .getOpenTelemetry()
- .getLogsBridge()
- .loggerBuilder("otel.initialization.events")
- .build();
- ExtendedLogRecordBuilder eventLogger = (ExtendedLogRecordBuilder) logger.logRecordBuilder();
- Attributes attrs = Attributes.of(stringKey("mega"), "hit");
- eventLogger
- .setEventName("test.event")
- .setAllAttributes(attrs)
- .setAttribute(stringKey("body.field"), "foo")
- .emit();
+ Attributes attrs = Attributes.of(stringKey("mega"), "hit", stringKey("body.field"), "foo");
+ openTelemetryRum.emitEvent("test.event", attrs);
List