Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 72F50200C5C for ; Thu, 20 Apr 2017 11:57:52 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 71513160B9F; Thu, 20 Apr 2017 09:57:52 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 9C5AC160B91 for ; Thu, 20 Apr 2017 11:57:50 +0200 (CEST) Received: (qmail 90090 invoked by uid 500); 20 Apr 2017 09:57:49 -0000 Mailing-List: contact commits-help@tez.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tez.apache.org Delivered-To: mailing list commits@tez.apache.org Received: (qmail 90081 invoked by uid 99); 20 Apr 2017 09:57:49 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Apr 2017 09:57:49 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AEE75DFC31; Thu, 20 Apr 2017 09:57:49 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sree@apache.org To: commits@tez.apache.org Message-Id: <100b316f450c451cb81092168c189a61@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: tez git commit: TEZ-3631. Tez UI: TEZ_DAG_EXTRA_INFO compatibility changes - Makes All DAGs page faster (sree) Date: Thu, 20 Apr 2017 09:57:49 +0000 (UTC) archived-at: Thu, 20 Apr 2017 09:57:52 -0000 Repository: tez Updated Branches: refs/heads/master cadf31b5e -> 59f56a540 TEZ-3631. Tez UI: TEZ_DAG_EXTRA_INFO compatibility changes - Makes All DAGs page faster (sree) Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/59f56a54 Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/59f56a54 Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/59f56a54 Branch: refs/heads/master Commit: 59f56a5403dc8a34daa5f31aae50a407899fe910 Parents: cadf31b Author: Sreenath Somarajapuram Authored: Thu Apr 20 15:27:19 2017 +0530 Committer: Sreenath Somarajapuram Committed: Thu Apr 20 15:27:19 2017 +0530 ---------------------------------------------------------------------- tez-ui/src/main/webapp/app/adapters/dag-info.js | 22 ++++ .../app/components/home-table-controls.js | 40 +++++++ .../main/webapp/app/controllers/home/index.js | 6 +- tez-ui/src/main/webapp/app/entities/entity.js | 10 +- tez-ui/src/main/webapp/app/models/dag-info.js | 28 +++++ tez-ui/src/main/webapp/app/models/dag.js | 30 +++-- .../src/main/webapp/app/routes/dag/counters.js | 3 + .../src/main/webapp/app/routes/dag/graphical.js | 3 + tez-ui/src/main/webapp/app/routes/dag/index.js | 3 + .../src/main/webapp/app/routes/dag/swimlane.js | 3 + tez-ui/src/main/webapp/app/routes/home/index.js | 18 +++ .../src/main/webapp/app/serializers/dag-info.js | 60 ++++++++++ tez-ui/src/main/webapp/app/serializers/dag.js | 47 +------- tez-ui/src/main/webapp/app/styles/app.less | 1 + .../webapp/app/styles/home-table-controls.less | 22 ++++ .../webapp/app/styles/queries-page-search.less | 1 + tez-ui/src/main/webapp/app/styles/shared.less | 6 + .../components/home-table-controls.hbs | 24 ++++ .../main/webapp/app/templates/home/index.hbs | 1 + .../main/webapp/app/utils/download-dag-zip.js | 9 ++ .../src/main/webapp/config/default-app-conf.js | 3 +- tez-ui/src/main/webapp/package.json | 1 + .../components/home-table-controls-test.js | 80 +++++++++++++ .../webapp/tests/unit/adapters/dag-info-test.js | 30 +++++ .../tests/unit/controllers/home/index-test.js | 2 +- .../webapp/tests/unit/models/dag-info-test.js | 35 ++++++ .../main/webapp/tests/unit/models/dag-test.js | 44 +++++++ .../webapp/tests/unit/routes/home/index-test.js | 24 ++++ .../tests/unit/serializers/dag-info-test.js | 114 +++++++++++++++++++ .../webapp/tests/unit/serializers/dag-test.js | 26 ++--- .../tests/unit/serializers/timeline-test.js | 2 + 31 files changed, 630 insertions(+), 68 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/adapters/dag-info.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/adapters/dag-info.js b/tez-ui/src/main/webapp/app/adapters/dag-info.js new file mode 100644 index 0000000..b47e05f --- /dev/null +++ b/tez-ui/src/main/webapp/app/adapters/dag-info.js @@ -0,0 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import TimelineAdapter from './timeline'; + +export default TimelineAdapter.extend({ +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/components/home-table-controls.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/components/home-table-controls.js b/tez-ui/src/main/webapp/app/components/home-table-controls.js new file mode 100644 index 0000000..70c3863 --- /dev/null +++ b/tez-ui/src/main/webapp/app/components/home-table-controls.js @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ember from 'ember'; + +export default Ember.Component.extend({ + classNames: ['home-table-controls'], + + countersLoaded: Ember.computed("dataProcessor.processedRows.@each.counterGroupsHash", function () { + var processedRows = this.get("dataProcessor.processedRows"), + countersLoaded = true; + if(processedRows) { + countersLoaded = processedRows.some(function (row) { + return Object.keys(row.get("counterGroupsHash")).length !== 0; + }); + } + return countersLoaded; + }), + + actions: { + loadCounters: function () { + this.get('targetObject.targetObject').send('loadCounters'); + } + } +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/controllers/home/index.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/controllers/home/index.js b/tez-ui/src/main/webapp/app/controllers/home/index.js index 74050e3..5d8b290 100644 --- a/tez-ui/src/main/webapp/app/controllers/home/index.js +++ b/tez-ui/src/main/webapp/app/controllers/home/index.js @@ -52,7 +52,7 @@ export default TableController.extend({ loadingMore: false, headerComponentNames: ['dags-page-search', 'table-controls', 'pagination-ui'], - footerComponentNames: ['pagination-ui'], + footerComponentNames: ['home-table-controls', 'pagination-ui'], _definition: TableDefinition.create(), // Using computed, as observer won't fire if the property is not used @@ -89,7 +89,9 @@ export default TableController.extend({ pageNum: this.get("pageNum"), moreAvailable: this.get("moreAvailable"), - loadingMore: this.get("loadingMore") + loadingMore: this.get("loadingMore"), + + minRowsForFooter: 0 }); return definition; http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/entities/entity.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/entities/entity.js b/tez-ui/src/main/webapp/app/entities/entity.js index c8f602b..22960b9 100644 --- a/tez-ui/src/main/webapp/app/entities/entity.js +++ b/tez-ui/src/main/webapp/app/entities/entity.js @@ -185,13 +185,21 @@ var Entity = Ember.Object.extend(NameMixin, { if(needs) { MoreObject.forEach(needs, function (name, needOptions) { + var loadNeed; + needOptions = that.normalizeNeed(name, needOptions, parentModel, queryParams, urlParams); if(MoreObject.isFunction(needOptions.loadType)) { needOptions.loadType = needOptions.loadType.call(needOptions, parentModel); } - if(needOptions.loadType !== "demand") { + loadNeed = needOptions.loadType !== "demand"; + + if(options && options.demandNeeds) { + loadNeed = options.demandNeeds.indexOf(name) !== -1; + } + + if(loadNeed) { let needLoader = that._loadNeed(loader, parentModel, needOptions, options); if(needOptions.loadType !== "lazy") { http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/models/dag-info.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/models/dag-info.js b/tez-ui/src/main/webapp/app/models/dag-info.js new file mode 100644 index 0000000..38387b0 --- /dev/null +++ b/tez-ui/src/main/webapp/app/models/dag-info.js @@ -0,0 +1,28 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DS from 'ember-data'; + +import AMTimelineModel from './am-timeline'; + +export default AMTimelineModel.extend({ + + dagPlan: DS.attr('object'), + callerData: DS.attr('object'), + +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/models/dag.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/models/dag.js b/tez-ui/src/main/webapp/app/models/dag.js index 2ab4af3..4ddec74 100644 --- a/tez-ui/src/main/webapp/app/models/dag.js +++ b/tez-ui/src/main/webapp/app/models/dag.js @@ -19,9 +19,9 @@ import Ember from 'ember'; import DS from 'ember-data'; -import AMTimelineModel from './am-timeline'; +import DAGInfoModel from './dag-info'; -export default AMTimelineModel.extend({ +export default DAGInfoModel.extend({ needs: { am: { type: "dagAm", @@ -49,6 +49,12 @@ export default AMTimelineModel.extend({ } }, silent: true + }, + info: { + type: "dagInfo", + idKey: "entityID", + loadType: "demand", + silent: true } }, @@ -57,9 +63,9 @@ export default AMTimelineModel.extend({ submitter: DS.attr("string"), // Serialize when required - vertices: DS.attr('object'), - edges: DS.attr('object'), - vertexGroups: DS.attr('object'), + vertices: Ember.computed.or("dagPlan.vertices", "info.dagPlan.vertices"), + edges: Ember.computed.or("dagPlan.edges", "info.dagPlan.edges"), + vertexGroups: Ember.computed.or("dagPlan.vertexGroups", "info.dagPlan.vertexGroups"), domain: DS.attr("string"), containerLogs: DS.attr("object"), @@ -72,9 +78,17 @@ export default AMTimelineModel.extend({ vertexNameIdMap: DS.attr("object"), callerID: DS.attr("string"), - callerContext: DS.attr("string"), - callerDescription: DS.attr("string"), - callerType: DS.attr("string"), + callerContext: Ember.computed.or("callerData.callerContext", "info.callerData.callerContext"), + callerDescription: Ember.computed.or("callerData.callerDescription", "info.callerData.callerDescription"), + callerType: Ember.computed.or("callerData.callerType", "info.callerData.callerType"), amWsVersion: DS.attr("string"), + + info: DS.attr("object"), + + counterGroupsHash: Ember.computed("am.counterGroupsHash", "_counterGroups", "info.counterGroupsHash", function () { + var amCounters = this.get("am.counterGroupsHash"), + atsCounters = this.get("info.counterGroupsHash") || this._super(); + return amCounters ? Ember.$.extend({}, atsCounters, amCounters) : atsCounters; + }) }); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/counters.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/routes/dag/counters.js b/tez-ui/src/main/webapp/app/routes/dag/counters.js index be60c1d..a0a31b7 100644 --- a/tez-ui/src/main/webapp/app/routes/dag/counters.js +++ b/tez-ui/src/main/webapp/app/routes/dag/counters.js @@ -30,6 +30,9 @@ export default SingleAmPollsterRoute.extend({ }, load: function (value, query, options) { + options = Ember.$.extend({ + demandNeeds: ["info"] + }, options); return this.get("loader").queryRecord('dag', this.modelFor("dag").get("id"), options); }, http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/graphical.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/routes/dag/graphical.js b/tez-ui/src/main/webapp/app/routes/dag/graphical.js index 69d2de4..81117d0 100644 --- a/tez-ui/src/main/webapp/app/routes/dag/graphical.js +++ b/tez-ui/src/main/webapp/app/routes/dag/graphical.js @@ -30,6 +30,9 @@ export default MultiAmPollsterRoute.extend({ }, load: function (value, query, options) { + options = Ember.$.extend({ + demandNeeds: ["info", "dag"] + }, options); return this.get("loader").query('vertex', { dagID: this.modelFor("dag").get("id") }, options); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/index.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/routes/dag/index.js b/tez-ui/src/main/webapp/app/routes/dag/index.js index 0bf01b2..46c8b05 100644 --- a/tez-ui/src/main/webapp/app/routes/dag/index.js +++ b/tez-ui/src/main/webapp/app/routes/dag/index.js @@ -32,6 +32,9 @@ export default SingleAmPollsterRoute.extend({ }, load: function (value, query, options) { + options = Ember.$.extend({ + demandNeeds: ["info"] + }, options); return this.get("loader").queryRecord('dag', this.modelFor("dag").get("id"), options); }, http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/swimlane.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/routes/dag/swimlane.js b/tez-ui/src/main/webapp/app/routes/dag/swimlane.js index c79b00c..780184c 100644 --- a/tez-ui/src/main/webapp/app/routes/dag/swimlane.js +++ b/tez-ui/src/main/webapp/app/routes/dag/swimlane.js @@ -30,6 +30,9 @@ export default MultiAmPollsterRoute.extend({ }, load: function (value, query, options) { + options = Ember.$.extend({ + demandNeeds: ["info", "dag"] + }, options); return this.get("loader").query('vertex', { dagID: this.modelFor("dag").get("id") }, options); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/home/index.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/routes/home/index.js b/tez-ui/src/main/webapp/app/routes/home/index.js index 0cdcc7c..da6da79 100644 --- a/tez-ui/src/main/webapp/app/routes/home/index.js +++ b/tez-ui/src/main/webapp/app/routes/home/index.js @@ -52,6 +52,8 @@ export default ServerSideOpsRoute.extend({ entityType: "dag", loaderNamespace: "dags", + visibleRecords: [], + setupController: function (controller, model) { this._super(controller, model); Ember.run.later(this, "startCrumbBubble"); @@ -104,5 +106,21 @@ export default ServerSideOpsRoute.extend({ loader.unloadAll("ahs-app"); this._super(); }, + + loadCounters: function () { + var visibleRecords = this.get("visibleRecords").slice(), + loader = this.get("loader"); + + function loadInfoOfNextDAG() { + if(visibleRecords.length) { + loader.loadNeed(visibleRecords.shift(), "info").finally(loadInfoOfNextDAG); + } + } + + loadInfoOfNextDAG(); + }, + tableRowsChanged: function (records) { + this.set("visibleRecords", records); + } } }); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/serializers/dag-info.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/serializers/dag-info.js b/tez-ui/src/main/webapp/app/serializers/dag-info.js new file mode 100644 index 0000000..bba1d1b --- /dev/null +++ b/tez-ui/src/main/webapp/app/serializers/dag-info.js @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ember from 'ember'; + +import TimelineSerializer from './timeline'; + +export default TimelineSerializer.extend({ + maps: { + dagPlan: 'otherinfo.dagPlan', + callerData: 'callerData', + }, + + normalizeResourceHash: function (resourceHash) { + var data = resourceHash.data, + callerData = {}, + dagInfo = Ember.get(data, "otherinfo.dagPlan.dagInfo"), // New style, from TEZ-2851 + dagContext = Ember.get(data, "otherinfo.dagPlan.dagContext"); // Old style + + if(dagContext) { + callerData.callerContext = Ember.String.classify((Ember.get(dagContext, "context")||"").toLowerCase()); + callerData.callerDescription = Ember.get(dagContext, "description"); + callerData.callerType = Ember.get(dagContext, "callerType") || Ember.get(data, "otherinfo.callerType"); + } + else if(dagInfo) { + let infoObj = {}; + try{ + infoObj = JSON.parse(dagInfo); + }catch(e){ + infoObj = dagInfo; + } + + callerData.callerContext = Ember.get(infoObj, "context") || Ember.get(data, "otherinfo.callerContext"); + callerData.callerDescription = Ember.get(infoObj, "description") || Ember.get(dagInfo, "blob") || dagInfo; + } + + data.callerData = callerData; + + return resourceHash; + }, + + extractAttributes: function (modelClass, resourceHash) { + return this._super(modelClass, this.normalizeResourceHash(resourceHash)); + }, +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/serializers/dag.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/serializers/dag.js b/tez-ui/src/main/webapp/app/serializers/dag.js index 04dbdd2..9b3edfc 100644 --- a/tez-ui/src/main/webapp/app/serializers/dag.js +++ b/tez-ui/src/main/webapp/app/serializers/dag.js @@ -19,7 +19,7 @@ import Ember from 'ember'; -import TimelineSerializer from './timeline'; +import DAGInfoSerializer from './dag-info'; var MoreObject = more.Object; @@ -102,12 +102,14 @@ function getIdNameMap(source) { return idNameMap; } -export default TimelineSerializer.extend({ +export default DAGInfoSerializer.extend({ maps: { name: 'primaryfilters.dagName.0', submitter: 'primaryfilters.user.0', + callerID: 'primaryfilters.callerId.0', + atsStatus: getStatus, // progress @@ -115,10 +117,6 @@ export default TimelineSerializer.extend({ endTime: getEndTime, // duration - vertices: 'otherinfo.dagPlan.vertices', - edges: 'otherinfo.dagPlan.edges', - vertexGroups: 'otherinfo.dagPlan.vertexGroups', - // appID domain: 'domain', @@ -129,41 +127,6 @@ export default TimelineSerializer.extend({ vertexIdNameMap: getIdNameMap, vertexNameIdMap: 'otherinfo.vertexNameIdMapping', - callerID: 'primaryfilters.callerId.0', - callerContext: 'callerContext', - callerDescription: 'callerDescription', - callerType: 'callerType', - amWsVersion: 'otherinfo.amWebServiceVersion', - }, - - normalizeResourceHash: function (resourceHash) { - var data = resourceHash.data, - dagInfo = Ember.get(resourceHash, "data.otherinfo.dagPlan.dagInfo"), // New style, from TEZ-2851 - dagContext = Ember.get(resourceHash, "data.otherinfo.dagPlan.dagContext"); // Old style - - if(dagContext) { - data.callerContext = Ember.String.classify((Ember.get(dagContext, "context")||"").toLowerCase()); - data.callerDescription = Ember.get(dagContext, "description"); - data.callerType = Ember.get(dagContext, "callerType"); - } - else if(dagInfo) { - let infoObj = {}; - try{ - infoObj = JSON.parse(dagInfo); - }catch(e){ - infoObj = dagInfo; - } - - data.callerContext = Ember.get(infoObj, "context"); - data.callerDescription = Ember.get(infoObj, "description") || Ember.get(dagInfo, "blob") || dagInfo; - } - - return resourceHash; - }, - - extractAttributes: function (modelClass, resourceHash) { - return this._super(modelClass, this.normalizeResourceHash(resourceHash)); - }, - + } }); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/app.less ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/styles/app.less b/tez-ui/src/main/webapp/app/styles/app.less index 2ad6449..7c66229 100644 --- a/tez-ui/src/main/webapp/app/styles/app.less +++ b/tez-ui/src/main/webapp/app/styles/app.less @@ -43,6 +43,7 @@ @import "em-swimlane-vertex-name"; @import "em-table-status-cell"; @import "query-timeline"; +@import "home-table-controls"; // Modals @import "column-selector"; http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/home-table-controls.less ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/styles/home-table-controls.less b/tez-ui/src/main/webapp/app/styles/home-table-controls.less new file mode 100644 index 0000000..76d2a4d --- /dev/null +++ b/tez-ui/src/main/webapp/app/styles/home-table-controls.less @@ -0,0 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +.home-table-controls { + display: inline-block; + margin-top: 10px; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/queries-page-search.less ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/styles/queries-page-search.less b/tez-ui/src/main/webapp/app/styles/queries-page-search.less index a4a38ab..c279d7f 100644 --- a/tez-ui/src/main/webapp/app/styles/queries-page-search.less +++ b/tez-ui/src/main/webapp/app/styles/queries-page-search.less @@ -49,6 +49,7 @@ label { margin-bottom: 2px; + .no-wrap; } } } http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/shared.less ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/styles/shared.less b/tez-ui/src/main/webapp/app/styles/shared.less index 0fa7309..24da150 100644 --- a/tez-ui/src/main/webapp/app/styles/shared.less +++ b/tez-ui/src/main/webapp/app/styles/shared.less @@ -54,4 +54,10 @@ b { .em-progress-container { padding-top: 1px; } + + .table-footer { + .pagination-ui { + margin-top: 10px; + } + } } http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs b/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs new file mode 100644 index 0000000..459ff22 --- /dev/null +++ b/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs @@ -0,0 +1,24 @@ +{{! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +}} + + http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/templates/home/index.hbs ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/templates/home/index.hbs b/tez-ui/src/main/webapp/app/templates/home/index.hbs index e6f3aa0..ee68386 100644 --- a/tez-ui/src/main/webapp/app/templates/home/index.hbs +++ b/tez-ui/src/main/webapp/app/templates/home/index.hbs @@ -35,6 +35,7 @@ search="search" loadPage="loadPage" reload="reload" + rowsChanged="tableRowsChanged" }} {{#if queue}}
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/utils/download-dag-zip.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/app/utils/download-dag-zip.js b/tez-ui/src/main/webapp/app/utils/download-dag-zip.js index 8f10bde..0af83ae 100644 --- a/tez-ui/src/main/webapp/app/utils/download-dag-zip.js +++ b/tez-ui/src/main/webapp/app/utils/download-dag-zip.js @@ -306,6 +306,15 @@ export default function downloadDagZip(dag, options) { retryCount: 3, }, { + url: getUrl('TEZ_DAG_EXTRA_INFO', dagID), + context: { name: 'dag-extra-info', type: 'TEZ_DAG_EXTRA_INFO' }, + onFetch: onFetch, + onRetry: onRetry, + onItemFetched: processSingleItem, + onItemFail: processFailure, + retryCount: 3, + }, + { url: getUrl('TEZ_DAG_ID', dagID), context: { name: 'dag', type: 'TEZ_DAG_ID' }, onFetch: onFetch, http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/config/default-app-conf.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/config/default-app-conf.js b/tez-ui/src/main/webapp/config/default-app-conf.js index 1e38024..71c4ca7 100644 --- a/tez-ui/src/main/webapp/config/default-app-conf.js +++ b/tez-ui/src/main/webapp/config/default-app-conf.js @@ -46,7 +46,8 @@ module.exports = { // Tez App configurations task: 'TEZ_TASK_ID', attempt: 'TEZ_TASK_ATTEMPT_ID', - "hive-query": 'HIVE_QUERY_ID', + 'dag-info': 'TEZ_DAG_EXTRA_INFO', + 'hive-query': 'HIVE_QUERY_ID', app: 'TEZ_APPLICATION' }, http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/package.json ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/package.json b/tez-ui/src/main/webapp/package.json index 7c9e348..f4e30ff 100644 --- a/tez-ui/src/main/webapp/package.json +++ b/tez-ui/src/main/webapp/package.json @@ -12,6 +12,7 @@ "build": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember build", "start": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember server", "test": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember test", + "test-serve": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember test --serve", "build:mvn": "TMPDIR=tmp node/node ./node_modules/ember-cli/bin/ember build -prod", "test:mvn": "TMPDIR=tmp node/node ./node_modules/ember-cli/bin/ember test" http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js b/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js new file mode 100644 index 0000000..ccce2db --- /dev/null +++ b/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js @@ -0,0 +1,80 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +import Ember from 'ember'; + +moduleForComponent('home-table-controls', 'Integration | Component | home table controls', { + integration: true +}); + +test('Basic creation test', function(assert) { + this.render(hbs`{{home-table-controls}}`); + + assert.equal(this.$().text().trim(), 'Load Counters'); + assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2); + + // Template block usage:" + EOL + + this.render(hbs` + {{#home-table-controls}} + template block text + {{/home-table-controls}} + `); + + assert.equal(this.$().text().trim(), 'Load Counters'); +}); + +test('countersLoaded test', function(assert) { + this.set("dataProcessor", { + processedRows: [Ember.Object.create({ + counterGroupsHash: { + counter: {} + } + }), Ember.Object.create({ + counterGroupsHash: { + counter: {} + } + })] + }); + this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`); + assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2); + + this.set("dataProcessor", { + processedRows: [Ember.Object.create({ + counterGroupsHash: {} + }), Ember.Object.create({ + counterGroupsHash: { + counter: {} + } + })] + }); + this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`); + assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2); + + this.set("dataProcessor", { + processedRows: [Ember.Object.create({ + counterGroupsHash: {} + }), Ember.Object.create({ + counterGroupsHash: {} + })] + }); + this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`); + assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), -1); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js new file mode 100644 index 0000000..44eebcf --- /dev/null +++ b/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js @@ -0,0 +1,30 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('adapter:dag-info', 'Unit | Adapter | dag info', { + // Specify the other units that are required for this test. + // needs: ['serializer:foo'] +}); + +test('Basic creation test', function(assert) { + let adapter = this.subject(); + + assert.ok(adapter); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js b/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js index a9e5ac1..0e3977a 100644 --- a/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js +++ b/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js @@ -47,7 +47,7 @@ test('Basic creation test', function(assert) { assert.ok(controller.queryParams); assert.ok(controller.headerComponentNames); assert.equal(controller.headerComponentNames.length, 3); - assert.equal(controller.footerComponentNames.length, 1); + assert.equal(controller.footerComponentNames.length, 2); assert.ok(controller._definition); assert.ok(controller.definition); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js new file mode 100644 index 0000000..f2ceca3 --- /dev/null +++ b/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { moduleForModel, test } from 'ember-qunit'; + +moduleForModel('dag-info', 'Unit | Model | dag info', { + // Specify the other units that are required for this test. + needs: [] +}); + +test('Basic creation test', function(assert) { + let model = this.subject(); + // let store = this.store(); + assert.ok(!!model); + + assert.ok(model.dagPlan); + assert.ok(model.callerData); +}); + + http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/models/dag-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/models/dag-test.js b/tez-ui/src/main/webapp/tests/unit/models/dag-test.js index 06e0ec1..468c87f 100644 --- a/tez-ui/src/main/webapp/tests/unit/models/dag-test.js +++ b/tez-ui/src/main/webapp/tests/unit/models/dag-test.js @@ -35,6 +35,7 @@ test('Basic creation test', function(assert) { assert.ok(!!model); assert.ok(!!model.needs.am); + assert.ok(!!model.needs.info); assert.equal(model.get("queue"), testQueue); }); @@ -56,6 +57,10 @@ test('Basic creation test', function(assert) { assert.ok(model.callerDescription); assert.ok(model.callerType); + assert.ok(model.dagPlan); + assert.ok(model.callerData); + assert.ok(model.info); + assert.ok(model.amWsVersion); }); @@ -95,3 +100,42 @@ test('queue test', function(assert) { assert.equal(model.get("queue"), queueName); }); }); + +test('vertices, edges & vertexGroups test', function(assert) { + let testVertices = {}, + testEdges = {}, + testVertexGroups = {}, + model = this.subject({ + dagPlan: { + vertices: testVertices, + edges: testEdges, + vertexGroups: testVertexGroups + } + }); + + assert.equal(model.get("vertices"), testVertices); + assert.equal(model.get("edges"), testEdges); + assert.equal(model.get("vertexGroups"), testVertexGroups); + + Ember.run(function () { + testVertices = {}; + testEdges = {}; + testVertexGroups = {}; + + model.set("info", { + dagPlan: { + vertices: testVertices, + edges: testEdges, + vertexGroups: testVertexGroups + } + }); + assert.notEqual(model.get("vertices"), testVertices); + assert.notEqual(model.get("edges"), testEdges); + assert.notEqual(model.get("vertexGroups"), testVertexGroups); + + model.set("dagPlan", null); + assert.equal(model.get("vertices"), testVertices); + assert.equal(model.get("edges"), testEdges); + assert.equal(model.get("vertexGroups"), testVertexGroups); + }); +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js b/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js index d35a325..afe83cb 100644 --- a/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js +++ b/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js @@ -40,6 +40,8 @@ test('Basic creation test', function(assert) { assert.ok(route.filterRecords); assert.ok(route.actions.willTransition); + assert.ok(route.actions.loadCounters); + assert.ok(route.actions.tableRowsChanged); }); test('refresh test', function(assert) { @@ -162,3 +164,25 @@ test('actions.willTransition test', function(assert) { assert.expect(2); route.send("willTransition"); }); + +test('actions.loadCounters test', function(assert) { + let route = this.subject({ + controller: Ember.Object.create() + }), + visibleRecords = [{}, {}, {}], + index = 0; + + route.loader = { + loadNeed: function (record, name) { + assert.equal(record, visibleRecords[index++]); + assert.equal(name, "info"); + return Ember.RSVP.resolve(record); + } + }; + assert.expect(3 * 2); + + route.send("loadCounters"); + + route.set("visibleRecords", visibleRecords); + route.send("loadCounters"); +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js new file mode 100644 index 0000000..b5c46f0 --- /dev/null +++ b/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js @@ -0,0 +1,114 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('serializer:dag-info', 'Unit | Serializer | dag info', { + // Specify the other units that are required for this test. + // needs: ['serializer:dag-info'] +}); + +test('Basic creation test', function(assert) { + let serializer = this.subject(); + + assert.ok(serializer); + + assert.ok(serializer.normalizeResourceHash); + + assert.ok(serializer.maps.dagPlan); + assert.ok(serializer.maps.callerData); + + assert.equal(Object.keys(serializer.get("maps")).length, 2 + 7); //2 own & 7 inherited +}); + +test('normalizeResourceHash test', function(assert) { + let serializer = this.subject(), + + callerInfo = { + callerId: "id_1", + callerType: "HIVE_QUERY_ID", + context: "Hive", + description: "hive query" + }, + + data; + + // dagContext test + data = serializer.normalizeResourceHash({ + data: { + otherinfo: { + dagPlan: { + dagContext: callerInfo + } + } + } + }).data; + + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.equal(data.callerData.callerType, callerInfo.callerType); + + // dagInfo test + data = serializer.normalizeResourceHash({ + data: { + otherinfo: { + dagPlan: { + dagInfo: `{"context": "${callerInfo.context}", "description": "${callerInfo.description}"}` + } + } + } + }).data; + + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.notOk(data.callerData.callerType); + + // dagInfo.blob test + data = serializer.normalizeResourceHash({ + data: { + otherinfo: { + dagPlan: { + dagInfo: { + context: callerInfo.context, + blob: callerInfo.description + } + } + } + } + }).data; + + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.notOk(data.callerData.callerType); + + // dagContext have presidence over dagInfo + data = serializer.normalizeResourceHash({ + data: { + otherinfo: { + dagPlan: { + dagContext: callerInfo, + dagInfo: `{"context": "RandomContext", "description": "RandomDesc"}` + } + } + } + }).data; + + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.equal(data.callerData.callerType, callerInfo.callerType); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js index e782869..f57d1af 100644 --- a/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js +++ b/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js @@ -36,7 +36,7 @@ test('Basic creation test', function(assert) { assert.ok(serializer.maps.containerLogs); assert.ok(serializer.maps.vertexIdNameMap); - assert.equal(Object.keys(serializer.get("maps")).length, 18 + 5); //18 own & 7 inherited + assert.equal(Object.keys(serializer.get("maps")).length, 12 + 7); //12 own & 9 inherited (2 overwritten) }); test('atsStatus test', function(assert) { @@ -158,9 +158,9 @@ test('normalizeResourceHash test', function(assert) { } }).data; - assert.equal(data.callerContext, callerInfo.context); - assert.equal(data.callerDescription, callerInfo.description); - assert.equal(data.callerType, callerInfo.callerType); + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.equal(data.callerData.callerType, callerInfo.callerType); // dagInfo test data = serializer.normalizeResourceHash({ @@ -173,9 +173,9 @@ test('normalizeResourceHash test', function(assert) { } }).data; - assert.equal(data.callerContext, callerInfo.context); - assert.equal(data.callerDescription, callerInfo.description); - assert.notOk(data.callerType); + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.notOk(data.callerData.callerType); // dagInfo.blob test data = serializer.normalizeResourceHash({ @@ -191,9 +191,9 @@ test('normalizeResourceHash test', function(assert) { } }).data; - assert.equal(data.callerContext, callerInfo.context); - assert.equal(data.callerDescription, callerInfo.description); - assert.notOk(data.callerType); + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.notOk(data.callerData.callerType); // dagContext have presidence over dagInfo data = serializer.normalizeResourceHash({ @@ -207,7 +207,7 @@ test('normalizeResourceHash test', function(assert) { } }).data; - assert.equal(data.callerContext, callerInfo.context); - assert.equal(data.callerDescription, callerInfo.description); - assert.equal(data.callerType, callerInfo.callerType); + assert.equal(data.callerData.callerContext, callerInfo.context); + assert.equal(data.callerData.callerDescription, callerInfo.description); + assert.equal(data.callerData.callerType, callerInfo.callerType); }); http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js ---------------------------------------------------------------------- diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js index 3c267ad..8f39df7 100644 --- a/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js +++ b/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js @@ -29,6 +29,8 @@ test('Basic creation test', function(assert) { assert.ok(serializer); assert.ok(serializer.extractArrayPayload); assert.ok(serializer.maps); + + assert.equal(Object.keys(serializer.get("maps")).length, 7); }); test('extractArrayPayload test', function(assert) {