Skip to content

Commit a0cd46d

Browse files
author
Vignesh Raja
authored
Add sessionId and revision to event payload (#67)
1 parent 4fc4c15 commit a0cd46d

22 files changed

+697
-184
lines changed

core-api/src/main/java/com/optimizely/ab/Optimizely.java

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,22 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,
117117
return activate(experimentKey, userId, Collections.<String, String>emptyMap());
118118
}
119119

120+
public @Nullable Variation activate(@Nonnull String experimentKey,
121+
@Nonnull String userId,
122+
@CheckForNull String sessionId) throws UnknownExperimentException {
123+
return activate(experimentKey, userId, Collections.<String, String>emptyMap(), sessionId);
124+
}
125+
120126
public @Nullable Variation activate(@Nonnull String experimentKey,
121127
@Nonnull String userId,
122128
@Nonnull Map<String, String> attributes) throws UnknownExperimentException {
129+
return activate(experimentKey, userId, attributes, null);
130+
}
131+
132+
public @Nullable Variation activate(@Nonnull String experimentKey,
133+
@Nonnull String userId,
134+
@Nonnull Map<String, String> attributes,
135+
@CheckForNull String sessionId) throws UnknownExperimentException {
123136

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

138-
return activate(currentConfig, experiment, userId, attributes);
151+
return activate(currentConfig, experiment, userId, attributes, sessionId);
139152
}
140153

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

159+
public @Nullable Variation activate(@Nonnull Experiment experiment,
160+
@Nonnull String userId,
161+
@CheckForNull String sessionId) {
162+
return activate(experiment, userId, Collections.<String, String>emptyMap(), sessionId);
163+
}
164+
146165
public @Nullable Variation activate(@Nonnull Experiment experiment,
147166
@Nonnull String userId,
148167
@Nonnull Map<String, String> attributes) {
149168

169+
return activate(experiment, userId, attributes, null);
170+
}
171+
172+
public @Nullable Variation activate(@Nonnull Experiment experiment,
173+
@Nonnull String userId,
174+
@Nonnull Map<String, String> attributes,
175+
@CheckForNull String sessionId) {
176+
150177
ProjectConfig currentConfig = getProjectConfig();
151178

152-
return activate(currentConfig, experiment, userId, attributes);
179+
return activate(currentConfig, experiment, userId, attributes, sessionId);
153180
}
154181

155182
private @Nullable Variation activate(@Nonnull ProjectConfig projectConfig,
156183
@Nonnull Experiment experiment,
157184
@Nonnull String userId,
158-
@Nonnull Map<String, String> attributes) {
185+
@Nonnull Map<String, String> attributes,
186+
@CheckForNull String sessionId) {
159187
// determine whether all the given attributes are present in the project config. If not, filter out the unknown
160188
// attributes.
161189
attributes = filterAttributes(projectConfig, attributes);
@@ -173,8 +201,8 @@ private Optimizely(@Nonnull ProjectConfig projectConfig,
173201
}
174202

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

198226
public void track(@Nonnull String eventName,
199227
@Nonnull String userId) throws UnknownEventTypeException {
200-
track(eventName, userId, Collections.<String, String>emptyMap(), null);
228+
track(eventName, userId, Collections.<String, String>emptyMap(), null, null);
229+
}
230+
231+
public void track(@Nonnull String eventName,
232+
@Nonnull String userId,
233+
@CheckForNull String sessionId) throws UnknownEventTypeException {
234+
track(eventName, userId, Collections.<String, String>emptyMap(), null, sessionId);
201235
}
202236

203237
public void track(@Nonnull String eventName,
204238
@Nonnull String userId,
205239
@Nonnull Map<String, String> attributes) throws UnknownEventTypeException {
206-
track(eventName, userId, attributes, null);
240+
track(eventName, userId, attributes, null, null);
241+
}
242+
243+
public void track(@Nonnull String eventName,
244+
@Nonnull String userId,
245+
@Nonnull Map<String, String> attributes,
246+
@CheckForNull String sessionId) throws UnknownEventTypeException {
247+
track(eventName, userId, attributes, null, sessionId);
207248
}
208249

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

256+
public void track(@Nonnull String eventName,
257+
@Nonnull String userId,
258+
long eventValue,
259+
@CheckForNull String sessionId) throws UnknownEventTypeException {
260+
track(eventName, userId, Collections.<String, String>emptyMap(), eventValue, sessionId);
261+
}
262+
215263
public void track(@Nonnull String eventName,
216264
@Nonnull String userId,
217265
@Nonnull Map<String, String> attributes,
218266
long eventValue) throws UnknownEventTypeException {
219-
track(eventName, userId, attributes, (Long)eventValue);
267+
track(eventName, userId, attributes, (Long)eventValue, null);
268+
}
269+
270+
public void track(@Nonnull String eventName,
271+
@Nonnull String userId,
272+
@Nonnull Map<String, String> attributes,
273+
long eventValue,
274+
@CheckForNull String sessionId) throws UnknownEventTypeException {
275+
track(eventName, userId, attributes, (Long)eventValue, sessionId);
220276
}
221277

222278
private void track(@Nonnull String eventName,
223279
@Nonnull String userId,
224280
@Nonnull Map<String, String> attributes,
225-
@CheckForNull Long eventValue) throws UnknownEventTypeException {
281+
@CheckForNull Long eventValue,
282+
@CheckForNull String sessionId) throws UnknownEventTypeException {
226283

227284
ProjectConfig currentConfig = getProjectConfig();
228285

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

240297
// create the conversion event request parameters, then dispatch
241-
LogEvent conversionEvent;
242-
if (eventValue == null) {
243-
conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
244-
eventType.getId(), eventType.getKey(),
245-
attributes);
246-
} else {
247-
conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
248-
eventType.getId(), eventType.getKey(), attributes,
249-
eventValue);
250-
}
298+
LogEvent conversionEvent = eventBuilder.createConversionEvent(currentConfig, bucketer, userId,
299+
eventType.getId(), eventType.getKey(), attributes,
300+
eventValue, sessionId);
251301

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

