@@ -33,15 +33,14 @@ import (
33
33
"github.com/optimizely/go-sdk/pkg/utils"
34
34
)
35
35
36
- var logger = logging .GetLogger ("Client" )
37
-
38
36
// OptimizelyClient is the entry point to the Optimizely SDK
39
37
type OptimizelyClient struct {
40
38
ConfigManager config.ProjectConfigManager
41
39
DecisionService decision.Service
42
40
EventProcessor event.Processor
43
41
notificationCenter notification.Center
44
42
execGroup * utils.ExecGroup
43
+ logger logging.OptimizelyLogProducer
45
44
}
46
45
47
46
// Activate returns the key of the variation the user is bucketed into and queues up an impression event to be sent to
@@ -59,14 +58,14 @@ func (o *OptimizelyClient) Activate(experimentKey string, userContext entities.U
59
58
err = errors .New ("unexpected error" )
60
59
}
61
60
errorMessage := fmt .Sprintf ("Activate call, optimizely SDK is panicking with the error:" )
62
- logger .Error (errorMessage , err )
63
- logger .Debug (string (debug .Stack ()))
61
+ o . logger .Error (errorMessage , err )
62
+ o . logger .Debug (string (debug .Stack ()))
64
63
}
65
64
}()
66
65
67
66
decisionContext , experimentDecision , err := o .getExperimentDecision (experimentKey , userContext )
68
67
if err != nil {
69
- logger .Error ("received an error while computing experiment decision" , err )
68
+ o . logger .Error ("received an error while computing experiment decision" , err )
70
69
return result , err
71
70
}
72
71
@@ -95,14 +94,14 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
95
94
err = errors .New ("unexpected error" )
96
95
}
97
96
errorMessage := fmt .Sprintf ("IsFeatureEnabled call, optimizely SDK is panicking with the error:" )
98
- logger .Error (errorMessage , err )
99
- logger .Debug (string (debug .Stack ()))
97
+ o . logger .Error (errorMessage , err )
98
+ o . logger .Debug (string (debug .Stack ()))
100
99
}
101
100
}()
102
101
103
102
decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , "" , userContext )
104
103
if err != nil {
105
- logger .Error ("received an error while computing feature decision" , err )
104
+ o . logger .Error ("received an error while computing feature decision" , err )
106
105
return result , err
107
106
}
108
107
@@ -113,9 +112,9 @@ func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entit
113
112
}
114
113
115
114
if result {
116
- logger .Info (fmt .Sprintf (`Feature "%s" is enabled for user "%s".` , featureKey , userContext .ID ))
115
+ o . logger .Info (fmt .Sprintf (`Feature "%s" is enabled for user "%s".` , featureKey , userContext .ID ))
117
116
} else {
118
- logger .Info (fmt .Sprintf (`Feature "%s" is not enabled for user "%s".` , featureKey , userContext .ID ))
117
+ o . logger .Info (fmt .Sprintf (`Feature "%s" is not enabled for user "%s".` , featureKey , userContext .ID ))
119
118
}
120
119
121
120
if featureDecision .Source == decision .FeatureTest && featureDecision .Variation != nil {
@@ -141,14 +140,14 @@ func (o *OptimizelyClient) GetEnabledFeatures(userContext entities.UserContext)
141
140
err = errors .New ("unexpected error" )
142
141
}
143
142
errorMessage := fmt .Sprintf ("GetEnabledFeatures call, optimizely SDK is panicking with the error:" )
144
- logger .Error (errorMessage , err )
145
- logger .Debug (string (debug .Stack ()))
143
+ o . logger .Error (errorMessage , err )
144
+ o . logger .Debug (string (debug .Stack ()))
146
145
}
147
146
}()
148
147
149
148
projectConfig , err := o .getProjectConfig ()
150
149
if err != nil {
151
- logger .Error ("Error retrieving ProjectConfig" , err )
150
+ o . logger .Error ("Error retrieving ProjectConfig" , err )
152
151
return enabledFeatures , err
153
152
}
154
153
@@ -241,7 +240,7 @@ func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext
241
240
variableMap = make (map [string ]interface {})
242
241
decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , "" , userContext )
243
242
if err != nil {
244
- logger .Error ("Optimizely SDK tracking error" , err )
243
+ o . logger .Error ("Optimizely SDK tracking error" , err )
245
244
return enabled , variableMap , err
246
245
}
247
246
@@ -251,7 +250,7 @@ func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext
251
250
252
251
feature := decisionContext .Feature
253
252
if feature == nil {
254
- logger .Warning (fmt .Sprintf (`feature "%s" does not exist` , featureKey ))
253
+ o . logger .Warning (fmt .Sprintf (`feature "%s" does not exist` , featureKey ))
255
254
return enabled , variableMap , nil
256
255
}
257
256
@@ -275,7 +274,7 @@ func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext
275
274
out , err = strconv .Atoi (val )
276
275
case entities .String :
277
276
default :
278
- logger .Warning (fmt .Sprintf (`type "%s" is unknown, returning string` , varType ))
277
+ o . logger .Warning (fmt .Sprintf (`type "%s" is unknown, returning string` , varType ))
279
278
}
280
279
281
280
variableMap [v .Key ] = out
@@ -298,14 +297,14 @@ func (o *OptimizelyClient) GetVariation(experimentKey string, userContext entiti
298
297
err = errors .New ("unexpected error" )
299
298
}
300
299
errorMessage := fmt .Sprintf ("GetVariation call, optimizely SDK is panicking with the error:" )
301
- logger .Error (errorMessage , err )
302
- logger .Debug (string (debug .Stack ()))
300
+ o . logger .Error (errorMessage , err )
301
+ o . logger .Debug (string (debug .Stack ()))
303
302
}
304
303
}()
305
304
306
305
_ , experimentDecision , err := o .getExperimentDecision (experimentKey , userContext )
307
306
if err != nil {
308
- logger .Error ("received an error while computing experiment decision" , err )
307
+ o . logger .Error ("received an error while computing experiment decision" , err )
309
308
}
310
309
311
310
if experimentDecision .Variation != nil {
@@ -330,30 +329,30 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
330
329
err = errors .New ("unexpected error" )
331
330
}
332
331
errorMessage := fmt .Sprintf ("Track call, optimizely SDK is panicking with the error:" )
333
- logger .Error (errorMessage , err )
334
- logger .Debug (string (debug .Stack ()))
332
+ o . logger .Error (errorMessage , err )
333
+ o . logger .Debug (string (debug .Stack ()))
335
334
}
336
335
}()
337
336
338
337
projectConfig , e := o .getProjectConfig ()
339
338
if e != nil {
340
- logger .Error ("Optimizely SDK tracking error" , e )
339
+ o . logger .Error ("Optimizely SDK tracking error" , e )
341
340
return e
342
341
}
343
342
344
343
configEvent , e := projectConfig .GetEventByKey (eventKey )
345
344
346
345
if e != nil {
347
346
errorMessage := fmt .Sprintf (`Unable to get event for key "%s": %s` , eventKey , e )
348
- logger .Warning (errorMessage )
347
+ o . logger .Warning (errorMessage )
349
348
return nil
350
349
}
351
350
352
351
userEvent := event .CreateConversionUserEvent (projectConfig , configEvent , userContext , eventTags )
353
352
if o .EventProcessor .ProcessEvent (userEvent ) && o .notificationCenter != nil {
354
353
trackNotification := notification.TrackNotification {EventKey : eventKey , UserContext : userContext , EventTags : eventTags , ConversionEvent : * userEvent .Conversion }
355
354
if err = o .notificationCenter .Send (notification .Track , trackNotification ); err != nil {
356
- logger .Warning ("Problem with sending notification" )
355
+ o . logger .Warning ("Problem with sending notification" )
357
356
}
358
357
}
359
358
@@ -373,31 +372,31 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey, variableKey string, us
373
372
err = errors .New ("unexpected error" )
374
373
}
375
374
errorMessage := fmt .Sprintf ("getFeatureDecision call, optimizely SDK is panicking with the error:" )
376
- logger .Error (errorMessage , err )
377
- logger .Debug (string (debug .Stack ()))
375
+ o . logger .Error (errorMessage , err )
376
+ o . logger .Debug (string (debug .Stack ()))
378
377
}
379
378
}()
380
379
381
380
userID := userContext .ID
382
- logger .Debug (fmt .Sprintf (`Evaluating feature "%s" for user "%s".` , featureKey , userID ))
381
+ o . logger .Debug (fmt .Sprintf (`Evaluating feature "%s" for user "%s".` , featureKey , userID ))
383
382
384
383
projectConfig , e := o .getProjectConfig ()
385
384
if e != nil {
386
- logger .Error ("Error calling getFeatureDecision" , e )
385
+ o . logger .Error ("Error calling getFeatureDecision" , e )
387
386
return decisionContext , featureDecision , e
388
387
}
389
388
390
389
feature , e := projectConfig .GetFeatureByKey (featureKey )
391
390
if e != nil {
392
- logger .Warning (fmt .Sprintf (`Could not get feature for key "%s": %s` , featureKey , e ))
391
+ o . logger .Warning (fmt .Sprintf (`Could not get feature for key "%s": %s` , featureKey , e ))
393
392
return decisionContext , featureDecision , nil
394
393
}
395
394
396
395
variable := entities.Variable {}
397
396
if variableKey != "" {
398
397
variable , err = projectConfig .GetVariableByKey (feature .Key , variableKey )
399
398
if err != nil {
400
- logger .Warning (fmt .Sprintf (`Could not get variable for key "%s": %s` , variableKey , err ))
399
+ o . logger .Warning (fmt .Sprintf (`Could not get variable for key "%s": %s` , variableKey , err ))
401
400
return decisionContext , featureDecision , nil
402
401
}
403
402
}
@@ -410,7 +409,7 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey, variableKey string, us
410
409
411
410
featureDecision , err = o .DecisionService .GetFeatureDecision (decisionContext , userContext )
412
411
if err != nil {
413
- logger .Warning (fmt .Sprintf (`Received error while making a decision for feature "%s": %s` , featureKey , err ))
412
+ o . logger .Warning (fmt .Sprintf (`Received error while making a decision for feature "%s": %s` , featureKey , err ))
414
413
return decisionContext , featureDecision , nil
415
414
}
416
415
@@ -420,7 +419,7 @@ func (o *OptimizelyClient) getFeatureDecision(featureKey, variableKey string, us
420
419
func (o * OptimizelyClient ) getExperimentDecision (experimentKey string , userContext entities.UserContext ) (decisionContext decision.ExperimentDecisionContext , experimentDecision decision.ExperimentDecision , err error ) {
421
420
422
421
userID := userContext .ID
423
- logger .Debug (fmt .Sprintf (`Evaluating experiment "%s" for user "%s".` , experimentKey , userID ))
422
+ o . logger .Debug (fmt .Sprintf (`Evaluating experiment "%s" for user "%s".` , experimentKey , userID ))
424
423
425
424
projectConfig , e := o .getProjectConfig ()
426
425
if e != nil {
@@ -429,7 +428,7 @@ func (o *OptimizelyClient) getExperimentDecision(experimentKey string, userConte
429
428
430
429
experiment , e := projectConfig .GetExperimentByKey (experimentKey )
431
430
if e != nil {
432
- logger .Warning (fmt .Sprintf (`Could not get experiment for key "%s": %s` , experimentKey , e ))
431
+ o . logger .Warning (fmt .Sprintf (`Could not get experiment for key "%s": %s` , experimentKey , e ))
433
432
return decisionContext , experimentDecision , nil
434
433
}
435
434
@@ -440,15 +439,15 @@ func (o *OptimizelyClient) getExperimentDecision(experimentKey string, userConte
440
439
441
440
experimentDecision , err = o .DecisionService .GetExperimentDecision (decisionContext , userContext )
442
441
if err != nil {
443
- logger .Warning (fmt .Sprintf (`Received error while making a decision for experiment "%s": %s` , experimentKey , err ))
442
+ o . logger .Warning (fmt .Sprintf (`Received error while making a decision for experiment "%s": %s` , experimentKey , err ))
444
443
return decisionContext , experimentDecision , nil
445
444
}
446
445
447
446
if experimentDecision .Variation != nil {
448
447
result := experimentDecision .Variation .Key
449
- logger .Info (fmt .Sprintf (`User "%s" is bucketed into variation "%s" of experiment "%s".` , userContext .ID , result , experimentKey ))
448
+ o . logger .Info (fmt .Sprintf (`User "%s" is bucketed into variation "%s" of experiment "%s".` , userContext .ID , result , experimentKey ))
450
449
} else {
451
- logger .Info (fmt .Sprintf (`User "%s" is not bucketed into any variation for experiment "%s": %s.` , userContext .ID , experimentKey , experimentDecision .Reason ))
450
+ o . logger .Info (fmt .Sprintf (`User "%s" is not bucketed into any variation for experiment "%s": %s.` , userContext .ID , experimentKey , experimentDecision .Reason ))
452
451
}
453
452
454
453
return decisionContext , experimentDecision , err
@@ -469,12 +468,12 @@ func (o *OptimizelyClient) OnTrack(callback func(eventKey string, userContext en
469
468
}
470
469
}
471
470
if ! success {
472
- logger .Warning (fmt .Sprintf ("Unable to convert notification payload %v into TrackNotification" , payload ))
471
+ o . logger .Warning (fmt .Sprintf ("Unable to convert notification payload %v into TrackNotification" , payload ))
473
472
}
474
473
}
475
474
id , err := o .notificationCenter .AddHandler (notification .Track , handler )
476
475
if err != nil {
477
- logger .Warning ("Problem with adding notification handler" )
476
+ o . logger .Warning ("Problem with adding notification handler" )
478
477
return 0 , err
479
478
}
480
479
return id , nil
@@ -486,7 +485,7 @@ func (o *OptimizelyClient) RemoveOnTrack(id int) error {
486
485
return fmt .Errorf ("no notification center found" )
487
486
}
488
487
if err := o .notificationCenter .RemoveHandler (id , notification .Track ); err != nil {
489
- logger .Warning ("Problem with removing notification handler" )
488
+ o . logger .Warning ("Problem with removing notification handler" )
490
489
return err
491
490
}
492
491
return nil
0 commit comments