Skip to content

Commit

Permalink
Store the events sent into fallback service for easier testing
Browse files Browse the repository at this point in the history
  • Loading branch information
musketyr committed Sep 25, 2024
1 parent c991156 commit 79e0c9c
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,23 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Deque;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

@Secondary
@Singleton
public class FallbackNewRelicInsightsService implements NewRelicInsightsService {

private static final int MAX_EVENTS = 25;
private static final Logger LOGGER = LoggerFactory.getLogger(NewRelicInsightsService.class);

private final EventPayloadExtractor extractor;
private final ObjectMapper mapper;
private final Deque<Object> events = new ArrayDeque<>();

public FallbackNewRelicInsightsService(EventPayloadExtractor extractor,
ObjectMapper mapper) {
Expand All @@ -55,8 +60,21 @@ public <E> void createEvents(Collection<E> events) {
try {
List<Map<String, Object>> payloads = events.stream().map(extractor::extractPayload).toList();
LOGGER.info("Following events not sent to NewRelic:\n{}", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(payloads));

this.events.addAll(events);

while (this.events.size() > MAX_EVENTS) {
this.events.poll();
}

LOGGER.info("You can access {} event(s) using FallbackNewRelicInsightsService#getEvents() method.", this.events.size());
} catch (JsonProcessingException e) {
throw new IllegalArgumentException(e);
}
}

public <E> Stream<E> getEvents(Class<E> eventType) {
return events.stream().filter(eventType::isInstance).map(eventType::cast);
}

}
1 change: 1 addition & 0 deletions test-projects/nr/nr.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ dependencies {
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1'

testImplementation 'io.micronaut:micronaut-inject-groovy'
testImplementation('com.fasterxml.jackson.core:jackson-databind')
testImplementation 'org.mockito:mockito-inline:3.8.0'
}
12 changes: 12 additions & 0 deletions test-projects/nr/src/test/groovy/nr/NewRelicNoopSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package nr
import com.agorapulse.micronaut.newrelic.AsyncNewRelicInsightsService
import com.agorapulse.micronaut.newrelic.FallbackNewRelicInsightsService
import com.agorapulse.micronaut.newrelic.NewRelicInsightsClient
import com.agorapulse.micronaut.newrelic.NewRelicInsightsEvent
import com.agorapulse.micronaut.newrelic.NewRelicInsightsService
import com.newrelic.api.agent.Agent
import com.newrelic.api.agent.Insights
Expand All @@ -42,6 +43,17 @@ class NewRelicNoopSpec extends Specification {
expect:
!context.containsBean(NewRelicInsightsClient)
service instanceof FallbackNewRelicInsightsService


when:
27.times {
service.createEvent(NewRelicInsightsEvent.create('TestEvent', 'order', it))
}

then:
((FallbackNewRelicInsightsService) service).getEvents(NewRelicInsightsEvent).count() == 25
((FallbackNewRelicInsightsService) service).getEvents(NewRelicInsightsEvent).findFirst().orElse(null).value == 2

cleanup:
context.close()
}
Expand Down

0 comments on commit 79e0c9c

Please sign in to comment.