267317
notificationBroadcaster.broadcastEventTracked(eventName, userId, attributes, eventValue,
268-
conversionEvent);
318+
conversionEvent);
269319
}
270320

271321
//======== live variable getters ========//

core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilder.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,28 @@
2929

3030
public abstract class EventBuilder {
3131

32+
public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
33+
@Nonnull Experiment activatedExperiment,
34+
@Nonnull Variation variation,
35+
@Nonnull String userId,
36+
@Nonnull Map<String, String> attributes) {
37+
return createImpressionEvent(projectConfig, activatedExperiment, variation, userId, attributes, null);
38+
}
39+
3240
public abstract LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
3341
@Nonnull Experiment activatedExperiment,
3442
@Nonnull Variation variation,
3543
@Nonnull String userId,
36-
@Nonnull Map<String, String> attributes);
44+
@Nonnull Map<String, String> attributes,
45+
@CheckForNull String sessionId);
3746

3847
public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
3948
@Nonnull Bucketer bucketer,
4049
@Nonnull String userId,
4150
@Nonnull String eventId,
4251
@Nonnull String eventName,
4352
@Nonnull Map<String, String> attributes) {
44-
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, null);
53+
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, null, null);
4554
}
4655

4756
public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
@@ -51,14 +60,16 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
5160
@Nonnull String eventName,
5261
@Nonnull Map<String, String> attributes,
5362
long eventValue) {
54-
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, (Long)eventValue);
63+
return createConversionEvent(projectConfig, bucketer, userId, eventId, eventName, attributes, (Long)eventValue,
64+
null);
5565
}
5666

57-
abstract LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
58-
@Nonnull Bucketer bucketer,
59-
@Nonnull String userId,
60-
@Nonnull String eventId,
61-
@Nonnull String eventName,
62-
@Nonnull Map<String, String> attributes,
63-
@CheckForNull Long eventValue);
67+
public abstract LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
68+
@Nonnull Bucketer bucketer,
69+
@Nonnull String userId,
70+
@Nonnull String eventId,
71+
@Nonnull String eventName,
72+
@Nonnull Map<String, String> attributes,
73+
@CheckForNull Long eventValue,
74+
@CheckForNull String sessionId);
6475
}

core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
6767
@Nonnull Experiment activatedExperiment,
6868
@Nonnull Variation variation,
6969
@Nonnull String userId,
70-
@Nonnull Map<String, String> attributes) {
70+
@Nonnull Map<String, String> attributes,
71+
@CheckForNull String sessionId) {
7172

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

81-
LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
82-
@Nonnull Bucketer bucketer,
83-
@Nonnull String userId,
84-
@Nonnull String eventId,
85-
@Nonnull String eventName,
86-
@Nonnull Map<String, String> attributes,
87-
@CheckForNull Long eventValue) {
82+
public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
83+
@Nonnull Bucketer bucketer,
84+
@Nonnull String userId,
85+
@Nonnull String eventId,
86+
@Nonnull String eventName,
87+
@Nonnull Map<String, String> attributes,
88+
@CheckForNull Long eventValue,
89+
@CheckForNull String sessionId) {
8890

8991
Map<String, String> requestParams = new HashMap<String, String>();
9092
List<Experiment> addedExperiments =

core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
7676
@Nonnull Experiment activatedExperiment,
7777
@Nonnull Variation variation,
7878
@Nonnull String userId,
79-
@Nonnull Map<String, String> attributes) {
79+
@Nonnull Map<String, String> attributes,
80+
@CheckForNull String sessionId) {
8081

8182
Impression impressionPayload = new Impression();
8283
impressionPayload.setVisitorId(userId);
@@ -96,6 +97,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
9697
impressionPayload.setClientEngine(clientEngine);
9798
impressionPayload.setClientVersion(clientVersion);
9899
impressionPayload.setAnonymizeIP(projectConfig.getAnonymizeIP());
100+
impressionPayload.setRevision(projectConfig.getRevision());
101+
impressionPayload.setSessionId(sessionId);
99102

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

112116
Conversion conversionPayload = new Conversion();
113117
conversionPayload.setVisitorId(userId);
@@ -137,6 +141,9 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
137141
conversionPayload.setAnonymizeIP(projectConfig.getAnonymizeIP());
138142
conversionPayload.setClientEngine(clientEngine);
139143
conversionPayload.setClientVersion(clientVersion);
144+
conversionPayload.setRevision(projectConfig.getRevision());
145+
conversionPayload.setSessionId(sessionId);
146+
140147

141148
String payload = this.serializer.serialize(conversionPayload);
142149
return new LogEvent(RequestMethod.POST, CONVERSION_ENDPOINT, Collections.<String, String>emptyMap(), payload);
@@ -203,7 +210,8 @@ private List<LayerState> createLayerStates(ProjectConfig projectConfig, Bucketer
203210
Variation bucketedVariation = bucketer.bucket(experiment, userId);
204211
if (bucketedVariation != null) {
205212
Decision decision = new Decision(bucketedVariation.getId(), false, experiment.getId());
206-
layerStates.add(new LayerState(experiment.getLayerId(), decision, true));
213+
layerStates.add(
214+
new LayerState(experiment.getLayerId(), projectConfig.getRevision(), decision, true));
207215
}
208216
} else {
209217
logger.info(

0 commit comments

Comments
 (0)