Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Add emit overload with no payload
  • Loading branch information
jack-berg committed Dec 4, 2023
commit ed9376381eb426f504fb31a01e5f45976dbc245d
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ static EventEmitter getInstance() {
return INSTANCE;
}

@Override
public void emit(String eventName) {}

@Override
public void emit(String eventName, AnyValue<?> payload) {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@
@ThreadSafe
public interface EventEmitter {

/**
* Emit an event.
*
* @param eventName the event name, which defines the class or type of event. Events names SHOULD
* include a namespace to avoid collisions with other event names.
*/
void emit(String eventName);

/**
* Emit an event.
*
Expand All @@ -46,6 +54,9 @@ public interface EventEmitter {
/**
* Emit an event.
*
* <p>This is equivalent to calling {@link #emit(String, AnyValue)} with a {@link
* AnyValue#of(Map)} payload.
*
* @param eventName the event name, which defines the class or type of event. Events names SHOULD
* include a namespace to avoid collisions with other event names.
* @param payload the eventPayload, which is expected to match the schema of other events with the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class DefaultEventEmitterTest {

@Test
void emit() {
assertThatCode(() -> DefaultEventEmitter.getInstance().emit("namespace.event-name"))
.doesNotThrowAnyException();

assertThatCode(
() ->
DefaultEventEmitter.getInstance()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io.opentelemetry.extension.incubator.logs.ExtendedLogRecordBuilder;
import io.opentelemetry.sdk.common.Clock;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;

/**
* SDK implementation for {@link EventEmitterProvider}.
Expand Down Expand Up @@ -89,6 +90,8 @@ public EventEmitter build() {

private static class SdkEventEmitter implements EventEmitter {

private static final Severity DEFAULT_SEVERITY = Severity.INFO;

private final Clock clock;
private final Logger delegateLogger;

Expand All @@ -103,21 +106,33 @@ public EventBuilder builder(String eventName) {
clock,
delegateLogger
.logRecordBuilder()
.setSeverity(Severity.INFO)
.setSeverity(DEFAULT_SEVERITY)
.setContext(Context.current()),
eventName);
}

@Override
public void emit(String eventName) {
emitInternal(eventName, null);
}

@Override
public void emit(String eventName, AnyValue<?> payload) {
emitInternal(eventName, payload);
}

private void emitInternal(String eventName, @Nullable AnyValue<?> payload) {
long now = clock.now();
LogRecordBuilder logRecordBuilder =
((ExtendedLogRecordBuilder) delegateLogger.logRecordBuilder())
.setBody(payload)
.setSeverity(Severity.INFO)
.setContext(Context.current())
.setTimestamp(now, TimeUnit.NANOSECONDS)
.setObservedTimestamp(now, TimeUnit.NANOSECONDS);
ExtendedLogRecordBuilder logRecordBuilder =
((ExtendedLogRecordBuilder) delegateLogger.logRecordBuilder());
if (payload != null) {
logRecordBuilder.setBody(payload);
}
logRecordBuilder
.setSeverity(DEFAULT_SEVERITY)
.setContext(Context.current())
.setTimestamp(now, TimeUnit.NANOSECONDS)
.setObservedTimestamp(now, TimeUnit.NANOSECONDS);
addEventName(logRecordBuilder, eventName);
logRecordBuilder.emit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.ReadWriteLogRecord;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.data.Body;
import io.opentelemetry.sdk.resources.Resource;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
Expand All @@ -39,7 +40,23 @@ class SdkEventEmitterProviderTest {
clock);

@Test
void emit() {
void emit_NoPayload() {
when(clock.now()).thenReturn(10L);

eventEmitterProvider.eventEmitterBuilder("test-scope").build().emit("namespace.event-name");

assertThat(seenLog.get().toLogRecordData())
.hasResource(RESOURCE)
.hasInstrumentationScope(InstrumentationScopeInfo.create("test-scope"))
.hasTimestamp(10L)
.hasObservedTimestamp(10L)
.hasSeverity(Severity.INFO)
.hasAttributes(Attributes.builder().put("event.name", "namespace.event-name").build());
assertThat(seenLog.get().toLogRecordData().getBody()).isEqualTo(Body.empty());
}

@Test
void emit_WithPayload() {
when(clock.now()).thenReturn(10L);

AnyValue<?> payload = AnyValue.of(Collections.singletonMap("key1", AnyValue.of("value1")));
Expand Down