mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
FeatureFlags: Use interface rather than manager (#80000)
This commit is contained in:
@@ -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"),
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user