Skip to content

Add sessionId and revision to event payload #67

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 30, 2017
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
90 changes: 70 additions & 20 deletions core-api/src/main/java/com/optimizely/ab/Optimizely.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,22 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,
return activate(experimentKey, userId, Collections.<String, String>emptyMap());
}

public @Nullable Variation activate(@Nonnull String experimentKey,
@Nonnull String userId,
@CheckForNull String sessionId) throws UnknownExperimentException {
return activate(experimentKey, userId, Collections.<String, String>emptyMap(), sessionId);
}

public @Nullable Variation activate(@Nonnull String experimentKey,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) throws UnknownExperimentException {
return activate(experimentKey, userId, attributes, null);
}

public @Nullable Variation activate(@Nonnull String experimentKey,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) throws UnknownExperimentException {

if (!validateUserId(userId)) {
logger.info("Not activating user for experiment \"{}\".", experimentKey);
Expand All @@ -135,27 +148,42 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,
return null;
}

return activate(currentConfig, experiment, userId, attributes);
return activate(currentConfig, experiment, userId, attributes, sessionId);
}

public @Nullable Variation activate(@Nonnull Experiment experiment,
@Nonnull String userId) {
return activate(experiment, userId, Collections.<String, String>emptyMap());
}

public @Nullable Variation activate(@Nonnull Experiment experiment,
@Nonnull String userId,
@CheckForNull String sessionId) {
return activate(experiment, userId, Collections.<String, String>emptyMap(), sessionId);
}

public @Nullable Variation activate(@Nonnull Experiment experiment,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) {

return activate(experiment, userId, attributes, null);
}

public @Nullable Variation activate(@Nonnull Experiment experiment,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) {

ProjectConfig currentConfig = getProjectConfig();

return activate(currentConfig, experiment, userId, attributes);
return activate(currentConfig, experiment, userId, attributes, sessionId);
}

private @Nullable Variation activate(@Nonnull ProjectConfig projectConfig,
@Nonnull Experiment experiment,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) {
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) {
// determine whether all the given attributes are present in the project config. If not, filter out the unknown
// attributes.
attributes = filterAttributes(projectConfig, attributes);
Expand All @@ -173,8 +201,8 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,
}

if (experiment.isRunning()) {
LogEvent impressionEvent =
eventBuilder.createImpressionEvent(projectConfig, experiment, variation, userId, attributes);
LogEvent impressionEvent = eventBuilder.createImpressionEvent(projectConfig, experiment, variation, userId,
attributes, sessionId);
logger.info("Activating user \"{}\" in experiment \"{}\".", userId, experiment.getKey());
logger.debug(
"Dispatching impression event to URL {} with params {} and payload \"{}\".",
Expand All @@ -197,13 +225,26 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,

public void track(@Nonnull String eventName,
@Nonnull String userId) throws UnknownEventTypeException {
track(eventName, userId, Collections.<String, String>emptyMap(), null);
track(eventName, userId, Collections.<String, String>emptyMap(), null, null);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
@CheckForNull String sessionId) throws UnknownEventTypeException {
track(eventName, userId, Collections.<String, String>emptyMap(), null, sessionId);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) throws UnknownEventTypeException {
track(eventName, userId, attributes, null);
track(eventName, userId, attributes, null, null);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) throws UnknownEventTypeException {
track(eventName, userId, attributes, null, sessionId);
}

public void track(@Nonnull String eventName,
Expand All @@ -212,17 +253,33 @@ public void track(@Nonnull String eventName,
track(eventName, userId, Collections.<String, String>emptyMap(), eventValue);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
long eventValue,
@CheckForNull String sessionId) throws UnknownEventTypeException {
track(eventName, userId, Collections.<String, String>emptyMap(), eventValue, sessionId);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
long eventValue) throws UnknownEventTypeException {
track(eventName, userId, attributes, (Long)eventValue);
track(eventName, userId, attributes, (Long)eventValue, null);
}

public void track(@Nonnull String eventName,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
long eventValue,
@CheckForNull String sessionId) throws UnknownEventTypeException {
track(eventName, userId, attributes, (Long)eventValue, sessionId);
}

private void track(@Nonnull String eventName,
@Nonnull String userId,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue) throws UnknownEventTypeException {
@CheckForNull Long eventValue,
@CheckForNull String sessionId) throws UnknownEventTypeException {

ProjectConfig currentConfig = getProjectConfig();

Expand All @@ -238,16 +295,9 @@ private void track(@Nonnull String eventName,
attributes = filterAttributes(currentConfig, attributes);

// create the conversion event request parameters, then dispatch
LogEvent conversionEvent;
if (eventValue == null) {
conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
eventType.getId(), eventType.getKey(),
attributes);
} else {
conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
eventType.getId(), eventType.getKey(), attributes,
eventValue);
}
LogEvent conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
eventType.getId(), eventType.getKey(), attributes,
eventValue, sessionId);

if (conversionEvent == null) {
logger.info("There are no valid experiments for event \"{}\" to track.", eventName);
Expand All @@ -265,7 +315,7 @@ private void track(@Nonnull String eventName,
}

notificationBroadcaster.broadcastEventTracked(eventName, userId, attributes, eventValue,
conversionEvent);
conversionEvent);
}

//======== live variable getters ========//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,28 @@

public abstract class EventBuilder {

public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Experiment activatedExperiment,
@Nonnull Variation variation,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) {
return createImpressionEvent(projectConfig, activatedExperiment, variation, userId, attributes, null);
}

public abstract LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Experiment activatedExperiment,
@Nonnull Variation variation,
@Nonnull String userId,
@Nonnull Map<String, String> attributes);
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId);

