@@ -45,6 +45,22 @@ type OptimizelyClient struct {
45
45
// IsFeatureEnabled returns true if the feature is enabled for the given user
46
46
func (o * OptimizelyClient ) IsFeatureEnabled (featureKey string , userContext entities.UserContext ) (result bool , err error ) {
47
47
48
+ defer func () {
49
+ if r := recover (); r != nil {
50
+ switch t := r .(type ) {
51
+ case error :
52
+ err = t
53
+ case string :
54
+ err = errors .New (t )
55
+ default :
56
+ err = errors .New ("unexpected error" )
57
+ }
58
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
59
+ logger .Error (errorMessage , err )
60
+ logger .Debug (string (debug .Stack ()))
61
+ }
62
+ }()
63
+
48
64
context , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
49
65
if err != nil {
50
66
logger .Error ("received an error while computing feature decision" , err )
@@ -76,9 +92,17 @@ func (o *OptimizelyClient) GetEnabledFeatures(userContext entities.UserContext)
76
92
77
93
defer func () {
78
94
if r := recover (); r != nil {
79
- errorMessage := fmt .Sprintf (`optimizely SDK is panicking with the error "%s"` , string (debug .Stack ()))
80
- err = errors .New (errorMessage )
95
+ switch t := r .(type ) {
96
+ case error :
97
+ err = t
98
+ case string :
99
+ err = errors .New (t )
100
+ default :
101
+ err = errors .New ("unexpected error" )
102
+ }
103
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
81
104
logger .Error (errorMessage , err )
105
+ logger .Debug (string (debug .Stack ()))
82
106
}
83
107
}()
84
108
@@ -105,9 +129,17 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
105
129
106
130
defer func () {
107
131
if r := recover (); r != nil {
108
- errorMessage := fmt .Sprintf (`optimizely SDK is panicking with the error "%s"` , string (debug .Stack ()))
109
- err = errors .New (errorMessage )
132
+ switch t := r .(type ) {
133
+ case error :
134
+ err = t
135
+ case string :
136
+ err = errors .New (t )
137
+ default :
138
+ err = errors .New ("unexpected error" )
139
+ }
140
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
110
141
logger .Error (errorMessage , err )
142
+ logger .Debug (string (debug .Stack ()))
111
143
}
112
144
}()
113
145
@@ -133,6 +165,23 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
133
165
134
166
// GetFeatureVariableBoolean returns boolean feature variable value
135
167
func (o * OptimizelyClient ) GetFeatureVariableBoolean (featureKey , variableKey string , userContext entities.UserContext ) (value bool , err error ) {
168
+
169
+ defer func () {
170
+ if r := recover (); r != nil {
171
+ switch t := r .(type ) {
172
+ case error :
173
+ err = t
174
+ case string :
175
+ err = errors .New (t )
176
+ default :
177
+ err = errors .New ("unexpected error" )
178
+ }
179
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
180
+ logger .Error (errorMessage , err )
181
+ logger .Debug (string (debug .Stack ()))
182
+ }
183
+ }()
184
+
136
185
val , valueType , err := o .GetFeatureVariable (featureKey , variableKey , userContext )
137
186
if err != nil {
138
187
return false , err
@@ -146,6 +195,23 @@ func (o *OptimizelyClient) GetFeatureVariableBoolean(featureKey, variableKey str
146
195
147
196
// GetFeatureVariableDouble returns double feature variable value
148
197
func (o * OptimizelyClient ) GetFeatureVariableDouble (featureKey , variableKey string , userContext entities.UserContext ) (value float64 , err error ) {
198
+
199
+ defer func () {
200
+ if r := recover (); r != nil {
201
+ switch t := r .(type ) {
202
+ case error :
203
+ err = t
204
+ case string :
205
+ err = errors .New (t )
206
+ default :
207
+ err = errors .New ("unexpected error" )
208
+ }
209
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
210
+ logger .Error (errorMessage , err )
211
+ logger .Debug (string (debug .Stack ()))
212
+ }
213
+ }()
214
+
149
215
val , valueType , err := o .GetFeatureVariable (featureKey , variableKey , userContext )
150
216
if err != nil {
151
217
return 0 , err
@@ -159,6 +225,23 @@ func (o *OptimizelyClient) GetFeatureVariableDouble(featureKey, variableKey stri
159
225
160
226
// GetFeatureVariableInteger returns integer feature variable value
161
227
func (o * OptimizelyClient ) GetFeatureVariableInteger (featureKey , variableKey string , userContext entities.UserContext ) (value int , err error ) {
228
+
229
+ defer func () {
230
+ if r := recover (); r != nil {
231
+ switch t := r .(type ) {
232
+ case error :
233
+ err = t
234
+ case string :
235
+ err = errors .New (t )
236
+ default :
237
+ err = errors .New ("unexpected error" )
238
+ }
239
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
240
+ logger .Error (errorMessage , err )
241
+ logger .Debug (string (debug .Stack ()))
242
+ }
243
+ }()
244
+
162
245
val , valueType , err := o .GetFeatureVariable (featureKey , variableKey , userContext )
163
246
if err != nil {
164
247
return 0 , err
@@ -172,6 +255,23 @@ func (o *OptimizelyClient) GetFeatureVariableInteger(featureKey, variableKey str
172
255
173
256
// GetFeatureVariableString returns string feature variable value
174
257
func (o * OptimizelyClient ) GetFeatureVariableString (featureKey , variableKey string , userContext entities.UserContext ) (value string , err error ) {
258
+
259
+ defer func () {
260
+ if r := recover (); r != nil {
261
+ switch t := r .(type ) {
262
+ case error :
263
+ err = t
264
+ case string :
265
+ err = errors .New (t )
266
+ default :
267
+ err = errors .New ("unexpected error" )
268
+ }
269
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
270
+ logger .Error (errorMessage , err )
271
+ logger .Debug (string (debug .Stack ()))
272
+ }
273
+ }()
274
+
175
275
value , valueType , err := o .GetFeatureVariable (featureKey , variableKey , userContext )
176
276
if err != nil {
177
277
return "" , err
@@ -185,6 +285,22 @@ func (o *OptimizelyClient) GetFeatureVariableString(featureKey, variableKey stri
185
285
// GetFeatureVariable returns feature as a string along with it's associated type
186
286
func (o * OptimizelyClient ) GetFeatureVariable (featureKey , variableKey string , userContext entities.UserContext ) (value string , valueType entities.VariableType , err error ) {
187
287
288
+ defer func () {
289
+ if r := recover (); r != nil {
290
+ switch t := r .(type ) {
291
+ case error :
292
+ err = t
293
+ case string :
294
+ err = errors .New (t )
295
+ default :
296
+ err = errors .New ("unexpected error" )
297
+ }
298
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
299
+ logger .Error (errorMessage , err )
300
+ logger .Debug (string (debug .Stack ()))
301
+ }
302
+ }()
303
+
188
304
context , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
189
305
if err != nil {
190
306
return "" , "" , err
@@ -206,6 +322,23 @@ func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, us
206
322
207
323
// GetAllFeatureVariables returns all the variables for a given feature along with the enabled state
208
324
func (o * OptimizelyClient ) GetAllFeatureVariables (featureKey string , userContext entities.UserContext ) (enabled bool , variableMap map [string ]string , err error ) {
325
+
326
+ defer func () {
327
+ if r := recover (); r != nil {
328
+ switch t := r .(type ) {
329
+ case error :
330
+ err = t
331
+ case string :
332
+ err = errors .New (t )
333
+ default :
334
+ err = errors .New ("unexpected error" )
335
+ }
336
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
337
+ logger .Error (errorMessage , err )
338
+ logger .Debug (string (debug .Stack ()))
339
+ }
340
+ }()
341
+
209
342
variableMap = make (map [string ]string )
210
343
decisionContext , featureDecision , err := o .getFeatureDecision (featureKey , userContext )
211
344
if err != nil {
@@ -234,13 +367,23 @@ func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext
234
367
func (o * OptimizelyClient ) getFeatureDecision (featureKey string , userContext entities.UserContext ) (decisionContext decision.FeatureDecisionContext , featureDecision decision.FeatureDecision , err error ) {
235
368
236
369
defer func () {
370
+ var e error
237
371
if r := recover (); r != nil {
238
- errorMessage := fmt .Sprintf (`optimizely SDK is panicking with the error "%s"` , string (debug .Stack ()))
239
- logger .Error (errorMessage , err )
372
+ switch t := r .(type ) {
373
+ case error :
374
+ e = t
375
+ case string :
376
+ e = errors .New (t )
377
+ default :
378
+ e = errors .New ("unexpected error" )
379
+ }
380
+ errorMessage := fmt .Sprintf ("optimizely SDK is panicking with the error:" )
381
+ logger .Error (errorMessage , e )
382
+ logger .Debug (string (debug .Stack ()))
240
383
241
384
// If we have a feature, then we can recover w/o throwing
242
385
if decisionContext .Feature == nil {
243
- err = errors . New ( errorMessage )
386
+ err = e
244
387
}
245
388
}
246
389
}()
0 commit comments