You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by su...@apache.org on 2016/12/19 06:23:33 UTC
hadoop git commit: YARN-5650. Render Application Timeout value in web
UI. Contributed by Akhil PB.
Repository: hadoop
Updated Branches:
refs/heads/trunk fcbe15234 -> ef2dd7b78
YARN-5650. Render Application Timeout value in web UI. Contributed by Akhil PB.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/ef2dd7b7
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/ef2dd7b7
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/ef2dd7b7
Branch: refs/heads/trunk
Commit: ef2dd7b78c5bf15bd85a9c793e57855255148b7f
Parents: fcbe152
Author: Sunil G <su...@apache.org>
Authored: Mon Dec 19 11:44:03 2016 +0530
Committer: Sunil G <su...@apache.org>
Committed: Mon Dec 19 11:44:03 2016 +0530
----------------------------------------------------------------------
.../hadoop/yarn/server/webapp/AppBlock.java | 9 +++
.../resourcemanager/webapp/dao/AppInfo.java | 8 ++-
.../webapp/app/components/app-timeout-bar.js | 60 ++++++++++++++++++++
.../src/main/webapp/app/models/yarn-app.js | 2 +
.../src/main/webapp/app/serializers/yarn-app.js | 21 +++++--
.../templates/components/app-timeout-bar.hbs | 34 +++++++++++
.../src/main/webapp/app/templates/yarn-app.hbs | 10 +++-
.../src/main/webapp/app/utils/converter.js | 3 +
.../components/app-timeout-bar-test.js | 34 +++++++++++
9 files changed, 172 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java
index 69beef2..349a98c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java
@@ -40,6 +40,7 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
+import org.apache.hadoop.yarn.api.records.ApplicationTimeoutType;
import org.apache.hadoop.yarn.api.records.ContainerReport;
import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
import org.apache.hadoop.yarn.api.records.LogAggregationStatus;
@@ -207,6 +208,14 @@ public class AppBlock extends HtmlBlock {
overviewTable._("Log Aggregation Status:",
root_url("logaggregationstatus", app.getAppId()), status.name());
}
+ long timeout = appReport.getApplicationTimeouts()
+ .get(ApplicationTimeoutType.LIFETIME).getRemainingTime();
+ if (timeout < 0) {
+ overviewTable._("Application Timeout (Remaining Time):", "Unlimited");
+ } else {
+ overviewTable._("Application Timeout (Remaining Time):",
+ String.format("%d seconds", timeout));
+ }
}
overviewTable._("Diagnostics:",
app.getDiagnosticsInfo() == null ? "" : app.getDiagnosticsInfo());
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
index 2d364f4..4e85b67 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
@@ -259,8 +259,12 @@ public class AppInfo {
timeout.setTimeoutType(entry.getKey());
long timeoutInMillis = entry.getValue().longValue();
timeout.setExpiryTime(Times.formatISO8601(timeoutInMillis));
- timeout.setRemainingTime(Math
- .max((timeoutInMillis - System.currentTimeMillis()) / 1000, 0));
+ if (app.isAppInCompletedStates()) {
+ timeout.setRemainingTime(0);
+ } else {
+ timeout.setRemainingTime(Math
+ .max((timeoutInMillis - System.currentTimeMillis()) / 1000, 0));
+ }
timeouts.add(timeout);
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-timeout-bar.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-timeout-bar.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-timeout-bar.js
new file mode 100644
index 0000000..0eac827
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-timeout-bar.js
@@ -0,0 +1,60 @@
+/**
+ * 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';
+import Converter from 'yarn-ui/utils/converter';
+
+export default Ember.Component.extend({
+ app: null,
+
+ appTimeoutValue: function() {
+ var timeoutValueInSecs = this.get("app.remainingTimeoutInSeconds");
+ if (timeoutValueInSecs > -1) {
+ return Converter.msToElapsedTime(timeoutValueInSecs * 1000);
+ } else {
+ return timeoutValueInSecs;
+ }
+ }.property("app.remainingTimeoutInSeconds"),
+
+ isAppTimedOut: function() {
+ if (this.get("app.remainingTimeoutInSeconds") > 0) {
+ return false;
+ } else {
+ return true;
+ }
+ }.property("app.remainingTimeoutInSeconds"),
+
+ appTimeoutBarStyle: function() {
+ var remainingInSecs = this.get("app.remainingTimeoutInSeconds"),
+ expiryTimestamp = Converter.dateToTimeStamp(this.get("app.applicationExpiryTime")),
+ expiryInSecs = expiryTimestamp / 1000,
+ startTimestamp = Converter.dateToTimeStamp(this.get("app.startTime")),
+ startInSecs = startTimestamp / 1000,
+ totalRunInSecs = 0,
+ appRunDurationInSecs = 0,
+ width = 0;
+
+ if (remainingInSecs > 0) {
+ totalRunInSecs = expiryInSecs - startInSecs;
+ appRunDurationInSecs = totalRunInSecs - remainingInSecs;
+ width = appRunDurationInSecs / totalRunInSecs * 100;
+ }
+
+ return "width: " + width + "%";
+ }.property("app.remainingTimeoutInSeconds", "app.applicationExpiryTime", "app.startTime")
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
----------------------------------------------------------------------
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..4138a87 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"
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app.js
----------------------------------------------------------------------
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
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/app-timeout-bar.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/app-timeout-bar.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/app-timeout-bar.hbs
new file mode 100644
index 0000000..acbe0b2
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/app-timeout-bar.hbs
@@ -0,0 +1,34 @@
+{{!
+ * 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.
+}}
+
+<div class="app-timeout-wrapper">
+ {{#unless isAppTimedOut}}
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <label>Application will be timed out after <span class="text-danger">{{appTimeoutValue}}</span></label>
+ <div class="progress">
+ <div class="progress-bar progress-bar-danger progress-bar-striped active" style="{{appTimeoutBarStyle}}"></div>
+ </div>
+ <div>
+ <label class="pull-left">{{app.startTime}}</label>
+ <label class="pull-right">{{app.applicationExpiryTime}}</label>
+ </div>
+ </div>
+ </div>
+ {{/unless}}
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs
----------------------------------------------------------------------
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..578cc95 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
@@ -46,6 +46,12 @@
<div class="col-md-10 container-fluid">
<div class="row">
+ <div class="col-md-12">
+ {{app-timeout-bar app=model.app}}
+ </div>
+ </div>
+
+ <div class="row">
<div class="col-md-12 container-fluid">
<div class="panel panel-default">
<div class="panel-heading">Basic Info</div>
@@ -116,10 +122,10 @@
</div>
{{else}}
<div class="panel panel-default">
- <div class="panel-body">
+ <div class="panel-heading">
Diagnostics
</div>
- <div class="panel-footer">{{model.app.diagnostics}}</div>
+ <div class="panel-body">{{model.app.diagnostics}}</div>
</div>
{{/if}}
</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
----------------------------------------------------------------------
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);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/ef2dd7b7/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/app-timeout-bar-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/app-timeout-bar-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/app-timeout-bar-test.js
new file mode 100644
index 0000000..fb2a73a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/app-timeout-bar-test.js
@@ -0,0 +1,34 @@
+/**
+ * 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 { moduleForComponent, test } from 'ember-qunit';
+import hbs from 'htmlbars-inline-precompile';
+
+moduleForComponent('app-timeout-bar', 'Integration | Component | app timeout bar', {
+ integration: true
+});
+
+test('it renders', function(assert) {
+
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL +
+
+ this.render(hbs`{{app-timeout-bar}}`);
+
+ assert.equal(this.$().text().trim(), '');
+});
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org