Преглед на файлове

YARN-4849. [YARN-3368] cleanup code base, integrate web UI related build to mvn, and fix licenses. (wangda)

Wangda Tan преди 9 години
родител
ревизия
588dee0d8f
променени са 100 файла, в които са добавени 1558 реда и са изтрити 775 реда
  1. 13 0
      .gitignore
  2. 3 1
      BUILDING.txt
  3. 80 0
      LICENSE.txt
  4. 144 0
      dev-support/create-release.sh
  5. 5 0
      dev-support/docker/Dockerfile
  6. 43 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/YarnUI2.md
  7. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.bowerrc
  8. 0 34
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.editorconfig
  9. 0 11
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.ember-cli
  10. 0 17
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.gitignore
  11. 0 32
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.jshintrc
  12. 0 23
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.travis.yml
  13. 0 3
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.watchmanconfig
  14. 0 24
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/README.md
  15. 0 20
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/cluster-info.js
  16. 0 20
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/cluster-metric.js
  17. 0 26
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-app.js
  18. 0 20
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-queue.js
  19. 0 20
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/app.js
  20. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/.gitkeep
  21. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/app-attempt-table.js
  22. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/app-table.js
  23. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/container-table.js
  24. 0 21
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/item-selector.js
  25. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-configuration-table.js
  26. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-navigator.js
  27. 0 272
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-view.js
  28. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/.gitkeep
  29. 0 5
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/cluster-overview.js
  30. 0 4
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/yarn-apps.js
  31. 0 6
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/yarn-queue.js
  32. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/.gitkeep
  33. 0 25
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/index.html
  34. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/.gitkeep
  35. 0 13
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/cluster-info.js
  36. 0 8
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-user.js
  37. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/.gitkeep
  38. 0 11
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/cluster-overview.js
  39. 0 21
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-app-attempt.js
  40. 0 10
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-app.js
  41. 0 8
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-apps.js
  42. 0 20
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queue.js
  43. 0 5
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queues/index.js
  44. 0 7
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queues/queues-selector.js
  45. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/.gitkeep
  46. 0 28
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/app-attempt-table.hbs
  47. 0 18
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/queue-navigator.hbs
  48. 0 12
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/yarn-app-attempt.hbs
  49. 0 3
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/yarn-apps.hbs
  50. 207 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/pom.xml
  51. 0 3
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/public/robots.txt
  52. 25 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/WEB-INF/web.xml
  53. 38 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/cluster-info.js
  54. 38 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/cluster-metric.js
  55. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js
  56. 44 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js
  57. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container-log.js
  58. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
  59. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js
  60. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js
  61. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js
  62. 38 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-queue.js
  63. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-rm-node.js
  64. 38 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/app.js
  65. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-attempt-table.js
  66. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-table.js
  67. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/bar-chart.js
  68. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/base-chart-component.js
  69. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/container-table.js
  70. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/donut-chart.js
  71. 39 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/item-selector.js
  72. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-configuration-table.js
  73. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-navigator.js
  74. 290 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-view.js
  75. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-table.js
  76. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/timeline-view.js
  77. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/tree-selector.js
  78. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/config.js
  79. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/constants.js
  80. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js
  81. 23 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js
  82. 22 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.js
  83. 24 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-queue.js
  84. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/divide.js
  85. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/log-files-comma.js
  86. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/node-link.js
  87. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/node-menu.js
  88. 43 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/index.html
  89. 31 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/cluster-info.js
  90. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/cluster-metric.js
  91. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js
  92. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js
  93. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container-log.js
  94. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js
  95. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node-app.js
  96. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node-container.js
  97. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node.js
  98. 18 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-queue.js
  99. 0 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-rm-node.js
  100. 26 0
      hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-user.js

+ 13 - 0
.gitignore

