* initial commit * add support of integerts * finialise the static provider * minor refactoring * the rest * revert: the rest * add new thiongs * more tests added * add ff parsing tests to check if types are handled correctly * update tests according to recent changes * address golint issues * Update pkg/setting/setting_feature_toggles.go Co-authored-by: Dave Henderson <dave.henderson@grafana.com> * fix rebase issues * addressing review comments * add test cases for enterprise * handle enterprise cases * minor refactoring to make api a bit easier to debug * make test names a bit more precise * fix linter * add openfeature sdk to goleak ignore in testutil * Remove only boolean check in ff gen tests * add non-boolean types top the doc in default.ini and doc string in FeatureFlag type * apply remarks, add docs to sample.ini * reflect changes in feature flags in the public grafana configuration doc * fix doc formatting * apply suggestions to the doc file --------- Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package featuremgmt
|
|
|
|
import (
|
|
"fmt"
|
|
"maps"
|
|
|
|
"github.com/open-feature/go-sdk/openfeature"
|
|
"github.com/open-feature/go-sdk/openfeature/memprovider"
|
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
// inMemoryBulkProvider is a wrapper around memprovider.InMemoryProvider that
|
|
// also allows for bulk evaluation of flags, necessary to proxy OFREP requests.
|
|
type inMemoryBulkProvider struct {
|
|
memprovider.InMemoryProvider
|
|
flags map[string]memprovider.InMemoryFlag
|
|
}
|
|
|
|
func newInMemoryBulkProvider(flags map[string]memprovider.InMemoryFlag) *inMemoryBulkProvider {
|
|
return &inMemoryBulkProvider{
|
|
InMemoryProvider: memprovider.NewInMemoryProvider(flags),
|
|
flags: flags,
|
|
}
|
|
}
|
|
|
|
// ListFlags returns a list of all flags registered with the provider.
|
|
func (p *inMemoryBulkProvider) ListFlags() ([]string, error) {
|
|
keys := make([]string, 0, len(p.flags))
|
|
for key := range p.flags {
|
|
keys = append(keys, key)
|
|
}
|
|
return keys, nil
|
|
}
|
|
|
|
func newStaticProvider(confFlags map[string]memprovider.InMemoryFlag, standardFlags []FeatureFlag) (openfeature.FeatureProvider, error) {
|
|
flags := make(map[string]memprovider.InMemoryFlag, len(standardFlags))
|
|
|
|
// Parse and add standard flags
|
|
for _, flag := range standardFlags {
|
|
inMemFlag, err := setting.ParseFlag(flag.Name, flag.Expression)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse flag %s: %w", flag.Name, err)
|
|
}
|
|
|
|
flags[flag.Name] = inMemFlag
|
|
}
|
|
|
|
// Add flags from config.ini file
|
|
maps.Copy(flags, confFlags)
|
|
|
|
return newInMemoryBulkProvider(flags), nil
|
|
}
|