You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ak...@apache.org on 2015/01/06 17:42:41 UTC

ambari git commit: AMBARI-8971. Alerts UI: display Maint Mode status. Additional patch. (akovalenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk c2da10c28 -> 71def630e


AMBARI-8971. Alerts UI: display Maint Mode status. Additional patch. (akovalenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/71def630
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/71def630
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/71def630

Branch: refs/heads/trunk
Commit: 71def630e40093e007782aa0b9f7622f60a2d643
Parents: c2da10c
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Tue Jan 6 18:39:56 2015 +0200
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Tue Jan 6 18:40:40 2015 +0200

----------------------------------------------------------------------
 .../mappers/alert_definition_summary_mapper.js  |  5 +-
 ambari-web/app/models/alert_definition.js       | 48 ++++++++++++++-----
 ambari-web/app/views/common/filter_view.js      |  4 +-
 ambari-web/app/views/common/sort_view.js        |  4 +-
 .../alert_definition_summary_mapper_test.js     | 50 ++++++++++----------
 ambari-web/test/models/alert_definition_test.js | 35 ++++++++------
 .../test/views/common/filter_view_test.js       | 15 ++++--
 ambari-web/test/views/common/sort_view_test.js  | 16 +++----
 8 files changed, 106 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/app/mappers/alert_definition_summary_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/alert_definition_summary_mapper.js b/ambari-web/app/mappers/alert_definition_summary_mapper.js
index 3404f41..0a0fb47 100644
--- a/ambari-web/app/mappers/alert_definition_summary_mapper.js
+++ b/ambari-web/app/mappers/alert_definition_summary_mapper.js
@@ -30,7 +30,10 @@ App.alertDefinitionSummaryMapper = App.QuickDataMapper.create({
         var summary = {},
           timestamp = 0;
         Em.keys(alertDefinitionSummary.summary).forEach(function(status) {
-          summary[status] = alertDefinitionSummary.summary[status].count;
+          summary[status] = {
+            count: alertDefinitionSummary.summary[status].count,
+            maintenanceCount: alertDefinitionSummary.summary[status].maintenance_count
+          };
           if (alertDefinitionSummary.summary[status].original_timestamp > timestamp) {
             timestamp = alertDefinitionSummary.summary[status].original_timestamp;
           }

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/app/models/alert_definition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/alert_definition.js b/ambari-web/app/models/alert_definition.js
index d7e56fb..9f4cd85 100644
--- a/ambari-web/app/models/alert_definition.js
+++ b/ambari-web/app/models/alert_definition.js
@@ -47,10 +47,22 @@ App.AlertDefinition = DS.Model.extend({
    * Format:
    * <code>
    *   {
-   *    "CRITICAL": 1,
-   *    "OK": 1,
-   *    "UNKNOWN": 0,
-   *    "WARN": 0
+   *    "CRITICAL": {
+   *      count: 1,
+   *      maintenanceCount: 0
+   *    },
+   *    "OK": {
+   *      count: 0,
+   *      maintenanceCount: 1
+   *    },
+   *    "UNKNOWN": {
+   *      count: 0,
+   *      maintenanceCount: 0
+   *    },
+   *    "WARN": {
+   *      count: 1,
+   *      maintenanceCount: 1
+   *    }
    *   }
    * </code>
    * @type {object}
@@ -118,21 +130,31 @@ App.AlertDefinition = DS.Model.extend({
         hostCnt = 0,
         self = this;
     order.forEach(function (state) {
-      var cnt = summary[state] ? summary[state] : 0;
+      var cnt = summary[state] ? summary[state].count + summary[state].maintenanceCount : 0;
       hostCnt += cnt;
     });
     if (hostCnt > 1) {
       // multiple hosts
       return order.map(function (state) {
         var shortState = self.get('shortState')[state];
-        return summary[state] ? '<span class="alert-state-single-host label alert-state-' + state + '">' + shortState + ' (' + summary[state] + ')</span>' : null;
-      }).compact().join(' ');
+        var result = '';
+        result += summary[state].count ? '<span class="alert-state-single-host label alert-state-' + state + '">' + shortState + ' (' + summary[state].count + ')</span>' : '';
+        // add status with maintenance mode icon
+        result += summary[state].maintenanceCount ?
+        '<span class="alert-state-single-host label alert-state-PENDING"><span class="icon-medkit"></span> ' + shortState + ' (' + summary[state].maintenanceCount + ')</span>' : '';
+        return result;
+      }).without('').join(' ');
     } else if (hostCnt == 1) {
       // single host, single status
       return order.map(function (state) {
         var shortState = self.get('shortState')[state];
-        return summary[state] ? '<span class="alert-state-single-host label alert-state-' + state + '">' + shortState + '</span>' : null;
-      }).compact().join(' ');
+        var result = '';
+        result += summary[state].count ? '<span class="alert-state-single-host label alert-state-' + state + '">' + shortState + '</span>' : '';
+        // add status with maintenance mode icon
+        result += summary[state].maintenanceCount ?
+        '<span class="alert-state-single-host label alert-state-PENDING"><span class="icon-medkit"></span> ' + shortState + '</span>' : '';
+        return result;
+      }).without('').join(' ');
     } else if (hostCnt == 0) {
       // none
       return '<span class="alert-state-single-host label alert-state-PENDING">NONE</span>';
@@ -167,7 +189,7 @@ App.AlertDefinition = DS.Model.extend({
   isCritical: function () {
     var summary = this.get('summary');
     var state = 'CRITICAL';
-    return !!summary[state];
+    return !!summary[state] && !!(summary[state].count || summary[state].maintenanceCount);
   }.property('summary'),
 
   /**
@@ -177,7 +199,7 @@ App.AlertDefinition = DS.Model.extend({
   isWarning: function () {
     var summary = this.get('summary');
     var state = 'WARNING';
-    return !!summary[state];
+    return !!summary[state] && !!(summary[state].count || summary[state].maintenanceCount);
   }.property('summary'),
 
   /**
@@ -187,7 +209,7 @@ App.AlertDefinition = DS.Model.extend({
   isOK: function () {
     var summary = this.get('summary');
     var state = 'OK';
-    return !!summary[state];
+    return !!summary[state] && !!(summary[state].count || summary[state].maintenanceCount);
   }.property('summary'),
 
   /**
@@ -197,7 +219,7 @@ App.AlertDefinition = DS.Model.extend({
   isUnknown: function () {
     var summary = this.get('summary');
     var state = 'UNKNOWN';
-    return !!summary[state];
+    return !!summary[state] && !!(summary[state].count || summary[state].maintenanceCount);
   }.property('summary'),
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/app/views/common/filter_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/filter_view.js b/ambari-web/app/views/common/filter_view.js
index c353045..137fac4 100644
--- a/ambari-web/app/views/common/filter_view.js
+++ b/ambari-web/app/views/common/filter_view.js
@@ -619,13 +619,13 @@ module.exports = {
           if ('PENDING' === compareValue) {
             var isPending = true;
             Em.keys(origin).forEach(function(state) {
-              if (origin[state] && origin[state] > 0) {
+              if (origin[state] && (origin[state].count > 0 || origin[state].maintenanceCount > 0)) {
                 isPending = false;
               }
             });
             return isPending;
           }
-          return !!origin[compareValue] && origin[compareValue] > 0;
+          return !!origin[compareValue] && (origin[compareValue].count > 0 || origin[compareValue].maintenanceCount > 0);
         };
         break;
       case 'alert_group':

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/app/views/common/sort_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/sort_view.js b/ambari-web/app/views/common/sort_view.js
index b311b0b..b1345fe 100644
--- a/ambari-web/app/views/common/sort_view.js
+++ b/ambari-web/app/views/common/sort_view.js
@@ -177,8 +177,8 @@ var wrapperView = Em.View.extend({
             st_order = a.get('severityOrder'),
             ret = 0;
           for (var i = 0; i < st_order.length; i++) {
-            var a_v = Em.isNone(a_summary[st_order[i]]) ? 0 : a_summary[st_order[i]],
-              b_v = Em.isNone(b_summary[st_order[i]]) ? 0 : b_summary[st_order[i]];
+            var a_v = Em.isNone(a_summary[st_order[i]]) ? 0 : a_summary[st_order[i]].count + a_summary[st_order[i]].maintenanceCount,
+              b_v = Em.isNone(b_summary[st_order[i]]) ? 0 : b_summary[st_order[i]].count + b_summary[st_order[i]].maintenanceCount;
             ret = b_v - a_v;
             if (ret !== 0) {
               break;

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/test/mappers/alert_definition_summary_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/alert_definition_summary_mapper_test.js b/ambari-web/test/mappers/alert_definition_summary_mapper_test.js
index b04b7e3..3a5155e 100644
--- a/ambari-web/test/mappers/alert_definition_summary_mapper_test.js
+++ b/ambari-web/test/mappers/alert_definition_summary_mapper_test.js
@@ -36,46 +36,46 @@ describe('App.alertDefinitionSummaryMapper', function () {
           {
             definition_id: 1,
             summary: {
-              OK: {count: 1, original_timestamp: 1},
-              WARNING: {count: 1, original_timestamp: 2},
-              CRITICAL: {count: 0, original_timestamp: 0},
-              UNKNOWN: {count: 0, original_timestamp: 0}
+              OK: {count: 1, original_timestamp: 1, maintenance_count: 0},
+              WARNING: {count: 1, original_timestamp: 2, maintenance_count: 0},
+              CRITICAL: {count: 0, original_timestamp: 0, maintenance_count: 1},
+              UNKNOWN: {count: 0, original_timestamp: 0, maintenance_count: 0}
             }
           },
           {
             definition_id: 2,
             summary: {
-              OK: {count: 1, original_timestamp: 1},
-              WARNING: {count: 5, original_timestamp: 2},
-              CRITICAL: {count: 1, original_timestamp: 1},
-              UNKNOWN: {count: 1, original_timestamp: 3}
+              OK: {count: 1, original_timestamp: 1, maintenance_count: 0},
+              WARNING: {count: 5, original_timestamp: 2, maintenance_count: 0},
+              CRITICAL: {count: 1, original_timestamp: 1, maintenance_count: 0},
+              UNKNOWN: {count: 1, original_timestamp: 3, maintenance_count: 0}
             }
           },
           {
             definition_id: 3,
             summary: {
-              OK: {count: 1, original_timestamp: 1},
-              WARNING: {count: 2, original_timestamp: 2},
-              CRITICAL: {count: 3, original_timestamp: 4},
-              UNKNOWN: {count: 4, original_timestamp: 3}
+              OK: {count: 1, original_timestamp: 1, maintenance_count: 0},
+              WARNING: {count: 2, original_timestamp: 2, maintenance_count: 2},
+              CRITICAL: {count: 3, original_timestamp: 4, maintenance_count: 0},
+              UNKNOWN: {count: 4, original_timestamp: 3, maintenance_count: 0}
             }
           },
           {
             definition_id: 4,
             summary: {
-              OK: {count: 4, original_timestamp: 1},
-              WARNING: {count: 3, original_timestamp: 2},
-              CRITICAL: {count: 2, original_timestamp: 1},
-              UNKNOWN: {count: 1, original_timestamp: 2}
+              OK: {count: 4, original_timestamp: 1, maintenance_count: 0},
+              WARNING: {count: 3, original_timestamp: 2, maintenance_count: 0},
+              CRITICAL: {count: 2, original_timestamp: 1, maintenance_count: 0},
+              UNKNOWN: {count: 1, original_timestamp: 2, maintenance_count: 0}
             }
           },
           {
             definition_id: 5,
             summary: {
-              OK: {count: 1, original_timestamp: 1},
-              WARNING: {count: 1, original_timestamp: 2},
-              CRITICAL: {count: 1, original_timestamp: 3},
-              UNKNOWN: {count: 1, original_timestamp: 4}
+              OK: {count: 1, original_timestamp: 1, maintenance_count: 0},
+              WARNING: {count: 1, original_timestamp: 2, maintenance_count: 0},
+              CRITICAL: {count: 1, original_timestamp: 3, maintenance_count: 0},
+              UNKNOWN: {count: 1, original_timestamp: 4, maintenance_count: 0}
             }
           }
         ]
@@ -105,19 +105,19 @@ describe('App.alertDefinitionSummaryMapper', function () {
 
       App.alertDefinitionSummaryMapper.map(dataToMap);
       expect(App.PortAlertDefinition.find().findProperty('id', 1).get('lastTriggered')).to.equal(2);
-      expect(App.PortAlertDefinition.find().findProperty('id', 1).get('summary')).to.eql({OK: 1, WARNING: 1, CRITICAL: 0, UNKNOWN: 0});
+      expect(App.PortAlertDefinition.find().findProperty('id', 1).get('summary')).to.eql({OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}, CRITICAL: {count: 0, maintenanceCount: 1}, UNKNOWN: {count: 0, maintenanceCount: 0}});
 
       expect(App.MetricsAlertDefinition.find().findProperty('id', 2).get('lastTriggered')).to.equal(3);
-      expect(App.MetricsAlertDefinition.find().findProperty('id', 2).get('summary')).to.eql({OK: 1, WARNING: 5, CRITICAL: 1, UNKNOWN: 1});
+      expect(App.MetricsAlertDefinition.find().findProperty('id', 2).get('summary')).to.eql({OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 5, maintenanceCount: 0}, CRITICAL: {count: 1, maintenanceCount: 0}, UNKNOWN: {count: 1, maintenanceCount: 0}});
 
       expect(App.WebAlertDefinition.find().findProperty('id', 3).get('lastTriggered')).to.equal(4);
-      expect(App.WebAlertDefinition.find().findProperty('id', 3).get('summary')).to.eql({OK: 1, WARNING: 2, CRITICAL: 3, UNKNOWN: 4});
+      expect(App.WebAlertDefinition.find().findProperty('id', 3).get('summary')).to.eql({OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 2, maintenanceCount: 2}, CRITICAL: {count: 3, maintenanceCount: 0}, UNKNOWN: {count: 4, maintenanceCount: 0}});
 
       expect(App.AggregateAlertDefinition.find().findProperty('id', 4).get('lastTriggered')).to.equal(2);
-      expect(App.AggregateAlertDefinition.find().findProperty('id', 4).get('summary')).to.eql({OK: 4, WARNING: 3, CRITICAL: 2, UNKNOWN: 1});
+      expect(App.AggregateAlertDefinition.find().findProperty('id', 4).get('summary')).to.eql({OK: {count: 4, maintenanceCount: 0}, WARNING: {count: 3, maintenanceCount: 0}, CRITICAL: {count: 2, maintenanceCount: 0}, UNKNOWN: {count: 1, maintenanceCount: 0}});
 
       expect(App.ScriptAlertDefinition.find().findProperty('id', 5).get('lastTriggered')).to.equal(4);
-      expect(App.ScriptAlertDefinition.find().findProperty('id', 5).get('summary')).to.eql({OK: 1, WARNING: 1, CRITICAL: 1, UNKNOWN: 1});
+      expect(App.ScriptAlertDefinition.find().findProperty('id', 5).get('summary')).to.eql({OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}, CRITICAL: {count: 1, maintenanceCount: 0}, UNKNOWN: {count: 1, maintenanceCount: 0}});
 
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/test/models/alert_definition_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/models/alert_definition_test.js b/ambari-web/test/models/alert_definition_test.js
index a5278a0..438f0c9 100644
--- a/ambari-web/test/models/alert_definition_test.js
+++ b/ambari-web/test/models/alert_definition_test.js
@@ -34,14 +34,14 @@ describe('App.AlertDefinition', function () {
 
     Em.A([
       {
-        summary: {OK: 1, UNKNOWN: 1, WARNING: 2},
+        summary: {OK: {count: 1, maintenanceCount: 0}, UNKNOWN: {count: 1, maintenanceCount: 0}, WARNING: {count: 2, maintenanceCount: 0}, CRITICAL: {count: 0, maintenanceCount: 0}},
         m: 'No CRITICAL',
         e: '<span class="alert-state-single-host label alert-state-OK">OK (1)</span> ' +
         '<span class="alert-state-single-host label alert-state-WARNING">WARN (2)</span> ' +
         '<span class="alert-state-single-host label alert-state-UNKNOWN">UNKWN (1)</span>'
       },
       {
-        summary: {WARNING: 2, CRITICAL: 3, UNKNOWN: 1, OK: 1},
+        summary: {WARNING: {count: 2, maintenanceCount: 0}, CRITICAL: {count: 3, maintenanceCount: 0}, UNKNOWN: {count: 1, maintenanceCount: 0}, OK: {count: 1, maintenanceCount: 0}},
         m: 'All states exists',
         e: '<span class="alert-state-single-host label alert-state-OK">OK (1)</span> ' +
         '<span class="alert-state-single-host label alert-state-WARNING">WARN (2)</span> ' +
@@ -49,11 +49,16 @@ describe('App.AlertDefinition', function () {
         '<span class="alert-state-single-host label alert-state-UNKNOWN">UNKWN (1)</span>'
       },
       {
-        summary: {OK: 1},
+        summary: {OK: {count: 1, maintenanceCount: 0}, UNKNOWN: {count: 0, maintenanceCount: 0}, WARNING: {count: 0, maintenanceCount: 0}, CRITICAL: {count: 0, maintenanceCount: 0}},
         m: 'Single host',
         e: '<span class="alert-state-single-host label alert-state-OK">OK</span>'
       },
       {
+        summary: {OK: {count: 0, maintenanceCount: 1}, UNKNOWN: {count: 0, maintenanceCount: 0}, WARNING: {count: 0, maintenanceCount: 0}, CRITICAL: {count: 0, maintenanceCount: 0}},
+        m: 'Maintenance OK alert',
+        e: '<span class="alert-state-single-host label alert-state-PENDING"><span class="icon-medkit"></span> OK</span>'
+      },
+      {
         summary: {},
         m: 'Pending',
         e: '<span class="alert-state-single-host label alert-state-PENDING">NONE</span>'
@@ -70,10 +75,10 @@ describe('App.AlertDefinition', function () {
   describe('#isCriticalOrWarning', function () {
 
     Em.A([
-      {summary: {CRITICAL: 1}, e: true},
-      {summary: {WARNING: 1}, e: true},
-      {summary: {OK: 1}, e: false},
-      {summary: {UNKNOWN: 1}, e: false},
+      {summary: {CRITICAL: {count: 1, maintenanceCount: 0}}, e: true},
+      {summary: {WARNING: {count: 1, maintenanceCount: 0}}, e: true},
+      {summary: {OK: {count: 1, maintenanceCount: 0}}, e: false},
+      {summary: {UNKNOWN: {count: 1, maintenanceCount: 0}}, e: false},
       {summary: {}, e: false}
     ]).forEach(function (test, i) {
       it('test ' + (i + 1), function () {
@@ -87,10 +92,10 @@ describe('App.AlertDefinition', function () {
   describe('#isCritical', function () {
 
     Em.A([
-      {summary: {CRITICAL: 1}, e: true},
-      {summary: {WARNING: 1}, e: false},
-      {summary: {OK: 1}, e: false},
-      {summary: {UNKNOWN: 1}, e: false},
+      {summary: {CRITICAL: {count: 1, maintenanceCount: 0}}, e: true},
+      {summary: {WARNING: {count: 1, maintenanceCount: 0}}, e: false},
+      {summary: {OK: {count: 1, maintenanceCount: 0}}, e: false},
+      {summary: {UNKNOWN: {count: 1, maintenanceCount: 0}}, e: false},
       {summary: {}, e: false}
     ]).forEach(function (test, i) {
       it('test ' + (i + 1), function () {
@@ -104,10 +109,10 @@ describe('App.AlertDefinition', function () {
   describe('#isWarning', function () {
 
     Em.A([
-      {summary: {CRITICAL: 1}, e: false},
-      {summary: {WARNING: 1}, e: true},
-      {summary: {OK: 1}, e: false},
-      {summary: {UNKNOWN: 1}, e: false},
+      {summary: {CRITICAL: {count: 1, maintenanceCount: 0}}, e: false},
+      {summary: {WARNING: {count: 1, maintenanceCount: 0}}, e: true},
+      {summary: {OK: {count: 1, maintenanceCount: 0}}, e: false},
+      {summary: {UNKNOWN: {count: 1, maintenanceCount: 0}}, e: false},
       {summary: {}, e: false}
     ]).forEach(function (test, i) {
       it('test ' + (i + 1), function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/test/views/common/filter_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/filter_view_test.js b/ambari-web/test/views/common/filter_view_test.js
index 21f4b01..e5ca1ad 100644
--- a/ambari-web/test/views/common/filter_view_test.js
+++ b/ambari-web/test/views/common/filter_view_test.js
@@ -492,22 +492,27 @@ describe('filters.getFilterByType', function () {
 
     Em.A([
       {
-        origin: {OK: 1},
+        origin: {OK: {count: 1, maintenanceCount: 0}},
         compareValue: 'OK',
         e: true
       },
       {
-        origin: {WARN: 1},
+        origin: {OK: {count: 0, maintenanceCount: 1}},
+        compareValue: 'OK',
+        e: true
+      },
+      {
+        origin: {WARN: {count: 1, maintenanceCount: 0}},
         compareValue: 'OK',
         e: false
       },
       {
-        origin: {WARN: 0},
+        origin: {WARN: {count: 0, maintenanceCount: 0}},
         compareValue: 'WARN',
         e: false
       },
       {
-        origin: {OK: 0, WARN: 0},
+        origin: {OK: {count: 0, maintenanceCount: 0}, WARN: {count: 0, maintenanceCount: 0}},
         compareValue: 'PENDING',
         e: true
       },
@@ -517,7 +522,7 @@ describe('filters.getFilterByType', function () {
         e: true
       },
       {
-        origin: {OK: 1},
+        origin: {OK: {count: 1, maintenanceCount: 0}},
         compareValue: 'PENDING',
         e: false
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/71def630/ambari-web/test/views/common/sort_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/sort_view_test.js b/ambari-web/test/views/common/sort_view_test.js
index aa7739a..0ebf1ba 100644
--- a/ambari-web/test/views/common/sort_view_test.js
+++ b/ambari-web/test/views/common/sort_view_test.js
@@ -31,26 +31,26 @@ describe('#wrapperView', function () {
 
       Em.A([
         {
-          a: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 1}}),
-          b: App.AlertDefinition.createRecord({summary: {WARNING: 1}}),
+          a: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}}}),
+          b: App.AlertDefinition.createRecord({summary: {WARNING: {count: 1, maintenanceCount: 0}}}),
           order: true,
           e: 1
         },
         {
-          a: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 2}}),
-          b: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 1}}),
+          a: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 2, maintenanceCount: 0}}}),
+          b: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}}}),
           order: true,
           e: 1
         },
         {
-          a: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 1}}),
-          b: App.AlertDefinition.createRecord({summary: {WARNING: 1}}),
+          a: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}}}),
+          b: App.AlertDefinition.createRecord({summary: {WARNING: {count: 1, maintenanceCount: 0}}}),
           order: false,
           e: -1
         },
         {
-          a: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 2}}),
-          b: App.AlertDefinition.createRecord({summary: {OK: 1, WARNING: 1}}),
+          a: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 2, maintenanceCount: 0}}}),
+          b: App.AlertDefinition.createRecord({summary: {OK: {count: 1, maintenanceCount: 0}, WARNING: {count: 1, maintenanceCount: 0}}}),
           order: false,
           e: -1
         }