AMBARI-20251. Tez UI throwing 404 error, Button to minimise TEZ UI, Worksheet 
save issues, creation of duplicate tabs and other tab issues (Venkata Sairam 
via pallavkul)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/760be48e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/760be48e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/760be48e

Branch: refs/heads/branch-feature-AMBARI-12556
Commit: 760be48e9bd21e215f3e0a3a004ae9bd5a383124
Parents: 266d81c
Author: pallavkul <[email protected]>
Authored: Wed Mar 1 21:26:29 2017 +0530
Committer: pallavkul <[email protected]>
Committed: Wed Mar 1 21:26:29 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/routes/queries/index.js    |  2 +-
 .../resources/ui/app/routes/queries/query.js    | 35 +++++++++++++-------
 .../app/routes/queries/query/visual-explain.js  |  8 +++--
 .../resources/ui/app/routes/savedqueries.js     | 12 +++++--
 .../resources/ui/app/services/tez-view-info.js  | 26 ++++++++++-----
 .../main/resources/ui/app/templates/queries.hbs |  4 +--
 .../ui/app/templates/queries/query/tez-ui.hbs   |  7 ++++
 7 files changed, 64 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/routes/queries/index.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/index.js 
b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/index.js
index f2af6bc..6994ffc 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/index.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/index.js
@@ -24,7 +24,7 @@ export default Ember.Route.extend({
     if(existingWorksheets.get('length') > 0) {
       let selectedWorksheet = existingWorksheets.filterBy('selected', 
true).get('firstObject');
       this.controllerFor('queries').set('worksheets', existingWorksheets);
-      this.transitionTo('queries.query', selectedWorksheet.get('title'));
+      this.transitionTo('queries.query', selectedWorksheet.get('id'));
     } else {
       this.transitionTo('queries.new');
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js 
b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
index 62e5562..cf51ff7 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js
@@ -66,7 +66,7 @@ export default Ember.Route.extend(UILoggerMixin, {
   },
 
   model(params) {
-    let selectedWs = this.store.peekAll('worksheet').filterBy('title', 
params.worksheetId).get('firstObject');
+    let selectedWs = this.store.peekAll('worksheet').filterBy('id', 
params.worksheetId.toLowerCase()).get('firstObject');
 
     if(selectedWs) {
       selectedWs.set('selected', true);
@@ -300,6 +300,7 @@ export default Ember.Route.extend(UILoggerMixin, {
       this.send('showQueryResultContainer');
 
       let payload ={
+        "id":this.get('controller.model').get('id'),
         "title":worksheetTitle,
         "dataBase":dbid,
         "forcedContent":forcedContent,
@@ -321,9 +322,8 @@ export default Ember.Route.extend(UILoggerMixin, {
             self.get('controller').set('isJobCreated', false);
             let jobDetails = self.store.peekRecord('job', data.job.id);
             console.log(jobDetails);
-            self.send('getJobResult', data, payload.title, jobDetails);
+            self.send('getJobResult', data, payload.id, jobDetails);
             self.get('logger').success('Query has been submitted.');
-            self.transitionTo('queries.query.loading');
 
           }, (error) => {
             console.log('error', error);
@@ -363,10 +363,15 @@ export default Ember.Route.extend(UILoggerMixin, {
         let existingWorksheets = self.get('store').peekAll('worksheet');
         let myWs = null;
         if(existingWorksheets.get('length') > 0) {
-          myWs = existingWorksheets.filterBy('title', 
payloadTitle).get('firstObject');
+          myWs = existingWorksheets.filterBy('id', 
payloadTitle).get('firstObject');
         }
         if(!Ember.isBlank(jobDetails.get("dagId"))) {
-          self.get('controller.model').set('tezUrl', 
self.get("tezViewInfo").getTezViewURL() + jobDetails.get("dagId"));
+          let tezData = self.get("tezViewInfo").getTezViewData();
+          if(tezData && tezData.error) {
+            self.get('controller.model').set('tezError', tezData.errorMsg);
+          } else if(tezData.tezUrl) {
+            self.get('controller.model').set('tezUrl', tezData.tezUrl + 
jobDetails.get("dagId"));
+          }
         }
         myWs.set('queryResult', data);
         myWs.set('isQueryRunning', false);
@@ -385,8 +390,14 @@ export default Ember.Route.extend(UILoggerMixin, {
           self.get('controller.model').set('visualExplainJson', null);
         }
 
-        if( self.paramsFor('queries.query').worksheetId == payloadTitle){
-          self.transitionTo('queries.query.results');
+        if( self.paramsFor('queries.query').worksheetId && 
(self.paramsFor('queries.query').worksheetId.toLowerCase() == payloadTitle)){
+          self.transitionTo('queries.query.loading');
+
+          Ember.run.later(() => {
+            self.transitionTo('queries.query.results');
+          }, 1 * 100);
+
+
         }
 
       }, function(error) {
@@ -396,7 +407,7 @@ export default Ember.Route.extend(UILoggerMixin, {
     },
 
     showVisualExplain(payloadTitle){
-       if( this.paramsFor('queries.query').worksheetId == payloadTitle){
+       if( this.paramsFor('queries.query').worksheetId && 
this.paramsFor('queries.query').worksheetId.toLowerCase() === payloadTitle){
          Ember.run.later(() => {
            this.transitionTo('queries.query.visual-explain');
          }, 1);
@@ -444,14 +455,14 @@ export default Ember.Route.extend(UILoggerMixin, {
       let existingWorksheets = this.get('store').peekAll('worksheet');
       let myWs = null;
       if(existingWorksheets.get('length') > 0) {
-        myWs = existingWorksheets.filterBy('title', 
payloadTitle).get('firstObject');
+        myWs = existingWorksheets.filterBy('id', 
payloadTitle.toLowerCase()).get('firstObject');
       }
 
       this.transitionTo('queries.query.loading');
 
       Ember.run.later(() => {
         this.transitionTo('queries.query.results', myWs);
-      }, 1 * 1000);
+      }, 1 * 100);
     },
 
     goPrevPage(payloadTitle){
@@ -473,14 +484,14 @@ export default Ember.Route.extend(UILoggerMixin, {
       let existingWorksheets = this.get('store').peekAll('worksheet');
       let myWs = null;
       if(existingWorksheets.get('length') > 0) {
-        myWs = existingWorksheets.filterBy('title', 
payloadTitle).get('firstObject');
+        myWs = existingWorksheets.filterBy('id', 
payloadTitle.toLowerCase()).get('firstObject');
       }
 
       this.transitionTo('queries.query.loading');
 
       Ember.run.later(() => {
         this.transitionTo('queries.query.results', myWs);
-      }, 1 * 1000);
+      }, 1 * 100);
     },
 
     openWorksheetModal(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/visual-explain.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/visual-explain.js
 
b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/visual-explain.js
index c85db19..b7a1ccc 100644
--- 
a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/visual-explain.js
+++ 
b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query/visual-explain.js
@@ -39,9 +39,11 @@ export default Ember.Route.extend({
       this.controller.set('jobId', jobId);
       this.controller.set('payloadTitle',  
model.get('currentJobData').job.title);
       this.controller.set('isQueryRunning', model.get('isQueryRunning'));
-      if(!Ember.isEmpty(JSON.parse(model.get('queryResult').rows[0][0])['STAGE 
PLANS'])){
-        this.controller.set('visualExplainJson', 
model.get('queryResult').rows[0][0]);
-      }
+      try {
+        
if(!Ember.isEmpty(JSON.parse(model.get('queryResult').rows[0][0])['STAGE 
PLANS'])){
+          this.controller.set('visualExplainJson', 
model.get('queryResult').rows[0][0]);
+        }
+      }catch(error) { }
       this.controller.set('hasJobAssociated', true);
     } else {
       this.controller.set('hasJobAssociated', false);

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js 
b/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
index 5369f8e..f3b27c8 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/savedqueries.js
@@ -19,7 +19,7 @@
 import Ember from 'ember';
 import UILoggerMixin from '../mixins/ui-logger';
 
-export default Ember.Route.extend({
+export default Ember.Route.extend(UILoggerMixin, {
 
   savedQueries: Ember.inject.service(),
 
@@ -104,9 +104,14 @@ export default Ember.Route.extend({
         });
         worksheetId = `worksheet${worksheets.get('length') + 1}`;
       }
+      var isTabExisting = this.store.peekRecord('worksheet', savedQuery.id);
+      if(isTabExisting) {
+        self.transitionTo('queries.query', isTabExisting.get("id"));
+        return;
+      }
       
this.get("savedQueries").fetchSavedQuery(savedQuery.get('queryFile')).then(function(response)
 {
         let localWs = {
-          id: worksheetId,
+          id: savedQuery.get('id'),
           title: savedQuery.get('title'),
           queryFile: savedQuery.get('queryFile'),
           query: response.file.fileContent,
@@ -116,8 +121,9 @@ export default Ember.Route.extend({
         };
 
         self.store.createRecord('worksheet', localWs );
+        self.controllerFor('queries').set('worksheets', 
self.store.peekAll('worksheet'));
 
-        self.transitionTo('queries.query', localWs.title);
+        self.transitionTo('queries.query', savedQuery.get('id'));
       }, (error) => {
          self.get('logger').danger('Failed to load the query', 
self.extractError(error));
       });

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/services/tez-view-info.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/services/tez-view-info.js 
b/contrib/views/hive20/src/main/resources/ui/app/services/tez-view-info.js
index 943d002..02cc5af 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/services/tez-view-info.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/tez-view-info.js
@@ -24,6 +24,7 @@ export default Ember.Service.extend({
   tezURLPrefix: '/views/TEZ',
   tezDagPath: '?viewPath=/#/dag/',
   getTezViewInfo: function () {
+    this.set('error', null);
     if (this.get('isTezViewAvailable')) {
       return;
     }
@@ -68,16 +69,23 @@ export default Ember.Service.extend({
     // status: 404 => Tev View isn't deployed
     if (data.status && data.status === 404) {
       this.set('error', 'tez.errors.not.deployed');
-      return;
-    }
-
-    // no instance created
-    if (data.instances && !data.instances.length) {
+      this.set('errorMsg', 'Tez view not deployed');
+    } else if (data.instances && !data.instances.length) { // no instance 
created
       this.set('error', 'tez.errors.no.instance');
-      return;
+      this.set('errorMsg', 'Tez view instance not created');
+    } else {
+      this.set('error', 'error');
+      this.set('errorMsg', 'Error occurred while dispaying TEZ UI');
     }
   },
-  getTezViewURL(){
-    return this.get('tezViewURL') + this.get("tezDagPath");
+  getTezViewData(){
+    let tezData = {};
+    if(this.get('error')){
+      tezData.error = this.get('error');
+      tezData.errorMsg = this.get('errorMsg');
+    } else {
+      tezData.tezUrl = this.get('tezViewURL') + this.get("tezDagPath");
+    }
+    return tezData;
   }
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs 
b/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
index 6fc7486..b8e19da 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/queries.hbs
@@ -20,7 +20,7 @@
   <ul class="worksheet-nav row nav nav-tabs inverse">
     {{#each worksheets as |worksheet| }}
       <li class="{{if worksheet.selected 'active'}}" style="">
-        {{#link-to 'queries.query' worksheet.title }}{{ worksheet.title 
}}{{/link-to}}
+        {{#link-to 'queries.query' worksheet.id  
classBinding='worksheet.selected:active'}}{{ worksheet.title }}{{/link-to}}
       </li>
     {{/each}}
     <li>
@@ -29,4 +29,4 @@
   </ul>
 </div>
 
-{{outlet}}
\ No newline at end of file
+{{outlet}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/760be48e/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query/tez-ui.hbs
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query/tez-ui.hbs
 
b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query/tez-ui.hbs
index edc1e8e..f9ecf5e 100644
--- 
a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query/tez-ui.hbs
+++ 
b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query/tez-ui.hbs
@@ -17,7 +17,14 @@
 }}
 
 {{#if model.tezUrl}}
+<div class="pull-right">
+  <button class="btn btn-default" title="Expand/Collspse" {{action 
"expandQueryResultPanel" }}>{{fa-icon "expand"}}</button>
+</div>
 <iframe  class="tez-ui" src={{model.tezUrl}}></iframe>
+{{else if model.tezError}}
+<div class="explain--error">
+  <div>{{model.tezError}}</div>
+</div>
 {{else}}
 <div class="explain--error">
   <div>Tez UI not available.</div>

Reply via email to