Co-authored-by: kay delaney <kay@grafana.com> Co-authored-by: Alexandra Vargas <alexa1866@gmail.com>
This commit is contained in:
co-authored by
kay delaney
Alexandra Vargas
parent
b8f9d46328
commit
7880990c5f
@@ -75,7 +75,26 @@ func createExternalDashboardSnapshot(cmd models.CreateDashboardSnapshotCommand)
|
||||
return &createSnapshotResponse, nil
|
||||
}
|
||||
|
||||
// POST /api/snapshots
|
||||
func createOriginalDashboardURL(appURL string, cmd *models.CreateDashboardSnapshotCommand) (string, error) {
|
||||
dashUID := cmd.Dashboard.Get("uid").MustString("")
|
||||
if ok := util.IsValidShortUID(dashUID); !ok {
|
||||
return "", fmt.Errorf("invalid dashboard UID")
|
||||
}
|
||||
|
||||
return fmt.Sprintf("/d/%v", dashUID), nil
|
||||
}
|
||||
|
||||
// swagger:route POST /snapshots snapshots createDashboardSnapshot
|
||||
//
|
||||
// When creating a snapshot using the API, you have to provide the full dashboard payload including the snapshot data. This endpoint is designed for the Grafana UI.
|
||||
//
|
||||
// Snapshot public mode should be enabled or authentication is required.
|
||||
//
|
||||
// Responses:
|
||||
// 200: createDashboardSnapshotResponse
|
||||
// 401: unauthorisedError
|
||||
// 403: forbiddenError
|
||||
// 500: internalServerError
|
||||
func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Response {
|
||||
cmd := models.CreateDashboardSnapshotCommand{}
|
||||
if err := web.Bind(c.Req, &cmd); err != nil {
|
||||
@@ -85,10 +104,14 @@ func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Res
|
||||
cmd.Name = "Unnamed snapshot"
|
||||
}
|
||||
|
||||
var url string
|
||||
var snapshotUrl string
|
||||
cmd.ExternalUrl = ""
|
||||
cmd.OrgId = c.OrgId
|
||||
cmd.UserId = c.UserId
|
||||
originalDashboardURL, err := createOriginalDashboardURL(hs.Cfg.AppURL, &cmd)
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "Invalid app URL", err)
|
||||
}
|
||||
|
||||
if cmd.External {
|
||||
if !setting.ExternalEnabled {
|
||||
@@ -102,7 +125,7 @@ func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Res
|
||||
return nil
|
||||
}
|
||||
|
||||
url = response.Url
|
||||
snapshotUrl = response.Url
|
||||
cmd.Key = response.Key
|
||||
cmd.DeleteKey = response.DeleteKey
|
||||
cmd.ExternalUrl = response.Url
|
||||
@@ -111,6 +134,8 @@ func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Res
|
||||
|
||||
metrics.MApiDashboardSnapshotExternal.Inc()
|
||||
} else {
|
||||
cmd.Dashboard.SetPath([]string{"snapshot", "originalUrl"}, originalDashboardURL)
|
||||
|
||||
if cmd.Key == "" {
|
||||
var err error
|
||||
cmd.Key, err = util.GetRandomString(32)
|
||||
@@ -129,7 +154,7 @@ func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Res
|
||||
}
|
||||
}
|
||||
|
||||
url = setting.ToAbsUrl("dashboard/snapshot/" + cmd.Key)
|
||||
snapshotUrl = setting.ToAbsUrl("dashboard/snapshot/" + cmd.Key)
|
||||
|
||||
metrics.MApiDashboardSnapshotCreate.Inc()
|
||||
}
|
||||
@@ -142,7 +167,7 @@ func (hs *HTTPServer) CreateDashboardSnapshot(c *models.ReqContext) response.Res
|
||||
c.JSON(200, util.DynMap{
|
||||
"key": cmd.Key,
|
||||
"deleteKey": cmd.DeleteKey,
|
||||
"url": url,
|
||||
"url": snapshotUrl,
|
||||
"deleteUrl": setting.ToAbsUrl("api/snapshots-delete/" + cmd.DeleteKey),
|
||||
"id": cmd.Result.Id,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user