mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
removes uniqnes check on slug when saving dashboards
This commit is contained in:
parent
6d2a555866
commit
bb3183f6cd
@ -214,7 +214,7 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == m.ErrDashboardWithSameNameExists {
|
if err == m.ErrDashboardWithSameUIDExists {
|
||||||
return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()})
|
return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()})
|
||||||
}
|
}
|
||||||
if err == m.ErrDashboardVersionMismatch {
|
if err == m.ErrDashboardVersionMismatch {
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
ErrDashboardNotFound = errors.New("Dashboard not found")
|
ErrDashboardNotFound = errors.New("Dashboard not found")
|
||||||
ErrDashboardSnapshotNotFound = errors.New("Dashboard snapshot not found")
|
ErrDashboardSnapshotNotFound = errors.New("Dashboard snapshot not found")
|
||||||
ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
|
ErrDashboardWithSameUIDExists = errors.New("A dashboard with the same uid already exists")
|
||||||
ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
|
ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
|
||||||
ErrDashboardTitleEmpty = errors.New("Dashboard title cannot be empty")
|
ErrDashboardTitleEmpty = errors.New("Dashboard title cannot be empty")
|
||||||
ErrDashboardFolderCannotHaveParent = errors.New("A Dashboard Folder cannot be added to another folder")
|
ErrDashboardFolderCannotHaveParent = errors.New("A Dashboard Folder cannot be added to another folder")
|
||||||
@ -116,6 +116,7 @@ func NewDashboardFromJson(data *simplejson.Json) *Dashboard {
|
|||||||
dash.Uid = uid
|
dash.Uid = uid
|
||||||
} else {
|
} else {
|
||||||
dash.Uid = util.GenerateShortUid()
|
dash.Uid = util.GenerateShortUid()
|
||||||
|
dash.Data.Set("uid", dash.Uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
return dash
|
return dash
|
||||||
|
@ -25,7 +25,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
|
|||||||
dash := cmd.GetDashboardModel()
|
dash := cmd.GetDashboardModel()
|
||||||
|
|
||||||
// try get existing dashboard
|
// try get existing dashboard
|
||||||
var existing, sameTitle m.Dashboard
|
var existing m.Dashboard
|
||||||
|
|
||||||
if dash.Id > 0 {
|
if dash.Id > 0 {
|
||||||
dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.Id, dash.OrgId).Get(&existing)
|
dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.Id, dash.OrgId).Get(&existing)
|
||||||
@ -51,19 +51,20 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sameTitleExists, err := sess.Where("org_id=? AND slug=?", dash.OrgId, dash.Slug).Get(&sameTitle)
|
var sameUid m.Dashboard
|
||||||
|
sameUidExists, err := sess.Where("org_id=? AND uid=?", dash.OrgId, dash.Uid).Get(&sameUid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if sameTitleExists {
|
if sameUidExists {
|
||||||
// another dashboard with same name
|
// another dashboard with same uid
|
||||||
if dash.Id != sameTitle.Id {
|
if dash.Id != sameUid.Id {
|
||||||
if cmd.Overwrite {
|
if cmd.Overwrite {
|
||||||
dash.Id = sameTitle.Id
|
dash.Id = sameUid.Id
|
||||||
dash.Version = sameTitle.Version
|
dash.Version = sameUid.Version
|
||||||
} else {
|
} else {
|
||||||
return m.ErrDashboardWithSameNameExists
|
return m.ErrDashboardWithSameUIDExists
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +90,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
|
|||||||
dash.Updated = cmd.UpdatedAt
|
dash.Updated = cmd.UpdatedAt
|
||||||
}
|
}
|
||||||
|
|
||||||
affectedRows, err = sess.MustCols("folder_id", "has_acl").Id(dash.Id).Update(dash)
|
affectedRows, err = sess.MustCols("folder_id", "has_acl").ID(dash.Id).Update(dash)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -207,6 +207,22 @@ func TestDashboardDataAccess(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
err := SaveDashboard(&cmd)
|
err := SaveDashboard(&cmd)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("Should not be able to save dashboard with same uid", func() {
|
||||||
|
cmd := m.SaveDashboardCommand{
|
||||||
|
OrgId: 1,
|
||||||
|
Dashboard: simplejson.NewFromAny(map[string]interface{}{
|
||||||
|
"id": nil,
|
||||||
|
"title": "test dash 23",
|
||||||
|
"uid": "dsfalkjngailuedt",
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
err := SaveDashboard(&cmd)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
err = SaveDashboard(&cmd)
|
||||||
So(err, ShouldNotBeNil)
|
So(err, ShouldNotBeNil)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
|
func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
|
||||||
data["title"] = dashboard.Title
|
data["uid"] = dashboard.Uid
|
||||||
|
|
||||||
saveCmd := m.SaveDashboardCommand{
|
saveCmd := m.SaveDashboardCommand{
|
||||||
OrgId: dashboard.OrgId,
|
OrgId: dashboard.OrgId,
|
||||||
@ -44,12 +44,11 @@ func TestGetDashboardVersion(t *testing.T) {
|
|||||||
|
|
||||||
dashCmd := m.GetDashboardQuery{
|
dashCmd := m.GetDashboardQuery{
|
||||||
OrgId: savedDash.OrgId,
|
OrgId: savedDash.OrgId,
|
||||||
Slug: savedDash.Slug,
|
Uid: savedDash.Uid,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = GetDashboard(&dashCmd)
|
err = GetDashboard(&dashCmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
dashCmd.Result.Data.Del("uid")
|
|
||||||
eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
|
eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
|
||||||
So(eq, ShouldEqual, true)
|
So(eq, ShouldEqual, true)
|
||||||
})
|
})
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"uid": "1MHHlVjzz",
|
||||||
"title": "Nginx Connections",
|
"title": "Nginx Connections",
|
||||||
"revision": 25,
|
"revision": 25,
|
||||||
"schemaVersion": 11,
|
"schemaVersion": 11,
|
||||||
|
@ -16,5 +16,6 @@
|
|||||||
],
|
],
|
||||||
"schemaVersion": 11,
|
"schemaVersion": 11,
|
||||||
"title": "Nginx Connections",
|
"title": "Nginx Connections",
|
||||||
|
"uid": "1MHHlVjzz",
|
||||||
"version": 0
|
"version": 0
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user