Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ dependencies {
return candidates.find { findProject(it) != null }
}

['main', 'logger', 'events', 'events-domain', 'api', 'http-api', 'http', 'fallback', 'backoff'].each { moduleName ->
['main', 'logger', 'events', 'events-domain', 'api', 'http-api', 'http', 'fallback', 'backoff', 'tracker'].each { moduleName ->
def resolvedPath = resolveProjectPath(moduleName)
if (resolvedPath != null) {
include project(resolvedPath)
Expand Down
3 changes: 2 additions & 1 deletion main/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ dependencies {
api clientModuleProject('api')
api clientModuleProject('http-api')
api clientModuleProject('fallback')
api clientModuleProject('backoff')
implementation clientModuleProject('backoff')
implementation clientModuleProject('tracker')
// Internal module dependencies
implementation clientModuleProject('http')
implementation clientModuleProject('events-domain')
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.split.android.client.events.SplitEventsManager;
import io.split.android.client.impressions.ImpressionListener;
import io.split.android.client.shared.SplitClientContainer;
import io.split.android.client.tracker.Tracker;
import io.split.android.client.utils.logger.Logger;
import io.split.android.client.validators.SplitValidator;
import io.split.android.client.validators.TreatmentManager;
Expand All @@ -35,7 +36,7 @@ public final class SplitClientImpl implements SplitClient {
private final TreatmentManager mTreatmentManager;
private final ValidationMessageLogger mValidationLogger;
private final AttributesManager mAttributesManager;
private final EventsTracker mEventsTracker;
private final Tracker mEventsTracker;

private static final double TRACK_DEFAULT_VALUE = 0.0;

Expand All @@ -48,7 +49,7 @@ public SplitClientImpl(SplitFactory container,
ImpressionListener impressionListener,
SplitClientConfig config,
SplitEventsManager eventsManager,
EventsTracker eventsTracker,
Tracker eventsTracker,
AttributesManager attributesManager,
SplitValidator splitValidator,
TreatmentManager treatmentManager) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,21 @@
import io.split.android.client.storage.general.GeneralInfoStorage;
import io.split.android.client.storage.splits.SplitsStorage;
import io.split.android.client.telemetry.TelemetrySynchronizer;
import io.split.android.client.dtos.Event;
import io.split.android.client.telemetry.model.Method;
import io.split.android.client.telemetry.storage.TelemetryStorage;
import io.split.android.client.tracker.DefaultTracker;
import io.split.android.client.tracker.Tracker;
import io.split.android.client.tracker.TrackerEvent;
import io.split.android.client.utils.logger.Logger;
import io.split.android.client.validators.ApiKeyValidator;
import io.split.android.client.validators.ApiKeyValidatorImpl;
import io.split.android.client.validators.EventValidator;
import io.split.android.client.validators.EventValidatorImpl;
import io.split.android.client.validators.KeyValidator;
import io.split.android.client.validators.KeyValidatorImpl;
import io.split.android.client.validators.PropertyValidatorImpl;
import io.split.android.client.validators.SplitValidatorImpl;
import io.split.android.client.validators.TrafficTypeValidatorImpl;
import io.split.android.client.validators.ValidationConfig;
import io.split.android.client.validators.ValidationErrorInfo;
import io.split.android.client.validators.ValidationMessageLogger;
Expand Down Expand Up @@ -545,21 +551,40 @@ public static class EventsTrackerProvider {
private final SplitsStorage mSplitsStorage;
private final TelemetryStorage mTelemetryStorage;
private final SyncManager mSyncManager;
private volatile EventsTracker mEventsTracker;
private volatile Tracker mEventsTracker;

public EventsTrackerProvider(SplitsStorage splitsStorage, TelemetryStorage telemetryStorage, SyncManager syncManager) {
mSplitsStorage = splitsStorage;
mTelemetryStorage = telemetryStorage;
mSyncManager = syncManager;
}

public EventsTracker getEventsTracker() {
public Tracker getEventsTracker() {
if (mEventsTracker == null) {
synchronized (this) {
if (mEventsTracker == null) {
EventValidator eventsValidator = new EventValidatorImpl(new KeyValidatorImpl(), mSplitsStorage);
mEventsTracker = new EventsTrackerImpl(eventsValidator, new ValidationMessageLoggerImpl(), mTelemetryStorage,
new PropertyValidatorImpl(), mSyncManager);
mEventsTracker = new DefaultTracker(
new EventValidatorImpl(
new KeyValidatorImpl(),
new TrafficTypeValidatorImpl(mSplitsStorage)
),
new ValidationMessageLoggerImpl(),
new PropertyValidatorImpl(
new ValidationMessageLoggerImpl()
),
trackerEvent -> {
Event event = new Event();
event.eventTypeId = trackerEvent.eventType;
event.trafficTypeName = trackerEvent.trafficType;
event.key = trackerEvent.key;
event.value = trackerEvent.value;
event.timestamp = trackerEvent.timestamp;
event.properties = trackerEvent.properties;
event.setSizeInBytes(trackerEvent.sizeInBytes);
mSyncManager.pushEvent(event);
},
latencyMs -> mTelemetryStorage.recordLatency(Method.TRACK, latencyMs),
() -> mTelemetryStorage.recordException(Method.TRACK));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
import io.split.android.client.EvaluationOptions;
import io.split.android.client.EvaluatorImpl;
import io.split.android.client.FlagSetsFilter;
import io.split.android.client.PropertyValidatorImpl;
import io.split.android.client.validators.PropertyValidatorImpl;
import io.split.android.client.validators.PropertyValidatorAdapter;
import io.split.android.client.SplitClient;
import io.split.android.client.SplitClientConfig;
import io.split.android.client.SplitFactory;
Expand Down Expand Up @@ -87,7 +88,9 @@ public LocalhostSplitClient(@NonNull LocalhostSplitFactory container,
new SplitValidatorImpl(), getImpressionsListener(splitClientConfig),
splitClientConfig.labelsEnabled(), eventsManager, attributesManager, attributesMerger,
telemetryStorageProducer, flagSetsFilter, splitsStorage, new ValidationMessageLoggerImpl(), new FlagSetsValidatorImpl(),
new PropertyValidatorImpl(), mFallbackTreatmentsCalculator);
new PropertyValidatorAdapter(
new PropertyValidatorImpl(new ValidationMessageLoggerImpl())),
mFallbackTreatmentsCalculator);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.split.android.client.localhost;

import io.split.android.client.tracker.TrafficTypeValidator;

/**
* Traffic type validator for localhost mode.
* <p>
* In localhost mode, all traffic types are considered valid since we're not
* connected to the Split backend and can't validate against real feature flags.
*/
public class LocalhostTrafficTypeValidator implements TrafficTypeValidator {

@Override
public boolean isValid(String trafficTypeName) {
// In localhost mode, accept all traffic types
return true;
}
}

This file was deleted.

Loading
Loading