You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by hi...@apache.org on 2015/02/06 18:39:36 UTC
[1/2] tez git commit: TEZ-2043. Tez UI: add progress info from am
webservice to dag and vertex views. (Prakash Ramachandran via hitesh)
Repository: tez
Updated Branches:
refs/heads/master 5f3a9a3ed -> 2b12f4cba
TEZ-2043. Tez UI: add progress info from am webservice to dag and vertex views. (Prakash Ramachandran via hitesh)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/d51103db
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/d51103db
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/d51103db
Branch: refs/heads/master
Commit: d51103db3ae383b0e6e43577dd1c97f49f5f3bfc
Parents: 5f3a9a3
Author: Hitesh Shah <hi...@apache.org>
Authored: Fri Feb 6 09:28:18 2015 -0800
Committer: Hitesh Shah <hi...@apache.org>
Committed: Fri Feb 6 09:28:18 2015 -0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
tez-ui/src/main/webapp/app/index.html | 1 +
tez-ui/src/main/webapp/app/scripts/app.js | 44 ++++++++++++++
.../app/scripts/controllers/dag_controller.js | 18 +++++-
.../scripts/controllers/dag_index_controller.js | 8 +++
.../app/scripts/controllers/dag_vertices.js | 46 +++++++++++++-
.../app/scripts/controllers/dags_controller.js | 23 ++++++-
.../controllers/tez-app-dags-controller.js | 48 ++++++++++++++-
.../scripts/controllers/vertex_controller.js | 21 ++++++-
.../controllers/vertex_index_controller.js | 8 +++
.../main/webapp/app/scripts/default-configs.js | 5 +-
.../main/webapp/app/scripts/helpers/number.js | 10 ++++
.../app/scripts/mixins/paginated_content.js | 15 ++++-
.../app/scripts/models/TimelineRestAdapter.js | 4 ++
.../src/main/webapp/app/scripts/models/dag.js | 23 +++++++
.../src/main/webapp/app/templates/dag/index.hbs | 63 ++++++++++----------
.../main/webapp/app/templates/vertex/index.hbs | 1 +
17 files changed, 295 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2ab6c0a..0732004 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -57,6 +57,7 @@ Release 0.6.1: Unreleased
INCOMPATIBLE CHANGES
ALL CHANGES:
+ TEZ-2043. Tez UI: add progress info from am webservice to dag and vertex views.
TEZ-2032. Update CHANGES.txt to show 0.6.0 is released
TEZ-2018. App Tracking and History URL should point to the Tez UI.
TEZ-2035. Make timeline server putDomain exceptions non-fatal - work-around
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/index.html
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/index.html b/tez-ui/src/main/webapp/app/index.html
index 73e991b..4fe7e3d 100644
--- a/tez-ui/src/main/webapp/app/index.html
+++ b/tez-ui/src/main/webapp/app/index.html
@@ -53,6 +53,7 @@
<script src="bower_components/ember-addons.bs_for_ember/dist/js/bs-modal.min.js"></script>
<script src="bower_components/ember-addons.bs_for_ember/dist/js/bs-nav.min.js"></script>
<script src="bower_components/ember-addons.bs_for_ember/dist/js/bs-items-action-bar.min.js"></script>
+ <script src="bower_components/ember-addons.bs_for_ember/dist/js/bs-badge.min.js"></script>
<script src="bower_components/antiscroll/antiscroll.js"></script>
<script src="bower_components/jquery-mousewheel/jquery.mousewheel.js"></script>
<script src="bower_components/ember-table/dist/ember-table.js"></script>
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/app.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/app.js b/tez-ui/src/main/webapp/app/scripts/app.js
index 5beb815..4fc461a 100644
--- a/tez-ui/src/main/webapp/app/scripts/app.js
+++ b/tez-ui/src/main/webapp/app/scripts/app.js
@@ -107,6 +107,50 @@ App.ready = function () {
});
}
});
+
+ App.AMInfoAdapter = DS.RESTAdapter.extend({
+ ajax: function(url, method, hash) {
+ hash = hash || {}; // hash may be undefined
+ if (hash && hash.data && hash.data.__app_id__) {
+ url = url.replace('__app_id__', hash.data.__app_id__);
+ delete hash.data['__app_id__'];
+ }
+ hash.crossDomain = true;
+ hash.xhrFields = {withCredentials: true};
+ return this._super(url, method, hash);
+ },
+ host: App.env.RMWebUrl,
+ namespace: App.Configs.restNamespace.aminfo,
+ });
+
+ App.DagProgressAdapter = App.AMInfoAdapter.extend({
+ buildURL: function(type, id, record) {
+ var url = this._super(type, undefined, record);
+ return url.replace('__app_id__', record.get('appId'))
+ .fmt(record.get('dagIdx'));
+ },
+ pathForType: function() {
+ return 'dagProgress?dagID=%@';
+ }
+ });
+
+ App.VertexProgressAdapter = App.AMInfoAdapter.extend({
+ findQuery: function(store, type, query) {
+ var record = query.metadata;
+ delete query.metadata;
+ return this.ajax(
+ this.buildURL(Ember.String.pluralize(type.typeKey),
+ record.vertexIds, Em.Object.create(record)), 'GET', { data: query});
+ },
+ buildURL: function(type, id, record) {
+ var url = this._super(type, undefined, record);
+ return url.replace('__app_id__', record.get('appId'))
+ .fmt(record.get('dagIdx'), id);
+ },
+ pathForType: function(typeName) {
+ return typeName + '?dagID=%@&vertexID=%@';
+ }
+ });
};
/* Order and include */
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
index 3375e33..1fdf053 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
@@ -24,7 +24,23 @@ App.DagController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
loading: true,
updateLoading: function() {
- this.set('loading', false);
+ var that = this;
+ var loaders = [];
+ if (this.get('status') === 'RUNNING') {
+ // update the progress info if available. this need not block the UI
+ var aminfoLoader = that.store.find('dagProgress', that.get('id'), {
+ appId: that.get('applicationId'),
+ dagIdx: that.get('idx')
+ }).then(function(dagProgressInfo) {
+ that.set('progress', dagProgressInfo.get('progress'));
+ }).catch(function (error) {
+ Em.Logger.error("Failed to fetch dagProgress")
+ });
+ loaders.push(aminfoLoader);
+ }
+ Em.RSVP.allSettled(loaders).then(function(){
+ that.set('loading', false);
+ });
}.observes('content'),
childDisplayViews: [
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js
index a7eb3ea..fed28c7 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_index_controller.js
@@ -24,6 +24,14 @@ App.DagIndexController = Em.ObjectController.extend({
return App.Helpers.misc.getStatusClassForEntity(this.get('model'));
}.property('id', 'status', 'counterGroups'),
+ 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'),
+
totalTasks: function() {
return App.Helpers.misc.getCounterValueForDag(this.get('counterGroups'),
this.get('id'), 'org.apache.tez.common.counters.DAGCounter', 'TOTAL_LAUNCHED_TASKS')
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
index 7cc5fbf..c26f83e 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_vertices.js
@@ -44,6 +44,40 @@ App.DagVerticesController = Em.ObjectController.extend(App.PaginatedContentMixin
this.setFiltersAndLoadEntities(filters);
},
+ loadAdditional: function() {
+ var defer = Em.RSVP.defer();
+
+ var that = this;
+ vertices = this.get('entities');
+ var runningVerticesIdx = vertices
+ .filterBy('status', 'RUNNING')
+ .map(function(item) {
+ return item.get('id').split('_').splice(-1).pop();
+ });
+ if (runningVerticesIdx.length > 0) {
+ this.store.findQuery('vertexProgress', {
+ metadata: {
+ appId: that.get('applicationId'),
+ dagIdx: that.get('idx'),
+ vertexIds: runningVerticesIdx.join(',')
+ }
+ }).then(function(vertexProgressInfo) {
+ vertexProgressInfo.forEach(function(item) {
+ var model = vertices.findBy('id', item.get('id')) || Em.Object.create();
+ model.set('progress', item.get('progress'));
+ });
+ }).catch(function(error) {
+ Em.Logger.debug("failed to fetch vertex progress")
+ }).finally(function(){
+ defer.resolve();
+ })
+ } else {
+ defer.resolve();
+ }
+
+ return defer.promise;
+ },
+
actions : {
filterUpdated: function(filterID, value) {
// any validations required goes here.
@@ -129,12 +163,18 @@ App.DagVerticesController = Em.ObjectController.extend(App.PaginatedContentMixin
template: Em.Handlebars.compile(
'<span class="ember-table-content"> \
<i {{bind-attr class=":task-status view.cellContent.statusIcon"}}></i>\
- {{view.cellContent.status}}</span>')
+ {{view.cellContent.status}}\
+ {{#if view.cellContent.progress}} {{bs-badge content=view.cellContent.progress}}{{/if}}</span>')
}),
getCellContent: function(row) {
+ var pct;
+ if (Ember.typeOf(row.get('progress')) === 'number') {
+ pct = App.Helpers.number.fractionToPercentage(row.get('progress'));
+ }
return {
status: row.get('status'),
- statusIcon: App.Helpers.misc.getStatusClassForEntity(row)
+ statusIcon: App.Helpers.misc.getStatusClassForEntity(row),
+ progress: pct
};
}
},
@@ -180,4 +220,4 @@ App.DagVerticesController = Em.ObjectController.extend(App.PaginatedContentMixin
);
}.property(),
-});
\ No newline at end of file
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/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
index 55f9d26..9d1a243 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dags_controller.js
@@ -87,6 +87,19 @@ App.DagsController = Em.ObjectController.extend(App.PaginatedContentMixin, App.C
dag.set('tezApp', app);
});
loaders.push(fetcher);
+ if (dag.get('status') === 'RUNNING') {
+ amInfoFetcher = 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) {
+ Em.Logger.error('Failed to fetch dagProgress' + error);
+ });
+ loaders.push(amInfoFetcher);
+ }
}
});
Em.RSVP.allSettled(loaders).then(function(){
@@ -154,12 +167,18 @@ App.DagsController = Em.ObjectController.extend(App.PaginatedContentMixin, App.C
template: Em.Handlebars.compile(
'<span class="ember-table-content"> \
<i {{bind-attr class=":task-status view.cellContent.statusIcon"}}></i>\
- {{view.cellContent.status}}</span>')
+ {{view.cellContent.status}}\
+ {{#if view.cellContent.progress}} {{bs-badge content=view.cellContent.progress}}{{/if}}</span>')
}),
getCellContent: function(row) {
+ var pct;
+ if (Ember.typeOf(row.get('progress')) === 'number') {
+ pct = App.Helpers.number.fractionToPercentage(row.get('progress'));
+ }
return {
status: row.get('status'),
- statusIcon: App.Helpers.misc.getStatusClassForEntity(row)
+ statusIcon: App.Helpers.misc.getStatusClassForEntity(row),
+ progress: pct
};
}
},
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/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
index b9054b1..438ec29 100644
--- 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
@@ -47,6 +47,44 @@ App.TezAppDagsController = Em.ObjectController.extend(App.PaginatedContentMixin,
this.setFiltersAndLoadEntities(filters);
},
+ loadEntities: function() {
+ var that = this;
+ var childEntityType = this.get('childEntityType');
+ var defaultErrMsg = 'Error while loading %@. could not connect to %@'
+ .fmt(childEntityType, App.env.timelineBaseUrl);
+
+
+ that.set('loading', true);
+
+ this.get('store').unloadAll(childEntityType);
+ this.get('store').findQuery(childEntityType, this.getFilterProperties()).then(function(entities){
+ that.set('entities', entities);
+
+ var loaders = [];
+ entities.forEach(function (dag) {
+ if (dag.get('status') === 'RUNNING') {
+ amInfoFetcher = that.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) {
+ Em.Logger.error('Failed to fetch dagProgress' + error);
+ });
+ loaders.push(amInfoFetcher);
+ }
+ });
+ Em.RSVP.allSettled(loaders).then(function(){
+ that.set('loading', false);
+ });
+ }).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);
+ });
+ },
+
actions : {
filterUpdated: function(filterID, value) {
// any validations required goes here.
@@ -97,12 +135,18 @@ App.TezAppDagsController = Em.ObjectController.extend(App.PaginatedContentMixin,
template: Em.Handlebars.compile(
'<span class="ember-table-content"> \
<i {{bind-attr class=":task-status view.cellContent.statusIcon"}}></i>\
- {{view.cellContent.status}}</span>')
+ {{view.cellContent.status}}\
+ {{#if view.cellContent.progress}} {{bs-badge content=view.cellContent.progress}}{{/if}}</span>')
}),
getCellContent: function(row) {
+ var pct;
+ if (Ember.typeOf(row.get('progress')) === 'number') {
+ pct = App.Helpers.number.fractionToPercentage(row.get('progress'));
+ }
return {
status: row.get('status'),
- statusIcon: App.Helpers.misc.getStatusClassForEntity(row)
+ statusIcon: App.Helpers.misc.getStatusClassForEntity(row),
+ progress: pct
};
}
},
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/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
index 1c20b3e..e5e74e5 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
@@ -24,7 +24,26 @@ App.VertexController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
loading: true,
updateLoading: function() {
- this.set('loading', false);
+ var loaders = [],
+ that = this;
+
+ if (this.get('status') == 'RUNNING') {
+ var vertexIdx = that.get('id').split('_').splice(-1).pop();
+ var progressLoader = this.store.find('vertexProgress', vertexIdx, {
+ appId: that.get('applicationId'),
+ dagIdx: that.get('dagIdx')
+ }).then(function(vertexProgressInfo) {
+ if (vertexProgressInfo) {
+ that.set('progress', vertexProgressInfo.get('progress'));
+ }
+ }).catch(function(error) {
+ Em.Logger.error("Failed to fetch vertexProgress" + error)
+ });
+ loaders.push(progressLoader);
+ }
+ Em.RSVP.allSettled(loaders).then(function(){
+ that.set('loading', false);
+ });
}.observes('content'),
childDisplayViews: [
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/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
index a7b16c3..8c53db2 100644
--- 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
@@ -24,6 +24,14 @@ App.VertexIndexController = Em.ObjectController.extend({
return App.Helpers.misc.getStatusClassForEntity(this.get('model'));
}.property('id', 'status', 'counterGroups'),
+ 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'),
+
hasFailedTasks: function() {
return this.get('failedTasks') > 0;
}.property('id', 'counterGroups'),
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/default-configs.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/default-configs.js b/tez-ui/src/main/webapp/app/scripts/default-configs.js
index eba6a7e..e438bad 100644
--- a/tez-ui/src/main/webapp/app/scripts/default-configs.js
+++ b/tez-ui/src/main/webapp/app/scripts/default-configs.js
@@ -35,12 +35,13 @@ $.extend(true, App.Configs, {
version: "0.7.0",
timelineBaseUrl: getDefaultTimelineUrl(),
- RMWebUrl: getDefaultRMWebUrl(),
+ RMWebUrl: getDefaultRMWebUrl()
},
restNamespace: {
timeline: 'ws/v1/timeline',
- applicationHistory: 'ws/v1/applicationhistory'
+ applicationHistory: 'ws/v1/applicationhistory',
+ aminfo: 'proxy/__app_id__/ws/v1/tez'
},
tables: {
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/helpers/number.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/helpers/number.js b/tez-ui/src/main/webapp/app/scripts/helpers/number.js
index c72edb3..912e8f5 100644
--- a/tez-ui/src/main/webapp/app/scripts/helpers/number.js
+++ b/tez-ui/src/main/webapp/app/scripts/helpers/number.js
@@ -110,6 +110,16 @@ App.Helpers.number = {
*/
isValidInt: function(value) {
return value % 1 == 0;
+ },
+
+ /**
+ * converts fraction to percentage.
+ * @param {number} fraction assumes < 1
+ * @return {float} fixed decimal point formatted percentage
+ */
+ fractionToPercentage: function(number, decimal) {
+ decimal = decimal || 2;
+ return parseFloat((number * 100).toFixed(decimal)) + ' %';
}
};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/mixins/paginated_content.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/mixins/paginated_content.js b/tez-ui/src/main/webapp/app/scripts/mixins/paginated_content.js
index 568d526..7ce5f5e 100644
--- a/tez-ui/src/main/webapp/app/scripts/mixins/paginated_content.js
+++ b/tez-ui/src/main/webapp/app/scripts/mixins/paginated_content.js
@@ -71,8 +71,19 @@ App.PaginatedContentMixin = Em.Mixin.create({
this.get('store').unloadAll(childEntityType);
this.get('store').findQuery(childEntityType, this.getFilterProperties()).then(function(entities){
that.set('entities', entities);
- that.set('loading', false);
- }).catch(function(jqXHR){
+ var loaders = [];
+ try {
+ var loader = Em.tryInvoke(that, 'loadAdditional');
+ if (!!loader) {
+ loaders.push(loader);
+ }
+ } catch(error) {
+ Em.Logger.error("Exception invoking additional load", error);
+ }
+ Em.RSVP.allSettled(loaders).then(function(){
+ that.set('loading', false);
+ });
+ }).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);
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
index a0943e2..d135174 100644
--- a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
+++ b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
@@ -279,6 +279,7 @@ var timelineJsonToVertexMap = {
id: 'entity',
name: 'otherinfo.vertexName',
dagID: 'primaryfilters.TEZ_DAG_ID.0',
+ applicationId: 'primaryfilters.applicationId.0',
processorClassName: 'processorClassName',
counterGroups: 'counterGroups',
inputs: 'inputs',
@@ -545,3 +546,6 @@ App.TezAppSerializer = App.TimelineSerializer.extend({
return Em.JsonMapper.map(hash, timelineJsonToTezAppMap);
},
});
+
+App.VertexProgressSerializer = App.DagProgressSerializer = DS.RESTSerializer.extend({});
+
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/scripts/models/dag.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/models/dag.js b/tez-ui/src/main/webapp/app/scripts/models/dag.js
index cc87f5d..e050037 100644
--- a/tez-ui/src/main/webapp/app/scripts/models/dag.js
+++ b/tez-ui/src/main/webapp/app/scripts/models/dag.js
@@ -17,6 +17,10 @@
App.Dag = App.AbstractEntity.extend({
+ idx: function() {
+ return this.get('id').split('_').splice(-1).pop();
+ }.property('id'),
+
submittedTime: DS.attr('number'),
// start time of the entity
@@ -93,9 +97,16 @@ App.Edge = DS.Model.extend({
App.Vertex = DS.Model.extend({
name: DS.attr('string'),
+ vertexIdx: function() {
+ return this.get('id').split('_').splice(-1).pop();
+ }.property('id'),
dag: DS.belongsTo('dag'),
dagID: DS.attr('string'),
+ applicationId: DS.attr('string'),
+ dagIdx: function() {
+ return this.get('dagID').split('_').splice(-1).pop();
+ }.property('dagID'),
/**
* State of this vertex. Should be one of constants defined in
@@ -323,6 +334,18 @@ App.Task = App.AbstractEntity.extend({
counterGroups: DS.hasMany('counterGroup', { inverse: 'parent' })
});
+App.DagProgress = DS.Model.extend({
+ progress: DS.attr('number'),
+ appId: DS.attr('string'),
+ dagIdx: DS.attr('number')
+});
+
+App.VertexProgress = DS.Model.extend({
+ progress: DS.attr('number'),
+ appId: DS.attr('string'),
+ dagIdx: DS.attr('string')
+});
+
App.KVDatum = DS.Model.extend({
key: DS.attr('string'),
value: DS.attr('string'),
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/templates/dag/index.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/dag/index.hbs b/tez-ui/src/main/webapp/app/templates/dag/index.hbs
index 0d38686..7e9dbcb 100644
--- a/tez-ui/src/main/webapp/app/templates/dag/index.hbs
+++ b/tez-ui/src/main/webapp/app/templates/dag/index.hbs
@@ -17,42 +17,43 @@
}}
<div class='type-table fill-full margin-small-horizontal'>
- <div class='align-left'>
- <table class='detail-list'>
- <tbody>
- <tr>
- <td>{{t 'common.status'}}</td>
- <td>
- {{status}}
- <i {{bind-attr class=':task-status taskIconStatus'}}></i>
- </td>
+ <div class='align-left'>
+ <table class='detail-list'>
+ <tbody>
+ <tr>
+ <td>{{t 'common.status'}}</td>
+ <td>
+ {{status}}
+ <i {{bind-attr class=':task-status taskIconStatus'}}></i>
+ {{#if progressStr}} {{bs-badge content=progressStr}}{{/if}}
+ </td>
<td>
{{#if hasFailedTasks}}
<a href='{{unbound failedTasksLink}}'>FailedTasks</a>
{{/if}}
</td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class='align-right'>
- <table class='detail-list'>
- <tbody>
- <tr>
- <td>{{t 'common.time.start'}}</td>
- <td>{{formatUnixTimestamp startTime}}</td>
- </tr>
- <tr>
- <td>{{t 'common.time.end'}}</td>
- <td>{{formatUnixTimestamp endTime}}</td>
- </tr>
- <tr>
- <td>{{t 'common.time.duration'}}</td>
- <td>{{formatDuration startTime endTime}}</td>
- </tr>
- </tbody>
- </table>
- </div>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class='align-right'>
+ <table class='detail-list'>
+ <tbody>
+ <tr>
+ <td>{{t 'common.time.start'}}</td>
+ <td>{{formatUnixTimestamp startTime}}</td>
+ </tr>
+ <tr>
+ <td>{{t 'common.time.end'}}</td>
+ <td>{{formatUnixTimestamp endTime}}</td>
+ </tr>
+ <tr>
+ <td>{{t 'common.time.duration'}}</td>
+ <td>{{formatDuration startTime endTime}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
</div>
{{#if diagnostics}}
http://git-wip-us.apache.org/repos/asf/tez/blob/d51103db/tez-ui/src/main/webapp/app/templates/vertex/index.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/vertex/index.hbs b/tez-ui/src/main/webapp/app/templates/vertex/index.hbs
index cbb0c44..bc2e7ef 100644
--- a/tez-ui/src/main/webapp/app/templates/vertex/index.hbs
+++ b/tez-ui/src/main/webapp/app/templates/vertex/index.hbs
@@ -32,6 +32,7 @@
<td>
<i {{bind-attr class=':task-status iconStatus'}}></i>
{{status}}
+ {{#if progressStr}} {{bs-badge content=progressStr}}{{/if}}
</td>
</tr>
<tr>
[2/2] tez git commit: TEZ-2052. Tez UI: log view fixes,
show version from build,
better handling of ats url config. (Sreenath Somarajapuram via hitesh)
Posted by hi...@apache.org.
TEZ-2052. Tez UI: log view fixes, show version from build, better handling of ats url config. (Sreenath Somarajapuram via hitesh)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/2b12f4cb
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/2b12f4cb
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/2b12f4cb
Branch: refs/heads/master
Commit: 2b12f4cba60e043eaa725c54f7bcfb390460e24a
Parents: d51103d
Author: Hitesh Shah <hi...@apache.org>
Authored: Fri Feb 6 09:30:15 2015 -0800
Committer: Hitesh Shah <hi...@apache.org>
Committed: Fri Feb 6 09:30:15 2015 -0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
tez-ui/pom.xml | 12 ++++++++++++
tez-ui/src/main/webapp/app/scripts/app.js | 7 +++++++
tez-ui/src/main/webapp/app/scripts/configs.js | 1 +
.../controllers/dag-task-attempts-controller.js | 4 ++--
.../webapp/app/scripts/controllers/dag_tasks.js | 4 ++--
.../controllers/task_task_attempts_controller.js | 4 ++--
.../controllers/vertex_task_attempts_controller.js | 4 ++--
.../scripts/controllers/vertex_tasks_controller.js | 4 ++--
tez-ui/src/main/webapp/app/scripts/helpers/misc.js | 17 +++++++++++++++++
.../src/main/webapp/app/templates/application.hbs | 4 ++--
tez-ui/src/main/webapp/app/templates/tez-app.hbs | 2 +-
12 files changed, 51 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0732004..ab46d64 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -57,6 +57,7 @@ Release 0.6.1: Unreleased
INCOMPATIBLE CHANGES
ALL CHANGES:
+ TEZ-2052. Tez UI: log view fixes, show version from build, better handling of ats url config.
TEZ-2043. Tez UI: add progress info from am webservice to dag and vertex views.
TEZ-2032. Update CHANGES.txt to show 0.6.0 is released
TEZ-2018. App Tracking and History URL should point to the Tez UI.
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/pom.xml
----------------------------------------------------------------------
diff --git a/tez-ui/pom.xml b/tez-ui/pom.xml
index ed49f88..db9673f 100644
--- a/tez-ui/pom.xml
+++ b/tez-ui/pom.xml
@@ -130,10 +130,22 @@
<configuration>
<webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>
<warSourceDirectory>${webappDir}/dist</warSourceDirectory>
+ <warSourceExcludes>**/configs.js</warSourceExcludes>
<webResources>
<resource>
+ <filtering>false</filtering>
<directory>${basedir}/src/main/resources/</directory>
</resource>
+ <resource>
+ <filtering>false</filtering>
+ <directory>${webappDir}/dist</directory>
+ <exclude>**/configs.js</exclude>
+ </resource>
+ <resource>
+ <filtering>true</filtering>
+ <directory>${webappDir}/dist</directory>
+ <include>**/configs.js</include>
+ </resource>
</webResources>
</configuration>
</plugin>
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/app.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/app.js b/tez-ui/src/main/webapp/app/scripts/app.js
index 4fc461a..69d6407 100644
--- a/tez-ui/src/main/webapp/app/scripts/app.js
+++ b/tez-ui/src/main/webapp/app/scripts/app.js
@@ -34,7 +34,14 @@ var App = window.App = Em.Application.createWithMixins(Bootstrap, {
},
setConfigs: function (configs) {
+ if(configs.envDefaults.version == "${version}") {
+ delete configs.envDefaults.version;
+ }
App.Helpers.misc.merge(App.Configs, configs);
+ $.extend(App.env, {
+ timelineBaseUrl: App.Helpers.misc.normalizePath(App.env.timelineBaseUrl),
+ RMWebUrl: App.Helpers.misc.normalizePath(App.env.RMWebUrl)
+ });
App.advanceReadiness();
}
});
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/configs.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/configs.js b/tez-ui/src/main/webapp/app/scripts/configs.js
index b0397d8..1e2782f 100644
--- a/tez-ui/src/main/webapp/app/scripts/configs.js
+++ b/tez-ui/src/main/webapp/app/scripts/configs.js
@@ -20,6 +20,7 @@ App.setConfigs({
/* Environment configurations */
envDefaults: {
+ version: "${version}",
/*
* By default TEZ UI looks for timeline server at http://localhost:8188, uncomment and change
* the following value for pointing to a different domain.
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
index eaa533e..d473d9a 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
@@ -161,9 +161,9 @@ App.DagTaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentM
{{#unless view.cellContent}}\
Not Available\
{{else}}\
- <a href="//{{unbound view.cellContent}}">View</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
\
- <a href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
{{/unless}}\
</span>')
}),
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
index 41bd101..019d29a 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
@@ -180,9 +180,9 @@ App.DagTasksController = Em.ObjectController.extend(App.PaginatedContentMixin, A
{{#unless view.cellContent}}\
Not Available\
{{else}}\
- <a href="//{{unbound view.cellContent}}">View</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
\
- <a href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
{{/unless}}\
</span>')
}),
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/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
index 399124b..aacefe3 100644
--- 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
@@ -162,9 +162,9 @@ App.TaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentMixi
{{#unless view.cellContent}}\
Not Available\
{{else}}\
- <a href="//{{unbound view.cellContent}}">View</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
\
- <a href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
{{/unless}}\
</span>')
}),
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
index a525ba4..4c38f51 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
@@ -162,9 +162,9 @@ App.VertexTaskAttemptsController = Em.ObjectController.extend(App.PaginatedConte
{{#unless view.cellContent}}\
Not Available\
{{else}}\
- <a href="//{{unbound view.cellContent}}">View</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
\
- <a href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
{{/unless}}\
</span>')
}),
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
index 44f160e..4241a2b 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
@@ -170,9 +170,9 @@ App.VertexTasksController = Em.ObjectController.extend(App.PaginatedContentMixin
{{#unless view.cellContent}}\
Not Available\
{{else}}\
- <a href="//{{unbound view.cellContent}}">View</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
\
- <a href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
{{/unless}}\
</span>')
}),
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/helpers/misc.js b/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
index f115379..1bbb677 100644
--- a/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
+++ b/tez-ui/src/main/webapp/app/scripts/helpers/misc.js
@@ -161,6 +161,23 @@ App.Helpers.misc = {
};
},
+ /**
+ * Normalize path
+ * @param path {String}
+ * @return normalized path {String}
+ */
+ normalizePath: function (path) {
+ if(path && path.charAt(path.length - 1) == '/') {
+ path = path.slice(0, -1);
+ }
+ return path;
+ },
+
+ /**
+ * Merge content of obj2 into obj2, array elements will be concated.
+ * @param obj1 {Object}
+ * @param obj2 {Object}
+ */
merge: function objectMerge(obj1, obj2) {
$.each(obj2, function (key, val) {
if(Array.isArray(obj1[key]) && Array.isArray(val)) {
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/application.hbs b/tez-ui/src/main/webapp/app/templates/application.hbs
index 10d939e..b51818a 100644
--- a/tez-ui/src/main/webapp/app/templates/application.hbs
+++ b/tez-ui/src/main/webapp/app/templates/application.hbs
@@ -22,10 +22,10 @@
<div class="navbar navbar-static-top">
<div class="navbar-inner">
<div class="main-container">
- <a class="logo" href="/">
+ {{#link-to 'application' class="logo"}}
<img src="img/apache-tez-logo-transparent.png" width="70px"/>
<span>{{unbound App.env.version}}</span>
- </a>
+ {{/link-to}}
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/tez/blob/2b12f4cb/tez-ui/src/main/webapp/app/templates/tez-app.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/tez-app.hbs b/tez-ui/src/main/webapp/app/templates/tez-app.hbs
index 5ab983c..011fde7 100644
--- a/tez-ui/src/main/webapp/app/templates/tez-app.hbs
+++ b/tez-ui/src/main/webapp/app/templates/tez-app.hbs
@@ -28,7 +28,7 @@
<tbody>
<tr>
<td>YARN RM Tracking URL</td>
- <td><a {{bind-attr href=rmTrackingURL}}>{{unbound appId}}</a></td>
+ <td><a target="_blank" {{bind-attr href=rmTrackingURL}}>{{unbound appId}}</a></td>
</tr>
<tr>
<td>Attempt Id</td>