You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/10/02 20:39:52 UTC

[41/50] [abbrv] ambari git commit: AMBARI-22091.Hive view2.0 Jobs worksheets doesn't have hyperlink whereas view1.5 History worksheets had hyperlinks pointing to fetched results(Venkata Sairam)

AMBARI-22091.Hive view2.0 Jobs worksheets doesn't have hyperlink whereas view1.5 History worksheets had hyperlinks pointing to fetched results(Venkata Sairam)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: d4378aacbd5bd95c0367f5b8a6865ee3bbe6de04
Parents: b84cbbe
Author: Venkata Sairam <ve...@gmail.com>
Authored: Sat Sep 30 09:05:33 2017 +0530
Committer: Venkata Sairam <ve...@gmail.com>
Committed: Sat Sep 30 09:05:59 2017 +0530

----------------------------------------------------------------------
 .../resources/ui/app/components/job-item.js     |  49 +++++-
 .../resources/ui/app/components/jobs-browser.js |   3 +
 .../src/main/resources/ui/app/routes/jobs.js    |  11 ++
 .../main/resources/ui/app/routes/queries/new.js |   2 +
 .../resources/ui/app/routes/queries/query.js    | 164 ++++++++++++-------
 .../src/main/resources/ui/app/styles/app.scss   |   8 +
 .../ui/app/templates/components/job-item.hbs    |   2 +-
 .../app/templates/components/jobs-browser.hbs   |   2 +-
 .../main/resources/ui/app/templates/jobs.hbs    |   1 +
 9 files changed, 177 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
index 42a3411..0545624 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/job-item.js
@@ -17,12 +17,17 @@
  */
 
 import Ember from 'ember';
+import UILoggerMixin from '../mixins/ui-logger';
 
