FeatureFlags: Use interface rather than manager (#80000)

This commit is contained in:
Ryan McKinley
2024-01-09 10:38:06 -08:00
committed by GitHub
parent e550829dae
commit 1caaa56de0
48 changed files with 125 additions and 143 deletions

View File

@@ -3,8 +3,8 @@ package config
import (
"github.com/grafana/grafana-azure-sdk-go/azsettings"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/plugins/log"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
)
@@ -44,7 +44,7 @@ type Cfg struct {
GrafanaAppURL string
GrafanaAppSubURL string
Features plugins.FeatureToggles
Features featuremgmt.FeatureToggles
AngularSupportEnabled bool
HideAngularDeprecation []string
@@ -52,7 +52,7 @@ type Cfg struct {
func NewCfg(devMode bool, pluginsPath string, pluginSettings setting.PluginSettings, pluginsAllowUnsigned []string,
awsAllowedAuthProviders []string, awsAssumeRoleEnabled bool, awsExternalId string, azure *azsettings.AzureSettings, secureSocksDSProxy setting.SecureSocksDSProxySettings,
grafanaVersion string, logDatasourceRequests bool, pluginsCDNURLTemplate string, appURL string, appSubURL string, tracing Tracing, features plugins.FeatureToggles, angularSupportEnabled bool,
grafanaVersion string, logDatasourceRequests bool, pluginsCDNURLTemplate string, appURL string, appSubURL string, tracing Tracing, features featuremgmt.FeatureToggles, angularSupportEnabled bool,
grafanaComURL string, disablePlugins []string, hideAngularDeprecation []string, forwardHostEnvVars []string) *Cfg {
return &Cfg{
log: log.New("plugin.cfg"),

View File

@@ -9,6 +9,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/grafana/grafana-azure-sdk-go/azsettings"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/plugins/auth"
"github.com/grafana/grafana/pkg/plugins/config"
@@ -726,35 +727,35 @@ func TestService_GetConfigMap(t *testing.T) {
func TestService_GetConfigMap_featureToggles(t *testing.T) {
t.Run("Feature toggles list is deterministic", func(t *testing.T) {
tcs := []struct {
enabledFeatures []string
expectedConfig map[string]string
features featuremgmt.FeatureToggles
expectedConfig map[string]string
}{
{
enabledFeatures: nil,
expectedConfig: map[string]string{},
features: nil,
expectedConfig: map[string]string{},
},
{
enabledFeatures: []string{},
expectedConfig: map[string]string{},
features: featuremgmt.WithFeatures(),
expectedConfig: map[string]string{},
},
{
enabledFeatures: []string{"A", "B", "C"},
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "A,B,C"},
features: featuremgmt.WithFeatures("A", "B", "C"),
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "A,B,C"},
},
{
enabledFeatures: []string{"C", "B", "A"},
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "A,B,C"},
features: featuremgmt.WithFeatures("C", "B", "A"),
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "A,B,C"},
},
{
enabledFeatures: []string{"b", "a", "c", "d"},
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "a,b,c,d"},
features: featuremgmt.WithFeatures("b", "a", "c", "d"),
expectedConfig: map[string]string{"GF_INSTANCE_FEATURE_TOGGLES_ENABLE": "a,b,c,d"},
},
}
for _, tc := range tcs {
s := &Service{
cfg: &config.Cfg{
Features: fakes.NewFakeFeatureToggles(tc.enabledFeatures...),
Features: tc.features,
},
}
require.Equal(t, tc.expectedConfig, s.GetConfigMap(context.Background(), "", nil))

View File

@@ -149,11 +149,6 @@ func (fn ClientMiddlewareFunc) CreateClientMiddleware(next Client) Client {
return fn(next)
}
type FeatureToggles interface {
IsEnabledGlobally(flag string) bool
GetEnabled(ctx context.Context) map[string]bool
}
type SignatureCalculator interface {
Calculate(ctx context.Context, src PluginSource, plugin FoundPlugin) (Signature, error)
}

View File

@@ -574,26 +574,3 @@ func (p *FakeBackendPlugin) Kill() {
defer p.mutex.Unlock()
p.Running = false
}
type FakeFeatureToggles struct {
features map[string]bool
}
func NewFakeFeatureToggles(features ...string) *FakeFeatureToggles {
m := make(map[string]bool)
for _, f := range features {
m[f] = true
}
return &FakeFeatureToggles{
features: m,
}
}
func (f *FakeFeatureToggles) GetEnabled(_ context.Context) map[string]bool {
return f.features
}
func (f *FakeFeatureToggles) IsEnabledGlobally(feature string) bool {
return f.features[feature]
}

View File

@@ -26,10 +26,10 @@ var (
type Local struct {
log log.Logger
production bool
features plugins.FeatureToggles
features featuremgmt.FeatureToggles
}
func NewLocalFinder(devMode bool, features plugins.FeatureToggles) *Local {
func NewLocalFinder(devMode bool, features featuremgmt.FeatureToggles) *Local {
return &Local{
production: !devMode,
log: log.New("local.finder"),