diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d6c63ee023..b7d233c8237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,10 @@ -# 1.8.0 (2014-09-12) +# 1.8.0 (unreleased) **Fixes** - [Issue #802](https://github.com/grafana/grafana/issues/802). Annotations: Fix when using InfluxDB datasource +- [Issue #795](https://github.com/grafana/grafana/issues/795). Chrome: Fix for display issue in chrome beta & chrome canary when entering edit mode +- [Issue #818](https://github.com/grafana/grafana/issues/818). Graph: Added percent y-axis format +- [Issue #828](https://github.com/grafana/grafana/issues/828). Elasticsearch: saving new dashboard with title equal to slugified url would cause it to deleted. # 1.8.0-RC1 (2014-09-12) @@ -244,7 +247,7 @@ Read this for more info: - More graphite function definitions - Make "ms" axis format include hour, day, weeks, month and year ([Issue #149](https://github.com/grafana/grafana/issues/149)) - Microsecond axis format ([Issue #146](https://github.com/grafana/grafana/issues/146)) -- Specify template paramaters in URL ([Issue #123](https://github.com/grafana/grafana/issues/123)) +- Specify template parameters in URL ([Issue #123](https://github.com/grafana/grafana/issues/123)) ### Fixes - Basic Auth fix ([Issue #152](https://github.com/grafana/grafana/issues/152)) diff --git a/src/app/components/kbn.js b/src/app/components/kbn.js index cefcb42d289..7c61b22c83b 100644 --- a/src/app/components/kbn.js +++ b/src/app/components/kbn.js @@ -531,6 +531,10 @@ function($, _, moment) { return function(val) { return kbn.nanosFormat(val, decimals); }; + case 'percent': + return function(val, axis) { + return kbn.noneFormat(val, axis ? axis.tickDecimals : null) + ' %'; + }; default: return function(val, axis) { return kbn.noneFormat(val, axis ? axis.tickDecimals : null); @@ -563,8 +567,8 @@ function($, _, moment) { kbn.msFormat = function(size, decimals) { // Less than 1 milli, downscale to micro - if (Math.abs(size) < 1) { - return kbn.microsFormat(size * 1000,decimals); + if (size !== 0 && Math.abs(size) < 1) { + return kbn.microsFormat(size * 1000, decimals); } else if (Math.abs(size) < 1000) { return size.toFixed(decimals) + " ms"; @@ -591,7 +595,7 @@ function($, _, moment) { kbn.sFormat = function(size, decimals) { // Less than 1 sec, downscale to milli - if (Math.abs(size) < 1) { + if (size !== 0 && Math.abs(size) < 1) { return kbn.msFormat(size * 1000, decimals); } // Less than 10 min, use seconds @@ -620,7 +624,7 @@ function($, _, moment) { kbn.microsFormat = function(size, decimals) { // Less than 1 micro, downscale to nano - if (Math.abs(size) < 1) { + if (size !== 0 && Math.abs(size) < 1) { return kbn.nanosFormat(size * 1000, decimals); } else if (Math.abs(size) < 1000) { diff --git a/src/app/controllers/all.js b/src/app/controllers/all.js index 4ce2a6f5822..f5b943e36c6 100644 --- a/src/app/controllers/all.js +++ b/src/app/controllers/all.js @@ -1,5 +1,5 @@ define([ - './p_grafanaCtrl', + './pro/grafanaCtrl', './dashboardCtrl', './dashboardNavCtrl', './row', diff --git a/src/app/controllers/dashboardNavCtrl.js b/src/app/controllers/dashboardNavCtrl.js index b6813b7ce19..76ef34f8e92 100644 --- a/src/app/controllers/dashboardNavCtrl.js +++ b/src/app/controllers/dashboardNavCtrl.js @@ -78,7 +78,7 @@ function (angular, _, moment, config, store) { var clone = angular.copy($scope.dashboard); $scope.db.saveDashboard(clone) .then(function(result) { - alertSrv.set('Dashboard Saved', 'Dashboard has been saved as "' + result.title + '"','success', 5000); + alertSrv.set('Dashboard Saved', 'Saved as "' + result.title + '"','success', 3000); if (result.url !== $location.path()) { $location.search({}); @@ -88,7 +88,7 @@ function (angular, _, moment, config, store) { $rootScope.$emit('dashboard-saved', $scope.dashboard); }, function(err) { - alertSrv.set('Save failed', err, 'error',5000); + alertSrv.set('Save failed', err, 'error', 5000); }); }; diff --git a/src/app/controllers/p_grafanaCtrl.js b/src/app/controllers/pro/grafanaCtrl.js similarity index 85% rename from src/app/controllers/p_grafanaCtrl.js rename to src/app/controllers/pro/grafanaCtrl.js index 65bb8745195..a32b4998a41 100644 --- a/src/app/controllers/p_grafanaCtrl.js +++ b/src/app/controllers/pro/grafanaCtrl.js @@ -11,10 +11,8 @@ function (angular, config, _, $, store) { var module = angular.module('grafana.controllers'); module.controller('GrafanaCtrl', function($scope, alertSrv, grafanaVersion, $rootScope) { - $scope.grafanaVersion = grafanaVersion[0] === '@' ? 'master' : grafanaVersion; - $scope.consoleEnabled = store.getBool('grafanaConsole'); - //$scope.showProSideMenu = store.getBool('grafanaProSideMenu'); + $scope.grafana = {}; $rootScope.profilingEnabled = store.getBool('profilingEnabled'); $rootScope.performance = { loadStart: new Date().getTime() }; @@ -25,25 +23,27 @@ function (angular, config, _, $, store) { if ($rootScope.profilingEnabled) { $scope.initProfiling(); } $scope.dashAlerts = alertSrv; - $scope.grafana = { style: 'dark' }; + $scope.grafana.style = 'dark'; + $scope.grafana.sidemenu = store.getBool('grafana.sidemenu'); + + if (window.grafanaBootData.user.login) { + $scope.grafana.user = window.grafanaBootData.user; + } $scope.onAppEvent('logged-out', function() { $scope.showProSideMenu = false; + $scope.grafana.user = {}; }); - $scope.onAppEvent('logged-in', function() { - $scope.showProSideMenu = store.getBool('grafanaProSideMenu'); + $scope.onAppEvent('logged-in', function(evt, user) { + $scope.grafana.sidemenu = store.getBool('grafana.sidemenu'); + $scope.grafana.user = user; }); }; $scope.toggleProSideMenu = function() { - $scope.showProSideMenu = !$scope.showProSideMenu; - store.set('grafanaProSideMenu', $scope.showProSideMenu); - }; - - $scope.toggleConsole = function() { - $scope.consoleEnabled = !$scope.consoleEnabled; - store.set('grafanaConsole', $scope.consoleEnabled); + $scope.grafana.sidemenu = !$scope.grafana.sidemenu; + store.set('grafana.sidemenu', $scope.grafana.sidemenu); }; $rootScope.onAppEvent = function(name, callback) { diff --git a/src/app/controllers/p_loginCtrl.js b/src/app/controllers/pro/loginCtrl.js similarity index 84% rename from src/app/controllers/p_loginCtrl.js rename to src/app/controllers/pro/loginCtrl.js index 793cd357844..814b430c032 100644 --- a/src/app/controllers/p_loginCtrl.js +++ b/src/app/controllers/pro/loginCtrl.js @@ -8,6 +8,7 @@ function (angular) { module.controller('LoginCtrl', function($scope, $http, $location, $routeParams, alertSrv) { $scope.loginModel = {}; + $scope.grafana.sidemenu = false; $scope.init = function() { if ($routeParams.logout) { @@ -20,6 +21,7 @@ function (angular) { alertSrv.set('Logged out!', '', 'success', 3000); $scope.emitAppEvent('logged-out'); + $location.search({}); }, function() { alertSrv.set('Logout failed:', 'Unexpected error', 'error', 3000); @@ -33,8 +35,8 @@ function (angular) { return; } - $http.post('/login', $scope.loginModel).then(function() { - $scope.emitAppEvent('logged-in'); + $http.post('/login', $scope.loginModel).then(function(results) { + $scope.emitAppEvent('logged-in', results.data.user); $location.path('/'); }, function(err) { if (err.status === 401) { diff --git a/src/app/controllers/search.js b/src/app/controllers/search.js index 98e6616f0a4..18b860d0ab5 100644 --- a/src/app/controllers/search.js +++ b/src/app/controllers/search.js @@ -119,9 +119,10 @@ function (angular, _, config, $) { $scope.searchDashboards($scope.query.query); }; - $scope.deleteDashboard = function(id, evt) { + $scope.deleteDashboard = function(dash, evt) { evt.stopPropagation(); - $scope.emitAppEvent('delete-dashboard', { id: id }); + $scope.emitAppEvent('delete-dashboard', { id: dash.id }); + $scope.results.dashboards = _.without($scope.results.dashboards, dash); }; $scope.addMetricToCurrentDashboard = function (metricId) { diff --git a/src/app/dashboards/default.json b/src/app/dashboards/default.json index ab22805f99c..70b907e13da 100644 --- a/src/app/dashboards/default.json +++ b/src/app/dashboards/default.json @@ -17,7 +17,7 @@ "editable": true, "type": "text", "mode": "html", - "content": "
\n \n
", + "content": "
\n \n
", "style": {}, "title": "Welcome to" } diff --git a/src/app/directives/grafanaGraph.js b/src/app/directives/grafanaGraph.js index 15f1556aa62..ee6b0fb7dd7 100755 --- a/src/app/directives/grafanaGraph.js +++ b/src/app/directives/grafanaGraph.js @@ -110,6 +110,11 @@ function (angular, $, kbn, moment, _) { // Populate element var options = { + hooks: { + drawSeries: [function() { + console.log('drawSeries', arguments); + }] + }, legend: { show: false }, series: { stackpercent: panel.stack ? panel.percentage : false, diff --git a/src/app/panels/graph/axisEditor.html b/src/app/panels/graph/axisEditor.html index 6800ee832b9..9380cb99327 100644 --- a/src/app/panels/graph/axisEditor.html +++ b/src/app/panels/graph/axisEditor.html @@ -4,7 +4,7 @@
Left Y Axis
- +
@@ -23,7 +23,7 @@
Right Y Axis
- +
diff --git a/src/app/panels/graph/seriesOverridesCtrl.js b/src/app/panels/graph/seriesOverridesCtrl.js index 4f54c6d0e6f..1b6b1dfc144 100644 --- a/src/app/panels/graph/seriesOverridesCtrl.js +++ b/src/app/panels/graph/seriesOverridesCtrl.js @@ -70,7 +70,7 @@ define([ $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]); $scope.addOverrideOption('Points', 'points', [true, false]); $scope.addOverrideOption('Points Radius', 'pointradius', [1,2,3,4,5]); - $scope.addOverrideOption('Stack', 'stack', [true, false]); + $scope.addOverrideOption('Stack', 'stack', [true, false, 2, 3, 4, 5]); $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]); $scope.addOverrideOption('Z-index', 'zindex', [-1,-2,-3,0,1,2,3]); $scope.updateCurrentOverrides(); diff --git a/src/app/partials/dashboard_topnav.html b/src/app/partials/dashboard_topnav.html index 15ea694058c..b6db19d33aa 100644 --- a/src/app/partials/dashboard_topnav.html +++ b/src/app/partials/dashboard_topnav.html @@ -1,7 +1,10 @@