@@ -26,6 +26,19 @@ hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads
 hadoop-common-project/hadoop-common/src/test/resources/contract-test-options.xml
 hadoop-tools/hadoop-openstack/src/test/resources/contract-test-options.xml
 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/tla/yarnregistry.toolbox
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/dist
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tmp
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/node
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/node_modules
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/bower_components
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/.sass-cache
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/connect.lock
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/coverage/*
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/libpeerconnection.log
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webappnpm-debug.log
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapptestem.log
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/dist
+hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/tmp
 yarnregistry.pdf
 hadoop-tools/hadoop-aws/src/test/resources/auth-keys.xml
 hadoop-tools/hadoop-aws/src/test/resources/contract-test-options.xml

+ 3 - 1
BUILDING.txt

@@ -15,6 +15,7 @@ Requirements:
 * Internet connection for first build (to fetch all Maven and Hadoop dependencies)
 * python (for releasedocs)
 * bats (for shell code testing)
+* Node.js / bower / Ember-cli (for YARN UI v2 building)
 
 ----------------------------------------------------------------------------------
 The easiest way to get an environment with all the appropriate tools is by means
@@ -119,7 +120,7 @@ Maven build goals:
  * Run clover                : mvn test -Pclover [-DcloverLicenseLocation=${user.name}/.clover.license]
  * Run Rat                   : mvn apache-rat:check
  * Build javadocs            : mvn javadoc:javadoc
- * Build distribution        : mvn package [-Pdist][-Pdocs][-Psrc][-Pnative][-Dtar][-Preleasedocs]
+ * Build distribution        : mvn package [-Pdist][-Pdocs][-Psrc][-Pnative][-Dtar][-Preleasedocs][-Pyarn-ui]
  * Change Hadoop version     : mvn versions:set -DnewVersion=NEWVERSION
 
  Build options:
@@ -129,6 +130,7 @@ Maven build goals:
   * Use -Psrc to create a project source TAR.GZ
   * Use -Dtar to create a TAR with the distribution (using -Pdist)
   * Use -Preleasedocs to include the changelog and release docs (requires Internet connectivity)
+  * Use -Pyarn-ui to build YARN UI v2. (Requires Internet connectivity, and it is for dev use only)
 
  Snappy build options:
 

+ 80 - 0
LICENSE.txt

@@ -2314,3 +2314,83 @@ jamon-runtime 2.3.1
      Developer permits you to utilize portions of the Covered Code under
      Your choice of the MPL or the alternative licenses, if any, specified
      by the Initial Developer in the file described in Exhibit A.
+
+For Apache Hadoop YARN Web UI component: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/
+---------------------------------------------------------------------
+The Apache Hadoop YARN Web UI component bundles the following files under the MIT License:
+
+ - ember v2.2.0 (http://emberjs.com/) - Copyright (c) 2014 Yehuda Katz, Tom Dale and Ember.js contributors
+ - ember-data v2.1.0 (https://github.com/emberjs/data) - Copyright (C) 2011-2014 Tilde, Inc. and contributors, Portions Copyright (C) 2011 LivingSocial Inc.
+ - ember-resolver v2.0.3 (https://github.com/ember-cli/ember-resolver) - Copyright (c) 2013 Stefan Penner and Ember App Kit Contributors
+ - bootstrap v3.3.6 (http://getbootstrap.com) - Copyright (c) 2011-2014 Twitter, Inc
+ - jquery v2.1.4 (http://jquery.org) - Copyright 2005, 2014 jQuery Foundation and other contributors
+ - jquery-ui v1.11.4 (http://jqueryui.com/) - Copyright 2014 jQuery Foundation and other contributors
+ - datatables v1.10.8 (https://datatables.net/)
+ - moment v2.10.6 (http://momentjs.com/) - Copyright (c) 2011-2015 Tim Wood, Iskren Chernev, Moment.js contributors
+ - em-helpers v0.5.8 (https://github.com/sreenaths/em-helpers)
+ - ember-cli-app-version v0.5.8 (https://github.com/EmberSherpa/ember-cli-app-version) - Authored by Taras Mankovski <tarasm@gmail.com>
+ - ember-cli-babel v5.1.6 (https://github.com/babel/ember-cli-babel) - Authored by Stefan Penner <stefan.penner@gmail.com>
+ - ember-cli-content-security-policy v0.4.0 (https://github.com/rwjblue/ember-cli-content-security-policy)
+ - ember-cli-dependency-checker v1.2.0 (https://github.com/quaertym/ember-cli-dependency-checker) - Authored by Emre Unal
+ - ember-cli-htmlbars v1.0.2 (https://github.com/ember-cli/ember-cli-htmlbars) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-cli-htmlbars-inline-precompile v0.3.1 (https://github.com/pangratz/ember-cli-htmlbars-inline-precompile) - Authored by Clemens Müller <cmueller.418@gmail.com>
+ - ember-cli-ic-ajax v0.2.1 (https://github.com/rwjblue/ember-cli-ic-ajax) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-cli-inject-live-reload v1.4.0 (https://github.com/rwjblue/ember-cli-inject-live-reload) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-cli-qunit v1.2.1 (https://github.com/ember-cli/ember-cli-qunit) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-cli-release v0.2.8 (https://github.com/lytics/ember-cli-release) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-cli-sri v1.2.1 (https://github.com/jonathanKingston/ember-cli-sri) - Authored by Jonathan Kingston
+ - ember-cli-uglify v1.2.0 (github.com/ember-cli/ember-cli-uglify) - Authored by Robert Jackson <me@rwjblue.com>
+ - ember-d3 v0.1.0 (https://github.com/brzpegasus/ember-d3) - Authored by Estelle DeBlois
+ - select2 v4.0.0 (https://select2.github.io/)
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and assocated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+----
+The Apache Hadoop YARN Web UI component bundles the following files under the BSD License:
+
+(3-clause BSD license)
+ - D3 v3.5.6 (http://d3js.org/) - Copyright (c) 2010-2014, Michael Bostock
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list
+   of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this
+   list of conditions and the following disclaimer in the documentation and/or
+   other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.

+ 144 - 0
dev-support/create-release.sh

@@ -0,0 +1,144 @@
+#!/bin/bash
+# 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.
+
+
+# Function to probe the exit code of the script commands, 
+# and stop in the case of failure with an contextual error 
+# message.
+run() {
+  echo "\$ ${@}"
+  "${@}"
+  exitCode=$?
+  if [[ $exitCode != 0 ]]; then
+    echo
+    echo "Failed! running ${@} in `pwd`"
+    echo
+    exit $exitCode
+  fi
+}
+
+doMD5() {
+  MD5CMD="md5sum"
+  which $MD5CMD
+  if [[ $? != 0 ]]; then
+    MD5CMD="md5"
+  fi
+  run $MD5CMD ${1} > ${1}.md5
+}
+
+# If provided, the created release artifacts will be tagged with it 
+# (use RC#, i.e: RC0). Do not use a label to create the final release 
+# artifact.
+RC_LABEL=$1
+
+# Extract Hadoop version from POM
+HADOOP_VERSION=`cat pom.xml | grep "<version>" | head -1 | sed 's|^ *<version>||' | sed 's|</version>.*$||'`
+
+# Setup git
+GIT=${GIT:-git}
+
+echo
+echo "*****************************************************************"
+echo
+echo "Hadoop version to create release artifacts: ${HADOOP_VERSION}"
+echo 
+echo "Release Candidate Label: ${RC_LABEL}"
+echo
+echo "*****************************************************************"
+echo
+
+if [[ ! -z ${RC_LABEL} ]]; then
+  RC_LABEL="-${RC_LABEL}"
+fi
+
+# Get Maven command
+if [ -z "$MAVEN_HOME" ]; then
+  MVN=mvn
+else
+  MVN=$MAVEN_HOME/bin/mvn
+fi
+
+ARTIFACTS_DIR="target/artifacts"
+
+# git clean to clear any remnants from previous build
+run ${GIT} clean -xdf
+
+# mvn clean for sanity
+run ${MVN} clean
+
+# Create staging dir for release artifacts
+run mkdir -p ${ARTIFACTS_DIR}
+
+# Create RAT report
+run ${MVN} apache-rat:check
+
+# Create SRC and BIN tarballs for release,
+# Using 'install’ goal instead of 'package' so artifacts are available 
+# in the Maven local cache for the site generation
+run ${MVN} install -Pdist,src,native,yarn-ui -DskipTests -Dtar
+
+# Create site for release
+run ${MVN} site site:stage -Pdist -Psrc
+run mkdir -p target/staging/hadoop-project/hadoop-project-dist/hadoop-yarn
+run mkdir -p target/staging/hadoop-project/hadoop-project-dist/hadoop-mapreduce
+run cp ./hadoop-common-project/hadoop-common/src/main/docs/releasenotes.html target/staging/hadoop-project/hadoop-project-dist/hadoop-common/
+run cp ./hadoop-common-project/hadoop-common/CHANGES.txt target/staging/hadoop-project/hadoop-project-dist/hadoop-common/
+run cp ./hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt target/staging/hadoop-project/hadoop-project-dist/hadoop-hdfs/
+run cp ./hadoop-yarn-project/CHANGES.txt target/staging/hadoop-project/hadoop-project-dist/hadoop-yarn/
+run cp ./hadoop-mapreduce-project/CHANGES.txt target/staging/hadoop-project/hadoop-project-dist/hadoop-mapreduce/
+run mv target/staging/hadoop-project target/r${HADOOP_VERSION}/
+run cd target/
+run tar czf hadoop-site-${HADOOP_VERSION}.tar.gz r${HADOOP_VERSION}/*
+run cd ..
+
+# Stage RAT report
+find . -name rat.txt | xargs -I% cat % > ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}-rat.txt
+
+# Stage CHANGES.txt files
+run cp ./hadoop-common-project/hadoop-common/CHANGES.txt ${ARTIFACTS_DIR}/CHANGES-COMMON-${HADOOP_VERSION}${RC_LABEL}.txt
+run cp ./hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ${ARTIFACTS_DIR}/CHANGES-HDFS-${HADOOP_VERSION}${RC_LABEL}.txt
+run cp ./hadoop-mapreduce-project/CHANGES.txt ${ARTIFACTS_DIR}/CHANGES-MAPREDUCE-${HADOOP_VERSION}${RC_LABEL}.txt
+run cp ./hadoop-yarn-project/CHANGES.txt ${ARTIFACTS_DIR}/CHANGES-YARN-${HADOOP_VERSION}${RC_LABEL}.txt
+
+# Prepare and stage BIN tarball
+run cd hadoop-dist/target/
+run tar -xzf hadoop-${HADOOP_VERSION}.tar.gz
+run cp -r ../../target/r${HADOOP_VERSION}/* hadoop-${HADOOP_VERSION}/share/doc/hadoop/
+run tar -czf hadoop-${HADOOP_VERSION}.tar.gz hadoop-${HADOOP_VERSION}
+run cd ../..
+run mv hadoop-dist/target/hadoop-${HADOOP_VERSION}.tar.gz ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}.tar.gz
+
+# Stage SRC tarball
+run mv hadoop-dist/target/hadoop-${HADOOP_VERSION}-src.tar.gz ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}-src.tar.gz
+
+# Stage SITE tarball
+run mv target/hadoop-site-${HADOOP_VERSION}.tar.gz ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}-site.tar.gz
+
+# MD5 SRC and BIN tarballs
+doMD5 ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}.tar.gz
+doMD5 ${ARTIFACTS_DIR}/hadoop-${HADOOP_VERSION}${RC_LABEL}-src.tar.gz
+
+run cd ${ARTIFACTS_DIR}
+ARTIFACTS_DIR=`pwd`
+echo
+echo "Congratulations, you have successfully built the release"
+echo "artifacts for Apache Hadoop ${HADOOP_VERSION}${RC_LABEL}"
+echo
+echo "The artifacts for this run are available at ${ARTIFACTS_DIR}:"
+run ls -1 ${ARTIFACTS_DIR}
+echo 
+echo "Remember to sign them before staging them on the open"
+echo

+ 5 - 0
dev-support/docker/Dockerfile

@@ -132,6 +132,11 @@ RUN pip install python-dateutil
 ###
 ENV MAVEN_OPTS -Xms256m -Xmx512m
 
+###
+# Install node js tools for web UI frameowkr
+###
+RUN apt-get -y install nodejs && ln -s /usr/bin/nodejs /usr/bin/node && apt-get -y install npm && npm install -g bower
+
 ###
 # Everything past this point is either not needed for testing or breaks Yetus.
 # So tell Yetus not to read the rest of the file:

+ 43 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/YarnUI2.md

@@ -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.
+-->
+
+Hadoop: YARN-UI V2
+=================
+*This is a WIP project, nobody should use it in production.*
+
+Prerequisites
+-------------
+
+You will need the following things properly installed on your computer.
+
+* Install Node.js with NPM: https://nodejs.org/download/
+* After Node.js installed, install bower: `npm install -g bower`.
+* Install Ember-cli: `npm install -g ember-cli`
+
+BUILD
+----
+* Please refer to BUILDING.txt in the top directory and pass -Pyarn-ui to build UI-related code
+* Execute `mvn test -Pyarn-ui` to run unit tests
+
+Try it
+------
+
+* Packaging and deploying Hadoop in this branch
+* In `hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/config.js`, change `timelineWebUrl` and `rmWebUrl` to your YARN RM/Timeline server web address. 
+* If you are running YARN RM in your localhost, you should update `localBaseUrl` to `localhost:1337/`, install `npm install -g corsproxy` and run `corsproxy` to avoid CORS errors. More details: `https://www.npmjs.com/package/corsproxy`. 
+* Run `ember serve` under `hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/`
+* Visit your app at [http://localhost:4200](http://localhost:4200).

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.bowerrc

@@ -1,4 +0,0 @@
-{
-  "directory": "bower_components",
-  "analytics": false
-}

+ 0 - 34
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.editorconfig

@@ -1,34 +0,0 @@
-# EditorConfig helps developers define and maintain consistent
-# coding styles between different editors and IDEs
-# editorconfig.org
-
-root = true
-
-
-[*]
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-indent_style = space
-indent_size = 2
-
-[*.js]
-indent_style = space
-indent_size = 2
-
-[*.hbs]
-insert_final_newline = false
-indent_style = space
-indent_size = 2
-
-[*.css]
-indent_style = space
-indent_size = 2
-
-[*.html]
-indent_style = space
-indent_size = 2
-
-[*.{diff,md}]
-trim_trailing_whitespace = false

+ 0 - 11
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.ember-cli

@@ -1,11 +0,0 @@
-{
-  /**
-    Ember CLI sends analytics information by default. The data is completely
-    anonymous, but there are times when you might want to disable this behavior.
-
-    Setting `disableAnalytics` to true will prevent any data from being sent.
-  */
-  "disableAnalytics": false,
-  "liveReload": true,
-  "watcher": "polling"
-}

