You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2017/03/27 16:50:21 UTC
ambari git commit: AMBARI-20588 Remove deprecated code of status
filter on Hosts page. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk 955bc6607 -> 9067dfafb
AMBARI-20588 Remove deprecated code of status filter on Hosts page. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9067dfaf
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9067dfaf
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9067dfaf
Branch: refs/heads/trunk
Commit: 9067dfafb8f68e1fe9a975e142b873f0eb9cc950
Parents: 955bc66
Author: Andrii Tkach <at...@apache.org>
Authored: Mon Mar 27 18:56:22 2017 +0300
Committer: Andrii Tkach <at...@apache.org>
Committed: Mon Mar 27 19:49:04 2017 +0300
----------------------------------------------------------------------
.../controllers/global/cluster_controller.js | 3 -
ambari-web/app/controllers/main/host.js | 8 +-
ambari-web/app/utils/ajax/ajax.js | 4 +-
ambari-web/app/views/main/host.js | 193 +-------------
.../global/cluster_controller_test.js | 7 -
ambari-web/test/controllers/main/host_test.js | 18 +-
ambari-web/test/views/main/host_test.js | 256 ++-----------------
7 files changed, 30 insertions(+), 459 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 21508ab..b24219e 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -197,9 +197,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
}
App.router.get('userSettingsController').getAllUserSettings();
App.router.get('errorsHandlerController').loadErrorLogs();
- var hostsController = App.router.get('mainHostController');
- hostsController.set('isCountersUpdating', true);
- hostsController.updateStatusCounters();
this.loadClusterInfo();
this.restoreUpgradeState();
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/app/controllers/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host.js b/ambari-web/app/controllers/main/host.js
index 05551af..f294b42 100644
--- a/ambari-web/app/controllers/main/host.js
+++ b/ambari-web/app/controllers/main/host.js
@@ -343,7 +343,7 @@ App.MainHostController = Em.ArrayController.extend(App.TableServerMixin, {
if (this.get('isCountersUpdating')) {
App.ajax.send({
- name: 'host.status.counters',
+ name: 'host.status.total_count',
sender: this,
data: {},
success: 'updateStatusCountersSuccessCallback',
@@ -364,12 +364,6 @@ App.MainHostController = Em.ArrayController.extend(App.TableServerMixin, {
*/
updateStatusCountersSuccessCallback: function (data) {
var hostsCountMap = {
- 'HEALTHY': data.Clusters.health_report['Host/host_status/HEALTHY'],
- 'UNHEALTHY': data.Clusters.health_report['Host/host_status/UNHEALTHY'],
- 'ALERT': data.Clusters.health_report['Host/host_status/ALERT'],
- 'UNKNOWN': data.Clusters.health_report['Host/host_status/UNKNOWN'],
- 'health-status-RESTART': data.Clusters.health_report['Host/stale_config'],
- 'health-status-PASSIVE_STATE': data.Clusters.health_report['Host/maintenance_state'],
'TOTAL': data.Clusters.total_hosts
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 0198a63..e8be31c 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -2509,8 +2509,8 @@ var urls = {
};
}
},
- 'host.status.counters': {
- 'real': '/clusters/{clusterName}?fields=Clusters/health_report,Clusters/total_hosts,alerts_summary_hosts&minimal_response=true',
+ 'host.status.total_count': {
+ 'real': '/clusters/{clusterName}?fields=Clusters/total_hosts&minimal_response=true',
'mock': '/data/hosts/HDP2/host_status_counters.json'
},
'host.stack_versions.install': {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/app/views/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index f74e1b1..6a8dcf2 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -197,10 +197,13 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, {
this.addObserver('filteredCount', this, this.updatePaging);
// should show overlay even when filtering has begun before observer was added
this.overlayObserver();
+ this.set('controller.isCountersUpdating', true);
+ this.get('controller').updateStatusCounters();
},
willDestroyElement: function () {
$('.tooltip').remove();
+ this.set('controller.isCountersUpdating', false);
},
onInitialLoad: function () {
@@ -453,196 +456,6 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, {
}),
/**
- * Update <code>hostsCount</code> in every category
- */
- updateHostsCount: function() {
- var hostsCountMap = this.get('controller.hostsCountMap');
-
- this.get('categories').forEach(function(category) {
- var hostsCount = (category.get('healthStatus').trim() === "") ? hostsCountMap['TOTAL'] : hostsCountMap[category.get('healthStatus')];
-
- if (!Em.isNone(hostsCount)) {
- category.set('hostsCount', hostsCount);
- category.set('hasHosts', (hostsCount > 0));
- }
- }, this);
- }.observes('controller.hostsCountMap'),
-
- /**
- * Category view for all hosts
- * @type {Object}
- */
- //@TODO maybe should be separated to two types (basing on <code>isHealthStatus</code>)
- categoryObject: Em.Object.extend({
-
- /**
- * Text used with <code>hostsCount</code> in category label
- * @type {String}
- */
- value: null,
- /**
- * Is category based on host health status
- * @type {bool}
- */
- isHealthStatus: true,
- /**
- * host health status (used if <code>isHealthStatus</code> is true)
- * @type {String}
- */
- healthStatusValue: '',
- /**
- * Should category be displayed on the top of the hosts table
- * @type {bool}
- */
- isVisible: true,
- /**
- * Is category selected now
- * @type {bool}
- */
- isActive: false,
- /**
- * String with path that category should observe
- * @type {String}
- */
- observes: null,
- /**
- * CSS-class for span in the category-link (used if <code>isHealthStatus</code> is false)
- * @type {String}
- */
- class: null,
- /**
- * Associated column number
- * @type {Number}
- */
- column: null,
- /**
- * Type of filter value (string, number, boolean)
- * @type {String}
- */
- type: null,
- /**
- * @type {String|Number|bool}
- */
- filterValue: null,
- /**
- * <code>App.Host</code> property that should be used to calculate <code>hostsCount</code> (used if <code>isHealthStatus</code> is false)
- * @type {String}
- */
- hostProperty: null,
-
- /**
- * Number of host in current category
- * @type {Number}
- */
- hostsCount: 0,
-
- /**
- * Determine if category has hosts
- * @type {bool}
- */
- hasHosts: false,
-
- /**
- * Add "active" class for category span-wrapper if current category is selected
- * @type {String}
- */
- itemClass: Em.computed.ifThenElse('isActive', 'active', ''),
-
- /**
- * Text shown on the right of category icon
- * @type {String}
- */
- label: function () {
- return "%@ (%@)".fmt(this.get('value'), this.get('hostsCount'));
- }.property('hostsCount')
- }),
-
- /**
- * List of categories used to filter hosts
- * @type {Array}
- */
- categories: function () {
- var self = this;
- var category_mocks = require('data/host/categories');
-
- return category_mocks.map(function(category_mock) {
- return self.categoryObject.create(category_mock);
- });
- }.property(),
-
- /**
- * Category for <code>selected</code> property of each App.Host
- */
- selectedCategory: Em.computed.findBy('categories', 'selected', true),
-
- statusFilter: Em.View.extend({
- column: 0,
- categories: [],
- value: null,
- class: "",
- comboBoxLabel: function(){
- var selected = this.get('categories').findProperty('isActive');
- if (!this.get('value') || !selected) {
- return "%@ (%@)".fmt(Em.I18n.t('common.all'), this.get('parentView.totalCount'));
- } else {
- return "%@ (%@)".fmt(selected.get('value'), selected.get('hostsCount'))
- }
- }.property('value', 'parentView.totalCount'),
- /**
- * switch active category label
- */
- onCategoryChange: function () {
- this.get('categories').setEach('isActive', false);
- var selected = this.get('categories').findProperty('healthStatus', this.get('value'));
- selected.set('isActive', true);
- this.set('class', selected.get('class') + ' ' + selected.get('healthClass'));
- }.observes('value'),
-
- showClearFilter: function () {
- var mockEvent = {
- context: this.get('categories').findProperty('healthStatus', this.get('value'))
- };
- this.selectCategory(mockEvent);
- },
- /**
- * Trigger on Category click
- * @param {Object} event
- */
- selectCategory: function(event){
- var category = event.context;
-
- this.set('value', category.get('healthStatus'));
- this.get('parentView').resetFilterByColumns([0, 7, 8, 9]);
- if (category.get('isHealthStatus')) {
- var status = category.get('healthStatus');
- if (!status) {
- // only "All" option has no specific status, just refresh
- this.get('parentView').refresh();
- } else {
- this.get('parentView').updateFilter(0, status, 'string');
- }
- } else {
- this.get('parentView').updateFilter(category.get('column'), category.get('filterValue'), category.get('type'));
- }
- },
-
- /**
- * set value
- * @param {string} value
- */
- setValue: function (value) {
- this.set('value', value);
- },
-
- clearFilter: function() {
- this.get('categories').setEach('isActive', false);
- this.set('value', '');
- this.set('class', '');
- this.showClearFilter();
- }
- }),
-
- /**
* associations between host property and column index
* @type {Array}
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/test/controllers/global/cluster_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index ad6e6f9..e7b71f9 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -856,7 +856,6 @@ describe('App.clusterController', function () {
sinon.stub(App.router.get('mainController'), 'startPolling');
sinon.stub(App.router.get('userSettingsController'), 'getAllUserSettings');
sinon.stub(App.router.get('errorsHandlerController'), 'loadErrorLogs');
- sinon.stub(App.router.get('mainHostController'), 'updateStatusCounters');
sinon.stub(App.router.get('wizardWatcherController'), 'getUser');
sinon.stub(App.db, 'setFilterConditions');
sinon.stub(App.router.get('updateController'), 'updateClusterEnv');
@@ -867,7 +866,6 @@ describe('App.clusterController', function () {
App.router.get('updateController').updateClusterEnv.restore();
App.db.setFilterConditions.restore();
App.router.get('wizardWatcherController').getUser.restore();
- App.router.get('mainHostController').updateStatusCounters.restore();
App.router.get('errorsHandlerController').loadErrorLogs.restore();
App.router.get('userSettingsController').getAllUserSettings.restore();
App.router.get('mainController').startPolling.restore();
@@ -904,11 +902,6 @@ describe('App.clusterController', function () {
expect(App.router.get('errorsHandlerController').loadErrorLogs.calledOnce).to.be.true;
});
- it('updateStatusCounters should be called', function() {
- controller.loadClusterData();
- expect(App.router.get('mainHostController').updateStatusCounters.calledOnce).to.be.true;
- });
-
it('loadClusterInfo should be called', function() {
controller.loadClusterData();
expect(controller.loadClusterInfo.calledOnce).to.be.true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/test/controllers/main/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host_test.js b/ambari-web/test/controllers/main/host_test.js
index f7161d7..ee1e149 100644
--- a/ambari-web/test/controllers/main/host_test.js
+++ b/ambari-web/test/controllers/main/host_test.js
@@ -135,27 +135,19 @@ describe('MainHostController', function () {
it("isCountersUpdating is false", function() {
hostController.set('isCountersUpdating', false);
hostController.updateStatusCounters();
- expect(testHelpers.findAjaxRequest('name', 'host.status.counters')).to.be.undefined;
+ expect(testHelpers.findAjaxRequest('name', 'host.status.total_count')).to.be.undefined;
});
it("isCountersUpdating is true", function() {
hostController.set('isCountersUpdating', true);
hostController.updateStatusCounters();
- expect(testHelpers.findAjaxRequest('name', 'host.status.counters')).to.be.exist;
+ expect(testHelpers.findAjaxRequest('name', 'host.status.total_count')).to.be.exist;
});
});
describe("#updateStatusCountersSuccessCallback()", function() {
var data = {
Clusters: {
- health_report: {
- 'Host/host_status/HEALTHY': 1,
- 'Host/host_status/UNHEALTHY': 2,
- 'Host/host_status/ALERT': 3,
- 'Host/host_status/UNKNOWN': 4,
- 'Host/stale_config': 5,
- 'Host/maintenance_state': 6
- },
total_hosts: 21
}
};
@@ -163,12 +155,6 @@ describe('MainHostController', function () {
it("hostsCountMap should be set", function() {
hostController.updateStatusCountersSuccessCallback(data);
expect(hostController.get('hostsCountMap')).to.be.eql({
- "HEALTHY": 1,
- "UNHEALTHY": 2,
- "ALERT": 3,
- "UNKNOWN": 4,
- "health-status-RESTART": 5,
- "health-status-PASSIVE_STATE": 6,
"TOTAL": 21
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9067dfaf/ambari-web/test/views/main/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/host_test.js b/ambari-web/test/views/main/host_test.js
index 8d66b05..e0eb9bc 100644
--- a/ambari-web/test/views/main/host_test.js
+++ b/ambari-web/test/views/main/host_test.js
@@ -22,7 +22,9 @@ require('views/main/host');
function getView() {
return App.MainHostView.create({
- controller: App.MainHostController.create({
+ pageContent: Em.A([]),
+ controller: Em.Object.create({
+ updateStatusCounters: sinon.spy(),
updater: Em.Object.create({
tableUpdaterMap: {
'Hosts': 'updateHost'
@@ -103,6 +105,25 @@ describe('App.MainHostView', function () {
view.didInsertElement();
expect(view.overlayObserver.calledOnce).to.be.true;
});
+
+ it('isCountersUpdating should be true', function () {
+ view.didInsertElement();
+ expect(view.get('controller.isCountersUpdating')).to.be.true;
+ });
+
+ it('updateStatusCounters should be called', function () {
+ view.didInsertElement();
+ expect(view.get('controller').updateStatusCounters.calledOnce).to.be.true;
+ });
+ });
+
+ describe('#willDestroyElement', function() {
+
+ it("isCountersUpdating should be false", function() {
+ view.set('controller.isCountersUpdating', true);
+ view.willDestroyElement();
+ expect(view.get('controller.isCountersUpdating')).to.be.false;
+ });
});
describe("#onRequestErrorHandler()", function () {
@@ -950,239 +971,6 @@ describe('App.MainHostView', function () {
});
});
- describe("#updateHostsCount()", function () {
-
- it("should update host counter in categories", function() {
- view.reopen({
- categories: [
- Em.Object.create({healthStatus: ''}),
- Em.Object.create({healthStatus: 'HEALTHY'}),
- Em.Object.create({healthStatus: 'UNKNOWN', hostsCount: 0, hasHosts: false})
- ]
- });
- view.set('controller.hostsCountMap', {
- TOTAL: 10,
- HEALTHY: 1
- });
- view.updateHostsCount();
- expect(view.get('categories').mapProperty('hostsCount')).to.be.eql([10, 1, 0]);
- expect(view.get('categories').mapProperty('hasHosts')).to.be.eql([true, true, false]);
- });
- });
-
- describe("#categoryObject", function () {
- var categoryObject;
-
- beforeEach(function() {
- categoryObject = view.get('categoryObject').create();
- });
-
- describe("#label", function () {
-
- it("should return label", function() {
- categoryObject.set('hostsCount', 1);
- categoryObject.set('value', 'val1');
- expect(categoryObject.get('label')).to.be.equal('val1 (1)');
- });
- });
- });
-
- describe("#statusFilter", function () {
- var statusFilter;
-
- beforeEach(function () {
- statusFilter = view.get('statusFilter').create({
- parentView: Em.Object.create({
- resetFilterByColumns: Em.K,
- refresh: Em.K,
- updateFilter: Em.K
- })
- });
- });
-
- describe("#comboBoxLabel", function () {
- beforeEach(function() {
- sinon.stub(statusFilter, 'onCategoryChange');
- });
-
- afterEach(function() {
- statusFilter.onCategoryChange.restore();
- });
-
- var testCases = [
- {
- value: 'val1',
- categories: [Em.Object.create({isActive: true, hostsCount: 1, value: "val1"})],
- totalCount: 10,
- expected: 'val1 (1)'
- },
- {
- value: 'val1',
- categories: [Em.Object.create({isActive: false, hostsCount: 1})],
- totalCount: 10,
- expected: Em.I18n.t('common.all') + ' (10)'
- },
- {
- value: '',
- categories: [],
- totalCount: 10,
- expected: Em.I18n.t('common.all') + ' (10)'
- }
- ];
-
- testCases.forEach(function(test) {
- it("value=" + test.value +
- " categories=" + JSON.stringify(test.categories) +
- " totalCount=" + test.totalCount, function () {
- statusFilter.setProperties({
- value: test.value,
- categories: test.categories
- });
- statusFilter.set('parentView.totalCount', test.totalCount);
- expect(statusFilter.get('comboBoxLabel')).to.be.equal(test.expected);
- });
- });
- });
-
- describe("#onCategoryChange()", function () {
-
- it("should set class", function() {
- statusFilter.setProperties({
- value: 'val1',
- categories: [
- Em.Object.create({
- healthStatus: 'val1',
- class: 'cl1',
- healthClass: 'hcl1'
- })
- ]
- });
- expect(statusFilter.get('class')).to.be.equal('cl1 hcl1');
- expect(statusFilter.get('categories')[0].get('isActive')).to.be.true;
- });
- });
-
- describe("#showClearFilter()", function () {
-
- beforeEach(function() {
- sinon.stub(statusFilter, 'selectCategory');
- sinon.stub(statusFilter, 'onCategoryChange');
- });
-
- afterEach(function() {
- statusFilter.selectCategory.restore();
- statusFilter.onCategoryChange.restore();
- });
-
- it("selectCategory should be called", function() {
- statusFilter.setProperties({
- value: 'val1',
- categories: [
- Em.Object.create({
- healthStatus: 'val1'
- })
- ]
- });
- statusFilter.showClearFilter();
- expect(statusFilter.selectCategory.getCall(0).args).to.be.eql([
- {
- context: Em.Object.create({
- healthStatus: 'val1'
- })
- }
- ]);
- });
- });
-
- describe("#selectCategory()", function () {
- var category = Em.Object.create({
- healthStatus: 'val1',
- column: 1,
- isHealthStatus: false,
- filterValue: 'val1',
- type: 't1'
- });
-
- beforeEach(function() {
- sinon.stub(statusFilter.get('parentView'), 'resetFilterByColumns');
- sinon.stub(statusFilter.get('parentView'), 'refresh');
- sinon.stub(statusFilter.get('parentView'), 'updateFilter');
- sinon.stub(statusFilter, 'onCategoryChange');
- });
-
- afterEach(function() {
- statusFilter.get('parentView').resetFilterByColumns.restore();
- statusFilter.get('parentView').refresh.restore();
- statusFilter.get('parentView').updateFilter.restore();
- statusFilter.onCategoryChange.restore();
- });
-
- it("value should be set", function() {
- statusFilter.selectCategory({context: category});
- expect(statusFilter.get('value')).to.be.equal('val1');
- });
-
- it("resetFilterByColumns should be called", function() {
- statusFilter.selectCategory({context: category});
- expect(statusFilter.get('parentView').resetFilterByColumns.calledWith([0, 7, 8, 9])).to.be.true;
- });
-
- it("updateFilter should be called, isHealthStatus=false", function() {
- category.set('isHealthStatus', false);
- statusFilter.selectCategory({context: category});
- expect(statusFilter.get('parentView').updateFilter.calledWith(1, 'val1', 't1')).to.be.true;
- });
-
- it("updateFilter should be called, isHealthStatus=true", function() {
- category.set('isHealthStatus', true);
- category.set('healthStatus', 'val1');
- statusFilter.selectCategory({context: category});
- expect(statusFilter.get('parentView').updateFilter.calledWith(0, 'val1', 'string')).to.be.true;
- });
-
- it("refresh should be called, isHealthStatus=true", function() {
- category.set('isHealthStatus', true);
- category.set('healthStatus', null);
- statusFilter.selectCategory({context: category});
- expect(statusFilter.get('parentView').refresh.calledOnce).to.be.true;
- });
- });
-
- describe("#clearFilter()", function () {
-
- beforeEach(function() {
- sinon.stub(statusFilter, 'showClearFilter');
- sinon.stub(statusFilter, 'onCategoryChange');
- });
-
- afterEach(function() {
- statusFilter.showClearFilter.restore();
- statusFilter.onCategoryChange.restore();
- });
-
- it("isActive should be false", function() {
- statusFilter.set('categories', [Em.Object.create()]);
- statusFilter.clearFilter();
- expect(statusFilter.get('categories')[0].get('isActive')).to.be.false;
- });
-
- it("value should be empty", function() {
- statusFilter.clearFilter();
- expect(statusFilter.get('value')[0]).to.be.empty;
- });
-
- it("class should be empty", function() {
- statusFilter.clearFilter();
- expect(statusFilter.get('class')).to.be.empty;
- });
-
- it("showClearFilter should be called", function() {
- statusFilter.clearFilter();
- expect(statusFilter.showClearFilter.calledOnce).to.be.true;
- });
- });
- });
-
describe("#clearFilters()", function () {
beforeEach(function() {