Chore: Use context.Context for the get home dashboard API endpoint (#36735)

Use context.Context for the get home dashboard API endpoint.

Ref #36734
pull/36842/head
Marcus Efraimsson 5 years ago committed by GitHub
parent e2c64ae228
commit 11d03f7961
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      pkg/api/dashboard.go
  2. 8
      pkg/api/dashboard_test.go
  3. 2
      pkg/api/index.go
  4. 2
      pkg/services/alerting/eval_context.go
  5. 29
      pkg/services/sqlstore/dashboard.go
  6. 79
      pkg/services/sqlstore/preferences.go
  7. 15
      pkg/services/sqlstore/preferences_test.go
  8. 1
      pkg/services/sqlstore/sqlstore.go

@ -423,7 +423,7 @@ func (hs *HTTPServer) GetHomeDashboard(c *models.ReqContext) response.Response {
prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser}
homePage := hs.Cfg.HomePage
if err := hs.Bus.Dispatch(&prefsQuery); err != nil {
if err := hs.Bus.DispatchCtx(c.Req.Context(), &prefsQuery); err != nil {
return response.Error(500, "Failed to get preferences", err)
}
@ -434,7 +434,7 @@ func (hs *HTTPServer) GetHomeDashboard(c *models.ReqContext) response.Response {
if prefsQuery.Result.HomeDashboardId != 0 {
slugQuery := models.GetDashboardRefByIdQuery{Id: prefsQuery.Result.HomeDashboardId}
err := hs.Bus.Dispatch(&slugQuery)
err := hs.Bus.DispatchCtx(c.Req.Context(), &slugQuery)
if err == nil {
url := models.GetDashboardUrl(slugQuery.Result.Uid, slugQuery.Result.Slug)
dashRedirect := dtos.DashboardRedirect{RedirectUri: url}

@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"io/ioutil"
"net/http"
"path/filepath"
"testing"
@ -25,10 +26,13 @@ import (
"github.com/grafana/grafana/pkg/setting"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/macaron.v1"
)
func TestGetHomeDashboard(t *testing.T) {
req := &models.ReqContext{SignedInUser: &models.SignedInUser{}}
httpReq, err := http.NewRequest(http.MethodGet, "", nil)
require.NoError(t, err)
req := &models.ReqContext{SignedInUser: &models.SignedInUser{}, Context: &macaron.Context{Req: macaron.Request{Request: httpReq}}}
cfg := setting.NewCfg()
cfg.StaticRootPath = "../../public/"
@ -36,7 +40,7 @@ func TestGetHomeDashboard(t *testing.T) {
Cfg: cfg, Bus: bus.New(),
PluginManager: &fakePluginManager{},
}
hs.Bus.AddHandler(func(query *models.GetPreferencesWithDefaultsQuery) error {
hs.Bus.AddHandlerCtx(func(_ context.Context, query *models.GetPreferencesWithDefaultsQuery) error {
query.Result = &models.Preferences{
HomeDashboardId: 0,
}

@ -400,7 +400,7 @@ func (hs *HTTPServer) setIndexViewData(c *models.ReqContext) (*dtos.IndexViewDat
settings["dateFormats"] = hs.Cfg.DateFormats
prefsQuery := models.GetPreferencesWithDefaultsQuery{User: c.SignedInUser}
if err := bus.Dispatch(&prefsQuery); err != nil {
if err := bus.DispatchCtx(c.Req.Context(), &prefsQuery); err != nil {
return nil, err
}
prefs := prefsQuery.Result

@ -108,7 +108,7 @@ func (c *EvalContext) GetDashboardUID() (*models.DashboardRef, error) {
}
uidQuery := &models.GetDashboardRefByIdQuery{Id: c.Rule.DashboardID}
if err := bus.Dispatch(uidQuery); err != nil {
if err := bus.DispatchCtx(c.Ctx, uidQuery); err != nil {
return nil, err
}

@ -33,7 +33,6 @@ func init() {
bus.AddHandler("sql", SearchDashboards)
bus.AddHandler("sql", GetDashboardTags)
bus.AddHandler("sql", GetDashboardSlugById)
bus.AddHandler("sql", GetDashboardUIDById)
bus.AddHandler("sql", GetDashboardsByPluginId)
bus.AddHandler("sql", GetDashboardPermissionsForUser)
bus.AddHandler("sql", GetDashboardsBySlug)
@ -43,6 +42,10 @@ func init() {
prometheus.MustRegister(shadowSearchCounter)
}
func (ss *SQLStore) addDashboardQueryAndCommandHandlers() {
bus.AddHandlerCtx("sql", ss.GetDashboardUIDById)
}
var generateNewUid func() string = util.GenerateShortUID
func (ss *SQLStore) SaveDashboard(cmd models.SaveDashboardCommand) (*models.Dashboard, error) {
@ -623,21 +626,23 @@ func GetDashboardsBySlug(query *models.GetDashboardsBySlugQuery) error {
return nil
}
func GetDashboardUIDById(query *models.GetDashboardRefByIdQuery) error {
var rawSQL = `SELECT uid, slug from dashboard WHERE Id=?`
func (ss *SQLStore) GetDashboardUIDById(ctx context.Context, query *models.GetDashboardRefByIdQuery) error {
return ss.WithDbSession(ctx, func(dbSession *DBSession) error {
var rawSQL = `SELECT uid, slug from dashboard WHERE Id=?`
us := &models.DashboardRef{}
us := &models.DashboardRef{}
exists, err := x.SQL(rawSQL, query.Id).Get(us)
exists, err := dbSession.SQL(rawSQL, query.Id).Get(us)
if err != nil {
return err
} else if !exists {
return models.ErrDashboardNotFound
}
if err != nil {
return err
} else if !exists {
return models.ErrDashboardNotFound
}
query.Result = us
return nil
query.Result = us
return nil
})
}
func getExistingDashboardByIdOrUidForUpdate(sess *DBSession, dash *models.Dashboard, overwrite bool) (bool, error) {

@ -1,6 +1,7 @@
package sqlstore
import (
"context"
"strings"
"time"
@ -10,55 +11,57 @@ import (
func (ss *SQLStore) addPreferencesQueryAndCommandHandlers() {
bus.AddHandler("sql", GetPreferences)
bus.AddHandler("sql", ss.GetPreferencesWithDefaults)
bus.AddHandlerCtx("sql", ss.GetPreferencesWithDefaults)
bus.AddHandler("sql", SavePreferences)
}
func (ss *SQLStore) GetPreferencesWithDefaults(query *models.GetPreferencesWithDefaultsQuery) error {
params := make([]interface{}, 0)
filter := ""
func (ss *SQLStore) GetPreferencesWithDefaults(ctx context.Context, query *models.GetPreferencesWithDefaultsQuery) error {
return ss.WithDbSession(ctx, func(dbSession *DBSession) error {
params := make([]interface{}, 0)
filter := ""
if len(query.User.Teams) > 0 {
filter = "(org_id=? AND team_id IN (?" + strings.Repeat(",?", len(query.User.Teams)-1) + ")) OR "
params = append(params, query.User.OrgId)
for _, v := range query.User.Teams {
params = append(params, v)
if len(query.User.Teams) > 0 {
filter = "(org_id=? AND team_id IN (?" + strings.Repeat(",?", len(query.User.Teams)-1) + ")) OR "
params = append(params, query.User.OrgId)
for _, v := range query.User.Teams {
params = append(params, v)
}
}
}
filter += "(org_id=? AND user_id=? AND team_id=0) OR (org_id=? AND team_id=0 AND user_id=0)"
params = append(params, query.User.OrgId)
params = append(params, query.User.UserId)
params = append(params, query.User.OrgId)
prefs := make([]*models.Preferences, 0)
err := x.Where(filter, params...).
OrderBy("user_id ASC, team_id ASC").
Find(&prefs)
if err != nil {
return err
}
res := &models.Preferences{
Theme: ss.Cfg.DefaultTheme,
Timezone: ss.Cfg.DateFormats.DefaultTimezone,
HomeDashboardId: 0,
}
filter += "(org_id=? AND user_id=? AND team_id=0) OR (org_id=? AND team_id=0 AND user_id=0)"
params = append(params, query.User.OrgId)
params = append(params, query.User.UserId)
params = append(params, query.User.OrgId)
prefs := make([]*models.Preferences, 0)
err := dbSession.Where(filter, params...).
OrderBy("user_id ASC, team_id ASC").
Find(&prefs)
for _, p := range prefs {
if p.Theme != "" {
res.Theme = p.Theme
if err != nil {
return err
}
if p.Timezone != "" {
res.Timezone = p.Timezone
res := &models.Preferences{
Theme: ss.Cfg.DefaultTheme,
Timezone: ss.Cfg.DateFormats.DefaultTimezone,
HomeDashboardId: 0,
}
if p.HomeDashboardId != 0 {
res.HomeDashboardId = p.HomeDashboardId
for _, p := range prefs {
if p.Theme != "" {
res.Theme = p.Theme
}
if p.Timezone != "" {
res.Timezone = p.Timezone
}
if p.HomeDashboardId != 0 {
res.HomeDashboardId = p.HomeDashboardId
}
}
}
query.Result = res
return nil
query.Result = res
return nil
})
}
func GetPreferences(query *models.GetPreferencesQuery) error {

@ -3,6 +3,7 @@
package sqlstore
import (
"context"
"testing"
"github.com/grafana/grafana/pkg/models"
@ -17,7 +18,7 @@ func TestPreferencesDataAccess(t *testing.T) {
ss.Cfg.DateFormats.DefaultTimezone = "UTC"
query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{}}
err := ss.GetPreferencesWithDefaults(query)
err := ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, "light", query.Result.Theme)
require.Equal(t, "UTC", query.Result.Timezone)
@ -31,7 +32,7 @@ func TestPreferencesDataAccess(t *testing.T) {
require.NoError(t, err)
query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 1}}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(4), query.Result.HomeDashboardId)
})
@ -43,7 +44,7 @@ func TestPreferencesDataAccess(t *testing.T) {
require.NoError(t, err)
query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1, UserId: 2}}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(1), query.Result.HomeDashboardId)
})
@ -59,7 +60,7 @@ func TestPreferencesDataAccess(t *testing.T) {
query := &models.GetPreferencesWithDefaultsQuery{
User: &models.SignedInUser{OrgId: 1, Teams: []int64{2, 3}},
}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(3), query.Result.HomeDashboardId)
})
@ -73,7 +74,7 @@ func TestPreferencesDataAccess(t *testing.T) {
require.NoError(t, err)
query := &models.GetPreferencesWithDefaultsQuery{User: &models.SignedInUser{OrgId: 1}}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(1), query.Result.HomeDashboardId)
})
@ -91,7 +92,7 @@ func TestPreferencesDataAccess(t *testing.T) {
query := &models.GetPreferencesWithDefaultsQuery{
User: &models.SignedInUser{OrgId: 1, UserId: 1, Teams: []int64{2, 3}},
}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(4), query.Result.HomeDashboardId)
})
@ -109,7 +110,7 @@ func TestPreferencesDataAccess(t *testing.T) {
query := &models.GetPreferencesWithDefaultsQuery{
User: &models.SignedInUser{OrgId: 1, UserId: 2},
}
err = ss.GetPreferencesWithDefaults(query)
err = ss.GetPreferencesWithDefaults(context.Background(), query)
require.NoError(t, err)
require.Equal(t, int64(1), query.Result.HomeDashboardId)
})

@ -109,6 +109,7 @@ func (ss *SQLStore) Init() error {
ss.addUserQueryAndCommandHandlers()
ss.addAlertNotificationUidByIdHandler()
ss.addPreferencesQueryAndCommandHandlers()
ss.addDashboardQueryAndCommandHandlers()
if err := ss.Reset(); err != nil {
return err

Loading…
Cancel
Save