+ 0 - 17
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.gitignore

@@ -1,17 +0,0 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-
-# compiled output
-/dist
-/tmp
-
-# dependencies
-/node_modules
-/bower_components
-
-# misc
-/.sass-cache
-/connect.lock
-/coverage/*
-/libpeerconnection.log
-npm-debug.log
-testem.log

+ 0 - 32
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.jshintrc

@@ -1,32 +0,0 @@
-{
-  "predef": [
-    "document",
-    "window",
-    "-Promise"
-  ],
-  "browser": true,
-  "boss": true,
-  "curly": true,
-  "debug": false,
-  "devel": true,
-  "eqeqeq": true,
-  "evil": true,
-  "forin": false,
-  "immed": false,
-  "laxbreak": false,
-  "newcap": true,
-  "noarg": true,
-  "noempty": false,
-  "nonew": false,
-  "nomen": false,
-  "onevar": false,
-  "plusplus": false,
-  "regexp": false,
-  "undef": true,
-  "sub": true,
-  "strict": false,
-  "white": false,
-  "eqnull": true,
-  "esnext": true,
-  "unused": true
-}

+ 0 - 23
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.travis.yml

@@ -1,23 +0,0 @@
----
-language: node_js
-node_js:
-  - "0.12"
-
-sudo: false
-
-cache:
-  directories:
-    - node_modules
-
-before_install:
-  - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH
-  - "npm config set spin false"
-  - "npm install -g npm@^2"
-
-install:
-  - npm install -g bower
-  - npm install
-  - bower install
-
-script:
-  - npm test

+ 0 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/.watchmanconfig

@@ -1,3 +0,0 @@
-{
-  "ignore_dirs": ["tmp"]
-}

+ 0 - 24
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/README.md

@@ -1,24 +0,0 @@
-# Yarn-ui
-*This is a WIP project, nobody should use it in production.*
-
-## Prerequisites
-
-You will need the following things properly installed on your computer.
-
-* Install Node.js with NPM: https://nodejs.org/download/
-* After Node.js installed, install bower: `npm install -g bower`.
-* Install Ember-cli: `npm install -g ember-cli`
-
-## Installation
-
-* Goto root directory of yarn-ui project: `hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui`
-* `npm install && bower install`, it will take a while to finish.
-
-## Try it
-
-* Packaging and deploying Hadoop in this branch (You can use latest trunk after YARN-4417 committed to trunk)
-* Modify `app/adapters/yarn-app.js`, change `host` to your YARN RM web address
-* If you running YARN RM in your localhost, you should install `npm install -g corsproxy` and run `corsproxy` to avoid CORS errors. More details: `https://www.npmjs.com/package/corsproxy`. And the `host` of `app/adapters/yarn-app.js` should start with `localhost:1337`.
-* Run `ember server`
-* Visit your app at [http://localhost:4200](http://localhost:4200).
-

+ 0 - 20
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/cluster-info.js

@@ -1,20 +0,0 @@
-import DS from 'ember-data';
-import Config from 'yarn-ui/config';
-
-export default DS.JSONAPIAdapter.extend({
-  headers: {
-    Accept: 'application/json'
-  },
-  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
-  namespace: 'ws/v1/cluster', // common const
-  pathForType(modelName) {
-    return ''; // move to some common place, return path by modelname.
-  },
-  ajax(url, method, hash) {
-    hash = hash || {};
-    hash.crossDomain = true;
-    hash.xhrFields = {withCredentials: true};
-    hash.targetServer = "RM";
-    return this._super(url, method, hash); 
-  }
-});

+ 0 - 20
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/cluster-metric.js

@@ -1,20 +0,0 @@
-import DS from 'ember-data';
-import Config from 'yarn-ui/config';
-
-export default DS.JSONAPIAdapter.extend({
-  headers: {
-    Accept: 'application/json'
-  },
-  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
-  namespace: 'ws/v1/cluster/metrics', // common const
-  pathForType(modelName) {
-    return ''; // move to some common place, return path by modelname.
-  },
-  ajax(url, method, hash) {
-    hash = hash || {};
-    hash.crossDomain = true;
-    hash.xhrFields = {withCredentials: true};
-    hash.targetServer = "RM";
-    return this._super(url, method, hash); 
-  }
-});

+ 0 - 26
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-app.js

@@ -1,26 +0,0 @@
-import DS from 'ember-data';
-import Config from 'yarn-ui/config';
-
-export default DS.JSONAPIAdapter.extend({
-  headers: {
-    Accept: 'application/json'
-  },
-  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
-  namespace: 'ws/v1/cluster', // common const
-  pathForType(modelName) {
-    return 'apps'; // move to some common place, return path by modelname.
-  },
-  /*
-  urlForQuery(query, modelName) {
-    var url = this._buildURL();
-    return url + '/apps/' + query.appId + "/appattempts";
-  },
-  */
-  ajax(url, method, hash) {
-    hash = hash || {};
-    hash.crossDomain = true;
-    hash.xhrFields = {withCredentials: true};
-    hash.targetServer = "RM";
-    return this._super(url, method, hash); 
-  }
-});

