diff --git a/.gitignore b/.gitignore index 5ecb68eb64e..9d0b5d840bb 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ config.js # Editor junk *.sublime-workspace *.swp +.idea/ diff --git a/src/app/dashboards/default.json b/src/app/dashboards/default.json index 6c63b98ab5d..ccc96c1cb73 100644 --- a/src/app/dashboards/default.json +++ b/src/app/dashboards/default.json @@ -137,7 +137,7 @@ "loader": { "save_temp": true, "save_temp_ttl_enable": true, - "save_temp_ttl": "30d", + "save_temp_ttl": "30d" }, "refresh": false } diff --git a/src/app/services/influxdb/influxdbDatasource.js b/src/app/services/influxdb/influxdbDatasource.js index abec4f28f69..a778ed3fbfd 100644 --- a/src/app/services/influxdb/influxdbDatasource.js +++ b/src/app/services/influxdb/influxdbDatasource.js @@ -249,11 +249,58 @@ function (angular, _, kbn, InfluxSeries) { }); }; + InfluxDatasource.prototype.saveDashboardTemp = function(dashboard, title) { + var dashboardClone = angular.copy(dashboard); + var tags = dashboardClone.tags.join(','); + title = dashboardClone.title = title ? title : dashboard.title; + var ttl = dashboard.loader.save_temp_ttl; + var ttlLength = ttl.substring(0, ttl.length-1); + var ttlTerm = ttl.substring(ttl.length-1, ttl.length).toLowerCase(); + var expires = Date.now(); + switch(ttlTerm) { + case "m": + expires += ttlLength * 60000; + break; + case "d": + expires += ttlLength * 86400000; + break; + case "w": + expires += ttlLength * 604800000; + break; + default: + throw "Unknown ttl duration format"; + } + + var data = [{ + name: 'grafana.dashboard_' + btoa(title), + columns: ['time', 'sequence_number', 'title', 'tags', 'dashboard', 'expires'], + points: [[1, 1, title, tags, angular.toJson(dashboardClone), expires]] + }]; + + return this._influxRequest('POST', '/series', data).then(function() { + var baseUrl = window.location.href.replace(window.location.hash,''); + var url = baseUrl + "#dashboard/temp/" + title; + return { title: title, url: url }; + }, function(err) { + throw 'Failed to save shared dashboard to InfluxDB: ' + err.data; + }); + }; InfluxDatasource.prototype.getDashboard = function(id) { - return this._seriesQuery('select dashboard from "grafana.dashboard_' + btoa(id) + '"').then(function(results) { + var queryString = 'select dashboard from "grafana.dashboard_' + btoa(id) + '"'; + // hack to check if it is a temp dashboard + if (window.location.href.indexOf('dashboard/temp') > 0) { + var isTemp = true; + queryString = 'select dashboard, expires from "grafana.dashboard_' + btoa(id) + '"'; + } + return this._seriesQuery(queryString).then(function(results) { if (!results || !results.length) { throw "Dashboard not found"; } + var expiresCol = _.indexOf(results[0].columns, 'expires'); + var expiresTime = results[0].points[0][expiresCol]; + if (Date.now() > expiresTime && isTemp) { + throw "Dashboard has expired"; + } var dashCol = _.indexOf(results[0].columns, 'dashboard'); var dashJson = results[0].points[0][dashCol]; return angular.fromJson(dashJson);