@@ -21,7 +21,6 @@ import (
21
21
"context"
22
22
"errors"
23
23
"fmt"
24
- "reflect"
25
24
"runtime/debug"
26
25
"strconv"
27
26
@@ -56,16 +55,16 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
56
55
}
57
56
}()
58
57
59
- var isValid bool
60
- if isValid , err = o .isValidClient ("IsFeatureEnabled" ); ! isValid {
58
+ projectConfig , err := o .GetProjectConfig ()
59
+ if err != nil {
60
+ logger .Error ("Error retrieving feature" , err )
61
61
return false , err
62
62
}
63
63
64
- projectConfig := o .configManager .GetConfig ()
65
- feature , e := projectConfig .GetFeatureByKey (featureKey )
66
- if e != nil {
67
- logger .Error ("Error retrieving feature" , e )
68
- return result , e
64
+ feature , err := projectConfig .GetFeatureByKey (featureKey )
65
+ if err != nil {
66
+ logger .Error ("Error retrieving feature" , err )
67
+ return result , err
69
68
}
70
69
featureDecisionContext := decision.FeatureDecisionContext {
71
70
Feature : & feature ,
@@ -74,11 +73,11 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
74
73
75
74
userID := userContext .ID
76
75
logger .Debug (fmt .Sprintf (`Evaluating feature "%s" for user "%s".` , featureKey , userID ))
77
- featureDecision , e1 := o .decisionService .GetFeatureDecision (featureDecisionContext , userContext )
76
+ featureDecision , err := o .decisionService .GetFeatureDecision (featureDecisionContext , userContext )
78
77
79
- if e1 != nil {
80
- logger .Error ("received an error while computing feature decision" , e1 )
81
- return result , e1
78
+ if err != nil {
79
+ logger .Error ("received an error while computing feature decision" , err )
80
+ return result , err
82
81
}
83
82
84
83
if featureDecision .Variation == nil {
@@ -112,11 +111,12 @@ func (o *OptimizelyClient) GetEnabledFeatures(userContext entities.UserContext)
112
111
}
113
112
}()
114
113
115
- if isValid , err := o .isValidClient ("GetEnabledFeatures" ); ! isValid {
114
+ projectConfig , err := o .GetProjectConfig ()
115
+ if err != nil {
116
+ logger .Error ("Error retrieving ProjectConfig" , err )
116
117
return enabledFeatures , err
117
118
}
118
119
119
- projectConfig := o .configManager .GetConfig ()
120
120
featureList := projectConfig .GetFeatureList ()
121
121
for _ , feature := range featureList {
122
122
isEnabled , _ := o .IsFeatureEnabled (feature .Key , userContext )
@@ -146,15 +146,21 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
146
146
}
147
147
}()
148
148
149
- configEvent , eventError := o .configManager .GetConfig ().GetEventByKey (eventKey )
149
+ projectConfig , err := o .GetProjectConfig ()
150
+ if err != nil {
151
+ logger .Error ("Optimizely SDK tracking error" , err )
152
+ return err
153
+ }
154
+
155
+ configEvent , err := projectConfig .GetEventByKey (eventKey )
150
156
151
- if eventError == nil {
152
- userEvent := event .CreateConversionUserEvent (o . configManager . GetConfig () , configEvent , userContext , eventTags )
157
+ if err == nil {
158
+ userEvent := event .CreateConversionUserEvent (projectConfig , configEvent , userContext , eventTags )
153
159
o .eventProcessor .ProcessEvent (userEvent )
154
160
} else {
155
161
errorMessage := fmt .Sprintf (`optimizely SDK track: error getting event with key "%s"` , eventKey )
156
- logger .Error (errorMessage , eventError )
157
- return eventError
162
+ logger .Error (errorMessage , err )
163
+ return err
158
164
}
159
165
160
166
return nil
@@ -221,34 +227,33 @@ func (o *OptimizelyClient) getFeatureVariable(featureKey, variableKey string, us
221
227
}
222
228
}()
223
229
224
- var isValid bool
225
- if isValid , err = o .isValidClient ("getFeatureVariable" ); ! isValid {
230
+ projectConfig , err := o .GetProjectConfig ()
231
+ if err != nil {
232
+ logger .Error ("Error calling getFeatureVariable" , err )
226
233
return "" , "" , err
227
234
}
228
235
229
- projectConfig := o .configManager .GetConfig ()
230
-
231
- feature , e := projectConfig .GetFeatureByKey (featureKey )
232
- if e != nil {
233
- logger .Error ("error retrieving feature" , e )
234
- return "" , "" , e
236
+ feature , err := projectConfig .GetFeatureByKey (featureKey )
237
+ if err != nil {
238
+ logger .Error ("Error calling getFeatureVariable" , err )
239
+ return "" , "" , err
235
240
}
236
241
237
- variable , e1 := projectConfig .GetVariableByKey (featureKey , variableKey )
238
- if e1 != nil {
239
- logger .Error ("error retrieving variable " , e1 )
240
- return "" , "" , e1
242
+ variable , err := projectConfig .GetVariableByKey (featureKey , variableKey )
243
+ if err != nil {
244
+ logger .Error ("Error calling getFeatureVariable " , err )
245
+ return "" , "" , err
241
246
}
242
247
243
- var featureValue = variable .DefaultValue
248
+ featureValue : = variable .DefaultValue
244
249
245
250
featureDecisionContext := decision.FeatureDecisionContext {
246
251
Feature : & feature ,
247
252
ProjectConfig : projectConfig ,
248
253
}
249
254
250
- featureDecision , e2 := o .decisionService .GetFeatureDecision (featureDecisionContext , userContext )
251
- if e2 == nil && featureDecision .Variation != nil {
255
+ featureDecision , err := o .decisionService .GetFeatureDecision (featureDecisionContext , userContext )
256
+ if err == nil && featureDecision .Variation != nil {
252
257
if v , ok := featureDecision .Variation .Variables [variable .ID ]; ok && featureDecision .Variation .FeatureEnabled {
253
258
featureValue = v .Value
254
259
}
@@ -258,18 +263,18 @@ func (o *OptimizelyClient) getFeatureVariable(featureKey, variableKey string, us
258
263
return featureValue , variable .Type , nil
259
264
}
260
265
261
- func (o * OptimizelyClient ) isValidClient (methodName string ) (result bool , err error ) {
266
+ // GetProjectConfig returns the current ProjectConfig or nil if the instance is not valid
267
+ func (o * OptimizelyClient ) GetProjectConfig () (projectConfig optimizely.ProjectConfig , err error ) {
262
268
if ! o .isValid {
263
- errorMessage := fmt .Sprintf ("optimizely instance is not valid. Failing %s." , methodName )
264
- err := errors .New (errorMessage )
265
- logger .Error (errorMessage , nil )
266
- return false , err
269
+ return nil , fmt .Errorf ("optimizely instance is not valid" )
267
270
}
268
271
269
- if reflect .ValueOf (o .configManager .GetConfig ()).IsNil () {
270
- return false , fmt .Errorf ("project config is null" )
272
+ projectConfig , err = o .configManager .GetConfig ()
273
+ if err != nil {
274
+ return nil , err
271
275
}
272
- return true , nil
276
+
277
+ return projectConfig , nil
273
278
}
274
279
275
280
// Close closes the Optimizely instance and stops any ongoing tasks from its children components
0 commit comments