+ 0 - 20
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-queue.js

@@ -1,20 +0,0 @@
-import DS from 'ember-data';
-import Config from 'yarn-ui/config';
-
-export default DS.JSONAPIAdapter.extend({
-  headers: {
-    Accept: 'application/json'
-  },
-  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
-  namespace: 'ws/v1/cluster', // common const
-  pathForType(modelName) {
-    return 'scheduler'; // move to some common place, return path by modelname.
-  },
-  ajax(url, method, hash) {
-    hash = hash || {};
-    hash.crossDomain = true;
-    hash.xhrFields = {withCredentials: true};
-    hash.targetServer = "RM";
-    return this._super(url, method, hash); 
-  }
-});

+ 0 - 20
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/app.js

@@ -1,20 +0,0 @@
-import Ember from 'ember';
-import Resolver from 'ember/resolver';
-import loadInitializers from 'ember/load-initializers';
-import config from './config/environment';
-import Sorter from 'yarn-ui/utils/sorter';
-
-var App;
-
-Ember.MODEL_FACTORY_INJECTIONS = true;
-
-App = Ember.Application.extend({
-  modulePrefix: config.modulePrefix,
-  podModulePrefix: config.podModulePrefix,
-  Resolver: Resolver
-});
-
-loadInitializers(App, config.modulePrefix);
-Sorter.initDataTableSorter();
-
-export default App;

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/.gitkeep


+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/app-attempt-table.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-});

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/app-table.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-});

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/container-table.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-});

+ 0 - 21
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/item-selector.js

@@ -1,21 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-  didInsertElement: function() {
-    $(".js-example-basic-single").select2(
-      {
-        width: '100%',
-        placeholder: "Select a queue"
-      });
-    var elementId = this.get("element-id");
-    var prefix = this.get("prefix");
-
-    var element = d3.select("#" + elementId);
-
-    if (element) {
-      this.get("model").forEach(function(o) {
-        element.append("option").attr("value", o.get("name")).text(prefix + o.get("name"));
-      });
-    }
-  }
-});

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-configuration-table.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-});

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-navigator.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Component.extend({
-});

+ 0 - 272
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/queue-view.js

@@ -1,272 +0,0 @@
-import Ember from 'ember';
-import ChartUtilsMixin from 'yarn-ui/mixins/charts-utils';
-
-export default Ember.Component.extend(ChartUtilsMixin, {
-	queues: {
-		data: undefined,
-		foldedQueues: {},
-		selectedQueueCircle: undefined,
-		maxDepth: -1,
-	},
-
-	queueColors: d3.scale.category20().range(),
-
-	renderQueue: function(now, depth, sequence) {
-		if (depth > this.queues.maxDepth) {
-			this.queues.maxDepth = depth;
-		}
-
-		var cx = 20 + depth * 30;
-		var cy = 20 + sequence * 30;
-		var name = now.get("name");
-
-		var g = this.queues.dataGroup.append("g")
-			.attr("id", "queue-" + name + "-g");
-
-		var folded = this.queues.foldedQueues[name];
-		var isParentQueue = false;
-
-		// render its children
-		var children = [];
-		var childrenNames = now.get("children");
-		if (childrenNames) {
-			childrenNames.forEach(function(name) {
-				isParentQueue = true;
-				var child = this.queues.data[name];
-				if (child) {
-					children.push(child);
-				}
-			}.bind(this));
-		}
-		if (folded) {
-			children = [];
-		}
-		var linefunction = d3.svg.line()
-			.interpolate("basis")
-			.x(function(d) {
-				return d.x;
-			})
-			.y(function(d) {
-				return d.y;
-			});
-
-		for (var i = 0; i < children.length; i++) {
-			sequence = sequence + 1;
-			// Get center of children queue
-			var cc = this.renderQueue(children[i],
-				depth + 1, sequence);
-			g.append("path")
-				.attr("class", "queue")
-				.attr("d", linefunction([{
-					x: cx,
-					y: cy
-				}, {
-					x: cc.x - 20,
-					y: cc.y
-				}, cc]));
-		}
-
-		var circle = g.append("circle")
-			.attr("cx", cx)
-			.attr("cy", cy)
-			.attr("class", "queue");
-
-		circle.on('mouseover', function() {
-			circle.style("fill", this.queueColors[1]);
-		}.bind(this));
-		circle.on('mouseout', function() {
-			if (circle != this.queues.selectedQueueCircle) {
-				circle.style("fill", this.queueColors[0]);
-			}
-		}.bind(this));
-		circle.on('click', function() {
-			circle.style("fill", this.queueColors[2]);
-			var pre = this.queues.selectedQueueCircle;
-			this.queues.selectedQueueCircle = circle;
-			if (pre) {
-				pre.on('mouseout')();
-			}
-			this.renderCharts(name);
-		}.bind(this));
-		circle.on('dblclick', function() {
-			if (!isParentQueue) {
-				return;
-			}
-
-			if (this.queues.foldedQueues[name]) {
-				delete this.queues.foldedQueues[name];
-			} else {
-				this.queues.foldedQueues[name] = now;
-			}
-			this.renderQueues();
-		}.bind(this));
-
-		var text = name;
-		if (folded) {
-			text = name + " (+)";
-		}
-
-		// print queue's name
-		g.append("text")
-			.attr("x", cx + 30)
-			.attr("y", cy + 5)
-			.text(text)
-			.attr("class", "queue");
-
-		return {
-			x: cx,
-			y: cy
-		};
-	},
-
-	renderQueues: function() {
-		if (this.queues.dataGroup) {
-			this.queues.dataGroup.remove();
-		}
-		// render queues
-		this.queues.dataGroup = this.canvas.svg.append("g")
-			.attr("id", "queues-g");
-		var rootQueue = undefined;
-
-		if (this.queues.data) {
-			this.renderQueue(this.queues.data['root'], 0, 0);
-
-		}
-	},
-
-	draw: function() {
-		this.queues.data = {};
-		this.get("model")
-			.forEach(function(o) {
-				this.queues.data[o.id] = o;
-			}.bind(this));
-
-		// get w/h of the svg
-		var bbox = d3.select("#main-container")
-			.node()
-			.getBoundingClientRect();
-		this.canvas.w = bbox.width;
-		this.canvas.h = Math.max(Object.keys(this.queues.data)
-			.length * 35, 1500);
-
-		this.canvas.svg = d3.select("#main-container")
-			.append("svg")
-			.attr("width", this.canvas.w)
-			.attr("height", this.canvas.h)
-			.attr("id", "main-svg");
-
-		this.renderBackground();
-
-		this.renderQueues();
-		this.renderCharts("root");
-	},
-
-	didInsertElement: function() {
-		this.draw();
-	},
-
-	/*
-	 * data = [{label="xx", value=},{...}]
-	 */
-	renderTable: function(data, title, layout) {
-		d3.select("#main-svg")
-			.append('table')
-			.selectAll('tr')
-			.data(data)
-			.enter()
-			.append('tr')
-			.selectAll('td')
-			.data(function(d) {
-				return d;
-			})
-			.enter()
-			.append('td')
-			.text(function(d) {
-				return d;
-			});
-	},
-
-	renderQueueCapacities: function(queue, layout) {
-		// Render bar chart
-		this.renderBarChart(this.charts.g, [{
-			label: "Cap",
-			value: queue.get("capacity")
-		}, {
-			label: "MaxCap",
-			value: queue.get("maxCapacity")
-		}, {
-			label: "UsedCap",
-			value: queue.get("usedCapacity")
-		}], "Queue Capacities", layout, 60);
-	},
-
-	renderChildrenCapacities: function(queue, layout) {
-		var data = [];
-		var children = queue.get("children");
-		if (children) {
-			for (var i = 0; i < children.length; i++) {
-				var child = this.queues.data[children[i]];
-				data.push({
-					label: child.get("name"),
-					value: child.get("capacity")
-				});
-			}
-		}
-
-		this.renderDonutChart(this.charts.g, data, "Children Capacities", layout, true);
-	},
-
-	renderChildrenUsedCapacities: function(queue, layout) {
-		var data = [];
-		var children = queue.get("children");
-		if (children) {
-			for (var i = 0; i < children.length; i++) {
-				var child = this.queues.data[children[i]];
-				data.push({
-					label: child.get("name"),
-					value: child.get("usedCapacity")
-				});
-			}
-		}
-
-		this.renderDonutChart(this.charts.g, data, "Children Used Capacities", layout, true);
-	},
-
-	renderLeafQueueUsedCapacities: function(layout) {
-		var leafQueueUsedCaps = [];
-		for (var queueName in this.queues.data) {
-			var q = this.queues.data[queueName];
-			if ((!q.get("children")) || q.get("children")
-				.length == 0) {
-				// it's a leafqueue
-				leafQueueUsedCaps.push({
-					label: q.get("name"),
-					value: q.get("usedCapacity")
-				});
-			}
-		}
-
-		this.renderDonutChart(this.charts.g, leafQueueUsedCaps, "LeafQueues Used Capacities",
-			layout, true);
-	},
-
-	renderCharts: function(queueName) {
-	  this.charts.leftBannerLen = this.queues.maxDepth * 30 + 100;
-		this.initCharts();
-
-		var queue = this.queues.data[queueName];
-		var idx = 0;
-
-		if (queue.get("name") == "root") {
-			this.renderLeafQueueUsedCapacities(this.getLayout(idx++));
-		}
-		if (queue.get("name") != "root") {
-			this.renderQueueCapacities(queue, this.getLayout(idx++));
-		}
-		if (queue.get("children") && queue.get("children")
-			.length > 0) {
-			this.renderChildrenCapacities(queue, this.getLayout(idx++));
-			this.renderChildrenUsedCapacities(queue, this.getLayout(idx++));
-		}
-	},
-});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/.gitkeep


