Skip to content

Commit 002a593

Browse files
committed
FME-15373-impressions: wire client/ back to impressions module
Add impressions dependency to client/pom.xml. Add adapter classes TelemetryRuntimeImpressionsRecorder and TelemetryUniqueKeysSender to bridge the old telemetry interfaces to the new impressions module boundaries. Update SplitFactoryImpl to build ImpressionsManagerConfig and use the adapters when constructing ImpressionsManagerImpl and UniqueKeysTrackerImp. Move strategy tests and UniqueKeysTrackerImpTest to the impressions module where their dependencies now live. AI-Session-Id: 52375eb8-af89-45b8-bbad-1698b6636202 AI-Tool: claude-code AI-Model: unknown
1 parent 411c858 commit 002a593

8 files changed

Lines changed: 95 additions & 223 deletions

File tree

client/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,11 @@
172172
<artifactId>tracker</artifactId>
173173
<version>${project.version}</version>
174174
</dependency>
175+
<dependency>
176+
<groupId>io.split.client</groupId>
177+
<artifactId>impressions</artifactId>
178+
<version>${project.version}</version>
179+
</dependency>
175180
<dependency>
176181
<groupId>io.split.client</groupId>
177182
<artifactId>targeting-engine</artifactId>

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@
1717
import io.split.client.impressions.ImpressionListener;
1818
import io.split.client.impressions.ImpressionObserver;
1919
import io.split.client.impressions.ImpressionsManager;
20+
import io.split.client.impressions.ImpressionsManagerConfig;
2021
import io.split.client.impressions.ImpressionsManagerImpl;
22+
import io.split.client.impressions.ImpressionsTelemetryRecorder;
2123
import io.split.client.impressions.ImpressionsSender;
24+
import io.split.client.impressions.TelemetryRuntimeImpressionsRecorder;
25+
import io.split.client.impressions.TelemetryUniqueKeysSender;
2226
import io.split.client.impressions.ImpressionsStorage;
2327
import io.split.client.impressions.ImpressionsStorageConsumer;
2428
import io.split.client.impressions.ImpressionsStorageProducer;
@@ -752,11 +756,12 @@ private ImpressionsManagerImpl buildImpressionsManager(SplitClientConfig config,
752756
: null;
753757
ProcessImpressionNone processImpressionNone = new ProcessImpressionNone(listener != null, _uniqueKeysTracker, counter);
754758

759+
ImpressionsTelemetryRecorder telemetryRecorder = new TelemetryRuntimeImpressionsRecorder(_telemetryStorageProducer);
755760
switch (config.impressionsMode()) {
756761
case OPTIMIZED:
757762
ImpressionObserver impressionObserver = new ImpressionObserver(config.getLastSeenCacheSize());
758763
processImpressionStrategy = new ProcessImpressionOptimized(listener != null, impressionObserver,
759-
counter, _telemetryStorageProducer);
764+
counter, telemetryRecorder);
760765
break;
761766
case DEBUG:
762767
impressionObserver = new ImpressionObserver(config.getLastSeenCacheSize());
@@ -766,7 +771,13 @@ private ImpressionsManagerImpl buildImpressionsManager(SplitClientConfig config,
766771
processImpressionStrategy = processImpressionNone;
767772
break;
768773
}
769-
return ImpressionsManagerImpl.instance(config, _telemetryStorageProducer, impressionsStorageConsumer,
774+
ImpressionsManagerConfig impressionsManagerConfig = ImpressionsManagerConfig.builder()
775+
.mode(config.impressionsMode())
776+
.impressionsRefreshRateSeconds(config.impressionsRefreshRate())
777+
.threadFactory(config.getThreadFactory())
778+
.debugEnabled(config.debugEnabled())
779+
.build();
780+
return ImpressionsManagerImpl.instance(impressionsManagerConfig, telemetryRecorder, impressionsStorageConsumer,
770781
impressionsStorageProducer,
771782
_impressionsSender, processImpressionNone, processImpressionStrategy, counter, listener);
772783
}
@@ -809,7 +820,7 @@ private UniqueKeysTracker createUniqueKeysTracker(SplitClientConfig config) {
809820
int uniqueKeysRefreshRate = config.operationMode().equals(OperationMode.STANDALONE)
810821
? config.uniqueKeysRefreshRateInMemory()
811822
: config.uniqueKeysRefreshRateRedis();
812-
return new UniqueKeysTrackerImp(_telemetrySynchronizer, uniqueKeysRefreshRate,
823+
return new UniqueKeysTrackerImp(new TelemetryUniqueKeysSender(_telemetrySynchronizer), uniqueKeysRefreshRate,
813824
config.filterUniqueKeysRefreshRate(),
814825
config.getThreadFactory());
815826
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.split.client.impressions;
2+
3+
import io.split.telemetry.domain.enums.ImpressionsDataTypeEnum;
4+
import io.split.telemetry.storage.TelemetryRuntimeProducer;
5+
6+
public class TelemetryRuntimeImpressionsRecorder implements ImpressionsTelemetryRecorder {
7+
8+
private final TelemetryRuntimeProducer _telemetryRuntimeProducer;
9+
10+
public TelemetryRuntimeImpressionsRecorder(TelemetryRuntimeProducer telemetryRuntimeProducer) {
11+
_telemetryRuntimeProducer = telemetryRuntimeProducer;
12+
}
13+
14+
@Override
15+
public void recordImpressionsDropped(long count) {
16+
_telemetryRuntimeProducer.recordImpressionStats(ImpressionsDataTypeEnum.IMPRESSIONS_DROPPED, count);
17+
}
18+
19+
@Override
20+
public void recordImpressionsQueued(long count) {
21+
_telemetryRuntimeProducer.recordImpressionStats(ImpressionsDataTypeEnum.IMPRESSIONS_QUEUED, count);
22+
}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.split.client.impressions;
2+
3+
import io.split.client.dtos.UniqueKeys;
4+
import io.split.telemetry.synchronizer.TelemetrySynchronizer;
5+
6+
public class TelemetryUniqueKeysSender implements UniqueKeysSender {
7+
8+
private final TelemetrySynchronizer _telemetrySynchronizer;
9+
10+
public TelemetryUniqueKeysSender(TelemetrySynchronizer telemetrySynchronizer) {
11+
_telemetrySynchronizer = telemetrySynchronizer;
12+
}
13+
14+
@Override
15+
public void send(UniqueKeys uniqueKeys) {
16+
_telemetrySynchronizer.synchronizeUniqueKeys(uniqueKeys);
17+
}
18+
}

client/src/test/java/io/split/client/impressions/UniqueKeysTrackerImpTest.java

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

client/src/test/java/io/split/client/impressions/strategy/ProcessImpressionDebugTest.java renamed to impressions/src/test/java/io/split/client/impressions/strategy/ProcessImpressionDebugTest.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,18 @@
66
import io.split.client.impressions.Impression;
77
import io.split.client.impressions.ImpressionObserver;
88
import io.split.client.impressions.ImpressionsResult;
9-
import io.split.telemetry.storage.InMemoryTelemetryStorage;
10-
import io.split.telemetry.storage.TelemetryStorage;
119
import org.junit.Assert;
1210
import org.junit.Test;
13-
import org.mockito.Mockito;
1411

1512
import java.util.ArrayList;
1613
import java.util.List;
1714

1815
public class ProcessImpressionDebugTest {
1916

2017
private static final long LAST_SEEN_CACHE_SIZE = 500000;
21-
private static TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
2218

2319
@Test
24-
public void processImpressionsWithListener(){
20+
public void processImpressionsWithListener() {
2521
boolean listenerEnable = true;
2622
ImpressionObserver impressionObserver = new ImpressionObserver(LAST_SEEN_CACHE_SIZE);
2723
ProcessImpressionDebug processImpressionDebug = new ProcessImpressionDebug(listenerEnable, impressionObserver);
@@ -40,12 +36,12 @@ public void processImpressionsWithListener(){
4036
long pt3 = impressionsResult1.getImpressionsToQueue().get(2).pt();
4137
Assert.assertEquals(1, pt3);
4238

43-
Assert.assertEquals(3,impressionsResult1.getImpressionsToQueue().size());
44-
Assert.assertEquals(3,impressionsResult1.getImpressionsToListener().size());
39+
Assert.assertEquals(3, impressionsResult1.getImpressionsToQueue().size());
40+
Assert.assertEquals(3, impressionsResult1.getImpressionsToListener().size());
4541
}
4642

4743
@Test
48-
public void processImpressionsWithoutListener(){
44+
public void processImpressionsWithoutListener() {
4945
boolean listenerEnable = false;
5046
ImpressionObserver impressionObserver = new ImpressionObserver(LAST_SEEN_CACHE_SIZE);
5147
ProcessImpressionDebug processImpressionDebug = new ProcessImpressionDebug(listenerEnable, impressionObserver);
@@ -64,7 +60,7 @@ public void processImpressionsWithoutListener(){
6460
long pt3 = impressionsResult1.getImpressionsToQueue().get(2).pt();
6561
Assert.assertEquals(1, pt3);
6662

67-
Assert.assertEquals(3,impressionsResult1.getImpressionsToQueue().size());
63+
Assert.assertEquals(3, impressionsResult1.getImpressionsToQueue().size());
6864
Assert.assertNull(impressionsResult1.getImpressionsToListener());
6965
}
70-
}
66+
}

0 commit comments

Comments
 (0)