TEZ-3045. Tez UI 2: Create application details page with DAGs tab (sree)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/e893e946 Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/e893e946 Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/e893e946 Branch: refs/heads/master Commit: e893e94645612cb4d8708e4bcaed1375b3e05a6b Parents: 70c6b5f Author: Sreenath Somarajapuram <s...@apache.org> Authored: Tue Jan 19 03:12:39 2016 +0530 Committer: Sreenath Somarajapuram <s...@apache.org> Committed: Thu Feb 25 03:32:15 2016 +0530 ---------------------------------------------------------------------- TEZ-2980-CHANGES.txt | 1 + tez-ui2/src/main/webapp/app/adapters/app.js | 22 ++++ tez-ui2/src/main/webapp/app/controllers/app.js | 41 ++++++ .../src/main/webapp/app/controllers/app/dags.js | 98 +++++++++++++++ .../main/webapp/app/controllers/app/index.js | 22 ++++ tez-ui2/src/main/webapp/app/controllers/dags.js | 10 +- tez-ui2/src/main/webapp/app/models/ahs-app.js | 14 ++- tez-ui2/src/main/webapp/app/models/app.js | 52 ++++++++ tez-ui2/src/main/webapp/app/router.js | 4 +- tez-ui2/src/main/webapp/app/routes/app.js | 13 +- tez-ui2/src/main/webapp/app/routes/app/dags.js | 35 ++++++ tez-ui2/src/main/webapp/app/routes/app/index.js | 33 +++++ .../src/main/webapp/app/serializers/ahs-app.js | 6 +- tez-ui2/src/main/webapp/app/serializers/app.js | 30 +++++ .../main/webapp/app/styles/details-page.less | 4 + tez-ui2/src/main/webapp/app/templates/app.hbs | 3 +- .../src/main/webapp/app/templates/app/dags.hbs | 33 +++++ .../src/main/webapp/app/templates/app/index.hbs | 126 +++++++++++++++++++ .../src/main/webapp/app/templates/dag/index.hbs | 4 +- .../src/main/webapp/config/default-app-conf.js | 2 +- .../main/webapp/tests/unit/adapters/app-test.js | 30 +++++ .../webapp/tests/unit/controllers/app-test.js | 36 ++++++ .../tests/unit/controllers/app/dags-test.js | 36 ++++++ .../tests/unit/controllers/app/index-test.js | 34 +++++ .../main/webapp/tests/unit/models/app-test.js | 40 ++++++ .../webapp/tests/unit/routes/app/dags-test.js | 45 +++++++ .../webapp/tests/unit/routes/app/index-test.js | 45 +++++++ .../webapp/tests/unit/serializers/app-test.js | 31 +++++ 28 files changed, 833 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/TEZ-2980-CHANGES.txt ---------------------------------------------------------------------- diff --git a/TEZ-2980-CHANGES.txt b/TEZ-2980-CHANGES.txt index 354816e..366396f 100644 --- a/TEZ-2980-CHANGES.txt +++ b/TEZ-2980-CHANGES.txt @@ -17,3 +17,4 @@ ALL CHANGES: TEZ-3039. Tez UI 2: Create all sub-pages for DAG TEZ-3040. Tez UI 2: Create Vertex details page & sub tables TEZ-3041. Tez UI 2: Create Task & Attempt details page with sub tables + TEZ-3045. Tez UI 2: Create application details page with DAGs tab http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/adapters/app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/adapters/app.js b/tez-ui2/src/main/webapp/app/adapters/app.js new file mode 100644 index 0000000..b47e05f --- /dev/null +++ b/tez-ui2/src/main/webapp/app/adapters/app.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/e893e946/tez-ui2/src/main/webapp/app/controllers/app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/controllers/app.js b/tez-ui2/src/main/webapp/app/controllers/app.js new file mode 100644 index 0000000..95159c5 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/controllers/app.js @@ -0,0 +1,41 @@ +/** + * 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 AbstractController from './abstract'; + +export default AbstractController.extend({ + breadcrumbs: Ember.computed("model.appID", "model.app.name", function () { + var name = this.get("model.app.name") || this.get("model.appID"); + + return [{ + text: `Application [ ${name} ]`, + routeName: "app.index", + model: this.get("model.entityID") + }]; + }), + + tabs: [{ + text: "Application Details", + routeName: "app.index" + }, { + text: "DAGs", + routeName: "app.dags" + }] +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/controllers/app/dags.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/controllers/app/dags.js b/tez-ui2/src/main/webapp/app/controllers/app/dags.js new file mode 100644 index 0000000..bcb4db8 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/controllers/app/dags.js @@ -0,0 +1,98 @@ +/** + * 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 TablePageController from '../table-page'; +import ColumnDefinition from 'em-table/utils/column-definition'; + +export default TablePageController.extend({ + breadcrumbs: [{ + text: "DAGs", + routeName: "app.dags", + }], + + columns: ColumnDefinition.make([{ + id: 'name', + headerTitle: 'Dag Name', + contentPath: 'name', + cellComponentName: 'em-table-linked-cell', + getCellContent: function (row) { + return { + routeName: "dag", + model: row.get("entityID"), + text: row.get("name") + }; + } + },{ + id: 'entityID', + headerTitle: 'Id', + contentPath: 'entityID' + },{ + id: 'user', + headerTitle: 'Submitter', + contentPath: 'user' + },{ + id: 'status', + headerTitle: 'Status', + contentPath: 'status', + cellComponentName: 'em-table-status-cell' + },{ + id: 'progress', + headerTitle: 'Progress', + contentPath: 'progress', + cellComponentName: 'em-table-progress-cell', + observePath: true + },{ + id: 'startTime', + headerTitle: 'Start Time', + contentPath: 'startTime', + cellDefinition: { + type: 'date' + } + },{ + id: 'endTime', + headerTitle: 'End Time', + contentPath: 'endTime', + cellDefinition: { + type: 'date' + } + },{ + id: 'duration', + headerTitle: 'Duration', + contentPath: 'duration', + cellDefinition: { + type: 'duration' + } + },{ + id: 'queue', + headerTitle: 'Queue', + contentPath: 'queue' + },{ + id: 'contextID', + headerTitle: 'Context ID', + contentPath: 'contextID' + },{ + id: 'logs', + headerTitle: 'Logs', + contentPath: 'containerLogs', + cellComponentName: "em-table-linked-cell", + cellDefinition: { + target: "_blank" + } + }]), + +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/controllers/app/index.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/controllers/app/index.js b/tez-ui2/src/main/webapp/app/controllers/app/index.js new file mode 100644 index 0000000..9745328 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/controllers/app/index.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 PageController from '../page'; + +export default PageController.extend({ +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/controllers/dags.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/controllers/dags.js b/tez-ui2/src/main/webapp/app/controllers/dags.js index 8d7e73e..fced7d8 100644 --- a/tez-ui2/src/main/webapp/app/controllers/dags.js +++ b/tez-ui2/src/main/webapp/app/controllers/dags.js @@ -78,7 +78,15 @@ export default TablePageController.extend({ },{ id: 'appID', headerTitle: 'Application Id', - contentPath: 'appID' + contentPath: 'appID', + cellComponentName: 'em-table-linked-cell', + getCellContent: function (row) { + return { + routeName: "app", + model: row.get("appID"), + text: row.get("appID") + }; + } },{ id: 'queue', headerTitle: 'Queue', http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/models/ahs-app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/models/ahs-app.js b/tez-ui2/src/main/webapp/app/models/ahs-app.js index 8f4a153..ce087eb31 100644 --- a/tez-ui2/src/main/webapp/app/models/ahs-app.js +++ b/tez-ui2/src/main/webapp/app/models/ahs-app.js @@ -16,10 +16,14 @@ * limitations under the License. */ +import Ember from 'ember'; + import DS from 'ember-data'; import AbstractModel from './abstract'; export default AbstractModel.extend({ + entityID: DS.attr('string'), + attemptID: DS.attr('string'), name: DS.attr('string'), @@ -30,10 +34,12 @@ export default AbstractModel.extend({ status: DS.attr('string'), finalStatus: DS.attr('string'), - startedTime: DS.attr('number'), - elapsedTime: DS.attr('number'), - finishedTime: DS.attr('number'), - submittedTime: DS.attr('number'), + startTime: DS.attr('number'), + endTime: DS.attr('number'), + duration: Ember.computed("startTime", "endTime", function () { + var duration = this.get("endTime") - this.get("startTime"); + return duration > 0 ? duration : null; + }), diagnostics: DS.attr('string'), }); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/models/app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/models/app.js b/tez-ui2/src/main/webapp/app/models/app.js new file mode 100644 index 0000000..42fa1c5 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/models/app.js @@ -0,0 +1,52 @@ +/** + * 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 DS from 'ember-data'; + +import TimelineModel from './timeline'; +/* + Inherited properties + + entityID - String + appID - Computed from entityID + + status - String + progress - Computed from status + + startTime - Number + endTime - Number + duration - Computed from start & end times + + counterGroups - Array + counterHash - Computed from counterGroups +*/ + +export default TimelineModel.extend({ + appID: Ember.computed("entityID", function () { + return this.get("entityID").substr(4); + }), + + domain: DS.attr("string"), + + user: DS.attr("string"), + + buildTime: DS.attr("string"), + tezRevision: DS.attr("string"), + tezVersion: DS.attr("string"), +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/router.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/router.js b/tez-ui2/src/main/webapp/app/router.js index e907cc7..d619e42 100644 --- a/tez-ui2/src/main/webapp/app/router.js +++ b/tez-ui2/src/main/webapp/app/router.js @@ -38,7 +38,9 @@ Router.map(function() { this.route('attempts'); }); this.route('attempt', {path: '/attempt/:attempt_id'}, function () {}); - this.route('app', {path: '/app/:app_id'}, function () {}); + this.route('app', {path: '/app/:app_id'}, function () { + this.route('dags'); + }); }); export default Router; http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/routes/app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/routes/app.js b/tez-ui2/src/main/webapp/app/routes/app.js index 8719170..2bbf14a 100644 --- a/tez-ui2/src/main/webapp/app/routes/app.js +++ b/tez-ui2/src/main/webapp/app/routes/app.js @@ -16,7 +16,16 @@ * limitations under the License. */ -import Ember from 'ember'; +import AbstractRoute from './abstract'; -export default Ember.Route.extend({ +export default AbstractRoute.extend({ + title: "Application", + + loaderQueryParams: { + id: "app_id" + }, + + model: function (params) { + return this.get("loader").queryRecord('app', "tez_" + this.queryFromParams(params).id); + } }); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/routes/app/dags.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/routes/app/dags.js b/tez-ui2/src/main/webapp/app/routes/app/dags.js new file mode 100644 index 0000000..8c695b3 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/routes/app/dags.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 Ember from 'ember'; +import AbstractRoute from '../abstract'; + +export default AbstractRoute.extend({ + title: "DAGs", + + setupController: function (controller, model) { + this._super(controller, model); + Ember.run.later(this, "startCrumbBubble"); + }, + + load: function (/*value, query*/) { + return this.get("loader").query('dag', { + appID: (this.modelFor("app").id || "").substr(4) + }); + } +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/routes/app/index.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/routes/app/index.js b/tez-ui2/src/main/webapp/app/routes/app/index.js new file mode 100644 index 0000000..b6768fa --- /dev/null +++ b/tez-ui2/src/main/webapp/app/routes/app/index.js @@ -0,0 +1,33 @@ +/** + * 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 AbstractRoute from '../abstract'; + +export default AbstractRoute.extend({ + title: "Application Details", + + setupController: function (controller, model) { + this._super(controller, model); + Ember.run.later(this, "startCrumbBubble"); + }, + + load: function (/*value, query*/) { + return this.get("loader").queryRecord('app', this.modelFor("app").id); + }, +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/serializers/ahs-app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/serializers/ahs-app.js b/tez-ui2/src/main/webapp/app/serializers/ahs-app.js index 10825b2..0c35d54 100644 --- a/tez-ui2/src/main/webapp/app/serializers/ahs-app.js +++ b/tez-ui2/src/main/webapp/app/serializers/ahs-app.js @@ -41,10 +41,8 @@ export default LoaderSerializer.extend({ status: 'appState', finalStatus: 'finalAppStatus', - startedTime: 'startedTime', - elapsedTime: 'elapsedTime', - finishedTime: 'finishedTime', - submittedTime: 'submittedTime', + startTime: 'startedTime', + endTime: 'finishedTime', diagnostics: 'otherinfo.diagnostics', } http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/serializers/app.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/serializers/app.js b/tez-ui2/src/main/webapp/app/serializers/app.js new file mode 100644 index 0000000..86d8fa0 --- /dev/null +++ b/tez-ui2/src/main/webapp/app/serializers/app.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 TimelineSerializer from './timeline'; + +export default TimelineSerializer.extend({ + maps: { + domain: 'domain', + user: 'otherinfo.user', + + buildTime: 'otherinfo.tezVersion.buildTime', + tezRevision: 'otherinfo.tezVersion.revision', + tezVersion: 'otherinfo.tezVersion.version', + } +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/styles/details-page.less ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/styles/details-page.less b/tez-ui2/src/main/webapp/app/styles/details-page.less index 8c85d1f..4f65018 100644 --- a/tez-ui2/src/main/webapp/app/styles/details-page.less +++ b/tez-ui2/src/main/webapp/app/styles/details-page.less @@ -17,6 +17,10 @@ */ .detail-list { + display: inline-block; + + margin: 0 10px 10px 0; + table-layout: fixed; white-space: nowrap; http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/templates/app.hbs ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/templates/app.hbs b/tez-ui2/src/main/webapp/app/templates/app.hbs index c1a05b4..308b905 100644 --- a/tez-ui2/src/main/webapp/app/templates/app.hbs +++ b/tez-ui2/src/main/webapp/app/templates/app.hbs @@ -16,4 +16,5 @@ * limitations under the License. }} -{{outlet}} +{{tab-n-refresh tabs=tabs}} +{{outlet}} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/templates/app/dags.hbs ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/templates/app/dags.hbs b/tez-ui2/src/main/webapp/app/templates/app/dags.hbs new file mode 100644 index 0000000..cdb28aa --- /dev/null +++ b/tez-ui2/src/main/webapp/app/templates/app/dags.hbs @@ -0,0 +1,33 @@ +{{! + * 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. +}} + +{{#if loaded}} + {{em-table + columns=columns + rows=model + + definition=definition + + searchAction="searchChanged" + sortAction="sortChanged" + rowAction="rowsChanged" + pageAction="pageChanged" + }} +{{else}} + {{partial "partials/loading-anim"}} +{{/if}} http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/templates/app/index.hbs ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/templates/app/index.hbs b/tez-ui2/src/main/webapp/app/templates/app/index.hbs new file mode 100644 index 0000000..916051b --- /dev/null +++ b/tez-ui2/src/main/webapp/app/templates/app/index.hbs @@ -0,0 +1,126 @@ +{{! + * 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. +}} + +{{#if loaded}} + {{#if model.app}} + <table class='detail-list'> + <thead> + <tr> + <th colspan=2>YARN App Details</th> + </tr> + </thead> + <tbody> + <tr> + <td>Status</td> + <td>{{em-table-status-cell content=model.app.status}}</td> + </tr> + <tr> + <td>Final Status</td> + <td>{{em-table-status-cell content=model.app.finalStatus}}</td> + </tr> + <tr> + <td>Start Time</td> + <td>{{txt model.app.startTime type="date"}}</td> + </tr> + <tr> + <td>End Time</td> + <td>{{txt model.app.endTime type="date"}}</td> + </tr> + <tr> + <td>Duration</td> + <td>{{txt model.app.duration type="duration"}}</td> + </tr> + </tbody> + </table> + <table class='detail-list'> + <thead> + <tr> + <th colspan=2>YARN App Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>Application ID</td> + <td>{{model.app.entityID}}</td> + </tr> + <tr> + <td>Application Name</td> + <td>{{model.app.name}}</td> + </tr> + <tr> + <td>Queue</td> + <td>{{model.app.queue}}</td> + </tr> + <tr> + <td>Application Type</td> + <td>{{model.app.type}}</td> + </tr> + <tr> + <td>User</td> + <td>{{model.app.user}}</td> + </tr> + </tbody> + </table> + <br/> + {{/if}} + <table class='detail-list'> + <thead> + <tr> + <th colspan=2>Tez Details</th> + </tr> + </thead> + <tbody> + <tr> + <td>Application ID</td> + <td>{{model.appID}}</td> + </tr> + <tr> + <td>Domain</td> + <td>{{model.domain}}</td> + </tr> + <tr> + <td>User</td> + <td>{{model.user}}</td> + </tr> + </tbody> + </table> + + <table class='detail-list'> + <thead> + <tr> + <th colspan=2>Version Details</th> + </tr> + </thead> + <tbody> + <tr> + <td>Build Version</td> + <td>{{model.tezVersion}}</td> + </tr> + <tr> + <td>Build Revision</td> + <td>{{model.tezRevision}}</td> + </tr> + <tr> + <td>Build Time</td> + <td>{{model.buildTime}}</td> + </tr> + </tbody> + </table> +{{else}} + {{partial "partials/loading-anim"}} +{{/if}} http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/app/templates/dag/index.hbs ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/app/templates/dag/index.hbs b/tez-ui2/src/main/webapp/app/templates/dag/index.hbs index 1bd3c21..fdb0a91 100644 --- a/tez-ui2/src/main/webapp/app/templates/dag/index.hbs +++ b/tez-ui2/src/main/webapp/app/templates/dag/index.hbs @@ -47,9 +47,7 @@ </tr> <tr> <td>Status</td> - <td> - {{em-table-status-cell content=model.status}} - </td> + <td>{{em-table-status-cell content=model.status}}</td> </tr> <tr> <td>Start Time</td> http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/config/default-app-conf.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/config/default-app-conf.js b/tez-ui2/src/main/webapp/config/default-app-conf.js index feea181..400290a 100644 --- a/tez-ui2/src/main/webapp/config/default-app-conf.js +++ b/tez-ui2/src/main/webapp/config/default-app-conf.js @@ -44,7 +44,7 @@ module.exports = { // Tez App configurations hiveQuery: 'HIVE_QUERY_ID', - tezApp: 'TEZ_APPLICATION' + app: 'TEZ_APPLICATION' } }, hrefs: { http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/adapters/app-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/adapters/app-test.js b/tez-ui2/src/main/webapp/tests/unit/adapters/app-test.js new file mode 100644 index 0000000..dd2db50 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/adapters/app-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:app', 'Unit | Adapter | dag', { + // 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/e893e946/tez-ui2/src/main/webapp/tests/unit/controllers/app-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/controllers/app-test.js b/tez-ui2/src/main/webapp/tests/unit/controllers/app-test.js new file mode 100644 index 0000000..304321e --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/controllers/app-test.js @@ -0,0 +1,36 @@ +/** + * 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 { moduleFor, test } from 'ember-qunit'; + +moduleFor('controller:dag', 'Unit | Controller | dag', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('Basic creation test', function(assert) { + let controller = this.subject({ + send: Ember.K + }); + + assert.ok(controller); + assert.ok(controller.breadcrumbs); + assert.ok(controller.tabs); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/controllers/app/dags-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/controllers/app/dags-test.js b/tez-ui2/src/main/webapp/tests/unit/controllers/app/dags-test.js new file mode 100644 index 0000000..10ba8a3 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/controllers/app/dags-test.js @@ -0,0 +1,36 @@ +/** + * 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 { moduleFor, test } from 'ember-qunit'; + +moduleFor('controller:app/dags', 'Unit | Controller | vertex/attempts', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('Basic creation test', function(assert) { + let controller = this.subject({ + send: Ember.K + }); + + assert.ok(controller); + assert.ok(controller.breadcrumbs); + assert.ok(controller.columns); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/controllers/app/index-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/controllers/app/index-test.js b/tez-ui2/src/main/webapp/tests/unit/controllers/app/index-test.js new file mode 100644 index 0000000..c2004ba --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/controllers/app/index-test.js @@ -0,0 +1,34 @@ +/** + * 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 { moduleFor, test } from 'ember-qunit'; + +moduleFor('controller:app/index', 'Unit | Controller | vertex/index', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('Basic creation test', function(assert) { + let controller = this.subject({ + send: Ember.K + }); + + assert.ok(controller); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/models/app-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/models/app-test.js b/tez-ui2/src/main/webapp/tests/unit/models/app-test.js new file mode 100644 index 0000000..e0fb7f0 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/models/app-test.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 { moduleForModel, test } from 'ember-qunit'; + +moduleForModel('app', 'Unit | Model | task', { + // Specify the other units that are required for this test. + needs: [] +}); + +test('Basic creation test', function(assert) { + let model = this.subject(); + + assert.ok(model); + assert.ok(model.needs); + assert.ok(model.appID); +}); + +test('appID test', function(assert) { + let model = this.subject({ + entityID: "tez_1_2_3", + }); + + assert.equal(model.get("appID"), "1_2_3"); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/routes/app/dags-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/routes/app/dags-test.js b/tez-ui2/src/main/webapp/tests/unit/routes/app/dags-test.js new file mode 100644 index 0000000..05c1436 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/routes/app/dags-test.js @@ -0,0 +1,45 @@ +/** + * 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('route:app/dags', 'Unit | Route | vertex/attempts', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('Basic creation test', function(assert) { + let route = this.subject(); + + assert.ok(route); + assert.ok(route.title); + assert.ok(route.setupController); + assert.ok(route.load); +}); + +test('setupController test', function(assert) { + assert.expect(1); + + let route = this.subject({ + startCrumbBubble: function () { + assert.ok(true); + } + }); + + route.setupController({}, {}); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/routes/app/index-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/routes/app/index-test.js b/tez-ui2/src/main/webapp/tests/unit/routes/app/index-test.js new file mode 100644 index 0000000..83697f4 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/routes/app/index-test.js @@ -0,0 +1,45 @@ +/** + * 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('route:app/index', 'Unit | Route | vertex/index', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('Basic creation test', function(assert) { + let route = this.subject(); + + assert.ok(route); + assert.ok(route.title); + assert.ok(route.setupController); + assert.ok(route.load); +}); + +test('setupController test', function(assert) { + assert.expect(1); + + let route = this.subject({ + startCrumbBubble: function () { + assert.ok(true); + } + }); + + route.setupController({}, {}); +}); http://git-wip-us.apache.org/repos/asf/tez/blob/e893e946/tez-ui2/src/main/webapp/tests/unit/serializers/app-test.js ---------------------------------------------------------------------- diff --git a/tez-ui2/src/main/webapp/tests/unit/serializers/app-test.js b/tez-ui2/src/main/webapp/tests/unit/serializers/app-test.js new file mode 100644 index 0000000..fc79ae9 --- /dev/null +++ b/tez-ui2/src/main/webapp/tests/unit/serializers/app-test.js @@ -0,0 +1,31 @@ +/** + * 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:task', 'Unit | Serializer | task', { + // Specify the other units that are required for this test. + // needs: ['serializer:task'] +}); + +test('Basic creation test', function(assert) { + let serializer = this.subject(); + + assert.ok(serializer); + assert.ok(serializer.maps); +});