Skip to content

Commit 32cfb5e

Browse files
authored
Extract tracker module (#624)
1 parent 643d36c commit 32cfb5e

32 files changed

Lines changed: 634 additions & 306 deletions

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
branches:
99
- master
1010
- development
11+
- '*_baseline'
1112

1213
concurrency:
1314
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}

client/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@
167167
</properties>
168168

169169
<dependencies>
170+
<dependency>
171+
<groupId>io.split.client</groupId>
172+
<artifactId>tracker</artifactId>
173+
<version>${project.version}</version>
174+
</dependency>
170175
<dependency>
171176
<groupId>io.split.client</groupId>
172177
<artifactId>targeting-engine</artifactId>

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import io.split.client.events.EventsTask;
1010
import io.split.client.events.InMemoryEventsStorage;
1111
import io.split.client.events.NoopEventsStorageImp;
12+
import io.split.client.events.EventQueueStats;
13+
import io.split.client.events.TelemetryEventQueueStats;
1214
import io.split.client.impressions.AsynchronousImpressionListener;
1315
import io.split.client.impressions.HttpImpressionsSender;
1416
import io.split.client.impressions.ImpressionCounter;
@@ -254,7 +256,8 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
254256
_impressionsManager = buildImpressionsManager(config, impressionsStorage, impressionsStorage);
255257

256258
// EventClient
257-
EventsStorage eventsStorage = new InMemoryEventsStorage(config.eventsQueueSize(), _telemetryStorageProducer);
259+
EventQueueStats eventsQueueStats = new TelemetryEventQueueStats(_telemetryStorageProducer);
260+
EventsStorage eventsStorage = new InMemoryEventsStorage(config.eventsQueueSize(), eventsQueueStats);
258261
EventsSender eventsSender = EventsSender.create(_splitHttpClient, _eventsRootTarget, _telemetryStorageProducer);
259262
_eventsTask = EventsTask.create(config.eventSendIntervalInMillis(), eventsStorage, eventsSender,
260263
config.getThreadFactory());

client/src/main/java/io/split/client/events/EventsSender.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import static com.google.common.base.Preconditions.checkNotNull;
1616

17-
public class EventsSender {
17+
public class EventsSender implements io.split.client.events.EventSender {
1818

1919
private static final String BULK_ENDPOINT_PATH = "api/events/bulk";
2020
private final URI _bulkEndpoint;
@@ -34,10 +34,15 @@ public static EventsSender create(SplitHttpClient splitHttpclient, URI eventsTar
3434
_httpPostImp = new HttpPostImp(_client, telemetryRuntimeProducer);
3535
}
3636

37-
public void sendEvents(List<Event> _data) {
37+
@Override
38+
public void send(List<Event> _data) {
3839
_httpPostImp.post(_bulkEndpoint, _data, "Events ", HttpParamsWrapper.EVENTS);
3940
}
4041

42+
public void sendEvents(List<Event> _data) {
43+
send(_data);
44+
}
45+
4146
@VisibleForTesting
4247
URI getBulkEndpoint() {
4348
return _bulkEndpoint;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.split.client.events;
2+
3+
import io.split.telemetry.domain.enums.EventsDataRecordsEnum;
4+
import io.split.telemetry.storage.TelemetryRuntimeProducer;
5+
6+
import java.util.Objects;
7+
8+
public class TelemetryEventQueueStats implements EventQueueStats {
9+
10+
private final TelemetryRuntimeProducer _telemetryRuntimeProducer;
11+
12+
public TelemetryEventQueueStats(TelemetryRuntimeProducer telemetryRuntimeProducer) {
13+
_telemetryRuntimeProducer = Objects.requireNonNull(telemetryRuntimeProducer);
14+
}
15+
16+
@Override
17+
public void onQueued(long count) {
18+
_telemetryRuntimeProducer.recordEventStats(EventsDataRecordsEnum.EVENTS_QUEUED, count);
19+
}
20+
21+
@Override
22+
public void onDropped(long count) {
23+
_telemetryRuntimeProducer.recordEventStats(EventsDataRecordsEnum.EVENTS_DROPPED, count);
24+
}
25+
}

client/src/test/java/io/split/client/SplitManagerImplTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ public void splitCallWithExistentSplit() {
8888
Assert.assertEquals("off", theOne.treatments.get(0));
8989
Assert.assertEquals(0, theOne.configs.size());
9090
Assert.assertEquals("off", theOne.defaultTreatment);
91-
Assert.assertEquals(Lists.newArrayList(prereq), theOne.prerequisites);
91+
Assert.assertEquals(1, theOne.prerequisites.size());
92+
Assert.assertEquals(prereq.featureFlagName, theOne.prerequisites.get(0).featureFlagName);
93+
Assert.assertEquals(prereq.treatments, theOne.prerequisites.get(0).treatments);
9294
}
9395

9496
@Test

client/src/test/java/io/split/client/events/EventsTaskTest.java

Lines changed: 0 additions & 102 deletions
This file was deleted.

client/src/test/java/io/split/client/events/InMemoryEventsStorageTest.java

Lines changed: 0 additions & 85 deletions
This file was deleted.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.split.client.events;
2+
3+
import io.split.telemetry.domain.enums.EventsDataRecordsEnum;
4+
import io.split.telemetry.storage.TelemetryRuntimeProducer;
5+
import org.junit.Test;
6+
import org.mockito.Mockito;
7+
8+
import static org.mockito.Mockito.verify;
9+
10+
public class TelemetryEventQueueStatsTest {
11+
12+
@Test
13+
public void onQueuedRecordsEventStats() {
14+
TelemetryRuntimeProducer telemetryRuntimeProducer = Mockito.mock(TelemetryRuntimeProducer.class);
15+
TelemetryEventQueueStats stats = new TelemetryEventQueueStats(telemetryRuntimeProducer);
16+
17+
stats.onQueued(42);
18+
19+
verify(telemetryRuntimeProducer).recordEventStats(EventsDataRecordsEnum.EVENTS_QUEUED, 42);
20+
}
21+
22+
@Test
23+
public void onDroppedRecordsEventStats() {
24+
TelemetryRuntimeProducer telemetryRuntimeProducer = Mockito.mock(TelemetryRuntimeProducer.class);
25+
TelemetryEventQueueStats stats = new TelemetryEventQueueStats(telemetryRuntimeProducer);
26+
27+
stats.onDropped(10);
28+
29+
verify(telemetryRuntimeProducer).recordEventStats(EventsDataRecordsEnum.EVENTS_DROPPED, 10);
30+
}
31+
32+
}

0 commit comments

Comments
 (0)