mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Dashboard snapshot: more work on snapshot deletion, and saving external reference, #1623
This commit is contained in:
parent
4322f29f34
commit
541cd2e430
@ -13,14 +13,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func CreateDashboardSnapshot(c *middleware.Context, cmd m.CreateDashboardSnapshotCommand) {
|
func CreateDashboardSnapshot(c *middleware.Context, cmd m.CreateDashboardSnapshotCommand) {
|
||||||
cmd.Key = util.GetRandomString(32)
|
|
||||||
cmd.DeleteKey = util.GetRandomString(32)
|
|
||||||
|
|
||||||
if cmd.External {
|
if cmd.External {
|
||||||
|
// external snapshot ref requires key and delete key
|
||||||
|
if cmd.Key != "" && cmd.DeleteKey != "" {
|
||||||
|
c.JsonApiErr(400, "Missing key and delete key for external snapshot", nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
cmd.OrgId = -1
|
cmd.OrgId = -1
|
||||||
cmd.UserId = -1
|
cmd.UserId = -1
|
||||||
metrics.M_Api_Dashboard_Snapshot_External.Inc(1)
|
metrics.M_Api_Dashboard_Snapshot_External.Inc(1)
|
||||||
} else {
|
} else {
|
||||||
|
cmd.Key = util.GetRandomString(32)
|
||||||
|
cmd.DeleteKey = util.GetRandomString(32)
|
||||||
cmd.OrgId = c.OrgId
|
cmd.OrgId = c.OrgId
|
||||||
cmd.UserId = c.UserId
|
cmd.UserId = c.UserId
|
||||||
metrics.M_Api_Dashboard_Snapshot_Create.Inc(1)
|
metrics.M_Api_Dashboard_Snapshot_Create.Inc(1)
|
||||||
@ -78,5 +83,5 @@ func DeleteDashboardSnapshot(c *middleware.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.JSON(200, util.DynMap{"message": "Snapshot deleted. It might take an hour before it is cleared from a CDN cache."})
|
c.JSON(200, util.DynMap{"message": "Snapshot deleted. It might take an hour before it's cleared from a CDN cache."})
|
||||||
}
|
}
|
||||||
|
@ -24,15 +24,16 @@ type DashboardSnapshot struct {
|
|||||||
// COMMANDS
|
// COMMANDS
|
||||||
|
|
||||||
type CreateDashboardSnapshotCommand struct {
|
type CreateDashboardSnapshotCommand struct {
|
||||||
Dashboard map[string]interface{} `json:"dashboard" binding:"Required"`
|
Dashboard map[string]interface{} `json:"dashboard" binding:"Required"`
|
||||||
External bool `json:"external"`
|
Expires int64 `json:"expires"`
|
||||||
ExternalUrl string `json:"externalUrl"`
|
|
||||||
Expires int64 `json:"expires"`
|
|
||||||
|
|
||||||
OrgId int64 `json:"-"`
|
// these are passed when storing an external snapshot ref
|
||||||
UserId int64 `json:"-"`
|
External bool `json:"external"`
|
||||||
Key string `json:"-"`
|
Key string `json:"key"`
|
||||||
DeleteKey string `json:"-"`
|
DeleteKey string `json:"deleteKey"`
|
||||||
|
|
||||||
|
OrgId int64 `json:"-"`
|
||||||
|
UserId int64 `json:"-"`
|
||||||
|
|
||||||
Result *DashboardSnapshot
|
Result *DashboardSnapshot
|
||||||
}
|
}
|
||||||
|
@ -24,16 +24,15 @@ func CreateDashboardSnapshot(cmd *m.CreateDashboardSnapshotCommand) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
snapshot := &m.DashboardSnapshot{
|
snapshot := &m.DashboardSnapshot{
|
||||||
Key: cmd.Key,
|
Key: cmd.Key,
|
||||||
DeleteKey: cmd.DeleteKey,
|
DeleteKey: cmd.DeleteKey,
|
||||||
OrgId: cmd.OrgId,
|
OrgId: cmd.OrgId,
|
||||||
UserId: cmd.UserId,
|
UserId: cmd.UserId,
|
||||||
External: cmd.External,
|
External: cmd.External,
|
||||||
ExternalUrl: cmd.ExternalUrl,
|
Dashboard: cmd.Dashboard,
|
||||||
Dashboard: cmd.Dashboard,
|
Expires: expires,
|
||||||
Expires: expires,
|
Created: time.Now(),
|
||||||
Created: time.Now(),
|
Updated: time.Now(),
|
||||||
Updated: time.Now(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := sess.Insert(snapshot)
|
_, err := sess.Insert(snapshot)
|
||||||
|
@ -29,6 +29,9 @@ function (angular, _) {
|
|||||||
{text: 'Public on the web', value: 3},
|
{text: 'Public on the web', value: 3},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$scope.externalUrl = 'http://snapshots-origin.raintank.io';
|
||||||
|
$scope.apiUrl = '/api/snapshots';
|
||||||
|
|
||||||
$scope.createSnapshot = function(external) {
|
$scope.createSnapshot = function(external) {
|
||||||
$scope.dashboard.snapshot = {
|
$scope.dashboard.snapshot = {
|
||||||
timestamp: new Date()
|
timestamp: new Date()
|
||||||
@ -71,21 +74,18 @@ function (angular, _) {
|
|||||||
|
|
||||||
var cmdData = {
|
var cmdData = {
|
||||||
dashboard: dash,
|
dashboard: dash,
|
||||||
external: external === true,
|
|
||||||
expires: $scope.snapshot.expires,
|
expires: $scope.snapshot.expires,
|
||||||
};
|
};
|
||||||
|
|
||||||
var apiUrl = '/api/snapshots/';
|
var postUrl = external ? $scope.externalUrl + $scope.apiUrl : $scope.apiUrl;
|
||||||
if (external) {
|
|
||||||
apiUrl = "http://snapshots-origin.raintank.io/api/snapshots";
|
|
||||||
}
|
|
||||||
|
|
||||||
backendSrv.post(apiUrl, cmdData).then(function(results) {
|
backendSrv.post(postUrl, cmdData).then(function(results) {
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
|
|
||||||
if (external) {
|
if (external) {
|
||||||
$scope.deleteUrl = results.deleteUrl;
|
$scope.deleteUrl = results.deleteUrl;
|
||||||
$scope.snapshotUrl = results.url;
|
$scope.snapshotUrl = results.url;
|
||||||
|
$scope.saveExternalSnapshotRef(cmdData, results);
|
||||||
} else {
|
} else {
|
||||||
var baseUrl = $location.absUrl().replace($location.url(), "");
|
var baseUrl = $location.absUrl().replace($location.url(), "");
|
||||||
$scope.snapshotUrl = baseUrl + '/dashboard/snapshot/' + results.key;
|
$scope.snapshotUrl = baseUrl + '/dashboard/snapshot/' + results.key;
|
||||||
@ -98,6 +98,14 @@ function (angular, _) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.saveExternalSnapshotRef = function(cmdData, results) {
|
||||||
|
// save external in local instance as well
|
||||||
|
cmdData.external = true;
|
||||||
|
cmdData.key = results.key;
|
||||||
|
cmdData.delete_key = results.delete_key;
|
||||||
|
backendSrv.post('/api/snapshots/', cmdData);
|
||||||
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user