Commit 1ae24b36 by Torkel Ödegaard

feat(profiler): fixed issues with frontend perf profiler

parent 2ceb58d0
......@@ -29,6 +29,7 @@ export class GrafanaCtrl {
};
$scope.initDashboard = function(dashboardData, viewScope) {
$scope.appEvent("dashboard-fetch-end", dashboardData);
$controller('DashboardCtrl', { $scope: viewScope }).init(dashboardData);
};
......
......@@ -7,7 +7,6 @@ import angular from 'angular';
export class Profiler {
panelsRendered: number;
enabled: boolean;
panels: any[];
panelsInitCount: any;
timings: any;
digestCounter: any;
......@@ -29,28 +28,21 @@ export class Profiler {
return false;
}, () => {});
$rootScope.$on('refresh', this.refresh.bind(this));
$rootScope.onAppEvent('dashboard-fetched', this.dashboardFetched.bind(this));
$rootScope.onAppEvent('dashboard-initialized', this.dashboardInitialized.bind(this));
$rootScope.onAppEvent('panel-initialized', this.panelInitialized.bind(this));
$rootScope.onAppEvent('refresh', this.refresh.bind(this), $rootScope);
$rootScope.onAppEvent('dashboard-fetch-end', this.dashboardFetched.bind(this), $rootScope);
$rootScope.onAppEvent('dashboard-initialized', this.dashboardInitialized.bind(this), $rootScope);
$rootScope.onAppEvent('panel-initialized', this.panelInitialized.bind(this), $rootScope);
}
refresh() {
this.panels = [];
this.timings.query = 0;
this.timings.render = 0;
setTimeout(() => {
var totalRender = 0;
var totalQuery = 0;
for (let panelTiming of this.panels) {
totalRender += panelTiming.render;
totalQuery += panelTiming.query;
}
console.log('panel count: ' + this.panels.length);
console.log('total query: ' + totalQuery);
console.log('total render: ' + totalRender);
console.log('avg render: ' + totalRender / this.panels.length);
console.log('panel count: ' + this.panelsInitCount);
console.log('total query: ' + this.timings.query);
console.log('total render: ' + this.timings.render);
console.log('avg render: ' + this.timings.render / this.panelsInitCount);
}, 5000);
}
......@@ -60,7 +52,8 @@ export class Profiler {
this.digestCounter = 0;
this.panelsInitCount = 0;
this.panelsRendered = 0;
this.panels = [];
this.timings.query = 0;
this.timings.render = 0;
}
dashboardInitialized() {
......@@ -110,11 +103,8 @@ export class Profiler {
if (this.enabled) {
panelTimings.renderEnd = new Date().getTime();
this.panels.push({
panelId: panelId,
query: panelTimings.queryEnd - panelTimings.queryStart,
render: panelTimings.renderEnd - panelTimings.renderStart,
});
this.timings.query += panelTimings.queryEnd - panelTimings.queryStart;
this.timings.render += panelTimings.renderEnd - panelTimings.renderStart;
}
}
......
......@@ -5,6 +5,7 @@ function (coreModule) {
"use strict";
coreModule.default.controller('LoadDashboardCtrl', function($scope, $routeParams, dashboardLoaderSrv, backendSrv, $location) {
$scope.appEvent("dashboard-fetch-start");
if (!$routeParams.slug) {
backendSrv.get('/api/dashboards/home').then(function(homeDash) {
......
......@@ -47,7 +47,6 @@ function (angular, moment, _, $, kbn, dateMath, impressionStore) {
}
promise.then(function(result) {
$rootScope.appEvent("dashboard-fetched", result.dashboard);
if (result.meta.dashboardNotFound !== true) {
impressionStore.impressions.addDashboardImpression(result.dashboard.id);
......
......@@ -51,7 +51,7 @@ export class DashboardCtrl {
$scope.updateSubmenuVisibility();
$scope.setWindowTitleAndTheme();
$scope.appEvent("dashboard-loaded", $scope.dashboard);
$scope.appEvent("dashboard-initialized", $scope.dashboard);
}).catch(function(err) {
if (err.data && err.data.message) { err.message = err.data.message; }
$scope.appEvent("alert-error", ['Dashboard init failed', 'Template variables could not be initialized: ' + err.message]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment