From 9fa0a4c9730130e3493bf94b8d14021849b9a13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 27 Jan 2015 07:47:01 +0100 Subject: [PATCH 01/10] Dashboard: fixed scroll isssue in firefox after dashboard import, Closes #1391 --- src/app/directives/dashEditLink.js | 3 ++- src/app/features/graphite/datasource.js | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/directives/dashEditLink.js b/src/app/directives/dashEditLink.js index b0ac97d3423..638b92fface 100644 --- a/src/app/directives/dashEditLink.js +++ b/src/app/directives/dashEditLink.js @@ -48,7 +48,7 @@ function (angular, $) { if (editorScope) { editorScope.dismiss(); } } - scope.onAppEvent("dashboard-loaded", hideEditorPane); + scope.$on("$destroy", hideEditorPane); scope.onAppEvent('hide-dash-editor', hideEditorPane); scope.onAppEvent('show-dash-editor', function(evt, payload) { @@ -65,6 +65,7 @@ function (angular, $) { editorScope = payload.scope ? payload.scope.$new() : scope.$new(); editorScope.dismiss = function() { + console.log('dismiss: '); editorScope.$destroy(); elem.empty(); lastEditor = null; diff --git a/src/app/features/graphite/datasource.js b/src/app/features/graphite/datasource.js index a486250ac74..1b6c5007017 100644 --- a/src/app/features/graphite/datasource.js +++ b/src/app/features/graphite/datasource.js @@ -158,7 +158,6 @@ function (angular, _, $, config, kbn, moment) { date = date.replace('M', 'mon'); return date; } - date = kbn.parseDate(date); } From c0353ab5d82183ec22a050d2d6849e79ada375c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 27 Jan 2015 07:56:23 +0100 Subject: [PATCH 02/10] Graph: fix for legend show/hide toggle, after hiding requires new data fetch to show, Fixes #1393 --- src/app/panels/graph/axisEditor.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/panels/graph/axisEditor.html b/src/app/panels/graph/axisEditor.html index b2c2437e89b..34f624e28e4 100644 --- a/src/app/panels/graph/axisEditor.html +++ b/src/app/panels/graph/axisEditor.html @@ -150,7 +150,7 @@
  • Show  + ng-model="panel.legend.show" ng-checked="panel.legend.show" ng-change="get_data()">
  • From 7e26d7a4bf36def1d4d5d559918b2c384c220d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 09:58:24 +0100 Subject: [PATCH 03/10] Fix to dashboard loading and error handling --- src/app/routes/backend/dashboard.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/routes/backend/dashboard.js b/src/app/routes/backend/dashboard.js index 63e22cd7117..9ce60c10348 100644 --- a/src/app/routes/backend/dashboard.js +++ b/src/app/routes/backend/dashboard.js @@ -45,8 +45,7 @@ function (angular, store) { .then(function(dashboard) { prevDashPath = $location.path(); $scope.initDashboard(dashboard, $scope); - }).then(null, function(err) { - $scope.appEvent('alert-error', ['Load dashboard failed', err]); + }).then(null, function() { $scope.initDashboard({}, $scope); }); From 017eab8dcd182b8c19f65657fc3d46e30545b7ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 10:25:53 +0100 Subject: [PATCH 04/10] Login: only enabled oauth options are now shown on login page --- src/app/components/settings.js | 7 +------ src/app/controllers/loginCtrl.js | 4 ++++ src/app/partials/login.html | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/app/components/settings.js b/src/app/components/settings.js index 9bef2757d9f..3be2292e16a 100644 --- a/src/app/components/settings.js +++ b/src/app/components/settings.js @@ -34,12 +34,7 @@ function (_, crypto) { } }; - // This initializes a new hash on purpose, to avoid adding parameters to - // config.js without providing sane defaults - var settings = {}; - _.each(defaults, function(value, key) { - settings[key] = typeof options[key] !== 'undefined' ? options[key] : defaults[key]; - }); + var settings = _.extend(options, defaults); var parseBasicAuth = function(datasource) { var passwordEnd = datasource.url.indexOf('@'); diff --git a/src/app/controllers/loginCtrl.js b/src/app/controllers/loginCtrl.js index c3696d55124..e6b0f99f867 100644 --- a/src/app/controllers/loginCtrl.js +++ b/src/app/controllers/loginCtrl.js @@ -16,6 +16,10 @@ function (angular, config) { }; $scope.grafana.sidemenu = false; + + $scope.googleAuthEnabled = config.googleAuthEnabled; + $scope.githubAuthEnabled = config.githubAuthEnabled; + $scope.loginMode = true; $scope.submitBtnClass = 'btn-inverse'; $scope.submitBtnText = 'Log in'; diff --git a/src/app/partials/login.html b/src/app/partials/login.html index d96b4d1f952..e57cb2531af 100644 --- a/src/app/partials/login.html +++ b/src/app/partials/login.html @@ -80,11 +80,11 @@
  • +
  • + Sign in +
  • {{item.text}}
  • From a7a8ea307718dd9ca1c855e1bb64c8a8847b44a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 11:39:22 +0100 Subject: [PATCH 07/10] added admin settings view --- src/app/features/admin/adminSettingsCtrl.js | 18 ++++++++++++++++++ src/app/features/admin/partials/settings.html | 11 +++++++++++ src/app/features/all.js | 1 + src/app/routes/backend/all.js | 4 ++++ 4 files changed, 34 insertions(+) create mode 100644 src/app/features/admin/adminSettingsCtrl.js create mode 100644 src/app/features/admin/partials/settings.html diff --git a/src/app/features/admin/adminSettingsCtrl.js b/src/app/features/admin/adminSettingsCtrl.js new file mode 100644 index 00000000000..736e5ce55d2 --- /dev/null +++ b/src/app/features/admin/adminSettingsCtrl.js @@ -0,0 +1,18 @@ +define([ + 'angular', +], +function (angular) { + 'use strict'; + + var module = angular.module('grafana.controllers'); + + module.controller('AdminSettingsCtrl', function($scope) { + + $scope.init = function() { + + }; + + $scope.init(); + + }); +}); diff --git a/src/app/features/admin/partials/settings.html b/src/app/features/admin/partials/settings.html new file mode 100644 index 00000000000..bea1f5fd4c7 --- /dev/null +++ b/src/app/features/admin/partials/settings.html @@ -0,0 +1,11 @@ +
    + +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/src/app/features/all.js b/src/app/features/all.js index de8e1ac3a32..263c3acecb8 100644 --- a/src/app/features/all.js +++ b/src/app/features/all.js @@ -14,5 +14,6 @@ define([ './account/importCtrl', './account/accountCtrl', './admin/adminUsersCtrl', + './admin/adminSettingsCtrl', './grafanaDatasource/datasource', ], function () {}); diff --git a/src/app/routes/backend/all.js b/src/app/routes/backend/all.js index f97ca90ba04..be10fbbdfe6 100644 --- a/src/app/routes/backend/all.js +++ b/src/app/routes/backend/all.js @@ -54,6 +54,10 @@ define([ templateUrl: 'app/features/profile/partials/profile.html', controller : 'ProfileCtrl', }) + .when('/admin/settings', { + templateUrl: 'app/features/admin/partials/settings.html', + controller : 'AdminSettingsCtrl', + }) .when('/admin/users', { templateUrl: 'app/features/admin/partials/users.html', controller : 'AdminUsersCtrl', From cf5595bd64d08d50664ce3bf7f24ea24d828ab90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 14:24:11 +0100 Subject: [PATCH 08/10] mini fix for submenuEnabled being undefined, when initiating a dashboard with empty model --- src/app/features/dashboard/dashboardCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/dashboard/dashboardCtrl.js b/src/app/features/dashboard/dashboardCtrl.js index 0aee19d82e4..c88d6dfa725 100644 --- a/src/app/features/dashboard/dashboardCtrl.js +++ b/src/app/features/dashboard/dashboardCtrl.js @@ -105,7 +105,7 @@ function (angular, $, config, _) { }; $scope.checkFeatureToggles = function() { - $scope.submenuEnabled = $scope.dashboard.templating.enable || $scope.dashboard.annotations.enable; + $scope.submenuEnabled = $scope.dashboard.templating.enable || $scope.dashboard.annotations.enable || false; }; $scope.onDrop = function(panelId, row, dropTarget) { From 25316cbe0e57389f933abb6163a4ed7d01dfff97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 14:25:35 +0100 Subject: [PATCH 09/10] Fixed broken feature: new dashboard button --- src/app/controllers/search.js | 3 ++- src/app/routes/backend/all.js | 10 +++++----- src/app/routes/backend/dashboard.js | 10 +++++++--- src/app/routes/standalone/fromFile.js | 17 ++++++++++++++--- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/app/controllers/search.js b/src/app/controllers/search.js index 3abcf4ec0a3..0b755ccbdb7 100644 --- a/src/app/controllers/search.js +++ b/src/app/controllers/search.js @@ -154,7 +154,8 @@ function (angular, _, config, $) { }; $scope.newDashboard = function() { - $location.url('/dashboard/file/empty.json'); + //$location.path('/dashboard/file/empty.json'); + $location.url('dashboard/new'); }; }); diff --git a/src/app/routes/backend/all.js b/src/app/routes/backend/all.js index be10fbbdfe6..863be089243 100644 --- a/src/app/routes/backend/all.js +++ b/src/app/routes/backend/all.js @@ -20,16 +20,16 @@ define([ controller : 'DashFromDBProvider', reloadOnSearch: false, }) - .when('/dashboard/temp/:id', { - templateUrl: 'app/partials/dashboard.html', - controller : 'DashFromDBProvider', - reloadOnSearch: false, - }) .when('/dashboard/import/:id', { templateUrl: 'app/partials/dashboard.html', controller : 'DashFromImportCtrl', reloadOnSearch: false, }) + .when('/dashboard/new', { + templateUrl: 'app/partials/dashboard.html', + controller : 'NewDashboardCtrl', + reloadOnSearch: false, + }) .when('/account', { templateUrl: 'app/features/account/partials/account.html', controller : 'AccountCtrl', diff --git a/src/app/routes/backend/dashboard.js b/src/app/routes/backend/dashboard.js index 9ce60c10348..919151c2aca 100644 --- a/src/app/routes/backend/dashboard.js +++ b/src/app/routes/backend/dashboard.js @@ -48,18 +48,22 @@ function (angular, store) { }).then(null, function() { $scope.initDashboard({}, $scope); }); - }); module.controller('DashFromImportCtrl', function($scope, $location, alertSrv) { - if (!window.grafanaImportDashboard) { alertSrv.set('Not found', 'Cannot reload page with unsaved imported dashboard', 'warning', 7000); $location.path(''); return; } - $scope.initDashboard(window.grafanaImportDashboard, $scope); }); + module.controller('NewDashboardCtrl', function($scope) { + $scope.initDashboard({ + title: "New dashboard", + rows: [{ height: '250px', panels:[] }] + }, $scope); + }); + }); diff --git a/src/app/routes/standalone/fromFile.js b/src/app/routes/standalone/fromFile.js index fce9394789a..0eafa0ed650 100644 --- a/src/app/routes/standalone/fromFile.js +++ b/src/app/routes/standalone/fromFile.js @@ -15,10 +15,16 @@ function (angular, $, config, _) { templateUrl: 'app/partials/dashboard.html', controller : 'DashFromFileProvider', reloadOnSearch: false, + }) + .when('/dashboard/new', { + templateUrl: 'app/partials/dashboard.html', + controller : 'DashFromFileProvider', + reloadOnSearch: false, + newDashboard: true, }); }); - module.controller('DashFromFileProvider', function($scope, $rootScope, $http, $routeParams, alertSrv) { + module.controller('DashFromFileProvider', function($scope, $rootScope, $http, $routeParams, $route) { var renderTemplate = function(json,params) { var _r; @@ -46,12 +52,17 @@ function (angular, $, config, _) { } return result.data; },function() { - alertSrv.set('Error',"Could not load dashboards/"+file+". Please make sure it exists" ,'error'); + $scope.appEvent('alert-error', ["Dashboard load failed", "Could not load dashboards/"+file+". Please make sure it exists"]); return false; }); }; - file_load($routeParams.jsonFile).then(function(result) { + var fileToLoad = $routeParams.jsonFile; + if ($route.current.newDashboard) { + fileToLoad = 'empty.json'; + } + + file_load(fileToLoad).then(function(result) { $scope.initDashboard(result, $scope); }); From 3b5c813be71c4816f3c2ef40e4c1439a8026236f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 29 Jan 2015 12:10:14 +0100 Subject: [PATCH 10/10] worked on user frontend state, state like favorites, etc --- src/app/controllers/grafanaCtrl.js | 24 +++++++------------ .../features/grafanaDatasource/datasource.js | 12 +++++----- src/app/partials/dasheditor.html | 2 +- src/app/services/all.js | 1 + src/app/services/userSrv.js | 24 +++++++++++++++++++ 5 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 src/app/services/userSrv.js diff --git a/src/app/controllers/grafanaCtrl.js b/src/app/controllers/grafanaCtrl.js index 9643328e5a3..8df9b4155d6 100644 --- a/src/app/controllers/grafanaCtrl.js +++ b/src/app/controllers/grafanaCtrl.js @@ -10,17 +10,17 @@ function (angular, config, _, $, store) { var module = angular.module('grafana.controllers'); - module.controller('GrafanaCtrl', function($scope, alertSrv, utilSrv, grafanaVersion, $rootScope, $controller) { - $scope.grafanaVersion = grafanaVersion[0] === '@' ? 'master' : grafanaVersion; - $scope.grafana = {}; - - $rootScope.profilingEnabled = store.getBool('profilingEnabled'); - $rootScope.performance = { loadStart: new Date().getTime() }; - $rootScope.appSubUrl = config.appSubUrl; + module.controller('GrafanaCtrl', function($scope, alertSrv, utilSrv, grafanaVersion, $rootScope, $controller, userSrv) { $scope.init = function() { + $scope.grafana = {}; + $scope.grafana.version = grafanaVersion; $scope._ = _; + $rootScope.profilingEnabled = store.getBool('profilingEnabled'); + $rootScope.performance = { loadStart: new Date().getTime() }; + $rootScope.appSubUrl = config.appSubUrl; + if ($rootScope.profilingEnabled) { $scope.initProfiling(); } alertSrv.init(); @@ -28,16 +28,8 @@ function (angular, config, _, $, store) { $scope.dashAlerts = alertSrv; $scope.grafana.style = 'dark'; - $scope.grafana.user = {}; - - if (window.grafanaBackend) { - $scope.initBackendFeatures(); - } - }; - - $scope.initBackendFeatures = function() { + $scope.grafana.user = userSrv.getSignedInUser(); $scope.grafana.sidemenu = store.getBool('grafana.sidemenu'); - $scope.grafana.user = window.grafanaBootData.user; $scope.onAppEvent('logged-out', function() { $scope.grafana.sidemenu = false; diff --git a/src/app/features/grafanaDatasource/datasource.js b/src/app/features/grafanaDatasource/datasource.js index 329b430985c..b52068e464f 100644 --- a/src/app/features/grafanaDatasource/datasource.js +++ b/src/app/features/grafanaDatasource/datasource.js @@ -18,17 +18,17 @@ function (angular, _, kbn) { this.editorSrc = 'app/features/grafanaDatasource/partials/query.editor.html'; } - GrafanaDatasource.prototype.getDashboard = function(id, isTemp) { - var url = '/dashboard/' + id; + GrafanaDatasource.prototype.getDashboard = function(slug, isTemp) { + var url = '/dashboard/' + slug; if (isTemp) { - url = '/temp/' + id; + url = '/temp/' + slug; } - return backendSrv.get('/api/dashboard/' + id) + return backendSrv.get('/api/dashboard/' + slug) .then(function(data) { - if (data) { - return angular.fromJson(data); + if (data && data.dashboard) { + return data.dashboard; } else { return false; } diff --git a/src/app/partials/dasheditor.html b/src/app/partials/dasheditor.html index fdeb3a4db24..fd94432ba5f 100644 --- a/src/app/partials/dasheditor.html +++ b/src/app/partials/dasheditor.html @@ -96,7 +96,7 @@