|
|
@@ -1,8 +1,9 @@
|
|
|
define([
|
|
|
'angular',
|
|
|
+ 'lodash',
|
|
|
'moment',
|
|
|
],
|
|
|
-function (angular, moment) {
|
|
|
+function (angular, _, moment) {
|
|
|
'use strict';
|
|
|
|
|
|
var module = angular.module('grafana.controllers');
|
|
|
@@ -14,6 +15,20 @@ function (angular, moment) {
|
|
|
|
|
|
var events = [];
|
|
|
|
|
|
+ var oldLog = console.log;
|
|
|
+ console.log = function (message) {
|
|
|
+ try {
|
|
|
+ if (_.isObject(message)) {
|
|
|
+ message = angular.toJson(message);
|
|
|
+ if (message.length > 50) {
|
|
|
+ message = message.substring(0, 50);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ events.push(new ConsoleEvent('log', message, {}));
|
|
|
+ oldLog.apply(console, arguments);
|
|
|
+ } catch (e) { }
|
|
|
+ };
|
|
|
+
|
|
|
function ConsoleEvent(type, title, data) {
|
|
|
this.type = type;
|
|
|
this.title = title;
|
|
|
@@ -21,17 +36,54 @@ function (angular, moment) {
|
|
|
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)';
|
|
|
+ this.method = data.config.method;
|
|
|
+ this.elapsed = (new Date().getTime() - data.config.$grafana_timestamp) + ' ms';
|
|
|
if (data.config.params && data.config.params.q) {
|
|
|
- this.query = data.config.params.q;
|
|
|
+ this.field2 = data.config.params.q;
|
|
|
+ }
|
|
|
+ if (_.isString(data.config.data)) {
|
|
|
+ this.field2 = data.config.data;
|
|
|
+ }
|
|
|
+ if (data.status !== 200) {
|
|
|
+ this.error = true;
|
|
|
+ this.field3 = data.data;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_.isArray(data.data)) {
|
|
|
+ this.extractTimeseriesInfo(data.data);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- module.config(function($httpProvider) {
|
|
|
- $httpProvider.interceptors.push(function() {
|
|
|
+ ConsoleEvent.prototype.extractTimeseriesInfo = function(series) {
|
|
|
+ if (series.length === 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var points = 0;
|
|
|
+ var ok = false;
|
|
|
+
|
|
|
+ if (series[0].datapoints) {
|
|
|
+ points = _.reduce(series, function(memo, val) {
|
|
|
+ return memo + val.datapoints.length;
|
|
|
+ }, 0);
|
|
|
+ ok = true;
|
|
|
+ }
|
|
|
+ if (series[0].columns) {
|
|
|
+ points = _.reduce(series, function(memo, val) {
|
|
|
+ return memo + val.points.length;
|
|
|
+ }, 0);
|
|
|
+ ok = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ok) {
|
|
|
+ this.field1 = '(' + series.length + ' series';
|
|
|
+ this.field1 += ', ' + points + ' points)';
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ module.config(function($provide, $httpProvider) {
|
|
|
+ $provide.factory('mupp', function($q) {
|
|
|
return {
|
|
|
'request': function(config) {
|
|
|
if (config.inspect) {
|
|
|
@@ -42,12 +94,22 @@ function (angular, moment) {
|
|
|
'response': function(response) {
|
|
|
if (response.config.inspect) {
|
|
|
events.push(new ConsoleEvent(response.config.inspect.type, response.config.url, response));
|
|
|
- console.log(response);
|
|
|
}
|
|
|
return response;
|
|
|
+ },
|
|
|
+ 'requestError': function(rejection) {
|
|
|
+ console.log('requestError', rejection);
|
|
|
+ return $q.reject(rejection);
|
|
|
+ },
|
|
|
+ 'responseError': function (rejection) {
|
|
|
+ var inspect = rejection.config.inspect || { type: 'error' };
|
|
|
+ events.push(new ConsoleEvent(inspect.type, rejection.config.url, rejection));
|
|
|
+ return $q.reject(rejection);
|
|
|
}
|
|
|
};
|
|
|
});
|
|
|
+
|
|
|
+ $httpProvider.interceptors.push('mupp');
|
|
|
});
|
|
|
|
|
|
module.controller('ConsoleCtrl', function($scope) {
|