Skip to content

Commit bbf57e1

Browse files
authored
Tracker module (#874)
1 parent bb34f0c commit bbf57e1

File tree

55 files changed

+1631
-717
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1631
-717
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ dependencies {
145145
return candidates.find { findProject(it) != null }
146146
}
147147

148-
['main', 'logger', 'events', 'events-domain', 'api', 'http-api', 'http', 'fallback', 'backoff'].each { moduleName ->
148+
['main', 'logger', 'events', 'events-domain', 'api', 'http-api', 'http', 'fallback', 'backoff', 'tracker'].each { moduleName ->
149149
def resolvedPath = resolveProjectPath(moduleName)
150150
if (resolvedPath != null) {
151151
include project(resolvedPath)

main/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ dependencies {
5454
api clientModuleProject('api')
5555
api clientModuleProject('http-api')
5656
api clientModuleProject('fallback')
57-
api clientModuleProject('backoff')
57+
implementation clientModuleProject('backoff')
58+
implementation clientModuleProject('tracker')
5859
// Internal module dependencies
5960
implementation clientModuleProject('http')
6061
implementation clientModuleProject('events-domain')

main/src/main/java/io/split/android/client/EventsTracker.java

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

main/src/main/java/io/split/android/client/EventsTrackerImpl.java

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

main/src/main/java/io/split/android/client/PropertyValidatorImpl.java

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

main/src/main/java/io/split/android/client/SplitClientImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.split.android.client.events.SplitEventsManager;
1919
import io.split.android.client.impressions.ImpressionListener;
2020
import io.split.android.client.shared.SplitClientContainer;
21+
import io.split.android.client.tracker.Tracker;
2122
import io.split.android.client.utils.logger.Logger;
2223
import io.split.android.client.validators.SplitValidator;
2324
import io.split.android.client.validators.TreatmentManager;
@@ -35,7 +36,7 @@ public final class SplitClientImpl implements SplitClient {
3536
private final TreatmentManager mTreatmentManager;
3637
private final ValidationMessageLogger mValidationLogger;
3738
private final AttributesManager mAttributesManager;
38-
private final EventsTracker mEventsTracker;
39+
private final Tracker mEventsTracker;
3940

4041
private static final double TRACK_DEFAULT_VALUE = 0.0;
4142

@@ -48,7 +49,7 @@ public SplitClientImpl(SplitFactory container,
4849
ImpressionListener impressionListener,
4950
SplitClientConfig config,
5051
SplitEventsManager eventsManager,
51-
EventsTracker eventsTracker,
52+
Tracker eventsTracker,
5253
AttributesManager attributesManager,
5354
SplitValidator splitValidator,
5455
TreatmentManager treatmentManager) {

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

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,21 @@
7070
import io.split.android.client.storage.general.GeneralInfoStorage;
7171
import io.split.android.client.storage.splits.SplitsStorage;
7272
import io.split.android.client.telemetry.TelemetrySynchronizer;
73+
import io.split.android.client.dtos.Event;
74+
import io.split.android.client.telemetry.model.Method;
7375
import io.split.android.client.telemetry.storage.TelemetryStorage;
76+
import io.split.android.client.tracker.DefaultTracker;
77+
import io.split.android.client.tracker.Tracker;
78+
import io.split.android.client.tracker.TrackerEvent;
7479
import io.split.android.client.utils.logger.Logger;
7580
import io.split.android.client.validators.ApiKeyValidator;
7681
import io.split.android.client.validators.ApiKeyValidatorImpl;
77-
import io.split.android.client.validators.EventValidator;
7882
import io.split.android.client.validators.EventValidatorImpl;
7983
import io.split.android.client.validators.KeyValidator;
8084
import io.split.android.client.validators.KeyValidatorImpl;
85+
import io.split.android.client.validators.PropertyValidatorImpl;
8186
import io.split.android.client.validators.SplitValidatorImpl;
87+
import io.split.android.client.validators.TrafficTypeValidatorImpl;
8288
import io.split.android.client.validators.ValidationConfig;
8389
import io.split.android.client.validators.ValidationErrorInfo;
8490
import io.split.android.client.validators.ValidationMessageLogger;
@@ -545,21 +551,40 @@ public static class EventsTrackerProvider {
545551
private final SplitsStorage mSplitsStorage;
546552
private final TelemetryStorage mTelemetryStorage;
547553
private final SyncManager mSyncManager;
548-
private volatile EventsTracker mEventsTracker;
554+
private volatile Tracker mEventsTracker;
549555

550556
public EventsTrackerProvider(SplitsStorage splitsStorage, TelemetryStorage telemetryStorage, SyncManager syncManager) {
551557
mSplitsStorage = splitsStorage;
552558
mTelemetryStorage = telemetryStorage;
553559
mSyncManager = syncManager;
554560
}
555561

556-
public EventsTracker getEventsTracker() {
562+
public Tracker getEventsTracker() {
557563
if (mEventsTracker == null) {
558564
synchronized (this) {
559565
if (mEventsTracker == null) {
560-
EventValidator eventsValidator = new EventValidatorImpl(new KeyValidatorImpl(), mSplitsStorage);
561-
mEventsTracker = new EventsTrackerImpl(eventsValidator, new ValidationMessageLoggerImpl(), mTelemetryStorage,
562-
new PropertyValidatorImpl(), mSyncManager);
566+
mEventsTracker = new DefaultTracker(
567+
new EventValidatorImpl(
568+
new KeyValidatorImpl(),
569+
new TrafficTypeValidatorImpl(mSplitsStorage)
570+
),
571+
new ValidationMessageLoggerImpl(),
572+
new PropertyValidatorImpl(
573+
new ValidationMessageLoggerImpl()
574+
),
575+
trackerEvent -> {
576+
Event event = new Event();
577+
event.eventTypeId = trackerEvent.eventType;
578+
event.trafficTypeName = trackerEvent.trafficType;
579+
event.key = trackerEvent.key;
580+
event.value = trackerEvent.value;
581+
event.timestamp = trackerEvent.timestamp;
582+
event.properties = trackerEvent.properties;
583+
event.setSizeInBytes(trackerEvent.sizeInBytes);
584+
mSyncManager.pushEvent(event);
585+
},
586+
latencyMs -> mTelemetryStorage.recordLatency(Method.TRACK, latencyMs),
587+
() -> mTelemetryStorage.recordException(Method.TRACK));
563588
}
564589
}
565590
}

main/src/main/java/io/split/android/client/localhost/LocalhostSplitClient.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
import io.split.android.client.EvaluationOptions;
1717
import io.split.android.client.EvaluatorImpl;
1818
import io.split.android.client.FlagSetsFilter;
19-
import io.split.android.client.PropertyValidatorImpl;
19+
import io.split.android.client.validators.PropertyValidatorImpl;
20+
import io.split.android.client.validators.PropertyValidatorAdapter;
2021
import io.split.android.client.SplitClient;
2122
import io.split.android.client.SplitClientConfig;
2223
import io.split.android.client.SplitFactory;
@@ -87,7 +88,9 @@ public LocalhostSplitClient(@NonNull LocalhostSplitFactory container,
8788
new SplitValidatorImpl(), getImpressionsListener(splitClientConfig),
8889
splitClientConfig.labelsEnabled(), eventsManager, attributesManager, attributesMerger,
8990
telemetryStorageProducer, flagSetsFilter, splitsStorage, new ValidationMessageLoggerImpl(), new FlagSetsValidatorImpl(),
90-
new PropertyValidatorImpl(), mFallbackTreatmentsCalculator);
91+
new PropertyValidatorAdapter(
92+
new PropertyValidatorImpl(new ValidationMessageLoggerImpl())),
93+
mFallbackTreatmentsCalculator);
9194
}
9295

9396
@Override
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.split.android.client.localhost;
2+
3+
import io.split.android.client.tracker.TrafficTypeValidator;
4+
5+
/**
6+
* Traffic type validator for localhost mode.
7+
* <p>
8+
* In localhost mode, all traffic types are considered valid since we're not
9+
* connected to the Split backend and can't validate against real feature flags.
10+
*/
11+
public class LocalhostTrafficTypeValidator implements TrafficTypeValidator {
12+
13+
@Override
14+
public boolean isValid(String trafficTypeName) {
15+
// In localhost mode, accept all traffic types
16+
return true;
17+
}
18+
}

main/src/main/java/io/split/android/client/validators/EventValidator.java

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

0 commit comments

Comments
 (0)