diff --git a/package.json b/package.json index e95428e903e..f7cd3e36d83 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "grunt-contrib-less": "~0.7.0", "grunt-contrib-requirejs": "~0.4.1", "grunt-contrib-uglify": "~0.2.4", + "grunt-contrib-watch": "^0.6.1", "grunt-filerev": "^0.2.1", "grunt-git-describe": "~2.3.2", "grunt-karma": "~0.8.3", diff --git a/src/app/app.js b/src/app/app.js index d41e54a5bde..973a74ab9e0 100644 --- a/src/app/app.js +++ b/src/app/app.js @@ -51,13 +51,13 @@ function (angular, $, _, appLevelRequire, config) { app.config(function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) { $routeProvider.otherwise({ redirectTo: config.default_route }); - // this is how the internet told me to dynamically add modules :/ register_fns.controller = $controllerProvider.register; register_fns.directive = $compileProvider.directive; register_fns.factory = $provide.factory; register_fns.service = $provide.service; register_fns.filter = $filterProvider.register; + }); var apps_deps = [ diff --git a/src/app/controllers/all.js b/src/app/controllers/all.js index 2857f6c33c6..d3de182589d 100644 --- a/src/app/controllers/all.js +++ b/src/app/controllers/all.js @@ -13,4 +13,5 @@ define([ './playlistCtrl', './inspectCtrl', './opentsdbTargetCtrl', + './console-ctrl', ], function () {}); diff --git a/src/app/controllers/console-ctrl.js b/src/app/controllers/console-ctrl.js new file mode 100644 index 00000000000..313a506545d --- /dev/null +++ b/src/app/controllers/console-ctrl.js @@ -0,0 +1,59 @@ +define([ + 'angular', + 'moment', +], +function (angular, moment) { + 'use strict'; + + var module = angular.module('grafana.controllers'); + var consoleEnabled = window.localStorage && window.localStorage.grafanaConsole === 'true'; + + if (!consoleEnabled) { + return; + } + + var events = []; + + function ConsoleEvent(type, title, data) { + this.type = type; + this.title = title; + this.data = data; + this.time = moment().format('hh:mm:ss'); + + if (data.config) { + this.title = data.config.method + ' ' + this.title; + this.elapsed = new Date().getTime() - data.config.$grafana_timestamp; + this.title = this.title + ' (' + this.elapsed + ' ms)'; + if (data.config.params && data.config.params.q) { + this.query = data.config.params.q; + } + } + } + + module.config(function($httpProvider) { + $httpProvider.interceptors.push(function() { + return { + 'request': function(config) { + if (config.inspect) { + config.$grafana_timestamp = new Date().getTime(); + } + return config; + }, + 'response': function(response) { + if (response.config.inspect) { + events.push(new ConsoleEvent(response.config.inspect.type, response.config.url, response)); + console.log(response); + } + return response; + } + }; + }); + }); + + module.controller('ConsoleCtrl', function($scope) { + + $scope.events = events; + + }); + +}); diff --git a/src/app/controllers/grafanaCtrl.js b/src/app/controllers/grafanaCtrl.js index 8254c02e9d9..eaf3dfd0422 100644 --- a/src/app/controllers/grafanaCtrl.js +++ b/src/app/controllers/grafanaCtrl.js @@ -18,6 +18,13 @@ function (angular, config, _) { $scope.grafana = { style: 'dark' }; + + $scope.consoleEnabled = (window.localStorage && window.localStorage.grafanaConsole === 'true'); + }; + + $scope.toggleConsole = function() { + $scope.consoleEnabled = !$scope.consoleEnabled; + window.localStorage.grafanaConsole = $scope.consoleEnabled ? 'true' : 'false'; }; $rootScope.onAppEvent = function(name, callback) { diff --git a/src/app/partials/console.html b/src/app/partials/console.html new file mode 100644 index 00000000000..4e43d3a1e7d --- /dev/null +++ b/src/app/partials/console.html @@ -0,0 +1,14 @@ +