+ 0 - 5
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/cluster-overview.js

@@ -1,5 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Controller.extend({
-  loading: true,
-});

+ 0 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/yarn-apps.js

@@ -1,4 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Controller.extend({
-});

+ 0 - 6
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/yarn-queue.js

@@ -1,6 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Controller.extend({
-	needReload: true,
-  selectedQueue: undefined,
-});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/.gitkeep


+ 0 - 25
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/index.html

@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>YarnUi</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    {{content-for 'head'}}
-
-    <link rel="stylesheet" href="assets/vendor.css">
-    <link rel="stylesheet" href="assets/yarn-ui.css">
-
-    {{content-for 'head-footer'}}
-  </head>
-  <body>
-    {{content-for 'body'}}
-
-    <script src="assets/vendor.js"></script>
-    <script src="assets/yarn-ui.js"></script>
-
-    {{content-for 'body-footer'}}
-  </body>
-</html>

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/.gitkeep


+ 0 - 13
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/cluster-info.js

@@ -1,13 +0,0 @@
-import DS from 'ember-data';
-
-export default DS.Model.extend({
-  startedOn: DS.attr('string'),
-  state: DS.attr('string'),
-  haState: DS.attr('string'),
-  rmStateStoreName: DS.attr('string'),
-  resourceManagerVersion: DS.attr('string'),
-  resourceManagerBuildVersion: DS.attr('string'),
-  hadoopVersion: DS.attr('string'),
-  hadoopBuildVersion: DS.attr('string'),
-  hadoopVersionBuiltOn: DS.attr('string')
-});

+ 0 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-user.js

@@ -1,8 +0,0 @@
-import DS from 'ember-data';
-
-export default DS.Model.extend({
-  name: DS.attr('string'),
-  queueName: DS.attr('string'),
-  usedMemoryMB: DS.attr('number'),
-  usedVCore: DS.attr('number')
-})

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/.gitkeep


+ 0 - 11
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/cluster-overview.js

@@ -1,11 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model() {
-    return this.store.findAll('ClusterMetric');
-  },
-
-  afterModel() {
-    this.controllerFor("ClusterOverview").set("loading", false);
-  }
-});

+ 0 - 21
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-app-attempt.js

@@ -1,21 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model(param) {
-    return Ember.RSVP.hash({
-      attempt: this.store.findRecord('yarnAppAttempt', param.app_attempt_id),
-      
-      rmContainers: this.store.query('yarnContainer', 
-        {
-          app_attempt_id: param.app_attempt_id,
-          is_rm: true
-        }),
-      
-      tsContainers: this.store.query('yarnContainer', 
-        {
-          app_attempt_id: param.app_attempt_id,
-          is_rm: false
-        }),
-    });
-  }
-});

+ 0 - 10
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-app.js

@@ -1,10 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model(param) {
-    return Ember.RSVP.hash({
-      app: this.store.find('yarnApp', param.app_id),
-      attempts: this.store.query('yarnAppAttempt', { appId: param.app_id})
-    });
-  }
-});

+ 0 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-apps.js

@@ -1,8 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model() {
-    var apps = this.store.findAll('yarnApp');
-    return apps;
-  }
-});

+ 0 - 20
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queue.js

@@ -1,20 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model(param) {
-    return Ember.RSVP.hash({
-      selected : param.queue_name,
-      queues: this.store.findAll('yarnQueue'),
-      selectedQueue : undefined,
-      apps: undefined, // apps of selected queue
-    });
-  },
-
-  afterModel(model) {
-    model.selectedQueue = this.store.peekRecord('yarnQueue', model.selected);
-    model.apps = this.store.findAll('yarnApp');
-    model.apps.forEach(function(o) {
-      console.log(o);
-    })
-  }
-});

+ 0 - 5
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queues/index.js

@@ -1,5 +0,0 @@
-export default Ember.Route.extend({
-  beforeModel() {
-    this.transitionTo('yarnQueues.root');
-  }
-});

+ 0 - 7
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/routes/yarn-queues/queues-selector.js

