@@ -20,7 +20,7 @@ const eventEndPoint = "https://logx.optimizely.com/v1/events"
20
20
const revenueKey = "revenue"
21
21
const valueKey = "value"
22
22
23
- func createLogEvent (event EventBatch ) LogEvent {
23
+ func createLogEvent (event Batch ) LogEvent {
24
24
return LogEvent {endPoint : eventEndPoint , event : event }
25
25
}
26
26
@@ -29,8 +29,8 @@ func makeTimestamp() int64 {
29
29
}
30
30
31
31
// CreateEventContext creates and returns EventContext
32
- func CreateEventContext (projectID string , revision string , accountID string , anonymizeIP bool , botFiltering bool , attributeKeyToIDMap map [string ]string ) EventContext {
33
- context := EventContext {}
32
+ func CreateEventContext (projectID string , revision string , accountID string , anonymizeIP bool , botFiltering bool , attributeKeyToIDMap map [string ]string ) Context {
33
+ context := Context {}
34
34
context .ProjectID = projectID
35
35
context .Revision = revision
36
36
context .AccountID = accountID
@@ -43,7 +43,7 @@ func CreateEventContext(projectID string, revision string, accountID string, ano
43
43
return context
44
44
}
45
45
46
- func createImpressionEvent (context EventContext , experiment entities.Experiment ,
46
+ func createImpressionEvent (context Context , experiment entities.Experiment ,
47
47
variation entities.Variation , attributes map [string ]interface {}) ImpressionEvent {
48
48
49
49
impression := ImpressionEvent {}
@@ -58,7 +58,7 @@ func createImpressionEvent(context EventContext, experiment entities.Experiment,
58
58
}
59
59
60
60
// CreateImpressionUserEvent creates and returns ImpressionEvent for user
61
- func CreateImpressionUserEvent (context EventContext , experiment entities.Experiment ,
61
+ func CreateImpressionUserEvent (context Context , experiment entities.Experiment ,
62
62
variation entities.Variation ,
63
63
userContext entities.UserContext ) UserEvent {
64
64
@@ -74,8 +74,8 @@ func CreateImpressionUserEvent(context EventContext, experiment entities.Experim
74
74
return userEvent
75
75
}
76
76
77
- func createImpressionBatchEvent ( userEvent UserEvent ) EventBatch {
78
-
77
+ // create an impression visitor
78
+ func createImpressionVisitor ( userEvent UserEvent ) Visitor {
79
79
decision := Decision {}
80
80
decision .CampaignID = userEvent .Impression .CampaignID
81
81
decision .ExperimentID = userEvent .Impression .ExperimentID
@@ -88,10 +88,12 @@ func createImpressionBatchEvent(userEvent UserEvent) EventBatch {
88
88
dispatchEvent .UUID = guuid .New ().String ()
89
89
dispatchEvent .Tags = make (map [string ]interface {})
90
90
91
- return createBatchEvent (userEvent , userEvent .Impression .Attributes , []Decision {decision }, []SnapshotEvent {dispatchEvent })
91
+ visitor := createVisitor (userEvent , userEvent .Impression .Attributes , []Decision {decision }, []SnapshotEvent {dispatchEvent })
92
92
93
+ return visitor
93
94
}
94
95
96
+ // create a conversion event
95
97
func createConversionEvent (attributeKeyToIDMap map [string ]string , event entities.Event , attributes map [string ]interface {}, eventTags map [string ]interface {}, botFiltering bool ) ConversionEvent {
96
98
conversion := ConversionEvent {}
97
99
@@ -104,7 +106,7 @@ func createConversionEvent(attributeKeyToIDMap map[string]string, event entities
104
106
}
105
107
106
108
// CreateConversionUserEvent creates and returns ConversionEvent for user
107
- func CreateConversionUserEvent (context EventContext , event entities.Event , userContext entities.UserContext , attributeKeyToIDMap map [string ]string , eventTags map [string ]interface {}) UserEvent {
109
+ func CreateConversionUserEvent (context Context , event entities.Event , userContext entities.UserContext , attributeKeyToIDMap map [string ]string , eventTags map [string ]interface {}) UserEvent {
108
110
109
111
userEvent := UserEvent {}
110
112
userEvent .Timestamp = makeTimestamp ()
@@ -127,7 +129,21 @@ func CreateConversionUserEvent(context EventContext, event entities.Event, userC
127
129
return userEvent
128
130
129
131
}
130
- func createConversionBatchEvent (userEvent UserEvent ) EventBatch {
132
+
133
+ // create visitor from user event
134
+ func createVisitorFromUserEvent (event UserEvent ) Visitor {
135
+ if event .Impression != nil {
136
+ return createImpressionVisitor (event )
137
+ }
138
+ if event .Conversion != nil {
139
+ return createConversionVisitor (event )
140
+ }
141
+
142
+ return Visitor {}
143
+ }
144
+
145
+ // create a conversion visitor
146
+ func createConversionVisitor (userEvent UserEvent ) Visitor {
131
147
132
148
dispatchEvent := SnapshotEvent {}
133
149
dispatchEvent .Timestamp = makeTimestamp ()
@@ -142,13 +158,15 @@ func createConversionBatchEvent(userEvent UserEvent) EventBatch {
142
158
dispatchEvent .Value = userEvent .Conversion .Value
143
159
}
144
160
145
- return createBatchEvent (userEvent , userEvent .Conversion .Attributes , []Decision {}, []SnapshotEvent {dispatchEvent })
161
+ visitor := createVisitor (userEvent , userEvent .Conversion .Attributes , []Decision {}, []SnapshotEvent {dispatchEvent })
162
+
163
+ return visitor
146
164
}
147
165
148
- func createBatchEvent (userEvent UserEvent , attributes []VisitorAttribute ,
166
+ // create a visitor
167
+ func createVisitor (userEvent UserEvent , attributes []VisitorAttribute ,
149
168
decisions []Decision ,
150
- dispatchEvents []SnapshotEvent ) EventBatch {
151
-
169
+ dispatchEvents []SnapshotEvent ) Visitor {
152
170
snapShot := Snapshot {}
153
171
snapShot .Decisions = decisions
154
172
snapShot .Events = dispatchEvents
@@ -161,7 +179,14 @@ func createBatchEvent(userEvent UserEvent, attributes []VisitorAttribute,
161
179
visitor .Snapshots = []Snapshot {snapShot }
162
180
visitor .VisitorID = userEvent .VisitorID
163
181
164
- eventBatch := EventBatch {}
182
+ return visitor
183
+ }
184
+
185
+ // create a batch event with visitor
186
+ func createBatchEvent (userEvent UserEvent , visitor Visitor ) Batch {
187
+
188
+
189
+ eventBatch := Batch {}
165
190
eventBatch .ProjectID = userEvent .EventContext .ProjectID
166
191
eventBatch .Revision = userEvent .EventContext .Revision
167
192
eventBatch .AccountID = userEvent .EventContext .AccountID
@@ -174,6 +199,7 @@ func createBatchEvent(userEvent UserEvent, attributes []VisitorAttribute,
174
199
return eventBatch
175
200
}
176
201
202
+ // get visitor attributes from user attributes
177
203
func getEventAttributes (attributeKeyToIDMap map [string ]string , attributes map [string ]interface {}, botFiltering bool ) []VisitorAttribute {
178
204
var eventAttributes = []VisitorAttribute {}
179
205
@@ -206,6 +232,7 @@ func getEventAttributes(attributeKeyToIDMap map[string]string, attributes map[st
206
232
return eventAttributes
207
233
}
208
234
235
+ // get revenue attribute
209
236
func getRevenueValue (eventTags map [string ]interface {}) (int64 , error ) {
210
237
if value , ok := eventTags [revenueKey ]; ok {
211
238
return utils .GetIntValue (value )
@@ -214,6 +241,7 @@ func getRevenueValue(eventTags map[string]interface{}) (int64, error) {
214
241
return 0 , errors .New ("No event tag found for revenue" )
215
242
}
216
243
244
+ // get a value attribute
217
245
func getTagValue (eventTags map [string ]interface {}) (float64 , error ) {
218
246
if value , ok := eventTags [valueKey ]; ok {
219
247
return utils .GetFloatValue (value )
0 commit comments