Browse Source

Add options to manage snapshot publishing

shoonoise 10 years ago
parent
commit
b4a2b96e32

+ 6 - 0
conf/defaults.ini

@@ -125,6 +125,12 @@ disable_gravatar = false
 # data source proxy whitelist (ip_or_domain:port seperated by spaces)
 data_source_proxy_whitelist =
 
+[snapshots]
+# snapshot sharing options
+external_enabled = true
+external_snapshot_url = https://snapshots-origin.raintank.io
+external_snapshot_name = Publish to snapshot.raintank.io
+
 #################################### Users ####################################
 [users]
 # disable user signup / registration

+ 6 - 0
conf/sample.ini

@@ -120,6 +120,12 @@
 # data source proxy whitelist (ip_or_domain:port seperated by spaces)
 ;data_source_proxy_whitelist =
 
+[snapshots]
+# snapshot sharing options
+;external_enabled = true
+;external_snapshot_url = https://snapshots-origin.raintank.io
+;external_snapshot_name = Publish to snapshot.raintank.io
+
 #################################### Users ####################################
 [users]
 # disable user signup / registration

+ 1 - 0
pkg/api/api.go

@@ -65,6 +65,7 @@ func Register(r *macaron.Macaron) {
 	r.Post("/api/snapshots/", bind(m.CreateDashboardSnapshotCommand{}), CreateDashboardSnapshot)
 	r.Get("/dashboard/snapshot/*", Index)
 
+	r.Get("/api/snapshot/shared-options/", GetSharingOptions)
 	r.Get("/api/snapshots/:key", GetDashboardSnapshot)
 	r.Get("/api/snapshots-delete/:key", DeleteDashboardSnapshot)
 

+ 8 - 0
pkg/api/dashboard_snapshot.go

@@ -12,6 +12,14 @@ import (
 	"github.com/grafana/grafana/pkg/util"
 )
 
+func GetSharingOptions(c *middleware.Context) {
+	c.JSON(200, util.DynMap{
+		"externalSnapshotURL":  setting.ExternalSnapshotUrl,
+		"externalSnapshotName": setting.ExternalSnapshotName,
+		"externalEnabled":      setting.ExternalEnabled,
+	})
+}
+
 func CreateDashboardSnapshot(c *middleware.Context, cmd m.CreateDashboardSnapshotCommand) {
 	if cmd.External {
 		// external snapshot ref requires key and delete key

+ 11 - 0
pkg/setting/setting.go

@@ -76,6 +76,11 @@ var (
 	EmailCodeValidMinutes int
 	DataProxyWhiteList    map[string]bool
 
+	// Snapshots
+	ExternalSnapshotUrl  string
+	ExternalSnapshotName string
+	ExternalEnabled      bool
+
 	// User settings
 	AllowUserSignUp    bool
 	AllowUserOrgCreate bool
@@ -414,6 +419,12 @@ func NewConfigContext(args *CommandLineArgs) error {
 	CookieRememberName = security.Key("cookie_remember_name").String()
 	DisableGravatar = security.Key("disable_gravatar").MustBool(true)
 
+	// read snapshots settings
+	snapshots := Cfg.Section("snapshots")
+	ExternalSnapshotUrl = snapshots.Key("external_snapshot_url").String()
+	ExternalSnapshotName = snapshots.Key("external_snapshot_name").String()
+	ExternalEnabled = snapshots.Key("external_enabled").MustBool(true)
+
 	//  read data source proxy white list
 	DataProxyWhiteList = make(map[string]bool)
 	for _, hostAndIp := range security.Key("data_source_proxy_whitelist").Strings(" ") {

+ 3 - 4
public/app/features/dashboard/partials/shareModal.html

@@ -107,7 +107,7 @@
 </script>
 
 <script type="text/ng-template" id="shareSnapshot.html">
-	<div class="ng-cloak" ng-cloak ng-controller="ShareSnapshotCtrl">
+	<div class="ng-cloak" ng-cloak ng-controller="ShareSnapshotCtrl" ng-init="init()">
 		<div class="share-modal-big-icon">
 			<i ng-if="loading" class="fa fa-spinner fa-spin"></i>
 			<i ng-if="!loading" class="gf-icon gf-icon-snap-multi"></i>
@@ -175,10 +175,9 @@
 				<i class="fa fa-save"></i>
 				Local Snapshot
 			</button>
-
-			<button class="btn btn-primary btn-large" ng-click="createSnapshot(true)" ng-disabled="loading">
+			<button class="btn btn-primary btn-large" ng-if="externalEnabled" ng-click="createSnapshot(true)" ng-disabled="loading">
 				<i class="fa fa-cloud-upload"></i>
-				Publish to snapshot.raintank.io
+				{{sharingButtonText}}
 			</button>
 		</div>
 

+ 8 - 1
public/app/features/dashboard/shareSnapshotCtrl.js

@@ -29,7 +29,14 @@ function (angular, _) {
       {text: 'Public on the web', value: 3},
     ];
 
-    $scope.externalUrl = '//snapshots-origin.raintank.io';
+    $scope.init = function() {
+      backendSrv.get('/api/snapshot/shared-options').then(function(options) {
+        $scope.externalUrl = options['externalSnapshotURL'];
+        $scope.sharingButtonText = options['externalSnapshotName'];
+        $scope.externalEnabled = options['externalEnabled'];
+      });
+    };
+
     $scope.apiUrl = '/api/snapshots';
 
     $scope.createSnapshot = function(external) {