Repository: ambari Updated Branches: refs/heads/trunk 0e8dddabd -> 402d97912
AMBARI-13559. JS error on quick links if service wasn't installed successfully using ASW (onechiporenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/402d9791 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/402d9791 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/402d9791 Branch: refs/heads/trunk Commit: 402d97912d2aff501eb6ae1ecedd780c342284fe Parents: 0e8ddda Author: Oleg Nechiporenko <onechipore...@apache.org> Authored: Mon Oct 26 14:32:33 2015 +0200 Committer: Oleg Nechiporenko <onechipore...@apache.org> Committed: Mon Oct 26 14:32:33 2015 +0200 ---------------------------------------------------------------------- ambari-web/app/messages.js | 1 + ambari-web/app/styles/application.less | 9 ++++ ambari-web/app/templates/main/service/item.hbs | 10 +++-- .../app/views/common/quick_view_link_view.js | 43 ++++++++++++++++---- .../test/views/common/quick_link_view_test.js | 12 +++++- 5 files changed, 62 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/402d9791/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 7056141..a358f60 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -2736,6 +2736,7 @@ Em.I18n.translations = { 'common.combobox.dropdown.warnings': 'Show property warnings', 'quick.links.error.label': 'Hostname is undefined', + 'quick.links.error.label2': 'Quick Links are not available', 'quick.links.publicHostName': '{0} ({1})', 'quick.links.label.active': 'Active', 'quick.links.label.standby': 'Standby', http://git-wip-us.apache.org/repos/asf/ambari/blob/402d9791/ambari-web/app/styles/application.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less index 491e59c..1d018f1 100644 --- a/ambari-web/app/styles/application.less +++ b/ambari-web/app/styles/application.less @@ -2452,6 +2452,15 @@ a:focus { position: absolute; } } + + .dropdown-menu { + width: 170px; + } + .alert { + padding: 0 2px; + margin: 0 2px; + } + .dropdown-submenu { &> a:after { border-left-color: #333; http://git-wip-us.apache.org/repos/asf/ambari/blob/402d9791/ambari-web/app/templates/main/service/item.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/service/item.hbs b/ambari-web/app/templates/main/service/item.hbs index b13b1c2..f276884 100644 --- a/ambari-web/app/templates/main/service/item.hbs +++ b/ambari-web/app/templates/main/service/item.hbs @@ -38,9 +38,13 @@ </li> {{/each}} {{else}} - {{#each view.quickLinks}} - <li><a {{bindAttr href="url"}} {{bindAttr target="view.linkTarget"}}>{{label}}</a></li> - {{/each}} + {{#if view.quickLinks}} + {{#each view.quickLinks}} + <li><a {{bindAttr href="url"}} {{bindAttr target="view.linkTarget"}}>{{label}}</a></li> + {{/each}} + {{else}} + <div class="alert alert-danger"><small>{{t quick.links.error.label2}}</small></div> + {{/if}} {{/if}} {{else}} <div class="spinner"></div> http://git-wip-us.apache.org/repos/asf/ambari/blob/402d9791/ambari-web/app/views/common/quick_view_link_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js index 89b855e..c6cff1b 100644 --- a/ambari-web/app/views/common/quick_view_link_view.js +++ b/ambari-web/app/views/common/quick_view_link_view.js @@ -227,6 +227,7 @@ App.QuickViewLinks = Em.View.extend({ return [App.get('singleNodeAlias')]; } var hosts = []; + var host; switch (serviceName) { case 'OOZIE': // active OOZIE components @@ -239,13 +240,19 @@ App.QuickViewLinks = Em.View.extend({ }); }); } else if (components && components.length === 1) { - hosts[0] = this.findComponentHost(response.items, 'OOZIE_SERVER'); + host = this.findComponentHost(response.items, 'OOZIE_SERVER'); + if (host) { + hosts[0] = host; + } } break; case "HDFS": if (this.get('content.snameNode')) { // not HA - hosts[0] = this.findComponentHost(response.items, 'NAMENODE'); + host = this.findComponentHost(response.items, 'NAMENODE'); + if (host) { + hosts[0] = host; + } } else { // HA enabled, need both two namenodes hosts this.get('content.hostComponents').filterProperty('componentName', 'NAMENODE').forEach(function (component) { @@ -294,8 +301,14 @@ App.QuickViewLinks = Em.View.extend({ hosts.push({'publicHostName': item.Hosts.public_host_name}); }); } - } else { - hosts[0] = masterComponents[0].Hosts.public_host_name; + } + else { + if (masterComponents[0]) { + host = masterComponents[0].Hosts.public_host_name; + if (host) { + hosts[0] = host; + } + } } break; case "YARN": @@ -317,21 +330,33 @@ App.QuickViewLinks = Em.View.extend({ hosts.push(newHost); }, this); } else { - hosts[0] = this.findComponentHost(response.items, 'RESOURCEMANAGER'); + host = this.findComponentHost(response.items, "RESOURCEMANAGER"); + if (host) { + hosts[0] = host; + } } break; case "STORM": - hosts[0] = this.findComponentHost(response.items, "STORM_UI_SERVER"); + host = this.findComponentHost(response.items, "STORM_UI_SERVER"); + if (host) { + hosts[0] = host; + } break; case "ACCUMULO": - hosts[0] = this.findComponentHost(response.items, "ACCUMULO_MONITOR"); + host = this.findComponentHost(response.items, "ACCUMULO_MONITOR"); + if (host) { + hosts[0] = host; + } break; case "ATLAS": - hosts[0] = this.findComponentHost(response.items, "ATLAS_SERVER"); + host = this.findComponentHost(response.items, "ATLAS_SERVER"); + if (host) { + hosts[0] = host; + } break; default: var service = App.StackService.find().findProperty('serviceName', serviceName); - if (service && service.get('hasMaster')) { + if (service && service.get('hasMaster') && App.Service.find(serviceName).get('hostComponents').someProperty('isMaster')) { hosts[0] = this.findComponentHost(response.items, this.get('content.hostComponents') && this.get('content.hostComponents').findProperty('isMaster', true).get('componentName')); } break; http://git-wip-us.apache.org/repos/asf/ambari/blob/402d9791/ambari-web/test/views/common/quick_link_view_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/common/quick_link_view_test.js b/ambari-web/test/views/common/quick_link_view_test.js index 3d38836..5462c0c 100644 --- a/ambari-web/test/views/common/quick_link_view_test.js +++ b/ambari-web/test/views/common/quick_link_view_test.js @@ -502,11 +502,21 @@ describe('App.QuickViewLinks', function () { hasMaster: false }) ]; - }) + }); + sinon.stub(App.Service, 'find', function () { + return Em.Object.create({ + hostComponents: Em.A([ + Em.Object.create({ + isMaster: true + }) + ]) + }); + }); }); after(function () { App.StackService.find.restore(); + App.Service.find.restore(); }); afterEach(function () {