YARN-8115. [UI2] URL data like nodeHTTPAddress must be encoded in UI before using to access NM. Contributed by Sreenath Somarajapuram.
This commit is contained in:
parent
b779f4f0f6
commit
42cd367c93
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import Ember from 'ember';
|
||||
|
||||
export default Ember.Component.extend({
|
||||
encodedAddr : Ember.computed("nodeAddr", function(){
|
||||
return encodeURIComponent(this.get('nodeAddr'));
|
||||
})
|
||||
});
|
@ -22,6 +22,7 @@ export default Ember.Controller.extend({
|
||||
|
||||
breadcrumbs: Ember.computed('model.nodeInfo', function () {
|
||||
var nodeInfo = this.get('model.nodeInfo');
|
||||
var addr = encodeURIComponent(nodeInfo.addr);
|
||||
return [{
|
||||
text: "Home",
|
||||
routeName: 'application'
|
||||
@ -30,7 +31,7 @@ export default Ember.Controller.extend({
|
||||
routeName: 'yarn-nodes.table'
|
||||
}, {
|
||||
text: `Node [ ${nodeInfo.id} ]`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${nodeInfo.addr}`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${addr}/info`,
|
||||
}, {
|
||||
text: `Application [ ${nodeInfo.appId} ]`,
|
||||
}];
|
||||
|
@ -22,6 +22,7 @@ export default Ember.Controller.extend({
|
||||
|
||||
breadcrumbs: Ember.computed("model.attempt.appId", function () {
|
||||
var nodeInfo = this.get("model.nodeInfo");
|
||||
var addr = encodeURIComponent(nodeInfo.addr);
|
||||
return [{
|
||||
text: "Home",
|
||||
routeName: 'application'
|
||||
@ -30,7 +31,7 @@ export default Ember.Controller.extend({
|
||||
routeName: 'yarn-nodes.table'
|
||||
}, {
|
||||
text: `Node [ ${nodeInfo.id} ]`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${nodeInfo.addr}`
|
||||
href: `#/yarn-node/${nodeInfo.id}/${addr}/info`
|
||||
}, {
|
||||
text: "Applications",
|
||||
}];
|
||||
|
@ -22,6 +22,7 @@ export default Ember.Controller.extend({
|
||||
|
||||
breadcrumbs: Ember.computed("model.nodeInfo", function () {
|
||||
var nodeInfo = this.get("model.nodeInfo");
|
||||
var addr = encodeURIComponent(nodeInfo.addr);
|
||||
return [{
|
||||
text: "Home",
|
||||
routeName: 'application'
|
||||
@ -30,7 +31,7 @@ export default Ember.Controller.extend({
|
||||
routeName: 'yarn-nodes.table'
|
||||
}, {
|
||||
text: `Node [ ${nodeInfo.id} ]`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${nodeInfo.addr}`
|
||||
href: `#/yarn-node/${nodeInfo.id}/${addr}/info`
|
||||
}, {
|
||||
text: `Container [ ${nodeInfo.containerId} ]`
|
||||
}];
|
||||
|
@ -22,6 +22,7 @@ export default Ember.Controller.extend({
|
||||
|
||||
breadcrumbs: Ember.computed("model.nodeInfo", function () {
|
||||
var nodeInfo = this.get("model.nodeInfo");
|
||||
var addr = encodeURIComponent(nodeInfo.addr);
|
||||
return [{
|
||||
text: "Home",
|
||||
routeName: 'application'
|
||||
@ -30,7 +31,7 @@ export default Ember.Controller.extend({
|
||||
routeName: 'yarn-nodes.table'
|
||||
}, {
|
||||
text: `Node [ ${nodeInfo.id} ]`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${nodeInfo.addr}`
|
||||
href: `#/yarn-node/${nodeInfo.id}/${addr}/info`
|
||||
}, {
|
||||
text: "Containers",
|
||||
}];
|
||||
|
@ -22,6 +22,7 @@ export default Ember.Controller.extend({
|
||||
|
||||
breadcrumbs: Ember.computed("model.nodeInfo", function () {
|
||||
var nodeInfo = this.get("model.nodeInfo");
|
||||
var addr = encodeURIComponent(nodeInfo.addr);
|
||||
|
||||
return [{
|
||||
text: "Home",
|
||||
@ -31,7 +32,7 @@ export default Ember.Controller.extend({
|
||||
routeName: 'yarn-nodes.table'
|
||||
}, {
|
||||
text: `Node [ ${nodeInfo.id} ]`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${nodeInfo.addr}`,
|
||||
href: `#/yarn-node/${nodeInfo.id}/${addr}/info`,
|
||||
}];
|
||||
})
|
||||
|
||||
|
@ -69,7 +69,7 @@ export default Ember.Controller.extend({
|
||||
facetType: null,
|
||||
getCellContent: function(row) {
|
||||
var node_id = row.get("id"),
|
||||
node_addr = row.get("nodeHTTPAddress"),
|
||||
node_addr = encodeURIComponent(row.get("nodeHTTPAddress")),
|
||||
href = `#/yarn-node/${node_id}/${node_addr}/info`;
|
||||
switch(row.get("nodeState")) {
|
||||
case "SHUTDOWN":
|
||||
|
@ -29,7 +29,7 @@ export default Ember.Helper.helper(function(params,hash) {
|
||||
if (nodeState === "SHUTDOWN" || nodeState === "LOST") {
|
||||
html = html + nodeHTTPAddress;
|
||||
} else {
|
||||
html = html + '<a href="#/yarn-node/' + nodeId + "/" + nodeHTTPAddress + '">' +
|
||||
html = html + '<a href="#/yarn-node/' + nodeId + "/" + encodeURIComponent(nodeHTTPAddress) + '">' +
|
||||
nodeHTTPAddress + '</a>';
|
||||
}
|
||||
html = html + '</td>';
|
||||
|
@ -44,6 +44,7 @@ function updateConfigs(application) {
|
||||
|
||||
if(!ENV.hosts.rmWebAddress) {
|
||||
ENV.hosts.rmWebAddress = rmhost;
|
||||
ENV.hosts.protocolScheme = window.location.protocol;
|
||||
} else {
|
||||
rmhost = ENV.hosts.rmWebAddress;
|
||||
}
|
||||
|
@ -23,10 +23,12 @@ import AbstractRoute from './abstract';
|
||||
export default AbstractRoute.extend({
|
||||
model(param) {
|
||||
// Get all apps running on a specific node. Node is contacted by using node_addr.
|
||||
var address = decodeURIComponent(param.node_addr);
|
||||
address = address.replace(/(^\w+:|^)\/\//, '');
|
||||
return Ember.RSVP.hash({
|
||||
apps: this.store.query('yarn-node-app', { nodeAddr: param.node_addr }),
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', param.node_addr, {reload:true}),
|
||||
nodeInfo: { id: param.node_id, addr: param.node_addr }
|
||||
apps: this.store.query('yarn-node-app', { nodeAddr: address }),
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', address, {reload:true}),
|
||||
nodeInfo: { id: param.node_id, addr: address }
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -22,10 +22,12 @@ import AbstractRoute from './abstract';
|
||||
export default AbstractRoute.extend({
|
||||
model(param) {
|
||||
// Get all containers running on specific node.
|
||||
var address = decodeURIComponent(param.node_addr);
|
||||
address = address.replace(/(^\w+:|^)\/\//, '');
|
||||
return Ember.RSVP.hash({
|
||||
containers: this.store.query('yarn-node-container', { nodeHttpAddr: param.node_addr }),
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', param.node_addr, {reload:true}),
|
||||
nodeInfo: { id: param.node_id, addr: param.node_addr }
|
||||
containers: this.store.query('yarn-node-container', { nodeHttpAddr: address }),
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', address, {reload:true}),
|
||||
nodeInfo: { id: param.node_id, addr: address }
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -23,10 +23,12 @@ import AbstractRoute from './abstract';
|
||||
export default AbstractRoute.extend({
|
||||
model(param) {
|
||||
// Fetches data from both NM and RM. RM is queried to get node usage info.
|
||||
var address = decodeURIComponent(param.node_addr);
|
||||
address = address.replace(/(^\w+:|^)\/\//, '');
|
||||
return Ember.RSVP.hash({
|
||||
nodeInfo: { id: param.node_id, addr: param.node_addr },
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', param.node_addr, {reload:true}),
|
||||
node: this.store.findRecord('yarn-node', param.node_addr, {reload: true}),
|
||||
nodeInfo: { id: param.node_id, addr: address },
|
||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', address, {reload:true}),
|
||||
node: this.store.findRecord('yarn-node', address, {reload: true}),
|
||||
rmNode: this.store.findRecord('yarn-rm-node', param.node_id, {reload: true})
|
||||
});
|
||||
},
|
||||
|
@ -25,20 +25,20 @@
|
||||
<ul class="nav nav-pills nav-stacked" id="stacked-menu">
|
||||
<ul class="nav nav-pills nav-stacked collapse in">
|
||||
{{#link-to 'yarn-node.info' tagName="li"}}
|
||||
{{#link-to 'yarn-node.info' nodeId nodeAddr}}Node Information
|
||||
{{#link-to 'yarn-node.info' nodeId encodedAddr}}Node Information
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
{{#link-to 'yarn-node-apps' tagName="li"}}
|
||||
{{#link-to 'yarn-node-apps' nodeId nodeAddr}}List of Applications
|
||||
{{#link-to 'yarn-node-apps' nodeId encodedAddr}}List of Applications
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
{{#link-to 'yarn-node-containers' tagName="li"}}
|
||||
{{#link-to 'yarn-node-containers' nodeId nodeAddr}}List of Containers
|
||||
{{#link-to 'yarn-node-containers' nodeId encodedAddr}}List of Containers
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
{{#if (and nmGpuInfo nmGpuInfo.info.totalGpuDevices)}}
|
||||
{{#link-to 'yarn-node.yarn-nm-gpu' tagName="li"}}
|
||||
{{#link-to 'yarn-node.yarn-nm-gpu' nodeId nodeAddr }}GPU Information
|
||||
{{#link-to 'yarn-node.yarn-nm-gpu' nodeId encodedAddr }}GPU Information
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
{{/if}}
|
||||
|
Loading…
Reference in New Issue
Block a user