@@ -1,7 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-  model() {
-    return this.store.findAll('yarnQueue');
-  },
-});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/.gitkeep


+ 0 - 28
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/app-attempt-table.hbs

@@ -1,28 +0,0 @@
-<table id="app-attempt-table" class="table table-striped table-bordered" cellspacing="0" width="100%" height="100%">
-  <tbody>
-    <tr>
-      <td>Application Attempt Id</td>
-      <td>{{attempt.id}}</td>
-    </tr>
-    <tr>
-      <td>Start Time</td>
-      <td>{{attempt.startTime}}</td>
-    </tr>
-    <tr>
-      <td>AM Container Id</td>
-      <td>{{attempt.containerId}}</td>
-    </tr>
-    <tr>
-      <td>AM Node Web UI</td>
-      <td><a href={{attempt.nodeHttpAddress}}>{{attempt.nodeHttpAddress}}</a></td>
-    </tr>
-    <tr>
-      <td>AM Node Id</td>
-      <td>{{attempt.nodeId}}</td>
-    </tr>
-    <tr>
-      <td>Log</td>
-      <td><a href={{attempt.logsLink}}>link</a></td>
-    </tr>
-  </tbody>
-</table>

+ 0 - 18
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/components/queue-navigator.hbs

@@ -1,18 +0,0 @@
-<div class="row">
-  <div class="col-lg-4">
-      <select class="js-example-basic-single" width="100%" id="queue-name-selector">
-        {{item-selector element-id="queue-name-selector" prefix="Queue : " model=model}}
-      </select>
-  </div>
-</div><!-- /.row -->
-
-<!-- queue selector -->
-<div class="row">
-  <div class="col-md-12 container-fluid" id="tree-selector-container">
-     {{tree-selector model=model parentId="tree-selector-container" selected=selected}}
-  </div>
-</div>
-
-<hr>
-
-{{outlet}}

+ 0 - 12
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/yarn-app-attempt.hbs

@@ -1,12 +0,0 @@
-<div class="container-fluid">
-  <div class="row">
-    {{app-attempt-table attempt=model.attempt}}
-  </div>
-
-  <!-- containers table -->
-  <div class="row">
-     {{timeline-view parent-id="containers-timeline-div" my-id="timeline-view" height="400" rmModel=model.rmContainers tsModel=model.tsContainers label="shortAppAttemptId" attemptModel=false}}
-  </div>
-</div>
-
-{{outlet}}

+ 0 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/templates/yarn-apps.hbs

@@ -1,3 +0,0 @@
-{{app-table table-id="apps-table" arr=model}}
-{{simple-table table-id="apps-table" bFilter=true colsOrder="0,desc" colTypes="natural elapsed-time" colTargets="0 7"}}
-{{outlet}}

+ 207 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/pom.xml

@@ -0,0 +1,207 @@
+<!--
+   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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>hadoop-yarn</artifactId>
+    <groupId>org.apache.hadoop</groupId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.hadoop</groupId>
+  <artifactId>hadoop-yarn-ui</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+  <name>Apache Hadoop YARN UI</name>
+  <packaging>${packaging.type}</packaging>
+
+  <properties>
+    <packaging.type>jar</packaging.type>
+    <webappDir>src/main/webapp</webappDir>
+    <node.executable>node</node.executable>
+    <nodeVersion>v0.12.2</nodeVersion>
+    <npmVersion>2.10.0</npmVersion>
+    <skipTests>false</skipTests>
+  </properties>
+
+  <build>
+    <plugins>
+      <!-- Apache RAT -->
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>src/main/webapp/node_modules/**/*</exclude>
+            <exclude>src/main/webapp/bower_components/**/*</exclude>
+            <exclude>src/main/webapp/jsconfig.json</exclude>
+            <exclude>src/main/webapp/bower.json</exclude>
+            <exclude>src/main/webapp/package.json</exclude>
+            <exclude>src/main/webapp/testem.json</exclude>
+            <exclude>src/main/webapp/public/assets/images/**/*</exclude>
+            <exclude>src/main/webapp/public/robots.txt</exclude>
+            <exclude>public/crossdomain.xml</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+
+      <plugin>
+         <artifactId>maven-clean-plugin</artifactId>
+         <version>3.0.0</version>
+         <configuration>
+            <followSymLinks>false</followSymLinks>
+            <filesets>
+               <fileset>
+                  <directory>${basedir}/src/main/webapp/bower_components</directory>
+               </fileset>
+               <fileset>
+                  <directory>${basedir}/src/main/webapp/node_modules</directory>
+               </fileset>
+            </filesets>
+         </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>yarn-ui</id>
+
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
+
+      <properties>
+        <packaging.type>war</packaging.type>
+      </properties>
+
+      <build>
+        <plugins>
+          <!-- Bower install & grunt build-->
+          <plugin>
+            <artifactId>exec-maven-plugin</artifactId>
+            <groupId>org.codehaus.mojo</groupId>
+            <executions>
+              <execution>
+                <phase>generate-sources</phase>
+                <id>npm install</id>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>npm</executable>
+                  <arguments>
+                    <argument>install</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <phase>generate-sources</phase>
+                <id>bower install</id>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>bower</executable>
+                  <arguments>
+                    <argument>--allow-root</argument>
+                    <argument>install</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <phase>generate-sources</phase>
+                <id>bower --allow-root install</id>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>bower</executable>
+                  <arguments>
+                    <argument>--allow-root</argument>
+                    <argument>install</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>ember build</id>
+                <phase>generate-sources</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>ember</executable>
+                  <arguments>
+                    <argument>build</argument>
+                    <argument>-prod</argument>
+                    <argument>--output-path</argument>
+                    <argument>${basedir}/target/dist</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>ember test</id>
+                <phase>generate-resources</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <skip>${skipTests}</skip>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>ember</executable>
+                  <arguments>
+                    <argument>test</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+              <execution>
+                <id>cleanup tmp</id>
+                <phase>generate-sources</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <workingDirectory>${webappDir}</workingDirectory>
+                  <executable>rm</executable>
+                  <arguments>
+                    <argument>-rf</argument>
+                    <argument>tmp</argument>
+                  </arguments>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+
+          <!-- Package into war -->
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-war-plugin</artifactId>
+            <configuration>
+              <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>
+              <warSourceDirectory>${basedir}/target/dist</warSourceDirectory>
+            </configuration>
+          </plugin>
+
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>

+ 0 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/public/robots.txt

@@ -1,3 +0,0 @@
-# http://www.robotstxt.org
-User-agent: *
-Disallow:

+ 25 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/WEB-INF/web.xml

@@ -0,0 +1,25 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<!DOCTYPE web-app PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<web-app>
+  <display-name>YARN UI</display-name>
+</web-app>

+ 38 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/cluster-info.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 DS from 'ember-data';
+import Config from 'yarn-ui/config';
+
+export default DS.JSONAPIAdapter.extend({
+  headers: {
+    Accept: 'application/json'
+  },
+  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
+  namespace: 'ws/v1/cluster', // common const
+  pathForType(modelName) {
+    return ''; // move to some common place, return path by modelname.
+  },
+  ajax(url, method, hash) {
+    hash = hash || {};
+    hash.crossDomain = true;
+    hash.xhrFields = {withCredentials: true};
+    hash.targetServer = "RM";
+    return this._super(url, method, hash); 
+  }
+});

