Pārlūkot izejas kodu

Merge branch 'profiling_in_dev' of https://github.com/mtanda/grafana into mtanda-profiling_in_dev

Torkel Ödegaard 9 gadi atpakaļ
vecāks
revīzija
2a7d2ffccb

+ 1 - 1
public/app/core/components/grafana_app.ts

@@ -17,7 +17,7 @@ export class GrafanaCtrl {
 
       $scope._ = _;
 
-      $rootScope.profilingEnabled = store.getBool('profilingEnabled');
+      $rootScope.profilingEnabled = store.getBool('profilingEnabled') || config.buildInfo.env === 'development';
       $rootScope.performance = { loadStart: new Date().getTime() };
       $rootScope.appSubUrl = config.appSubUrl;
 

+ 8 - 0
public/app/features/dashboard/dashboardCtrl.js

@@ -60,6 +60,14 @@ function (angular, $, config, moment) {
         $scope.updateSubmenuVisibility();
         $scope.setWindowTitleAndTheme();
 
+        if ($scope.profilingEnabled) {
+          $scope.performance.panels = [];
+          $scope.performance.panelCount = 0;
+          $scope.dashboard.rows.forEach(function(row) {
+            $scope.performance.panelCount += row.panels.length;
+          });
+        }
+
         $scope.appEvent("dashboard-loaded", $scope.dashboard);
       }).catch(function(err) {
         if (err.data && err.data.message) { err.message = err.data.message; }

+ 7 - 0
public/app/features/dashboard/viewStateSrv.js

@@ -51,6 +51,13 @@ function (angular, _, $) {
 
       $scope.onAppEvent('panel-initialized', function(evt, payload) {
         self.registerPanel(payload.scope);
+
+        if ($scope.profilingEnabled) {
+          $scope.performance.panelsInitialized++;
+          if ($scope.performance.panelsInitialized === $scope.performance.panelCount) {
+            $scope.performance.allPanelsInitialized = new Date().getTime();
+          }
+        }
       });
 
       this.update(this.getQueryStringState());

+ 0 - 1
public/app/features/panel/metrics_panel_ctrl.ts

@@ -95,7 +95,6 @@ class MetricsPanelCtrl extends PanelCtrl {
   }
 
   setTimeQueryStart() {
-    this.timing = {};
     this.timing.queryStart = new Date().getTime();
   }
 

+ 17 - 0
public/app/features/panel/panel_ctrl.ts

@@ -31,6 +31,7 @@ export class PanelCtrl {
   height: any;
   containerHeight: any;
   events: Emitter;
+  timing: any;
 
   constructor($scope, $injector) {
     this.$injector = $injector;
@@ -38,6 +39,7 @@ export class PanelCtrl {
     this.$timeout = $injector.get('$timeout');
     this.editorTabIndex = 0;
     this.events = new Emitter();
+    this.timing = {};
 
     var plugin = config.panels[this.panel.type];
     if (plugin) {
@@ -58,6 +60,20 @@ export class PanelCtrl {
 
   renderingCompleted() {
     this.$scope.$root.performance.panelsRendered++;
+    this.timing.renderEnd = new Date().getTime();
+    if (this.$scope.$root.profilingEnabled) {
+      this.$scope.$root.performance.panels.push({
+        panelId: this.panel.id,
+        query: this.timing.queryEnd - this.timing.queryStart,
+        render: this.timing.renderEnd - this.timing.renderStart,
+      });
+
+      if (this.$scope.$root.performance.panelsRendered === this.$scope.$root.performance.panelCount) {
+        this.$scope.$root.performance.allPanelsRendered = new Date().getTime();
+        var timeTaken = this.$scope.$root.performance.allPanelsRendered - this.$scope.$root.performance.dashboardLoadStart;
+        console.log("Dashboard::Performance - All panels rendered in " + timeTaken + " ms");
+      }
+    }
   }
 
   refresh() {
@@ -169,6 +185,7 @@ export class PanelCtrl {
     }
 
     this.calculatePanelHeight();
+    this.timing.renderStart = new Date().getTime();
     this.events.emit('render', payload);
   }