Unified Storage: Adds metrics for database query counts (#87781)

pull/87847/head
owensmallwood 2 years ago committed by GitHub
parent 4b24019bae
commit 557c3a9cdd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      pkg/services/apiserver/service.go
  2. 2
      pkg/services/apiserver/storage/entity/test/watch_test.go
  3. 12
      pkg/services/store/entity/db/dbimpl/dbEngine.go
  4. 4
      pkg/services/store/entity/db/dbimpl/dbEngine_test.go
  5. 9
      pkg/services/store/entity/db/dbimpl/dbimpl.go
  6. 2
      pkg/services/store/entity/server/service.go
  7. 4
      pkg/services/store/entity/sqlstash/sql_storage_server_test.go
  8. 2
      pkg/services/store/entity/tests/common_test.go

@ -249,7 +249,7 @@ func (s *service) start(ctx context.Context) error {
return fmt.Errorf("unified storage requires the unifiedStorage feature flag") return fmt.Errorf("unified storage requires the unifiedStorage feature flag")
} }
eDB, err := dbimpl.ProvideEntityDB(s.db, s.cfg, s.features) eDB, err := dbimpl.ProvideEntityDB(s.db, s.cfg, s.features, s.tracing)
if err != nil { if err != nil {
return err return err
} }

@ -66,7 +66,7 @@ func createTestContext(t *testing.T) (entityStore.EntityStoreClient, factory.Des
db := sqlstore.InitTestDBWithMigration(t, nil, sqlstore.InitTestDBOpt{EnsureDefaultOrgAndUser: false}) db := sqlstore.InitTestDBWithMigration(t, nil, sqlstore.InitTestDBOpt{EnsureDefaultOrgAndUser: false})
require.NoError(t, err) require.NoError(t, err)
eDB, err := dbimpl.ProvideEntityDB(db, cfg, featureToggles) eDB, err := dbimpl.ProvideEntityDB(db, cfg, featureToggles, nil)
require.NoError(t, err) require.NoError(t, err)
err = eDB.Init() err = eDB.Init()

@ -5,12 +5,14 @@ import (
"strings" "strings"
"time" "time"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util" "github.com/grafana/grafana/pkg/util"
"xorm.io/xorm" "xorm.io/xorm"
) )
func getEngineMySQL(cfgSection *setting.DynamicSection) (*xorm.Engine, error) { func getEngineMySQL(cfgSection *setting.DynamicSection, tracer tracing.Tracer) (*xorm.Engine, error) {
dbHost := cfgSection.Key("db_host").MustString("") dbHost := cfgSection.Key("db_host").MustString("")
dbName := cfgSection.Key("db_name").MustString("") dbName := cfgSection.Key("db_name").MustString("")
dbUser := cfgSection.Key("db_user").MustString("") dbUser := cfgSection.Key("db_user").MustString("")
@ -24,7 +26,8 @@ func getEngineMySQL(cfgSection *setting.DynamicSection) (*xorm.Engine, error) {
connectionString := connectionStringMySQL(dbUser, dbPass, protocol, dbHost, dbName) connectionString := connectionStringMySQL(dbUser, dbPass, protocol, dbHost, dbName)
engine, err := xorm.NewEngine("mysql", connectionString) driverName := sqlstore.WrapDatabaseDriverWithHooks("mysql", tracer)
engine, err := xorm.NewEngine(driverName, connectionString)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -36,7 +39,7 @@ func getEngineMySQL(cfgSection *setting.DynamicSection) (*xorm.Engine, error) {
return engine, nil return engine, nil
} }
func getEnginePostgres(cfgSection *setting.DynamicSection) (*xorm.Engine, error) { func getEnginePostgres(cfgSection *setting.DynamicSection, tracer tracing.Tracer) (*xorm.Engine, error) {
dbHost := cfgSection.Key("db_host").MustString("") dbHost := cfgSection.Key("db_host").MustString("")
dbName := cfgSection.Key("db_name").MustString("") dbName := cfgSection.Key("db_name").MustString("")
dbUser := cfgSection.Key("db_user").MustString("") dbUser := cfgSection.Key("db_user").MustString("")
@ -52,7 +55,8 @@ func getEnginePostgres(cfgSection *setting.DynamicSection) (*xorm.Engine, error)
connectionString := connectionStringPostgres(dbUser, dbPass, addr.Host, addr.Port, dbName, dbSslMode) connectionString := connectionStringPostgres(dbUser, dbPass, addr.Host, addr.Port, dbName, dbSslMode)
engine, err := xorm.NewEngine("postgres", connectionString) driverName := sqlstore.WrapDatabaseDriverWithHooks("postgres", tracer)
engine, err := xorm.NewEngine(driverName, connectionString)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -19,7 +19,7 @@ func TestGetEnginePostgresFromConfig(t *testing.T) {
s.Key("db_user").SetValue("user") s.Key("db_user").SetValue("user")
s.Key("db_password").SetValue("password") s.Key("db_password").SetValue("password")
engine, err := getEnginePostgres(cfg.SectionWithEnvOverrides("entity_api")) engine, err := getEnginePostgres(cfg.SectionWithEnvOverrides("entity_api"), nil)
assert.NotNil(t, engine) assert.NotNil(t, engine)
assert.NoError(t, err) assert.NoError(t, err)
@ -36,7 +36,7 @@ func TestGetEngineMySQLFromConfig(t *testing.T) {
s.Key("db_user").SetValue("user") s.Key("db_user").SetValue("user")
s.Key("db_password").SetValue("password") s.Key("db_password").SetValue("password")
engine, err := getEngineMySQL(cfg.SectionWithEnvOverrides("entity_api")) engine, err := getEngineMySQL(cfg.SectionWithEnvOverrides("entity_api"), nil)
assert.NotNil(t, engine) assert.NotNil(t, engine)
assert.NoError(t, err) assert.NoError(t, err)

@ -6,6 +6,7 @@ import (
"github.com/dlmiddlecote/sqlstats" "github.com/dlmiddlecote/sqlstats"
"github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/sqlstore/session" "github.com/grafana/grafana/pkg/services/sqlstore/session"
entitydb "github.com/grafana/grafana/pkg/services/store/entity/db" entitydb "github.com/grafana/grafana/pkg/services/store/entity/db"
@ -18,12 +19,13 @@ import (
var _ entitydb.EntityDBInterface = (*EntityDB)(nil) var _ entitydb.EntityDBInterface = (*EntityDB)(nil)
func ProvideEntityDB(db db.DB, cfg *setting.Cfg, features featuremgmt.FeatureToggles) (*EntityDB, error) { func ProvideEntityDB(db db.DB, cfg *setting.Cfg, features featuremgmt.FeatureToggles, tracer tracing.Tracer) (*EntityDB, error) {
return &EntityDB{ return &EntityDB{
db: db, db: db,
cfg: cfg, cfg: cfg,
features: features, features: features,
log: log.New("entity-db"), log: log.New("entity-db"),
tracer: tracer,
}, nil }, nil
} }
@ -33,6 +35,7 @@ type EntityDB struct {
engine *xorm.Engine engine *xorm.Engine
cfg *setting.Cfg cfg *setting.Cfg
log log.Logger log log.Logger
tracer tracing.Tracer
} }
func (db *EntityDB) Init() error { func (db *EntityDB) Init() error {
@ -54,7 +57,7 @@ func (db *EntityDB) GetEngine() (*xorm.Engine, error) {
// if explicit connection settings are provided, use them // if explicit connection settings are provided, use them
if dbType != "" { if dbType != "" {
if dbType == "postgres" { if dbType == "postgres" {
engine, err = getEnginePostgres(cfgSection) engine, err = getEnginePostgres(cfgSection, db.tracer)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -66,7 +69,7 @@ func (db *EntityDB) GetEngine() (*xorm.Engine, error) {
// FIXME: return nil, err // FIXME: return nil, err
} }
} else if dbType == "mysql" { } else if dbType == "mysql" {
engine, err = getEngineMySQL(cfgSection) engine, err = getEngineMySQL(cfgSection, db.tracer)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -106,7 +106,7 @@ func (s *service) start(ctx context.Context) error {
// TODO: use wire // TODO: use wire
// TODO: support using grafana db connection? // TODO: support using grafana db connection?
eDB, err := dbimpl.ProvideEntityDB(nil, s.cfg, s.features) eDB, err := dbimpl.ProvideEntityDB(nil, s.cfg, s.features, s.tracing)
if err != nil { if err != nil {
return err return err
} }

@ -136,7 +136,9 @@ func setUpTestServer(t *testing.T) entity.EntityStoreServer {
entityDB, err := dbimpl.ProvideEntityDB( entityDB, err := dbimpl.ProvideEntityDB(
sqlStore, sqlStore,
cfg, cfg,
featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorage)) featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorage),
nil,
)
require.NoError(t, err) require.NoError(t, err)
traceConfig, err := tracing.ParseTracingConfig(cfg) traceConfig, err := tracing.ParseTracingConfig(cfg)

@ -80,7 +80,7 @@ func createTestContext(t *testing.T) testContext {
authToken, serviceAccountUser := createServiceAccountAdminToken(t, env) authToken, serviceAccountUser := createServiceAccountAdminToken(t, env)
eDB, err := dbimpl.ProvideEntityDB(env.SQLStore, env.Cfg, env.FeatureToggles) eDB, err := dbimpl.ProvideEntityDB(env.SQLStore, env.Cfg, env.FeatureToggles, nil)
require.NoError(t, err) require.NoError(t, err)
err = eDB.Init() err = eDB.Init()

Loading…
Cancel
Save