public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Bucketer bucketer,
@Nonnull String userId,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes) {
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, null);
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, null, null);
}

public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
Expand All @@ -51,14 +60,16 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
long eventValue) {
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, (Long)eventValue);
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, (Long)eventValue,
null);
}

abstract LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Bucketer bucketer,
@Nonnull String userId,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue);
public abstract LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Bucketer bucketer,
@Nonnull String userId,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue,
@CheckForNull String sessionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Experiment activatedExperiment,
@Nonnull Variation variation,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) {
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) {

Map<String, String> requestParams = new HashMap<String, String>();
addCommonRequestParams(requestParams, projectConfig, userId, attributes);
Expand All @@ -78,13 +79,14 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
String.format(ENDPOINT_FORMAT, projectConfig.getProjectId()), requestParams, EMPTY_BODY);
}

LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Bucketer bucketer,
@Nonnull String userId,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue) {
public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Bucketer bucketer,
@Nonnull String userId,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue,
@CheckForNull String sessionId) {

Map<String, String> requestParams = new HashMap<String, String>();
List<Experiment> addedExperiments =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull Experiment activatedExperiment,
@Nonnull Variation variation,
@Nonnull String userId,
@Nonnull Map<String, String> attributes) {
@Nonnull Map<String, String> attributes,
@CheckForNull String sessionId) {

Impression impressionPayload = new Impression();
impressionPayload.setVisitorId(userId);
Expand All @@ -96,6 +97,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
impressionPayload.setClientEngine(clientEngine);
impressionPayload.setClientVersion(clientVersion);
impressionPayload.setAnonymizeIP(projectConfig.getAnonymizeIP());
impressionPayload.setRevision(projectConfig.getRevision());
impressionPayload.setSessionId(sessionId);

String payload = this.serializer.serialize(impressionPayload);
return new LogEvent(RequestMethod.POST, IMPRESSION_ENDPOINT, Collections.<String, String>emptyMap(), payload);
Expand All @@ -107,7 +110,8 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@Nonnull String eventId,
@Nonnull String eventName,
@Nonnull Map<String, String> attributes,
@CheckForNull Long eventValue) {
@CheckForNull Long eventValue,
@CheckForNull String sessionId) {

Conversion conversionPayload = new Conversion();
conversionPayload.setVisitorId(userId);
Expand Down Expand Up @@ -137,6 +141,9 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
conversionPayload.setAnonymizeIP(projectConfig.getAnonymizeIP());
conversionPayload.setClientEngine(clientEngine);
conversionPayload.setClientVersion(clientVersion);
conversionPayload.setRevision(projectConfig.getRevision());
conversionPayload.setSessionId(sessionId);


String payload = this.serializer.serialize(conversionPayload);
return new LogEvent(RequestMethod.POST, CONVERSION_ENDPOINT, Collections.<String, String>emptyMap(), payload);
Expand Down Expand Up @@ -203,7 +210,8 @@ private List<LayerState> createLayerStates(ProjectConfig projectConfig, Bucketer
Variation bucketedVariation = bucketer.bucket(experiment, userId);
if (bucketedVariation != null) {
Decision decision = new Decision(bucketedVariation.getId(), false, experiment.getId());
layerStates.add(new LayerState(experiment.getLayerId(), decision, true));
layerStates.add(
new LayerState(experiment.getLayerId(), projectConfig.getRevision(), decision, true));
}
} else {
logger.info(
Expand Down
Loading