Skip to content

Commit 6733038

Browse files
feat: bring back old static manager constructor (#271)
* feat: bring back old static manager constructor
1 parent 9081efc commit 6733038

File tree

5 files changed

+62
-12
lines changed

5 files changed

+62
-12
lines changed

pkg/client/factory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ func WithMetricsRegistry(metricsRegistry metrics.Registry) OptionFunc {
220220
// StaticClient returns a client initialized with a static project config.
221221
func (f *OptimizelyFactory) StaticClient() (optlyClient *OptimizelyClient, err error) {
222222

223-
staticManager := config.NewStaticProjectConfigManager(f.SDKKey, config.WithInitialDatafile(f.Datafile), config.WithDatafileAccessToken(f.DatafileAccessToken))
223+
staticManager := config.NewStaticProjectConfigManagerWithOptions(f.SDKKey, config.WithInitialDatafile(f.Datafile), config.WithDatafileAccessToken(f.DatafileAccessToken))
224224

225225
if staticManager == nil {
226226
return nil, errors.New("unable to initiate config manager")

pkg/client/factory_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func TestClientWithPollingConfigManagerDatafileAccessToken(t *testing.T) {
9595
func TestClientWithProjectConfigManagerInOptions(t *testing.T) {
9696
factory := OptimizelyFactory{}
9797
mockDatafile := []byte(`{"version":"4"}`)
98-
configManager := config.NewStaticProjectConfigManager("", config.WithInitialDatafile(mockDatafile))
98+
configManager := config.NewStaticProjectConfigManagerWithOptions("", config.WithInitialDatafile(mockDatafile))
9999

100100
optimizelyClient, err := factory.Client(WithConfigManager(configManager))
101101
assert.NoError(t, err)
@@ -107,7 +107,7 @@ func TestClientWithProjectConfigManagerInOptions(t *testing.T) {
107107
func TestClientWithDecisionServiceAndEventProcessorInOptions(t *testing.T) {
108108
factory := OptimizelyFactory{}
109109
mockDatafile := []byte(`{"version":"4"}`)
110-
configManager := config.NewStaticProjectConfigManager("", config.WithInitialDatafile(mockDatafile))
110+
configManager := config.NewStaticProjectConfigManagerWithOptions("", config.WithInitialDatafile(mockDatafile))
111111
decisionService := new(MockDecisionService)
112112
processor := event.NewBatchEventProcessor(event.WithQueueSize(100), event.WithFlushInterval(100),
113113
event.WithQueue(event.NewInMemoryQueue(100)), event.WithEventDispatcher(&MockDispatcher{Events: []event.LogEvent{}}))

pkg/config/optimizely_config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (s *OptimizelyConfigTestSuite) SetupTest() {
5050
s.Fail("error opening file " + dataFileName)
5151
}
5252

53-
projectMgr := NewStaticProjectConfigManager("", WithInitialDatafile(dataFile))
53+
projectMgr := NewStaticProjectConfigManagerWithOptions("", WithInitialDatafile(dataFile))
5454

5555
s.projectConfig = projectMgr.projectConfig
5656

pkg/config/static_manager.go

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,25 @@ package config
1919

2020
import (
2121
"errors"
22+
"fmt"
2223
"sync"
2324

25+
"github.com/optimizely/go-sdk/pkg/config/datafileprojectconfig"
2426
"github.com/optimizely/go-sdk/pkg/logging"
2527
"github.com/optimizely/go-sdk/pkg/notification"
28+
"github.com/optimizely/go-sdk/pkg/utils"
2629
)
2730

2831
// StaticProjectConfigManager maintains a static copy of the project config
2932
type StaticProjectConfigManager struct {
3033
projectConfig ProjectConfig
3134
optimizelyConfig *OptimizelyConfig
3235
configLock sync.Mutex
36+
logger logging.OptimizelyLogProducer
3337
}
3438

35-
// NewStaticProjectConfigManager creates a new instance of the manager with the given sdk key and some options
36-
func NewStaticProjectConfigManager(sdkKey string, configMangerOptions ...OptionFunc) *StaticProjectConfigManager {
39+
// NewStaticProjectConfigManagerWithOptions creates a new instance of the manager with the given sdk key and some options
40+
func NewStaticProjectConfigManagerWithOptions(sdkKey string, configMangerOptions ...OptionFunc) *StaticProjectConfigManager {
3741

3842
logger := logging.GetLogger(sdkKey, "StaticProjectConfigManager")
3943
staticProjectConfigManager := newConfigManager(sdkKey, logger, configMangerOptions...)
@@ -50,9 +54,50 @@ func NewStaticProjectConfigManager(sdkKey string, configMangerOptions ...OptionF
5054

5155
return &StaticProjectConfigManager{
5256
projectConfig: projectConfig,
57+
logger: logger,
5358
}
5459
}
5560

61+
// NewStaticProjectConfigManager creates a new instance of the manager with the given project config
62+
func NewStaticProjectConfigManager(config ProjectConfig, logger logging.OptimizelyLogProducer) *StaticProjectConfigManager {
63+
return &StaticProjectConfigManager{
64+
projectConfig: config,
65+
logger: logger,
66+
}
67+
}
68+
69+
/********************* Old Constructors not used in go-sdk, kept for backward compatibility **********/
70+
71+
// NewStaticProjectConfigManagerFromURL returns new instance of StaticProjectConfigManager for URL
72+
func NewStaticProjectConfigManagerFromURL(sdkKey string) (*StaticProjectConfigManager, error) {
73+
74+
requester := utils.NewHTTPRequester(logging.GetLogger(sdkKey, "HTTPRequester"))
75+
76+
logger := logging.GetLogger(sdkKey, "StaticProjectConfigManager")
77+
78+
url := fmt.Sprintf(DatafileURLTemplate, sdkKey)
79+
datafile, _, code, e := requester.Get(url)
80+
if e != nil {
81+
logger.Error(fmt.Sprintf("request returned with http code=%d", code), e)
82+
return nil, e
83+
}
84+
85+
return NewStaticProjectConfigManagerFromPayload(datafile, logger)
86+
}
87+
88+
// NewStaticProjectConfigManagerFromPayload returns new instance of StaticProjectConfigManager for payload
89+
func NewStaticProjectConfigManagerFromPayload(payload []byte, logger logging.OptimizelyLogProducer) (*StaticProjectConfigManager, error) {
90+
projectConfig, err := datafileprojectconfig.NewDatafileProjectConfig(payload, logger)
91+
92+
if err != nil {
93+
return nil, err
94+
}
95+
96+
return NewStaticProjectConfigManager(projectConfig, logger), nil
97+
}
98+
99+
/********************* End of Old Constructors **********/
100+
56101
// GetConfig returns the project config
57102
func (cm *StaticProjectConfigManager) GetConfig() (ProjectConfig, error) {
58103
cm.configLock.Lock()

pkg/config/static_manager_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,24 @@ import (
2020
"errors"
2121
"testing"
2222

23+
"github.com/optimizely/go-sdk/pkg/config/datafileprojectconfig"
24+
"github.com/optimizely/go-sdk/pkg/logging"
2325
"github.com/optimizely/go-sdk/pkg/notification"
26+
2427
"github.com/stretchr/testify/assert"
2528
)
2629

2730
func TestNewStaticProjectConfigManagerFromPayload(t *testing.T) {
2831

2932
mockDatafile := []byte(`{"accountId":"42","projectId":"123""}`)
30-
configManager := NewStaticProjectConfigManager("", WithInitialDatafile(mockDatafile))
33+
configManager := NewStaticProjectConfigManagerWithOptions("", WithInitialDatafile(mockDatafile))
3134
assert.Nil(t, configManager)
3235
mockDatafile = []byte(`{"accountId":"42","projectId":"123",}`)
33-
configManager = NewStaticProjectConfigManager("", WithInitialDatafile(mockDatafile))
36+
configManager = NewStaticProjectConfigManagerWithOptions("", WithInitialDatafile(mockDatafile))
3437
assert.Nil(t, configManager)
3538

3639
mockDatafile = []byte(`{"accountId":"42","projectId":"123","version":"4"}`)
37-
configManager = NewStaticProjectConfigManager("", WithInitialDatafile(mockDatafile))
40+
configManager = NewStaticProjectConfigManagerWithOptions("", WithInitialDatafile(mockDatafile))
3841
assert.NotNil(t, configManager)
3942

4043
assert.Nil(t, configManager.optimizelyConfig)
@@ -46,7 +49,9 @@ func TestNewStaticProjectConfigManagerFromPayload(t *testing.T) {
4649
func TestStaticGetOptimizelyConfig(t *testing.T) {
4750

4851
mockDatafile := []byte(`{"accountId":"42","projectId":"123","version":"4"}`)
49-
configManager := NewStaticProjectConfigManager("", WithInitialDatafile(mockDatafile))
52+
logger := logging.GetLogger("", "DatafileProjectConfig")
53+
projectConfig, _ := datafileprojectconfig.NewDatafileProjectConfig([]byte(mockDatafile), logger)
54+
configManager := NewStaticProjectConfigManager(projectConfig, logger)
5055

5156
assert.Nil(t, configManager.optimizelyConfig)
5257

@@ -57,13 +62,13 @@ func TestStaticGetOptimizelyConfig(t *testing.T) {
5762
}
5863
func TestNewStaticProjectConfigManagerFromURL(t *testing.T) {
5964

60-
configManager := NewStaticProjectConfigManager("no_key_exists")
65+
configManager := NewStaticProjectConfigManagerWithOptions("no_key_exists")
6166
assert.Nil(t, configManager)
6267
}
6368

6469
func TestNewStaticProjectConfigManagerOnDecision(t *testing.T) {
6570
mockDatafile := []byte(`{"accountId":"42","projectId":"123","version":"4"}`)
66-
configManager := NewStaticProjectConfigManager("", WithInitialDatafile(mockDatafile))
71+
configManager := NewStaticProjectConfigManagerWithOptions("", WithInitialDatafile(mockDatafile))
6772
assert.NotNil(t, configManager)
6873

6974
callback := func(notification notification.ProjectConfigUpdateNotification) {

0 commit comments

Comments
 (0)