Skip to content

Commit 7151c5b

Browse files
committed
Update agent to use CMAB configuration approach
1 parent 79b5da0 commit 7151c5b

File tree

5 files changed

+25
-48
lines changed

5 files changed

+25
-48
lines changed

cmd/optimizely/main.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,6 @@ func loadConfig(v *viper.Viper) *config.AgentConfig {
122122
if retryConfig, ok := cmab["retryConfig"].(map[string]interface{}); ok {
123123
conf.CMAB.RetryConfig = retryConfig
124124
}
125-
if predictionEndpoint, ok := cmab["predictionEndpoint"].(string); ok {
126-
conf.CMAB.PredictionEndpoint = predictionEndpoint
127-
}
128125
}
129126

130127
// Check for individual map sections
@@ -136,10 +133,6 @@ func loadConfig(v *viper.Viper) *config.AgentConfig {
136133
conf.CMAB.RetryConfig = cmabRetryConfig
137134
}
138135

139-
// Check for individual predictionEndpoint field
140-
if predictionEndpoint := v.GetString("cmab.predictionEndpoint"); predictionEndpoint != "" {
141-
conf.CMAB.PredictionEndpoint = predictionEndpoint
142-
}
143136

144137
return conf
145138
}

config/config.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ func NewDefaultConfig() *AgentConfig {
141141
},
142142
},
143143
CMAB: CMABConfig{
144-
RequestTimeout: 10 * time.Second,
145-
PredictionEndpoint: "https://prediction.cmab.optimizely.com/predict/%s",
144+
RequestTimeout: 10 * time.Second,
146145
Cache: map[string]interface{}{
147146
"type": "memory",
148147
"size": 1000,
@@ -409,9 +408,6 @@ type CMABConfig struct {
409408
// RequestTimeout is the timeout for CMAB API requests
410409
RequestTimeout time.Duration `json:"requestTimeout"`
411410

412-
// PredictionEndpoint is the URL template for CMAB prediction API
413-
PredictionEndpoint string `json:"predictionEndpoint"`
414-
415411
// Cache configuration
416412
Cache map[string]interface{} `json:"cache"`
417413

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/golang-jwt/jwt/v4 v4.5.2
1313
github.com/google/uuid v1.3.1
1414
github.com/lestrrat-go/jwx/v2 v2.0.20
15-
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250725211427-2baee7ec755d
15+
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250728200455-37780395c725
1616
github.com/orcaman/concurrent-map v1.0.0
1717
github.com/prometheus/client_golang v1.18.0
1818
github.com/rakyll/statik v0.1.7

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
231231
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
232232
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250725211427-2baee7ec755d h1:50UbypBJW9larBSnkaePbLe5Kkm6cg1/hAZDpvkRvVg=
233233
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250725211427-2baee7ec755d/go.mod h1:MusRCFsU7+XzJCoCTgheLoENJSf1iiFYm4KbJqz6BYA=
234+
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250728200455-37780395c725 h1:CsafFEQ3xBhKiMyKho47oCyHYuWy9c8w20D5Oc2b4dw=
235+
github.com/optimizely/go-sdk/v2 v2.1.1-0.20250728200455-37780395c725/go.mod h1:MusRCFsU7+XzJCoCTgheLoENJSf1iiFYm4KbJqz6BYA=
234236
github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY=
235237
github.com/orcaman/concurrent-map v1.0.0/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI=
236238
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=

pkg/optimizely/cache.go

Lines changed: 21 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"context"
2222
"encoding/json"
2323
"errors"
24-
"net/http"
2524
"regexp"
2625
"strings"
2726
"sync"
@@ -37,7 +36,7 @@ import (
3736
"github.com/optimizely/agent/plugins/userprofileservice"
3837
odpCachePkg "github.com/optimizely/go-sdk/v2/pkg/cache"
3938
"github.com/optimizely/go-sdk/v2/pkg/client"
40-
cmab "github.com/optimizely/go-sdk/v2/pkg/cmab"
39+
"github.com/optimizely/go-sdk/v2/pkg/cmab"
4140
sdkconfig "github.com/optimizely/go-sdk/v2/pkg/config"
4241
"github.com/optimizely/go-sdk/v2/pkg/decision"
4342
"github.com/optimizely/go-sdk/v2/pkg/event"
@@ -316,8 +315,8 @@ func defaultLoader(
316315
clientOptions = append(clientOptions, client.WithOdpManager(odpManager))
317316

318317
// Parse CMAB cache configuration
319-
cacheSize := 1000 // default
320-
cacheTTL := 30 * time.Minute // default
318+
cacheSize := cmab.DefaultCacheSize
319+
cacheTTL := cmab.DefaultCacheTTL
321320

322321
if cacheConfig, ok := clientConf.CMAB.Cache["size"].(int); ok {
323322
cacheSize = cacheConfig
@@ -331,55 +330,42 @@ func defaultLoader(
331330
}
332331
}
333332

334-
// Parse retry configuration
333+
// Create retry config
335334
retryConfig := &cmab.RetryConfig{
336-
MaxRetries: 3,
337-
InitialBackoff: 100 * time.Millisecond,
338-
MaxBackoff: 10 * time.Second,
339-
BackoffMultiplier: 2.0,
335+
MaxRetries: cmab.DefaultMaxRetries,
336+
InitialBackoff: cmab.DefaultInitialBackoff,
337+
MaxBackoff: cmab.DefaultMaxBackoff,
338+
BackoffMultiplier: cmab.DefaultBackoffMultiplier,
340339
}
341340

341+
// Parse retry configuration
342342
if maxRetries, ok := clientConf.CMAB.RetryConfig["maxRetries"].(int); ok {
343343
retryConfig.MaxRetries = maxRetries
344344
}
345-
346345
if initialBackoffStr, ok := clientConf.CMAB.RetryConfig["initialBackoff"].(string); ok {
347-
if parsedBackoff, err := time.ParseDuration(initialBackoffStr); err == nil {
348-
retryConfig.InitialBackoff = parsedBackoff
346+
if backoff, err := time.ParseDuration(initialBackoffStr); err == nil {
347+
retryConfig.InitialBackoff = backoff
349348
}
350349
}
351-
352350
if maxBackoffStr, ok := clientConf.CMAB.RetryConfig["maxBackoff"].(string); ok {
353-
if parsedBackoff, err := time.ParseDuration(maxBackoffStr); err == nil {
354-
retryConfig.MaxBackoff = parsedBackoff
351+
if backoff, err := time.ParseDuration(maxBackoffStr); err == nil {
352+
retryConfig.MaxBackoff = backoff
355353
}
356354
}
357-
358355
if multiplier, ok := clientConf.CMAB.RetryConfig["backoffMultiplier"].(float64); ok {
359356
retryConfig.BackoffMultiplier = multiplier
360357
}
361358

362-
// Set CMAB prediction endpoint if configured
363-
if clientConf.CMAB.PredictionEndpoint != "" {
364-
cmab.CMABPredictionEndpoint = clientConf.CMAB.PredictionEndpoint
365-
}
366-
367-
// Create CMAB client and service
368-
cmabClient := cmab.NewDefaultCmabClient(cmab.ClientOptions{
369-
HTTPClient: &http.Client{
370-
Timeout: clientConf.CMAB.RequestTimeout,
371-
},
359+
// Create CMAB config (NO endpoint configuration - not configurable)
360+
cmabConfig := cmab.Config{
361+
CacheSize: cacheSize,
362+
CacheTTL: cacheTTL,
363+
HTTPTimeout: clientConf.CMAB.RequestTimeout,
372364
RetryConfig: retryConfig,
373-
Logger: logging.GetLogger(sdkKey, "CmabClient"),
374-
})
375-
376-
cmabService := cmab.NewDefaultCmabService(cmab.ServiceOptions{
377-
Logger: logging.GetLogger(sdkKey, "CmabService"),
378-
CmabCache: odpCachePkg.NewLRUCache(cacheSize, cacheTTL),
379-
CmabClient: cmabClient,
380-
})
365+
}
381366

382-
clientOptions = append(clientOptions, client.WithCmabService(cmabService))
367+
// Add to client options
368+
clientOptions = append(clientOptions, client.WithCmabConfig(cmabConfig))
383369

384370
optimizelyClient, err := optimizelyFactory.Client(
385371
clientOptions...,

0 commit comments

Comments
 (0)