diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
index 8b5474f..3bc670c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
@@ -50,6 +50,7 @@ export default DS.Model.extend({
clusterUsagePercentage: DS.attr('number'),
queueUsagePercentage: DS.attr('number'),
currentAppAttemptId: DS.attr('string'),
+ remainingTimeoutInSeconds: DS.attr('number'),
isFailed: function() {
return this.get('finalStatus') == "FAILED"
@@ -100,5 +101,14 @@ export default DS.Model.extend({
}
return "label label-" + style;
- }.property("finalStatus")
+ }.property("finalStatus"),
+
+ applicationTimeoutValue: function() {
+ var timeoutValueInSecs = this.get("remainingTimeoutInSeconds");
+ if (timeoutValueInSecs > -1) {
+ return Converter.msToElapsedTime(timeoutValueInSecs * 1000);
+ } else {
+ return timeoutValueInSecs;
+ }
+ }.property("remainingTimeoutInSeconds")
});
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
index 427c3d8..2e1abc7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
@@ -23,9 +23,15 @@ export default DS.JSONAPISerializer.extend({
internalNormalizeSingleResponse(store, primaryModelClass, payload, id,
requestType) {
if (payload.app) {
- payload = payload.app;
+ payload = payload.app;
}
-
+
+ var timeoutInSecs = -1;
+ if (payload.timeouts && payload.timeouts.timeout
+ && payload.timeouts.timeout[0]) {
+ timeoutInSecs = payload.timeouts.timeout[0].remainingTimeInSeconds;
+ }
+
var fixedPayload = {
id: id,
type: primaryModelClass.modelName, // yarn-app
@@ -58,7 +64,8 @@ export default DS.JSONAPISerializer.extend({
numAMContainerPreempted: payload.numAMContainerPreempted,
clusterUsagePercentage: payload.clusterUsagePercentage,
queueUsagePercentage: payload.queueUsagePercentage,
- currentAppAttemptId: payload.currentAppAttemptId
+ currentAppAttemptId: payload.currentAppAttemptId,
+ remainingTimeoutInSeconds: timeoutInSecs
}
};
@@ -67,7 +74,7 @@ export default DS.JSONAPISerializer.extend({
normalizeSingleResponse(store, primaryModelClass, payload, id,
requestType) {
- var p = this.internalNormalizeSingleResponse(store,
+ var p = this.internalNormalizeSingleResponse(store,
primaryModelClass, payload, id, requestType);
return { data: p };
},
@@ -90,4 +97,4 @@ export default DS.JSONAPISerializer.extend({
return normalizedArrayResponse;
}
-});
\ No newline at end of file
+});
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
index acf00d1..00799ac 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
@@ -66,6 +66,7 @@
Priority |
Progress |
Is Unmanaged AM |
+ Application Timeout |
@@ -96,6 +97,7 @@
{{model.app.unmanagedApplication}} |
+ {{model.app.applicationTimeoutValue}} |
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
index 8b5474f..13a3029 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
@@ -50,6 +50,8 @@ export default DS.Model.extend({
clusterUsagePercentage: DS.attr('number'),
queueUsagePercentage: DS.attr('number'),
currentAppAttemptId: DS.attr('string'),
+ remainingTimeoutInSeconds: DS.attr('number'),
+ applicationExpiryTime: DS.attr('string'),
isFailed: function() {
return this.get('finalStatus') == "FAILED"
@@ -100,5 +102,38 @@ export default DS.Model.extend({
}
return "label label-" + style;
- }.property("finalStatus")
+ }.property("finalStatus"),
+
+ applicationTimeoutValue: function() {
+ var timeoutValueInSecs = this.get("remainingTimeoutInSeconds");
+ if (timeoutValueInSecs > -1) {
+ return Converter.msToElapsedTime(timeoutValueInSecs * 1000);
+ } else {
+ return timeoutValueInSecs;
+ }
+ }.property("remainingTimeoutInSeconds"),
+
+ isAppTimeoutConfigured: function() {
+ if (this.get("remainingTimeoutInSeconds") > -1) {
+ return true;
+ } else {
+ return false;
+ }
+ }.property("remainingTimeoutInSeconds"),
+
+ applicationRunDurationStyle: function() {
+ var remainingInSecs = this.get("remainingTimeoutInSeconds");
+ var expiryTimestamp = Converter.dateToTimeStamp(this.get("applicationExpiryTime"));
+ var expiryInSecs = expiryTimestamp / 1000;
+ var startTimestamp = Converter.dateToTimeStamp(this.get("startTime"));
+ var startInSecs = startTimestamp / 1000;
+ var currentInSecs = Date.now() / 1000;
+ var width = 0;
+ if (remainingInSecs > 0) {
+ var totalRunInSecs = expiryInSecs - startInSecs;
+ var appRunDurationInSecs = totalRunInSecs - remainingInSecs;
+ width = appRunDurationInSecs / totalRunInSecs * 100;
+ }
+ return "width: " + width + "%";
+ }.property("remainingTimeoutInSeconds", "applicationExpiryTime", "startTime")
});
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
index 427c3d8..fdba04a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
@@ -23,9 +23,18 @@ export default DS.JSONAPISerializer.extend({
internalNormalizeSingleResponse(store, primaryModelClass, payload, id,
requestType) {
if (payload.app) {
- payload = payload.app;
+ payload = payload.app;
}
-
+
+ var timeoutInSecs = -1;
+ var appExpiryTime = Converter.timeStampToDate(payload.finishedTime);
+ if (payload.timeouts && payload.timeouts.timeout && payload.timeouts.timeout[0]) {
+ timeoutInSecs = payload.timeouts.timeout[0].remainingTimeInSeconds;
+ if (timeoutInSecs > -1) {
+ appExpiryTime = Converter.isoDateToDate(payload.timeouts.timeout[0].expiryTime);
+ }
+ }
+
var fixedPayload = {
id: id,
type: primaryModelClass.modelName, // yarn-app
@@ -58,7 +67,9 @@ export default DS.JSONAPISerializer.extend({
numAMContainerPreempted: payload.numAMContainerPreempted,
clusterUsagePercentage: payload.clusterUsagePercentage,
queueUsagePercentage: payload.queueUsagePercentage,
- currentAppAttemptId: payload.currentAppAttemptId
+ currentAppAttemptId: payload.currentAppAttemptId,
+ remainingTimeoutInSeconds: timeoutInSecs,
+ applicationExpiryTime: appExpiryTime
}
};
@@ -67,7 +78,7 @@ export default DS.JSONAPISerializer.extend({
normalizeSingleResponse(store, primaryModelClass, payload, id,
requestType) {
- var p = this.internalNormalizeSingleResponse(store,
+ var p = this.internalNormalizeSingleResponse(store,
primaryModelClass, payload, id, requestType);
return { data: p };
},
@@ -90,4 +101,4 @@ export default DS.JSONAPISerializer.extend({
return normalizedArrayResponse;
}
-});
\ No newline at end of file
+});
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
index acf00d1..99a79a2 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
@@ -45,6 +45,44 @@
+ {{#if model.app.isAppTimeoutConfigured}}
+ {{#if (eq model.app.remainingTimeoutInSeconds 0)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{else}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{/if}}
+ {{/if}}
+
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
index 6fd9d30..fb6b61c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
@@ -91,6 +91,9 @@ export default {
return ts;
}
},
+ isoDateToDate: function(isoDate) {
+ return moment(isoDate).format("YYYY/MM/DD HH:mm:ss");
+ },
splitForContainerLogs: function(id) {
if (id) {
var splits = id.split(Constants.PARAM_SEPARATOR);