diff --git a/src/app/app.js b/src/app/app.js
index a1bd1c660b4..edb97cd0cab 100644
--- a/src/app/app.js
+++ b/src/app/app.js
@@ -49,8 +49,7 @@ function (angular, $, _, appLevelRequire, config) {
return module;
};
- app.config(function ($locationProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
- $locationProvider.html5Mode(true);
+ app.config(function($locationProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
// this is how the internet told me to dynamically add modules :/
register_fns.controller = $controllerProvider.register;
register_fns.directive = $compileProvider.directive;
@@ -68,7 +67,16 @@ function (angular, $, _, appLevelRequire, config) {
'pasvaz.bindonce'
];
- var module_types = ['controllers', 'directives', 'factories', 'services', 'filters', 'routes'];
+ var module_types = ['controllers', 'directives', 'factories', 'services', 'filters'];
+
+ if (window.grafanaBackend) {
+ module_types.push('routes');
+ angular.module('grafana.routes.standalone', []);
+ }
+ else {
+ module_types.push('routes.standalone');
+ angular.module('grafana.routes', []);
+ }
_.each(module_types, function (type) {
var module_name = 'grafana.'+type;
@@ -85,6 +93,7 @@ function (angular, $, _, appLevelRequire, config) {
'directives/all',
'filters/all',
'components/partials',
+ 'routes/standalone/all',
'routes/backend/all',
];
diff --git a/src/app/components/require.config.js b/src/app/components/require.config.js
index 9c09b700ac0..0e44d467714 100644
--- a/src/app/components/require.config.js
+++ b/src/app/components/require.config.js
@@ -1,11 +1,10 @@
-/**
- * Bootstrap require with the needed config, then load the app.js module.
- */
+
require.config({
- baseUrl: 'public/app',
+ urlArgs: 'bust=' + (new Date().getTime()),
+ baseUrl: window.grafanaRequireJsBaseUrl,
paths: {
- config: ['components/config'],
+ config: window.grafanaConfigUrl,
settings: 'components/settings',
kbn: 'components/kbn',
store: 'components/store',
@@ -46,7 +45,6 @@ require.config({
modernizr: '../vendor/modernizr-2.6.1',
'bootstrap-tagsinput': '../vendor/tagsinput/bootstrap-tagsinput',
-
},
shim: {
diff --git a/src/app/controllers/grafanaCtrl.js b/src/app/controllers/grafanaCtrl.js
index a50189de5f9..85ba2bbbcaf 100644
--- a/src/app/controllers/grafanaCtrl.js
+++ b/src/app/controllers/grafanaCtrl.js
@@ -11,31 +11,55 @@ 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._ = _;
+ $scope.grafana = {};
+
$rootScope.profilingEnabled = store.getBool('profilingEnabled');
$rootScope.performance = { loadStart: new Date().getTime() };
$scope.init = function() {
+ $scope._ = _;
+
if ($rootScope.profilingEnabled) { $scope.initProfiling(); }
alertSrv.init();
utilSrv.init();
$scope.dashAlerts = alertSrv;
- $scope.grafana = { style: 'dark' };
+ $scope.grafana.style = 'dark';
+
+ if (window.grafanaBackend) {
+ $scope.initBackendFeatures();
+ }
};
- $scope.toggleConsole = function() {
- $scope.consoleEnabled = !$scope.consoleEnabled;
- store.set('grafanaConsole', $scope.consoleEnabled);
+ $scope.initBackendFeatures = function() {
+ $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(evt, user) {
+ $scope.grafana.sidemenu = store.getBool('grafana.sidemenu');
+ $scope.grafana.user = user;
+ });
};
$scope.initDashboard = function(dashboardData, viewScope) {
$controller('DashboardCtrl', { $scope: viewScope }).init(dashboardData);
};
+ $scope.toggleProSideMenu = function() {
+ $scope.grafana.sidemenu = !$scope.grafana.sidemenu;
+ store.set('grafana.sidemenu', $scope.grafana.sidemenu);
+ };
+
$rootScope.onAppEvent = function(name, callback) {
var unbind = $rootScope.$on(name, callback);
this.$on('$destroy', unbind);
@@ -81,8 +105,12 @@ function (angular, config, _, $, store) {
$scope.initProfiling = function() {
var count = 0;
- $scope.$watch(function digestCounter() { count++; }, function() { });
- $scope.onAppEvent('dashboard-loaded', function() {
+ $scope.$watch(function digestCounter() {
+ count++;
+ }, function() {
+ });
+
+ $scope.onAppEvent('setup-dashboard', function() {
count = 0;
setTimeout(function() {
diff --git a/src/app/controllers/pro/grafanaCtrl.js b/src/app/controllers/pro/grafanaCtrl.js
deleted file mode 100644
index 767b328d24d..00000000000
--- a/src/app/controllers/pro/grafanaCtrl.js
+++ /dev/null
@@ -1,133 +0,0 @@
-define([
- 'angular',
- 'config',
- 'lodash',
- 'jquery',
- 'store',
-],
-function (angular, config, _, $, store) {
- "use strict";
-
- 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() };
-
- $scope.init = function() {
- $scope._ = _;
-
- if ($rootScope.profilingEnabled) { $scope.initProfiling(); }
-
- alertSrv.init();
- utilSrv.init();
-
- $scope.dashAlerts = alertSrv;
- $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(evt, user) {
- $scope.grafana.sidemenu = store.getBool('grafana.sidemenu');
- $scope.grafana.user = user;
- });
- };
-
- $scope.initDashboard = function(dashboardData, viewScope) {
- $controller('DashboardCtrl', { $scope: viewScope }).init(dashboardData);
- };
-
- $scope.toggleProSideMenu = function() {
- $scope.grafana.sidemenu = !$scope.grafana.sidemenu;
- store.set('grafana.sidemenu', $scope.grafana.sidemenu);
- };
-
- $rootScope.onAppEvent = function(name, callback) {
- var unbind = $rootScope.$on(name, callback);
- this.$on('$destroy', unbind);
- };
-
- $rootScope.appEvent = function(name, payload) {
- $rootScope.$emit(name, payload);
- };
-
- $rootScope.colors = [
- "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1
- "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2
- "#B7DBAB","#F4D598","#70DBED","#F9BA8F","#F29191","#82B5D8","#E5A8E2","#AEA2E0", //3
- "#629E51","#E5AC0E","#64B0C8","#E0752D","#BF1B00","#0A50A1","#962D82","#614D93", //4
- "#9AC48A","#F2C96D","#65C5DB","#F9934E","#EA6460","#5195CE","#D683CE","#806EB7", //5
- "#3F6833","#967302","#2F575E","#99440A","#58140C","#052B51","#511749","#3F2B5B", //6
- "#E0F9D7","#FCEACA","#CFFAFF","#F9E2D2","#FCE2DE","#BADFF4","#F9D9F9","#DEDAF7" //7
- ];
-
- $scope.getTotalWatcherCount = function() {
- var count = 0;
- var scopes = 0;
- var root = $(document.getElementsByTagName('body'));
-
- var f = function (element) {
- if (element.data().hasOwnProperty('$scope')) {
- scopes++;
- angular.forEach(element.data().$scope.$$watchers, function () {
- count++;
- });
- }
-
- angular.forEach(element.children(), function (childElement) {
- f($(childElement));
- });
- };
-
- f(root);
- $rootScope.performance.scopeCount = scopes;
- return count;
- };
-
- $scope.initProfiling = function() {
- var count = 0;
-
- $scope.$watch(function digestCounter() {
- count++;
- }, function() {
- });
-
- $scope.onAppEvent('setup-dashboard', function() {
- count = 0;
-
- setTimeout(function() {
- console.log("Dashboard::Performance Total Digests: " + count);
- console.log("Dashboard::Performance Total Watchers: " + $scope.getTotalWatcherCount());
- console.log("Dashboard::Performance Total ScopeCount: " + $rootScope.performance.scopeCount);
-
- var timeTaken = $rootScope.performance.allPanelsInitialized - $rootScope.performance.dashboardLoadStart;
- console.log("Dashboard::Performance - All panels initialized in " + timeTaken + " ms");
-
- // measure digest performance
- var rootDigestStart = window.performance.now();
- for (var i = 0; i < 30; i++) {
- $rootScope.$apply();
- }
- console.log("Dashboard::Performance Root Digest " + ((window.performance.now() - rootDigestStart) / 30));
-
- }, 3000);
-
- });
-
- };
-
- $scope.init();
-
- });
-});
diff --git a/src/app/routes/backend/dashboard.js b/src/app/routes/backend/dashboard.js
index 06658d6e449..e5db5f4569b 100644
--- a/src/app/routes/backend/dashboard.js
+++ b/src/app/routes/backend/dashboard.js
@@ -7,7 +7,9 @@ function (angular, store) {
var module = angular.module('grafana.routes');
- module.config(function($routeProvider) {
+ module.config(function($routeProvider, $locationProvider) {
+ $locationProvider.html5Mode(true);
+
$routeProvider
.when('/', {
templateUrl: '/app/partials/dashboard.html',
diff --git a/src/app/routes/standalone/all.js b/src/app/routes/standalone/all.js
index 6edd50369eb..6decef5b530 100644
--- a/src/app/routes/standalone/all.js
+++ b/src/app/routes/standalone/all.js
@@ -13,11 +13,12 @@ function (angular, config, store) {
module.config(function($routeProvider) {
$routeProvider
- .when('/', {
- redirectTo: function() {
- return store.get('grafanaDashboardDefault') || config.default_route;
- }
- });
+ .otherwise({ redirectTo: config.default_route })
+ .when('/', {
+ redirectTo: function() {
+ return store.get('grafanaDashboardDefault') || config.default_route;
+ }
+ });
});
});
diff --git a/src/app/routes/standalone/fromDB.js b/src/app/routes/standalone/fromDB.js
index 4cc75ddc5b5..4b1734f2560 100644
--- a/src/app/routes/standalone/fromDB.js
+++ b/src/app/routes/standalone/fromDB.js
@@ -4,7 +4,7 @@ define([
function (angular) {
"use strict";
- var module = angular.module('grafana.routes');
+ var module = angular.module('grafana.routes.standalone');
module.config(function($routeProvider) {
$routeProvider
diff --git a/src/app/routes/standalone/fromFile.js b/src/app/routes/standalone/fromFile.js
index 82db05480b4..fce9394789a 100644
--- a/src/app/routes/standalone/fromFile.js
+++ b/src/app/routes/standalone/fromFile.js
@@ -7,7 +7,7 @@ define([
function (angular, $, config, _) {
"use strict";
- var module = angular.module('grafana.routes');
+ var module = angular.module('grafana.routes.standalone');
module.config(function($routeProvider) {
$routeProvider
diff --git a/src/app/routes/standalone/fromScript.js b/src/app/routes/standalone/fromScript.js
index b73a49b0cbe..e820dd9531f 100644
--- a/src/app/routes/standalone/fromScript.js
+++ b/src/app/routes/standalone/fromScript.js
@@ -9,7 +9,7 @@ define([
function (angular, $, config, _, kbn, moment) {
"use strict";
- var module = angular.module('grafana.routes');
+ var module = angular.module('grafana.routes.standalone');
module.config(function($routeProvider) {
$routeProvider
diff --git a/src/index.html b/src/index.html
index 84e7787b83d..b4071479a73 100644
--- a/src/index.html
+++ b/src/index.html
@@ -11,6 +11,12 @@
+
+
diff --git a/src/test/specs/pro/soloPanelCtrl-specs.js b/src/test/specs/pro/soloPanelCtrl-specs.js
index 561591ec830..f3460bbba30 100644
--- a/src/test/specs/pro/soloPanelCtrl-specs.js
+++ b/src/test/specs/pro/soloPanelCtrl-specs.js
@@ -1,7 +1,7 @@
define([
- '../helpers',
- 'routes/pro/solo-panel',
- 'services/dashboard/dashboardSrv',
+ 'helpers',
+ 'routes/backend/solo-panel',
+ 'features/dashboard/dashboardSrv',
], function(helpers) {
'use strict';
diff --git a/src/test/test-main.js b/src/test/test-main.js
index 7ff8ea97e13..f3b76b362a7 100644
--- a/src/test/test-main.js
+++ b/src/test/test-main.js
@@ -5,7 +5,7 @@ require.config({
specs: '../test/specs',
mocks: '../test/mocks',
helpers: '../test/specs/helpers',
- config: ['../config', '../config.sample'],
+ config: ['../config', '../config.sample'],
kbn: 'components/kbn',
store: 'components/store',
@@ -114,8 +114,9 @@ require([
angular.module('grafana.services', ['ngRoute', '$strap.directives']);
angular.module('grafana.panels', []);
angular.module('grafana.filters', []);
+ angular.module('grafana.routes', ['ngRoute']);
- var specs = [
+ var specs = [
'specs/lexer-specs',
'specs/parser-specs',
'specs/gfunc-specs',
@@ -136,7 +137,7 @@ require([
'specs/templateValuesSrv-specs',
'specs/kbn-format-specs',
'specs/dashboardSrv-specs',
- 'specs/dashboardViewStateSrv-specs'
+ 'specs/dashboardViewStateSrv-specs',
'specs/pro/soloPanelCtrl-specs',
];