Files
grafana/pkg/setting/setting_openfeature.go
Tania 016301c304 OpenFeature: Rename provider from goff to features-service (#115895)
* OpenFeature: Rename provider

* Update other references to goff

* Update pkg/services/featuremgmt/openfeature.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

* Update pkg/services/featuremgmt/openfeature.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

* Update pkg/services/featuremgmt/openfeature.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

* Update pkg/services/featuremgmt/openfeature.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

---------

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2026-01-07 12:04:30 +01:00

64 lines
1.7 KiB
Go

package setting
import (
"fmt"
"net/url"
)
const (
StaticProviderType = "static"
FeaturesServiceProviderType = "features-service"
OFREPProviderType = "ofrep"
)
type OpenFeatureSettings struct {
APIEnabled bool
ProviderType string
URL *url.URL
TargetingKey string
ContextAttrs map[string]string
}
func (cfg *Cfg) readOpenFeatureSettings() error {
cfg.OpenFeature = OpenFeatureSettings{}
config := cfg.Raw.Section("feature_toggles.openfeature")
cfg.OpenFeature.APIEnabled = config.Key("enable_api").MustBool(true)
cfg.OpenFeature.ProviderType = config.Key("provider").MustString(StaticProviderType)
strURL := config.Key("url").MustString("")
defaultTargetingKey := "default"
if cfg.StackID != "" {
defaultTargetingKey = fmt.Sprintf("stacks-%s", cfg.StackID)
}
cfg.OpenFeature.TargetingKey = config.Key("targetingKey").MustString(defaultTargetingKey)
if strURL != "" && (cfg.OpenFeature.ProviderType == FeaturesServiceProviderType || cfg.OpenFeature.ProviderType == OFREPProviderType) {
u, err := url.Parse(strURL)
if err != nil {
return fmt.Errorf("invalid feature provider url: %w", err)
}
cfg.OpenFeature.URL = u
}
// build the eval context attributes using [feature_toggles.openfeature.context] section
ctxConf := cfg.Raw.Section("feature_toggles.openfeature.context")
attrs := map[string]string{}
for _, key := range ctxConf.KeyStrings() {
attrs[key] = ctxConf.Key(key).String()
}
// Some default attributes
if _, ok := attrs["grafana_version"]; !ok {
attrs["grafana_version"] = BuildVersion
}
if _, ok := attrs["namespace"]; !ok {
attrs["namespace"] = defaultTargetingKey
}
cfg.OpenFeature.ContextAttrs = attrs
return nil
}