diff --git a/pkg/services/pluginsintegration/plugins_integration_test.go b/pkg/services/pluginsintegration/plugins_integration_test.go index 778d0c13014..d7d82018ca7 100644 --- a/pkg/services/pluginsintegration/plugins_integration_test.go +++ b/pkg/services/pluginsintegration/plugins_integration_test.go @@ -86,7 +86,7 @@ func TestIntegrationPluginManager(t *testing.T) { tmpo := tempo.ProvideService(hcp) td := testdatasource.ProvideService() pg := postgres.ProvideService(cfg) - my := mysql.ProvideService(cfg, hcp) + my := mysql.ProvideService() ms := mssql.ProvideService(cfg) sv2 := searchV2.ProvideService(cfg, db.InitTestDB(t), nil, nil, tracer, features, nil, nil, nil) graf := grafanads.ProvideService(sv2, nil) diff --git a/pkg/tsdb/mysql/macros.go b/pkg/tsdb/mysql/macros.go index 4cff452e413..05e93c0aee5 100644 --- a/pkg/tsdb/mysql/macros.go +++ b/pkg/tsdb/mysql/macros.go @@ -8,7 +8,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/gtime" "github.com/grafana/grafana-plugin-sdk-go/backend/log" - "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/sqleng" ) @@ -23,11 +22,11 @@ type mySQLMacroEngine struct { userError string } -func newMysqlMacroEngine(logger log.Logger, cfg *setting.Cfg) sqleng.SQLMacroEngine { +func newMysqlMacroEngine(logger log.Logger, userFacingDefaultError string) sqleng.SQLMacroEngine { return &mySQLMacroEngine{ SQLMacroEngineBase: sqleng.NewSQLMacroEngineBase(), logger: logger, - userError: cfg.UserFacingDefaultError, + userError: userFacingDefaultError, } } diff --git a/pkg/tsdb/mysql/macros_test.go b/pkg/tsdb/mysql/macros_test.go index d8babbfbc38..595e06c7dc4 100644 --- a/pkg/tsdb/mysql/macros_test.go +++ b/pkg/tsdb/mysql/macros_test.go @@ -7,7 +7,6 @@ import ( "time" "github.com/grafana/grafana-plugin-sdk-go/backend" - "github.com/grafana/grafana/pkg/setting" "github.com/stretchr/testify/require" ) @@ -194,7 +193,7 @@ func TestMacroEngine(t *testing.T) { } func TestMacroEngineConcurrency(t *testing.T) { - engine := newMysqlMacroEngine(backend.NewLoggerWith("logger", "test"), setting.NewCfg()) + engine := newMysqlMacroEngine(backend.NewLoggerWith("logger", "test"), "error") query1 := backend.DataQuery{ JSON: []byte{}, } diff --git a/pkg/tsdb/mysql/mysql.go b/pkg/tsdb/mysql/mysql.go index 91ed62cd2b8..2e908afc93d 100644 --- a/pkg/tsdb/mysql/mysql.go +++ b/pkg/tsdb/mysql/mysql.go @@ -22,8 +22,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" "github.com/grafana/grafana-plugin-sdk-go/backend/log" - "github.com/grafana/grafana/pkg/infra/httpclient" - "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/sqleng" ) @@ -34,7 +32,6 @@ const ( ) type Service struct { - Cfg *setting.Cfg im instancemgmt.InstanceManager logger log.Logger } @@ -43,25 +40,30 @@ func characterEscape(s string, escapeChar string) string { return strings.ReplaceAll(s, escapeChar, url.QueryEscape(escapeChar)) } -func ProvideService(cfg *setting.Cfg, httpClientProvider httpclient.Provider) *Service { +func ProvideService() *Service { logger := backend.NewLoggerWith("logger", "tsdb.mysql") return &Service{ - im: datasource.NewInstanceManager(newInstanceSettings(cfg, logger)), + im: datasource.NewInstanceManager(newInstanceSettings(logger)), logger: logger, } } -func newInstanceSettings(cfg *setting.Cfg, logger log.Logger) datasource.InstanceFactoryFunc { +func newInstanceSettings(logger log.Logger) datasource.InstanceFactoryFunc { return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { + cfg := backend.GrafanaConfigFromContext(ctx) + sqlCfg, err := cfg.SQL() + if err != nil { + return nil, err + } jsonData := sqleng.JsonData{ - MaxOpenConns: cfg.SqlDatasourceMaxOpenConnsDefault, - MaxIdleConns: cfg.SqlDatasourceMaxIdleConnsDefault, - ConnMaxLifetime: cfg.SqlDatasourceMaxConnLifetimeDefault, + MaxOpenConns: sqlCfg.DefaultMaxOpenConns, + MaxIdleConns: sqlCfg.DefaultMaxIdleConns, + ConnMaxLifetime: sqlCfg.DefaultMaxConnLifetimeSeconds, SecureDSProxy: false, AllowCleartextPasswords: false, } - err := json.Unmarshal(settings.JSONData, &jsonData) + err = json.Unmarshal(settings.JSONData, &jsonData) if err != nil { return nil, fmt.Errorf("error reading settings: %w", err) } @@ -144,11 +146,16 @@ func newInstanceSettings(cfg *setting.Cfg, logger log.Logger) datasource.Instanc DSInfo: dsInfo, TimeColumnNames: []string{"time", "time_sec"}, MetricColumnTypes: []string{"CHAR", "VARCHAR", "TINYTEXT", "TEXT", "MEDIUMTEXT", "LONGTEXT"}, - RowLimit: cfg.DataProxyRowLimit, + RowLimit: sqlCfg.RowLimit, + } + + userFacingDefaultError, err := cfg.UserFacingDefaultError() + if err != nil { + return nil, err } rowTransformer := mysqlQueryResultTransformer{ - userError: cfg.UserFacingDefaultError, + userError: userFacingDefaultError, } db, err := sql.Open("mysql", cnnstr) @@ -160,7 +167,7 @@ func newInstanceSettings(cfg *setting.Cfg, logger log.Logger) datasource.Instanc db.SetMaxIdleConns(config.DSInfo.JsonData.MaxIdleConns) db.SetConnMaxLifetime(time.Duration(config.DSInfo.JsonData.ConnMaxLifetime) * time.Second) - return sqleng.NewQueryDataHandler(cfg.UserFacingDefaultError, db, config, &rowTransformer, newMysqlMacroEngine(logger, cfg), logger) + return sqleng.NewQueryDataHandler(userFacingDefaultError, db, config, &rowTransformer, newMysqlMacroEngine(logger, userFacingDefaultError), logger) } } diff --git a/pkg/tsdb/mysql/mysql_test.go b/pkg/tsdb/mysql/mysql_test.go index c41766db6c6..c01ec8bae6c 100644 --- a/pkg/tsdb/mysql/mysql_test.go +++ b/pkg/tsdb/mysql/mysql_test.go @@ -13,7 +13,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/data" "github.com/stretchr/testify/require" - "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/sqleng" ) @@ -67,7 +66,7 @@ func TestIntegrationMySQL(t *testing.T) { db := InitMySQLTestDB(t, config.DSInfo.JsonData) - exe, err := sqleng.NewQueryDataHandler("", db, config, &rowTransformer, newMysqlMacroEngine(logger, setting.NewCfg()), logger) + exe, err := sqleng.NewQueryDataHandler("", db, config, &rowTransformer, newMysqlMacroEngine(logger, ""), logger) require.NoError(t, err) @@ -1179,7 +1178,7 @@ func TestIntegrationMySQL(t *testing.T) { queryResultTransformer := mysqlQueryResultTransformer{} - handler, err := sqleng.NewQueryDataHandler("", db, config, &queryResultTransformer, newMysqlMacroEngine(logger, setting.NewCfg()), logger) + handler, err := sqleng.NewQueryDataHandler("", db, config, &queryResultTransformer, newMysqlMacroEngine(logger, ""), logger) require.NoError(t, err) t.Run("When doing a table query that returns 2 rows should limit the result to 1 row", func(t *testing.T) {