Repository: ambari Updated Branches: refs/heads/trunk 650e9d437 -> c507a1017
AMBARI-8411. Alerts UI: Alert Definitions mapper should remove not existing models (onechiporenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c507a101 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c507a101 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c507a101 Branch: refs/heads/trunk Commit: c507a1017554a34896bbb8bf57fc329ef45df45a Parents: 650e9d4 Author: Oleg Nechiporenko <onechipore...@apache.org> Authored: Fri Nov 21 16:17:03 2014 +0200 Committer: Oleg Nechiporenko <onechipore...@apache.org> Committed: Fri Nov 21 16:17:03 2014 +0200 ---------------------------------------------------------------------- .../app/mappers/alert_definitions_mapper.js | 14 +++++++-- .../app/views/main/alert_definitions_view.js | 8 +++++ .../mappers/alert_definitions_mapper_test.js | 31 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c507a101/ambari-web/app/mappers/alert_definitions_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/alert_definitions_mapper.js b/ambari-web/app/mappers/alert_definitions_mapper.js index 7d38621..66061c7 100644 --- a/ambari-web/app/mappers/alert_definitions_mapper.js +++ b/ambari-web/app/mappers/alert_definitions_mapper.js @@ -73,7 +73,8 @@ App.alertDefinitionsMapper = App.QuickDataMapper.create({ map: function (json) { if (json && json.items) { - var portAlertDefinitions = [], + var self = this, + portAlertDefinitions = [], metricsAlertDefinitions = [], webAlertDefinitions = [], aggregateAlertDefinitions = [], @@ -83,6 +84,7 @@ App.alertDefinitionsMapper = App.QuickDataMapper.create({ alertMetricsUriDefinitions = [], alertGroupsMap = App.cache['previousAlertGroupsMap'], alertDefinitions = App.AlertDefinition.getAllDefinitions(), + alertDefinitionsToDelete = alertDefinitions.mapProperty('id'), rawSourceData = {}; json.items.forEach(function (item) { @@ -117,6 +119,8 @@ App.alertDefinitionsMapper = App.QuickDataMapper.create({ alertDefinition.last_triggered = oldAlertDefinition.get('lastTriggered'); } + alertDefinitionsToDelete = alertDefinitionsToDelete.without(alertDefinition.id); + // map properties dependent on Alert Definition type switch (item.AlertDefinition.source.type) { case 'PORT': @@ -167,6 +171,10 @@ App.alertDefinitionsMapper = App.QuickDataMapper.create({ } }, this); + alertDefinitionsToDelete.forEach(function(definitionId) { + self.deleteRecord(alertDefinitions.findProperty('id', definitionId)); + }); + // load all mapped data to model App.store.loadMany(this.get('reportModel'), alertReportDefinitions); App.store.loadMany(this.get('metricsSourceModel'), alertMetricsSourceDefinitions); @@ -203,7 +211,9 @@ App.alertDefinitionsMapper = App.QuickDataMapper.create({ setAlertDefinitionsRawSourceData: function (rawSourceData) { var allDefinitions = App.AlertDefinition.getAllDefinitions(); for (var alertDefinitionId in rawSourceData) { - allDefinitions.findProperty('id', +alertDefinitionId).set('rawSourceData', rawSourceData[alertDefinitionId]); + if (rawSourceData.hasOwnProperty(alertDefinitionId)) { + allDefinitions.findProperty('id', +alertDefinitionId).set('rawSourceData', rawSourceData[alertDefinitionId]); + } } } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/c507a101/ambari-web/app/views/main/alert_definitions_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/alert_definitions_view.js b/ambari-web/app/views/main/alert_definitions_view.js index 6957caf..e5971a3 100644 --- a/ambari-web/app/views/main/alert_definitions_view.js +++ b/ambari-web/app/views/main/alert_definitions_view.js @@ -202,6 +202,10 @@ App.MainAlertDefinitionsView = App.TableView.extend({ } }), + /** + * Filtering header for <label>alertDefinition</label> groups + * @type {Em.View} + */ alertGroupFilterView: filters.createSelectView({ column: 5, @@ -220,6 +224,8 @@ App.MainAlertDefinitionsView = App.TableView.extend({ * @method updateContent */ updateContent: function() { + var value = this.get('value'); + this.set('content', [ { value: '', @@ -231,6 +237,8 @@ App.MainAlertDefinitionsView = App.TableView.extend({ label: group.get('displayNameDefinitions') }; }))); + + this.set('selected', this.get('content').findProperty('value', value)); }.observes('App.router.clusterController.isLoaded', 'controller.mapperTimestamp'), onChangeValue: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/c507a101/ambari-web/test/mappers/alert_definitions_mapper_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/mappers/alert_definitions_mapper_test.js b/ambari-web/test/mappers/alert_definitions_mapper_test.js index 802fd96..86f4ade 100644 --- a/ambari-web/test/mappers/alert_definitions_mapper_test.js +++ b/ambari-web/test/mappers/alert_definitions_mapper_test.js @@ -201,6 +201,8 @@ describe('App.alertDefinitionsMapper', function () { sinon.stub(App.AggregateAlertDefinition, 'find', function() {return [];}); sinon.stub(App.ScriptAlertDefinition, 'find', function() {return [];}); + sinon.stub(App.alertDefinitionsMapper, 'deleteRecord', Em.K); + sinon.stub(App.store, 'commit', Em.K); sinon.stub(App.store, 'loadMany', function (type, content) { type.content = content; @@ -239,6 +241,8 @@ describe('App.alertDefinitionsMapper', function () { App.AggregateAlertDefinition.find.restore(); App.ScriptAlertDefinition.find.restore(); + App.alertDefinitionsMapper.deleteRecord.restore(); + App.router.get.restore(); App.cache['previousAlertGroupsMap'] = {}; @@ -433,6 +437,33 @@ describe('App.alertDefinitionsMapper', function () { }); + describe('should delete not existing definitions', function () { + + var definitions = [ + Em.Object.create({id: 100500, type: 'PORT'}) + ]; + + beforeEach(function () { + + sinon.stub(App.AlertDefinition, 'getAllDefinitions', function () { + return definitions; + }); + + }); + + afterEach(function() { + App.AlertDefinition.getAllDefinitions.restore(); + }); + + it('should delete PORT alert definition with id 100500', function () { + + App.alertDefinitionsMapper.map(json); + expect(App.alertDefinitionsMapper.deleteRecord.calledOnce).to.be.true; + expect(App.alertDefinitionsMapper.deleteRecord.args[0][0].id).to.equal(100500); + }); + + }); + }); }); \ No newline at end of file