Skip to content

Commit 71108bd

Browse files
added recovery to all other functions,
1 parent aada45e commit 71108bd

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

optimizely/client/client.go

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ type OptimizelyClient struct {
4545
// IsFeatureEnabled returns true if the feature is enabled for the given user
4646
func (o *OptimizelyClient) IsFeatureEnabled(featureKey string, userContext entities.UserContext) (result bool, err error) {
4747

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+
4864
context, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
4965
if err != nil {
5066
logger.Error("received an error while computing feature decision", err)
@@ -149,6 +165,23 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
149165

150166
// GetFeatureVariableBoolean returns boolean feature variable value
151167
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+
152185
val, valueType, err := o.GetFeatureVariable(featureKey, variableKey, userContext)
153186
if err != nil {
154187
return false, err
@@ -162,6 +195,23 @@ func (o *OptimizelyClient) GetFeatureVariableBoolean(featureKey, variableKey str
162195

163196
// GetFeatureVariableDouble returns double feature variable value
164197
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+
165215
val, valueType, err := o.GetFeatureVariable(featureKey, variableKey, userContext)
166216
if err != nil {
167217
return 0, err
@@ -175,6 +225,23 @@ func (o *OptimizelyClient) GetFeatureVariableDouble(featureKey, variableKey stri
175225

176226
// GetFeatureVariableInteger returns integer feature variable value
177227
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+
178245
val, valueType, err := o.GetFeatureVariable(featureKey, variableKey, userContext)
179246
if err != nil {
180247
return 0, err
@@ -188,6 +255,23 @@ func (o *OptimizelyClient) GetFeatureVariableInteger(featureKey, variableKey str
188255

189256
// GetFeatureVariableString returns string feature variable value
190257
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+
191275
value, valueType, err := o.GetFeatureVariable(featureKey, variableKey, userContext)
192276
if err != nil {
193277
return "", err
@@ -201,6 +285,22 @@ func (o *OptimizelyClient) GetFeatureVariableString(featureKey, variableKey stri
201285
// GetFeatureVariable returns feature as a string along with it's associated type
202286
func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, userContext entities.UserContext) (value string, valueType entities.VariableType, err error) {
203287

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+
204304
context, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
205305
if err != nil {
206306
return "", "", err
@@ -222,6 +322,23 @@ func (o *OptimizelyClient) GetFeatureVariable(featureKey, variableKey string, us
222322

223323
// GetAllFeatureVariables returns all the variables for a given feature along with the enabled state
224324
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+
225342
variableMap = make(map[string]string)
226343
decisionContext, featureDecision, err := o.getFeatureDecision(featureKey, userContext)
227344
if err != nil {

0 commit comments

Comments
 (0)