Просмотр исходного кода

Dashboard: fix for dashboard schema upgrade during load, ensure that annotation and templating object as a list array, Closes #890

Torkel Ödegaard 11 лет назад
Родитель
Сommit
bc8fd62cff
2 измененных файлов с 32 добавлено и 4 удалено
  1. 10 4
      src/app/services/dashboard/dashboardSrv.js
  2. 22 0
      src/test/specs/dashboardSrv-specs.js

+ 10 - 4
src/app/services/dashboard/dashboardSrv.js

@@ -30,8 +30,8 @@ function (angular, $, kbn, _, moment) {
       this.rows = data.rows || [];
       this.nav = data.nav || [];
       this.time = data.time || { from: 'now-6h', to: 'now' };
-      this.templating = data.templating || { list: [], enable: false };
-      this.annotations = data.annotations || { list: [], enable: false};
+      this.templating = this._ensureListExist(data.templating);
+      this.annotations = this._ensureListExist(data.annotations);
       this.refresh = data.refresh;
       this.version = data.version || 0;
 
@@ -39,11 +39,17 @@ function (angular, $, kbn, _, moment) {
         this.nav.push({ type: 'timepicker' });
       }
 
-      this.updateSchema(data);
+      this._updateSchema(data);
     }
 
     var p = DashboardModel.prototype;
 
+    p._ensureListExist = function (data) {
+      if (!data) { data = {}; }
+      if (!data.list) { data.list = []; }
+      return data;
+    };
+
     p.getNextPanelId = function() {
       var i, j, row, panel, max = 0;
       for (i = 0; i < this.rows.length; i++) {
@@ -115,7 +121,7 @@ function (angular, $, kbn, _, moment) {
       $rootScope.$broadcast('refresh');
     };
 
-    p.updateSchema = function(old) {
+    p._updateSchema = function(old) {
       var i, j, k;
       var oldVersion = this.version;
       var panelUpgrades = [];

+ 22 - 0
src/test/specs/dashboardSrv-specs.js

@@ -178,4 +178,26 @@ define([
 
   });
 
+  describe('when creating dashboard model with missing list for annoations or templating', function() {
+    var model;
+
+    beforeEach(module('grafana.services'));
+    beforeEach(inject(function(dashboardSrv) {
+      model = dashboardSrv.create({
+        annotations: {
+          enable: true,
+        },
+        templating: {
+          enable: true
+        }
+      });
+    }));
+
+    it('should add empty list', function() {
+      expect(model.annotations.list.length).to.be(0);
+      expect(model.templating.list.length).to.be(1);
+    });
+
+  });
+
 });