http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js deleted file mode 100644 index f4d036c..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js +++ /dev/null @@ -1,382 +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. - */ - -App.DagsController = Em.ObjectController.extend(App.PaginatedContentMixin, App.ColumnSelectorMixin, { - childEntityType: 'dag', - - controllerName: 'DagsController', - - pageTitle: 'Tez DAGs', - - pageSubTitle: 'All Tez DAGs', - - columnSelectorMessage: 'Logs and counter columns needs more time to load.', - - // query parameters supported through url. The same named variables in this controller get - // bound automatically to the ones defined in the route. - queryParams: { - status_filter: 'status', - user_filter: 'user', - appId_filter: 'appid', - id_filter: 'id', - dagName_filter: 'dag_name', - callerId_filter: 'caller_id' - }, - - _loadedAllData: false, - - fromID: null, - - status_filter: null, - user_filter: null, - appId_filter: null, - id_filter: null, - dagName_filter: null, - callerId_filter: null, - - boundFilterValues: Em.Object.create({ - status: null - }), - visibleFilters: null, - - init: function () { - this._super(); - this._filterVisiblilityObserver(); - }, - - _paramObserver: function () { - this.set('boundFilterValues', Em.Object.create({ - status: this.get('status_filter'), - user: this.get('user_filter'), - appId: this.get('appId_filter'), - id: this.get('id_filter'), - dagName: this.get('dagName_filter'), - callerId: this.get('callerId_filter') - })); - }.observes('status_filter', 'user_filter', 'appId_filter', 'dagName_filter', 'id_filter', - 'callerId_filter'), - - _otherInfoFieldsVisible: function () { - var visibleColumns = this.get('visibleColumnIds') || {}, - columnIds; - - if(visibleColumns['logs']) { - return true; - } - - columnIds = Object.keys(visibleColumns); - for(var i = 0, length = columnIds.length, id; i < length; i++) { - id = columnIds[i]; - if(visibleColumns[id] && id.indexOf('/') != -1) { - return true; - } - } - - return false; - }.property('visibleColumnIds'), - - _filterVisiblilityObserver: function () { - var visibleFilters = Em.Object.create(); - this.get('columns').forEach(function (column) { - if(column.get('enableFilter')) { - visibleFilters.set(column.get('id'), true); - } - }); - this.set('visibleFilters', visibleFilters); - }.observes('columns'), - - loadData: function() { - var filters = { - primary: { - dagName: this.dagName_filter, - applicationId: this.appId_filter, - user: this.user_filter, - callerId: this.callerId_filter - }, - secondary: { - } - } - if (App.Helpers.misc.isFinalDagStatus(this.status_filter)) { - filters.primary['status'] = this.status_filter; - } else { - filters.secondary['status'] = this.status_filter; - } - this.setFiltersAndLoadEntities(filters); - }, - - loadEntities: function() { - var that = this, - store = this.get('store'), - childEntityType = this.get('childEntityType'), - finder, - record; - var defaultErrMsg = 'Error while loading DAGs. Either Timeline Server is down, or CORS might not be enabled.'; - - that.set('loading', true); - store.unloadAll(childEntityType); - store.unloadAll('dagProgress'); - - that.set('_loadedAllData', false); - function loadAllData() { - return store.findQuery(childEntityType, that.getFilterProperties()).then(function (entities) { - that.set('_loadedAllData', true); - return entities; - }); - } - - function setEntities(entities) { - that.set('entities', entities); - that.set('loading', false); - - return entities; - } - - if(that.id_filter) { - finder = store.find(childEntityType, that.id_filter).then(function (entity) { - var entities = ( - (that.dagName_filter && entity.get('name') != that.dagName_filter) || - (that.appId_filter && entity.get('applicationId') != that.appId_filter) || - (that.user_filter && entity.get('user') != that.user_filter) || - (that.status_filter && entity.get('status') != that.status_filter) || - (that.callerId_filter && entity.get('callerId') != that.callerId_filter) - ) ? [] : [entity]; - - return setEntities(entities); - }); - } - else { - // Query just basic data - finder = store.findQuery(childEntityType, that.getFilterProperties('events,primaryfilters')); - finder = finder.then(setEntities).then(function (entities) { - - // If countersVisible lazy load counters - return that.get('_otherInfoFieldsVisible') ? new Promise(function (fullfill) { - setTimeout(fullfill, 100); // Lazyload delay - }).then(loadAllData) : entities; - - }).catch(function () { - // Basic data query failed, probably YARN-3530 fix is not in ATS. Load all data. - return loadAllData().then(setEntities); - }); - } - - finder = finder.then(function(entities){ - - entities.forEach(function (dag) { - var appId = dag.get('applicationId'); - if(appId && dag.get('status') === 'RUNNING') { - App.Helpers.misc.loadApp(store, appId).then(function (app) { - dag.set('appDetail', app); - dag.set('status', App.Helpers.misc.getRealStatus( - dag.get('status'), - app.get('status'), - app.get('finalStatus') - )); - }).finally(function (entities) { - if(dag.get('status') === 'RUNNING') { - App.Helpers.misc.removeRecord(store, 'dagProgress', dag.get('id')); - store.find('dagProgress', dag.get('id'), { - appId: dag.get('applicationId'), - dagIdx: dag.get('idx') - }) - .then(function(dagProgressInfo) { - dag.set('progress', dagProgressInfo.get('progress')); - }) - .catch(function(error) { - error.message = "Failed to fetch dagProgress. Application Master (AM) is out of reach. Either it's down, or CORS is not enabled for YARN ResourceManager."; - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'Error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - } - }); - } - }); - - }).catch(function(error){ - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error, defaultErrMsg); - var msg = 'error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - }, - - _onCountersVisible: function () { - if(this.get('_otherInfoFieldsVisible') && !this.get('_loadedAllData')) { - Em.run.once(this, this.loadEntities); - } - }.observes('_otherInfoFieldsVisible'), - - actions : { - filterUpdated: function() { - Em.run.later(); - var filterValues = this.get('boundFilterValues'); - this.setProperties({ - status_filter: filterValues.get('status') || null, - user_filter: filterValues.get('user') || null, - appId_filter: filterValues.get('appId') || null, - id_filter: filterValues.get('id') || null, - dagName_filter: filterValues.get('dagName') || null, - callerId_filter: filterValues.get('callerId') || null - }); - this.loadData(); - } - }, - - /* - * Columns that would be displayed by default - * @return Array of column configs - */ - defaultColumnConfigs: function () { - var store = this.get('store'); - - return [ - { - id: 'dagName', - headerCellName: 'Dag Name', - templateName: 'components/basic-table/linked-cell', - enableFilter: true, - getCellContent: function(row) { - return { - linkTo: 'dag.index', - entityId: row.get('id'), - displayText: row.get('name') - }; - } - }, - { - id: 'id', - headerCellName: 'Id', - enableFilter: true, - contentPath: 'id' - }, - { - id: 'user', - headerCellName: 'Submitter', - contentPath: 'user', - enableFilter: true - }, - { - id: 'status', - headerCellName: 'Status', - templateName: 'components/basic-table/status-cell', - enableFilter: true, - contentPath: 'status', - observePath: true, - getCellContent: function(row) { - var status = row.get('status'); - return { - status: status, - statusIcon: App.Helpers.misc.getStatusClassForEntity(status, - row.get('hasFailedTaskAttempts')) - }; - } - }, - { - id: 'progress', - headerCellName: 'Progress', - contentPath: 'progress', - enableFilter: true, - observePath: true, - templateName: 'components/basic-table/progress-cell' - }, - { - id: 'startTime', - headerCellName: 'Start Time', - contentPath: 'startTime', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - } - }, - { - id: 'endTime', - headerCellName: 'End Time', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - } - }, - { - id: 'duration', - headerCellName: 'Duration', - getCellContent: function(row) { - return App.Helpers.date.timingFormat(row.get('duration'), 1); - } - }, - { - id: 'appId', - headerCellName: 'Application ID', - templateName: 'components/basic-table/linked-cell', - enableFilter: true, - getCellContent: function(row) { - return { - linkTo: 'tez-app', - entityId: row.get('applicationId'), - displayText: row.get('applicationId') - }; - } - }, - { - id: 'queue', - headerCellName: 'Queue', - templateName: 'components/basic-table/bounded-basic-cell', - getCellContent: function(row) { - var appId = row.get('applicationId'); - if(appId) { - return App.Helpers.misc.loadApp(store, appId, true).then(function (app) { - return app.get('queue'); - }).catch(function(error) {}); - } - } - }, - { - id: 'callerId', - headerCellName: 'Context ID', - enableFilter: true, - contentPath: 'callerId' - }, - { - id: 'logs', - headerCellName: 'Logs', - templateName: 'components/basic-table/multi-logs-cell', - contentPath: 'containerLogs', - observePath: true, - getCellContent: function(row) { - var containerLogs = row.get('containerLogs'); - return containerLogs ? { - logs: containerLogs - } : { - isPending: true - }; - } - } - ]; - }.property(), - - columnConfigs: function() { - return this.get('defaultColumnConfigs').concat( - App.Helpers.misc.normalizeCounterConfigs( - App.get('Configs.defaultCounters').concat( - App.get('Configs.tables.entity.dag') || [], - App.get('Configs.tables.sharedColumns') || [] - ) - ) - ); - }.property('defaultColumnConfigs'), - -});
http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/polling-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/polling-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/polling-controller.js deleted file mode 100644 index 5a4d060..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/polling-controller.js +++ /dev/null @@ -1,113 +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 DEFAULT_MERGE_PROPS = ['status', 'progress']; - -App.PollingController = App.BaseController.extend({ - - pollster: null, - pollingEnabled: null, - showAutoUpdate: true, - - persistConfigs: true, - - pollingType: null, - pollingOptions: null, - - init: function () { - var pollingEnabled; - - this._super(); - this.set('pollster', App.Helpers.EntityArrayPollster.create({ - store: this.get('store'), - - mergeProperties: DEFAULT_MERGE_PROPS, - entityType: this.get('pollingType'), - options: this.get('pollingOptions'), - - onFailure: this.onPollingFailure.bind(this) - })); - - if(this.get('persistConfigs')) { - pollingEnabled = this.fetchConfig('pollingEnabled'); - if(pollingEnabled == undefined) { - pollingEnabled = true; - } - Ember.run.later(this, this.set, 'pollingEnabled', pollingEnabled, 100); - } - }, - - setup: function () { - this._super(); - Ember.run.later(this, this.send, 'pollingEnabledChanged', this.get('pollingEnabled')); - }, - - pollingEnabledObserver: function () { - var pollingEnabled = this.get('pollingEnabled'); - - if(this.get('persistConfigs')) { - this.storeConfig('pollingEnabled', pollingEnabled); - } - - this.send('pollingEnabledChanged', pollingEnabled); - - if(!pollingEnabled && this.get('pollster.isRunning')) { - this.get('pollster').stop(); - this.set('pollster.polledRecords', null); - this.applicationComplete(); - } - }.observes('pollingEnabled'), - - onPollingFailure: function (error) { - var appID = this.get('pollster.options.appID'), - that = this; - - App.Helpers.misc.removeRecord(this.get('store'), 'clusterApp', appID); - this.get('store').find('clusterApp', appID).then(function (app) { - if(app.get('isComplete')) { - that.get('pollster').stop(); - that.applicationComplete(); - } - else { - error.message = "Application Master (AM) is out of reach. Either it's down, or CORS is not enabled for YARN ResourceManager."; - that.applicationFailed(error); - } - }).catch(function (error) { - that.get('pollster').stop(); - error.message = "Resource Manager (RM) is out of reach. Either it's down, or CORS is not enabled."; - that.applicationFailed(error); - }); - }, - - applicationComplete: function () { - this.get('pollster').stop(); - this.set('pollster.polledRecords', null); - if(this.load) { - this.load(); - } - }, - - applicationFailed: function (error) { - // TODO: TEZ-2877 - #1 - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error, error.message); - var msg = 'Error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - } - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/table-page-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/table-page-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/table-page-controller.js deleted file mode 100644 index 6f14836..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/table-page-controller.js +++ /dev/null @@ -1,82 +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. - */ - -App.TablePageController = App.PollingController.extend( - App.DataArrayLoaderMixin, - App.ColumnSelectorMixin, { - queryParams: ['pageNum', 'rowCount', 'searchText', 'sortColumnId', 'sortOrder'], - - sortColumnId: '', - sortOrder: '', - - pageNum: 1, - rowCount: 25, - - searchText: '', - rowsDisplayed: [], - - isRefreshable: true, - - parentStatus: null, - - rowsDisplayedObserver: function () { - this.set('pollster.targetRecords', this.get('rowsDisplayed')); - }.observes('rowsDisplayed', 'pollster'), - - parentStatusObserver: function () { - var parentStatus = this.get('status'), - previousStatus = this.get('parentStatus'); - - if(parentStatus != previousStatus && previousStatus == 'RUNNING' && this.get('pollingEnabled')) { - this.get('pollster').stop(); - this.loadData(true); - } - this.set('parentStatus', parentStatus); - }.observes('status'), - - applicationComplete: function () { - this.set('pollster.polledRecords', null); - this.loadData(true); - }, - - statusMessage: function () { - return this.get('loading') ? "Loading all records..." : null; - }.property('loading'), - - onInProgressColumnSort: function (columnDef) { - var inProgress = this.get('pollster.isRunning'); - if(inProgress) { - App.Helpers.Dialogs.alert( - 'Cannot sort', - 'Sorting on %@ is disabled for running DAGs!'.fmt(columnDef.get('headerCellName')), - this - ); - } - return !inProgress; - }, - - actions: { - refresh: function () { - this.loadData(true); - }, - tableRowsChanged: function (rows) { - this.set('rowsDisplayed', rows); - } - } - } -); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task-counters-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task-counters-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task-counters-controller.js deleted file mode 100644 index 0a1bdb8..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task-counters-controller.js +++ /dev/null @@ -1,69 +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. - */ - -App.TaskCountersController = App.PollingController.extend(App.ModelRefreshMixin, { - controllerName: 'TaskCountersController', - - pollingType: 'taskInfo', - - pollsterControl: function () { - if(this.get('vertex.dag.status') == 'RUNNING' && - this.get('vertex.dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('vertex.dag.status', 'vertex.dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('vertex.dag.applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - taskID: '%@_%@'.fmt( - App.Helpers.misc.getIndexFromId(this.get('vertexID')), - App.Helpers.misc.getIndexFromId(this.get('id')) - ), - counters: '*' - } - } : { - targetRecords: [], - options: null - }); - }.observes('vertex.dag.applicationId', 'status', 'dagID', 'vertexID', 'id'), - - message: function () { - var status = this.get('content.status'); - if(!this.get('content.counterGroups.length')) { - if(status == 'KILLED' || status == 'FAILED') { - return 'Task %@, please check the counters of individual task attempts.'.fmt(status); - } - } - }.property('content.status', 'content.counterGroups.length'), - - applicationComplete: function () { - this.get('pollster').stop(); - this.set('pollster.polledRecords', null); - } -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_controller.js deleted file mode 100644 index 9c398a5..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_controller.js +++ /dev/null @@ -1,116 +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. - */ - -App.TaskAttemptController = App.BaseController.extend(App.Helpers.DisplayHelper, { - controllerName: 'TaskAttemptController', - - pageTitle: 'TaskAttempt', - persistConfigs: false, - - loading: true, - - pollster: App.Helpers.EntityArrayPollster.create(), - - init: function () { - this._super(); - this.get('pollster').setProperties({ - entityType: 'attemptInfo', - mergeProperties: ['status', 'progress'], - store: this.get('store') - }); - }, - - pollsterControl: function () { - if(this.get('task.vertex.dag.status') == 'RUNNING' && - this.get('task.vertex.dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('task.vertex.dag.status', 'task.vertex.dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('task.vertex.dag.applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - attemptID: '%@_%@_%@'.fmt( - App.Helpers.misc.getIndexFromId(this.get('vertexID')), - App.Helpers.misc.getIndexFromId(this.get('taskID')), - App.Helpers.misc.getIndexFromId(this.get('id')) - ) - } - } : { - targetRecords: [], - options: null - }); - }.observes('task.vertex.dag.applicationId', 'status', 'dagID', 'vertexID', 'id'), - - loadAdditional: function(attempt) { - var that = this; - var applicationId = App.Helpers.misc.getAppIdFromVertexId(attempt.get('vertexID')); - - var dagLoader = this.store.find('dag', attempt.get('dagID')); - var vertexLoader = this.store.find('vertex', attempt.get('vertexID')); - var taskLoader = this.store.find('task', attempt.get('taskID')); - var appDetailLoader = App.Helpers.misc.loadApp(this.store, applicationId) - .then(function(app) { - attempt.set('appDetail', app); - }).catch(function(){}); - - var allLoaders = Em.RSVP.hash({ - dag: dagLoader, - vertex: vertexLoader, - task: taskLoader, - appDetail: appDetailLoader - }); - allLoaders.then(function(results) { - attempt.set('task', results.task); - attempt.set('task.vertex', results.vertex); - attempt.set('task.vertex.dag', results.dag); - }).finally(function() { - that.set('loading', false); - }); - - return allLoaders; - }, - - taskIndex: function() { - return App.Helpers.misc.getTaskIndex(this.get('dagID'), this.get('taskID')); - }.property('taskID', 'dagID'), - - vertexName: function() { - return this.get('task.vertex.name') || this.get('vertexID'); - }.property('task.vertex.name', 'vertexID'), - - dagName: function() { - return this.get('task.vertex.dag.name') || this.get('dagID'); - }.property('task.vertex.dag.name', 'dagID'), - - childDisplayViews: [ - Ember.Object.create({title: 'TaskAttempt Details', linkTo: 'taskAttempt.index'}), - Ember.Object.create({title: 'TaskAttempt Counters', linkTo: 'taskAttempt.counters'}), - ], - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_counters_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_counters_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_counters_controller.js deleted file mode 100644 index 65346e0..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task_attempt_counters_controller.js +++ /dev/null @@ -1,62 +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. - */ - -App.TaskAttemptCountersController = App.PollingController.extend(App.Helpers.DisplayHelper, App.ModelRefreshMixin, { - controllerName: 'TaskAttemptCountersController', - - pollingType: 'attemptInfo', - - pollsterControl: function () { - if(this.get('task.vertex.dag.status') == 'RUNNING' && - this.get('task.vertex.dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('task.vertex.dag.status', 'task.vertex.dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('task.vertex.dag.applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - //ID: App.Helpers.misc.getIndexFromId(this.get('id')), - attemptID: '%@_%@_%@'.fmt( - App.Helpers.misc.getIndexFromId(this.get('vertexID')), - App.Helpers.misc.getIndexFromId(this.get('taskID')), - App.Helpers.misc.getIndexFromId(this.get('id')) - ), - counters: '*' - } - } : { - targetRecords: [], - options: null - }); - }.observes('task.vertex.dag.applicationId', 'status', 'dagID', 'vertexID', 'id'), - - applicationComplete: function () { - this.get('pollster').stop(); - this.set('pollster.polledRecords', null); - } -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_controller.js deleted file mode 100644 index 421b0e3..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task_controller.js +++ /dev/null @@ -1,105 +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. - */ - -App.TaskController = App.PollingController.extend(App.Helpers.DisplayHelper, App.ModelRefreshMixin, { - controllerName: 'TaskController', - - pageTitle: 'Task', - - loading: true, - persistConfigs: false, - - pollingType: 'taskInfo', - - pollsterControl: function () { - if(this.get('vertex.dag.status') == 'RUNNING' && - this.get('vertex.dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('vertex.dag.status', 'vertex.dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('vertex.dag.applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - taskID: '%@_%@'.fmt( - App.Helpers.misc.getIndexFromId(this.get('vertexID')), - App.Helpers.misc.getIndexFromId(this.get('id')) - ) - } - } : { - targetRecords: [], - options: null - }); - }.observes('vertex.dag.applicationId', 'status', 'dagID', 'vertexID', 'id'), - - loadAdditional: function(task) { - var that = this; - var applicationId = App.Helpers.misc.getAppIdFromVertexId(task.get('vertexID')); - - var dagLoader = this.store.find('dag', task.get('dagID')); - var vertexLoader = this.store.find('vertex', task.get('vertexID')); - var tezAppLoader = this.store.find('tezApp', 'tez_' + applicationId); - var appDetailLoader = App.Helpers.misc.loadApp(this.store, applicationId) - .then(function(app) { - task.set('appDetail', app); - }).catch(function(){}); - - task.set('progress', undefined); - var allLoaders = Em.RSVP.hash({ - dag: dagLoader, - vertex: vertexLoader, - tezApp: tezAppLoader, - appDetail: appDetailLoader - }); - - allLoaders.then(function(results) { - task.set('vertex', results.vertex); - task.set('vertex.dag', results.dag); - task.set('tezApp', results.tezApp); - }).finally(function() { - that.set('loading', false); - }); - - return allLoaders; - }, - - vertexName: function() { - return this.get('vertex.name') || this.get('vertexID'); - }.property('vertex.name', 'vertexID'), - - dagName: function() { - return this.get('vertex.dag.name') || this.get('dagID'); - }.property('vertex.dag.name', 'dagID'), - - childDisplayViews: [ - Ember.Object.create({title: 'Task Details', linkTo: 'task.index'}), - Ember.Object.create({title: 'Task Counters', linkTo: 'task.counters'}), - Ember.Object.create({title: 'Task Attempts', linkTo: 'task.attempts'}), - ], - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task_index_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_index_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_index_controller.js deleted file mode 100644 index 96258f1..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task_index_controller.js +++ /dev/null @@ -1,68 +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. - */ - - //TODO: watch individual counters. -App.TaskIndexController = App.PollingController.extend(App.ModelRefreshMixin, { - controllerName: 'TaskIndexController', - - needs: "task", - - taskStatus: function() { - return App.Helpers.misc.getFixedupDisplayStatus(this.get('model.status')); - }.property('id', 'model.status'), - - taskIconStatus: function() { - return App.Helpers.misc.getStatusClassForEntity(this.get('taskStatus'), - this.get('hasFailedTaskAttempts')); - }.property('id', 'taskStatus', 'hasFailedTaskAttempts'), - - load: function () { - var model = this.get('content'); - if(model && $.isFunction(model.reload)) { - model.reload().then(function(record) { - if(record.get('isDirty')) { - record.rollback(); - } - }); - } - }, - - logsLink: null, - - logsLinkObserver: function() { - - var model = this.get('content'); - var taskAttemptId = model.get('successfulAttemptId') || model.get('attempts.lastObject'); - var store = this.get('store'); - var that = this; - - if (taskAttemptId) { - store.find('taskAttempt', taskAttemptId).then(function(attempt) { - var cellContent = App.Helpers.misc.constructLogLinks( - attempt, - that.get('controllers.task.appDetail.status'), - that.get('controllers.task.tezApp.user') - ); - - cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl; - that.set('logsLink', cellContent); - }); - } - }.observes('id', 'successfulAttemptId'), - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js deleted file mode 100644 index 580af05..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js +++ /dev/null @@ -1,258 +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. - */ - -App.TaskAttemptsController = App.TablePageController.extend(App.AutoCounterColumnMixin, { - - controllerName: 'TaskAttemptsController', - needs: "task", - - entityType: 'taskTaskAttempt', - baseEntityType: 'taskAttempt', - filterEntityType: 'task', - filterEntityId: Ember.computed.alias('controllers.task.id'), - - cacheDomain: Ember.computed.alias('controllers.task.dagID'), - - pollingType: 'attemptInfo', - - pollsterControl: function () { - if(this.get('vertex.dag.status') == 'RUNNING' && - this.get('vertex.dag.amWebServiceVersion') != '1' && - !this.get('loading') && - this.get('isActive') && - this.get('pollingEnabled') && - this. get('rowsDisplayed.length') > 0) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('vertex.dag.status', - 'vertex.dag.amWebServiceVersion', 'rowsDisplayed', 'loading', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - this.set('pollster.options', { - appID: this.get('vertex.dag.applicationId'), - dagID: this.get('vertex.dag.idx'), - counters: this.get('countersDisplayed'), - attemptID: this.get('rowsDisplayed').map(function (row) { - var attemptIndex = App.Helpers.misc.getIndexFromId(row.get('id')), - taskIndex = App.Helpers.misc.getIndexFromId(row.get('taskID')), - vertexIndex = App.Helpers.misc.getIndexFromId(row.get('vertexID')); - return '%@_%@_%@'.fmt(vertexIndex, taskIndex, attemptIndex); - }).join(',') - }); - }.observes('vertex.dag.applicationId', 'vertex.dag.idx', 'rowsDisplayed'), - - countersDisplayed: function () { - return App.Helpers.misc.getCounterQueryParam(this.get('columns')); - }.property('columns'), - - beforeLoad: function () { - var taskController = this.get('controllers.task'), - model = taskController.get('model'); - return model.reload().then(function () { - return taskController.loadAdditional(model); - }); - }, - - afterLoad: function () { - var loaders = [], - that = this; - - App.Helpers.misc.removeRecord(that.store, 'dag', that.get('controllers.task.dagID')); - - var appDetailFetcher = that.store.find('dag', that.get('controllers.task.dagID')). - then(function (dag) { - return App.Helpers.misc.loadApp(that.store, dag.get('applicationId')); - }). - then(function(appDetail) { - var status = appDetail.get('status'); - if (status) { - that.set('yarnAppState', status); - } - }); - loaders.push(appDetailFetcher); - - return Em.RSVP.allSettled(loaders); - }, - - defaultColumnConfigs: function() { - var that = this; - return [ - { - id: 'attemptNo', - headerCellName: 'Attempt No', - templateName: 'components/basic-table/linked-cell', - contentPath: 'id', - getCellContent: function(row) { - var attemptID = row.get('id') || ''; - return { - linkTo: 'taskAttempt', - displayText: attemptID.split(/[_]+/).pop(), - entityId: attemptID - }; - }, - getSearchValue: function (row) { - var attemptID = row.get('id') || ''; - return attemptID.split(/[_]+/).pop(); - }, - getSortValue: function (row) { - var attemptID = row.get('id') || ''; - return attemptID.split(/[_]+/).pop(); - } - }, - { - id: 'status', - headerCellName: 'Status', - templateName: 'components/basic-table/status-cell', - contentPath: 'status', - observePath: true, - onSort: this.onInProgressColumnSort.bind(this), - getCellContent: function(row) { - var status = App.Helpers.misc.getFixedupDisplayStatus(row.get('status')); - return { - status: status, - statusIcon: App.Helpers.misc.getStatusClassForEntity(status) - }; - } - }, - { - id: 'progress', - headerCellName: 'Progress', - contentPath: 'progress', - observePath: true, - onSort: this.onInProgressColumnSort.bind(this), - templateName: 'components/basic-table/progress-cell' - }, - { - id: 'startTime', - headerCellName: 'Start Time', - contentPath: 'startTime', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - }, - getSearchValue: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - } - }, - { - id: 'endTime', - headerCellName: 'End Time', - contentPath: 'endTime', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - }, - getSearchValue: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - }, - }, - { - id: 'duration', - headerCellName: 'Duration', - contentPath: 'duration', - getCellContent: function(row) { - return App.Helpers.date.timingFormat(row.get('duration'), 1); - }, - getSearchValue: function(row) { - return App.Helpers.date.timingFormat(row.get('duration'), 1); - }, - }, - { - id: 'containerId', - headerCellName: 'Container', - contentPath: 'containerId' - }, - { - id: 'nodeId', - headerCellName: 'Node', - contentPath: 'nodeId' - }, - { - id: 'actions', - headerCellName: 'Actions', - templateName: 'components/basic-table/linked-cell', - searchAndSortable: false, - contentPath: 'id', - getCellContent: function(row) { - var attemptID = row.get('id') || ''; - return { - linkTo: 'taskAttempt.counters', - displayText: 'counters', - entityId: attemptID - }; - } - }, - { - id: 'logs', - headerCellName: 'Logs', - templateName: 'components/basic-table/logs-cell', - searchAndSortable: false, - getCellContent: function(row) { - var cellContent = App.Helpers.misc.constructLogLinks( - row, - that.get('yarnAppState'), - that.get('controllers.task.tezApp.user') - ); - - cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl; - return cellContent; - } - } - ]; - }.property('yarnAppState', 'controllers.task.tezApp.user'), - -}); - - -App.TaskAttemptIndexController = Em.ObjectController.extend(App.ModelRefreshMixin, { - controllerName: 'TaskAttemptIndexController', - - needs: "taskAttempt", - - taskAttemptStatus: function() { - return App.Helpers.misc.getFixedupDisplayStatus(this.get('status')); - }.property('id', 'status'), - - taskAttemptIconStatus: function() { - return App.Helpers.misc.getStatusClassForEntity(this.get('taskAttemptStatus')); - }.property('id', 'status', 'counterGroups'), - - load: function () { - var model = this.get('content'); - if(model && $.isFunction(model.reload)) { - model.reload().then(function(record) { - if(record.get('isDirty')) { - record.rollback(); - } - }); - } - }, - - logsLink: function() { - var cellContent = App.Helpers.misc.constructLogLinks( - this.get('content'), - this.get('controllers.taskAttempt.appDetail.status'), - this.get('controllers.taskAttempt.tezApp.user') - ); - - cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl; - return cellContent; - }.property('id', 'controllers.taskAttempt'), - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/tasks_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/tasks_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/tasks_controller.js deleted file mode 100644 index 2c8e402..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/tasks_controller.js +++ /dev/null @@ -1,127 +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. - */ - -App.TasksController = Em.ObjectController.extend(App.PaginatedContentMixin, App.ColumnSelectorMixin, { - // Required by the PaginatedContentMixin - childEntityType: 'task', - - controllerName: 'TasksController', - - pageTitle: 'Tasks', - - pageSubTitle: 'All Tasks', - - queryParams: { - parentType: true, - parentID: true, - status_filter: 'status' - }, - - parentName: 'Loading...', // So that a proper message is displayed - vertexIdToNameMap: {}, - parentType: null, - parentID: null, - status_filter: null, - - loadData: function() { - var filters = { - primary: {}, - secondary: { - status: this.status_filter - } - } - filters.primary[this.parentType] = this.parentID; - this.setFiltersAndLoadEntities(filters); - }, - - loadAdditional: function (loader) { - var that = this; - return this.store.find('dag', this.get('parentID')). - then(function (parent) { - that.set('parentName', parent.get('name')); - that.set('vertexIdToNameMap', parent.get('vertexIdToNameMap') || {}); - }); - }, - - defaultColumnConfigs: function() { - var vertexIdToNameMap = this.get('vertexIdToNameMap'); - return [ - { - id: 'taskId', - headerCellName: 'Task Id', - contentPath: 'id', - tableCellViewClass: Em.Table.TableCell.extend({ - template: Em.Handlebars.compile( - "{{#link-to 'task' view.cellContent class='ember-table-content'}}{{view.cellContent}}{{/link-to}}") - }) - }, - { - id: 'vertexName', - headerCellName: 'Vertex Name', - getCellContent: function(row) { - var vertexId = row.get('vertexID'); - return vertexIdToNameMap[vertexId] || vertexId; - } - }, - { - id: 'submissionTime', - headerCellName: 'Submission Time', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - } - }, - { - id: 'endTime', - headerCellName: 'End Time', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - } - }, - { - id: 'status', - headerCellName: 'Status', - tableCellViewClass: Em.Table.TableCell.extend({ - template: Em.Handlebars.compile( - '<span class="ember-table-content"> \ - <i {{bind-attr class=":task-status view.cellContent.statusIcon"}}></i>\ - {{view.cellContent.status}}</span>') - }), - getCellContent: function(row) { - var taskStatus = row.get('status'); - return { - status: taskStatus, - statusIcon: App.Helpers.misc.getStatusClassForEntity(taskStatus, - row.get('hasFailedTaskAttempts')) - }; - } - } - ]; - }.property('vertexIdToNameMap'), - - columnConfigs: function() { - return this.get('defaultColumnConfigs').concat( - App.Helpers.misc.normalizeCounterConfigs( - App.get('Configs.defaultCounters').concat( - App.get('Configs.tables.entity.task') || [], - App.get('Configs.tables.sharedColumns') || [] - ) - ) - ); - }.property('defaultColumnConfigs'), - -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-controller.js deleted file mode 100644 index afb05ea..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-controller.js +++ /dev/null @@ -1,76 +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. - */ - -App.TezAppController = App.BaseController.extend(App.Helpers.DisplayHelper, App.ModelRefreshMixin, { - controllerName: 'AppController', - - pageTitle: 'App', - persistConfigs: false, - pollingEnabled: true, - - loading: true, - - updateLoading: function() { - this.set('loading', false); - }.observes('content'), - - pollster: App.Helpers.Pollster.create(), - - init: function () { - this._super(); - this.get('pollster').setProperties({ - onPoll: this.load.bind(this) - }); - }, - - pollsterControl: function () { - if(this.get('appDetail.finalStatus') == 'UNDEFINED' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('appDetail.finalStatus', 'isActive', 'pollingEnabled'), - - load: function () { - var tezApp = this.get('content'), - store = this.get('store'); - - tezApp.reload().then(function (tezApp) { - var appId = tezApp.get('appId'); - if(!appId) return tezApp; - return App.Helpers.misc.loadApp(store, appId).then(function (appDetails){ - tezApp.set('appDetail', appDetails); - return tezApp; - }); - }).catch(function (error) { - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - }, - - childDisplayViews: [ - Ember.Object.create({title: 'App Details', linkTo: 'tez-app.index'}), - Ember.Object.create({title: 'DAGs', linkTo: 'tez-app.dags'}), - Ember.Object.create({title: 'App Configuration', linkTo: 'tez-app.configs'}), - ], -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js deleted file mode 100644 index 1caca20..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-dags-controller.js +++ /dev/null @@ -1,182 +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. - */ - -App.TezAppDagsController = App.TablePageController.extend({ - - controllerName: 'TezAppDagsController', - needs: "tezApp", - - entityType: 'dag', - filterEntityType: 'tezApp', - filterEntityId: Ember.computed.alias('appId'), - - showAutoUpdate: false, - - afterLoad: function () { - var data = this.get('data'), - loaders = [], - store = this.get('store'), - record, - fetcher; - - data.forEach(function (dag) { - - var appId = dag.get('applicationId'); - if(appId) { - //Load tezApp details - if (dag.get('status') === 'RUNNING') { - App.Helpers.misc.removeRecord(store, 'dagProgress', dag.get('id')); - fetcher = store.find('dagProgress', dag.get('id'), { - appId: dag.get('applicationId'), - dagIdx: dag.get('idx') - }) - .then(function(dagProgressInfo) { - dag.set('progress', dagProgressInfo.get('progress')); - }) - .catch(function(error) { - error.message = "Failed to fetch dagProgress. Application Master (AM) is out of reach. Either it's down, or CORS is not enabled for YARN ResourceManager."; - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'Error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - loaders.push(fetcher); - } - } - - }); - - return Em.RSVP.allSettled(loaders); - }, - - defaultColumnConfigs: function() { - var store = this.get('store'); - return [ - { - id: 'dagName', - headerCellName: 'Dag Name', - filterID: 'dagName_filter', - templateName: 'components/basic-table/linked-cell', - contentPath: 'name', - getCellContent: function(row) { - return { - linkTo: 'dag', - entityId: row.get('id'), - displayText: row.get('name') - }; - } - }, - { - id: 'id', - headerCellName: 'Id', - contentPath: 'id' - }, - { - id: 'user', - headerCellName: 'Submitter', - contentPath: 'user' - }, - { - id: 'status', - headerCellName: 'Status', - templateName: 'components/basic-table/status-cell', - contentPath: 'status', - getCellContent: function(row) { - var status = row.get('status'), - content = Ember.Object.create({ - status: status, - statusIcon: App.Helpers.misc.getStatusClassForEntity(status, - row.get('hasFailedTaskAttempts')) - }); - - if(status == 'RUNNING') { - App.Helpers.misc.removeRecord(store, 'dagProgress', row.get('id')); - - store.find('dagProgress', row.get('id'), { - appId: row.get('applicationId'), - dagIdx: row.get('idx') - }) - .then(function(dagProgressInfo) { - content.set('progress', dagProgressInfo.get('progress')); - }) - .catch(function(error) { - error.message = "Failed to fetch dagProgress. Application Master (AM) is out of reach. Either it's down, or CORS is not enabled for YARN ResourceManager."; - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'Error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - } - - return content; - } - }, - { - id: 'startTime', - headerCellName: 'Start Time', - contentPath: 'startTime', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - }, - getSearchValue: function(row) { - return App.Helpers.date.dateFormat(row.get('startTime')); - } - }, - { - id: 'endTime', - headerCellName: 'End Time', - contentPath: 'endTime', - getCellContent: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - }, - getSearchValue: function(row) { - return App.Helpers.date.dateFormat(row.get('endTime')); - } - }, - { - id: 'duration', - headerCellName: 'Duration', - contentPath: 'duration', - getCellContent: function(row) { - return App.Helpers.date.timingFormat(row.get('duration'), 1); - }, - getSearchValue: function(row) { - return App.Helpers.date.timingFormat(row.get('duration'), 1); - }, - }, - { - id: 'callerId', - headerCellName: 'Context ID', - filterID: 'callerId_filter', - contentPath: 'callerId' - } - ]; - }.property(), - - columnConfigs: function() { - return this.get('defaultColumnConfigs').concat( - App.Helpers.misc.normalizeCounterConfigs( - App.get('Configs.defaultCounters').concat( - App.get('Configs.tables.entity.dag') || [], - App.get('Configs.tables.sharedColumns') || [] - ) - ) - ); - }.property('defaultColumnConfigs'), - -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-index-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-index-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-index-controller.js deleted file mode 100644 index ae1df85..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/tez-app-index-controller.js +++ /dev/null @@ -1,54 +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. - */ - -App.TezAppIndexController = App.PollingController.extend(App.ModelRefreshMixin, { - - needs: "tezApp", - controllerName: 'TezAppIndexController', - - rmTrackingURL: function() { - return "%@/%@/app/%@".fmt(App.env.RMWebUrl, App.Configs.otherNamespace.cluster, this.get('appId')); - }.property('appId'), - - load: function () { - var tezApp = this.get('model'), - store = this.get('store'); - - tezApp.reload().then(function (tezApp) { - var appId = tezApp.get('appId'); - if(!appId) return tezApp; - return App.Helpers.misc.loadApp(store, appId).then(function (appDetails){ - tezApp.set('appDetail', appDetails); - return tezApp; - }); - }).catch(function (error) { - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - }, - - appUser: function() { - return this.get('appDetail.user') || this.get('user'); - }.property('appDetail.user', 'user'), - - iconStatus: function() { - return App.Helpers.misc.getStatusClassForEntity(this.get('model.appDetail.finalStatus')); - }.property('id', 'appDetail.finalStatus'), -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/vertex-additionals-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex-additionals-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex-additionals-controller.js deleted file mode 100644 index 43f3653..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex-additionals-controller.js +++ /dev/null @@ -1,107 +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. - */ - -App.VertexAdditionalsController = Em.ObjectController.extend({ - needs: 'vertex', - - controllerName: 'VertexAdditionalsController', - - loadEntities: function() { - var inputs = this.get('inputs.content'), - outputs = this.get('outputs.content'); - - this.set('inputContent', inputs); - this.set('inputsAvailable', inputs.length > 0); - - this.set('outputContent', outputs); - this.set('outputsAvailable', outputs.length > 0); - - this.set('loading', false); - }, - - inputColumns: function() { - return App.Helpers.misc.createColumnDescription([ - { - id: 'inputId', - headerCellName: 'Name', - contentPath: 'inputName', - searchAndSortable: false, - }, - { - id: 'inputClass', - headerCellName: 'Class', - contentPath: 'inputClass', - searchAndSortable: false, - }, - { - id: 'inputInitializer', - headerCellName: 'Initializer', - contentPath: 'inputInitializer', - searchAndSortable: false, - }, - { - id: 'configurations', - headerCellName: 'Configurations', - searchAndSortable: false, - templateName: 'components/basic-table/linked-cell', - getCellContent: function(row) { - if(row.get('configs.content.length')) { - return { - linkTo: 'input.configs', - displayText: 'View Configurations', - entityId: row.get('id') - }; - } - } - } - ]); - }.property(), - - outputColumns: function() { - return App.Helpers.misc.createColumnDescription([ - { - id: 'outputId', - headerCellName: 'Name', - contentPath: 'outputName', - searchAndSortable: false, - }, - { - id: 'outputClass', - headerCellName: 'Class', - contentPath: 'outputClass', - searchAndSortable: false, - }, - { - id: 'configurations', - headerCellName: 'Configurations', - searchAndSortable: false, - templateName: 'components/basic-table/linked-cell', - getCellContent: function(row) { - if(row.get('configs.content.length')) { - return { - linkTo: 'output.configs', - displayText: 'View Configurations', - entityId: row.get('id') - }; - } - } - } - ]); - }.property(), - -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/vertex-inputs-controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex-inputs-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex-inputs-controller.js deleted file mode 100644 index 21f6136..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex-inputs-controller.js +++ /dev/null @@ -1,94 +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. - */ - -App.VertexInputsController = Em.ObjectController.extend(App.PaginatedContentMixin, App.ColumnSelectorMixin, { - needs: 'vertex', - - controllerName: 'VertexInputsController', - - loadEntities: function() { - var content = this.get('inputs').content; - this.set('entities', content); - this.set('inputsAvailable', content.length > 0); - this.set('loading', false); - }, - - actions : { - filterUpdated: function(filterID, value) { - // any validations required goes here. - if (!!value) { - this.set(filterID, value); - } else { - this.set(filterID, null); - } - this.loadData(); - } - }, - - defaultColumnConfigs: function() { - return [ - { - id: 'inputId', - headerCellName: 'Name', - contentPath: 'inputName', - }, - { - id: 'inputClass', - headerCellName: 'Class', - contentPath: 'inputClass', - }, - { - id: 'inputInitializer', - headerCellName: 'Initializer', - contentPath: 'inputInitializer', - }, - { - id: 'configurations', - headerCellName: 'Configurations', - tableCellViewClass: Em.Table.TableCell.extend({ - template: Em.Handlebars.compile( - "{{#if view.cellContent.count}}\ - {{#link-to 'vertexInput.configs' view.cellContent.id class='ember-table-content'}}View Configurations{{/link-to}}\ - {{else}}\ - <span class='ember-table-content'>Not Available</span>\ - {{/if}}") - }), - getCellContent: function(row) { - return { - count: row.get('configs.content.length'), - id: row.get('id') - }; - } - } - ]; - - return [nameCol, classCol, initializerCol, configCol]; - }.property(), - - columnConfigs: function() { - return this.get('defaultColumnConfigs').concat( - App.Helpers.misc.normalizeCounterConfigs( - App.get('Configs.defaultCounters').concat( - App.get('Configs.tables.entity.vertexInput') || [], - App.get('Configs.tables.sharedColumns') || [] - ) - ) - ); - }.property('defaultColumnConfigs'), - -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js deleted file mode 100644 index feb4983..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js +++ /dev/null @@ -1,121 +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. - */ - -App.VertexController = App.PollingController.extend(App.Helpers.DisplayHelper, App.ModelRefreshMixin, { - controllerName: 'VertexController', - - pageTitle: 'Vertex', - persistConfigs: false, - - loading: true, - - pollingType: 'vertexInfo', - - pollsterControl: function () { - if(this.get('dag.status') == 'RUNNING' && - this.get('dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('dag.status', 'dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - vertexID: App.Helpers.misc.getIndexFromId(this.get('id')) - } - } : { - targetRecords: [], - options: null - }); - }.observes('applicationId', 'status', 'dagID', 'id'), - - loadAdditional: function(vertex) { - var loaders = [], - that = this, - applicationId = vertex.get('applicationId'); - - vertex.set('progress', undefined); - - // Irrespective of am version this will get the progress first. - if (vertex.get('status') == 'RUNNING') { - var vertexIdx = vertex.get('id').split('_').splice(-1).pop(); - App.Helpers.misc.removeRecord(this.store, 'vertexProgress', vertexIdx); - var progressLoader = this.store.find('vertexProgress', vertexIdx, { - appId: applicationId, - dagIdx: vertex.get('dagIdx') - }).then(function(vertexProgressInfo) { - if (vertexProgressInfo) { - vertex.set('progress', vertexProgressInfo.get('progress')); - } - }).catch(function(error) { - error.message = "Failed to fetch vertexProgress. Application Master (AM) is out of reach. Either it's down, or CORS is not enabled for YARN ResourceManager."; - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'Error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - loaders.push(progressLoader); - } - - var appDetailFetcher = App.Helpers.misc.loadApp(that.store, applicationId).then(function(appDetail) { - var status = appDetail.get('status'); - if (status) { - vertex.set('yarnAppState', status); - } - vertex.set('status', App.Helpers.misc.getRealStatus(vertex.get('status'), appDetail.get('status'), - appDetail.get('finalStatus'))); - }).catch(function(){}); - loaders.push(appDetailFetcher); - - var tezAppLoader = this.store.find('tezApp', 'tez_' + applicationId) - .then(function(app){ - vertex.set('tezApp', app); - }).catch(function(){}); - loaders.push(tezAppLoader); - - var dagFetcher = that.store.find('dag', vertex.get('dagID')).then(function (dag) { - vertex.set('dag', dag); - }); - loaders.push(dagFetcher); - - Em.RSVP.allSettled(loaders).then(function(){ - that.set('loading', false); - }); - - return Em.RSVP.all(loaders); - }, - - childDisplayViews: [ - Ember.Object.create({title: 'Vertex Details', linkTo: 'vertex.index'}), - Ember.Object.create({title: 'Vertex Counters', linkTo: 'vertex.counters'}), - Ember.Object.create({title: 'Tasks', linkTo: 'vertex.tasks'}), - Ember.Object.create({title: 'Task Attempts', linkTo: 'vertex.taskAttempts'}), - Ember.Object.create({title: 'Swimlane', linkTo: 'vertex.swimlane'}), - Ember.Object.create({title: 'Sources & Sinks', linkTo: 'vertex.additionals'}), - ], -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/vertex_counters_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_counters_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_counters_controller.js deleted file mode 100644 index 8403f0a..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_counters_controller.js +++ /dev/null @@ -1,57 +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. - */ - -App.VertexCountersController = App.PollingController.extend(App.Helpers.DisplayHelper, App.ModelRefreshMixin, { - controllerName: 'VertexCountersController', - - pollingType: 'vertexInfo', - - pollsterControl: function () { - if(this.get('dag.status') == 'RUNNING' && - this.get('dag.amWebServiceVersion') != '1' && - this.get('pollingEnabled') && - this.get('isActive')) { - this.get('pollster').start(); - } - else { - this.get('pollster').stop(); - } - }.observes('dag.status', 'dag.amWebServiceVersion', 'isActive', 'pollingEnabled'), - - pollsterOptionsObserver: function () { - var model = this.get('model'); - - this.get('pollster').setProperties( (model && model.get('status') != 'SUCCEEDED') ? { - targetRecords: [model], - options: { - appID: this.get('applicationId'), - dagID: App.Helpers.misc.getIndexFromId(this.get('dagID')), - vertexID: App.Helpers.misc.getIndexFromId(this.get('id')), - counters: '*' - } - } : { - targetRecords: [], - options: null - }); - }.observes('applicationId', 'status', 'dagID', 'id'), - - applicationComplete: function () { - this.get('pollster').stop(); - this.set('pollster.polledRecords', null); - } -}); http://git-wip-us.apache.org/repos/asf/tez/blob/13132ec7/tez-ui/src/main/webapp/app/scripts/controllers/vertex_index_controller.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_index_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_index_controller.js deleted file mode 100644 index 76db92b..0000000 --- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_index_controller.js +++ /dev/null @@ -1,94 +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. - */ - -App.VertexIndexController = App.PollingController.extend(App.ModelRefreshMixin, { - controllerName: 'VertexIndexController', - - needs: 'vertex', - - load: function () { - var vertex = this.get('controllers.vertex.model'), - controller = this.get('controllers.vertex'), - t = this; - vertex.reload().then(function () { - return controller.loadAdditional(vertex); - }).catch(function(error){ - Em.Logger.error(error); - var err = App.Helpers.misc.formatError(error); - var msg = 'error code: %@, message: %@'.fmt(err.errCode, err.msg); - App.Helpers.ErrorBar.getInstance().show(msg, err.details); - }); - }, - - //TODO: TEZ-1705 : Create a parent class and move this function there to avoid duplication. - iconStatus: function() { - return App.Helpers.misc.getStatusClassForEntity(this.get('model.status'), - this.get('model.hasFailedTaskAttempts')); - }.property('id', 'model.status', 'model.hasFailedTaskAttempts'), - - progressStr: function() { - var pct; - if (Ember.typeOf(this.get('progress')) === 'number') { - pct = App.Helpers.number.fractionToPercentage(this.get('progress')); - } - return pct; - }.property('id', 'status', 'progress', 'model.status'), - - hasFailedTasks: function() { - return this.get('failedTasks') > 0; - }.property('failedTasks'), - - failedTasksLink: function() { - return '#/vertex/%@/tasks?searchText=Status%3AFAILED'.fmt(this.get('id')); - }.property('id'), - - failedTaskAttemptsLink: function() { - return '#/vertex/%@/taskAttempts?searchText=Status%3AFAILED'.fmt(this.get('id')); - }.property('id'), - - hasFirstTaskStarted: function() { - return !!this.get('firstTaskStartTime') && !!this.get('firstTasksToStart'); - }.property('firstTaskStartTime', 'firstTasksToStart'), - - hasLastTaskFinished: function() { - return !!this.get('lastTaskFinishTime') && !!this.get('lastTasksToFinish'); - }.property('lastTaskFinishTime', 'lastTasksToFinish'), - - hasStats: function() { - return (this.get('numTasks') || 0) > 0 || - (this.get('sucessfulTasks') || 0) > 0 || - (this.get('failedTasks') || 0 ) > 0 || - (this.get('killedTasks') || 0) > 0 || - this.get('showAvgTaskDuration') || - this.get('showMinTaskDuration') || - this.get('showMaxTaskDuration'); - }.property('numTasks', 'sucessfulTasks', 'failedTasks', 'killedTasks', 'showAvgTaskDuration', - 'showMinTaskDuration', 'showMaxTaskDuration'), - - showAvgTaskDuration: function() { - return (this.get('avgTaskDuration') || 0) > 0; - }.property('avgTaskDuration'), - - showMinTaskDuration: function() { - return (this.get('minTaskDuration') || 0) > 0; - }.property('minTaskDuration'), - - showMaxTaskDuration: function() { - return (this.get('maxTaskDuration') || 0) > 0; - }.property('maxTaskDuration'), -}); \ No newline at end of file