+ 38 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/cluster-metric.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 DS from 'ember-data';
+import Config from 'yarn-ui/config';
+
+export default DS.JSONAPIAdapter.extend({
+  headers: {
+    Accept: 'application/json'
+  },
+  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
+  namespace: 'ws/v1/cluster/metrics', // common const
+  pathForType(modelName) {
+    return ''; // move to some common place, return path by modelname.
+  },
+  ajax(url, method, hash) {
+    hash = hash || {};
+    hash.crossDomain = true;
+    hash.xhrFields = {withCredentials: true};
+    hash.targetServer = "RM";
+    return this._super(url, method, hash); 
+  }
+});

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-app-attempt.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-attempt.js

@@ -1,3 +1,21 @@
+/**
+ * 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';
 import Config from 'yarn-ui/config';

+ 44 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js

@@ -0,0 +1,44 @@
+/**
+ * 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 Config from 'yarn-ui/config';
+
+export default DS.JSONAPIAdapter.extend({
+  headers: {
+    Accept: 'application/json'
+  },
+  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
+  namespace: 'ws/v1/cluster', // common const
+  pathForType(modelName) {
+    return 'apps'; // move to some common place, return path by modelname.
+  },
+  /*
+  urlForQuery(query, modelName) {
+    var url = this._buildURL();
+    return url + '/apps/' + query.appId + "/appattempts";
+  },
+  */
+  ajax(url, method, hash) {
+    hash = hash || {};
+    hash.crossDomain = true;
+    hash.xhrFields = {withCredentials: true};
+    hash.targetServer = "RM";
+    return this._super(url, method, hash); 
+  }
+});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-container-log.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container-log.js


+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-container.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js

@@ -1,3 +1,21 @@
+/**
+ * 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';
 import Config from 'yarn-ui/config';

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-node-app.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-app.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-node-container.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node-container.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-node.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-node.js


+ 38 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-queue.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 DS from 'ember-data';
+import Config from 'yarn-ui/config';
+
+export default DS.JSONAPIAdapter.extend({
+  headers: {
+    Accept: 'application/json'
+  },
+  host: 'http://localhost:1337/' + Config.RM_HOST + ':' + Config.RM_PORT, // configurable
+  namespace: 'ws/v1/cluster', // common const
+  pathForType(modelName) {
+    return 'scheduler'; // move to some common place, return path by modelname.
+  },
+  ajax(url, method, hash) {
+    hash = hash || {};
+    hash.crossDomain = true;
+    hash.xhrFields = {withCredentials: true};
+    hash.targetServer = "RM";
+    return this._super(url, method, hash); 
+  }
+});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/adapters/yarn-rm-node.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-rm-node.js


+ 38 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/app.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 Ember from 'ember';
+import Resolver from 'ember/resolver';
+import loadInitializers from 'ember/load-initializers';
+import config from './config/environment';
+import Sorter from 'yarn-ui/utils/sorter';
+
+var App;
+
+Ember.MODEL_FACTORY_INJECTIONS = true;
+
+App = Ember.Application.extend({
+  modulePrefix: config.modulePrefix,
+  podModulePrefix: config.podModulePrefix,
+  Resolver: Resolver
+});
+
+loadInitializers(App, config.modulePrefix);
+Sorter.initDataTableSorter();
+
+export default App;

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-attempt-table.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.Component.extend({
+});

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/app-table.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.Component.extend({
+});

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/bar-chart.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/bar-chart.js

@@ -1,3 +1,21 @@
+/**
+ * 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 BaseChartComponent from 'yarn-ui/components/base-chart-component';
 

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/base-chart-component.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/base-chart-component.js

@@ -1,3 +1,21 @@
+/**
+ * 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({

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/container-table.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.Component.extend({
+});

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/donut-chart.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/donut-chart.js

@@ -1,3 +1,21 @@
+/**
+ * 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 BaseChartComponent from 'yarn-ui/components/base-chart-component';
 

+ 39 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/item-selector.js

@@ -0,0 +1,39 @@
+/**
+ * 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() {
+    $(".js-example-basic-single").select2(
+      {
+        width: '100%',
+        placeholder: "Select a queue"
+      });
+    var elementId = this.get("element-id");
+    var prefix = this.get("prefix");
+
+    var element = d3.select("#" + elementId);
+
+    if (element) {
+      this.get("model").forEach(function(o) {
+        element.append("option").attr("value", o.get("name")).text(prefix + o.get("name"));
+      });
+    }
+  }
+});

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-configuration-table.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.Component.extend({
+});

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-navigator.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.Component.extend({
+});

+ 290 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/queue-view.js

@@ -0,0 +1,290 @@
+/**
+ * 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 ChartUtilsMixin from 'yarn-ui/mixins/charts-utils';
+
+export default Ember.Component.extend(ChartUtilsMixin, {
+  queues: {
+    data: undefined,
+    foldedQueues: {},
+    selectedQueueCircle: undefined,
+    maxDepth: -1,
+  },
+
+  queueColors: d3.scale.category20().range(),
+
+  renderQueue: function (now, depth, sequence) {
+    if (depth > this.queues.maxDepth) {
+      this.queues.maxDepth = depth;
+    }
+
+    var cx = 20 + depth * 30;
+    var cy = 20 + sequence * 30;
+    var name = now.get("name");
+
+    var g = this.queues.dataGroup.append("g")
+      .attr("id", "queue-" + name + "-g");
+
+    var folded = this.queues.foldedQueues[name];
+    var isParentQueue = false;
+
+    // render its children
+    var children = [];
+    var childrenNames = now.get("children");
+    if (childrenNames) {
+      childrenNames.forEach(function (name) {
+        isParentQueue = true;
+        var child = this.queues.data[name];
+        if (child) {
+          children.push(child);
+        }
+      }.bind(this));
+    }
+    if (folded) {
+      children = [];
+    }
+    var linefunction = d3.svg.line()
+      .interpolate("basis")
+      .x(function (d) {
+        return d.x;
+      })
+      .y(function (d) {
+        return d.y;
+      });
+
+    for (var i = 0; i < children.length; i++) {
+      sequence = sequence + 1;
+      // Get center of children queue
+      var cc = this.renderQueue(children[i],
+        depth + 1, sequence);
+      g.append("path")
+        .attr("class", "queue")
+        .attr("d", linefunction([{
+          x: cx,
+          y: cy
+        }, {
+          x: cc.x - 20,
+          y: cc.y
+        }, cc]));
+    }
+
+    var circle = g.append("circle")
+      .attr("cx", cx)
+      .attr("cy", cy)
+      .attr("class", "queue");
+
+    circle.on('mouseover', function () {
+      circle.style("fill", this.queueColors[1]);
+    }.bind(this));
+    circle.on('mouseout', function () {
+      if (circle != this.queues.selectedQueueCircle) {
+        circle.style("fill", this.queueColors[0]);
+      }
+    }.bind(this));
+    circle.on('click', function () {
+      circle.style("fill", this.queueColors[2]);
+      var pre = this.queues.selectedQueueCircle;
+      this.queues.selectedQueueCircle = circle;
+      if (pre) {
+        pre.on('mouseout')();
+      }
+      this.renderCharts(name);
+    }.bind(this));
+    circle.on('dblclick', function () {
+      if (!isParentQueue) {
+        return;
+      }
+
+      if (this.queues.foldedQueues[name]) {
+        delete this.queues.foldedQueues[name];
+      } else {
+        this.queues.foldedQueues[name] = now;
+      }
+      this.renderQueues();
+    }.bind(this));
+
+    var text = name;
+    if (folded) {
+      text = name + " (+)";
+    }
+
+    // print queue's name
+    g.append("text")
+      .attr("x", cx + 30)
+      .attr("y", cy + 5)
+      .text(text)
+      .attr("class", "queue");
+
+    return {
+      x: cx,
+      y: cy
+    };
+  },
+
+  renderQueues: function () {
+    if (this.queues.dataGroup) {
+      this.queues.dataGroup.remove();
+    }
+    // render queues
+    this.queues.dataGroup = this.canvas.svg.append("g")
+      .attr("id", "queues-g");
+    var rootQueue = undefined;
+
+    if (this.queues.data) {
+      this.renderQueue(this.queues.data['root'], 0, 0);
+
+    }
+  },
+
+  draw: function () {
+    this.queues.data = {};
+    this.get("model")
+      .forEach(function (o) {
+        this.queues.data[o.id] = o;
+      }.bind(this));
+
+    // get w/h of the svg
+    var bbox = d3.select("#main-container")
+      .node()
+      .getBoundingClientRect();
+    this.canvas.w = bbox.width;
+    this.canvas.h = Math.max(Object.keys(this.queues.data)
+        .length * 35, 1500);
+
+    this.canvas.svg = d3.select("#main-container")
+      .append("svg")
+      .attr("width", this.canvas.w)
+      .attr("height", this.canvas.h)
+      .attr("id", "main-svg");
+
+    this.renderBackground();
+
+    this.renderQueues();
+    this.renderCharts("root");
+  },
+
+  didInsertElement: function () {
+    this.draw();
+  },
+
+  /*
+   * data = [{label="xx", value=},{...}]
+   */
+  renderTable: function (data, title, layout) {
+    d3.select("#main-svg")
+      .append('table')
+      .selectAll('tr')
+      .data(data)
+      .enter()
+      .append('tr')
+      .selectAll('td')
+      .data(function (d) {
+        return d;
+      })
+      .enter()
+      .append('td')
+      .text(function (d) {
+        return d;
+      });
+  },
+
+  renderQueueCapacities: function (queue, layout) {
+    // Render bar chart
+    this.renderBarChart(this.charts.g, [{
+      label: "Cap",
+      value: queue.get("capacity")
+    }, {
+      label: "MaxCap",
+      value: queue.get("maxCapacity")
+    }, {
+      label: "UsedCap",
+      value: queue.get("usedCapacity")
+    }], "Queue Capacities", layout, 60);
+  },
+
+  renderChildrenCapacities: function (queue, layout) {
+    var data = [];
+    var children = queue.get("children");
+    if (children) {
+      for (var i = 0; i < children.length; i++) {
+        var child = this.queues.data[children[i]];
+        data.push({
+          label: child.get("name"),
+          value: child.get("capacity")
+        });
+      }
+    }
+
+    this.renderDonutChart(this.charts.g, data, "Children Capacities", layout, true);
+  },
+
+  renderChildrenUsedCapacities: function (queue, layout) {
+    var data = [];
+    var children = queue.get("children");
+    if (children) {
+      for (var i = 0; i < children.length; i++) {
+        var child = this.queues.data[children[i]];
+        data.push({
+          label: child.get("name"),
+          value: child.get("usedCapacity")
+        });
+      }
+    }
+
+    this.renderDonutChart(this.charts.g, data, "Children Used Capacities", layout, true);
+  },
+
+  renderLeafQueueUsedCapacities: function (layout) {
+    var leafQueueUsedCaps = [];
+    for (var queueName in this.queues.data) {
+      var q = this.queues.data[queueName];
+      if ((!q.get("children")) || q.get("children")
+          .length == 0) {
+        // it's a leafqueue
+        leafQueueUsedCaps.push({
+          label: q.get("name"),
+          value: q.get("usedCapacity")
+        });
+      }
+    }
+
+    this.renderDonutChart(this.charts.g, leafQueueUsedCaps, "LeafQueues Used Capacities",
+      layout, true);
+  },
+
+  renderCharts: function (queueName) {
+    this.charts.leftBannerLen = this.queues.maxDepth * 30 + 100;
+    this.initCharts();
+
+    var queue = this.queues.data[queueName];
+    var idx = 0;
+
+    if (queue.get("name") == "root") {
+      this.renderLeafQueueUsedCapacities(this.getLayout(idx++));
+    }
+    if (queue.get("name") != "root") {
+      this.renderQueueCapacities(queue, this.getLayout(idx++));
+    }
+    if (queue.get("children") && queue.get("children")
+        .length > 0) {
+      this.renderChildrenCapacities(queue, this.getLayout(idx++));
+      this.renderChildrenUsedCapacities(queue, this.getLayout(idx++));
+    }
+  },
+});

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/simple-table.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/simple-table.js

