From 285197cad9bf7dcb211f27d2f7176599c65df745 Mon Sep 17 00:00:00 2001 From: esrakartalOpt Date: Thu, 22 May 2025 13:45:43 -0500 Subject: [PATCH 1/5] [FSSDK-11451] Go Implementation: Add --- pkg/client/client.go | 6 +++++- pkg/decision/flag_notification.go | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/client/client.go b/pkg/client/client.go index 9010ad44..56849e95 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -180,6 +180,8 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string decisionContext.Variable = entities.Variable{} var featureDecision decision.FeatureDecision var reasons decide.DecisionReasons + var experimentId string + var variationId string // To avoid cyclo-complexity warning findRegularDecision := func() { @@ -210,6 +212,8 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string if featureDecision.Variation != nil { variationKey = featureDecision.Variation.Key flagEnabled = featureDecision.Variation.FeatureEnabled + experimentId = featureDecision.Experiment.ID + variationId = featureDecision.Variation.ID } if !allOptions.DisableDecisionEvent { @@ -230,7 +234,7 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string ruleKey := featureDecision.Experiment.Key if o.notificationCenter != nil { - decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport) + decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport, experimentId, variationId) o.logger.Debug(fmt.Sprintf(`Feature %q is enabled for user %q? %v`, key, usrContext.ID, flagEnabled)) if e := o.notificationCenter.Send(notification.Decision, *decisionNotification); e != nil { o.logger.Warning("Problem with sending notification") diff --git a/pkg/decision/flag_notification.go b/pkg/decision/flag_notification.go index 6d6030a4..9ca850ea 100644 --- a/pkg/decision/flag_notification.go +++ b/pkg/decision/flag_notification.go @@ -23,7 +23,7 @@ import ( ) // FlagNotification constructs default flag notification -func FlagNotification(flagKey, variationKey, ruleKey string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string) *notification.DecisionNotification { +func FlagNotification(flagKey, variationKey, ruleKey string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string, experimentId string, variationId string) *notification.DecisionNotification { if flagKey == "" { return nil @@ -37,6 +37,8 @@ func FlagNotification(flagKey, variationKey, ruleKey string, enabled, decisionEv "ruleKey": ruleKey, "reasons": reasons, "decisionEventDispatched": decisionEventDispatched, + "experimentId": experimentId, + "variationId": variationId, } decisionNotification := ¬ification.DecisionNotification{ From 220ee6cd74c66b4271682c2d7b8462a4d5ad7d56 Mon Sep 17 00:00:00 2001 From: esrakartalOpt Date: Thu, 22 May 2025 13:55:30 -0500 Subject: [PATCH 2/5] Fix the lint and unit test --- pkg/client/client.go | 10 +++++----- pkg/client/optimizely_user_context_test.go | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/client/client.go b/pkg/client/client.go index 56849e95..6efa90df 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -180,8 +180,8 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string decisionContext.Variable = entities.Variable{} var featureDecision decision.FeatureDecision var reasons decide.DecisionReasons - var experimentId string - var variationId string + var experimentID string + var variationID string // To avoid cyclo-complexity warning findRegularDecision := func() { @@ -212,8 +212,8 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string if featureDecision.Variation != nil { variationKey = featureDecision.Variation.Key flagEnabled = featureDecision.Variation.FeatureEnabled - experimentId = featureDecision.Experiment.ID - variationId = featureDecision.Variation.ID + experimentID = featureDecision.Experiment.ID + variationID = featureDecision.Variation.ID } if !allOptions.DisableDecisionEvent { @@ -234,7 +234,7 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string ruleKey := featureDecision.Experiment.Key if o.notificationCenter != nil { - decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport, experimentId, variationId) + decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport, experimentID, variationID) o.logger.Debug(fmt.Sprintf(`Feature %q is enabled for user %q? %v`, key, usrContext.ID, flagEnabled)) if e := o.notificationCenter.Send(notification.Decision, *decisionNotification); e != nil { o.logger.Warning("Problem with sending notification") diff --git a/pkg/client/optimizely_user_context_test.go b/pkg/client/optimizely_user_context_test.go index f74b83cc..2d529563 100644 --- a/pkg/client/optimizely_user_context_test.go +++ b/pkg/client/optimizely_user_context_test.go @@ -821,6 +821,8 @@ func (s *OptimizelyUserContextTestSuite) TestDecisionNotification() { enabled := true variablesExpected, err := s.OptimizelyClient.GetAllFeatureVariables(flagKey, entities.UserContext{ID: s.userID}) s.Nil(err) + experimentId := "10420810910" + variationId := "10418551353" ruleKey := "exp_no_audience" reasons := []string{} @@ -839,6 +841,8 @@ func (s *OptimizelyUserContextTestSuite) TestDecisionNotification() { "ruleKey": ruleKey, "reasons": reasons, "decisionEventDispatched": true, + "experimentId": experimentId, + "variationId": variationId, } s.OptimizelyClient.DecisionService.OnDecision(callback) _ = user.Decide(flagKey, nil) From c1800868f0ceec46e5eb2b181843e10a4da52b97 Mon Sep 17 00:00:00 2001 From: esrakartalOpt Date: Thu, 22 May 2025 14:04:40 -0500 Subject: [PATCH 3/5] Fix lint issue --- pkg/decision/flag_notification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/decision/flag_notification.go b/pkg/decision/flag_notification.go index 9ca850ea..0d322218 100644 --- a/pkg/decision/flag_notification.go +++ b/pkg/decision/flag_notification.go @@ -23,7 +23,7 @@ import ( ) // FlagNotification constructs default flag notification -func FlagNotification(flagKey, variationKey, ruleKey string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string, experimentId string, variationId string) *notification.DecisionNotification { +func FlagNotification(flagKey, variationKey, ruleKey, experimentId, variationId string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string) *notification.DecisionNotification { if flagKey == "" { return nil From b832799e7d76c83c15e30708f8260980da3eb264 Mon Sep 17 00:00:00 2001 From: esrakartalOpt Date: Thu, 22 May 2025 14:05:31 -0500 Subject: [PATCH 4/5] Fix the error on client go --- pkg/client/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/client/client.go b/pkg/client/client.go index 6efa90df..a4694d60 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -234,7 +234,7 @@ func (o *OptimizelyClient) decide(userContext *OptimizelyUserContext, key string ruleKey := featureDecision.Experiment.Key if o.notificationCenter != nil { - decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport, experimentID, variationID) + decisionNotification := decision.FlagNotification(key, variationKey, ruleKey, experimentID, variationID, flagEnabled, eventSent, usrContext, variableMap, reasonsToReport) o.logger.Debug(fmt.Sprintf(`Feature %q is enabled for user %q? %v`, key, usrContext.ID, flagEnabled)) if e := o.notificationCenter.Send(notification.Decision, *decisionNotification); e != nil { o.logger.Warning("Problem with sending notification") From a30751546bcb3687553ebdb5c4fc4b6944341d4a Mon Sep 17 00:00:00 2001 From: esrakartalOpt Date: Thu, 22 May 2025 14:07:43 -0500 Subject: [PATCH 5/5] Fix lint issue --- pkg/decision/flag_notification.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/decision/flag_notification.go b/pkg/decision/flag_notification.go index 0d322218..5c43f793 100644 --- a/pkg/decision/flag_notification.go +++ b/pkg/decision/flag_notification.go @@ -23,7 +23,7 @@ import ( ) // FlagNotification constructs default flag notification -func FlagNotification(flagKey, variationKey, ruleKey, experimentId, variationId string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string) *notification.DecisionNotification { +func FlagNotification(flagKey, variationKey, ruleKey, experimentID, variationID string, enabled, decisionEventDispatched bool, userContext entities.UserContext, variables map[string]interface{}, reasons []string) *notification.DecisionNotification { if flagKey == "" { return nil @@ -37,8 +37,8 @@ func FlagNotification(flagKey, variationKey, ruleKey, experimentId, variationId "ruleKey": ruleKey, "reasons": reasons, "decisionEventDispatched": decisionEventDispatched, - "experimentId": experimentId, - "variationId": variationId, + "experimentId": experimentID, + "variationId": variationID, } decisionNotification := ¬ification.DecisionNotification{