postgres: do not use unexported grafana-core config (#83241)

* postgres: do not use unexported grafana-core config

* fixed wrong value
This commit is contained in:
Gábor Farkas 2024-02-22 16:47:03 +01:00 committed by GitHub
parent 5f89c69b66
commit ae77fe3602
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 25 deletions

View File

@ -28,7 +28,7 @@ func ProvideService(cfg *setting.Cfg) *Service {
tlsManager: newTLSManager(logger, cfg.DataPath), tlsManager: newTLSManager(logger, cfg.DataPath),
logger: logger, logger: logger,
} }
s.im = datasource.NewInstanceManager(s.newInstanceSettings(cfg)) s.im = datasource.NewInstanceManager(s.newInstanceSettings())
return s return s
} }
@ -55,7 +55,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
return dsInfo.QueryData(ctx, req) return dsInfo.QueryData(ctx, req)
} }
func newPostgres(ctx context.Context, cfg *setting.Cfg, dsInfo sqleng.DataSourceInfo, cnnstr string, logger log.Logger, settings backend.DataSourceInstanceSettings) (*sql.DB, *sqleng.DataSourceHandler, error) { func newPostgres(ctx context.Context, userFacingDefaultError string, rowLimit int64, dsInfo sqleng.DataSourceInfo, cnnstr string, logger log.Logger, settings backend.DataSourceInstanceSettings) (*sql.DB, *sqleng.DataSourceHandler, error) {
connector, err := pq.NewConnector(cnnstr) connector, err := pq.NewConnector(cnnstr)
if err != nil { if err != nil {
logger.Error("postgres connector creation failed", "error", err) logger.Error("postgres connector creation failed", "error", err)
@ -82,7 +82,7 @@ func newPostgres(ctx context.Context, cfg *setting.Cfg, dsInfo sqleng.DataSource
config := sqleng.DataPluginConfiguration{ config := sqleng.DataPluginConfiguration{
DSInfo: dsInfo, DSInfo: dsInfo,
MetricColumnTypes: []string{"UNKNOWN", "TEXT", "VARCHAR", "CHAR"}, MetricColumnTypes: []string{"UNKNOWN", "TEXT", "VARCHAR", "CHAR"},
RowLimit: cfg.DataProxyRowLimit, RowLimit: rowLimit,
} }
queryResultTransformer := postgresQueryResultTransformer{} queryResultTransformer := postgresQueryResultTransformer{}
@ -93,7 +93,7 @@ func newPostgres(ctx context.Context, cfg *setting.Cfg, dsInfo sqleng.DataSource
db.SetMaxIdleConns(config.DSInfo.JsonData.MaxIdleConns) db.SetMaxIdleConns(config.DSInfo.JsonData.MaxIdleConns)
db.SetConnMaxLifetime(time.Duration(config.DSInfo.JsonData.ConnMaxLifetime) * time.Second) db.SetConnMaxLifetime(time.Duration(config.DSInfo.JsonData.ConnMaxLifetime) * time.Second)
handler, err := sqleng.NewQueryDataHandler(cfg.UserFacingDefaultError, db, config, &queryResultTransformer, newPostgresMacroEngine(dsInfo.JsonData.Timescaledb), handler, err := sqleng.NewQueryDataHandler(userFacingDefaultError, db, config, &queryResultTransformer, newPostgresMacroEngine(dsInfo.JsonData.Timescaledb),
logger) logger)
if err != nil { if err != nil {
logger.Error("Failed connecting to Postgres", "err", err) logger.Error("Failed connecting to Postgres", "err", err)
@ -104,20 +104,25 @@ func newPostgres(ctx context.Context, cfg *setting.Cfg, dsInfo sqleng.DataSource
return db, handler, nil return db, handler, nil
} }
func (s *Service) newInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc { func (s *Service) newInstanceSettings() datasource.InstanceFactoryFunc {
logger := s.logger logger := s.logger
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
logger.Debug("Creating Postgres query endpoint") cfg := backend.GrafanaConfigFromContext(ctx)
sqlCfg, err := cfg.SQL()
if err != nil {
return nil, err
}
jsonData := sqleng.JsonData{ jsonData := sqleng.JsonData{
MaxOpenConns: cfg.SqlDatasourceMaxOpenConnsDefault, MaxOpenConns: sqlCfg.DefaultMaxOpenConns,
MaxIdleConns: cfg.SqlDatasourceMaxIdleConnsDefault, MaxIdleConns: sqlCfg.DefaultMaxIdleConns,
ConnMaxLifetime: cfg.SqlDatasourceMaxConnLifetimeDefault, ConnMaxLifetime: sqlCfg.DefaultMaxConnLifetimeSeconds,
Timescaledb: false, Timescaledb: false,
ConfigurationMethod: "file-path", ConfigurationMethod: "file-path",
SecureDSProxy: false, SecureDSProxy: false,
} }
err := json.Unmarshal(settings.JSONData, &jsonData) err = json.Unmarshal(settings.JSONData, &jsonData)
if err != nil { if err != nil {
return nil, fmt.Errorf("error reading settings: %w", err) return nil, fmt.Errorf("error reading settings: %w", err)
} }
@ -143,7 +148,12 @@ func (s *Service) newInstanceSettings(cfg *setting.Cfg) datasource.InstanceFacto
return nil, err return nil, err
} }
_, handler, err := newPostgres(ctx, cfg, dsInfo, cnnstr, logger, settings) userFacingDefaultError, err := cfg.UserFacingDefaultError()
if err != nil {
return nil, err
}
_, handler, err := newPostgres(ctx, userFacingDefaultError, sqlCfg.RowLimit, dsInfo, cnnstr, logger, settings)
if err != nil { if err != nil {
logger.Error("Failed connecting to Postgres", "err", err) logger.Error("Failed connecting to Postgres", "err", err)

View File

@ -16,7 +16,6 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/experimental" "github.com/grafana/grafana-plugin-sdk-go/experimental"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/tsdb/sqleng" "github.com/grafana/grafana/pkg/tsdb/sqleng"
_ "github.com/lib/pq" _ "github.com/lib/pq"
@ -143,10 +142,6 @@ func TestIntegrationPostgresSnapshots(t *testing.T) {
return sql return sql
} }
cfg := setting.NewCfg()
cfg.DataPath = t.TempDir()
cfg.DataProxyRowLimit = 10000
jsonData := sqleng.JsonData{ jsonData := sqleng.JsonData{
MaxOpenConns: 0, MaxOpenConns: 0,
MaxIdleConns: 2, MaxIdleConns: 2,
@ -164,7 +159,7 @@ func TestIntegrationPostgresSnapshots(t *testing.T) {
cnnstr := getCnnStr() cnnstr := getCnnStr()
db, handler, err := newPostgres(context.Background(), cfg, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{}) db, handler, err := newPostgres(context.Background(), "error", 10000, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{})
t.Cleanup((func() { t.Cleanup((func() {
_, err := db.Exec("DROP TABLE tbl") _, err := db.Exec("DROP TABLE tbl")

View File

@ -191,10 +191,6 @@ func TestIntegrationPostgres(t *testing.T) {
return sql return sql
} }
cfg := setting.NewCfg()
cfg.DataPath = t.TempDir()
cfg.DataProxyRowLimit = 10000
jsonData := sqleng.JsonData{ jsonData := sqleng.JsonData{
MaxOpenConns: 0, MaxOpenConns: 0,
MaxIdleConns: 2, MaxIdleConns: 2,
@ -212,7 +208,7 @@ func TestIntegrationPostgres(t *testing.T) {
cnnstr := postgresTestDBConnString() cnnstr := postgresTestDBConnString()
db, exe, err := newPostgres(context.Background(), cfg, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{}) db, exe, err := newPostgres(context.Background(), "error", 10000, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{})
require.NoError(t, err) require.NoError(t, err)
@ -1266,9 +1262,7 @@ func TestIntegrationPostgres(t *testing.T) {
t.Run("When row limit set to 1", func(t *testing.T) { t.Run("When row limit set to 1", func(t *testing.T) {
dsInfo := sqleng.DataSourceInfo{} dsInfo := sqleng.DataSourceInfo{}
conf := setting.NewCfg() _, handler, err := newPostgres(context.Background(), "error", 1, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{})
conf.DataProxyRowLimit = 1
_, handler, err := newPostgres(context.Background(), conf, dsInfo, cnnstr, logger, backend.DataSourceInstanceSettings{})
require.NoError(t, err) require.NoError(t, err)