@@ -33,15 +33,27 @@ import (
3333 "gopkg.in/yaml.v3"
3434)
3535
36+ // Map to hold clientwrapper instances against scenarioID
37+ var clientInstance * ClientWrapper
38+
3639// ClientWrapper - wrapper around the optimizely client that keeps track of various custom components used with the client
3740type ClientWrapper struct {
3841 Client * client.OptimizelyClient
3942 DecisionService decision.Service
4043 EventDispatcher event.Dispatcher
4144}
4245
43- // NewClientWrapper returns a new instance of the optly wrapper
44- func NewClientWrapper (datafileName string ) ClientWrapper {
46+ // DeleteInstance deletes cached instance of optly wrapper
47+ func DeleteInstance () {
48+ clientInstance = nil
49+ }
50+
51+ // GetInstance returns a cached or new instance of the optly wrapper
52+ func GetInstance (datafileName string ) * ClientWrapper {
53+
54+ if clientInstance != nil {
55+ return clientInstance
56+ }
4557
4658 datafileDir := os .Getenv ("DATAFILES_DIR" )
4759 datafile , err := ioutil .ReadFile (filepath .Clean (path .Join (datafileDir , datafileName )))
@@ -74,11 +86,12 @@ func NewClientWrapper(datafileName string) ClientWrapper {
7486 log .Fatal (err )
7587 }
7688
77- return ClientWrapper {
89+ clientInstance = & ClientWrapper {
7890 Client : client ,
7991 DecisionService : decisionService ,
8092 EventDispatcher : eventProcessor .EventDispatcher ,
8193 }
94+ return clientInstance
8295}
8396
8497// InvokeAPI processes request with arguments
@@ -116,6 +129,9 @@ func (c *ClientWrapper) InvokeAPI(request models.APIOptions) (models.APIResponse
116129 case models .Activate :
117130 response , err = c .activate (request )
118131 break
132+ case models .Track :
133+ response , err = c .track (request )
134+ break
119135 default :
120136 break
121137 }
@@ -145,7 +161,7 @@ func (c *ClientWrapper) isFeatureEnabled(request models.APIOptions) (models.APIR
145161}
146162
147163func (c * ClientWrapper ) getFeatureVariable (request models.APIOptions ) (models.APIResponse , error ) {
148- var params models.GetFeatureVariableParams
164+ var params models.GetFeatureVariableRequestParams
149165 var response models.APIResponse
150166 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
151167 if err == nil {
@@ -163,7 +179,7 @@ func (c *ClientWrapper) getFeatureVariable(request models.APIOptions) (models.AP
163179}
164180
165181func (c * ClientWrapper ) getFeatureVariableInteger (request models.APIOptions ) (models.APIResponse , error ) {
166- var params models.GetFeatureVariableParams
182+ var params models.GetFeatureVariableRequestParams
167183 var response models.APIResponse
168184 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
169185 if err == nil {
@@ -180,7 +196,7 @@ func (c *ClientWrapper) getFeatureVariableInteger(request models.APIOptions) (mo
180196}
181197
182198func (c * ClientWrapper ) getFeatureVariableDouble (request models.APIOptions ) (models.APIResponse , error ) {
183- var params models.GetFeatureVariableParams
199+ var params models.GetFeatureVariableRequestParams
184200 var response models.APIResponse
185201 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
186202 if err == nil {
@@ -197,7 +213,7 @@ func (c *ClientWrapper) getFeatureVariableDouble(request models.APIOptions) (mod
197213}
198214
199215func (c * ClientWrapper ) getFeatureVariableBoolean (request models.APIOptions ) (models.APIResponse , error ) {
200- var params models.GetFeatureVariableParams
216+ var params models.GetFeatureVariableRequestParams
201217 var response models.APIResponse
202218 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
203219 if err == nil {
@@ -214,7 +230,7 @@ func (c *ClientWrapper) getFeatureVariableBoolean(request models.APIOptions) (mo
214230}
215231
216232func (c * ClientWrapper ) getFeatureVariableString (request models.APIOptions ) (models.APIResponse , error ) {
217- var params models.GetFeatureVariableParams
233+ var params models.GetFeatureVariableRequestParams
218234 var response models.APIResponse
219235 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
220236 if err == nil {
@@ -231,7 +247,7 @@ func (c *ClientWrapper) getFeatureVariableString(request models.APIOptions) (mod
231247}
232248
233249func (c * ClientWrapper ) getEnabledFeatures (request models.APIOptions ) (models.APIResponse , error ) {
234- var params models.GetEnabledFeaturesParams
250+ var params models.GetEnabledFeaturesRequestParams
235251 var response models.APIResponse
236252 err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
237253 if err == nil {
@@ -281,3 +297,18 @@ func (c *ClientWrapper) activate(request models.APIOptions) (models.APIResponse,
281297 }
282298 return response , err
283299}
300+
301+ func (c * ClientWrapper ) track (request models.APIOptions ) (models.APIResponse , error ) {
302+ var params models.TrackRequestParams
303+ var response models.APIResponse
304+ err := yaml .Unmarshal ([]byte (request .Arguments ), & params )
305+ if err == nil {
306+ user := entities.UserContext {
307+ ID : params .UserID ,
308+ Attributes : params .Attributes ,
309+ }
310+ err = c .Client .Track (params .EventKey , user , params .EventTags )
311+ }
312+ response .Result = "NULL"
313+ return response , err
314+ }
0 commit comments