diff --git a/client/client.go b/client/client.go index 9b67eca7..89e32917 100644 --- a/client/client.go +++ b/client/client.go @@ -101,6 +101,7 @@ func NewCfClient(sdkKey string, options ...ConfigOption) (*CfClient, error) { } func (c *CfClient) start() { + ctx, cancel := context.WithCancel(context.Background()) go func() { <-c.stop @@ -389,7 +390,15 @@ func (c *CfClient) retrieveSegments(ctx context.Context) error { } func (c *CfClient) setAnalyticsServiceClient(ctx context.Context) { + <-c.authenticated + c.mux.RLock() + defer c.mux.RUnlock() + if !c.config.enableAnalytics { + c.config.Logger.Info("Posting analytics data disabled") + return + } + c.config.Logger.Info("Posting analytics data enabled") c.analyticsService.Start(ctx, &c.metricsapi, c.environmentID) } diff --git a/client/config.go b/client/config.go index 73e4af3d..9735d7f2 100644 --- a/client/config.go +++ b/client/config.go @@ -25,6 +25,7 @@ type config struct { enableStore bool target evaluation.Target eventStreamListener stream.EventStreamListener + enableAnalytics bool } func newDefaultConfig() *config { @@ -39,14 +40,15 @@ func newDefaultConfig() *config { retryClient.RetryMax = 10 return &config{ - url: "https://config.ff.harness.io/api/1.0", - eventsURL: "https://events.ff.harness.io/api/1.0", - pullInterval: 60, - Cache: defaultCache, - Store: defaultStore, - Logger: defaultLogger, - httpClient: retryClient.StandardClient(), - enableStream: true, - enableStore: true, + url: "https://config.ff.harness.io/api/1.0", + eventsURL: "https://events.ff.harness.io/api/1.0", + pullInterval: 60, + Cache: defaultCache, + Store: defaultStore, + Logger: defaultLogger, + httpClient: retryClient.StandardClient(), + enableStream: true, + enableStore: true, + enableAnalytics: true, } } diff --git a/client/options.go b/client/options.go index 0e10e495..5012243e 100644 --- a/client/options.go +++ b/client/options.go @@ -14,6 +14,13 @@ import ( // using options pattern type ConfigOption func(config *config) +// WithAnalyticsEnabled en/disable cache and analytics data being sent. +func WithAnalyticsEnabled(val bool) ConfigOption { + return func(config *config) { + config.enableAnalytics = val + } +} + // WithURL set baseUrl for communicating with ff server func WithURL(url string) ConfigOption { return func(config *config) {