mysql: do not use unexported grafana-core config (#83062)

* mysql: do not use unexported grafana-core config

* updated test
This commit is contained in:
Gábor Farkas 2024-02-22 14:22:14 +01:00 committed by GitHub
parent 74c0463cd3
commit 3ba33fe278
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 26 additions and 22 deletions

View File

@ -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)

View File

@ -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,
}
}

View File

@ -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{},
}

View File

@ -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)
}
}

View File

@ -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) {