-export default Ember.Component.extend({
+export default Ember.Component.extend(UILoggerMixin, {
   jobs: Ember.inject.service(),
   tagName: '',
   expanded: false,
   expandedValue: null,
+  store: Ember.inject.service(),
+  savedQueries: Ember.inject.service(),
+
+
   actions: {
     toggleExpandJob(jobId) {
       if(this.get('expanded')) {
@@ -39,6 +44,48 @@ export default Ember.Component.extend({
         });
       }
 
+    },
+    openAsWorksheet(savedQuery){
+
+      let hasWorksheetModel = this.get('model'), self = this;
+      let worksheetId;
+
+      if (Ember.isEmpty(hasWorksheetModel)){
+        worksheetId = 1;
+      }else {
+
+        let isWorksheetExist = (this.get('model').filterBy('title', savedQuery.title).get('length') > 0);
+        if(isWorksheetExist) {
+          this.sendAction('openWorksheet', savedQuery, true);
+          return;
+        }
+
+        let worksheets = this.get('model');
+        worksheets.forEach((worksheet) => {
+          worksheet.set('selected', false);
+      });
+        worksheetId = `worksheet${worksheets.get('length') + 1}`;
+      }
+      var isTabExisting = this.get("store").peekRecord('worksheet', savedQuery.id);
+      if(isTabExisting) {
+        self.sendAction('openWorksheet', savedQuery, true);
+        return;
+      }
+      this.get("savedQueries").fetchSavedQuery(savedQuery.get('queryFile')).then(function(response) {
+        let localWs = {
+          id: savedQuery.get('id'),
+          title: savedQuery.get('title'),
+          queryFile: savedQuery.get('queryFile'),
+          query: response.file.fileContent,
+          selectedDb : savedQuery.get('dataBase'),
+          owner: savedQuery.get('owner'),
+          selected: true
+        };
+        self.sendAction('openWorksheet', localWs);
+      }, (error) => {
+        self.get('logger').danger('Failed to load the query', self.extractError(error));
+    });
+
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js b/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
index 7e24843..ae081de 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/components/jobs-browser.js
@@ -93,6 +93,9 @@ export default Ember.Component.extend({
 
     clearTitleFilter() {
       this.set('titleFilter');
+    },
+    openWorksheet(worksheet, isExisitingWorksheet){
+      this.sendAction("openWorksheet", worksheet, isExisitingWorksheet);
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
index 3e88ac6..1b6351f 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/jobs.js
@@ -20,6 +20,7 @@ import Ember from 'ember';
 
 export default Ember.Route.extend({
   moment: Ember.inject.service(),
+  query: Ember.inject.service(),
   timeInitializedTo: null,
   queryParams: {
     startTime: {
@@ -63,6 +64,16 @@ export default Ember.Route.extend({
       this.controller.set('startTime', this.get('moment').moment(startTime, 'YYYY-MM-DD').startOf('day').valueOf());
       this.controller.set('endTime', this.get('moment').moment(endTime, 'YYYY-MM-DD').endOf('day').valueOf());
       this.refresh();
+    },
+    openWorksheet(worksheet, isExisitingWorksheet) {
+      if(isExisitingWorksheet) {
+       this.transitionTo('queries.query', worksheet.id);
+       return;
+      }
+      this.get("store").createRecord('worksheet', worksheet );
+      this.controllerFor('queries').set('worksheets', this.store.peekAll('worksheet'));
+      this.transitionTo('queries.query', worksheet.id);
+      this.controllerFor("queries.query").set('previewJobData', {id:worksheet.id, title:worksheet.title.toLowerCase()});
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
index 76a7439..1c4a7ba 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
+++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/new.js
@@ -43,5 +43,7 @@ export default Ember.Route.extend({
     existingWorksheets.setEach('selected', false);
     this.controllerFor('queries').set('worksheets', this.store.peekAll('worksheet'));
     this.transitionTo('queries.query', newWorksheetTitle);
+    this.controllerFor("queries.query").set('previewJobData', null);
+
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/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 291c335..01e1497 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
@@ -53,8 +53,10 @@ export default Ember.Route.extend(UILoggerMixin, {
     console.log('lastResultRoute:: ', model.get('lastResultRoute'));
     let lastResultRoute = model.get('lastResultRoute');
 
+
+
     if(Ember.isEmpty(lastResultRoute)){
-      if(model.get('jobData').length > 0){
+      if(model.get('jobData') && model.get('jobData').length > 0){
         this.transitionTo('queries.query.results');
       } else {
         this.transitionTo('queries.query');
@@ -145,6 +147,22 @@ export default Ember.Route.extend(UILoggerMixin, {
     controller.set('worksheetModalSuccess',false);
     controller.set('worksheetModalFail',false);
     controller.set('tabs', tabs);
+    let previewJobData = this.get('controller').get('previewJobData'), ctrlr = this.get('controller'), ctrlrModel = this.get('controller.model');
+
+
+    if(previewJobData) {
+
+      ctrlrModel.set('isJobSuccess', true);
+      ctrlrModel.set('isJobCancelled', false);
+      ctrlrModel.set('isJobCreated', false);
+      ctrlr.set('isJobSuccess', true);
+      ctrlr.set('isJobCancelled', false);
+      ctrlr.set('isJobCreated', false);
+      ctrlrModel.set('currentJobId', previewJobData.id);
+      this.get('controller.model').set('currentJobData', {job: previewJobData});
+
+      this.getJobResult({job: previewJobData}, previewJobData.title, Ember.Object.create({name: 'query'}), ctrlrModel, true);
+    }
   },
   checkIfDeafultDatabaseExists(alldatabases){
     if(this.get('controller.model').get('selectedDb')) {
@@ -172,6 +190,75 @@ export default Ember.Route.extend(UILoggerMixin, {
       this.send('closeWorksheet', tabDataToClose.index, tabDataToClose.id);
     }
   },
+
+  getJobResult(data, payloadTitle, jobDetails, ctrlrModel, isDataPreview){
+    let self = this;
+
+    let isVisualExplainQuery = this.get('controller').get('isVisualExplainQuery');
+
+    let jobId = data.job.id;
+
+    let currentPage = this.get('controller.model').get('currentPage');
+    let previousPage = this.get('controller.model').get('previousPage');
+    let nextPage = this.get('controller.model').get('nextPage');
+
+    this.get('query').getJob(jobId, true).then(function(data) {
+
+      let existingWorksheets = self.get('store').peekAll('worksheet');
+      let myWs = null;
+      if(existingWorksheets.get('length') > 0) {
+        if(isDataPreview) {
+          myWs = existingWorksheets.filterBy('id', jobId).get('firstObject');
+        } else {
+          myWs = existingWorksheets.filterBy('id', payloadTitle).get('firstObject');
+        }
+      }
+      if(!Ember.isBlank(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);
+      myWs.set('hasNext', data.hasNext);
+      self.get('controller.model').set('queryResult', data);
+
+
+      let localArr = myWs.get("jobData");
+      localArr.push(data);
+      myWs.set('jobData', localArr);
+      myWs.set('currentPage', currentPage+1);
+      myWs.set('previousPage', previousPage + 1 );
+      myWs.set('nextPage', nextPage + 1);
+
+      if(isVisualExplainQuery){
+        self.send('showVisualExplain', payloadTitle);
+      } else {
+        self.get('controller.model').set('visualExplainJson', null);
+
+        if( self.paramsFor('queries.query').worksheetId && (self.paramsFor('queries.query').worksheetId.toLowerCase() === payloadTitle) || (isDataPreview && self.paramsFor('queries.query').worksheetId && (self.paramsFor('queries.query').worksheetId.toLowerCase() === jobId))){
+          self.transitionTo('queries.query.loading');
+
+          Ember.run.later(() => {
+            self.transitionTo('queries.query.results');
+          }, 1 * 100);
+        }
+      }
+
+    }, function(error) {
+      console.log('error' , error);
+      if(!isDataPreview){
+        self.get('logger').danger('Failed to execute query.', self.extractError(error));
+      } else {
+        self.get('logger').danger('Query expired. Please execute the query again.', self.extractError(error));
+      }
+      self.send('resetDefaultWorksheet', ctrlrModel);
+    });
+  },
+
   actions: {
 
     resetDefaultWorksheet(currModel){
@@ -332,7 +419,7 @@ export default Ember.Route.extend(UILoggerMixin, {
             ctrlr.set('isJobCreated', false);
             let jobDetails = self.store.peekRecord('job', data.job.id);
             console.log(jobDetails);
-            self.send('getJobResult', data, payload.id, jobDetails, ctrlrModel);
+            self.getJobResult(data, payload.id, jobDetails, ctrlrModel);
             self.get('logger').success('Query has been submitted.');
 
           }, (error) => {
@@ -360,64 +447,6 @@ export default Ember.Route.extend(UILoggerMixin, {
         .then( data => this.get('controller').set('isJobCancelled', true));
     },
 
-    getJobResult(data, payloadTitle, jobDetails, ctrlrModel){
-      let self = this;
-
-      let isVisualExplainQuery = this.get('controller').get('isVisualExplainQuery');
-
-      let jobId = data.job.id;
-
-      let currentPage = this.get('controller.model').get('currentPage');
-      let previousPage = this.get('controller.model').get('previousPage');
-      let nextPage = this.get('controller.model').get('nextPage');
-
-      this.get('query').getJob(jobId, true).then(function(data) {
-
-        let existingWorksheets = self.get('store').peekAll('worksheet');
-        let myWs = null;
-        if(existingWorksheets.get('length') > 0) {
-          myWs = existingWorksheets.filterBy('id', payloadTitle).get('firstObject');
-        }
-        if(!Ember.isBlank(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);
-        myWs.set('hasNext', data.hasNext);
-
-        let localArr = myWs.get("jobData");
-        localArr.push(data);
-        myWs.set('jobData', localArr);
-        myWs.set('currentPage', currentPage+1);
-        myWs.set('previousPage', previousPage + 1 );
-        myWs.set('nextPage', nextPage + 1);
-
-        if(isVisualExplainQuery){
-          self.send('showVisualExplain', payloadTitle);
-        } else {
-          self.get('controller.model').set('visualExplainJson', null);
-
-          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) {
-        console.log('error' , error);
-        self.get('logger').danger('Failed to execute query.', self.extractError(error));
-        self.send('resetDefaultWorksheet', ctrlrModel);
-      });
-    },
-
     showVisualExplain(payloadTitle){
        if( this.paramsFor('queries.query').worksheetId && this.paramsFor('queries.query').worksheetId.toLowerCase() === payloadTitle){
          this.transitionTo('queries.query.loading');
@@ -468,7 +497,12 @@ export default Ember.Route.extend(UILoggerMixin, {
       let existingWorksheets = this.get('store').peekAll('worksheet');
       let myWs = null;
       if(existingWorksheets.get('length') > 0) {
-        myWs = existingWorksheets.filterBy('id', payloadTitle.toLowerCase()).get('firstObject');
+        var previewJobData = this.get('controller').get('previewJobData');
+        if(previewJobData) {
+          myWs = existingWorksheets.filterBy('id', previewJobData.id).get('firstObject');
+        } else {
+          myWs = existingWorksheets.filterBy('id', payloadTitle.toLowerCase()).get('firstObject');
+        }
       }
 
       this.transitionTo('queries.query.loading');
@@ -497,7 +531,13 @@ export default Ember.Route.extend(UILoggerMixin, {
       let existingWorksheets = this.get('store').peekAll('worksheet');
       let myWs = null;
       if(existingWorksheets.get('length') > 0) {
-        myWs = existingWorksheets.filterBy('id', payloadTitle.toLowerCase()).get('firstObject');
+        var previewJobData = this.get('controller').get('previewJobData');
+        if(previewJobData) {
+          myWs = existingWorksheets.filterBy('id', previewJobData.id).get('firstObject');
+        } else {
+          myWs = existingWorksheets.filterBy('id', payloadTitle.toLowerCase()).get('firstObject');
+        }
+
       }
 
       this.transitionTo('queries.query.loading');

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
index 522b2d3..d7f14b0 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
@@ -1014,3 +1014,11 @@ rect.operator__box {
 .sort-icon {
   padding-left: 5px;
 }
+
+.jobs-table .table-striped td{
+  border: none;
+}
+
+.workflow-name {
+  cursor: pointer;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
index 16caad0..6ebdae0 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
@@ -18,7 +18,7 @@
 
 <tr>
   <td>{{job.id}}</td>
-  <td class="break-word">{{job.title}}</td>
+  <td class="break-word workflow-name"><a {{action "openAsWorksheet" job}}>{{job.title}}</a></td>
   <td>{{job.status}}</td>
   <td>{{moment-from-now job.dateSubmitted}}</td>
   <td>{{job.duration}}</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
index d29ca73..7ba3f22 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
@@ -94,7 +94,7 @@
       </thead>
       <tbody>
         {{#each filteredJobsSorted as |job| }}
-          {{job-item job=job}}
+          {{job-item model=jobs job=job openWorksheet="openWorksheet"}}
         {{/each}}
       </tbody>
     </table>

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4378aac/contrib/views/hive20/src/main/resources/ui/app/templates/jobs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/jobs.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/jobs.hbs
index 4382b7a..ba8fccc 100644
--- a/contrib/views/hive20/src/main/resources/ui/app/templates/jobs.hbs
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/jobs.hbs
@@ -20,4 +20,5 @@
                startTime=startTimeText
                endTime=endTimeText
                filterChanged="dateFilterChanged"
+               openWorksheet="openWorksheet"
 }}