Преглед на файлове

removes uniqnes check on slug when saving dashboards

bergquist преди 8 години
родител
ревизия
bb3183f6cd

+ 1 - 1
pkg/api/dashboard.go

@@ -214,7 +214,7 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
 	}
 
 	if err != nil {
-		if err == m.ErrDashboardWithSameNameExists {
+		if err == m.ErrDashboardWithSameUIDExists {
 			return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()})
 		}
 		if err == m.ErrDashboardVersionMismatch {

+ 2 - 1
pkg/models/dashboards.go

@@ -16,7 +16,7 @@ import (
 var (
 	ErrDashboardNotFound                 = errors.New("Dashboard 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")
 	ErrDashboardTitleEmpty               = errors.New("Dashboard title cannot be empty")
 	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
 	} else {
 		dash.Uid = util.GenerateShortUid()
+		dash.Data.Set("uid", dash.Uid)
 	}
 
 	return dash

+ 10 - 9
pkg/services/sqlstore/dashboard.go

@@ -25,7 +25,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
 		dash := cmd.GetDashboardModel()
 
 		// try get existing dashboard
-		var existing, sameTitle m.Dashboard
+		var existing m.Dashboard
 
 		if dash.Id > 0 {
 			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 {
 			return err
 		}
 
-		if sameTitleExists {
-			// another dashboard with same name
-			if dash.Id != sameTitle.Id {
+		if sameUidExists {
+			// another dashboard with same uid
+			if dash.Id != sameUid.Id {
 				if cmd.Overwrite {
-					dash.Id = sameTitle.Id
-					dash.Version = sameTitle.Version
+					dash.Id = sameUid.Id
+					dash.Version = sameUid.Version
 				} else {
-					return m.ErrDashboardWithSameNameExists
+					return m.ErrDashboardWithSameUIDExists
 				}
 			}
 		}
@@ -89,7 +90,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
 				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 {

+ 16 - 0
pkg/services/sqlstore/dashboard_test.go

@@ -207,6 +207,22 @@ func TestDashboardDataAccess(t *testing.T) {
 				}
 
 				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)
 			})
 

+ 2 - 3
pkg/services/sqlstore/dashboard_version_test.go

@@ -12,7 +12,7 @@ import (
 )
 
 func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
-	data["title"] = dashboard.Title
+	data["uid"] = dashboard.Uid
 
 	saveCmd := m.SaveDashboardCommand{
 		OrgId:     dashboard.OrgId,
@@ -44,12 +44,11 @@ func TestGetDashboardVersion(t *testing.T) {
 
 			dashCmd := m.GetDashboardQuery{
 				OrgId: savedDash.OrgId,
-				Slug:  savedDash.Slug,
+				Uid:   savedDash.Uid,
 			}
 
 			err = GetDashboard(&dashCmd)
 			So(err, ShouldBeNil)
-			dashCmd.Result.Data.Del("uid")
 			eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
 			So(eq, ShouldEqual, true)
 		})

+ 1 - 0
tests/test-app/dashboards/connections.json

@@ -7,6 +7,7 @@
     }
   ],
 
+  "uid": "1MHHlVjzz",
   "title": "Nginx Connections",
   "revision": 25,
   "schemaVersion": 11,

+ 1 - 0
tests/test-app/dashboards/connections_result.json

@@ -16,5 +16,6 @@
   ],
   "schemaVersion": 11,
   "title": "Nginx Connections",
+  "uid": "1MHHlVjzz",
   "version": 0
 }