c9ab1142e1
* Add OpenFeature provider * Simplify static provider * Linting * Apply review feedback * Codeowner for deps * Update pkg/services/featuremgmt/openfeature.go Co-authored-by: Dave Henderson <dave.henderson@grafana.com> * Apply review comments part2 * Remove from sample.ini for now * fixup! Apply review comments part2 * Add example of context config * Resolve conflict * Run update workspaces --------- Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package featuremgmt
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
"github.com/open-feature/go-sdk/openfeature"
|
|
"github.com/open-feature/go-sdk/openfeature/memprovider"
|
|
)
|
|
|
|
func newStaticProvider(cfg *setting.Cfg) (openfeature.FeatureProvider, error) {
|
|
confFlags, err := setting.ReadFeatureTogglesFromInitFile(cfg.Raw.Section("feature_toggles"))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to read feature toggles from config: %w", err)
|
|
}
|
|
|
|
flags := make(map[string]memprovider.InMemoryFlag, len(standardFeatureFlags))
|
|
|
|
// Add flags from config.ini file
|
|
for name, value := range confFlags {
|
|
flags[name] = createInMemoryFlag(name, value)
|
|
}
|
|
|
|
// Add standard flags
|
|
for _, flag := range standardFeatureFlags {
|
|
if _, exists := flags[flag.Name]; !exists {
|
|
enabled := flag.Expression == "true"
|
|
flags[flag.Name] = createInMemoryFlag(flag.Name, enabled)
|
|
}
|
|
}
|
|
|
|
return memprovider.NewInMemoryProvider(flags), nil
|
|
}
|
|
|
|
func createInMemoryFlag(name string, enabled bool) memprovider.InMemoryFlag {
|
|
variant := "disabled"
|
|
if enabled {
|
|
variant = "enabled"
|
|
}
|
|
|
|
return memprovider.InMemoryFlag{
|
|
Key: name,
|
|
DefaultVariant: variant,
|
|
Variants: map[string]interface{}{
|
|
"enabled": true,
|
|
"disabled": false,
|
|
},
|
|
}
|
|
}
|