YARN-7761. [UI2] Clicking 'master container log' or 'Link' next to 'log' under application's appAttempt goes to Old UI's Log link. Contributed by Akhil PB.
(cherry picked from commit d321d0e747
)
This commit is contained in:
parent
bd9e2826fe
commit
ec08eed542
|
@ -395,9 +395,9 @@ export default Ember.Component.extend({
|
||||||
contentPath: 'logsLink',
|
contentPath: 'logsLink',
|
||||||
cellComponentName: 'em-table-html-cell',
|
cellComponentName: 'em-table-html-cell',
|
||||||
getCellContent: function(row) {
|
getCellContent: function(row) {
|
||||||
var logUrl = self.checkHttpProtocol(row.get('logsLink'));
|
var containerLogUrl = row.get('appAttemptContainerLogsURL');
|
||||||
if (logUrl) {
|
if (containerLogUrl) {
|
||||||
return `<a href="${logUrl}" target="_blank">Link</a>`;
|
return `<a href="${containerLogUrl}">Link</a>`;
|
||||||
} else {
|
} else {
|
||||||
return 'N/A';
|
return 'N/A';
|
||||||
}
|
}
|
||||||
|
@ -470,9 +470,9 @@ export default Ember.Component.extend({
|
||||||
contentPath: 'logUrl',
|
contentPath: 'logUrl',
|
||||||
cellComponentName: 'em-table-html-cell',
|
cellComponentName: 'em-table-html-cell',
|
||||||
getCellContent: function(row) {
|
getCellContent: function(row) {
|
||||||
var url = self.checkHttpProtocol(row.get('logUrl'));
|
var containerLogUrl = row.get('appAttemptContainerLogsURL');
|
||||||
if (url) {
|
if (containerLogUrl) {
|
||||||
return `<a href="${url}" target="_blank">${url}</a>`;
|
return `<a href="${containerLogUrl}">Link</a>`;
|
||||||
} else {
|
} else {
|
||||||
return 'N/A';
|
return 'N/A';
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,10 @@ import Ember from 'ember';
|
||||||
import Constants from 'yarn-ui/constants';
|
import Constants from 'yarn-ui/constants';
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
queryParams: ["service"],
|
queryParams: ["service", "attempt", "containerid"],
|
||||||
service: undefined,
|
service: undefined,
|
||||||
|
attempt: undefined,
|
||||||
|
containerid: undefined,
|
||||||
|
|
||||||
selectedAttemptId: "",
|
selectedAttemptId: "",
|
||||||
attemptContainerList: null,
|
attemptContainerList: null,
|
||||||
|
@ -40,7 +42,7 @@ export default Ember.Controller.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
showContainersForAttemptId(attemptId) {
|
showContainersForAttemptId(attemptId, containerId = "") {
|
||||||
this.set("selectedAttemptId", "");
|
this.set("selectedAttemptId", "");
|
||||||
if (attemptId) {
|
if (attemptId) {
|
||||||
this.set("_isLoadingTopPanel", true);
|
this.set("_isLoadingTopPanel", true);
|
||||||
|
@ -75,6 +77,9 @@ export default Ember.Controller.extend({
|
||||||
}
|
}
|
||||||
this.set("attemptContainerList", containers);
|
this.set("attemptContainerList", containers);
|
||||||
this.initializeSelect(".js-fetch-logs-containers");
|
this.initializeSelect(".js-fetch-logs-containers");
|
||||||
|
if (containerId) {
|
||||||
|
this.send("showLogFilesForContainerId", containerId);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
this.set("_isLoadingTopPanel", false);
|
this.set("_isLoadingTopPanel", false);
|
||||||
|
|
|
@ -47,7 +47,7 @@ export default Ember.Helper.helper(function(params,hash) {
|
||||||
nodeAddr + '/' + containerId + '/' + logFileName + '">' + logFileName +
|
nodeAddr + '/' + containerId + '/' + logFileName + '">' + logFileName +
|
||||||
'</a>';
|
'</a>';
|
||||||
if (i !== logFilesLen - 1) {
|
if (i !== logFilesLen - 1) {
|
||||||
html = html + ",";
|
html = html + ", ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
html = html + '</td>';
|
html = html + '</td>';
|
||||||
|
|
|
@ -146,4 +146,10 @@ export default DS.Model.extend({
|
||||||
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
||||||
}.property("nodeId", "nodeHttpAddress"),
|
}.property("nodeId", "nodeHttpAddress"),
|
||||||
|
|
||||||
|
appAttemptContainerLogsURL: function() {
|
||||||
|
const attemptId = this.get("id");
|
||||||
|
const containerId = this.get("appMasterContainerId");
|
||||||
|
const appId = Converter.attemptIdToAppId(attemptId);
|
||||||
|
return `#/yarn-app/${appId}/logs?attempt=${attemptId}&containerid=${containerId}`;
|
||||||
|
}.property("id", "appMasterContainerId")
|
||||||
});
|
});
|
||||||
|
|
|
@ -66,4 +66,11 @@ export default DS.Model.extend({
|
||||||
var addr = encodeURIComponent(this.get("nodeHttpAddress"));
|
var addr = encodeURIComponent(this.get("nodeHttpAddress"));
|
||||||
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
||||||
}.property("nodeId", "nodeHttpAddress"),
|
}.property("nodeId", "nodeHttpAddress"),
|
||||||
|
|
||||||
|
appAttemptContainerLogsURL: function() {
|
||||||
|
const containerId = this.get("id");
|
||||||
|
const attemptId = Converter.containerIdToAttemptId(containerId);
|
||||||
|
const appId = Converter.attemptIdToAppId(attemptId);
|
||||||
|
return `#/yarn-app/${appId}/logs?attempt=${attemptId}&containerid=${containerId}`;
|
||||||
|
}.property("id")
|
||||||
});
|
});
|
||||||
|
|
|
@ -67,4 +67,11 @@ export default DS.Model.extend({
|
||||||
var addr = encodeURIComponent(this.get("nodeHttpAddress"));
|
var addr = encodeURIComponent(this.get("nodeHttpAddress"));
|
||||||
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
return `#/yarn-node/${this.get("nodeId")}/${addr}/info/`;
|
||||||
}.property("nodeId", "nodeHttpAddress"),
|
}.property("nodeId", "nodeHttpAddress"),
|
||||||
|
|
||||||
|
appAttemptContainerLogsURL: function() {
|
||||||
|
const containerId = this.get("id");
|
||||||
|
const attemptId = Converter.containerIdToAttemptId(containerId);
|
||||||
|
const appId = Converter.attemptIdToAppId(attemptId);
|
||||||
|
return `#/yarn-app/${appId}/logs?attempt=${attemptId}&containerid=${containerId}`;
|
||||||
|
}.property("id")
|
||||||
});
|
});
|
||||||
|
|
|
@ -37,8 +37,14 @@ export default AbstractRoute.extend(AppAttemptMixin, {
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
const controller = this.controllerFor("yarn-app.logs");
|
const controller = this.controllerFor("yarn-app.logs");
|
||||||
|
const { attempt, containerid } = this.paramsFor('yarn-app.logs');
|
||||||
controller.resetAfterRefresh();
|
controller.resetAfterRefresh();
|
||||||
controller.initializeSelect();
|
controller.initializeSelect();
|
||||||
|
if (attempt) {
|
||||||
|
controller.send("showContainersForAttemptId", attempt, containerid);
|
||||||
|
} else {
|
||||||
|
controller.set("selectedAttemptId", "");
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
unloadAll() {
|
unloadAll() {
|
||||||
|
|
|
@ -22,12 +22,14 @@ import AbstractRoute from './abstract';
|
||||||
|
|
||||||
export default AbstractRoute.extend({
|
export default AbstractRoute.extend({
|
||||||
model(param) {
|
model(param) {
|
||||||
|
let nodeAddress = decodeURIComponent(param.node_addr);
|
||||||
|
nodeAddress = nodeAddress.replace(/(^\w+:|^)\/\//, '');
|
||||||
// Get a specific container running on a specific node.
|
// Get a specific container running on a specific node.
|
||||||
return Ember.RSVP.hash({
|
return Ember.RSVP.hash({
|
||||||
nodeContainer: this.store.queryRecord('yarn-node-container',
|
nodeContainer: this.store.queryRecord('yarn-node-container',
|
||||||
{ nodeHttpAddr: param.node_addr, containerId: param.container_id }),
|
{ nodeHttpAddr: nodeAddress, containerId: param.container_id }),
|
||||||
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', param.node_addr, {reload:true}),
|
nmGpuInfo: this.store.findRecord('yarn-nm-gpu', nodeAddress, {reload:true}),
|
||||||
nodeInfo: { id: param.node_id, addr: param.node_addr, containerId: param.container_id }
|
nodeInfo: { id: param.node_id, addr: nodeAddress, containerId: param.container_id }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -56,10 +56,12 @@
|
||||||
<td title="{{attempt.nodeHttpAddress}}"><a href="{{attempt.masterNodeURL}}">{{attempt.nodeHttpAddress}}</a></td>
|
<td title="{{attempt.nodeHttpAddress}}"><a href="{{attempt.masterNodeURL}}">{{attempt.nodeHttpAddress}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if attempt.logsLink}}
|
{{#if attempt.appAttemptContainerLogsURL}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>Log</td>
|
<td>Logs</td>
|
||||||
<td><a href="{{prepend-protocol attempt.logsLink}}" target="_blank">Link</a></td>
|
<td>
|
||||||
|
<a href="{{attempt.appAttemptContainerLogsURL}}">Link</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if attempt.diagnosticsInfo}}
|
{{#if attempt.diagnosticsInfo}}
|
||||||
|
|
|
@ -54,10 +54,12 @@
|
||||||
<td title="{{container.nodeHttpAddress}}"><a href="{{container.masterNodeURL}}">{{container.nodeHttpAddress}}</a></td>
|
<td title="{{container.nodeHttpAddress}}"><a href="{{container.masterNodeURL}}">{{container.nodeHttpAddress}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if container.logUrl}}
|
{{#if container.appAttemptContainerLogsURL}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>Log</td>
|
<td>Logs</td>
|
||||||
<td><a href="{{prepend-protocol container.logUrl}}" target="_blank">Link</a></td>
|
<td>
|
||||||
|
<a href="{{container.appAttemptContainerLogsURL}}">Link</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
{{breadcrumb-bar breadcrumbs=breadcrumbs}}
|
{{breadcrumb-bar breadcrumbs=breadcrumbs}}
|
||||||
|
|
||||||
{{#if actionResponse}}
|
{{#if actionResponse}}
|
||||||
<div class="row">
|
<div class="alert-wrapper">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="alert alert-dismissible {{if (eq actionResponse.type 'error') 'alert-danger' 'alert-success'}}" role="alert">
|
<div class="alert alert-dismissible {{if (eq actionResponse.type 'error') 'alert-danger' 'alert-success'}}" role="alert">
|
||||||
<button class="close" data-dismiss="alert" aria-label="Close" {{action "resetActionResponse"}}><span aria-hidden="true">×</span></button>
|
<button class="close" data-dismiss="alert" aria-label="Close" {{action "resetActionResponse"}}><span aria-hidden="true">×</span></button>
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<div class="panel-group">
|
<div class="panel-group col-md-12">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="yarn-app-header">
|
<div class="yarn-app-header">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
|
|
|
@ -20,7 +20,9 @@
|
||||||
<h4 align="center">Loading...</h4>
|
<h4 align="center">Loading...</h4>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if model.apps}}
|
{{#if model.apps}}
|
||||||
|
<div class="col-md-12">
|
||||||
{{em-table columns=columns rows=model.apps definition=tableDefinition}}
|
{{em-table columns=columns rows=model.apps definition=tableDefinition}}
|
||||||
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h4 align="center">Could not find any applications from this cluster</h4>
|
<h4 align="center">Could not find any applications from this cluster</h4>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -129,9 +129,7 @@
|
||||||
<div class="col-lg-6 container-fluid">
|
<div class="col-lg-6 container-fluid">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<li>
|
Resources - yarn.io/gpu
|
||||||
Resources - yarn.io/gpu
|
|
||||||
</li>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="container-fluid" id="gpu-donut-chart">
|
<div class="container-fluid" id="gpu-donut-chart">
|
||||||
{{donut-chart data=model.rmNode.getGpuDataForDonutChart
|
{{donut-chart data=model.rmNode.getGpuDataForDonutChart
|
||||||
|
|
Loading…
Reference in New Issue