plugins: add more configuration parameters to the plugin-config (#83060)

* envvars: add more configs

* made row-limit optional

* more consistent naming
This commit is contained in:
Gábor Farkas 2024-02-21 11:32:10 +01:00 committed by GitHub
parent 778d80f922
commit a62dccb0c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 111 additions and 28 deletions

View File

@ -54,39 +54,55 @@ type Cfg struct {
HideAngularDeprecation []string
ConcurrentQueryCount int
UserFacingDefaultError string
DataProxyRowLimit int64
SQLDatasourceMaxOpenConnsDefault int
SQLDatasourceMaxIdleConnsDefault int
SQLDatasourceMaxConnLifetimeDefault int
}
func NewCfg(devMode bool, pluginsPath string, pluginSettings setting.PluginSettings, pluginsAllowUnsigned []string,
awsAllowedAuthProviders []string, awsAssumeRoleEnabled bool, awsExternalId string, awsSessionDuration string, awsListMetricsPageLimit string, AWSForwardSettingsPlugins []string, azure *azsettings.AzureSettings, secureSocksDSProxy setting.SecureSocksDSProxySettings,
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, concurrentQueryCount int, azureAuthEnabled bool) *Cfg {
grafanaComURL string, disablePlugins []string, hideAngularDeprecation []string, forwardHostEnvVars []string, concurrentQueryCount int, azureAuthEnabled bool,
userFacingDefaultError string, dataProxyRowLimit int64,
sqlDatasourceMaxOpenConnsDefault int, sqlDatasourceMaxIdleConnsDefault int, sqlDatasourceMaxConnLifetimeDefault int,
) *Cfg {
return &Cfg{
log: log.New("plugin.cfg"),
PluginsPath: pluginsPath,
BuildVersion: grafanaVersion,
DevMode: devMode,
PluginSettings: pluginSettings,
PluginsAllowUnsigned: pluginsAllowUnsigned,
DisablePlugins: disablePlugins,
AWSAllowedAuthProviders: awsAllowedAuthProviders,
AWSAssumeRoleEnabled: awsAssumeRoleEnabled,
AWSExternalId: awsExternalId,
AWSSessionDuration: awsSessionDuration,
AWSListMetricsPageLimit: awsListMetricsPageLimit,
AWSForwardSettingsPlugins: AWSForwardSettingsPlugins,
Azure: azure,
ProxySettings: secureSocksDSProxy,
LogDatasourceRequests: logDatasourceRequests,
PluginsCDNURLTemplate: pluginsCDNURLTemplate,
Tracing: tracing,
GrafanaComURL: grafanaComURL,
GrafanaAppURL: appURL,
GrafanaAppSubURL: appSubURL,
Features: features,
AngularSupportEnabled: angularSupportEnabled,
HideAngularDeprecation: hideAngularDeprecation,
ForwardHostEnvVars: forwardHostEnvVars,
ConcurrentQueryCount: concurrentQueryCount,
AzureAuthEnabled: azureAuthEnabled,
log: log.New("plugin.cfg"),
PluginsPath: pluginsPath,
BuildVersion: grafanaVersion,
DevMode: devMode,
PluginSettings: pluginSettings,
PluginsAllowUnsigned: pluginsAllowUnsigned,
DisablePlugins: disablePlugins,
AWSAllowedAuthProviders: awsAllowedAuthProviders,
AWSAssumeRoleEnabled: awsAssumeRoleEnabled,
AWSExternalId: awsExternalId,
AWSSessionDuration: awsSessionDuration,
AWSListMetricsPageLimit: awsListMetricsPageLimit,
AWSForwardSettingsPlugins: AWSForwardSettingsPlugins,
Azure: azure,
ProxySettings: secureSocksDSProxy,
LogDatasourceRequests: logDatasourceRequests,
PluginsCDNURLTemplate: pluginsCDNURLTemplate,
Tracing: tracing,
GrafanaComURL: grafanaComURL,
GrafanaAppURL: appURL,
GrafanaAppSubURL: appSubURL,
Features: features,
AngularSupportEnabled: angularSupportEnabled,
HideAngularDeprecation: hideAngularDeprecation,
ForwardHostEnvVars: forwardHostEnvVars,
ConcurrentQueryCount: concurrentQueryCount,
AzureAuthEnabled: azureAuthEnabled,
UserFacingDefaultError: userFacingDefaultError,
DataProxyRowLimit: dataProxyRowLimit,
SQLDatasourceMaxOpenConnsDefault: sqlDatasourceMaxOpenConnsDefault,
SQLDatasourceMaxIdleConnsDefault: sqlDatasourceMaxIdleConnsDefault,
SQLDatasourceMaxConnLifetimeDefault: sqlDatasourceMaxConnLifetimeDefault,
}
}

View File

@ -100,6 +100,8 @@ func (s *Service) Get(ctx context.Context, p *plugins.Plugin) []string {
}
// GetConfigMap returns a map of configuration that should be passed in a plugin request.
//
//nolint:gocyclo
func (s *Service) GetConfigMap(ctx context.Context, pluginID string, _ *auth.ExternalService) map[string]string {
m := make(map[string]string)
@ -110,6 +112,18 @@ func (s *Service) GetConfigMap(ctx context.Context, pluginID string, _ *auth.Ext
m[backend.ConcurrentQueryCount] = strconv.Itoa(s.cfg.ConcurrentQueryCount)
}
if s.cfg.UserFacingDefaultError != "" {
m[backend.UserFacingDefaultError] = s.cfg.UserFacingDefaultError
}
if s.cfg.DataProxyRowLimit != 0 {
m[backend.SQLRowLimit] = strconv.FormatInt(s.cfg.DataProxyRowLimit, 10)
}
m[backend.SQLMaxOpenConnsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxOpenConnsDefault)
m[backend.SQLMaxIdleConnsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxIdleConnsDefault)
m[backend.SQLMaxConnLifetimeSecondsDefault] = strconv.Itoa(s.cfg.SQLDatasourceMaxConnLifetimeDefault)
// TODO add support via plugin SDK
// if externalService != nil {
// m[oauthtokenretriever.AppURL] = s.cfg.GrafanaAppURL

View File

@ -671,6 +671,18 @@ func TestInitalizer_azureEnvVars(t *testing.T) {
})
}
func TestService_GetConfigMap_Defaults(t *testing.T) {
s := &Service{
cfg: &config.Cfg{},
}
require.Equal(t, map[string]string{
"GF_SQL_MAX_OPEN_CONNS_DEFAULT": "0",
"GF_SQL_MAX_IDLE_CONNS_DEFAULT": "0",
"GF_SQL_MAX_CONN_LIFETIME_SECONDS_DEFAULT": "0",
}, s.GetConfigMap(context.Background(), "", nil))
}
func TestService_GetConfigMap(t *testing.T) {
tcs := []struct {
name string
@ -806,6 +818,42 @@ func TestService_GetConfigMap_appURL(t *testing.T) {
})
}
func TestService_GetConfigMap_SQL(t *testing.T) {
t.Run("Uses the configured values", func(t *testing.T) {
s := &Service{
cfg: &config.Cfg{
DataProxyRowLimit: 23,
SQLDatasourceMaxOpenConnsDefault: 24,
SQLDatasourceMaxIdleConnsDefault: 25,
SQLDatasourceMaxConnLifetimeDefault: 26,
},
}
require.Subset(t, s.GetConfigMap(context.Background(), "", nil), map[string]string{
"GF_SQL_ROW_LIMIT": "23",
"GF_SQL_MAX_OPEN_CONNS_DEFAULT": "24",
"GF_SQL_MAX_IDLE_CONNS_DEFAULT": "25",
"GF_SQL_MAX_CONN_LIFETIME_SECONDS_DEFAULT": "26",
})
})
t.Run("Uses the configured max-default-values, even when they are zero", func(t *testing.T) {
s := &Service{
cfg: &config.Cfg{
SQLDatasourceMaxOpenConnsDefault: 0,
SQLDatasourceMaxIdleConnsDefault: 0,
SQLDatasourceMaxConnLifetimeDefault: 0,
},
}
require.Equal(t, map[string]string{
"GF_SQL_MAX_OPEN_CONNS_DEFAULT": "0",
"GF_SQL_MAX_IDLE_CONNS_DEFAULT": "0",
"GF_SQL_MAX_CONN_LIFETIME_SECONDS_DEFAULT": "0",
}, s.GetConfigMap(context.Background(), "", nil))
})
}
func TestService_GetConfigMap_concurrentQueryCount(t *testing.T) {
t.Run("Uses the configured concurrent query count", func(t *testing.T) {
s := &Service{

View File

@ -63,6 +63,11 @@ func ProvideConfig(settingProvider setting.Provider, grafanaCfg *setting.Cfg, fe
grafanaCfg.ForwardHostEnvVars,
grafanaCfg.ConcurrentQueryCount,
grafanaCfg.AzureAuthEnabled,
grafanaCfg.UserFacingDefaultError,
grafanaCfg.DataProxyRowLimit,
grafanaCfg.SqlDatasourceMaxOpenConnsDefault,
grafanaCfg.SqlDatasourceMaxIdleConnsDefault,
grafanaCfg.SqlDatasourceMaxConnLifetimeDefault,
), nil
}