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 2017/05/21 13:06:25 UTC
[1/3] hadoop git commit: YARN-5705. Show timeline data from ATS v2 in
new web UI. Contributed by Akhil PB.
Repository: hadoop
Updated Branches:
refs/heads/trunk c80d3bc48 -> 46d9c4ca7
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/runs.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/runs.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/runs.hbs
new file mode 100644
index 0000000..96d9e63
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/runs.hbs
@@ -0,0 +1,131 @@
+{{!--
+ 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="yarn-flow-runs">
+
+ {{#if (or (or elapsedTimeVizData.length cpuVCoresVizData.length) memoryVizData.length)}}
+ <div class="dropdown pull-right">
+ <button class="btn btn-sm btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
+ Add Metrics Widget <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ {{#if elapsedTimeVizData.length}}
+ <li>
+ <a href="#" {{action "addVizWidget" "runDuration"}}>
+ <div class="item-icon">
+ {{#if vizWidgets.runDuration}}
+ <i class="glyphicon glyphicon-ok text-success"></i>
+ {{/if}}
+ </div>
+ <div class="item-text">Flow Run Vs Run Duration</div>
+ </a>
+ </li>
+ {{/if}}
+ {{#if cpuVCoresVizData.length}}
+ <li>
+ <a href="#" {{action "addVizWidget" "cpuVcores"}}>
+ <div class="item-icon">
+ {{#if vizWidgets.cpuVcores}}
+ <i class="glyphicon glyphicon-ok text-success"></i>
+ {{/if}}
+ </div>
+ <div class="item-text">Flow Run Vs Cpu Vcores</div>
+ </a>
+ </li>
+ {{/if}}
+ {{#if memoryVizData.length}}
+ <li>
+ <a href="#" {{action "addVizWidget" "memoryUsed"}}>
+ <div class="item-icon">
+ {{#if vizWidgets.memoryUsed}}
+ <i class="glyphicon glyphicon-ok text-success"></i>
+ {{/if}}
+ </div>
+ <div class="item-text">Flow Run Vs Memory Used</div>
+ </a>
+ </li>
+ {{/if}}
+ </ul>
+ </div>
+ {{/if}}
+
+ <h3>Flow Runs</h3>
+ {{em-table columns=columns rows=model.flowRuns definition=tableDefinition}}
+
+ <div class="col-md-12">
+ {{#if (and elapsedTimeVizData.length vizWidgets.runDuration)}}
+ <div class="row">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="glyphicon glyphicon-remove pull-right" {{action "removeVizWidget" "runDuration"}}></div>
+ <h4 class="text-center">Flow Run Vs Run Duration</h4>
+ {{simple-bar-chart
+ class="chart-panel"
+ data=elapsedTimeVizData
+ xAxisTickFormatter=flowrunIdFormatter
+ yAxisTickFormatter=elapsedTimeFormatter
+ xAxisText="Flow Run"
+ yAxisText="Run Duration"
+ onBarChartClickCallback=onBarChartClick
+ }}
+ </div>
+ </div>
+ </div>
+ {{/if}}
+
+ {{#if (and cpuVCoresVizData.length vizWidgets.cpuVcores)}}
+ <div class="row">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="glyphicon glyphicon-remove pull-right" {{action "removeVizWidget" "cpuVcores"}}></div>
+ <h4 class="text-center">Flow Run Vs CPU VCores</h4>
+ {{simple-bar-chart
+ class="chart-panel"
+ data=cpuVCoresVizData
+ xAxisTickFormatter=flowrunIdFormatter
+ xAxisText="Flow Run"
+ yAxisText="CPU VCores"
+ onBarChartClickCallback=onBarChartClick
+ }}
+ </div>
+ </div>
+ </div>
+ {{/if}}
+
+ {{#if (and memoryVizData.length vizWidgets.memoryUsed)}}
+ <div class="row">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="glyphicon glyphicon-remove pull-right" {{action "removeVizWidget" "memoryUsed"}}></div>
+ <h4 class="text-center">Flow Run Vs Memory Used</h4>
+ {{simple-bar-chart
+ class="chart-panel"
+ data=memoryVizData
+ xAxisTickFormatter=flowrunIdFormatter
+ yAxisTickFormatter=memoryFormatter
+ xAxisText="Flow Run"
+ yAxisText="Memory Used"
+ onBarChartClickCallback=onBarChartClick
+ }}
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ </div>
+
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun-metric.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun-metric.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun-metric.hbs
new file mode 100644
index 0000000..832b47a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun-metric.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="container">
+ <div class="row">
+ <h4>Sunburst chart for Metric "{{metric_id}}"</h4>
+ <h4>(Flowrun: {{flowrun.id}})</h4>
+ <div id="main">
+ <div id="sequence"></div>
+ <div id="chart">
+ <div id="explanation" style="visibility: hidden;">
+ <span id="percentage"></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+{{sunburst-chart arr=arr}}
+{{outlet}}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs
new file mode 100644
index 0000000..eb0b4bd
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs
@@ -0,0 +1,49 @@
+{{!--
+ 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="col-md-12 container-fluid">
+ <div class="row">
+ {{breadcrumb-bar breadcrumbs=breadcrumbs}}
+ </div>
+ <div class="row">
+ <div class="col-md-2">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="panel-title">
+ Flow Run Information
+ </div>
+ </div>
+ <div class="panel-body">
+ <ul class="nav nav-pills nav-stacked" id="stacked-menu">
+ <ul class="nav nav-pills nav-stacked collapse in">
+ {{#link-to 'yarn-flowrun.info' tagName="li"}}
+ {{#link-to 'yarn-flowrun.info' model.flowrun_uid}}Information{{/link-to}}
+ {{/link-to}}
+ {{#link-to 'yarn-flowrun.metrics' tagName="li"}}
+ {{#link-to 'yarn-flowrun.metrics' model.flowrun_uid}}Metrics{{/link-to}}
+ {{/link-to}}
+ </ul>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-10">
+ {{outlet}}
+ </div>
+ </div>
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/info.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/info.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/info.hbs
new file mode 100644
index 0000000..f7e726c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/info.hbs
@@ -0,0 +1,128 @@
+{{!--
+ 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="yarn-flow-runinfo">
+ <h3>Flow Run Info</h3>
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <table class="table table-striped table-bordered">
+ <tbody>
+ <tr>
+ <td>Flow Name</td>
+ <td>{{model.flowrun.flowName}}</td>
+ </tr>
+ <tr>
+ <td>Run ID</td>
+ <td>{{model.flowrun.shownid}}</td>
+ </tr>
+ <tr>
+ <td>Launched By</td>
+ <td>{{model.flowrun.user}}</td>
+ </tr>
+ <tr>
+ <td>Run Sequence ID</td>
+ <td>{{model.flowrun.runid}}</td>
+ </tr>
+ <tr>
+ <td>Start Time</td>
+ <td>{{model.flowrun.createTime}}</td>
+ </tr>
+ <tr>
+ <td>End Time</td>
+ <td>{{model.flowrun.endTime}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ {{#if (or cpuVCoresVizData.length memoryVizData.length)}}
+ <div class="dropdown pull-right">
+ <button class="btn btn-sm btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
+ Add Metrics Widget <span class="caret"></span>
+ </button>
+ <ul class="dropdown-menu">
+ {{#if cpuVCoresVizData.length}}
+ <li>
+ <a href="#" {{action "addVizWidget" "cpuVcores"}}>
+ <div class="item-icon">
+ {{#if vizWidgets.cpuVcores}}
+ <i class="glyphicon glyphicon-ok text-success"></i>
+ {{/if}}
+ </div>
+ <div class="item-text">Application Vs Cpu Vcores</div>
+ </a>
+ </li>
+ {{/if}}
+ {{#if memoryVizData.length}}
+ <li>
+ <a href="#" {{action "addVizWidget" "memoryUsed"}}>
+ <div class="item-icon">
+ {{#if vizWidgets.memoryUsed}}
+ <i class="glyphicon glyphicon-ok text-success"></i>
+ {{/if}}
+ </div>
+ <div class="item-text">Application Vs Memory Used</div>
+ </a>
+ </li>
+ {{/if}}
+ </ul>
+ </div>
+ {{/if}}
+
+ <!-- Flowrun aggregated data -->
+ <h3>Applications</h3>
+ {{em-table columns=columns rows=model.apps}}
+
+ {{#if (and cpuVCoresVizData.length vizWidgets.cpuVcores)}}
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="glyphicon glyphicon-remove pull-right" {{action "removeVizWidget" "cpuVcores"}}>
+ </div>
+ <h4 class="text-center">Application Vs CPU VCores</h4>
+ {{simple-bar-chart
+ class="chart-panel"
+ data=cpuVCoresVizData
+ xAxisTickFormatter=appIdFormatter
+ xAxisText="Application"
+ yAxisText="CPU VCores"
+ onBarChartClickCallback=onBarChartClick
+ }}
+ </div>
+ </div>
+ {{/if}}
+
+ {{#if (and memoryVizData.length vizWidgets.memoryUsed)}}
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="glyphicon glyphicon-remove pull-right" {{action "removeVizWidget" "memoryUsed"}}>
+ </div>
+ <h4 class="text-center">Application Vs Memory Used</h4>
+ {{simple-bar-chart
+ class="chart-panel"
+ data=memoryVizData
+ xAxisTickFormatter=appIdFormatter
+ yAxisTickFormatter=memoryFormatter
+ xAxisText="Application"
+ yAxisText="Memory Used"
+ onBarChartClickCallback=onBarChartClick
+ }}
+ </div>
+ </div>
+ {{/if}}
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/metrics.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/metrics.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/metrics.hbs
new file mode 100644
index 0000000..1863237
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun/metrics.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.
+--}}
+
+<h3>Flow Run <small>{{model.flowrun_uid}}</small></h3>
+<hr>
+
+<h3>GENERAL Metrics</h3>
+{{em-table columns=columns rows=generalConfigRows}}
+
+{{#if mapMetrics}}
+ <hr>
+ <h3>MAP Metrics</h3>
+ {{em-table columns=columns rows=mapConfigRows}}
+{{/if}}
+
+{{#if reduceMetrics}}
+ <h3>REDUCER Metrics</h3>
+ {{em-table columns=columns rows=reduceConfigRows}}
+{{/if}}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-services.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-services.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-services.hbs
index 649834a..9637a93 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-services.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-services.hbs
@@ -25,7 +25,7 @@
<div class="col-md-2 container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
- <h4>Services</h4>
+ Services
</div>
<div class="panel-body">
<ul class="nav nav-pills nav-stacked" id="stacked-menu">
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/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 4f24651..7c9a1f8 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
@@ -22,7 +22,7 @@ export default {
containerIdToAttemptId: function(containerId) {
if (containerId) {
var arr = containerId.split('_');
- var attemptId = ["appattempt", arr[1],
+ var attemptId = ["appattempt", arr[1],
arr[2], this.padding(arr[3], 6)];
return attemptId.join('_');
}
@@ -30,7 +30,7 @@ export default {
attemptIdToAppId: function(attemptId) {
if (attemptId) {
var arr = attemptId.split('_');
- var appId = ["application", arr[1],
+ var appId = ["application", arr[1],
arr[2]].join('_');
return appId;
}
@@ -85,6 +85,10 @@ export default {
var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD HH:mm:ss");
return dateTimeString;
},
+ timeStampToDateOnly: function(timeStamp) {
+ var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD");
+ return dateTimeString;
+ },
dateToTimeStamp: function(date) {
if (date) {
var ts = moment(date, "YYYY/MM/DD HH:mm:ss").valueOf();
@@ -126,7 +130,7 @@ export default {
}
return value.toFixed(1) + " " + unit;
},
- msToElapsedTimeUnit: function(millisecs) {
+ msToElapsedTimeUnit: function(millisecs, short) {
var seconds = Math.floor(millisecs / 1000);
var days = Math.floor(seconds / (3600 * 24));
var hours = Math.floor(seconds / 3600) - (days * 24);
@@ -148,6 +152,18 @@ export default {
}
pluralize = secs > 1? " Secs" : " Sec";
timeStrArr.push(secs + pluralize);
+ if (short) {
+ return timeStrArr[0] + (timeStrArr[1]? " : " + timeStrArr[1] : "");
+ }
return timeStrArr.join(" : ");
+ },
+ memoryBytesToMB: function(mem) {
+ var unit = "MB";
+ var value = mem / (1024 * 1024);
+ if (value / 1024 >= 0.9) {
+ value = value / 1024;
+ unit = "GB";
+ }
+ return value.toFixed(1) + " " + unit;
}
};
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/error-utils.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/error-utils.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/error-utils.js
new file mode 100644
index 0000000..463f61f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/error-utils.js
@@ -0,0 +1,58 @@
+/**
+ * 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.
+ */
+
+export default {
+ getErrorTypeByErrorCode: function(code) {
+ var errorType = '';
+ if (code) {
+ switch (code) {
+ case "500":
+ errorType = "Internal Server Error";
+ break;
+ case "502":
+ errorType = "Bad Gateway";
+ break;
+ case "503":
+ errorType = "Service Unavailable";
+ break;
+ case "400":
+ errorType = "Bad Request";
+ break;
+ case "403":
+ errorType = "Forbidden";
+ break;
+ case "404":
+ errorType = "Not Found";
+ break;
+ default:
+ errorType = "";
+ break;
+ }
+ }
+ return errorType;
+ },
+ stripErrorCodeAndMessageFromError: function(err) {
+ var obj = {};
+ if (err && err.errors && err.errors[0]) {
+ obj.errorCode = err.errors[0].status || "";
+ obj.title = err.errors[0].title || "";
+ obj.errorType = this.getErrorTypeByErrorCode(err.errors[0].status);
+ }
+ return obj;
+ }
+};
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
index 70d4ebc..8ab7ce1 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
@@ -27,6 +27,7 @@ module.exports = { // Yarn UI App configurations
timeline: 'ws/v1/applicationhistory',
cluster: 'ws/v1/cluster',
metrics: 'ws/v1/cluster/metrics',
- node: '{nodeAddress}/ws/v1/node'
+ node: '{nodeAddress}/ws/v1/node',
+ timelineV2: 'ws/v2/timeline'
},
};
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
index 105dad3..2964d33 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
@@ -46,6 +46,7 @@
"ember-data": "2.1.0",
"ember-disable-proxy-controllers": "1.0.1",
"ember-export-application-global": "1.0.5",
+ "ember-lodash": "0.0.10",
"ember-resolver": "2.0.3",
"ember-spin-spinner": "0.2.3",
"ember-truth-helpers": "1.2.0",
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/simple-bar-chart-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/simple-bar-chart-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/simple-bar-chart-test.js
new file mode 100644
index 0000000..7298e65
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/integration/components/simple-bar-chart-test.js
@@ -0,0 +1,43 @@
+/**
+ * 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('simple-bar-chart', 'Integration | Component | simple bar chart', {
+ 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`{{simple-bar-chart}}`);
+
+ assert.equal(this.$().text().trim(), '');
+
+ // Template block usage:" + EOL +
+ this.render(hbs`
+ {{#simple-bar-chart}}
+ template block text
+ {{/simple-bar-chart}}
+ `);
+
+ assert.equal(this.$().text().trim(), 'template block text');
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-app-timeline-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-app-timeline-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-app-timeline-test.js
new file mode 100644
index 0000000..e53d289
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-app-timeline-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('adapter:yarn-app-timeline', 'Unit | Adapter | yarn app timeline', {
+ // Specify the other units that are required for this test.
+ // needs: ['serializer:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let adapter = this.subject();
+ assert.ok(adapter);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-appattempt-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-appattempt-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-appattempt-test.js
new file mode 100644
index 0000000..013713f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-appattempt-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('adapter:yarn-timeline-appattempt', 'Unit | Adapter | yarn timeline appattempt', {
+ // Specify the other units that are required for this test.
+ // needs: ['serializer:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let adapter = this.subject();
+ assert.ok(adapter);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-container-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-container-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-container-test.js
new file mode 100644
index 0000000..9167268
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/adapters/yarn-timeline-container-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('adapter:yarn-timeline-container', 'Unit | Adapter | yarn timeline container', {
+ // Specify the other units that are required for this test.
+ // needs: ['serializer:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let adapter = this.subject();
+ assert.ok(adapter);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/info-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/info-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/info-test.js
new file mode 100644
index 0000000..6ca796e
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/info-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('controller:yarn-flow/info', 'Unit | Controller | yarn flow/info', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let controller = this.subject();
+ assert.ok(controller);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/runs-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/runs-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/runs-test.js
new file mode 100644
index 0000000..aa80a0f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flow/runs-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('controller:yarn-flow/runs', 'Unit | Controller | yarn flow/runs', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let controller = this.subject();
+ assert.ok(controller);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/info-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/info-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/info-test.js
new file mode 100644
index 0000000..94233ba
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/info-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('controller:yarn-flowrun/info', 'Unit | Controller | yarn flowrun/info', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let controller = this.subject();
+ assert.ok(controller);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/metrics-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/metrics-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/metrics-test.js
new file mode 100644
index 0000000..9f1650b
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/controllers/yarn-flowrun/metrics-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('controller:yarn-flowrun/metrics', 'Unit | Controller | yarn flowrun/metrics', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function(assert) {
+ let controller = this.subject();
+ assert.ok(controller);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/app-attempt-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/app-attempt-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/app-attempt-test.js
new file mode 100644
index 0000000..af7b3dc
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/app-attempt-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 AppAttemptMixin from '../../../mixins/app-attempt';
+import { module, test } from 'qunit';
+
+module('Unit | Mixin | app attempt');
+
+// Replace this with your real tests.
+test('it works', function(assert) {
+ let AppAttemptObject = Ember.Object.extend(AppAttemptMixin);
+ let subject = AppAttemptObject.create();
+ assert.ok(subject);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/charts-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/charts-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/charts-test.js
deleted file mode 100644
index 1f5ab99..0000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/mixins/charts-test.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 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 ChartsMixin from '../../../mixins/charts';
-import { module, test } from 'qunit';
-
-module('Unit | Mixin | charts');
-
-// Replace this with your real tests.
-test('it works', function(assert) {
- var ChartsObject = Ember.Object.extend(ChartsMixin);
- var subject = ChartsObject.create();
- assert.ok(subject);
-});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-app-timeline-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-app-timeline-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-app-timeline-test.js
new file mode 100644
index 0000000..e2d7e2a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-app-timeline-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-app-timeline', 'Unit | Model | yarn app timeline', {
+ // Specify the other units that are required for this test.
+ needs: []
+});
+
+test('it exists', function(assert) {
+ let model = this.subject();
+ // let store = this.store();
+ assert.ok(!!model);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-appattempt-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-appattempt-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-appattempt-test.js
new file mode 100644
index 0000000..854030d
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-appattempt-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-timeline-appattempt', 'Unit | Model | yarn timeline appattempt', {
+ // Specify the other units that are required for this test.
+ needs: []
+});
+
+test('it exists', function(assert) {
+ let model = this.subject();
+ // let store = this.store();
+ assert.ok(!!model);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-container-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-container-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-container-test.js
new file mode 100644
index 0000000..bc9da86
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/models/yarn-timeline-container-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-timeline-container', 'Unit | Model | yarn timeline container', {
+ // Specify the other units that are required for this test.
+ needs: []
+});
+
+test('it exists', function(assert) {
+ let model = this.subject();
+ // let store = this.store();
+ assert.ok(!!model);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/timeline-error-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/timeline-error-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/timeline-error-test.js
new file mode 100644
index 0000000..840b64b
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/timeline-error-test.js
@@ -0,0 +1,29 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:timeline-error', 'Unit | Route | timeline error', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+ let route = this.subject();
+ assert.ok(route);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/info-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/info-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/info-test.js
new file mode 100644
index 0000000..4b5bd383
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/info-test.js
@@ -0,0 +1,29 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:yarn-flow/info', 'Unit | Route | yarn flow/info', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+ let route = this.subject();
+ assert.ok(route);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/runs-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/runs-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/runs-test.js
new file mode 100644
index 0000000..f890b76
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flow/runs-test.js
@@ -0,0 +1,29 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:yarn-flow/runs', 'Unit | Route | yarn flow/runs', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+ let route = this.subject();
+ assert.ok(route);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/info-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/info-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/info-test.js
new file mode 100644
index 0000000..5c24276
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/info-test.js
@@ -0,0 +1,29 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:yarn-flowrun/info', 'Unit | Route | yarn flowrun/info', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+ let route = this.subject();
+ assert.ok(route);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/metrics-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/metrics-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/metrics-test.js
new file mode 100644
index 0000000..ad30840
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/routes/yarn-flowrun/metrics-test.js
@@ -0,0 +1,29 @@
+/**
+ * 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 { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:yarn-flowrun/metrics', 'Unit | Route | yarn flowrun/metrics', {
+ // Specify the other units that are required for this test.
+ // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+ let route = this.subject();
+ assert.ok(route);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-app-timeline-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-app-timeline-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-app-timeline-test.js
new file mode 100644
index 0000000..11a21db
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-app-timeline-test.js
@@ -0,0 +1,33 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-app-timeline', 'Unit | Serializer | yarn app timeline', {
+ // Specify the other units that are required for this test.
+ needs: ['serializer:yarn-app-timeline']
+});
+
+// Replace this with your real tests.
+test('it serializes records', function(assert) {
+ let record = this.subject();
+
+ let serializedRecord = record.serialize();
+
+ assert.ok(serializedRecord);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-appattempt-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-appattempt-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-appattempt-test.js
new file mode 100644
index 0000000..4e9146c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-appattempt-test.js
@@ -0,0 +1,33 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-timeline-appattempt', 'Unit | Serializer | yarn timeline appattempt', {
+ // Specify the other units that are required for this test.
+ needs: ['serializer:yarn-timeline-appattempt']
+});
+
+// Replace this with your real tests.
+test('it serializes records', function(assert) {
+ let record = this.subject();
+
+ let serializedRecord = record.serialize();
+
+ assert.ok(serializedRecord);
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-container-test.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-container-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-container-test.js
new file mode 100644
index 0000000..e55fea0
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/serializers/yarn-timeline-container-test.js
@@ -0,0 +1,33 @@
+/**
+ * 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 { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('yarn-timeline-container', 'Unit | Serializer | yarn timeline container', {
+ // Specify the other units that are required for this test.
+ needs: ['serializer:yarn-timeline-container']
+});
+
+// Replace this with your real tests.
+test('it serializes records', function(assert) {
+ let record = this.subject();
+
+ let serializedRecord = record.serialize();
+
+ assert.ok(serializedRecord);
+});
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org
[2/3] hadoop git commit: YARN-5705. Show timeline data from ATS v2 in
new web UI. Contributed by Akhil PB.
Posted by su...@apache.org.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js
new file mode 100644
index 0000000..8d9fca3
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js
@@ -0,0 +1,70 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.Model.extend({
+ flowName: DS.attr('string'),
+ runid: DS.attr('string'),
+ shownid: DS.attr('string'),
+ type: DS.attr('string'),
+ createTime: DS.attr('string'),
+ createTimeRaw: DS.attr(),
+ endTime: DS.attr('string'),
+ endTimeRaw: DS.attr(),
+ user: DS.attr('string'),
+ uid: DS.attr('string'),
+ cpuVCores: DS.attr('number'),
+ memoryUsed: DS.attr('number'),
+
+ runDurationTs: function() {
+ var duration = this.get('endTimeRaw') - this.get('createTimeRaw');
+ if (duration <= 0) {
+ duration = Date.now() - this.get('createTimeRaw');
+ }
+ return duration;
+ }.property('createTimeRaw', 'endTimeRaw'),
+
+ getElapsedTimeVizDataForBarChart: function() {
+ return {
+ label: this.get('runid'),
+ value: this.get('runDurationTs'),
+ tooltip: this.get("shownid") + "<br>" + Converter.msToElapsedTimeUnit(this.get('runDurationTs')),
+ flowrunUid: this.get('uid')
+ };
+ },
+
+ getCpuVCoresVizDataForBarChart: function() {
+ return {
+ label: this.get('runid'),
+ value: this.get('cpuVCores'),
+ tooltip: this.get("shownid") + "<br>" + 'CPU VCores: ' + this.get('cpuVCores'),
+ flowrunUid: this.get('uid')
+ };
+ },
+
+ getMemoryVizDataForBarChart: function() {
+ return {
+ label: this.get('runid'),
+ value: this.get('memoryUsed'),
+ tooltip: this.get("shownid") + "<br>" + 'Memory Used: ' + Converter.memoryBytesToMB(this.get('memoryUsed')),
+ flowrunUid: this.get('uid')
+ };
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js
new file mode 100644
index 0000000..5e3a050
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js
@@ -0,0 +1,32 @@
+/**
+ * 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 DS from 'ember-data';
+
+// For now, similar to yarn-flowrun-brief, but may add more in future.
+
+export default DS.Model.extend({
+ flowName: DS.attr('string'),
+ runid: DS.attr('string'),
+ shownid: DS.attr('string'),
+ type: DS.attr('string'),
+ createTime: DS.attr('string'),
+ endTime: DS.attr('string'),
+ user: DS.attr('string'),
+ metrics: DS.attr('array')
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-appattempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-appattempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-appattempt.js
new file mode 100644
index 0000000..dd95765
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-appattempt.js
@@ -0,0 +1,143 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.Model.extend({
+ startTime: DS.attr('string'),
+ startedTime: DS.attr('string'),
+ finishedTime: DS.attr('string'),
+ containerId: DS.attr('string'),
+ amContainerId: DS.attr('string'),
+ nodeHttpAddress: DS.attr('string'),
+ nodeId: DS.attr('string'),
+ hosts: DS.attr('string'),
+ logsLink: DS.attr('string'),
+ state: DS.attr('string'),
+ appAttemptId: DS.attr('string'),
+
+ appId: Ember.computed("id",function () {
+ var id = this.get("id");
+ id = id.split("_");
+
+ id[0] = "application";
+ id.pop();
+
+ return id.join("_");
+ }),
+
+ attemptStartedTime: function() {
+ var startTime = this.get("startTime");
+ // If startTime variable is not present, get from startedTime
+ if (startTime === undefined ||
+ startTime === "Invalid date") {
+ startTime = this.get("startedTime");
+ }
+
+ return startTime;
+ }.property("startedTime"),
+
+ startTs: function() {
+ return Converter.dateToTimeStamp(this.get('attemptStartedTime'));
+ }.property("startTime"),
+
+ finishedTs: function() {
+ var ts = Converter.dateToTimeStamp(this.get("finishedTime"));
+ return ts;
+ }.property("finishedTime"),
+
+ validatedFinishedTs: function() {
+ if (this.get("finishedTs") < this.get("startTs")) {
+ return "";
+ }
+ return this.get("finishedTime");
+ }.property("finishedTime"),
+
+ shortAppAttemptId: function() {
+ if (!this.get("containerId")) {
+ return this.get("id");
+ }
+ return "attempt_" +
+ parseInt(Converter.containerIdToAttemptId(this.get("containerId")).split("_")[3]);
+ }.property("containerId"),
+
+ appMasterContainerId: function() {
+ var id = this.get("containerId");
+ // If containerId variable is not present, get from amContainerId
+ if (id === undefined) {
+ id = this.get("amContainerId");
+ }
+ return id;
+ }.property("amContainerId"),
+
+ IsAmNodeUrl: function() {
+ var url = this.get("nodeHttpAddress");
+ // If nodeHttpAddress variable is not present, hardcode it.
+ if (url === undefined) {
+ url = "Not Available";
+ }
+ return url !== "Not Available";
+ }.property("nodeHttpAddress"),
+
+ amNodeId : function() {
+ var id = this.get("nodeId");
+ // If nodeId variable is not present, get from host
+ if (id === undefined) {
+ id = this.get("hosts");
+ }
+ return id;
+ }.property("nodeId"),
+
+ IsLinkAvailable: function() {
+ var url = this.get("logsLink");
+ // If logsLink variable is not present, hardcode its.
+ if (url === undefined) {
+ url = "Not Available";
+ }
+ return url !== "Not Available";
+ }.property("logsLink"),
+
+ elapsedTime: function() {
+ var elapsedMs = this.get("finishedTs") - this.get("startTs");
+ if (elapsedMs <= 0) {
+ elapsedMs = Date.now() - this.get("startTs");
+ }
+ return Converter.msToElapsedTimeUnit(elapsedMs);
+ }.property(),
+
+ tooltipLabel: function() {
+ return "<p>Id:" + this.get("id") +
+ "</p><p>ElapsedTime:" +
+ String(this.get("elapsedTime")) + "</p>";
+ }.property(),
+
+ link: function() {
+ return "/yarn-app-attempt/" + this.get("id");
+ }.property(),
+
+ linkname: function() {
+ return "yarn-app-attempt";
+ }.property(),
+
+ attemptState: function() {
+ return this.get("state");
+ }.property(),
+
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-container.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-container.js
new file mode 100644
index 0000000..7f39345
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-timeline-container.js
@@ -0,0 +1,63 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.Model.extend({
+ allocatedMB: DS.attr('number'),
+ allocatedVCores: DS.attr('number'),
+ assignedNodeId: DS.attr('string'),
+ priority: DS.attr('number'),
+ startedTime: DS.attr('number'),
+ finishedTime: DS.attr('number'),
+ logUrl: DS.attr('string'),
+ containerExitStatus: DS.attr('number'),
+ containerState: DS.attr('string'),
+ nodeHttpAddress: DS.attr('string'),
+
+ startTs: function() {
+ return Converter.dateToTimeStamp(this.get("startedTime"));
+ }.property("startedTime"),
+
+ finishedTs: function() {
+ var ts = Converter.dateToTimeStamp(this.get("finishedTime"));
+ return ts;
+ }.property("finishedTime"),
+
+ validatedFinishedTs: function() {
+ if (this.get("finishedTs") < this.get("startTs")) {
+ return "";
+ }
+ return this.get("finishedTime");
+ }.property("finishedTime"),
+
+ elapsedTime: function() {
+ var elapsedMs = this.get("finishedTs") - this.get("startTs");
+ if (elapsedMs <= 0) {
+ elapsedMs = Date.now() - this.get("startTs");
+ }
+ return Converter.msToElapsedTimeUnit(elapsedMs);
+ }.property(),
+
+ tooltipLabel: function() {
+ return "<p>Id:" + this.get("id") +
+ "</p><p>ElapsedTime:" +
+ String(this.get("elapsedTime")) + "</p>";
+ }.property(),
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
index a45861e..00d6d3e 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
@@ -56,6 +56,18 @@ Router.map(function() {
this.route('notfound', { path: '*:' });
this.route('yarn-app-attempts', { path: '/yarn-app-attempts/:app_id' });
this.route('yarn-queues', { path: '/yarn-queues/:queue_name' });
+
+ this.route('yarn-flow-activity');
+ this.route('yarn-flow', { path: '/yarn-flow/:flow_uid'}, function() {
+ this.route('info');
+ this.route('runs');
+ });
+ this.route('yarn-flowrun', { path: '/yarn-flowrun/:flowrun_uid'}, function() {
+ this.route('info');
+ this.route('metrics');
+ });
+ this.route('yarn-flowrun-metric', { path: '/yarn-flowrun-metric/:flowrun_uid/:metric_id'});
+ this.route('timeline-error', {path: 'timeline-error/:error_id'});
});
export default Router;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/timeline-error.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/timeline-error.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/timeline-error.js
new file mode 100644
index 0000000..c2e5fc5
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/timeline-error.js
@@ -0,0 +1,29 @@
+/**
+ * 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.Route.extend({
+ afterModel(model/*, transition*/) {
+ model.error_id = "error";
+ model.isValidErrorCode = false;
+ if (model.errorCode && model.errorCode !== "0") {
+ model.isValidErrorCode = true;
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempt.js
index d449adf..b561bf6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempt.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempt.js
@@ -17,34 +17,28 @@
*/
import Ember from 'ember';
-
import AbstractRoute from './abstract';
+import AppAttemptMixin from 'yarn-ui/mixins/app-attempt';
-export default AbstractRoute.extend({
+export default AbstractRoute.extend(AppAttemptMixin, {
model(param) {
return Ember.RSVP.hash({
- attempt: this.store.findRecord('yarn-app-attempt', param.app_attempt_id, {reload: true}),
-
- rmContainers: this.store.query('yarn-container',
- {
- app_attempt_id: param.app_attempt_id,
- is_rm: true
- }),
-
- tsContainers: this.store.query('yarn-container',
- {
- app_attempt_id: param.app_attempt_id,
- is_rm: false
- }).catch (function() {
- // Promise rejected, fulfill with some default value to
- // use as the route's model and continue on with the transition
- return [];
- })
+ attempt: this.fetchAttemptInfoFromRMorATS(param.app_attempt_id, this.store),
+ rmContainers: this.store.query('yarn-container', {
+ app_attempt_id: param.app_attempt_id
+ }),
+ tsContainers: this.store.query('yarn-timeline-container', {
+ app_attempt_id: param.app_attempt_id
+ }).catch(function() {
+ return [];
+ })
});
},
unloadAll() {
this.store.unloadAll('yarn-app-attempt');
+ this.store.unloadAll('yarn-timeline-appattempt');
this.store.unloadAll('yarn-container');
+ this.store.unloadAll('yarn-timeline-container');
}
});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempts.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempts.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempts.js
index 78ff1c9..233bfc8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempts.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app-attempts.js
@@ -16,19 +16,20 @@
* limitations under the License.
*/
+import Ember from 'ember';
import AbstractRoute from './abstract';
+import AppAttemptMixin from 'yarn-ui/mixins/app-attempt';
-export default AbstractRoute.extend({
+export default AbstractRoute.extend(AppAttemptMixin, {
model(param) {
- return this.store.query('yarn-app-attempt', { appId: param.app_id}).then(function (attempts) {
- return {
- appId: param.app_id,
- attempts: attempts
- };
+ return Ember.RSVP.hash({
+ appId: param.app_id,
+ attempts: this.fetchAttemptListFromRMorATS(param.app_id, this.store)
});
},
unloadAll() {
this.store.unloadAll('yarn-app-attempt');
+ this.store.unloadAll('yarn-timeline-appattempt');
}
});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js
index 86d845c..98b0cc8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js
@@ -17,29 +17,26 @@
*/
import Ember from 'ember';
-
import AbstractRoute from './abstract';
+import AppAttemptMixin from 'yarn-ui/mixins/app-attempt';
-export default AbstractRoute.extend({
+export default AbstractRoute.extend(AppAttemptMixin, {
model(param) {
return Ember.RSVP.hash({
- app: this.store.find('yarn-app', param.app_id),
+ app: this.fetchAppInfoFromRMorATS(param.app_id, this.store),
rmContainers: this.store.find('yarn-app', param.app_id).then(function() {
return this.store.query('yarn-app-attempt', {appId: param.app_id}).then(function (attempts) {
if (attempts && attempts.get('firstObject')) {
var appAttemptId = attempts.get('firstObject').get('appAttemptId');
- var rmContainers = this.store.query('yarn-container',
- {
- app_attempt_id: appAttemptId,
- is_rm: true
- });
- return rmContainers;
+ return this.store.query('yarn-container', {
+ app_attempt_id: appAttemptId
+ });
}
}.bind(this));
}.bind(this)),
- nodes: this.store.findAll('yarn-rm-node'),
+ nodes: this.store.findAll('yarn-rm-node', {reload: true}),
});
},
@@ -48,5 +45,6 @@ export default AbstractRoute.extend({
this.store.unloadAll('yarn-app-attempt');
this.store.unloadAll('yarn-container');
this.store.unloadAll('yarn-rm-node');
+ this.store.unloadAll('yarn-app-timeline');
}
});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js
new file mode 100644
index 0000000..4c1d02e
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js
@@ -0,0 +1,37 @@
+/**
+ * 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 AbstractRoute from './abstract';
+import ErrorUtils from 'yarn-ui/utils/error-utils';
+
+export default AbstractRoute.extend({
+ model() {
+ return this.store.findAll('yarn-flow-activity', {reload: true});
+ },
+
+ unloadAll() {
+ this.store.unloadAll('yarn-flow-activity');
+ },
+
+ actions: {
+ error(err/*, transition*/) {
+ var errObj = ErrorUtils.stripErrorCodeAndMessageFromError(err);
+ this.transitionTo('timeline-error', errObj);
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js
new file mode 100644
index 0000000..1da9064
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js
@@ -0,0 +1,53 @@
+/**
+ * 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 AbstractRoute from './abstract';
+import ErrorUtils from 'yarn-ui/utils/error-utils';
+
+export default AbstractRoute.extend({
+ model(params) {
+ return Ember.RSVP.hash({
+ flowRuns: this.store.query('yarn-flowrun-brief', {flowuid: params.flow_uid}),
+ flowUid: params.flow_uid,
+ lastFlowExecutionInfo: this.getLastFlowExecutionInfo(params.flow_uid)
+ });
+ },
+
+ getLastFlowExecutionInfo(flowUid) {
+ var yarnfaCtrl = this.controllerFor('yarn-flow-activity');
+ var recentFlow = yarnfaCtrl.getLastFlowExecutionInfoByFlowUid(flowUid);
+ if (recentFlow) {
+ return recentFlow;
+ } else {
+ return null;
+ }
+ },
+
+ unloadAll() {
+ this.store.unloadAll('yarn-flowrun-brief');
+ },
+
+ actions: {
+ error(err/*, transition*/) {
+ var errObj = ErrorUtils.stripErrorCodeAndMessageFromError(err);
+ this.transitionTo('timeline-error', errObj);
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/info.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/info.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/info.js
new file mode 100644
index 0000000..8719170
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/info.js
@@ -0,0 +1,22 @@
+/**
+ * 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.Route.extend({
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/runs.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/runs.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/runs.js
new file mode 100644
index 0000000..8719170
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow/runs.js
@@ -0,0 +1,22 @@
+/**
+ * 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.Route.extend({
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun-metric.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun-metric.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun-metric.js
new file mode 100644
index 0000000..3c54259
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun-metric.js
@@ -0,0 +1,107 @@
+/**
+ * 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 ErrorUtils from 'yarn-ui/utils/error-utils';
+
+export default Ember.Route.extend({
+ model: function(params) {
+ var _this = this;
+ var appsArr = [];
+ var flowrun = _this.store.queryRecord('yarn-flowrun', {flowrun_uid: params.flowrun_uid,
+ metricstoretrieve: params.metric_id}).then(function(value) {
+ var apps = _this.store.query('yarn-app-flowrun', {flowrunUid: params.flowrun_uid,
+ metricstoretrieve: params.metric_id}).then(function(value) {
+ for (var i = 0; i < value.content.length; i++) {
+ var tasks = undefined;
+ // No need to fetch task or container info for Job counters.
+ if (params.metric_id.indexOf("JobCounter") === -1) {
+ var entityType = "MAPREDUCE_TASK";
+ // CPU and MEMORY are container metrics.
+ if (params.metric_id === "CPU" || params.metric_id === "MEMORY") {
+ entityType = "YARN_CONTAINER";
+ }
+ tasks = _this.fetchTasksForEntity(value.content[i]._data.uid, params.metric_id, entityType);
+ }
+ appsArr.push(Ember.RSVP.hash({id: value.content[i].id, tasks: tasks , metrics: value.content[i]._data.metrics}));
+ }
+ return Ember.RSVP.all(appsArr);
+ });
+ return Ember.RSVP.hash({run: value, id: value.id, metrics: value._internalModel._data.metrics, apps: apps});
+ });
+ return Ember.RSVP.all([Ember.RSVP.hash({flowrun:flowrun, metricId: params.metric_id})]);
+ },
+
+ fetchTasksForEntity: function(appUid, metricId, entityType) {
+ return this.store.query('yarn-entity', {
+ app_uid: appUid,
+ metricstoretrieve: metricId,
+ entity_type: entityType,
+ metricslimit: 100
+ }).then(function(value) {
+ var tasksArr = [];
+ for (var j = 0; j < value.content.length; j++) {
+ tasksArr.push(Ember.RSVP.hash({id: value.content[j].id, metrics: value.content[j]._data.metrics}));
+ }
+ return Ember.RSVP.all(tasksArr);
+ });
+ },
+
+ getMetricValue: function(metrics) {
+ var metricValue = 0;
+ if (metrics.length > 0) {
+ for (var j in metrics[0].values) {
+ metricValue = metrics[0].values[j];
+ break;
+ }
+ }
+ return metricValue.toString();
+ },
+
+ setupController: function(controller, model) {
+ var metricsArr = [];
+ var flowRunId = model[0].flowrun.id;
+ metricsArr.push([model[0].flowrun.id, this.getMetricValue(model[0].flowrun.metrics)]);
+ for (var i = 0; i < model[0].flowrun.apps.length; i++) {
+ var appId = flowRunId + '-' + model[0].flowrun.apps[i].id;
+ metricsArr.push([appId, this.getMetricValue(model[0].flowrun.apps[i].metrics)]);
+ if (model[0].flowrun.apps[i].tasks) {
+ for (var j = 0; j < model[0].flowrun.apps[i].tasks.length; j++) {
+ var taskId = appId + '-' + model[0].flowrun.apps[i].tasks[j].id;
+ metricsArr.push([taskId, this.getMetricValue(model[0].flowrun.apps[i].tasks[j].metrics)]);
+ }
+ }
+ }
+ controller.set('flowrun', model[0].flowrun);
+ controller.set('metric_id', model[0].metricId);
+ controller.set('arr', metricsArr);
+ },
+
+ unloadAll: function() {
+ this.store.unloadAll('yarn-flowrun');
+ this.store.unloadAll('yarn-app-flowrun');
+ this.store.unloadAll('yarn-entity');
+ },
+
+ actions: {
+ error(err/*, transition*/) {
+ var errObj = ErrorUtils.stripErrorCodeAndMessageFromError(err);
+ this.transitionTo('timeline-error', errObj);
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js
new file mode 100644
index 0000000..3163a67
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js
@@ -0,0 +1,58 @@
+/**
+ * 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 AbstractRoute from './abstract';
+import ErrorUtils from 'yarn-ui/utils/error-utils';
+
+export default AbstractRoute.extend({
+ model: function(params) {
+ return Ember.RSVP.hash({
+ flowrun: this.store.findRecord('yarn-flowrun', params.flowrun_uid),
+ apps: this.store.query('yarn-app-flowrun', {flowrunUid: params.flowrun_uid}),
+ flowrun_uid: params.flowrun_uid,
+ parentFlowUid: this.getParentFlowUid()
+ });
+ },
+
+ getParentFlowUid: function() {
+ var parentFlowModel = this.modelFor('yarn-flow');
+ if (parentFlowModel) {
+ return parentFlowModel.flowUid;
+ } else {
+ return '';
+ }
+ },
+
+ unloadAll: function() {
+ this.store.unloadAll('yarn-flowrun');
+ this.store.unloadAll('yarn-app-flowrun');
+ },
+
+ actions: {
+ reload: function() {
+ this.modelFor('apps').reload();
+ },
+
+ error(err/*, transition*/) {
+ var errObj = ErrorUtils.stripErrorCodeAndMessageFromError(err);
+ this.transitionTo('timeline-error', errObj);
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/info.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/info.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/info.js
new file mode 100644
index 0000000..8719170
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/info.js
@@ -0,0 +1,22 @@
+/**
+ * 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.Route.extend({
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/metrics.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/metrics.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/metrics.js
new file mode 100644
index 0000000..8719170
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun/metrics.js
@@ -0,0 +1,22 @@
+/**
+ * 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.Route.extend({
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js
new file mode 100644
index 0000000..289c1cd
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js
@@ -0,0 +1,64 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var events = payload.events,
+ appFinishedEvent = events.findBy('id', 'YARN_APPLICATION_FINISHED'),
+ finishedTs = appFinishedEvent? appFinishedEvent.timestamp : Date.now(),
+ appState = (appFinishedEvent && appFinishedEvent.info)? appFinishedEvent.info.YARN_APPLICATION_STATE : "N/A",
+ metrics = payload.metrics,
+ cpuMetric = metrics.findBy('id', 'CPU'),
+ memoryMetric = metrics.findBy('id', 'MEMORY'),
+ cpu = cpuMetric? cpuMetric.values[Object.keys(cpuMetric.values)[0]] : -1,
+ memory = memoryMetric? memoryMetric.values[Object.keys(memoryMetric.values)[0]] : -1;
+
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName,
+ attributes: {
+ appId: payload.id,
+ type: payload.info.YARN_APPLICATION_TYPE,
+ uid: payload.info.UID,
+ metrics: metrics,
+ startedTs: payload.createdtime,
+ finishedTs: finishedTs,
+ state: payload.info.YARN_APPLICATION_STATE || appState,
+ cpuVCores: cpu,
+ memoryUsed: memory
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id, requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
+ var normalizedArrayResponse = {};
+
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ });
+
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-timeline.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-timeline.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-timeline.js
new file mode 100644
index 0000000..680fe8c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-timeline.js
@@ -0,0 +1,76 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+ internalNormalizeSingleResponse(store, primaryModelClass, payload, id) {
+
+ var events = payload.events,
+ appFinishedEvent = events.findBy('id', 'YARN_APPLICATION_FINISHED'),
+ startedTime = payload.createdtime,
+ finishedTime = appFinishedEvent? appFinishedEvent.timestamp : Date.now(),
+ elapsedTime = finishedTime - startedTime,
+ diagnostics = payload.info.YARN_APPLICATION_DIAGNOSTICS_INFO,
+ priority = payload.info.YARN_APPLICATION_PRIORITY;
+
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName,
+ attributes: {
+ appName: payload.info.YARN_APPLICATION_NAME,
+ user: payload.info.YARN_APPLICATION_USER,
+ queue: "N/A",
+ state: payload.info.YARN_APPLICATION_STATE,
+ startTime: Converter.timeStampToDate(startedTime),
+ elapsedTime: elapsedTime,
+ finishedTime: Converter.timeStampToDate(finishedTime),
+ finalStatus: payload.info.YARN_APPLICATION_FINAL_STATUS,
+ progress: 100,
+ applicationType: payload.info.YARN_APPLICATION_TYPE,
+ diagnostics: (diagnostics && diagnostics !== 'null')? diagnostics : '',
+ amContainerLogs: '',
+ amHostHttpAddress: '',
+ logAggregationStatus: '',
+ unmanagedApplication: payload.info.YARN_APPLICATION_UNMANAGED_APPLICATION || 'N/A',
+ amNodeLabelExpression: payload.configs.YARN_AM_NODE_LABEL_EXPRESSION,
+ priority: (priority !== undefined)? priority : 'N/A',
+ allocatedMB: 0,
+ allocatedVCores: 0,
+ runningContainers: 0,
+ memorySeconds: payload.info.YARN_APPLICATION_MEM_METRIC,
+ vcoreSeconds: payload.info.YARN_APPLICATION_CPU_METRIC,
+ preemptedResourceMB: 0,
+ preemptedResourceVCores: 0,
+ numNonAMContainerPreempted: 0,
+ numAMContainerPreempted: 0,
+ clusterUsagePercentage: 0,
+ queueUsagePercentage: 0,
+ currentAppAttemptId: payload.info.YARN_APPLICATION_LATEST_APP_ATTEMPT
+ }
+ };
+
+ return fixedPayload;
+ },
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id/*, requestType*/) {
+ var p = this.internalNormalizeSingleResponse(store, primaryModelClass, payload, id);
+ return {data: p};
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/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 172286f..1462f5a 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
@@ -43,7 +43,6 @@ export default DS.JSONAPISerializer.extend({
queue: payload.queue,
state: payload.state,
startTime: Converter.timeStampToDate(payload.startedTime),
- //elapsedTime: Converter.msToElapsedTime(payload.elapsedTime),
elapsedTime: payload.elapsedTime,
finishedTime: Converter.timeStampToDate(payload.finishedTime),
finalStatus: payload.finalStatus,
@@ -55,7 +54,7 @@ export default DS.JSONAPISerializer.extend({
logAggregationStatus: payload.logAggregationStatus,
unmanagedApplication: payload.unmanagedApplication || 'N/A',
amNodeLabelExpression: payload.amNodeLabelExpression,
- priority: payload.priority || 'N/A',
+ priority: (payload.priority !== undefined)? payload.priority : 'N/A',
allocatedMB: payload.allocatedMB,
allocatedVCores: payload.allocatedVCores,
runningContainers: payload.runningContainers,
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-entity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-entity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-entity.js
new file mode 100644
index 0000000..9ed70cf
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-entity.js
@@ -0,0 +1,51 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-entity
+ attributes: {
+ entityId: payload.id,
+ type: payload.type,
+ uid: payload.info.UID,
+ metrics: payload.metrics
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id,
+ requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js
new file mode 100644
index 0000000..c26872b
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js
@@ -0,0 +1,54 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-timeline-flow
+ attributes: {
+ cluster: payload.info.SYSTEM_INFO_CLUSTER,
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ lastExecDate: Converter.timeStampToDateOnly(payload.info.SYSTEM_INFO_DATE),
+ user: payload.info.SYSTEM_INFO_USER,
+ flowruns: payload.flowruns,
+ uid: payload.info.UID
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id,
+ requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ normalizedArrayResponse.data = payload.map(singleEntity => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleEntity, singleEntity.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js
new file mode 100644
index 0000000..67603bb
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js
@@ -0,0 +1,64 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var metrics = payload.metrics,
+ cpuMetric = metrics.findBy('id', 'CPU'),
+ cpu = cpuMetric? cpuMetric.values[Object.keys(cpuMetric.values)[0]] : -1,
+ memMetric = metrics.findBy('id', 'MEMORY'),
+ memory = memMetric? memMetric.values[Object.keys(memMetric.values)[0]] : -1;
+
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-flowrun-brief
+ attributes: {
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ runid: payload.info.SYSTEM_INFO_FLOW_RUN_ID,
+ shownid: payload.id,
+ type: payload.type,
+ createTime: Converter.timeStampToDate(payload.createdtime),
+ createTimeRaw: payload.createdtime,
+ endTime: Converter.timeStampToDate(payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME),
+ endTimeRaw: payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME || 0,
+ user: payload.info.SYSTEM_INFO_USER,
+ uid: payload.info.UID,
+ cpuVCores: cpu,
+ memoryUsed: memory
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id, requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
+ var normalizedArrayResponse = {data: []};
+
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ });
+
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js
new file mode 100644
index 0000000..931d134
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js
@@ -0,0 +1,63 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ internalNormalizeSingleResponse(store, primaryModelClass, payload, id) {
+ var recordId = id;
+ if (!recordId) {
+ recordId = payload.id;
+ }
+ var fixedPayload = {
+ id: recordId,
+ type: primaryModelClass.modelName,
+ attributes: {
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ runid: payload.info.SYSTEM_INFO_FLOW_RUN_ID,
+ shownid: payload.id,
+ type: payload.type,
+ createTime: Converter.timeStampToDate(payload.createdtime),
+ endTime: Converter.timeStampToDate(payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME),
+ user: payload.info.SYSTEM_INFO_USER,
+ metrics: payload.metrics,
+ }
+ };
+
+ return fixedPayload;
+ },
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id/*, requestType*/) {
+ var p = this.internalNormalizeSingleResponse(store,
+ primaryModelClass, payload, id);
+ return { data: p };
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload/*, id, requestType*/) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.internalNormalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-queue.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-queue.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-queue.js
index 766c5c7..4fc1a29 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-queue.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-queue.js
@@ -116,30 +116,14 @@ export default DS.JSONAPISerializer.extend({
};
},
- normalizeArrayResponse(store, primaryModelClass, payload, id,
- requestType) {
+ normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
var normalizedArrayResponse = {};
- var result = this.handleQueue(store,
- primaryModelClass,
+ var result = this.handleQueue(store, primaryModelClass,
payload.scheduler.schedulerInfo, "root", requestType);
normalizedArrayResponse.data = result.data;
normalizedArrayResponse.included = result.includedData;
- console.log(normalizedArrayResponse);
-
- return normalizedArrayResponse;
-
- /*
- // return expected is { data: [ {}, {} ] }
- var normalizedArrayResponse = {};
-
- // payload has apps : { app: [ {},{},{} ] }
- // need some error handling for ex apps or app may not be defined.
- normalizedArrayResponse.data = payload.apps.app.map(singleApp => {
- return this.normalizeSingleResponse(store, primaryModelClass, singleApp, singleApp.id, requestType);
- }, this);
return normalizedArrayResponse;
- */
}
-});
\ No newline at end of file
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-appattempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-appattempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-appattempt.js
new file mode 100644
index 0000000..0245b20
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-appattempt.js
@@ -0,0 +1,69 @@
+/**
+ * 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 DS from 'ember-data';
+import Ember from 'ember';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+ internalNormalizeSingleResponse(store, primaryModelClass, payload) {
+ var payloadEvents = payload.events,
+ createdEvent = payloadEvents.filterBy('id', 'YARN_APPLICATION_ATTEMPT_REGISTERED')[0],
+ startedTime = createdEvent? createdEvent.timestamp : Date.now(),
+ finishedEvent = payloadEvents.filterBy('id', 'YARN_APPLICATION_ATTEMPT_FINISHED')[0],
+ finishedTime = finishedEvent? finishedEvent.timestamp : Date.now();
+
+ var fixedPayload = {
+ id: payload.id,
+ type: primaryModelClass.modelName,
+ attributes: {
+ startTime: Converter.timeStampToDate(startedTime),
+ startedTime: Converter.timeStampToDate(startedTime),
+ finishedTime: Converter.timeStampToDate(finishedTime),
+ containerId: payload.info.YARN_APPLICATION_ATTEMPT_MASTER_CONTAINER,
+ amContainerId: payload.info.YARN_APPLICATION_ATTEMPT_MASTER_CONTAINER,
+ nodeHttpAddress: '',
+ nodeId: '',
+ hosts: payload.info.YARN_APPLICATION_ATTEMPT_HOST,
+ state: payload.info.YARN_APPLICATION_ATTEMPT_HOST,
+ logsLink: '',
+ appAttemptId: payload.id
+ }
+ };
+ return fixedPayload;
+ },
+
+ normalizeSingleResponse(store, primaryModelClass, payload/*, id, requestType*/) {
+ var normalized = this.internalNormalizeSingleResponse(store,
+ primaryModelClass, payload);
+ return {data: normalized};
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload/*, id, requestType*/) {
+ var normalizedArrayResponse = {
+ data: []
+ };
+ if (payload && Ember.isArray(payload) && !Ember.isEmpty(payload)) {
+ normalizedArrayResponse.data = payload.map(singleAttempt => {
+ return this.internalNormalizeSingleResponse(store, primaryModelClass,
+ singleAttempt);
+ });
+ }
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-container.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-container.js
new file mode 100644
index 0000000..f2c60f6
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-timeline-container.js
@@ -0,0 +1,71 @@
+/**
+ * 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 DS from 'ember-data';
+import Ember from 'ember';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+ internalNormalizeSingleResponse(store, primaryModelClass, payload) {
+ var payloadEvents = payload.events,
+ createdEvent = payloadEvents.filterBy('id', 'YARN_RM_CONTAINER_CREATED')[0],
+ startedTime = createdEvent? createdEvent.timestamp : Date.now(),
+ finishedEvent = payloadEvents.filterBy('id', 'YARN_RM_CONTAINER_FINISHED')[0],
+ finishedTime = finishedEvent? finishedEvent.timestamp : Date.now(),
+ containerExitStatus = finishedEvent? finishedEvent.info.YARN_CONTAINER_EXIT_STATUS : '',
+ containerState = finishedEvent? finishedEvent.info.YARN_CONTAINER_STATE : '';
+
+ var fixedPayload = {
+ id: payload.id,
+ type: primaryModelClass.modelName,
+ attributes: {
+ allocatedMB: payload.info.YARN_CONTAINER_ALLOCATED_MEMORY,
+ allocatedVCores: payload.info.YARN_CONTAINER_ALLOCATED_VCORE,
+ assignedNodeId: payload.info.YARN_CONTAINER_ALLOCATED_HOST,
+ priority: payload.info.YARN_CONTAINER_ALLOCATED_PRIORITY,
+ startedTime: Converter.timeStampToDate(startedTime),
+ finishedTime: Converter.timeStampToDate(finishedTime),
+ nodeHttpAddress: payload.info.YARN_CONTAINER_ALLOCATED_HOST_HTTP_ADDRESS,
+ containerExitStatus: containerExitStatus,
+ containerState: containerState
+ }
+ };
+ return fixedPayload;
+ },
+
+ normalizeSingleResponse(store, primaryModelClass, payload/*, id, requestType*/) {
+ var normalized = this.internalNormalizeSingleResponse(store,
+ primaryModelClass, payload);
+ return {
+ data: normalized
+ };
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload/*, id, requestType*/) {
+ var normalizedArrayResponse = {
+ data: []
+ };
+ if (payload && Ember.isArray(payload) && !Ember.isEmpty(payload)) {
+ normalizedArrayResponse.data = payload.map(singleContainer => {
+ return this.internalNormalizeSingleResponse(store, primaryModelClass,
+ singleContainer);
+ });
+ }
+ return normalizedArrayResponse;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css
index e3dfcd9..8b8ea56 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css
@@ -314,3 +314,86 @@ div.attempt-info-panel table > tbody > tr > td:last-of-type {
overflow: hidden;
text-overflow: ellipsis;
}
+
+#main {
+ float: left;
+ width: 750px;
+}
+
+#sidebar {
+ float: right;
+ width: 100px;
+}
+
+#sequence {
+ width: 600px;
+ height: 70px;
+}
+
+#legend {
+ padding: 10px 0 0 3px;
+}
+
+#sequence text, #legend text {
+ font-weight: 600;
+ fill: #fff;
+}
+
+#chart {
+ position: relative;
+}
+
+#chart path {
+ stroke: #fff;
+}
+
+#explanation {
+ position: absolute;
+ top: 360px;
+ left: 385px;
+ width: 230px;
+ text-align: center;
+ color: #666;
+ z-index: -1;
+}
+
+.simple-bar-chart .axis text {
+ font: 10px sans-serif;
+}
+
+.simple-bar-chart .axis path, .simple-bar-chart .axis line {
+ fill: none;
+ stroke: #000;
+ stroke-width: 1px;
+}
+
+.simple-bar-chart rect {
+ fill: steelblue;
+}
+
+.simple-bar-chart rect:hover {
+ fill: brown;
+ cursor: pointer;
+}
+
+.yarn-flow-runs .chart-panel, .yarn-flow-runinfo .chart-panel {
+ overflow: auto;
+}
+
+.yarn-flow-runs .glyphicon-remove, .yarn-flow-runinfo .glyphicon-remove {
+ cursor: pointer;
+}
+
+.yarn-flow-runs .glyphicon-remove:hover, .yarn-flow-runinfo .glyphicon-remove:hover {
+ color: #c9302c;
+}
+
+.yarn-flow-runs .dropdown-menu .item-text, .yarn-flow-runinfo .dropdown-menu .item-text {
+ width: auto;
+ display: inline-block;
+}
+
+.yarn-flow-runs .dropdown-menu .item-icon, .yarn-flow-runinfo .dropdown-menu .item-icon {
+ width: 14px;
+ display: inline-block;
+}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/application.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/application.hbs
index a6d247b..c3154b4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/application.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/application.hbs
@@ -56,6 +56,11 @@
<span class="sr-only">(current)</span>
{{/link-to}}
{{/link-to}}
+ {{#link-to 'yarn-flow-activity' tagName="li"}}
+ {{#link-to 'yarn-flow-activity' class="navigation-link"}}Flow Activity
+ <span class="sr-only">(current)</span>
+ {{/link-to}}
+ {{/link-to}}
{{#link-to 'yarn-nodes.table' tagName="li" current-when="yarn-nodes.table yarn-nodes.heatmap"}}
{{#link-to 'yarn-nodes.table' class="navigation-link"}}Nodes
<span class="sr-only">(current)</span>
@@ -73,7 +78,6 @@
<br/>
<br/>
<br/>
-
</div>
<div class="footer">
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/timeline-error.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/timeline-error.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/timeline-error.hbs
new file mode 100644
index 0000000..e33c77c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/timeline-error.hbs
@@ -0,0 +1,22 @@
+{{!--
+ 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.
+--}}
+
+{{#if model.isValidErrorCode}}
+ <h3 class="text-center text-danger">{{model.errorCode}}: {{model.errorType}}</h3>
+{{/if}}
+<h2 class="text-center text-danger">Timeline server failed with an error</h2>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempt.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempt.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempt.hbs
index 1dbae9a..7579bdc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempt.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempt.hbs
@@ -17,27 +17,39 @@
}}
{{breadcrumb-bar breadcrumbs=breadcrumbs}}
-<br/><br/><br/>
-<div class="container-fluid">
- <div class="row">
- {{#if model.attempt}}
- <div class="container-fluid">
+
+<div class="row container-fluid">
+ <div class="col-md-2">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ Application Attempt
+ </div>
+ <div class="panel-body">
+ <ul class="nav nav-pills nav-stacked" id="stacked-menu">
+ <ul class="nav nav-pills nav-stacked collapse in">
+ {{#link-to 'yarn-app-attempt' tagName="li"}}
+ {{#link-to 'yarn-app-attempt' model.attempt.id}}Attempt Info{{/link-to}}
+ {{/link-to}}
+ </ul>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-10">
+ <div class="row container-fluid">
+ {{#if model.attempt}}
<div class="panel panel-default">
<div class="panel-heading">
- Application attempt Information
+ Attempt Information
</div>
{{app-attempt-table attempt=model.attempt}}
</div>
- </div>
- {{/if}}
- </div>
-
- <!-- containers table -->
- <div class="row">
- {{#if (or model.rmContainers model.tsContainers)}}
- {{timeline-view parent-id="containers-timeline-div" my-id="timeline-view" height="400" rmModel=model.rmContainers tsModel=model.tsContainers label="shortAppAttemptId" attemptModel=false}}
- {{/if}}
+ {{/if}}
+ </div>
+ <div class="row">
+ {{#if (or model.rmContainers model.tsContainers)}}
+ {{timeline-view parent-id="containers-timeline-div" my-id="timeline-view" height="400" rmModel=model.rmContainers tsModel=model.tsContainers label="shortAppAttemptId" attemptModel=false}}
+ {{/if}}
+ </div>
</div>
</div>
-
-{{outlet}}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempts.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempts.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempts.hbs
index 0af1457..283d78a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempts.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app-attempts.hbs
@@ -24,7 +24,11 @@
<div class="col-md-2 container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
- <h4>Application</h4>
+ {{#if service}}
+ Service
+ {{else}}
+ Application
+ {{/if}}
</div>
<div class="panel-body">
<ul class="nav nav-pills nav-stacked" id="stacked-menu">
@@ -44,7 +48,6 @@
</div>
<div class="col-md-10 container-fluid">
- <!-- timeline view of children -->
<div class="row">
{{timeline-view parent-id="attempt-timeline-div" my-id="timeline-view" height="100%" rmModel=model.attempts label="shortAppAttemptId" attemptModel=true serviceName=service}}
</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/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 17ec11e..c1f5352 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
@@ -26,9 +26,9 @@
<div class="panel panel-default">
<div class="panel-heading">
{{#if service}}
- <h4>Service</h4>
+ Service
{{else}}
- <h4>Application</h4>
+ Application
{{/if}}
</div>
<div class="panel-body">
@@ -175,8 +175,8 @@
<thead>
<tr>
<th>Master Container Log</th>
- <td>Master Node</td>
- <td>Master Node Label Expression</td>
+ <th>Master Node</th>
+ <th>Master Node Label Expression</th>
</tr>
</thead>
@@ -215,48 +215,7 @@
{{/if}}
- </div>
-
- <!--
- <div class="row">
- <div class="col-md-12 container-fluid">
- <div class="panel panel-default">
- <div class="panel-heading">
- Application Attempts
- </div>
- <table id="app-attempt-table" class="table table-striped table-bordered" cellspacing="0" width="100%" height="100%">
- <thead>
- <tr>
- <th>Start Time</th>
- <th>Master ContainerId</th>
- <th>Node Http Address</th>
- <th>Node Id</th>
- <th>Logs Link</th>
- </tr>
- </thead>
- <tbody>
- {{#each model.attempts as |attempt|}}
- <tr>
- <td>{{attempt.startTime}}</td>
- <td>{{attempt.containerId}}</td>
- <td><a href={{attempt.nodeHttpAddress}}>{{attempt.nodeHttpAddress}}</a></td>
- <td>{{attempt.nodeId}}</td>
- <td><a href={{attempt.logsLink}}>link</a></td>
- </tr>
- {{/each}}
- </tbody>
- </table>
- </div>
- </div>
- </div>
- -->
-
- <!-- timeline view of children -->
- <!--
- <div class="row">
- {{timeline-view parent-id="attempt-timeline-div" my-id="timeline-view" height="100%" rmModel=model.attempts label="shortAppAttemptId" attemptModel=true}}
- </div>
- -->
+ </div>
</div>
</div>
{{/if}}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-apps.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-apps.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-apps.hbs
index 7aade00..264e6b6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-apps.hbs
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-apps.hbs
@@ -24,7 +24,7 @@
<div class="col-md-2 container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
- <h4>Application</h4>
+ <h4>Applications</h4>
</div>
<div class="panel-body">
<ul class="nav nav-pills nav-stacked" id="stacked-menu">
@@ -83,4 +83,4 @@
</div>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs
new file mode 100644
index 0000000..c9b682c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs
@@ -0,0 +1,45 @@
+{{!--
+ 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="container-fluid col-md-12">
+ <div class="row">
+ {{breadcrumb-bar breadcrumbs=breadcrumbs}}
+ </div>
+ <div class="row">
+ <div class="col-md-2">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ Flow Activity
+ </div>
+ <div class="panel-body">
+ <ul class="nav nav-pills nav-stacked collapse in">
+ {{#link-to 'yarn-flow-activity' tagName="li"}}
+ {{#link-to 'yarn-flow-activity'}}Flow Activities{{/link-to}}
+ {{/link-to}}
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-10">
+ <h3>Recent Flow Activities</h3>
+ {{em-table columns=columns rows=rows definition=tableDefinition}}
+ </div>
+ </div>
+</div>
+
+{{outlet}}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs
new file mode 100644
index 0000000..2e98958
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs
@@ -0,0 +1,49 @@
+{{!--
+ 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="col-md-12 container-fluid">
+ <div class="row">
+ {{breadcrumb-bar breadcrumbs=breadcrumbs}}
+ </div>
+ <div class="row">
+ <div class="col-md-2">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="panel-title">
+ Flow Information
+ </div>
+ </div>
+ <div class="panel-body">
+ <ul class="nav nav-pills nav-stacked" id="stacked-menu">
+ <ul class="nav nav-pills nav-stacked collapse in">
+ {{#link-to 'yarn-flow.info' tagName="li"}}
+ {{#link-to 'yarn-flow.info' model.flowUid}}Flow Info{{/link-to}}
+ {{/link-to}}
+ {{#link-to 'yarn-flow.runs' tagName="li"}}
+ {{#link-to 'yarn-flow.runs' model.flowUid}}Flow Runs{{/link-to}}
+ {{/link-to}}
+ </ul>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-10">
+ {{outlet}}
+ </div>
+ </div>
+</div>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/info.hbs
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/info.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/info.hbs
new file mode 100644
index 0000000..b700464
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow/info.hbs
@@ -0,0 +1,53 @@
+{{!--
+ 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.
+--}}
+
+<h3>Flow Information</h3>
+<div class="panel panel-default">
+ <div class="panel-body">
+ <table class="table table-striped table-bordered">
+ <tbody>
+ <tr>
+ <td>Flow Name</td>
+ <td>{{flowInfo.flowName}}</td>
+ </tr>
+ <tr>
+ <td>User</td>
+ <td>{{flowInfo.user}}</td>
+ </tr>
+ <tr>
+ <td>Flow ID</td>
+ <td>{{flowInfo.flowUid}}</td>
+ </tr>
+ <tr>
+ <td>First Run Started</td>
+ <td>{{flowInfo.firstRunStarted}}</td>
+ </tr>
+ <tr>
+ <td>Last Run Finished</td>
+ <td>{{flowInfo.lastRunFinished}}</td>
+ </tr>
+ {{#if flowInfo.lastExecutionDate}}
+ <tr>
+ <td>Last Execution Date</td>
+ <td>{{flowInfo.lastExecutionDate}}</td>
+ </tr>
+ {{/if}}
+ </tbody>
+ </table>
+ </div>
+</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org
[3/3] hadoop git commit: YARN-5705. Show timeline data from ATS v2 in
new web UI. Contributed by Akhil PB.
Posted by su...@apache.org.
YARN-5705. Show timeline data from ATS v2 in new 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/46d9c4ca
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/46d9c4ca
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/46d9c4ca
Branch: refs/heads/trunk
Commit: 46d9c4ca7aba04e96bea65d7b95cc84b50af6980
Parents: c80d3bc
Author: Sunil G <su...@apache.org>
Authored: Sun May 21 18:09:13 2017 +0530
Committer: Sunil G <su...@apache.org>
Committed: Sun May 21 18:09:13 2017 +0530
----------------------------------------------------------------------
.../webapp/app/adapters/yarn-app-attempt.js | 4 +-
.../webapp/app/adapters/yarn-app-flowrun.js | 33 +++
.../webapp/app/adapters/yarn-app-timeline.js | 35 +++
.../main/webapp/app/adapters/yarn-container.js | 18 +-
.../src/main/webapp/app/adapters/yarn-entity.js | 35 +++
.../webapp/app/adapters/yarn-flow-activity.js | 30 +++
.../webapp/app/adapters/yarn-flowrun-brief.js | 32 +++
.../main/webapp/app/adapters/yarn-flowrun.js | 38 +++
.../app/adapters/yarn-timeline-appattempt.js | 41 +++
.../app/adapters/yarn-timeline-container.js | 40 +++
.../main/webapp/app/components/nodes-heatmap.js | 18 +-
.../webapp/app/components/simple-bar-chart.js | 206 +++++++++++++++
.../webapp/app/components/sunburst-chart.js | 261 +++++++++++++++++++
.../webapp/app/controllers/yarn-apps/apps.js | 1 -
.../app/controllers/yarn-apps/services.js | 1 -
.../app/controllers/yarn-flow-activity.js | 125 +++++++++
.../main/webapp/app/controllers/yarn-flow.js | 36 +++
.../webapp/app/controllers/yarn-flow/info.js | 66 +++++
.../webapp/app/controllers/yarn-flow/runs.js | 178 +++++++++++++
.../main/webapp/app/controllers/yarn-flowrun.js | 50 ++++
.../webapp/app/controllers/yarn-flowrun/info.js | 157 +++++++++++
.../app/controllers/yarn-flowrun/metrics.js | 126 +++++++++
.../webapp/app/controllers/yarn-services.js | 12 +-
.../src/main/webapp/app/mixins/app-attempt.js | 66 +++++
.../main/webapp/app/models/yarn-app-attempt.js | 11 +-
.../main/webapp/app/models/yarn-app-flowrun.js | 52 ++++
.../main/webapp/app/models/yarn-app-timeline.js | 105 ++++++++
.../main/webapp/app/models/yarn-container.js | 9 +-
.../src/main/webapp/app/models/yarn-entity.js | 26 ++
.../webapp/app/models/yarn-flow-activity.js | 28 ++
.../webapp/app/models/yarn-flowrun-brief.js | 70 +++++
.../src/main/webapp/app/models/yarn-flowrun.js | 32 +++
.../app/models/yarn-timeline-appattempt.js | 143 ++++++++++
.../app/models/yarn-timeline-container.js | 63 +++++
.../src/main/webapp/app/router.js | 12 +
.../main/webapp/app/routes/timeline-error.js | 29 +++
.../main/webapp/app/routes/yarn-app-attempt.js | 32 +--
.../main/webapp/app/routes/yarn-app-attempts.js | 13 +-
.../src/main/webapp/app/routes/yarn-app.js | 18 +-
.../webapp/app/routes/yarn-flow-activity.js | 37 +++
.../src/main/webapp/app/routes/yarn-flow.js | 53 ++++
.../main/webapp/app/routes/yarn-flow/info.js | 22 ++
.../main/webapp/app/routes/yarn-flow/runs.js | 22 ++
.../webapp/app/routes/yarn-flowrun-metric.js | 107 ++++++++
.../src/main/webapp/app/routes/yarn-flowrun.js | 58 +++++
.../main/webapp/app/routes/yarn-flowrun/info.js | 22 ++
.../webapp/app/routes/yarn-flowrun/metrics.js | 22 ++
.../webapp/app/serializers/yarn-app-flowrun.js | 64 +++++
.../webapp/app/serializers/yarn-app-timeline.js | 76 ++++++
.../src/main/webapp/app/serializers/yarn-app.js | 3 +-
.../main/webapp/app/serializers/yarn-entity.js | 51 ++++
.../app/serializers/yarn-flow-activity.js | 54 ++++
.../app/serializers/yarn-flowrun-brief.js | 64 +++++
.../main/webapp/app/serializers/yarn-flowrun.js | 63 +++++
.../main/webapp/app/serializers/yarn-queue.js | 22 +-
.../app/serializers/yarn-timeline-appattempt.js | 69 +++++
.../app/serializers/yarn-timeline-container.js | 71 +++++
.../src/main/webapp/app/styles/app.css | 83 ++++++
.../main/webapp/app/templates/application.hbs | 6 +-
.../webapp/app/templates/timeline-error.hbs | 22 ++
.../webapp/app/templates/yarn-app-attempt.hbs | 46 ++--
.../webapp/app/templates/yarn-app-attempts.hbs | 7 +-
.../src/main/webapp/app/templates/yarn-app.hbs | 51 +---
.../src/main/webapp/app/templates/yarn-apps.hbs | 4 +-
.../webapp/app/templates/yarn-flow-activity.hbs | 45 ++++
.../src/main/webapp/app/templates/yarn-flow.hbs | 49 ++++
.../webapp/app/templates/yarn-flow/info.hbs | 53 ++++
.../webapp/app/templates/yarn-flow/runs.hbs | 131 ++++++++++
.../app/templates/yarn-flowrun-metric.hbs | 34 +++
.../main/webapp/app/templates/yarn-flowrun.hbs | 49 ++++
.../webapp/app/templates/yarn-flowrun/info.hbs | 128 +++++++++
.../app/templates/yarn-flowrun/metrics.hbs | 34 +++
.../main/webapp/app/templates/yarn-services.hbs | 2 +-
.../src/main/webapp/app/utils/converter.js | 22 +-
.../src/main/webapp/app/utils/error-utils.js | 58 +++++
.../src/main/webapp/config/default-config.js | 3 +-
.../hadoop-yarn-ui/src/main/webapp/package.json | 1 +
.../components/simple-bar-chart-test.js | 43 +++
.../unit/adapters/yarn-app-timeline-test.js | 30 +++
.../adapters/yarn-timeline-appattempt-test.js | 30 +++
.../adapters/yarn-timeline-container-test.js | 30 +++
.../unit/controllers/yarn-flow/info-test.js | 30 +++
.../unit/controllers/yarn-flow/runs-test.js | 30 +++
.../unit/controllers/yarn-flowrun/info-test.js | 30 +++
.../controllers/yarn-flowrun/metrics-test.js | 30 +++
.../tests/unit/mixins/app-attempt-test.js | 30 +++
.../webapp/tests/unit/mixins/charts-test.js | 30 ---
.../tests/unit/models/yarn-app-timeline-test.js | 30 +++
.../models/yarn-timeline-appattempt-test.js | 30 +++
.../unit/models/yarn-timeline-container-test.js | 30 +++
.../tests/unit/routes/timeline-error-test.js | 29 +++
.../tests/unit/routes/yarn-flow/info-test.js | 29 +++
.../tests/unit/routes/yarn-flow/runs-test.js | 29 +++
.../tests/unit/routes/yarn-flowrun/info-test.js | 29 +++
.../unit/routes/yarn-flowrun/metrics-test.js | 29 +++
.../unit/serializers/yarn-app-timeline-test.js | 33 +++
.../yarn-timeline-appattempt-test.js | 33 +++
.../serializers/yarn-timeline-container-test.js | 33 +++
98 files changed, 4408 insertions(+), 199 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js
index 2389f16..d5f3d0c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js
@@ -26,7 +26,9 @@ export default AbstractAdapter.extend({
urlForQuery(query/*, modelName*/) {
var url = this._buildURL();
- return url + '/apps/' + query.appId + "/appattempts";
+ var appId = query.appId;
+ delete query.appId;
+ return url + '/apps/' + appId + "/appattempts";
},
urlForFindRecord(id/*, modelName, snapshot*/) {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js
new file mode 100644
index 0000000..23ecd1b
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js
@@ -0,0 +1,33 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQuery(query/*, modelName*/){
+ var url = this._buildURL();
+ var flowrunUid = query['flowrunUid'];
+ delete query.flowrunUid;
+ url = url + '/run-uid/' + flowrunUid + '/apps?fields=ALL';
+ return url;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-timeline.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-timeline.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-timeline.js
new file mode 100644
index 0000000..831649c
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-timeline.js
@@ -0,0 +1,35 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForFindRecord(id/*, modelName, snapshot*/) {
+ var url = this._buildURL();
+ url = url + '/apps/' + id + '?fields=ALL';
+ return url;
+ },
+
+ pathForType(/*modelName*/) {
+ return 'apps';
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
index 348a805..476c9be 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
@@ -25,31 +25,17 @@ export default DS.JSONAPIAdapter.extend({
},
host: function() {
- return undefined;
+ return this.get(`hosts.rmWebAddress`);
}.property(),
namespace: function() {
- return undefined;
+ return this.get(`env.app.namespaces.cluster`);
}.property(),
urlForQuery(query/*, modelName*/) {
- var rmHosts = this.get(`hosts.rmWebAddress`);
- var tsHosts = this.get(`hosts.timelineWebAddress`);
- var rmNamespaces = this.get(`env.app.namespaces.cluster`);
- var tsNamespaces = this.get(`env.app.namespaces.timeline`);
-
- if (query.is_rm) {
- this.set("host", rmHosts);
- this.set("namespace", rmNamespaces);
- } else {
- this.set("host", tsHosts);
- this.set("namespace", tsNamespaces);
- }
-
var url = this._buildURL();
url = url + '/apps/' + Converter.attemptIdToAppId(query.app_attempt_id) +
"/appattempts/" + query.app_attempt_id + "/containers";
- console.log(url);
return url;
},
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-entity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-entity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-entity.js
new file mode 100644
index 0000000..3d7338f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-entity.js
@@ -0,0 +1,35 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQuery(query/*, modelName*/){
+ var url = this._buildURL();
+ var appUid = query.app_uid;
+ var entityType = query.entity_type;
+ delete query.app_uid;
+ delete query.entity_type;
+ url = url + '/app-uid/' + appUid + '/entities/' + entityType + '?fields=INFO';
+ return url;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js
new file mode 100644
index 0000000..a8c436a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js
@@ -0,0 +1,30 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ pathForType(/*modelName*/) {
+ return 'flows'; // move to some common place, return path by modelname.
+ },
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js
new file mode 100644
index 0000000..ea9c6cb
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js
@@ -0,0 +1,32 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQuery(query/*, modelName*/){
+ var url = this._buildURL();
+ var flowuid = query['flowuid'];
+ delete query.flowuid;
+ return url + '/flow-uid/' + flowuid + '/runs?fields=ALL';
+ },
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js
new file mode 100644
index 0000000..9163c83
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js
@@ -0,0 +1,38 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQueryRecord(query/*, modelName*/){
+ var url = this._buildURL();
+ var flowrunuid = query.flowrun_uid;
+ delete query.flowrun_uid;
+ url = url + '/run-uid/' + flowrunuid;
+ return url;
+ },
+
+ pathForType(/*modelName*/) {
+ return 'run-uid'; // move to some common place, return path by modelname.
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-appattempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-appattempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-appattempt.js
new file mode 100644
index 0000000..2557a86
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-appattempt.js
@@ -0,0 +1,41 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+import Converter from 'yarn-ui/utils/converter';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQuery(query/*, modelName*/) {
+ var url = this._buildURL();
+ var appId = query.appId;
+ query.fields = 'ALL';
+ delete query.appId;
+ return url + '/apps/' + appId + "/entities/YARN_APPLICATION_ATTEMPT";
+ },
+
+ urlForFindRecord(id/*, modelName, snapshot*/) {
+ var url = this._buildURL();
+ return url + '/apps/' + Converter.attemptIdToAppId(id) +
+ "/entities/YARN_APPLICATION_ATTEMPT/" + id + "?fields=ALL";
+ }
+
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-container.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-container.js
new file mode 100644
index 0000000..f47335a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-timeline-container.js
@@ -0,0 +1,40 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+import Converter from 'yarn-ui/utils/converter';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "ATS",
+
+ urlForQuery(query/*, modelName*/){
+ var url = this._buildURL();
+ var app_attempt_id = query.app_attempt_id;
+ query.fields = 'ALL';
+ delete query.app_attempt_id;
+ url = url + '/apps/' + Converter.attemptIdToAppId(app_attempt_id) +
+ '/entities/YARN_CONTAINER';
+ return url;
+ },
+
+ pathForType(/*modelName*/) {
+ return '';
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/nodes-heatmap.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/nodes-heatmap.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/nodes-heatmap.js
index ef6e46e..3acc5de 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/nodes-heatmap.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/nodes-heatmap.js
@@ -52,7 +52,7 @@ export default BaseChartComponent.extend({
bindSelectCategory: function(element, i) {
element.on("click", function() {
- if (this.selectedCategory == i) {
+ if (this.selectedCategory === i) {
// Remove selection for second click
this.selectedCategory = 0;
} else {
@@ -76,7 +76,7 @@ export default BaseChartComponent.extend({
}
var usage = node.get("usedMemoryMB") /
- (node.get("usedMemoryMB") + node.get("availMemoryMB"))
+ (node.get("usedMemoryMB") + node.get("availMemoryMB"));
var lowerLimit = (this.selectedCategory - 1) * 0.2;
var upperLimit = this.selectedCategory * 0.2;
if (lowerLimit <= usage && usage <= upperLimit) {
@@ -116,6 +116,7 @@ export default BaseChartComponent.extend({
var sampleXOffset = (layout.x2 - layout.x1) / 2 - 2.5 * this.SAMPLE_CELL_WIDTH -
2 * this.CELL_MARGIN;
var sampleYOffset = layout.margin * 2;
+ var text;
for (i = 1; i <= 5; i++) {
var ratio = i * 0.2 - 0.1;
@@ -128,7 +129,7 @@ export default BaseChartComponent.extend({
.attr("height", this.SAMPLE_HEIGHT)
.attr("class", "hyperlink");
this.bindSelectCategory(rect, i);
- var text = g.append("text")
+ text = g.append("text")
.text("" + (ratio * 100).toFixed(1) + "% Used")
.attr("y", sampleYOffset + this.SAMPLE_HEIGHT / 2 + 5)
.attr("x", sampleXOffset + this.SAMPLE_CELL_WIDTH / 2)
@@ -137,8 +138,8 @@ export default BaseChartComponent.extend({
sampleXOffset += this.CELL_MARGIN + this.SAMPLE_CELL_WIDTH;
}
- if (this.selectedCategory != 0) {
- var text = g.append("text")
+ if (this.selectedCategory !== 0) {
+ text = g.append("text")
.text("Clear")
.attr("y", sampleYOffset + this.SAMPLE_HEIGHT / 2 + 5)
.attr("x", sampleXOffset + 20)
@@ -149,7 +150,7 @@ export default BaseChartComponent.extend({
var chartXOffset = -1;
for (i = 0; i < racksArray.length; i++) {
- var text = g.append("text")
+ text = g.append("text")
.text(racksArray[i])
.attr("y", yOffset + this.CELL_HEIGHT / 2 + 5)
.attr("x", layout.margin)
@@ -163,7 +164,6 @@ export default BaseChartComponent.extend({
for (var j = 0; j < data.length; j++) {
var rack = data[j].get("rack");
- var host = data[j].get("nodeHostName");
if (rack === racksArray[i]) {
this.addNode(g, xOffset, yOffset, colorFunc, data[j]);
@@ -217,11 +217,11 @@ export default BaseChartComponent.extend({
href = `#/yarn-node/${node_id}/${node_addr}`;
var a = g.append("a")
.attr("href", href);
- var text = a.append("text")
+ a.append("text")
.text(data.get("nodeHostName"))
.attr("y", yOffset + this.CELL_HEIGHT / 2 + 5)
.attr("x", xOffset + this.CELL_WIDTH / 2)
- .attr("class", this.isNodeSelected(data) ? "heatmap-cell" : "heatmap-cell-notselected")
+ .attr("class", this.isNodeSelected(data) ? "heatmap-cell" : "heatmap-cell-notselected");
if (this.isNodeSelected(data)) {
this.bindTP(a, rect);
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-bar-chart.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-bar-chart.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-bar-chart.js
new file mode 100644
index 0000000..8527e91
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-bar-chart.js
@@ -0,0 +1,206 @@
+/**
+ * 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({
+ data: [],
+ xAxisTickFormatter: null,
+ yAxisTickFormatter: null,
+ xAxisText: '',
+ yAxisText: '',
+ enableTooltip: true,
+ onBarChartClickCallback: Ember.K,
+ hideTootlipOnBarChartClick: true,
+
+ initChart() {
+ this.height = 400;
+ this.barWidth = 30;
+ this.width = Math.max(500, 40 * this.data.length);
+ },
+
+ drawChart() {
+ var margin = {top: 20, right: 20, bottom: 100, left: 100},
+ axisLabelPadding = 10,
+ width = this.width - margin.left - margin.right - axisLabelPadding,
+ height = this.height - margin.top - margin.bottom - axisLabelPadding,
+ xAxisText = this.xAxisText? this.xAxisText : '',
+ yAxisText = this.yAxisText? this.yAxisText : '',
+ data = this.data,
+ self = this;
+
+ var xScale = d3.scale.ordinal().rangeRoundBands([0, width], 0.1);
+ var yScale = d3.scale.linear().range([height, 0]);
+
+ var xAxis = d3.svg.axis()
+ .scale(xScale)
+ .orient("bottom")
+ .tickFormat(function(tick) {
+ if (self.isFunction(self.xAxisTickFormatter)) {
+ return self.xAxisTickFormatter(tick);
+ } else {
+ return tick;
+ }
+ });
+
+ var yAxis = d3.svg.axis()
+ .scale(yScale)
+ .orient("left")
+ .tickFormat(function(tick) {
+ if (self.isFunction(self.yAxisTickFormatter)) {
+ return self.yAxisTickFormatter(tick);
+ } else {
+ return tick;
+ }
+ });
+
+ var svg = d3.select(this.element)
+ .append("svg")
+ .attr("class", "simple-bar-chart")
+ .attr("width", width + margin.left + margin.right + axisLabelPadding)
+ .attr("height", height + margin.top + margin.bottom + axisLabelPadding)
+ .append("g")
+ .attr("transform", "translate("+(margin.left+axisLabelPadding)+","+(margin.top)+")");
+
+ xScale.domain(data.map(function(d) { return d.label; }));
+ yScale.domain([0, d3.max(data, function(d) { return d.value; })]);
+
+ var gx = svg.append("g")
+ .attr("class", "x axis")
+ .attr("transform", "translate(0," + height + ")")
+ .call(xAxis);
+
+ gx.selectAll("text")
+ .style("text-anchor", "end")
+ .attr("dx", "-.8em")
+ .attr("dy", "-.3em")
+ .attr("transform", "rotate(-60)");
+
+ gx.append("text")
+ .attr("transform", "translate("+(width/2)+","+(margin.bottom)+")")
+ .style("text-anchor", "middle")
+ .text(xAxisText);
+
+ var gy = svg.append("g")
+ .attr("class", "y axis")
+ .call(yAxis);
+
+ gy.append("text")
+ .attr("transform", "translate("+(-margin.left)+","+(height/2)+")rotate(-90)")
+ .style("text-anchor", "middle")
+ .text(yAxisText);
+
+ var barWidth = this.barWidth;
+ var minBarWidth = Math.min(barWidth, xScale.rangeBand());
+ var bars = svg.selectAll("bar")
+ .data(data)
+ .enter().append("rect")
+ .attr("x", function(d) {
+ var padding = 0;
+ var rangeBand = xScale.rangeBand();
+ if ((rangeBand - barWidth) > 0) {
+ padding = (rangeBand - barWidth) / 2;
+ }
+ return xScale(d.label) + padding;
+ })
+ .attr("width", minBarWidth)
+ .attr("y", function() {
+ return yScale(0);
+ })
+ .attr("height", function() {
+ return height - yScale(0);
+ })
+ .on('click', function(d) {
+ if (self.enableTooltip && self.hideTootlipOnBarChartClick) {
+ self.hideTootlip();
+ }
+ if (self.isFunction(self.onBarChartClickCallback)) {
+ self.onBarChartClickCallback(d);
+ }
+ });
+
+ bars.transition()
+ .duration(1000)
+ .delay(100)
+ .attr("y", function(d) {
+ return yScale(d.value);
+ })
+ .attr("height", function(d) {
+ return height - yScale(d.value);
+ });
+
+ if (this.enableTooltip) {
+ this.bindTooltip(bars);
+ }
+ },
+
+ bindTooltip(bars) {
+ var self = this;
+ var tooltip = this.tooltip;
+ if (tooltip) {
+ bars.on("mouseenter", function(d) {
+ tooltip.html(d.tooltip);
+ self.showTooltip();
+ }).on("mousemove", function() {
+ tooltip.style("left", (d3.event.pageX + 5) + "px")
+ .style("top", (d3.event.pageY - 25) + "px");
+ }).on("mouseout", function() {
+ self.hideTootlip();
+ });
+ }
+ },
+
+ initTooltip() {
+ this.tooltip = d3.select("body")
+ .append("div")
+ .attr("class", "tooltip simple-barchart-tooltip")
+ .style("opacity", 1);
+
+ this.hideTootlip();
+ },
+
+ hideTootlip() {
+ if (this.tooltip) {
+ this.tooltip.style("display", "none");
+ }
+ },
+
+ showTooltip() {
+ if (this.tooltip) {
+ this.tooltip.style("display", "block");
+ }
+ },
+
+ isFunction(func) {
+ return Ember.typeOf(func) === "function";
+ },
+
+ didInsertElement() {
+ this.initChart();
+ if (this.enableTooltip) {
+ this.initTooltip();
+ }
+ this.drawChart();
+ },
+
+ willDestroyElement() {
+ if (this.tooltip) {
+ this.tooltip.remove();
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/sunburst-chart.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/sunburst-chart.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/sunburst-chart.js
new file mode 100644
index 0000000..3a2302a
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/sunburst-chart.js
@@ -0,0 +1,261 @@
+/**
+ * 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({
+
+ didInsertElement: function() {
+ var json = buildHierarchy(this.get("arr"));
+ createVisualization(json);
+ },
+
+});
+// Dimensions of sunburst.
+var width = 1000;
+var height = 750;
+var radius = Math.min(width, height) / 2;
+// Breadcrumb dimensions: width, height, spacing, width of tip/tail.
+var b = { w: 225, h: 30, s: 3, t: 10 };
+// Total size of all segments; we set this later, after loading the data.
+var totalSize = 0;
+var vis = null;
+var partition = null;
+var arc = null;
+var colors = d3.scale.category20c();
+
+function colorMap(d) {
+ return colors(d.name);
+}
+
+// Given a node in a partition layout, return an array of all of its ancestor
+// nodes, highest first, but excluding the root.
+function getAncestors(node) {
+ var path = [];
+ var current = node;
+ while (current.parent) {
+ path.unshift(current);
+ current = current.parent;
+ }
+ return path;
+}
+
+// Main function to draw and set up the visualization, once we have the data.
+function createVisualization(json) {
+ partition = d3.layout.partition()
+ .size([2 * Math.PI, radius * radius])
+ .value(function(d) { return d.size; });
+ arc = d3.svg.arc()
+ .startAngle(function(d) { return d.x; })
+ .endAngle(function(d) { return d.x + d.dx; })
+ .innerRadius(function(d) { return Math.sqrt(d.y); })
+ .outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });
+ // Basic setup of page elements.
+ initializeBreadcrumbTrail();
+ //drawLegend();
+ //d3.select("#togglelegend").on("click", toggleLegend);
+
+ // Bounding circle underneath the sunburst, to make it easier to detect
+ // when the mouse leaves the parent g.
+ vis = d3.select("#chart").append("svg:svg")
+ .attr("width", width)
+ .attr("height", height)
+ .append("svg:g")
+ .attr("id", "container")
+ .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
+ vis.append("svg:circle").attr("r", radius)
+ .style("opacity", 0);
+
+ // For efficiency, filter nodes to keep only those large enough to see.
+ var nodes = partition.nodes(json)
+ .filter(function(d) {
+ return (d.dx > 0.005); // 0.005 radians = 0.29 degrees
+ });
+
+ var path = vis.data([json]).selectAll("path")
+ .data(nodes)
+ .enter().append("svg:path")
+ .attr("display", function(d) { return d.depth ? null : "none"; })
+ .attr("d", arc)
+ .attr("fill-rule", "evenodd")
+ .attr("fill", colorMap)
+ .style("opacity", 1)
+ .on("mouseover", mouseover);
+ // Add the mouseleave handler to the bounding circle.
+ d3.select("#container").on("mouseleave", mouseleave);
+
+ // Get total size of the tree = value of root node from partition.
+ totalSize = path.node().__data__.value;
+}
+
+ // Take a 2-column CSV and transform it into a hierarchical structure suitable
+ // for a partition layout. The first column is a sequence of step names, from
+ // root to leaf, separated by hyphens. The second column is a count of how
+ // often that sequence occurred.
+function buildHierarchy(csv) {
+ var root = {"name": "root", "children": []};
+ for (var i = 0; i < csv.length; i++) {
+ var sequence = csv[i][0];
+ var size = +csv[i][1];
+ if (isNaN(size)) { // e.g. if this is a header row
+ continue;
+ }
+ var parts = sequence.split("-");
+ var currentNode = root;
+ for (var j = 0; j < parts.length; j++) {
+ var children = currentNode["children"];
+ var nodeName = parts[j];
+ var childNode;
+ if (j + 1 < parts.length) {
+ // Not yet at the end of the sequence; move down the tree.
+ var foundChild = false;
+ for (var k = 0; k < children.length; k++) {
+ if (children[k]["name"] === nodeName) {
+ childNode = children[k];
+ foundChild = true;
+ break;
+ }
+ }
+ // If we don't already have a child node for this branch, create it.
+ if (!foundChild) {
+ childNode = {"name": nodeName, "children": []};
+ children.push(childNode);
+ }
+ currentNode = childNode;
+ } else {
+ // Reached the end of the sequence; create a leaf node.
+ childNode = {"name": nodeName, "size": size, "children": [], "sequence": sequence};
+ children.push(childNode);
+ }
+ }
+ }
+ return root;
+}
+
+// Fade all but the current sequence, and show it in the breadcrumb trail.
+function mouseover(d) {
+ //var percentage = (100 * d.value / totalSize).toPrecision(3);
+ //var percentageString = percentage + "%";
+ var percentageString = d.value;
+
+ d3.select("#percentage").html('<p align="center" style="font-size: 150%;"><b>' + percentageString +
+ '</b></p><br/><p align="center">(' + d.name + ')</p>');
+ d3.select("#explanation").style("visibility", "");
+
+ var sequenceArray = getAncestors(d);
+ updateBreadcrumbs(sequenceArray, percentageString);
+
+ // Fade all the segments.
+ d3.selectAll("path").style("opacity", 0.2);
+
+ // Then highlight only those that are an ancestor of the current segment.
+ vis.selectAll("path")
+ .filter(function(node) {
+ return (sequenceArray.indexOf(node) >= 0);
+ })
+ .style("opacity", 1);
+}
+
+// Restore everything to full opacity when moving off the visualization.
+function mouseleave() {
+ // Hide the breadcrumb trail
+ d3.select("#trail").style("visibility", "hidden");
+
+ // Deactivate all segments during transition.
+ d3.selectAll("path").on("mouseover", null);
+
+ // Transition each segment to full opacity and then reactivate it.
+ d3.selectAll("path")
+ .transition()
+ .duration(1000)
+ .style("opacity", 1)
+ .each("end", function() {
+ d3.select(this).on("mouseover", mouseover);
+ });
+
+ d3.select("#explanation")
+ .style("visibility", "hidden");
+}
+
+function initializeBreadcrumbTrail() {
+ // Add the svg area.
+ var trail = d3.select("#sequence").append("svg:svg")
+ .attr("width", width)
+ .attr("height", 50)
+ .attr("id", "trail");
+ // Add the label at the end, for the percentage.
+ trail.append("svg:text")
+ .attr("id", "endlabel")
+ .style("fill", "#000");
+}
+
+// Generate a string that describes the points of a breadcrumb polygon.
+function breadcrumbPoints(d, i) {
+ var points = [];
+ points.push("0,0");
+ points.push(b.w + ",0");
+ points.push(b.w + b.t + "," + (b.h / 2));
+ points.push(b.w + "," + b.h);
+ points.push("0," + b.h);
+ if (i > 0) { // Leftmost breadcrumb; don't include 6th vertex.
+ points.push(b.t + "," + (b.h / 2));
+ }
+ return points.join(" ");
+}
+
+// Update the breadcrumb trail to show the current sequence and percentage.
+function updateBreadcrumbs(nodeArray, percentageString) {
+ // Data join; key function combines name and depth (= position in sequence).
+ var g = d3.select("#trail")
+ .selectAll("g")
+ .data(nodeArray, function(d) { return d.name + d.depth; });
+
+ // Add breadcrumb and label for entering nodes.
+ var entering = g.enter().append("svg:g");
+
+ entering.append("svg:polygon")
+ .attr("points", breadcrumbPoints)
+ .attr("fill", colorMap);
+
+ entering.append("svg:text")
+ .attr("x", (b.w + b.t) / 2)
+ .attr("y", b.h / 2)
+ .attr("dy", "0.35em")
+ .attr("text-anchor", "middle")
+ .text(function(d) { return d.name; });
+
+ // Set position for entering and updating nodes.
+ g.attr("transform", function(d, i) {
+ return "translate(" + i * (b.w + b.s) + ", 0)";
+ });
+
+ // Remove exiting nodes.
+ g.exit().remove();
+
+ // Now move and update the percentage at the end.
+ d3.select("#trail").select("#endlabel")
+ .attr("x", (nodeArray.length + 0.5) * (b.w + b.s))
+ .attr("y", b.h / 2)
+ .attr("dy", "0.35em")
+ .attr("text-anchor", "middle")
+ .text(percentageString);
+
+ // Make the breadcrumb trail visible, if it's hidden.
+ d3.select("#trail")
+ .style("visibility", "");
+}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/apps.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/apps.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/apps.js
index 44a7c1c..fffaf17 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/apps.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/apps.js
@@ -17,7 +17,6 @@
*/
import Ember from 'ember';
-import ColumnDef from 'em-table/utils/column-definition';
import TableDefinition from 'em-table/utils/table-definition';
import AppTableController from '../app-table-columns';
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/services.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/services.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/services.js
index 44a7c1c..fffaf17 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/services.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps/services.js
@@ -17,7 +17,6 @@
*/
import Ember from 'ember';
-import ColumnDef from 'em-table/utils/column-definition';
import TableDefinition from 'em-table/utils/table-definition';
import AppTableController from '../app-table-columns';
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js
new file mode 100644
index 0000000..61e7823
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js
@@ -0,0 +1,125 @@
+/**
+ * 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 TableDef from 'em-table/utils/table-definition';
+import ColumnDef from 'em-table/utils/column-definition';
+import lodash from 'lodash/lodash';
+
+function _createColumns() {
+ var columns = [];
+ columns.push({
+ id: 'flowName',
+ headerTitle: 'Flow Name',
+ contentPath: 'flowName',
+ observePath: true,
+ }, {
+ id: 'user',
+ headerTitle: 'User',
+ contentPath: 'user',
+ observePath: true
+ }, {
+ id: 'uid',
+ headerTitle: 'Flow ID',
+ contentPath: 'uid',
+ observePath: true,
+ cellComponentName: 'em-table-linked-cell',
+ minWidth: "300px",
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-flow.info',
+ id: row.get('uid'),
+ displayText: row.get('uid')
+ };
+ }
+ }, {
+ id: 'lastExecDate',
+ headerTitle: 'Last Execution Date',
+ contentPath: 'lastExecDate',
+ observePath: true
+ });
+ return ColumnDef.make(columns);
+}
+
+function _getAggregatedFlowsData(flows) {
+ var aggregatedFlows = [];
+ flows = flows? flows.get('content') : [];
+
+ var aggregated = lodash.groupBy(flows, function(flow) {
+ return flow.getRecord().get('uid');
+ });
+
+ lodash.forIn(aggregated, function(flows) {
+ let flowsInAsc = lodash.sortBy(flows, function(flow) {
+ return flow.getRecord().get('lastExecDate');
+ });
+ let flowsInDesc = flowsInAsc.reverse();
+ aggregatedFlows.push(flowsInDesc[0].getRecord());
+ });
+
+ return aggregatedFlows;
+}
+
+function _createRows(flows) {
+ var data = [],
+ aggregatedFlows = null,
+ row = null;
+
+ aggregatedFlows = _getAggregatedFlowsData(flows);
+
+ aggregatedFlows.forEach(function(flow) {
+ row = Ember.Object.create({
+ user: flow.get('user'),
+ flowName: flow.get('flowName'),
+ uid: flow.get('uid'),
+ lastExecDate: flow.get('lastExecDate')
+ });
+ data.push(row);
+ });
+
+ return Ember.A(data);
+}
+
+export default Ember.Controller.extend({
+ breadcrumbs: [{
+ text: "Home",
+ routeName: 'application'
+ }, {
+ text: "Flow Activities",
+ routeName: 'yarn-flow-activity',
+ }],
+
+ columns: _createColumns(),
+
+ rows: Ember.computed('model', function() {
+ return _createRows(this.get('model'));
+ }),
+
+ tableDefinition: TableDef.create({
+ sortColumnId: 'lastExecDate',
+ sortOrder: 'desc'
+ }),
+
+ getLastFlowExecutionInfoByFlowUid: function(uid) {
+ var aggregatedFlows = _getAggregatedFlowsData(this.get('model'));
+ var recent = aggregatedFlows.find(function(flow) {
+ return flow.get('uid') === uid;
+ });
+ return recent;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js
new file mode 100644
index 0000000..216ab11
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js
@@ -0,0 +1,36 @@
+/**
+ * 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.Controller.extend({
+ breadcrumbs: Ember.computed("model.flowUid", function() {
+ var flowUid = this.get('model.flowUid');
+ return [{
+ text: "Home",
+ routeName: 'application'
+ }, {
+ text: "Flow Activities",
+ routeName: 'yarn-flow-activity'
+ }, {
+ text: `Flow Info [${flowUid}]`,
+ routeName: 'yarn-flow.info',
+ model: flowUid
+ }];
+ })
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/info.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/info.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/info.js
new file mode 100644
index 0000000..fc4dd23
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/info.js
@@ -0,0 +1,66 @@
+/**
+ * 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.Controller.extend({
+ flowUid: function() {
+ return this.get('model.flowUid');
+ }.property('model.flowUid'),
+
+ flowLastExecutionDate: function() {
+ if (this.get('model.lastFlowExecutionInfo')) {
+ return this.get('model.lastFlowExecutionInfo').get('lastExecDate');
+ } else {
+ return '';
+ }
+ }.property('model.lastFlowExecutionInfo'),
+
+ flowInfo: function() {
+ var info = {};
+ var firstRunObj = this.get('model.flowRuns').get('firstObject');
+ info.flowUid = this.get('flowUid');
+ info.flowName = firstRunObj.get('flowName');
+ info.user = firstRunObj.get('user');
+ info.lastExecutionDate = this.get('flowLastExecutionDate');
+ info.firstRunStarted = this.get('earliestStartTime');
+ info.lastRunFinished = this.get('latestFinishTime');
+ return info;
+ }.property('model.flowRuns', 'flowLastExecutionDate'),
+
+ earliestStartTime: function() {
+ var earliestStart = Number.MAX_VALUE;
+ this.get('model.flowRuns').forEach(function(flowrun) {
+ if (flowrun.get('createTimeRaw') < earliestStart) {
+ earliestStart = flowrun.get('createTimeRaw');
+ }
+ });
+ return Converter.timeStampToDate(earliestStart);
+ }.property('model.flowRuns'),
+
+ latestFinishTime: function() {
+ var latestFinish = 0;
+ this.get('model.flowRuns').forEach(function(flowrun) {
+ if (flowrun.get('endTimeRaw') > latestFinish) {
+ latestFinish = flowrun.get('endTimeRaw');
+ }
+ });
+ return Converter.timeStampToDate(latestFinish);
+ }.property('model.flowRuns')
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/runs.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/runs.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/runs.js
new file mode 100644
index 0000000..def4c12
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow/runs.js
@@ -0,0 +1,178 @@
+/**
+ * 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 TableDef from 'em-table/utils/table-definition';
+import ColumnDef from 'em-table/utils/column-definition';
+import Converter from 'yarn-ui/utils/converter';
+
+function createColumn() {
+ var columns = [];
+
+ // Generate columns
+ columns.push({
+ id: 'runid',
+ headerTitle: 'Run ID',
+ contentPath: 'runid',
+ cellComponentName: 'em-table-linked-cell',
+ minWidth: "300px",
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-flowrun.info',
+ id: row.get('uid'),
+ displayText: row.get('shownid')
+ };
+ }
+ });
+
+ columns.push({
+ id: 'runDurationTs',
+ headerTitle: 'Run Duration',
+ contentPath: 'runDurationTs',
+ getCellContent: function(row) {
+ return Converter.msToElapsedTimeUnit(row.get('runDurationTs'));
+ }
+ });
+
+ columns.push({
+ id: 'cpuVCores',
+ headerTitle: 'CPU VCores',
+ contentPath: 'cpuVCores',
+ getCellContent: function(row) {
+ if (row.get('cpuVCores') > -1) {
+ return row.get('cpuVCores');
+ }
+ return 'N/A';
+ }
+ });
+
+ columns.push({
+ id: 'memoryUsed',
+ headerTitle: 'Memory Used',
+ contentPath: 'memoryUsed',
+ getCellContent: function(row) {
+ if (row.get('memoryUsed') > -1) {
+ return Converter.memoryBytesToMB(row.get('memoryUsed'));
+ }
+ return 'N/A';
+ }
+ });
+
+ columns.push({
+ id: 'createTime',
+ headerTitle: 'Creation Time',
+ contentPath: 'createTime'
+ });
+
+ columns.push({
+ id: 'endTime',
+ headerTitle: 'End Time',
+ contentPath: 'endTime'
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ vizWidgets: {
+ runDuration: true,
+ cpuVcores: false,
+ memoryUsed: false
+ },
+
+ actions: {
+ addVizWidget(widget) {
+ Ember.set(this.vizWidgets, widget, true);
+ },
+
+ removeVizWidget(widget) {
+ Ember.set(this.vizWidgets, widget, false);
+ }
+ },
+
+ columns: createColumn(),
+
+ tableDefinition: TableDef.create({
+ sortColumnId: 'createTime',
+ sortOrder: 'desc'
+ }),
+
+ elapsedTimeVizData: function() {
+ var data = [];
+ this.get('model.flowRuns').forEach(function(run) {
+ var vizData = run.getElapsedTimeVizDataForBarChart();
+ if (vizData.value > 0) {
+ data.push(vizData);
+ }
+ });
+ data = this.getSortedVizDataInDesc(data);
+ return this.getRefactoredVizData(data);
+ }.property('model.flowRuns'),
+
+ elapsedTimeFormatter: function(tick) {
+ return Converter.msToElapsedTimeUnit(tick, true);
+ },
+
+ cpuVCoresVizData: function() {
+ var data = [];
+ this.get('model.flowRuns').forEach(function(run) {
+ var vizData = run.getCpuVCoresVizDataForBarChart();
+ if (vizData.value > 0) {
+ data.push(vizData);
+ }
+ });
+ data = this.getSortedVizDataInDesc(data);
+ return this.getRefactoredVizData(data);
+ }.property('model.flowRuns'),
+
+ memoryVizData: function() {
+ var data = [];
+ this.get('model.flowRuns').forEach(function(run) {
+ var vizData = run.getMemoryVizDataForBarChart();
+ if (vizData.value > 0) {
+ data.push(vizData);
+ }
+ });
+ data = this.getSortedVizDataInDesc(data);
+ return this.getRefactoredVizData(data);
+ }.property('model.flowRuns'),
+
+ memoryFormatter: function(tick) {
+ return Converter.memoryBytesToMB(tick);
+ },
+
+ onBarChartClick: function() {
+ var self = this;
+ return function(data) {
+ self.transitionToRoute('yarn-flowrun.info', data.flowrunUid);
+ };
+ }.property(),
+
+ getSortedVizDataInDesc: function(data) {
+ return data.sort(function(d1, d2) {
+ return d2.value - d1.value;
+ });
+ },
+
+ getRefactoredVizData: function(data) {
+ data.forEach(function(viz, idx) {
+ viz.label = "Run " + (++idx);
+ }, this);
+ return data;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js
new file mode 100644
index 0000000..6af87ab
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js
@@ -0,0 +1,50 @@
+/**
+ * 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.Controller.extend({
+ breadcrumbs: Ember.computed('model.flowrun_uid', 'model.parentFlowUid', function() {
+ var flowRunId = this.get('model.flowrun_uid');
+ var parentFlowUid = this.get('model.parentFlowUid');
+ var crumbs = [{
+ text: "Home",
+ routeName: 'application'
+ }, {
+ text: "Flow Activities",
+ routeName: 'yarn-flow-activity'
+ }];
+ if (parentFlowUid) {
+ crumbs.push({
+ text: `Flow Info [${parentFlowUid}]`,
+ routeName: 'yarn-flow.info',
+ model: parentFlowUid
+ }, {
+ text: `Flow Runs [${parentFlowUid}]`,
+ routeName: 'yarn-flow.runs',
+ model: parentFlowUid
+ });
+ }
+ crumbs.push({
+ text: `Run Info [${flowRunId}]`,
+ routeName: 'yarn-flowrun.info',
+ model: flowRunId
+ });
+ return crumbs;
+ })
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/info.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/info.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/info.js
new file mode 100644
index 0000000..df2f87e
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/info.js
@@ -0,0 +1,157 @@
+/**
+ * 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 ColumnDef from 'em-table/utils/column-definition';
+import Converter from 'yarn-ui/utils/converter';
+
+function createColumn() {
+ var columns = [];
+
+ // Generate columns
+ columns.push({
+ id: 'appId',
+ headerTitle: 'Application ID',
+ contentPath: 'appId',
+ cellComponentName: 'em-table-linked-cell',
+ minWidth: "300px",
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-app',
+ id: row.get('appId'),
+ displayText: row.get('appId')
+ };
+ }
+ });
+
+ columns.push({
+ id: 'appType',
+ headerTitle: 'Application Type',
+ contentPath: 'type'
+ });
+
+ columns.push({
+ id: 'state',
+ headerTitle: 'State',
+ contentPath: 'state',
+ cellComponentName: 'em-table-status-cell',
+ });
+
+ columns.push({
+ id: 'elapsedTs',
+ headerTitle: 'Elapsed Time',
+ contentPath: 'elapsedTs',
+ getCellContent: function(row) {
+ return Converter.msToElapsedTimeUnit(row.get('elapsedTs'));
+ }
+ });
+
+ columns.push({
+ id: 'cpuVCores',
+ headerTitle: 'CPU VCores',
+ contentPath: 'cpuVCores',
+ getCellContent: function(row) {
+ if (row.get('cpuVCores') > -1) {
+ return row.get('cpuVCores');
+ }
+ return 'N/A';
+ }
+ });
+
+ columns.push({
+ id: 'memoryUsed',
+ headerTitle: 'Memory Used',
+ contentPath: 'memoryUsed',
+ getCellContent: function(row) {
+ if (row.get('memoryUsed') > -1) {
+ return Converter.memoryBytesToMB(row.get('memoryUsed'));
+ }
+ return 'N/A';
+ }
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ vizWidgets: {
+ cpuVcores: true,
+ memoryUsed: false
+ },
+
+ actions: {
+ addVizWidget(widget) {
+ Ember.set(this.vizWidgets, widget, true);
+ },
+
+ removeVizWidget(widget) {
+ Ember.set(this.vizWidgets, widget, false);
+ }
+ },
+
+ columns: createColumn(),
+
+ cpuVCoresVizData: function() {
+ var data = [];
+ this.get('model.apps').forEach(function(app) {
+ var vizData = app.getCpuVCoresVizDataForBarChart();
+ if (vizData.value > 0) {
+ data.push(vizData);
+ }
+ });
+ data = this.getSortedVizDataInDesc(data);
+ return this.getRefactoredVizData(data);
+ }.property('model.apps'),
+
+ memoryVizData: function() {
+ var data = [];
+ this.get('model.apps').forEach(function(app) {
+ var vizData = app.getMemoryVizDataForBarChart();
+ if (vizData.value > 0) {
+ data.push(vizData);
+ }
+ });
+ data = this.getSortedVizDataInDesc(data);
+ return this.getRefactoredVizData(data);
+ }.property('model.apps'),
+
+ memoryFormatter: function(tick) {
+ return Converter.memoryBytesToMB(tick);
+ },
+
+ onBarChartClick: function() {
+ var self = this;
+ return function(data) {
+ self.transitionToRoute('yarn-app', data.appId);
+ };
+ }.property(),
+
+ getSortedVizDataInDesc: function(data) {
+ return data.sort(function(d1, d2) {
+ return d2.value - d1.value;
+ });
+ },
+
+ getRefactoredVizData: function(data) {
+ data.forEach(function(viz, idx) {
+ viz.appId = viz.label;
+ viz.label = "App " + (++idx);
+ }, this);
+ return data;
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/metrics.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/metrics.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/metrics.js
new file mode 100644
index 0000000..97b1e07
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun/metrics.js
@@ -0,0 +1,126 @@
+/**
+ * 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 ColumnDef from 'em-table/utils/column-definition';
+
+function _createColumns() {
+ var columns = [];
+
+ columns.push({
+ id: 'name',
+ headerTitle: 'Name',
+ contentPath: 'name',
+ observePath: true,
+ cellComponentName: 'em-table-html-cell',
+ getCellContent: function(row) {
+ var plainName = row.name;
+ if (plainName.indexOf('MAP:') > -1 || plainName.indexOf('REDUCE:') > -1) {
+ plainName = plainName.substring(plainName.indexOf(':') + 1);
+ }
+ return `<span>${plainName}</span>`;
+ }
+ }, {
+ id: 'value',
+ headerTitle: 'Value',
+ contentPath: 'value',
+ observePath: true
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ mapMetrics: null,
+ reduceMetrics: null,
+ generalMetrics: null,
+
+ columns: Ember.computed(function() {
+ return _createColumns(this.get('model.flowrun_uid'));
+ }),
+
+ metricsObserver: Ember.observer('model.flowrun', function() {
+ var metrics = this.get('model.flowrun.metrics');
+ var mapConfigs = [],
+ reduceConfigs = [],
+ generalConfigs = [];
+
+ metrics.forEach(function(metric) {
+ let id = metric.id;
+ if (id.startsWith('MAP:')) {
+ mapConfigs.push(metric);
+ } else if (id.startsWith('REDUCE:')) {
+ reduceConfigs.push(metric);
+ } else {
+ generalConfigs.push(metric);
+ }
+ }, this);
+
+ this.set('mapMetrics', mapConfigs);
+ this.set('reduceMetrics', reduceConfigs);
+ this.set('generalMetrics', generalConfigs);
+ }),
+
+ mapConfigRows: Ember.computed('mapMetrics', function() {
+ var row = null,
+ data = [];
+
+ this.get('mapMetrics').forEach(function(map) {
+ let value = map.values[Object.keys(map.values)[0]];
+ row = Ember.Object.create({
+ name: map.id,
+ value: value
+ });
+ data.push(row);
+ }, this);
+
+ return Ember.A(data);
+ }),
+
+ reduceConfigRows: Ember.computed('reduceMetrics', function() {
+ var row = null,
+ data = [];
+
+ this.get('reduceMetrics').forEach(function(map) {
+ let value = map.values[Object.keys(map.values)[0]];
+ row = Ember.Object.create({
+ name: map.id,
+ value: value
+ });
+ data.push(row);
+ }, this);
+
+ return Ember.A(data);
+ }),
+
+ generalConfigRows: Ember.computed('generalMetrics', function() {
+ var row = null,
+ data = [];
+
+ this.get('generalMetrics').forEach(function(map) {
+ let value = map.values[Object.keys(map.values)[0]];
+ row = Ember.Object.create({
+ name: map.id,
+ value: value
+ });
+ data.push(row);
+ }, this);
+
+ return Ember.A(data);
+ })
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-services.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-services.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-services.js
index eeb6205..a2c80f7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-services.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-services.js
@@ -18,9 +18,19 @@
import Ember from 'ember';
import AppTableController from './app-table-columns';
-
+import TableDefinition from 'em-table/utils/table-definition';
export default AppTableController.extend({
+ queryParams: ['searchText', 'sortColumnId', 'sortOrder', 'pageNum', 'rowCount'],
+ tableDefinition: TableDefinition.create({
+ sortColumnId: 'stTime',
+ sortOrder: 'desc'
+ }),
+ searchText: Ember.computed.alias('tableDefinition.searchText'),
+ sortColumnId: Ember.computed.alias('tableDefinition.sortColumnId'),
+ sortOrder: Ember.computed.alias('tableDefinition.sortOrder'),
+ pageNum: Ember.computed.alias('tableDefinition.pageNum'),
+ rowCount: Ember.computed.alias('tableDefinition.rowCount'),
breadcrumbs: [{
text: "Home",
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/mixins/app-attempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/mixins/app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/mixins/app-attempt.js
new file mode 100644
index 0000000..a90bf36
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/mixins/app-attempt.js
@@ -0,0 +1,66 @@
+/**
+ * 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.Mixin.create({
+ fetchAppInfoFromRMorATS(appId, store) {
+ return new Ember.RSVP.Promise(function(resolve, reject) {
+ store.find('yarn-app', appId).then(function(rmApp) {
+ resolve(rmApp);
+ }, function() {
+ store.find('yarn-app-timeline', appId).then(function(atsApp) {
+ resolve(atsApp);
+ }, function() {
+ console.error('Error:', 'Application not found in RM or ATS for appId: ' + appId);
+ reject(null);
+ });
+ });
+ });
+ },
+
+ fetchAttemptInfoFromRMorATS(attemptId, store) {
+ return new Ember.RSVP.Promise(function(resolve, reject) {
+ store.findRecord('yarn-app-attempt', attemptId, {reload: true}).then(function(rmAttempt) {
+ resolve(rmAttempt);
+ }, function() {
+ store.findRecord('yarn-timeline-appattempt', attemptId, {reload: true}).then(function(atsAttempt) {
+ resolve(atsAttempt);
+ }, function() {
+ console.error('Error:', 'Application attempt not found in RM or ATS for attemptId: ' + attemptId);
+ reject(null);
+ });
+ });
+ });
+ },
+
+ fetchAttemptListFromRMorATS(appId, store) {
+ return new Ember.RSVP.Promise(function(resolve, reject) {
+ store.query('yarn-app-attempt', {appId: appId}).then(function(rmAttempts) {
+ resolve(rmAttempts);
+ }, function() {
+ store.query('yarn-timeline-appattempt', {appId: appId}).then(function(atsAttempts) {
+ resolve(atsAttempts);
+ }, function() {
+ console.error('Error:', 'Application attempts not found in RM or ATS for appId: ' + appId);
+ reject(null);
+ });
+ });
+ });
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js
index c83eb2e..dd95765 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js
@@ -74,7 +74,7 @@ export default DS.Model.extend({
if (!this.get("containerId")) {
return this.get("id");
}
- return "attempt_" +
+ return "attempt_" +
parseInt(Converter.containerIdToAttemptId(this.get("containerId")).split("_")[3]);
}.property("containerId"),
@@ -119,13 +119,12 @@ export default DS.Model.extend({
if (elapsedMs <= 0) {
elapsedMs = Date.now() - this.get("startTs");
}
-
- return Converter.msToElapsedTime(elapsedMs);
+ return Converter.msToElapsedTimeUnit(elapsedMs);
}.property(),
tooltipLabel: function() {
- return "<p>Id:" + this.get("id") +
- "</p><p>ElapsedTime:" +
+ return "<p>Id:" + this.get("id") +
+ "</p><p>ElapsedTime:" +
String(this.get("elapsedTime")) + "</p>";
}.property(),
@@ -141,4 +140,4 @@ export default DS.Model.extend({
return this.get("state");
}.property(),
-});
\ No newline at end of file
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js
new file mode 100644
index 0000000..a8a7471
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js
@@ -0,0 +1,52 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.Model.extend({
+ appId: DS.attr('string'),
+ type: DS.attr('string'),
+ uid: DS.attr('string'),
+ metrics: DS.attr('array'),
+ startedTs: DS.attr('number'),
+ finishedTs: DS.attr('number'),
+ state: DS.attr('string'),
+ cpuVCores: DS.attr('number'),
+ memoryUsed: DS.attr('number'),
+
+ elapsedTs: function() {
+ return this.get('finishedTs') - this.get('startedTs');
+ }.property('startedTs', 'finishedTs'),
+
+ getCpuVCoresVizDataForBarChart: function() {
+ return {
+ label: this.get('appId'),
+ value: this.get('cpuVCores'),
+ tooltip: this.get("appId") + "<br>" + 'CPU VCores: ' + this.get('cpuVCores')
+ };
+ },
+
+ getMemoryVizDataForBarChart: function() {
+ return {
+ label: this.get('appId'),
+ value: this.get('memoryUsed'),
+ tooltip: this.get("appId") + "<br>" + 'Memory Used: ' + Converter.memoryBytesToMB(this.get('memoryUsed'))
+ };
+ }
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-timeline.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-timeline.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-timeline.js
new file mode 100644
index 0000000..fa5223f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-timeline.js
@@ -0,0 +1,105 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.Model.extend({
+ appName: DS.attr('string'),
+ user: DS.attr('string'),
+ queue: DS.attr('string'),
+ state: DS.attr('string'),
+ startTime: DS.attr('string'),
+ elapsedTime: DS.attr('string'),
+ finalStatus: DS.attr('string'),
+ finishedTime: DS.attr('finishedTime'),
+ progress: DS.attr('number'),
+ diagnostics: DS.attr('string'),
+ amContainerLogs: DS.attr('string'),
+ amHostHttpAddress: DS.attr('string'),
+ logAggregationStatus: DS.attr('string'),
+ unmanagedApplication: DS.attr('string'),
+ amNodeLabelExpression: DS.attr('string'),
+ applicationTags: DS.attr('string'),
+ applicationType: DS.attr('string'),
+ priority: DS.attr('number'),
+ allocatedMB: DS.attr('number'),
+ allocatedVCores: DS.attr('number'),
+ runningContainers: DS.attr('number'),
+ memorySeconds: DS.attr('number'),
+ vcoreSeconds: DS.attr('number'),
+ preemptedResourceMB: DS.attr('number'),
+ preemptedResourceVCores: DS.attr('number'),
+ numNonAMContainerPreempted: DS.attr('number'),
+ numAMContainerPreempted: DS.attr('number'),
+ clusterUsagePercentage: DS.attr('number'),
+ queueUsagePercentage: DS.attr('number'),
+ currentAppAttemptId: DS.attr('string'),
+
+ isFailed: function() {
+ return this.get('finalStatus') === "FAILED";
+ }.property("finalStatus"),
+
+ validatedFinishedTs: function() {
+ if (this.get("finishedTime") < this.get("startTime")) {
+ return "";
+ }
+ return this.get("finishedTime");
+ }.property("finishedTime"),
+
+ formattedElapsedTime: function() {
+ return Converter.msToElapsedTimeUnit(this.get('elapsedTime'));
+ }.property('elapsedTime'),
+
+ allocatedResource: function() {
+ return Converter.resourceToString(this.get("allocatedMB"), this.get("allocatedVCores"));
+ }.property("allocatedMB", "allocatedVCores"),
+
+ preemptedResource: function() {
+ return Converter.resourceToString(this.get("preemptedResourceMB"), this.get("preemptedResourceVCores"));
+ }.property("preemptedResourceMB", "preemptedResourceVCores"),
+
+ aggregatedResourceUsage: function() {
+ return Converter.resourceToString(this.get("memorySeconds"), this.get("vcoreSeconds")) + " (× Secs)";
+ }.property("memorySeconds", "vcoreSeconds"),
+
+ progressStyle: function() {
+ return "width: " + this.get("progress") + "%";
+ }.property("progress"),
+
+ runningContainersNumber: function() {
+ if(this.get("runningContainers") < 0) {
+ return 0;
+ }
+ return this.get("runningContainers");
+ }.property("progress"),
+
+ finalStatusStyle: function() {
+ var style = "default";
+ var finalStatus = this.get("finalStatus");
+ if (finalStatus === "KILLED") {
+ style = "warning";
+ } else if (finalStatus === "FAILED") {
+ style = "danger";
+ } else {
+ style = "success";
+ }
+
+ return "label label-" + style;
+ }.property("finalStatus")
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js
index bd9cea7..7f39345 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js
@@ -52,13 +52,12 @@ export default DS.Model.extend({
if (elapsedMs <= 0) {
elapsedMs = Date.now() - this.get("startTs");
}
-
- return Converter.msToElapsedTime(elapsedMs);
+ return Converter.msToElapsedTimeUnit(elapsedMs);
}.property(),
tooltipLabel: function() {
- return "<p>Id:" + this.get("id") +
- "</p><p>ElapsedTime:" +
+ return "<p>Id:" + this.get("id") +
+ "</p><p>ElapsedTime:" +
String(this.get("elapsedTime")) + "</p>";
}.property(),
-});
\ No newline at end of file
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-entity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-entity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-entity.js
new file mode 100644
index 0000000..a06d6ab
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-entity.js
@@ -0,0 +1,26 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.Model.extend({
+ entityId: DS.attr('string'),
+ type: DS.attr('string'),
+ uid: DS.attr('string'),
+ metrics: DS.attr('array')
+});
http://git-wip-us.apache.org/repos/asf/hadoop/blob/46d9c4ca/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js
new file mode 100644
index 0000000..1095cfe
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js
@@ -0,0 +1,28 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.Model.extend({
+ cluster: DS.attr('string'),
+ flowName: DS.attr('string'),
+ lastExecDate: DS.attr('string'),
+ user: DS.attr('string'),
+ flowruns: DS.attr('string'),
+ uid: DS.attr('string')
+});
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org