You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by sr...@apache.org on 2017/02/02 08:33:57 UTC
tez git commit: TEZ-3593. Tez UI: Issues in timeline page (sree)
Repository: tez
Updated Branches:
refs/heads/master 9b158ee68 -> 17f428fb7
TEZ-3593. Tez UI: Issues in timeline page (sree)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/17f428fb
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/17f428fb
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/17f428fb
Branch: refs/heads/master
Commit: 17f428fb73307c11e1ca135b496800d47a23910d
Parents: 9b158ee
Author: Sreenath Somarajapuram <sr...@apache.org>
Authored: Thu Feb 2 14:03:48 2017 +0530
Committer: Sreenath Somarajapuram <sr...@apache.org>
Committed: Thu Feb 2 14:03:48 2017 +0530
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../webapp/app/components/query-timeline.js | 73 +++++++-----
.../webapp/app/controllers/query/timeline.js | 12 --
.../main/webapp/app/styles/query-timeline.less | 92 +++++++++++----
.../app/templates/components/query-timeline.hbs | 118 ++++++++++++++++---
.../webapp/app/templates/query/timeline.hbs | 113 +++---------------
.../components/query-timeline-test.js | 100 +++++++++++-----
7 files changed, 303 insertions(+), 206 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7d3e1db..1624b50 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -183,6 +183,7 @@ ALL CHANGES:
TEZ-3554. Add a link to get to all logs from Tez UI while job is running
TEZ-3591. Tez UI: Logs url in all DAGs doesn't open in a new window
TEZ-3592. Tez UI: Search issues
+ TEZ-3593. Tez UI: Issues in timeline page
Release 0.8.5: Unreleased
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/app/components/query-timeline.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/components/query-timeline.js b/tez-ui/src/main/webapp/app/components/query-timeline.js
index e743530..d5a0667 100644
--- a/tez-ui/src/main/webapp/app/components/query-timeline.js
+++ b/tez-ui/src/main/webapp/app/components/query-timeline.js
@@ -23,42 +23,57 @@ export default Ember.Component.extend({
perf: null,
- getDisplayedPerfValues: function (perfHash) {
- return [[
- perfHash["compile"] || 0,
- perfHash["parse"] || 0,
- perfHash["semanticAnalyze"] || 0,
- perfHash["TezBuildDag"] || 0,
- ], [
- perfHash["TezSubmitDag"] || 0,
- perfHash["TezSubmitToRunningDag"] || 0,
- ], [
- perfHash["TezRunDag"] || 0,
- ], [
- perfHash["PostATSHook"] || 0,
- perfHash["RemoveTempOrDuplicateFiles"] || 0,
- perfHash["RenameOrMoveFiles"] || 0,
- ]];
- },
+ normalizedPerf: Ember.computed("perf", function () {
+ var perf = this.get("perf") || {};
+
+ // Create a copy of perf with default values
+ perf = Ember.$.extend({
+ compile: 0,
+ parse: 0,
+ TezBuildDag: 0,
+
+ TezSubmitDag: 0,
+ TezSubmitToRunningDag: 0,
+
+ TezRunDag: 0,
+
+ PostATSHook: 0,
+ RemoveTempOrDuplicateFiles: 0,
+ RenameOrMoveFiles: 0
+ }, perf);
+
+ perf.groupTotal = {
+ pre: perf.compile + perf.parse + perf.TezBuildDag,
+ submit: perf.TezSubmitDag + perf.TezSubmitToRunningDag,
+ running: perf.TezRunDag,
+ post: perf.PostATSHook + perf.RemoveTempOrDuplicateFiles + perf.RenameOrMoveFiles,
+ };
- alignBars: function (bars, widthFactors) {
- var totalValue = widthFactors.reduce((a, b) => a + b, 0);
+ perf.total = perf.groupTotal.pre +
+ perf.groupTotal.submit +
+ perf.groupTotal.running +
+ perf.groupTotal.post;
+
+ return perf;
+ }),
+
+ alignBars: function (bars, perf) {
bars.each(function (index, bar) {
- var width = (widthFactors[index] / totalValue) * 100;
- Ember.$(bar).css({
+ var width;
+
+ bar = Ember.$(bar);
+ width = (Ember.get(perf, bar.attr("data")) / perf.total) * 100;
+
+ bar.css({
width: `${width}%`
});
});
},
- didInsertElement: Ember.observer("perf", function () {
- var perfs = this.getDisplayedPerfValues(this.get("perf"));
-
- this.alignBars(this.$().find(".sub-groups").find(".bar"), [].concat.apply([], perfs));
+ didInsertElement: Ember.observer("normalizePerf", function () {
+ var perf = this.get("normalizedPerf");
- this.alignBars(this.$().find(".groups").find(".bar"), perfs.map(function (subPerfs) {
- return subPerfs.reduce((a, b) => a + b, 0);
- }));
+ this.alignBars(this.$().find(".sub-groups").find(".bar"), perf);
+ this.alignBars(this.$().find(".groups").find(".bar"), perf);
})
-
});
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/app/controllers/query/timeline.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/controllers/query/timeline.js b/tez-ui/src/main/webapp/app/controllers/query/timeline.js
index 3b72efb..b52fc26 100644
--- a/tez-ui/src/main/webapp/app/controllers/query/timeline.js
+++ b/tez-ui/src/main/webapp/app/controllers/query/timeline.js
@@ -38,18 +38,6 @@ export default TableController.extend({
}
}]),
- phaseTimes: Ember.computed("model", function () {
- var perf = this.get("model.perf");
- return {
- pre: perf.compile + perf.parse + perf.semanticAnalyze + perf.TezBuildDag,
- submission: perf.TezSubmitDag + perf.TezSubmitToRunningDag,
- run: perf.TezRunDag,
- post: perf.RemoveTempOrDuplicateFiles +
- perf.RemoveTempOrDuplicateFiles +
- perf.RenameOrMoveFiles
- };
- }),
-
rows: Ember.computed("model.perf", function () {
var perf = this.get("model.perf"),
rows = [];
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/app/styles/query-timeline.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/query-timeline.less b/tez-ui/src/main/webapp/app/styles/query-timeline.less
index b5bfb54..1591563 100644
--- a/tez-ui/src/main/webapp/app/styles/query-timeline.less
+++ b/tez-ui/src/main/webapp/app/styles/query-timeline.less
@@ -16,9 +16,21 @@
* limitations under the License.
*/
-.query-timeline {
+// Mixins
+.hue-bkg(@hue) {
+ background-color: hsl(@hue, .9, .75);
+}
+
+.nth-hue-bkg(@index, @hue) {
+ &:nth-child(@{index}) {
+ .hue-bkg(@hue);
+ }
+}
+
+.timeline-bars {
font-size: 0;
margin: 20px 0 20px 0;
+ overflow: hidden;
.no-select;
@@ -78,36 +90,70 @@
border: none;
}
- &:nth-child(1) {
- background-color: lighten(#FF355E, 20%);
- }
- &:nth-child(2) {
- background-color: lighten(#FD5B78, 20%);
+ .nth-hue-bkg(1, 0);
+ .nth-hue-bkg(2, 40);
+ .nth-hue-bkg(3, 80);
+ .nth-hue-bkg(4, 200);
+ .nth-hue-bkg(5, 160);
+ .nth-hue-bkg(6, 120);
+ .nth-hue-bkg(7, 240);
+ .nth-hue-bkg(8, 280);
+ .nth-hue-bkg(9, 320);
+ }
+ }
+}
+
+.query-timeline {
+ table.detail-list {
+ i {
+ display: inline-block;
+
+ width: .85em;
+ height: .85em;
+ border: 1px solid @border-color;
+ border-radius: .5em;
+
+ margin-right: 5px;
+ margin-top: 1px;
+ }
+
+ &:nth-of-type(1) tbody tr {
+ &:nth-of-type(1) i {
+ .hue-bkg(0);
}
- &:nth-child(3) {
- background-color: lighten(#FF6037, 20%);
+ &:nth-of-type(2) i {
+ .hue-bkg(40);
}
- &:nth-child(4) {
- background-color: lighten(#FF9966, 20%);
+ &:nth-of-type(3) i {
+ .hue-bkg(80);
}
- &:nth-child(5) {
- background-color: lighten(#FF9933, 20%);
+ }
+
+ &:nth-of-type(2) tbody tr {
+ &:nth-of-type(1) i {
+ .hue-bkg(200);
}
- &:nth-child(6) {
- background-color: lighten(#FFCC33, 20%);
+ &:nth-of-type(2) i {
+ .hue-bkg(160);
}
- &:nth-child(7) {
- background-color: lighten(#FFFF66, 20%);
+ }
+
+ &:nth-of-type(3) tbody tr {
+ &:nth-of-type(1) i {
+ .hue-bkg(120);
}
- &:nth-child(8) {
- background-color: lighten(#CCFF00, 20%);
+ }
+
+ &:nth-of-type(4) tbody tr {
+ &:nth-of-type(1) i {
+ .hue-bkg(240);
}
- &:nth-child(9) {
- background-color: lighten(#AAF0D1, 10%);
+ &:nth-of-type(2) i {
+ .hue-bkg(280);
}
- &:nth-child(10) {
- background-color: lighten(#FF6EFF, 20%);
+ &:nth-of-type(3) i {
+ .hue-bkg(320);
}
- }
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/app/templates/components/query-timeline.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/components/query-timeline.hbs b/tez-ui/src/main/webapp/app/templates/components/query-timeline.hbs
index 681b7b5..98d33d2 100644
--- a/tez-ui/src/main/webapp/app/templates/components/query-timeline.hbs
+++ b/tez-ui/src/main/webapp/app/templates/components/query-timeline.hbs
@@ -16,25 +16,109 @@
* limitations under the License.
}}
-<div class="groups">
- <div class="bar" title="Pre-Execution + DAG construction">Pre-Execution + DAG construction</div>
- <div class="bar" title="DAG Submission">DAG Submission</div>
- <div class="bar" title="DAG Runtime">DAG Runtime</div>
- <div class="bar" title="Post Execution">Post Execution</div>
-</div>
+<div class="timeline-bars">
+ <div class="groups">
+ <div class="bar" data="groupTotal.pre" title="Pre-Execution + DAG construction">Pre-Execution + DAG construction</div>
+ <div class="bar" data="groupTotal.submit" title="DAG Submission">DAG Submission</div>
+ <div class="bar" data="groupTotal.running" title="DAG Runtime">DAG Runtime</div>
+ <div class="bar" data="groupTotal.post" title="Post Execution">Post Execution</div>
+ </div>
-<div class="sub-groups">
- <div class="bar" title="Compile">Compile</div>
- <div class="bar" title="Parse">Parse</div>
- <div class="bar" title="Semantic Analyze">Semantic Analyze</div>
- <div class="bar" title="Build Dag">Build Dag</div>
+ <div class="sub-groups">
+ <div class="bar" data="compile" title="Compile">Compile</div>
+ <div class="bar" data="parse" title="Parse">Parse</div>
+ <div class="bar" data="TezBuildDag" title="Build Dag">Build Dag</div>
- <div class="bar" title="Submit Dag">Submit Dag</div>
- <div class="bar" title="Submit To Running">Submit To Running</div>
+ <div class="bar" data="TezSubmitDag" title="Submit Dag">Submit Dag</div>
+ <div class="bar" data="TezSubmitToRunningDag" title="Submit To Running">Submit To Running</div>
- <div class="bar" title="Run Dag">Run Dag</div>
+ <div class="bar" data="TezRunDag" title="Run Dag">Run Dag</div>
- <div class="bar" title="Post ATS Hook">Post ATS Hook</div>
- <div class="bar" title="Remove Files">Remove Files</div>
- <div class="bar" title="Rename Or Move Files">Rename Or Move Files</div>
+ <div class="bar" data="PostATSHook" title="Post ATS Hook">Post ATS Hook</div>
+ <div class="bar" data="RemoveTempOrDuplicateFiles" title="Remove Files">Remove Files</div>
+ <div class="bar" data="RenameOrMoveFiles" title="Rename Or Move Files">Rename Or Move Files</div>
+ </div>
</div>
+
+<table class='detail-list'>
+ <thead>
+ <tr>
+ <th colspan=2>Pre-Execution + DAG construction : {{txt normalizedPerf.groupTotal.pre type="duration"}}</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td><i></i>Compile</td>
+ <td>{{txt normalizedPerf.compile type="duration"}}</td>
+ </tr>
+ <tr>
+ <td><i></i>Parse</td>
+ <td>{{txt normalizedPerf.parse type="duration"}}</td>
+ </tr>
+ <tr>
+ <td><i></i>Build Dag</td>
+ <td>{{txt normalizedPerf.TezBuildDag type="duration"}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<table class='detail-list'>
+ <thead>
+ <tr>
+ <th colspan=2>DAG Submission : {{txt normalizedPerf.groupTotal.submit type="duration"}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><i></i>Submit Dag</td>
+ <td>{{txt normalizedPerf.TezSubmitDag type="duration"}}</td>
+ </tr>
+ <tr>
+ <td><i></i>Submit To Running</td>
+ <td>{{txt normalizedPerf.TezSubmitToRunningDag type="duration"}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<table class='detail-list'>
+ <thead>
+ <tr>
+ <th colspan=2>DAG Runtime : {{txt normalizedPerf.groupTotal.running type="duration"}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><i></i>Run Dag</td>
+ <td>{{txt normalizedPerf.TezRunDag type="duration"}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<table class='detail-list'>
+ <thead>
+ <tr>
+ <th colspan=2>Post Execution : {{txt normalizedPerf.groupTotal.post type="duration"}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#if normalizedPerf.RemoveTempOrDuplicateFiles}}
+ <tr>
+ <td><i></i>Post ATS Hook</td>
+ <td>{{txt normalizedPerf.PostATSHook type="duration"}}</td>
+ </tr>
+ {{/if}}
+ {{#if normalizedPerf.RemoveTempOrDuplicateFiles}}
+ <tr>
+ <td><i></i>Remove Files</td>
+ <td>{{txt normalizedPerf.RemoveTempOrDuplicateFiles type="duration"}}</td>
+ </tr>
+ {{/if}}
+ {{#if normalizedPerf.RenameOrMoveFiles}}
+ <tr>
+ <td><i></i>Rename Or Move Files</td>
+ <td>{{txt normalizedPerf.RenameOrMoveFiles type="duration"}}</td>
+ </tr>
+ {{/if}}
+ </tbody>
+</table>
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/app/templates/query/timeline.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/query/timeline.hbs b/tez-ui/src/main/webapp/app/templates/query/timeline.hbs
index 9a728a7..2a84892 100644
--- a/tez-ui/src/main/webapp/app/templates/query/timeline.hbs
+++ b/tez-ui/src/main/webapp/app/templates/query/timeline.hbs
@@ -18,108 +18,25 @@
{{#if loaded}}
- {{query-timeline perf=model.perf}}
+ {{#if model.perf}}
+ {{query-timeline perf=model.perf}}
- <table class='detail-list'>
- <thead>
- <tr>
- <th colspan=2>Pre-Execution + DAG construction : {{txt phaseTimes.pre type="duration"}}</th>
- </tr>
- </thead>
+ {{em-table
+ columns=columns
+ rows=rows
- <tbody>
- <tr>
- <td>Compile</td>
- <td>{{txt model.perf.compile type="duration"}}</td>
- </tr>
- <tr>
- <td>Parse</td>
- <td>{{txt model.perf.parse type="duration"}}</td>
- </tr>
- <tr>
- <td>Semantic Analyze</td>
- <td>{{txt model.perf.semanticAnalyze type="duration"}}</td>
- </tr>
- <tr>
- <td>Build Dag</td>
- <td>{{txt model.perf.TezBuildDag type="duration"}}</td>
- </tr>
- </tbody>
- </table>
+ rowCount=rows.length
+ definition=definition
- <table class='detail-list'>
- <thead>
- <tr>
- <th colspan=2>DAG Submission : {{txt phaseTimes.submission type="duration"}}</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Submit Dag</td>
- <td>{{txt model.perf.TezSubmitDag type="duration"}}</td>
- </tr>
- <tr>
- <td>Submit To Running</td>
- <td>{{txt model.perf.TezSubmitToRunningDag type="duration"}}</td>
- </tr>
- </tbody>
- </table>
-
- <table class='detail-list'>
- <thead>
- <tr>
- <th colspan=2>DAG Runtime : {{txt phaseTimes.run type="duration"}}</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Run Dag</td>
- <td>{{txt model.perf.TezRunDag type="duration"}}</td>
- </tr>
- </tbody>
- </table>
-
- <table class='detail-list'>
- <thead>
- <tr>
- <th colspan=2>Post Execution : {{txt phaseTimes.post type="duration"}}</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Post ATS Hook</td>
- <td>{{txt model.perf.PostATSHook type="duration"}}</td>
- </tr>
- {{#if model.perf.RemoveTempOrDuplicateFiles}}
- <tr>
- <td>Remove Files</td>
- <td>{{txt model.perf.RemoveTempOrDuplicateFiles type="duration"}}</td>
- </tr>
- {{/if}}
- {{#if model.perf.RenameOrMoveFiles}}
- <tr>
- <td>Rename Or Move Files</td>
- <td>{{txt model.perf.RenameOrMoveFiles type="duration"}}</td>
- </tr>
- {{/if}}
- </tbody>
- </table>
-
- <br/>
-
- {{em-table
- columns=columns
- rows=rows
-
- rowCount=configs.length
- definition=definition
-
- enablePagination=false
-
- searchAction="searchChanged"
- sortAction="sortChanged"
- }}
+ enablePagination=false
+ searchAction="searchChanged"
+ sortAction="sortChanged"
+ }}
+ {{else}}
+ <h2>Data not available to display Timeline!</h2>
+ <h4>You may be using an older version of Hive.</h4>
+ {{/if}}
{{else}}
{{partial "loading"}}
http://git-wip-us.apache.org/repos/asf/tez/blob/17f428fb/tez-ui/src/main/webapp/tests/integration/components/query-timeline-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/integration/components/query-timeline-test.js b/tez-ui/src/main/webapp/tests/integration/components/query-timeline-test.js
index 907896d..143f299 100644
--- a/tez-ui/src/main/webapp/tests/integration/components/query-timeline-test.js
+++ b/tez-ui/src/main/webapp/tests/integration/components/query-timeline-test.js
@@ -27,7 +27,12 @@ test('Basic creation test', function(assert) {
this.set("perf", {});
this.render(hbs`{{query-timeline perf=perf}}`);
- assert.equal(this.$().find(".bar").length, 10 + 4);
+ assert.equal(this.$().find(".bar").length, 9 + 4);
+
+ this.set("perf", null);
+ this.render(hbs`{{query-timeline perf=perf}}`);
+
+ assert.equal(this.$().find(".bar").length, 9 + 4);
this.render(hbs`
{{#query-timeline perf=perf}}
@@ -35,17 +40,34 @@ test('Basic creation test', function(assert) {
{{/query-timeline}}
`);
- assert.equal(this.$().find(".bar").length, 10 + 4);
+ assert.equal(this.$().find(".bar").length, 9 + 4);
+});
+
+test('Default value test', function(assert) {
+ this.set("perf", {});
+ this.render(hbs`{{query-timeline perf=perf}}`);
+
+ let bars = this.$().find(".sub-groups").find(".bar");
+ assert.equal(bars.length, 9);
+
+ assert.equal(bars[0].style.width, 0);
+ assert.equal(bars[1].style.width, 0);
+ assert.equal(bars[2].style.width, 0);
+ assert.equal(bars[3].style.width, 0);
+ assert.equal(bars[4].style.width, 0);
+ assert.equal(bars[5].style.width, 0);
+ assert.equal(bars[6].style.width, 0);
+ assert.equal(bars[7].style.width, 0);
+ assert.equal(bars[8].style.width, 0);
});
test('alignBars test', function(assert) {
- var total = 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100;
+ var total = 10 + 20 + 40 + 50 + 60 + 70 + 80 + 90 + 100;
var bars;
this.set("perf", {
"compile": 10,
"parse": 20,
- "semanticAnalyze": 30,
"TezBuildDag": 40,
"TezSubmitDag": 50,
@@ -68,33 +90,31 @@ test('alignBars test', function(assert) {
bars = this.$().find(".groups").find(".bar");
assert.equal(bars.length, 4);
- assertWidth(bars[0], 10 + 20 + 30 + 40);
+ assertWidth(bars[0], 10 + 20 + 40);
assertWidth(bars[1], 50 + 60);
assertWidth(bars[2], 70);
assertWidth(bars[3], 80 + 90 + 100);
bars = this.$().find(".sub-groups").find(".bar");
- assert.equal(bars.length, 10);
+ assert.equal(bars.length, 9);
assertWidth(bars[0], 10);
assertWidth(bars[1], 20);
- assertWidth(bars[2], 30);
- assertWidth(bars[3], 40);
- assertWidth(bars[4], 50);
- assertWidth(bars[5], 60);
- assertWidth(bars[6], 70);
- assertWidth(bars[7], 80);
- assertWidth(bars[8], 90);
- assertWidth(bars[9], 100);
+ assertWidth(bars[2], 40);
+ assertWidth(bars[3], 50);
+ assertWidth(bars[4], 60);
+ assertWidth(bars[5], 70);
+ assertWidth(bars[6], 80);
+ assertWidth(bars[7], 90);
+ assertWidth(bars[8], 100);
});
test('alignBars - without RenameOrMoveFiles test', function(assert) {
- var total = 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90;
+ var total = 10 + 20 + 40 + 50 + 60 + 70 + 80 + 90 + 0;
var bars;
this.set("perf", {
"compile": 10,
"parse": 20,
- "semanticAnalyze": 30,
"TezBuildDag": 40,
"TezSubmitDag": 50,
@@ -104,6 +124,7 @@ test('alignBars - without RenameOrMoveFiles test', function(assert) {
"PostATSHook": 80,
"RemoveTempOrDuplicateFiles": 90,
+ // RenameOrMoveFiles not added
});
this.render(hbs`{{query-timeline perf=perf}}`);
@@ -116,21 +137,46 @@ test('alignBars - without RenameOrMoveFiles test', function(assert) {
bars = this.$().find(".groups").find(".bar");
assert.equal(bars.length, 4);
- assertWidth(bars[0], 10 + 20 + 30 + 40);
+ assertWidth(bars[0], 10 + 20 + 40);
assertWidth(bars[1], 50 + 60);
assertWidth(bars[2], 70);
assertWidth(bars[3], 80 + 90);
bars = this.$().find(".sub-groups").find(".bar");
- assert.equal(bars.length, 10);
+ assert.equal(bars.length, 9);
assertWidth(bars[0], 10);
assertWidth(bars[1], 20);
- assertWidth(bars[2], 30);
- assertWidth(bars[3], 40);
- assertWidth(bars[4], 50);
- assertWidth(bars[5], 60);
- assertWidth(bars[6], 70);
- assertWidth(bars[7], 80);
- assertWidth(bars[8], 90);
- assertWidth(bars[9], 0);
-});
\ No newline at end of file
+ assertWidth(bars[2], 40);
+ assertWidth(bars[3], 50);
+ assertWidth(bars[4], 60);
+ assertWidth(bars[5], 70);
+ assertWidth(bars[6], 80);
+ assertWidth(bars[7], 90);
+ assertWidth(bars[8], 0);
+});
+
+test('tables test', function(assert) {
+ this.set("perf", {
+ "PostATSHook": 80,
+ "RemoveTempOrDuplicateFiles": 90,
+ "RenameOrMoveFiles": 100,
+ });
+ this.render(hbs`{{query-timeline perf=perf}}`);
+
+ assert.equal(this.$().find("table").length, 4);
+ assert.equal(this.$().find(".detail-list").length, 4);
+
+ assert.equal(this.$().find("table").find("td").length, 9 * 2);
+ assert.equal(this.$().find("table").find("i").length, 9);
+});
+
+test('tables post test', function(assert) {
+ this.set("perf", {});
+ this.render(hbs`{{query-timeline perf=perf}}`);
+
+ assert.equal(this.$().find("table").length, 4);
+ assert.equal(this.$().find(".detail-list").length, 4);
+
+ assert.equal(this.$().find("table").find("td").length, 6 * 2);
+ assert.equal(this.$().find("table").find("i").length, 6);
+});