You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2014/08/13 23:10:28 UTC
[2/2] git commit: AMBARI-6840. Jobs View: Update Top Nav rendering
for jobs (srimanth)
AMBARI-6840. Jobs View: Update Top Nav rendering for jobs (srimanth)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/71d91a7c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/71d91a7c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/71d91a7c
Branch: refs/heads/trunk
Commit: 71d91a7c50c2df8880b0ac3bcae32c579c31d361
Parents: 952c364
Author: Srimanth Gunturi <sg...@hortonworks.com>
Authored: Tue Aug 12 18:14:41 2014 -0700
Committer: Srimanth Gunturi <sg...@hortonworks.com>
Committed: Wed Aug 13 14:03:32 2014 -0700
----------------------------------------------------------------------
ambari-web/app/config.js | 1 -
ambari-web/app/controllers.js | 2 -
.../controllers/main/admin/access_controller.js | 6 +-
.../main/jobs/hive_job_details_controller.js | 87 --
.../app/controllers/main/jobs_controller.js | 497 ----------
ambari-web/app/initialize.js | 1 -
ambari-web/app/mappers.js | 2 -
ambari-web/app/mappers/jobs/hive_job_mapper.js | 216 -----
ambari-web/app/mappers/jobs/hive_jobs_mapper.js | 100 --
ambari-web/app/models.js | 3 -
ambari-web/app/models/jobs/hive_job.js | 29 -
ambari-web/app/models/jobs/job.js | 80 --
ambari-web/app/models/jobs/tez_dag.js | 189 ----
ambari-web/app/routes/main.js | 41 -
ambari-web/app/templates/main/admin/access.hbs | 4 -
ambari-web/app/templates/main/jobs.hbs | 101 --
.../templates/main/jobs/custom_dates_popup.hbs | 39 -
.../templates/main/jobs/hive_job_details.hbs | 215 -----
.../main/jobs/hive_job_details_tez_dag.hbs | 44 -
.../app/templates/main/jobs/hover_op_table.hbs | 39 -
.../app/templates/main/jobs/user_filter.hbs | 34 -
ambari-web/app/utils/jobs.js | 263 ------
ambari-web/app/views.js | 4 -
.../main/jobs/hive_job_details_tez_dag_view.js | 946 -------------------
.../views/main/jobs/hive_job_details_view.js | 351 -------
.../views/main/jobs/select_custom_date_view.js | 37 -
ambari-web/app/views/main/jobs_view.js | 336 -------
ambari-web/app/views/main/menu.js | 5 +-
28 files changed, 4 insertions(+), 3668 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/config.js b/ambari-web/app/config.js
index a4c71d4..f4e882a 100644
--- a/ambari-web/app/config.js
+++ b/ambari-web/app/config.js
@@ -75,7 +75,6 @@ App.supports = {
deleteHost: true,
autoRollbackHA: false,
appTimelineServer: true,
- jobs: true,
ubuntu: true,
views: true,
flume: true,
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/controllers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 9e915a6..3601cd2 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -117,8 +117,6 @@ require('controllers/main/charts/heatmap_metrics/heatmap_metric_hbase_regions');
require('controllers/main/charts/heatmap_metrics/heatmap_metric_hbase_memstoresize');
require('controllers/main/charts/heatmap');
require('controllers/main/apps_controller');
-require('controllers/main/jobs_controller');
-require('controllers/main/jobs/hive_job_details_controller');
require('controllers/main/apps/item_controller');
require('controllers/main/mirroring_controller');
require('controllers/main/mirroring/edit_dataset_controller');
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/controllers/main/admin/access_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/access_controller.js b/ambari-web/app/controllers/main/admin/access_controller.js
index aaab364..82bc9f3 100644
--- a/ambari-web/app/controllers/main/admin/access_controller.js
+++ b/ambari-web/app/controllers/main/admin/access_controller.js
@@ -25,7 +25,7 @@ App.MainAdminAccessController = Em.Controller.extend(App.UserPref, {
* Show jobs by default
* @type {bool}
*/
- showJobs: true,
+ showJobs: false,
/**
* User pref key
@@ -57,9 +57,9 @@ App.MainAdminAccessController = Em.Controller.extend(App.UserPref, {
getUserPrefErrorCallback: function () {
if (App.get('isAdmin')) {
- this.postUserPref(this.get('persistKey'), true);
+ this.postUserPref(this.get('persistKey'), false);
}
- this.set('showJobs', true);
+ this.set('showJobs', false);
return true;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/controllers/main/jobs/hive_job_details_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/jobs/hive_job_details_controller.js b/ambari-web/app/controllers/main/jobs/hive_job_details_controller.js
deleted file mode 100644
index 1e2df7e..0000000
--- a/ambari-web/app/controllers/main/jobs/hive_job_details_controller.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-var jobsUtils = require('utils/jobs');
-
-App.MainHiveJobDetailsController = Em.Controller.extend({
- name : 'mainHiveJobDetailsController',
-
- content : null,
- loaded : false,
- loadTimeout: null,
- job: null,
- sortingColumn: null,
-
- loadJobDetails : function() {
- var self = this;
- var timeout = this.get('loadTimeout');
- var yarnService = App.YARNService.find().objectAt(0);
- if (yarnService != null) {
- var content = this.get('content');
- if (content != null) {
- jobsUtils.refreshJobDetails(content, function() {
- self.set('content', self.get('job'));
- self.set('loaded', true);
- }, function(errorId) {
- switch (errorId) {
- case 'job.dag.noId':
- App.showAlertPopup(Em.I18n.t('jobs.hive.tez.dag.error.noDagId.title'), Em.I18n.t('jobs.hive.tez.dag.error.noDagId.message'));
- break;
- case 'job.dag.noname':
- App.showAlertPopup(Em.I18n.t('jobs.hive.tez.dag.error.noDag.title'), Em.I18n.t('jobs.hive.tez.dag.error.noDag.message'));
- break;
- case 'job.dag.id.noDag':
- App.showAlertPopup(Em.I18n.t('jobs.hive.tez.dag.error.noDagForId.title'), Em.I18n.t('jobs.hive.tez.dag.error.noDagForId.message'));
- break;
- case 'job.dag.id.loaderror':
- case 'job.dag.name.loaderror':
- break;
- default:
- break;
- }
- self.routeToJobs();
- });
- }
- } else {
- clearTimeout(timeout);
- timeout = setTimeout(function() {
- self.loadJobDetails();
- }, 300);
- }
- },
-
- /**
- * path to page visited before
- */
- referer : '',
- /**
- * open dashboard page
- */
- routeHome : function() {
- App.router.transitionTo('main.dashboard.index');
- },
-
- /**
- * open jobs page
- *
- * @param event
- */
- routeToJobs : function() {
- App.router.transitionTo('main.jobs.index');
- }
-});
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/controllers/main/jobs_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/jobs_controller.js b/ambari-web/app/controllers/main/jobs_controller.js
deleted file mode 100644
index caeac05..0000000
--- a/ambari-web/app/controllers/main/jobs_controller.js
+++ /dev/null
@@ -1,497 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainJobsController = Em.Controller.extend({
-/*
- * https://github.com/emberjs/ember.js/issues/1221 prevents this controller
- * from being an Ember.ArrayController. Doing so will keep the UI flashing
- * whenever any of the 'sortProperties' or 'sortAscending' properties are set.
- *
- * To bypass this issue this controller will be a regular controller. Also,
- * for memory-leak issues and sorting purposes, we are decoupling the backend
- * model and the UI model. There will be simple Ember POJOs for the UI which
- * will be periodically updated from backend Jobs model.
- */
-
- name:'mainJobsController',
-
- /**
- * Unsorted ArrayProxy
- */
- content: App.HiveJob.find(),
-
- /**
- * Sorted ArrayProxy
- */
- sortedContent: [],
-
- contentAndSortObserver : function() {
- Ember.run.once(this, 'contentAndSortUpdater');
- if(App.HiveJob.find().findProperty('id', this.get('lastJobID'))) {
- this.set('hasNewJobs', false);
- }
- }.observes('content.length', 'content.@each.id', 'content.@each.startTime', 'content.@each.endTime', 'sortProperties', 'sortAscending'),
-
- contentAndSortUpdater: function() {
- this.set('sortingDone', false);
- var content = this.get('content');
- var sortedContent = content.toArray();
- var sortProperty = this.get('sortProperty');
- var sortAscending = this.get('sortAscending');
- sortedContent.sort(function(r1, r2) {
- var r1id = r1.get(sortProperty);
- var r2id = r2.get(sortProperty);
- if (r1id < r2id)
- return sortAscending ? -1 : 1;
- if (r1id > r2id)
- return sortAscending ? 1 : -1;
- return 0;
- });
- var sortedArray = this.get('sortedContent');
- var count = 0;
- sortedContent.forEach(function(sortedJob){
- if(sortedArray.length <= count) {
- sortedArray.pushObject(Ember.Object.create());
- }
- sortedArray[count].set('failed', sortedJob.get('failed'));
- sortedArray[count].set('hasTezDag', sortedJob.get('hasTezDag'));
- sortedArray[count].set('queryText', sortedJob.get('queryText'));
- sortedArray[count].set('name', sortedJob.get('name'));
- sortedArray[count].set('user', sortedJob.get('user'));
- sortedArray[count].set('id', sortedJob.get('id'));
- sortedArray[count].set('startTimeDisplay', sortedJob.get('startTimeDisplay'));
- sortedArray[count].set('endTimeDisplay', sortedJob.get('endTimeDisplay'));
- sortedArray[count].set('durationDisplay', sortedJob.get('durationDisplay'));
- count ++;
- });
- if(sortedArray.length > count) {
- for(var c = sortedArray.length-1; c >= count; c--){
- sortedArray.removeObject(sortedArray[c]);
- }
- }
- sortedContent.length = 0;
- this.set('sortingDone', true);
- },
-
- navIDs: {
- backIDs: [],
- nextID: ''
- },
- lastJobID: '',
- hasNewJobs: false,
- loaded : false,
- loading : false,
- resetPagination: false,
- loadJobsTimeout: null,
- loadTimeout: null,
- jobsUpdateInterval: 6000,
- jobsUpdate: null,
- sortingColumn: null,
- sortProperty: 'id',
- sortAscending: true,
- sortingDone: true,
- jobsMessage: Em.I18n.t('jobs.loadingTasks'),
-
- sortingColumnObserver: function () {
- if(this.get('sortingColumn')){
- this.set('sortProperty', this.get('sortingColumn').get('name'));
- this.set('sortAscending', this.get('sortingColumn').get('status') == "sorting_desc" ? false : true );
- }
- }.observes('sortingColumn.name','sortingColumn.status'),
-
- updateJobsByClick: function () {
- this.set('navIDs.backIDs', []);
- this.set('navIDs.nextID', '');
- this.get('filterObject').set('nextFromId', '');
- this.get('filterObject').set('backFromId', '');
- this.get('filterObject').set('fromTs', '');
- this.set('hasNewJobs', false);
- this.set('resetPagination', true);
- this.loadJobs();
- },
-
- updateJobs: function (controllerName, funcName) {
- clearInterval(this.get('jobsUpdate'));
- var self = this;
- var interval = setInterval(function () {
- App.router.get(controllerName)[funcName]();
- }, this.jobsUpdateInterval);
- this.set('jobsUpdate', interval);
- },
-
- totalOfJobs: 0,
- setTotalOfJobs: function () {
- if(this.get('totalOfJobs') < this.get('content.length')){
- this.set('totalOfJobs', this.get('content.length'));
- }
- }.observes('content.length'),
-
- filterObject: Ember.Object.create({
- id: "",
- isIdFilterApplied: false,
- jobsLimit: 10,
- user: "",
- windowStart: "",
- windowEnd: "",
- nextFromId: "",
- backFromId: "",
- fromTs: "",
- isAnyFilterApplied: false,
-
- onApplyIdFilter: function () {
- if(this.get('id') == ""){
- this.set('isIdFilterApplied', false);
- }else{
- this.set('isIdFilterApplied', true);
- }
- }.observes('id'),
-
- /**
- * Direct binding to startTime filter field
- */
- startTime: "",
- onStartTimeChange:function(){
- var time = "";
- var curTime = new Date().getTime();
- switch (this.get('startTime')) {
- case 'Past 1 hour':
- time = curTime - 3600000;
- break;
- case 'Past 1 Day':
- time = curTime - 86400000;
- break;
- case 'Past 2 Days':
- time = curTime - 172800000;
- break;
- case 'Past 7 Days':
- time = curTime - 604800000;
- break;
- case 'Past 14 Days':
- time = curTime - 1209600000;
- break;
- case 'Past 30 Days':
- time = curTime - 2592000000;
- break;
- case 'Custom':
- this.showCustomDatePopup();
- break;
- case 'Any':
- time = "";
- break;
- }
- if(this.get('startTime') != "Custom"){
- this.set("windowStart", time);
- this.set("windowEnd", "");
- }
- }.observes("startTime"),
-
- // Fields values from Select Custom Dates form
- customDateFormFields: Ember.Object.create({
- startDate: null,
- hoursForStart: null,
- minutesForStart: null,
- middayPeriodForStart: null,
- endDate: null,
- hoursForEnd: null,
- minutesForEnd: null,
- middayPeriodForEnd: null
- }),
-
- errors: Ember.Object.create({
- isStartDateError: false,
- isEndDateError: false
- }),
-
- errorMessages: Ember.Object.create({
- startDate: '',
- endDate: ''
- }),
-
- showCustomDatePopup: function () {
- var self = this;
- var windowEnd = "";
- var windowStart = "";
- App.ModalPopup.show({
- header: Em.I18n.t('jobs.table.custom.date.header'),
- onPrimary: function () {
- self.validate();
- if(self.get('errors.isStartDateError') || self.get('errors.isEndDateError')){
- return false;
- }
-
- var windowStart = self.createCustomStartDate();
- var windowEnd = self.createCustomEndDate();
-
- self.set("windowStart", windowStart.getTime());
- self.set("windowEnd", windowEnd.getTime());
- this.hide();
- },
- onSecondary: function () {
- self.set('startTime','Any');
- this.hide();
- },
- bodyClass: App.JobsCustomDatesSelectView.extend({
- controller: self
- })
- });
- },
-
- createCustomStartDate : function () {
- var startDate = this.get('customDateFormFields.startDate');
- var hoursForStart = this.get('customDateFormFields.hoursForStart');
- var minutesForStart = this.get('customDateFormFields.minutesForStart');
- var middayPeriodForStart = this.get('customDateFormFields.middayPeriodForStart');
- if (startDate && hoursForStart && minutesForStart && middayPeriodForStart) {
- return new Date(startDate + ' ' + hoursForStart + ':' + minutesForStart + ' ' + middayPeriodForStart);
- }
- return null;
- },
-
- createCustomEndDate : function () {
- var endDate = this.get('customDateFormFields.endDate');
- var hoursForEnd = this.get('customDateFormFields.hoursForEnd');
- var minutesForEnd = this.get('customDateFormFields.minutesForEnd');
- var middayPeriodForEnd = this.get('customDateFormFields.middayPeriodForEnd');
- if (endDate && hoursForEnd && minutesForEnd && middayPeriodForEnd) {
- return new Date(endDate + ' ' + hoursForEnd + ':' + minutesForEnd + ' ' + middayPeriodForEnd);
- }
- return null;
- },
-
- clearErrors: function () {
- var errorMessages = this.get('errorMessages');
- Em.keys(errorMessages).forEach(function (key) {
- errorMessages.set(key, '');
- }, this);
- var errors = this.get('errors');
- Em.keys(errors).forEach(function (key) {
- errors.set(key, false);
- }, this);
- },
-
- // Validation for every field in customDateFormFields
- validate: function () {
- var formFields = this.get('customDateFormFields');
- var errors = this.get('errors');
- var errorMessages = this.get('errorMessages');
- this.clearErrors();
- // Check if feild is empty
- Em.keys(errorMessages).forEach(function (key) {
- if (!formFields.get(key)) {
- errors.set('is' + key.capitalize() + 'Error', true);
- errorMessages.set(key, Em.I18n.t('jobs.customDateFilter.error.required'));
- }
- }, this);
- // Check that endDate is after startDate
- var startDate = this.createCustomStartDate();
- var endDate = this.createCustomEndDate();
- if (startDate && endDate && (startDate > endDate)) {
- errors.set('isEndDateError', true);
- errorMessages.set('endDate', Em.I18n.t('jobs.customDateFilter.error.date.order'));
- }
- },
-
- /**
- * Create link for server request
- * @return {String}
- */
- createJobsFiltersLink: function() {
- var link = "?fields=events,primaryfilters,otherinfo&secondaryFilter=tez:true";
- var numberOfAppliedFilters = 0;
-
- if(this.get("id") !== "") {
- link = "/" + this.get("id") + link;
- numberOfAppliedFilters++;
- }
-
- link += "&limit=" + (parseInt(this.get("jobsLimit")) + 1);
-
- if(this.get("user") !== ""){
- link += "&primaryFilter=user:" + this.get("user");
- numberOfAppliedFilters++;
- }
- if(this.get("backFromId") != ""){
- link += "&fromId=" + this.get("backFromId");
- }
- if(this.get("nextFromId") != ""){
- link += "&fromId=" + this.get("nextFromId");
- }
- if(this.get("fromTs") != ""){
- link += "&fromTs=" + this.get("fromTs");
- }
- if(this.get("startTime") !== "" && this.get("startTime") !== "Any"){
- link += this.get("windowStart") !== "" ? ("&windowStart=" + this.get("windowStart")) : "";
- link += this.get("windowEnd") !== "" ? ("&windowEnd=" + this.get("windowEnd")) : "";
- numberOfAppliedFilters++;
- }
-
- if(numberOfAppliedFilters > 0){
- this.set('isAnyFilterApplied', true);
- }else{
- this.set('isAnyFilterApplied', false);
- }
-
- return link;
- }
- }),
-
- columnsName: Ember.ArrayController.create({
- content: [
- { name: Em.I18n.t('jobs.column.id'), index: 0 },
- { name: Em.I18n.t('jobs.column.user'), index: 1 },
- { name: Em.I18n.t('jobs.column.start.time'), index: 2 },
- { name: Em.I18n.t('jobs.column.end.time'), index: 3 },
- { name: Em.I18n.t('jobs.column.duration'), index: 4 }
- ],
- columnsCount: function () {
- return this.get('content.length') + 1;
- }.property('content.length')
- }),
-
- lastIDSuccessCallback: function(data, jqXHR, textStatus) {
- if(!data.entities[0]){
- return;
- }
- var lastReceivedID = data.entities[0].entity;
- if(this.get('lastJobID') == '') {
- this.set('lastJobID', lastReceivedID);
- if (this.get('loaded') && App.HiveJob.find().get('length') < 1) {
- this.set('hasNewJobs', true);
- }
- } else if (this.get('lastJobID') !== lastReceivedID) {
- this.set('lastJobID', lastReceivedID);
- if(!App.HiveJob.find().findProperty('id', lastReceivedID)) {
- this.set('hasNewJobs', true);
- }
- }
- },
-
- lastIDErrorCallback: function(data, jqXHR, textStatus) {
- console.debug(jqXHR);
- },
-
- checkDataLoadingError: function (jqXHR){
- var atsComponent = App.HostComponent.find().findProperty('componentName','APP_TIMELINE_SERVER');
- if(atsComponent && atsComponent.get('workStatus') != "STARTED") {
- this.set('jobsMessage', Em.I18n.t('jobs.error.ats.down'));
- }else if (jqXHR && jqXHR.status == 400) {
- this.set('jobsMessage', Em.I18n.t('jobs.error.400'));
- }else if ((!jqXHR && this.get('loaded') && !this.get('loading')) || (jqXHR && jqXHR.status == 500)) {
- this.set('jobsMessage', Em.I18n.t('jobs.nothingToShow'));
- }else{
- this.set('jobsMessage', Em.I18n.t('jobs.loadingTasks'));
- }
- },
-
- loadJobs : function() {
- var self = this,
- timeout = this.get('loadTimeout'),
- yarnService = App.YARNService.find().objectAt(0),
- atsComponent = App.HostComponent.find().findProperty('componentName','APP_TIMELINE_SERVER'),
- atsInValidState = !!atsComponent && atsComponent.get('workStatus') === "STARTED",
- retryLoad = this.checkDataLoadingError();
- if (yarnService != null && atsInValidState) {
- this.set('loading', true);
- var historyServerHostName = yarnService.get('appTimelineServer.hostName'),
- filtersLink = this.get('filterObject').createJobsFiltersLink(),
- hiveQueriesUrl = App.get('testMode') ? "/data/jobs/hive-queries.json" : "/proxy?url=http://" + historyServerHostName
- + ":" + yarnService.get('ahsWebPort') + "/ws/v1/timeline/HIVE_QUERY_ID" + filtersLink;
- App.ajax.send({
- name: 'jobs.lastID',
- sender: self,
- data: {
- historyServerHostName: historyServerHostName,
- ahsWebPort: yarnService.get('ahsWebPort')
- },
- success: 'lastIDSuccessCallback',
- error : 'lastIDErrorCallback'
- });
- App.HttpClient.get(hiveQueriesUrl, App.hiveJobsMapper, {
- complete : function(data, jqXHR, textStatus) {
- self.set('loading', false);
- if(self.get('loaded') == false || self.get('resetPagination') == true){
- self.initializePagination();
- self.set('resetPagination', false);
- }
- self.set('loaded', true);
- }
- }, function (jqXHR, textStatus) {
- App.hiveJobsMapper.map({entities : []});
- self.checkDataLoadingError(jqXHR);
- });
- }else{
- this.checkDataLoadingError();
- clearTimeout(timeout);
- timeout = setTimeout(function(){
- self.loadJobs();
- }, 300);
- }
- },
-
- initializePagination: function() {
- var back_link_IDs = this.get('navIDs.backIDs.[]');
- if(!back_link_IDs.contains(this.get('lastJobID'))) {
- back_link_IDs.push(this.get('lastJobID'));
- }
- this.set('filterObject.backFromId', this.get('lastJobID'));
- this.get('filterObject').set('fromTs', App.dateTime());
- },
-
- navigateNext: function() {
- this.set("filterObject.backFromId", '');
- var back_link_IDs = this.get('navIDs.backIDs.[]');
- var lastBackID = this.get('navIDs.nextID');
- if(!back_link_IDs.contains(lastBackID)) {
- back_link_IDs.push(lastBackID);
- }
- this.set('navIDs.backIDs.[]', back_link_IDs);
- this.set("filterObject.nextFromId", this.get('navIDs.nextID'));
- this.set('navIDs.nextID', '');
- this.loadJobs();
- },
-
- navigateBack: function() {
- this.set("filterObject.nextFromId", '');
- var back_link_IDs = this.get('navIDs.backIDs.[]');
- back_link_IDs.pop();
- var lastBackID = back_link_IDs[back_link_IDs.length - 1]
- this.set('navIDs.backIDs.[]', back_link_IDs);
- this.set("filterObject.backFromId", lastBackID);
- this.loadJobs();
- },
-
- refreshLoadedJobs : function() {
- var timeout = this.get('loadJobsTimeout');
- var self = this;
-
- clearTimeout(timeout);
- timeout = setTimeout(function(){
- self.loadJobs();
- }, 300);
-
- this.set('loadJobsTimeout', timeout);
- }.observes(
- 'filterObject.id',
- 'filterObject.jobsLimit',
- 'filterObject.user',
- 'filterObject.windowStart',
- 'filterObject.windowEnd'
- )
-})
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/initialize.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/initialize.js b/ambari-web/app/initialize.js
index 14473eb..a53e6af 100644
--- a/ambari-web/app/initialize.js
+++ b/ambari-web/app/initialize.js
@@ -40,7 +40,6 @@ require('utils/action_sequence');
require('mappers');
-require('mappers/jobs/hive_job_mapper');
require('utils/http_client');
require('utils/host_progress_popup');
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/mappers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers.js b/ambari-web/app/mappers.js
index 3435ac1..80c7255 100644
--- a/ambari-web/app/mappers.js
+++ b/ambari-web/app/mappers.js
@@ -21,7 +21,6 @@ require('mappers/server_data_mapper');
require('mappers/stack_service_mapper');
require('mappers/hosts_mapper');
require('mappers/cluster_mapper');
-require('mappers/jobs_mapper');
require('mappers/runs_mapper');
require('mappers/racks_mapper');
require('mappers/users_mapper');
@@ -31,5 +30,4 @@ require('mappers/target_cluster_mapper');
require('mappers/dataset_mapper');
require('mappers/component_config_mapper');
require('mappers/components_state_mapper');
-require('mappers/jobs/hive_jobs_mapper');
require('mappers/service_config_version_mapper');
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/mappers/jobs/hive_job_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/jobs/hive_job_mapper.js b/ambari-web/app/mappers/jobs/hive_job_mapper.js
deleted file mode 100644
index 58d3e90..0000000
--- a/ambari-web/app/mappers/jobs/hive_job_mapper.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-
-/**
- * Maps a Hive job response from server into an existing Hive Job.
- *
- * This will only update an existing Hive Job and not create a new one. It will
- * populate all fields (stages, Tez DAG, etc.) except runtime information like
- * <ul>
- * <li>tezDag.id
- * <li>tezDag.vertices.state
- * <li>tezDag.vertices.startTime
- * <li>tezDag.vertices.endTime
- * <li>tezDag.vertices.tasksCount
- * <li>tezDag.vertices.file*
- * <li>tezDag.vertices.hdfs*
- * <li>tezDag.vertices.recordReadCount
- * <li>tezDag.vertices.recordWriteCount
- * </ul>
- */
-App.hiveJobMapper = App.QuickDataMapper.create({
- model : App.HiveJob,
- map : function(json) {
- var model = this.get('model');
- if (!model) {
- return;
- }
- var hiveJob = {};
- if (json && json.entity) {
- var hiveJob = {};
- hiveJob.id = json.entity;
- hiveJob.name = hiveJob.id;
- hiveJob.startTime = json.starttime;
- if (typeof(json.endtime) == "undefined") {
- var i = 0;
- while (typeof(hiveJob.endTime) == "undefined" && json.events && json.events[i]) {
- if (json.events[i].eventtype == 'QUERY_COMPLETED') {
- hiveJob.endTime = json.events[i].timestamp;
- };
- i++;
- };
- } else {
- hiveJob.endTime = json.endtime;
- };
- json.otherinfo.query = $.parseJSON(json.otherinfo.query);
- if (json.otherinfo.query && json.otherinfo.query.queryText) {
- hiveJob.query_text = json.otherinfo.query.queryText;
- }
- hiveJob.stages = [];
- var stagePlans = json.otherinfo.query.queryPlan["STAGE PLANS"];
- for ( var stage in stagePlans) {
- var stageValue = stagePlans[stage];
- var stageItem = {};
- stageItem.id = stage;
- stageItem.description = '. ';
- for (var item in stageValue) {
- stageItem.description += item;
- };
- hiveJob.stages.push(stageItem);
- if (stageValue.Tez != null && hiveJob.tezDag == null) {
- var dagName = stageValue.Tez['DagName:'];
- // Vertices
- var vertices = [];
- var vertexIds = [];
- var vertexIdMap = {};
- for ( var vertexName in stageValue.Tez["Vertices:"]) {
- var vertex = stageValue.Tez["Vertices:"][vertexName];
- var vertexObj = {
- id : dagName + "/" + vertexName,
- name : vertexName,
- incoming_edges : [],
- outgoing_edges : []
- };
- vertexIds.push(vertexObj.id);
- var operatorExtractor = function(obj) {
- var ops = [];
- if ($.isArray(obj)) {
- obj.forEach(function(o) {
- ops = ops.concat(operatorExtractor(o));
- });
- } else {
- for ( var key in obj) {
- ops.push(key);
- if (obj[key].children != null) {
- ops = ops.concat(operatorExtractor(obj[key].children));
- }
- }
- }
- return ops;
- }
- if (vertex["Map Operator Tree:"] != null) {
- vertexObj.type = App.TezDagVertexType.MAP;
- vertexObj.operations = operatorExtractor(vertex["Map Operator Tree:"]);
- vertexObj.operation_plan = JSON.stringify(vertex["Map Operator Tree:"], undefined, " ");
- } else if (vertex["Reduce Operator Tree:"] != null) {
- vertexObj.type = App.TezDagVertexType.REDUCE;
- vertexObj.operations = operatorExtractor(vertex["Reduce Operator Tree:"]);
- vertexObj.operation_plan = JSON.stringify(vertex["Reduce Operator Tree:"], undefined, " ");
- } else if (vertex["Vertex:"] != null && vertexName==vertex['Vertex:']) {
- vertexObj.type = App.TezDagVertexType.UNION;
- }
- vertexIdMap[vertexObj.id] = vertexObj;
- vertices.push(vertexObj);
- }
- // Edges
- var edges = [];
- var edgeIds = [];
- for ( var childVertex in stageValue.Tez["Edges:"]) {
- var childVertices = stageValue.Tez["Edges:"][childVertex];
- if (!$.isArray(childVertices)) {
- // Single edge given as object instead of array
- childVertices = [ childVertices ];
- }
- childVertices.forEach(function(e) {
- var parentVertex = e.parent;
- if (e.type == 'CONTAINS') {
- var parentVertexNode = vertexIdMap[dagName + "/" + parentVertex];
- if (parentVertexNode != null && parentVertexNode.type == App.TezDagVertexType.UNION) {
- // We flip the edges for Union vertices
- var tmp = childVertex;
- childVertex = parentVertex;
- parentVertex = tmp;
- }
- }
- var edgeObj = {
- id : dagName + "/" + parentVertex + "-" + childVertex,
- from_vertex_id : dagName + "/" + parentVertex,
- to_vertex_id : dagName + "/" + childVertex
- };
- vertexIdMap[edgeObj.from_vertex_id].outgoing_edges.push(edgeObj.id);
- vertexIdMap[edgeObj.to_vertex_id].incoming_edges.push(edgeObj.id);
- edgeIds.push(edgeObj.id);
- switch (e.type) {
- case "BROADCAST_EDGE":
- edgeObj.edge_type = App.TezDagEdgeType.BROADCAST;
- break;
- case "SIMPLE_EDGE":
- edgeObj.edge_type = App.TezDagEdgeType.SCATTER_GATHER;
- break;
- case "CONTAINS":
- edgeObj.edge_type = App.TezDagEdgeType.CONTAINS;
- break;
- default:
- break;
- }
- edges.push(edgeObj);
- });
- }
- // Create records
- var tezDag = {
- id : dagName,
- name : dagName,
- stage : stage,
- vertices : vertexIds,
- edges : edgeIds
- }
- // Once the DAG is loaded, we do not need to
- // reload as the structure does not change. Reloading
- // here causes missing data (got from other calls)
- // to propagate into UI - causing flashing.
- var newVertices = [];
- var newEdges = [];
- vertices.forEach(function(v) {
- var vertexRecord = App.TezDagVertex.find(v.id);
- if (!vertexRecord.get('isLoaded')) {
- newVertices.push(v);
- }
- });
- edges.forEach(function(e) {
- var edgeRecord = App.TezDagEdge.find(e.id);
- if (!edgeRecord.get('isLoaded')) {
- newEdges.push(e);
- }
- });
- App.store.loadMany(App.TezDagVertex, newVertices);
- App.store.loadMany(App.TezDagEdge, newEdges);
- var dagRecord = App.TezDag.find(tezDag.id);
- if (!dagRecord.get('isLoaded')) {
- App.store.load(App.TezDag, tezDag);
- }
- hiveJob.tezDag = tezDag.id;
- }
- }
- if(App.HiveJob.find().get('content').length == 0){
- App.store.load(model, hiveJob);
- }
- var hiveJobRecord = App.HiveJob.find(hiveJob.id);
- if (hiveJobRecord != null) {
- hiveJobRecord.set('stages', hiveJob.stages.sortProperty('id'));
- hiveJobRecord.set('startTime', hiveJob.startTime);
- hiveJobRecord.set('endTime', hiveJob.endTime);
- if (hiveJob.tezDag != null) {
- // Some hive queries dont use Tez
- hiveJobRecord.set('tezDag', App.TezDag.find(hiveJob.tezDag));
- }
- }
- }
- },
- config : {}
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/mappers/jobs/hive_jobs_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/jobs/hive_jobs_mapper.js b/ambari-web/app/mappers/jobs/hive_jobs_mapper.js
deleted file mode 100644
index 7377b8d..0000000
--- a/ambari-web/app/mappers/jobs/hive_jobs_mapper.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-
-App.hiveJobsMapper = App.QuickDataMapper.create({
- model : App.HiveJob,
- map : function(json) {
- var model = this.get('model');
- if (!model) {
- return;
- }
- var hiveJobs = []
- if (json) {
- if(!json.entities) {
- json.entities = [];
- if(json.entity){
- json.entities = [json];
- }
- }
- var currentEntityMap = {};
- json.entities.forEach(function(entity) {
- currentEntityMap[entity.entity] = entity.entity;
- var hiveJob = {
- id : entity.entity,
- name : entity.entity,
- user : entity.primaryfilters.user
- }
- hiveJob.has_tez_dag = false;
- hiveJob.query_text = '';
- if (entity.otherinfo && entity.otherinfo.query) {
- // Explicit false match needed for when failure hook not set
- hiveJob.failed = entity.otherinfo.status===false;
- hiveJob.has_tez_dag = entity.otherinfo.query.match("\"Tez\".*\"DagName:\"");
- var queryJson = $.parseJSON(entity.otherinfo.query);
- if (queryJson && queryJson.queryText) {
- hiveJob.query_text = queryJson.queryText;
- }
- }
- if (entity.events != null) {
- entity.events.forEach(function(event) {
- switch (event.eventtype) {
- case "QUERY_SUBMITTED":
- hiveJob.start_time = event.timestamp;
- break;
- case "QUERY_COMPLETED":
- hiveJob.end_time = event.timestamp;
- break;
- default:
- break;
- }
- });
- }
- if (!hiveJob.start_time && entity.starttime > 0) {
- hiveJob.start_time = entity.starttime;
- }
- if (!hiveJob.end_time && entity.endtime > 0) {
- hiveJob.end_time = entity.endtime;
- }
- hiveJobs.push(hiveJob);
- hiveJob = null;
- entity = null;
- });
-
- if(hiveJobs.length > App.router.get('mainJobsController.filterObject.jobsLimit')) {
- var lastJob = hiveJobs.pop();
- if(App.router.get('mainJobsController.navIDs.nextID') != lastJob.id) {
- App.router.set('mainJobsController.navIDs.nextID', lastJob.id);
- }
- currentEntityMap[lastJob.id] = null;
- }
-
- // Delete IDs not seen from server
- var hiveJobsModel = model.find().toArray();
- hiveJobsModel.forEach(function(job) {
- if (job && !currentEntityMap[job.get('id')]) {
- this.deleteRecord(job);
- }
- }, this);
- }
- App.store.loadMany(model, hiveJobs);
- json = null;
- hiveJobs = null;
- },
- config : {}
-});
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/models.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models.js b/ambari-web/app/models.js
index 461cdfd..49b0498 100644
--- a/ambari-web/app/models.js
+++ b/ambari-web/app/models.js
@@ -54,7 +54,4 @@ require('models/slave_component');
require('classes/run_class');
require('classes/job_class');
require('models/config_group');
-require('models/jobs/tez_dag');
-require('models/jobs/job');
-require('models/jobs/hive_job');
require('models/service_config_version');
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/models/jobs/hive_job.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/jobs/hive_job.js b/ambari-web/app/models/jobs/hive_job.js
deleted file mode 100644
index 419dd41..0000000
--- a/ambari-web/app/models/jobs/hive_job.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-
-App.HiveJob = App.AbstractJob.extend({
- jobType : App.JobType.HIVE,
- queryText : DS.attr('string'),
- stages : DS.attr('array'),
- hasTezDag: DS.attr('boolean'),
- tezDag : DS.belongsTo('App.TezDag'),
- failed: DS.attr('boolean')
-});
-
-App.HiveJob.FIXTURES = [];
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/models/jobs/job.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/jobs/job.js b/ambari-web/app/models/jobs/job.js
deleted file mode 100644
index 44142fc..0000000
--- a/ambari-web/app/models/jobs/job.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-var dateUtils = require('utils/date');
-
-/**
- * Base class of all Jobs.
- *
- * This class is meant to be extended and not instantiated directly.
- */
-App.AbstractJob = DS.Model.extend({
- id : DS.attr('string'),
- name : DS.attr('string'),
- user : DS.attr('string'),
- startTime : DS.attr('number'),
- endTime : DS.attr('number'),
-
- startTimeDisplay : function() {
- var startTime = this.get('startTime');
- if (startTime > 0) {
- return dateUtils.dateFormat(startTime);
- } else {
- return "";
- }
- }.property('startTime'),
-
- endTimeDisplay : function() {
- var endTime = this.get('endTime');
- if (endTime > 0) {
- return dateUtils.dateFormat(endTime);
- } else {
- return "";
- }
- }.property('endTime'),
-
- /**
- * Provides the duration of this job. If the job has not started, duration
- * will be given as 0. If the job has not ended, duration will be till now.
- *
- * @return {Number} Duration in milliseconds.
- */
- duration : function() {
- var startTime = this.get('startTime');
- var endTime = this.get('endTime');
- if(endTime < startTime || endTime == undefined) {
- endTime = App.dateTime();
- }
- return dateUtils.duration(startTime, endTime);
- }.property('startTime', 'endTime'),
-
- durationDisplay : function() {
- return dateUtils.timingFormat(this.get('duration'), true);
- }.property('duration'),
-
- /**
- * Type of this job. Should be one of constants defined in App.JobType
- */
- jobType : DS.attr('string')
-});
-
-App.JobType = {
- HIVE : "hive"
-};
-
-App.AbstractJob.FIXTURES = [];
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/models/jobs/tez_dag.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/jobs/tez_dag.js b/ambari-web/app/models/jobs/tez_dag.js
deleted file mode 100644
index 461c227..0000000
--- a/ambari-web/app/models/jobs/tez_dag.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-var dateUtils = require('utils/date');
-var numberUtils = require('utils/number_utils');
-
-App.TezDag = DS.Model.extend({
- id : DS.attr('string'),
- /**
- * When DAG is actually running on server, a unique ID is assigned.
- */
- instanceId : DS.attr('string'),
- name : DS.attr('string'),
- yarnApplicationId: DS.attr('string'),
- stage : DS.attr('string'),
- vertices : DS.hasMany('App.TezDagVertex'),
- edges : DS.hasMany('App.TezDagEdge')
-});
-
-App.TezDagEdge = DS.Model.extend({
- id : DS.attr('string'),
- instanceId : DS.attr('string'),
- fromVertex : DS.belongsTo('App.TezDagVertex'),
- toVertex : DS.belongsTo('App.TezDagVertex'),
- /**
- * Type of this edge connecting vertices. Should be one of constants defined
- * in 'App.TezDagEdgeType'.
- */
- edgeType : DS.attr('string')
-});
-
-App.TezDagVertex = DS.Model.extend({
- id : DS.attr('string'),
- /**
- * When DAG vertex is actually running on server, a unique ID is assigned.
- */
- instanceId : DS.attr('string'),
- name : DS.attr('string'),
-
- /**
- * State of this vertex. Should be one of constants defined in
- * App.TezDagVertexState.
- */
- state : DS.attr('string'),
-
- /**
- * Vertex type has to be one of the types defined in 'App.TezDagVertexType'
- * @return {string}
- */
- type : DS.attr('string'),
-
- /**
- * A vertex can have multiple incoming edges.
- */
- incomingEdges : DS.hasMany('App.TezDagEdge'),
-
- /**
- * This vertex can have multiple outgoing edges.
- */
- outgoingEdges : DS.hasMany('App.TezDagEdge'),
-
- startTime : DS.attr('number'),
- endTime : DS.attr('number'),
-
- /**
- * Provides the duration of this job. If the job has not started, duration
- * will be given as 0. If the job has not ended, duration will be till now.
- *
- * @return {Number} Duration in milliseconds.
- */
- duration : function() {
- return dateUtils.duration(this.get('startTime'), this.get('endTime'))
- }.property('startTime', 'endTime'),
-
- /**
- * Each Tez vertex can perform arbitrary application specific computations
- * inside. The application can provide a list of operations it has provided in
- * this vertex.
- *
- * Array of strings. [{string}]
- */
- operations : DS.attr('array'),
-
- /**
- * Provides additional information about the 'operations' performed in this
- * vertex. This is shown directly to the user.
- */
- operationPlan : DS.attr('string'),
-
- /**
- * Number of actual Map/Reduce tasks in this vertex
- */
- tasksCount : DS.attr('number'),
-
- tasksNumber: function () {
- return this.get('tasksCount') ? this.get('tasksCount') : 0;
- }.property('tasksCount'),
-
- /**
- * Local filesystem usage metrics for this vertex
- */
- fileReadBytes : DS.attr('number'),
- fileWriteBytes : DS.attr('number'),
- fileReadOps : DS.attr('number'),
- fileWriteOps : DS.attr('number'),
-
- /**
- * Spilled records
- */
- spilledRecords : DS.attr('number'),
-
- /**
- * HDFS usage metrics for this vertex
- */
- hdfsReadBytes : DS.attr('number'),
- hdfsWriteBytes : DS.attr('number'),
- hdfsReadOps : DS.attr('number'),
- hdfsWriteOps : DS.attr('number'),
-
- /**
- * Record metrics for this vertex
- */
- recordReadCount : DS.attr('number'),
- recordWriteCount : DS.attr('number'),
-
- totalReadBytes : function() {
- return this.get('fileReadBytes') + this.get('hdfsReadBytes');
- }.property('fileReadBytes', 'hdfsReadBytes'),
-
- totalWriteBytes : function() {
- return this.get('fileWriteBytes') + this.get('hdfsWriteBytes');
- }.property('fileWriteBytes', 'hdfsWriteBytes'),
-
- totalReadBytesDisplay : function() {
- return numberUtils.bytesToSize(this.get('totalReadBytes'));
- }.property('totalReadBytes'),
-
- totalWriteBytesDisplay : function() {
- return numberUtils.bytesToSize(this.get('totalWriteBytes'));
- }.property('totalWriteBytes'),
-
- durationDisplay : function() {
- return dateUtils.timingFormat(this.get('duration'), true);
- }.property('duration')
-});
-
-App.TezDagVertexState = {
- NEW : "NEW",
- INITIALIZING : "INITIALIZING",
- INITED : "INITED",
- RUNNING : "RUNNING",
- SUCCEEDED : "SUCCEEDED",
- FAILED : "FAILED",
- KILLED : "KILLED",
- ERROR : "ERROR",
- TERMINATING : "TERMINATING",
- JOBFAILED: "JOB FAILED"
-};
-
-App.TezDagVertexType = {
- MAP: 'MAP',
- REDUCE: 'REDUCE',
- UNION: 'UNION'
-};
-
-App.TezDagEdgeType = {
- SCATTER_GATHER : "SCATTER_GATHER",
- BROADCAST : "BROADCAST",
- CONTAINS: "CONTAINS"
-};
-
-App.TezDag.FIXTURES = [];
-App.TezDagEdge.FIXTURES = [];
-App.TezDagVertex.FIXTURES = [];
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/routes/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index 42dd211..ab4b0b3 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -186,47 +186,6 @@ module.exports = Em.Route.extend({
}
}),
- jobs: Em.Route.extend({
- route: '/jobs',
- enter: function (router) {
- if (!App.router.get('mainAdminAccessController.showJobs') && !App.get('isAdmin')) {
- Em.run.next(function () {
- router.transitionTo('main.dashboard.index');
- });
- }
- },
- exit: function (router) {
- clearInterval(router.get('mainJobsController').jobsUpdate);
- },
- index: Ember.Route.extend({
- route: '/',
- connectOutlets: function (router) {
- if (!App.get('isHadoop2Stack')) {
- Em.run.next(function () {
- router.transitionTo('main.dashboard.index');
- });
- } else {
- router.get('mainJobsController').updateJobs('mainJobsController', 'refreshLoadedJobs');
- router.get('mainController').connectOutlet('mainJobs');
- }
- }
- }),
- jobDetails: Em.Route.extend({
- route: '/:job_id',
- connectOutlets: function (router, job) {
- if (job) {
- router.get('mainHiveJobDetailsController').set('loaded', false);
- router.get('mainController').connectOutlet('mainHiveJobDetails', job);
- router.get('mainHiveJobDetailsController').loadJobDetails();
- router.get('mainJobsController').updateJobs('mainHiveJobDetailsController', 'loadJobDetails');
- }
- },
- exit: function (router) {
- router.get('mainHiveJobDetailsController').set('loaded', false);
- }
- })
- }),
-
mirroring: Em.Route.extend({
route: '/mirroring',
index: Ember.Route.extend({
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/admin/access.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/access.hbs b/ambari-web/app/templates/main/admin/access.hbs
index a4a870a..9e85a06 100644
--- a/ambari-web/app/templates/main/admin/access.hbs
+++ b/ambari-web/app/templates/main/admin/access.hbs
@@ -20,10 +20,6 @@
<strong>{{t common.access}}</strong>
</div>
<div class="acces-values">
- <label>
- {{view Ember.Checkbox checkedBinding="controller.showJobs" class="checkbox"}}
- {{t admin.access.showJobs}}
- </label>
</div>
<div class="control-group">
<div class="controls">
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs.hbs b/ambari-web/app/templates/main/jobs.hbs
deleted file mode 100644
index 304f8fa..0000000
--- a/ambari-web/app/templates/main/jobs.hbs
+++ /dev/null
@@ -1,101 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-
- <div id="jobs">
- <div class="jobs_head">
- <div>{{t menu.item.jobs}}</div>
- {{#if controller.hasNewJobs}}
- <div class="new-jobs-link">
- <a href="javascript:void(null);" {{action updateJobsByClick target="controller"}}>{{t jobs.new_jobs.info}}</a>
- </div>
- {{/if}}
- <div class="jobs-type">
- {{t jobs.type}} : <span class="label label-info">{{t jobs.type.hive}}</span>
- </div>
- </div>
- <table id="jobs-table" class="table advanced-header-table table-bordered table-striped">
- <thead>
- {{#view view.sortView classNames="label-row" contentBinding="view.content"}}
- <th></th>
- {{view view.parentView.idSort}}
- {{view view.parentView.userSort}}
- {{view view.parentView.startTimeSort}}
- {{view view.parentView.endTimeSort}}
- {{view view.parentView.durationSort}}
- {{/view}}
-
- <tr id="filter-row" class="first">
- <th></th>
- <th>{{view view.jobsIdFilterView}}</th>
- <th>{{view view.userFilterView}}</th>
- <th class="start-time">{{view view.startTimeFilterView}}</th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {{#if view.noDataToShow}}
- <tr>
- <td class="no-data" {{bindAttr colspan="controller.columnsName.columnsCount"}}>
- {{controller.jobsMessage}}
- </td>
- </tr>
- {{else}}
- {{#each job in controller.sortedContent}}
- <tr>
- <td>
- {{#if job.failed}}
- <i class="icon-remove-sign job-link" {{bindAttr title="view.jobFailMessage"}}></i>
- {{/if}}
- </td>
- <td>
- {{view view.jobNameView jobBinding="job"}}
- </td>
- <td>
- {{job.user}}
- </td>
- <td>
- {{job.startTimeDisplay}}
- </td>
- <td>
- {{job.endTimeDisplay}}
- </td>
- <td>
- {{job.durationDisplay}}
- </td>
- </tr>
- {{/each}}
- {{/if}}
- </tbody>
- </table>
-
- <div class="page-bar">
- <div id="filtered-jobs">
- {{view.filteredJobs}} - <a href="javascript:void(null);" {{action clearFilters target="view"}}>{{t jobs.filtered.clear}}</a>
- </div>
- <div class="items-on-page">
- <label>{{t jobs.show.up.to}}: {{view view.rowsPerPageSelectView selectionBinding="view.displayLength"}}</label>
- </div>
- <div class="paging_two_button">
- {{view view.jobsPaginationLeft}}
- {{view view.jobsPaginationRight}}
- </div>
- </div>
- </div>
-
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs/custom_dates_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs/custom_dates_popup.hbs b/ambari-web/app/templates/main/jobs/custom_dates_popup.hbs
deleted file mode 100644
index 1b1d920..0000000
--- a/ambari-web/app/templates/main/jobs/custom_dates_popup.hbs
+++ /dev/null
@@ -1,39 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="jobs-custom-dates">
- <div>
- <label>{{t jobs.customDateFilter.startTime}}</label>
- {{view Ember.TextField valueBinding="customDateFormFields.startDate" class="input-small datepicker"}}
- {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="customDateFormFields.hoursForStart" class="input-mini"}}
- {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="customDateFormFields.minutesForStart" class="input-mini"}}
- {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="customDateFormFields.middayPeriodForStart" class="input-mini"}}
- <span class="help-inline">{{errorMessages.startDate}}</span>
- </div>
- <div>
-
- </div>
- <div>
- <label>{{t jobs.customDateFilter.endTime}}</label>
- {{view Ember.TextField valueBinding="customDateFormFields.endDate" class="input-small datepicker"}}
- {{view Ember.Select contentBinding="view.hourOptions" selectionBinding="customDateFormFields.hoursForEnd" class="input-mini"}}
- {{view Ember.Select contentBinding="view.minuteOptions" selectionBinding="customDateFormFields.minutesForEnd" class="input-mini"}}
- {{view Ember.Select contentBinding="view.middayPeriodOptions" selectionBinding="customDateFormFields.middayPeriodForEnd" class="input-mini"}}
- <span class="help-inline">{{errorMessages.endDate}}</span>
- </div>
-</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs/hive_job_details.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs/hive_job_details.hbs b/ambari-web/app/templates/main/jobs/hive_job_details.hbs
deleted file mode 100644
index 7a4eb3b..0000000
--- a/ambari-web/app/templates/main/jobs/hive_job_details.hbs
+++ /dev/null
@@ -1,215 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="hive-job-details">
-
- {{#if controller.loaded}}
- <!-- Top Bar -->
- <div class="top-bar">
- <a {{action "routeToJobs" target="controller"}} href="#">{{t menu.item.jobs}}</a> > {{view.content.name}}
- <a {{action "toggleShowQuery" target="view"}} href="#" id="toggle-query">{{view.toggleShowQueryText}}</a>
- <div class="pull-right">Job Type: <span class="label label-info">{{view.content.jobType}}</span></div>
- <div class="alert alert-info query-info">
- <table id="job-more-details-table">
- <tr>
- <td>
- {{t jobs.hive.query}}
- </td>
- <td>
- {{view.content.queryText}}
- </td>
- </tr>
- <tr>
- <td>
- {{t jobs.hive.yarnApplication}}
- </td>
- <td>
- {{#if view.yarnApplicationIdLink}}
- <a {{bindAttr href="view.yarnApplicationIdLink"}} target="_blank">
- {{view.content.tezDag.yarnApplicationId}}
- </a>
- {{else}}
- {{view.content.tezDag.yarnApplicationId}}
- {{/if}}
- </td>
- </tr>
- <tr>
- <td>
- {{t jobs.hive.stages}}
- </td>
- <td>
- <ol>
- {{#each stage in view.content.stages}}
- <li>{{stage.id}}{{stage.description}}.</li>
- {{/each}}
- </ol>
- </td>
- </tr>
- </table>
- </div>
- </div>
-
- <!-- Sections -->
- <div class="row-fluid">
- <div class="span12 sections">
- <!-- Section LHS -->
- <div id="tez-dag-lhs" {{bindAttr class="view.isGraphMaximized:span12:span6 :sections-lhs"}}>
- <div id="tez-dag-section" class="box">
- <div id="tez-dag-section-top-bar">
- {{t jobs.hive.tez.dag.summary.metric}}
- <div class="btn-group display-inline-block">
- <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
- {{view.summaryMetricTypeDisplay}}
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu">
- <!-- dropdown menu links -->
- {{#each type in view.summaryMetricTypesDisplay}}
- <li>
- <a title="{{type}}" href="#" {{action "doSelectSummaryMetricType" type target="view"}}>{{type}}</a>
- </li>
- {{/each}}
- </ul>
- </div>
- <div id="tez-dag-section-top-bar-actions" class="pull-right">
- <div class="btn-group">
- <a id="tez-dag-zoom-in-button" {{bindAttr class="view.canGraphZoomIn::disabled :btn"}} {{action "doGraphZoomIn" target="view"}}>
- <i class="icon-zoom-in"></i>
- </a>
- <a id="tez-dag-zoom-out-button" {{bindAttr class="view.canGraphZoomOut::disabled :btn"}} {{action "doGraphZoomOut" target="view"}}>
- <i class="icon-zoom-out"></i>
- </a>
- {{#if view.isGraphMaximized}}
- <a id="tez-dag-resize-small-button" class="btn" {{action "doGraphMinimize" target="view"}}>
- <i class="icon-resize-small"></i>
- </a>
- {{else}}
- <a id="tez-dag-resize-full-button" class="btn" {{action "doGraphMaximize" target="view"}}>
- <i class="icon-resize-full"></i>
- </a>
- {{/if}}
- </div>
- </div>
- </div>
- <div id="tez-dag-section-body">
- {{view App.MainHiveJobDetailsTezDagView controllerBinding="controller" selectedVertexBinding="view.selectedVertex"
- summaryMetricTypeBinding="view.summaryMetricType" zoomScaleBinding="view.zoomScale"
- zoomScaleFromBinding="view.zoomScaleFrom" zoomScaleToBinding="view.zoomScaleTo"}}
- </div>
- </div>
- </div>
-
- <!-- Section RHS -->
- <div id="tez-vertices-rhs" {{bindAttr class="view.isGraphMaximized:hidden:span6 :sections-rhs"}}>
-
- <!-- Section RHS Vertices -->
- <div id="tez-vertices-table-section">
- <div id="tez-vertices-table-container" class="section">
- <table class="table table-hover table-bordered table-striped">
- {{#view App.MainHiveJobDetailsVerticesTableView contentBinding="view.sortedVertices" doSelectVertexBinding="view.doSelectVertex" selectedVertexBinding="view.selectedVertex"}}
- <thead>
- {{#view view.sortView contentBinding="view.content"}}
- {{view view.parentView.nameSort}}
- {{view view.parentView.tasksSort}}
- {{view view.parentView.inputSort}}
- {{view view.parentView.outputSort}}
- {{view view.parentView.durationSort}}
- {{/view}}
- </thead>
- <tbody>
- {{#each vertex in view.content}}
- <tr {{bindAttr class="vertex.isSelected:info"}}>
- <td>
- <a title="{{vertex.name}}" href="#" {{action "doSelectVertex" vertex target="view"}}>{{vertex.name}}</a>
- </td>
- <td>{{vertex.tasksNumber}}</td>
- <td>{{vertex.totalReadBytesDisplay}}</td>
- <td>{{vertex.totalWriteBytesDisplay}}</td>
- <td>{{vertex.durationDisplay}}</td>
- </tr>
- {{/each}}
- </tbody>
- {{/view}}
- </table>
- </div>
- </div>
-
- <!-- Section RHS Vertex -->
- {{#if view.selectedVertex}}
- <div id="section tez-vertex-details-section">
- <div class="box">
- <div class="box-header">
- <h4>{{view.selectedVertex.name}}</h4>
- </div>
- <div id="tez-vertex-details-section-body">
- <table class="table no-borders table-condensed">
- <tr>
- <td>{{t common.status}}</td>
- <td>{{view.selectedVertexIODisplay.status}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{t common.time.start}}</td>
- <td>{{view.selectedVertexIODisplay.started}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{t common.time.end}}</td>
- <td>{{view.selectedVertexIODisplay.ended}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{t jobs.hive.tez.tasks}}</td>
- <td>{{view.selectedVertex.tasksCount}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{t jobs.hive.tez.hdfs}}</td>
- <td>{{view.selectedVertexIODisplay.hdfs.read.ops}} / {{view.selectedVertexIODisplay.hdfs.read.bytes}}</td>
- <td>{{view.selectedVertexIODisplay.hdfs.write.ops}} / {{view.selectedVertexIODisplay.hdfs.write.bytes}}</td>
- </tr>
- <tr>
- <td>{{t jobs.hive.tez.localFiles}}</td>
- <td>{{view.selectedVertexIODisplay.file.read.ops}} / {{view.selectedVertexIODisplay.file.read.bytes}}</td>
- <td>{{view.selectedVertexIODisplay.file.write.ops}} / {{view.selectedVertexIODisplay.file.write.bytes}}</td>
- </tr>
- <tr>
- <td>{{t jobs.hive.tez.spilledRecords}}</td>
- <td>{{view.selectedVertex.spilledRecords}}</td>
- </tr>
- {{#if view.selectedVertexIODisplay.records.read}}
- <tr>
- <td>{{t jobs.hive.tez.records}}</td>
- <td>{{view.selectedVertexIODisplay.records.read}}</td>
- <td>{{view.selectedVertexIODisplay.records.write}}</td>
- </tr>
- {{/if}}
- </table>
- </div>
- </div>
- </div>
- {{/if}}
- </div>
- </div>
- </div>
- {{else}}
- <div class="alert alert-info">
- <h4>{{t app.loadingPlaceholder}}</h4>
- </div>
- {{/if}}
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs/hive_job_details_tez_dag.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs/hive_job_details_tez_dag.hbs b/ambari-web/app/templates/main/jobs/hive_job_details_tez_dag.hbs
deleted file mode 100644
index 4d8d9e7..0000000
--- a/ambari-web/app/templates/main/jobs/hive_job_details_tez_dag.hbs
+++ /dev/null
@@ -1,44 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="tez-dag-section-body-dag">
- <svg id="tez-dag-svg" stroke="black" strokeWidth="2">
- <defs>
- <marker id="arrow" viewBox="0 -5 10 10" refX="4" markerWidth="3" markerHeight="3" orient="auto">
- <path d="M0,-5L10,0L0,5"></path>
- </marker>
- <filter id="shadow" width="200%" height="200%">
- <feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
- <feOffset dx="2" dy="2" result="offsetblur"/>
- <feMerge>
- <feMergeNode/>
- <feMergeNode in="SourceGraphic"/>
- </feMerge>
- </filter>
- <clipPath id="operatorClipPath">
- <rect x="0" y="0" width="50" height="16">
- </rect>
- </clipPath>
- <font-face xmlns="http://www.w3.org/2000/svg" font-family="FontAwesome" unicode-range="U+0-7F">
- <font-face-src>
- <font-face-uri xlink:href="font/fontawesome-webfont.svg" xmlns:xlink="http://www.w3.org/1999/xlink"/>
- </font-face-src>
- </font-face>
- </defs>
- </svg>
-</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs/hover_op_table.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs/hover_op_table.hbs b/ambari-web/app/templates/main/jobs/hover_op_table.hbs
deleted file mode 100644
index 22fa336..0000000
--- a/ambari-web/app/templates/main/jobs/hover_op_table.hbs
+++ /dev/null
@@ -1,39 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<p>{{content.operationName}}</p>
-<table id="hover-op-table" class="table table-bordered">
- <thead>
- <tr>
- <th>{{t common.name}}</th>
- <th>{{t common.value}}</th>
- </tr>
- </thead>
- <tbody>
- {{#each keys in content.operatorPlanObj}}
- <tr>
- <td>
- {{keys.name}}
- </td>
- <td>
- {{keys.value}}
- </td>
- </tr>
- {{/each}}
- </tbody>
-</table>
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/templates/main/jobs/user_filter.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/jobs/user_filter.hbs b/ambari-web/app/templates/main/jobs/user_filter.hbs
deleted file mode 100644
index 4b93eb2..0000000
--- a/ambari-web/app/templates/main/jobs/user_filter.hbs
+++ /dev/null
@@ -1,34 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<button class="btn single-btn-group filter-btn" {{action "clickFilterButton" target="view"}}>
- {{t common.user}} <i class="icon-filter"></i>
-</button>
-<ul class="dropdown-menu filter-components">
- <li id="title-bar">{{t apps.filters.filterComponents}}
- <a class="close" {{action "closeFilter" target="view"}}>X</a>
- </li>
- {{#each user in view.users}}
- <li>
- <label class="checkbox">{{view Ember.Checkbox checkedBinding="user.checked"}} {{user.name}}</label>
- </li>
- {{/each}}
-
- <li id="button-bar">
- <button class="btn btn-inverse" {{action "applyFilter" target="view"}}>{{t common.apply}}</button>
- </li>
-</ul>
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/utils/jobs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/jobs.js b/ambari-web/app/utils/jobs.js
deleted file mode 100644
index 8d8ee3f..0000000
--- a/ambari-web/app/utils/jobs.js
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-module.exports = {
-
- /**
- * Refreshes the latest information for a given job
- *
- * @param {App.AbstractJob}
- * job
- * @param {Function}
- * successCallback
- * @param {Funtion}
- * errorCallback(errorId) Called in error cases where there is no
- * data from server. 'errorId' can be one of
- * <ul>
- * <li>job.dag.noId</li>
- * <li>job.dag.noname</li>
- * <li>job.dag.id.noDag</li>
- * <li>job.dag.id.loaderror</li>
- * <li>job.dag.name.loaderror</li>
- * </ul>
- */
- refreshJobDetails : function(job, successCallback, errorCallback) {
- this.refreshHiveJobDetails(job, successCallback, errorCallback);
- },
-
- /**
- * Refreshes latest information of a Hive Job.
- *
- * @param {App.HiveJob}
- * hiveJob
- * @param {Function}
- * successCallback
- * @param {Function}
- * errorCallback @see #refreshJobDetails()
- */
- refreshHiveJobDetails : function(hiveJob, successCallback, errorCallback) {
- var self = this;
- // TODO - to be changed to history server when implemented in stack.
- var yarnService = App.YARNService.find().objectAt(0);
- var historyServerHostName = yarnService.get('appTimelineServer.hostName');
- var ahsWebPort = yarnService.get('ahsWebPort');
- var hiveJobId = hiveJob.get('id');
- // First refresh query
- var hiveQueriesUrl = App.get('testMode') ? "/data/jobs/hive-query-2.json" : "/proxy?url=http://" + historyServerHostName
- + ":" + ahsWebPort + "/ws/v1/timeline/HIVE_QUERY_ID/" + hiveJob.get('id') + "?fields=events,otherinfo";
- App.HttpClient.get(hiveQueriesUrl, App.hiveJobMapper, {
- complete : function(jqXHR, textStatus) {
- // Now get the Tez DAG ID from the DAG name
- var hiveRecord = App.HiveJob.find(hiveJobId);
- App.router.get('mainHiveJobDetailsController').set('job', hiveRecord);
- var tezDagName = hiveRecord.get('tezDag.name');
- if (tezDagName != null) {
- var sender = {
- dagNameToIdSuccess : function(data) {
- if (data && data.entities && data.entities.length > 0) {
- var dagId = data.entities[0].entity;
- App.TezDag.find(tezDagName).set('instanceId', dagId);
- self.refreshTezDagDetails(tezDagName, successCallback, errorCallback);
- }else{
- console.log('No Tez DAG was found for DAG name of ' + tezDagName);
- errorCallback('job.dag.noId');
- }
- },
- dagNameToIdError : function(jqXHR, url, method, showStatus) {
- App.ajax.defaultErrorHandler(jqXHR, url, method, showStatus);
- errorCallback('job.dag.name.loaderror');
- }
- }
- App.ajax.send({
- name : 'jobs.tezDag.NametoID',
- sender : sender,
- data : {
- historyServerHostName : historyServerHostName,
- tezDagName : tezDagName,
- ahsWebPort: ahsWebPort
- },
- success : 'dagNameToIdSuccess',
- error : 'dagNameToIdError'
- });
- } else {
- console.log('No Tez DAG name to ask ID for. Job ID: ' + hiveJobId);
- errorCallback('job.dag.noname');
- }
- }
- }, function () {
- App.router.transitionTo('main.jobs.index');
- });
- },
-
- /**
- * Refreshes runtime information of a Tez DAG based on events generated. The
- * instance ID of the Tez DAG should be set.
- *
- * @param {string}
- * tezDagId ID of the Tez DAG. Example: 'HIVE-Q2:1'
- * @param {Function}
- * successCallback
- * @param {Function}
- * errorCallback @see #refreshJobDetails()
- */
- refreshTezDagDetails : function(tezDagId, successCallback, errorCallback) {
- var self = this;
- var yarnService = App.YARNService.find().objectAt(0);
- var ahsWebPort = yarnService.get('ahsWebPort');
- var historyServerHostName = yarnService.get('appTimelineServer.hostName');
- var tezDag = App.TezDag.find(tezDagId);
- if (tezDag) {
- var tezDagInstanceId = tezDag.get('instanceId');
- var sender = {
- loadTezDagSuccess : function(data) {
- if (data) {
- if (data.otherinfo && data.otherinfo.applicationId) {
- tezDag.set('yarnApplicationId', data.otherinfo.applicationId);
- }
- if (data.relatedentities && data.relatedentities.TEZ_VERTEX_ID != null) {
- var count = data.relatedentities.TEZ_VERTEX_ID.length;
- data.relatedentities.TEZ_VERTEX_ID.forEach(function(v) {
- self.refreshTezDagVertex(tezDagId, v, function() {
- if (--count <= 0) {
- // all vertices succeeded
- successCallback();
- }
- });
- });
- }
- }
- },
- loadTezDagError : function(jqXHR, url, method, showStatus) {
- App.ajax.defaultErrorHandler(jqXHR, url, method, showStatus);
- errorCallback('job.dag.id.loaderror');
- }
- }
- App.ajax.send({
- name : 'jobs.tezDag.tezDagId',
- sender : sender,
- data : {
- historyServerHostName : historyServerHostName,
- tezDagId : tezDagInstanceId,
- ahsWebPort: ahsWebPort
- },
- success : 'loadTezDagSuccess',
- error : 'loadTezDagError'
- });
- } else {
- console.log('Unable to find DAG for ID: ' + tezDagId);
- errorCallback('job.dag.id.noDag');
- }
- },
-
- /**
- * Refreshes runtime information of the given vertex.
- *
- * @param {string}
- * tezDagId ID of the Tez DAG. Exmaple: 'HIVE-Q2:1'
- * @param {string}
- * tezVertexInstanceID Instance ID of the vertex to refresh. Example
- * 'vertex_1390516007863_0001_1_00'
- * @param {Function}
- * successCallback
- */
- refreshTezDagVertex : function(tezDagId, tezVertexInstanceId, successCallback) {
- var yarnService = App.YARNService.find().objectAt(0);
- var ahsWebPort = yarnService.get('ahsWebPort');
- var historyServerHostName = yarnService.get('appTimelineServer.hostName');
- var tezDag = App.TezDag.find(tezDagId);
- var hiveJob = App.HiveJob.find().findProperty('tezDag', tezDag);
- var hiveJobFailed = hiveJob.get('failed');
- var hiveJobEndTime = hiveJob.get('endTime');
- var sender = {
- loadTezDagVertexSuccess : function(data) {
- if (data && data.otherinfo) {
- var vertexRecord = App.TezDagVertex.find(tezDagId + "/" + data.otherinfo.vertexName);
- if (vertexRecord != null) {
- vertexRecord.set('startTime', data.otherinfo.startTime);
- if (data.otherinfo.endTime == undefined && hiveJobFailed) {
- vertexRecord.set('endTime', hiveJobEndTime);
- } else {
- vertexRecord.set('endTime', data.otherinfo.endTime);
- };
- vertexRecord.set('tasksCount', data.otherinfo.numTasks);
- if (data.otherinfo.status == null && hiveJobFailed) {
- vertexRecord.set('state', Em.I18n.t('jobs.hive.failed'));
- } else {
- vertexRecord.set('state', data.otherinfo.status);
- };
- if (data.otherinfo.counters && data.otherinfo.counters.counterGroups) {
- data.otherinfo.counters.counterGroups.forEach(function(cGroup) {
- var cNameToPropetyMap = {};
- switch (cGroup.counterGroupName) {
- case 'org.apache.tez.common.counters.FileSystemCounter':
- cNameToPropetyMap = {
- 'FILE_BYTES_READ' : 'fileReadBytes',
- 'FILE_BYTES_WRITTEN' : 'fileWriteBytes',
- 'FILE_READ_OPS' : 'fileReadOps',
- 'FILE_WRITE_OPS' : 'fileWriteOps',
- 'HDFS_BYTES_READ' : 'hdfsReadBytes',
- 'HDFS_BYTES_WRITTEN' : 'hdfsWriteBytes',
- 'HDFS_READ_OPS' : 'hdfsReadOps',
- 'HDFS_WRITE_OPS' : 'hdfsWriteOps'
- };
- break;
- case 'org.apache.tez.common.counters.TaskCounter':
- cNameToPropetyMap = {
- 'SPILLED_RECORDS' : 'spilledRecords'
- };
- break;
- case 'HIVE':
- cNameToPropetyMap = {
- 'RECORDS_READ' : 'recordReadCount',
- 'RECORDS_WRITE' : 'recordWriteCount'
- };
- break;
- default:
- break;
- }
- if (cGroup.counters) {
- cGroup.counters.forEach(function(counter) {
- var prop = cNameToPropetyMap[counter.counterName];
- if (prop != null) {
- vertexRecord.set(prop, counter.counterValue);
- }
- });
- }
- });
- }
- successCallback();
- }
- }
- },
- loadTezDagVertexError : function(jqXHR, url, method, showStatus) {
- App.ajax.defaultErrorHandler(jqXHR, url, method, showStatus);
- }
- }
- App.ajax.send({
- name : 'jobs.tezDag.tezDagVertexId',
- sender : sender,
- data : {
- historyServerHostName : historyServerHostName,
- tezDagVertexId : tezVertexInstanceId,
- ahsWebPort: ahsWebPort
- },
- success : 'loadTezDagVertexSuccess',
- error : 'loadTezDagVertexError'
- });
- }
-};
http://git-wip-us.apache.org/repos/asf/ambari/blob/71d91a7c/ambari-web/app/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 8790fed..21eeb16 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -243,10 +243,6 @@ require('views/main/charts/heatmap/heatmap_rack');
require('views/main/charts/heatmap/heatmap_host');
require('views/main/charts/heatmap/heatmap_host_detail');
require('views/main/apps_view');
-require('views/main/jobs_view');
-require('views/main/jobs/select_custom_date_view');
-require('views/main/jobs/hive_job_details_view');
-require('views/main/jobs/hive_job_details_tez_dag_view');
require('views/main/apps/item_view');
require('views/main/apps/item/bar_view');
require('views/main/apps/item/dag_view');