@@ -76,8 +76,10 @@ func (o *OptimizelyClient) Activate(experimentKey string, userContext entities.U
7676 if experimentDecision .Variation != nil && decisionContext .Experiment != nil {
7777 // send an impression event
7878 result = experimentDecision .Variation .Key
79- impressionEvent := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , * decisionContext .Experiment , * experimentDecision .Variation , userContext )
80- o .EventProcessor .ProcessEvent (impressionEvent )
79+ if ue , ok := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , * decisionContext .Experiment ,
80+ experimentDecision .Variation , userContext , "" , experimentKey , "experiment" ); ok {
81+ o .EventProcessor .ProcessEvent (ue )
82+ }
8183 }
8284
8385 return result , err
@@ -129,11 +131,11 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
129131 }
130132 }
131133
132- if featureDecision .Source == decision .FeatureTest && featureDecision .Variation != nil {
133- // send impression event for feature tests
134- impressionEvent := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , featureDecision .Experiment , * featureDecision .Variation , userContext )
135- o .EventProcessor .ProcessEvent (impressionEvent )
134+ if ue , ok := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , featureDecision .Experiment ,
135+ featureDecision .Variation , userContext , featureKey , featureDecision .Experiment .Key , featureDecision .Source ); ok {
136+ o .EventProcessor .ProcessEvent (ue )
136137 }
138+
137139 return result , err
138140}
139141
@@ -463,14 +465,19 @@ func (o *OptimizelyClient) GetDetailedFeatureDecisionUnsafe(featureKey string, u
463465 if featureDecision .Variation != nil {
464466 decisionInfo .Enabled = featureDecision .Variation .FeatureEnabled
465467
468+ // This information is only necessary for feature tests.
469+ // For rollouts experiments and variations are an implementation detail only.
466470 if featureDecision .Source == decision .FeatureTest {
467471 decisionInfo .VariationKey = featureDecision .Variation .Key
468472 decisionInfo .ExperimentKey = featureDecision .Experiment .Key
469- // Triggers impression events when applicable
470- if ! disableTracking {
471- // send impression event for feature tests
472- impressionEvent := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , featureDecision .Experiment , * featureDecision .Variation , userContext )
473- o .EventProcessor .ProcessEvent (impressionEvent )
473+ }
474+
475+ // Triggers impression events when applicable
476+ if ! disableTracking {
477+ // send impression event for feature tests
478+ if ue , ok := event .CreateImpressionUserEvent (decisionContext .ProjectConfig , featureDecision .Experiment ,
479+ featureDecision .Variation , userContext , featureKey , featureDecision .Experiment .Key , featureDecision .Source ); ok {
480+ o .EventProcessor .ProcessEvent (ue )
474481 }
475482 }
476483 }
@@ -624,12 +631,14 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey, variableKey string, us
624631 return decisionContext , featureDecision , e
625632 }
626633
634+ decisionContext .ProjectConfig = projectConfig
627635 feature , e := projectConfig .GetFeatureByKey (featureKey )
628636 if e != nil {
629637 o .logger .Warning (fmt .Sprintf (`Could not get feature for key "%s": %s` , featureKey , e ))
630638 return decisionContext , featureDecision , nil
631639 }
632640
641+ decisionContext .Feature = & feature
633642 variable := entities.Variable {}
634643 if variableKey != "" {
635644 variable , err = projectConfig .GetVariableByKey (feature .Key , variableKey )
@@ -639,12 +648,7 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey, variableKey string, us
639648 }
640649 }
641650
642- decisionContext = decision.FeatureDecisionContext {
643- Feature : & feature ,
644- ProjectConfig : projectConfig ,
645- Variable : variable ,
646- }
647-
651+ decisionContext .Variable = variable
648652 featureDecision , err = o .DecisionService .GetFeatureDecision (decisionContext , userContext )
649653 if err != nil {
650654 o .logger .Warning (fmt .Sprintf (`Received error while making a decision for feature "%s": %s` , featureKey , err ))
0 commit comments