diff --git a/pkg/services/datasources/cache.go b/pkg/services/datasources/cache.go index f35f1456c57..bff758a596a 100644 --- a/pkg/services/datasources/cache.go +++ b/pkg/services/datasources/cache.go @@ -4,10 +4,10 @@ import ( "fmt" "time" - "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/localcache" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/registry" + "github.com/grafana/grafana/pkg/services/sqlstore" ) type CacheService interface { @@ -15,8 +15,8 @@ type CacheService interface { } type CacheServiceImpl struct { - Bus bus.Bus `inject:""` CacheService *localcache.CacheService `inject:""` + SQLStore *sqlstore.SqlStore `inject:""` } func init() { @@ -31,7 +31,11 @@ func (dc *CacheServiceImpl) Init() error { return nil } -func (dc *CacheServiceImpl) GetDatasource(datasourceID int64, user *models.SignedInUser, skipCache bool) (*models.DataSource, error) { +func (dc *CacheServiceImpl) GetDatasource( + datasourceID int64, + user *models.SignedInUser, + skipCache bool, +) (*models.DataSource, error) { cacheKey := fmt.Sprintf("ds-%d", datasourceID) if !skipCache { @@ -43,11 +47,12 @@ func (dc *CacheServiceImpl) GetDatasource(datasourceID int64, user *models.Signe } } - query := models.GetDataSourceByIdQuery{Id: datasourceID, OrgId: user.OrgId} - if err := dc.Bus.Dispatch(&query); err != nil { + plog.Debug("Querying for data source via SQL store", "id", datasourceID, "orgId", user.OrgId) + ds, err := dc.SQLStore.GetDataSourceByID(datasourceID, user.OrgId) + if err != nil { return nil, err } - dc.CacheService.Set(cacheKey, query.Result, time.Second*5) - return query.Result, nil + dc.CacheService.Set(cacheKey, ds, time.Second*5) + return ds, nil } diff --git a/pkg/services/datasources/log.go b/pkg/services/datasources/log.go new file mode 100644 index 00000000000..c70321d9510 --- /dev/null +++ b/pkg/services/datasources/log.go @@ -0,0 +1,9 @@ +package datasources + +import ( + "github.com/grafana/grafana/pkg/infra/log" +) + +var ( + plog = log.New("datasources") +) diff --git a/pkg/services/sqlstore/datasource.go b/pkg/services/sqlstore/datasource.go index 2c0ebe68c0c..bcf3b959cfb 100644 --- a/pkg/services/sqlstore/datasource.go +++ b/pkg/services/sqlstore/datasource.go @@ -27,20 +27,31 @@ func init() { bus.AddHandler("sql", GetDataSourceByName) } -func GetDataSourceById(query *models.GetDataSourceByIdQuery) error { +func getDataSourceByID(id, orgID int64, engine *xorm.Engine) (*models.DataSource, error) { metrics.MDBDataSourceQueryByID.Inc() - datasource := models.DataSource{OrgId: query.OrgId, Id: query.Id} - has, err := x.Get(&datasource) + datasource := models.DataSource{OrgId: orgID, Id: id} + has, err := engine.Get(&datasource) if err != nil { - return err + sqlog.Error("Failed getting data source", "err", err, "id", id, "orgId", orgID) + return nil, err } - if !has { - return models.ErrDataSourceNotFound + sqlog.Debug("Failed to find data source", "id", id, "orgId", orgID) + return nil, models.ErrDataSourceNotFound } - query.Result = &datasource + return &datasource, nil +} + +func (ss *SqlStore) GetDataSourceByID(id, orgID int64) (*models.DataSource, error) { + return getDataSourceByID(id, orgID, ss.engine) +} + +func GetDataSourceById(query *models.GetDataSourceByIdQuery) error { + ds, err := getDataSourceByID(query.Id, query.OrgId, x) + query.Result = ds + return err } diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go index c1f16eefb45..59efd4d6680 100644 --- a/pkg/services/sqlstore/sqlstore.go +++ b/pkg/services/sqlstore/sqlstore.go @@ -70,7 +70,7 @@ func (ss *SqlStore) Init() error { engine, err := ss.getEngine() if err != nil { - return fmt.Errorf("Fail to connect to database: %v", err) + return errutil.Wrap("failed to connect to database", err) } ss.engine = engine @@ -91,7 +91,7 @@ func (ss *SqlStore) Init() error { } if err := migrator.Start(); err != nil { - return fmt.Errorf("Migration failed err: %v", err) + return errutil.Wrap("migration failed", err) } // Init repo instances