@@ -1,3 +1,21 @@
+/**
+ * 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({

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/timeline-view.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/timeline-view.js

@@ -1,3 +1,21 @@
+/**
+ * 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';
 

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/components/tree-selector.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/tree-selector.js

@@ -1,3 +1,21 @@
+/**
+ * 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({

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/config.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/config.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/constants.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/constants.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/controllers/application.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js


+ 23 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js

@@ -0,0 +1,23 @@
+/**
+ * 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({
+  loading: true,
+});

+ 22 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.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.Controller.extend({
+});

+ 24 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-queue.js

@@ -0,0 +1,24 @@
+/**
+ * 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({
+  needReload: true,
+  selectedQueue: undefined,
+});

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/divide.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/divide.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/log-files-comma.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/log-files-comma.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/node-link.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/node-link.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/helpers/node-menu.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/node-menu.js


+ 43 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/index.html

@@ -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.
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>YarnUi</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    {{content-for 'head'}}
+
+    <link rel="stylesheet" href="assets/vendor.css">
+    <link rel="stylesheet" href="assets/yarn-ui.css">
+
+    {{content-for 'head-footer'}}
+  </head>
+  <body>
+    {{content-for 'body'}}
+
+    <script src="assets/vendor.js"></script>
+    <script src="assets/yarn-ui.js"></script>
+
+    {{content-for 'body-footer'}}
+  </body>
+</html>

+ 31 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/cluster-info.js

@@ -0,0 +1,31 @@
+/**
+ * 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({
+  startedOn: DS.attr('string'),
+  state: DS.attr('string'),
+  haState: DS.attr('string'),
+  rmStateStoreName: DS.attr('string'),
+  resourceManagerVersion: DS.attr('string'),
+  resourceManagerBuildVersion: DS.attr('string'),
+  hadoopVersion: DS.attr('string'),
+  hadoopBuildVersion: DS.attr('string'),
+  hadoopVersionBuiltOn: DS.attr('string')
+});

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/cluster-metric.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/cluster-metric.js

@@ -1,3 +1,21 @@
+/**
+ * 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({

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-app-attempt.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js

@@ -1,3 +1,21 @@
+/**
+ * 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';
 

+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-app.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js

@@ -1,3 +1,21 @@
+/**
+ * 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 Converter from 'yarn-ui/utils/converter';
 import DS from 'ember-data';
 

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-container-log.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container-log.js


+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-container.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-container.js

@@ -1,3 +1,21 @@
+/**
+ * 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';
 

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-node-app.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node-app.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-node-container.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node-container.js


+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-node.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-node.js


+ 18 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-queue.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-queue.js

@@ -1,3 +1,21 @@
+/**
+ * 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({

+ 0 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/app/models/yarn-rm-node.js → hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-rm-node.js


+ 26 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-user.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({
+  name: DS.attr('string'),
+  queueName: DS.attr('string'),
+  usedMemoryMB: DS.attr('number'),
+  usedVCore: DS.attr('number')
+})

Някои файлове не бяха показани, защото твърде много файлове са промени