You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ni...@apache.org on 2016/12/23 09:04:45 UTC

ambari git commit: AMBARI-19254 : Prompting for underlying workflow job properties in a coordinator and coordinator job properties in bundle during job submission (Padma Priya via nitirajrathore)

Repository: ambari
Updated Branches:
  refs/heads/trunk 2f123f0ae -> e90009310


AMBARI-19254 : Prompting for underlying workflow job properties in a coordinator and coordinator job properties in bundle during job submission (Padma Priya via nitirajrathore)


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

Branch: refs/heads/trunk
Commit: e900093107475b765ac2d02edf1c28e61d6250bd
Parents: 2f123f0
Author: Nitiraj Rathore <ni...@gmail.com>
Authored: Fri Dec 23 14:31:19 2016 +0530
Committer: Nitiraj Rathore <ni...@gmail.com>
Committed: Fri Dec 23 14:31:19 2016 +0530

----------------------------------------------------------------------
 .../ui/app/components/bundle-config.js          | 51 +++++++++++++++++---
 .../resources/ui/app/components/coord-config.js | 40 ++++++++++-----
 .../ui/app/components/flow-designer.js          |  2 +-
 .../ui/app/services/property-extractor.js       |  3 +-
 .../src/main/resources/ui/app/styles/app.less   |  2 +-
 .../app/templates/components/bundle-config.hbs  |  3 ++
 .../app/templates/components/coord-config.hbs   |  3 ++
 .../main/resources/ui/app/utils/constants.js    |  3 ++
 8 files changed, 86 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
index 4a8ac90..4ef0ac3 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/bundle-config.js
@@ -132,7 +132,7 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
   importBundle (filePath){
     this.set("bundleFilePath", filePath);
     this.set("isImporting", false);
-    var deferred = this.getBundleFromHdfs(filePath);
+    var deferred = this.getFromHdfs(filePath);
     deferred.promise.then(function(data){
       this.getBundleFromXml(data);
       this.set("isImporting", false);
@@ -141,7 +141,7 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       this.set("isImportingSuccess", false);
     }.bind(this));
   },
-  getBundleFromHdfs(filePath){
+  getFromHdfs(filePath){
     var url =  Ember.ENV.API_URL + "/readWorkflowXml?workflowXmlPath="+filePath;
     var deferred = Ember.RSVP.defer();
     Ember.$.ajax({
@@ -154,7 +154,8 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       }
     }).done(function(data){
       deferred.resolve(data);
-    }).fail(function(){
+    }).fail(function(e){
+      console.error(e);
       deferred.reject();
     });
     return deferred;
@@ -166,6 +167,22 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
     this.get("errors").clear();
     this.get("errors").pushObjects(bundleObj.errors);
   },
+  getJobProperties(coordinatorPath){
+    var deferred = Ember.RSVP.defer();
+    this.getFromHdfs(coordinatorPath).promise.then((coordinatorXml)=>{
+      var x2js = new X2JS();
+      var coordProps = this.get('propertyExtractor').getDynamicProperties(coordinatorXml);
+      var coordinatorJson = x2js.xml_str2json(coordinatorXml);
+      var workflowPath = coordinatorJson['coordinator-app']['action']['workflow']['app-path'];
+      this.getFromHdfs(workflowPath).promise.then((workflowXml)=>{
+        var workflowProps = this.get('propertyExtractor').getDynamicProperties(workflowXml);
+        deferred.resolve(Array.from(coordProps.values()).concat(Array.from(workflowProps.values())));
+      });
+    }.bind(this)).catch((e)=>{
+      deferred.reject({trace :e, path: coordinatorPath});
+    });
+    return deferred;
+  },
   actions : {
     closeFileBrowser(){
       this.set("showingFileBrowser", false);
@@ -238,10 +255,30 @@ export default Ember.Component.extend(Ember.Evented, Validations, {
       }
       var bundleGenerator = BundleGenerator.create({bundle:this.get("bundle")});
       var bundleXml = bundleGenerator.process();
-      var dynamicProperties = this.get('propertyExtractor').getDynamicProperties(bundleXml);
-      var configForSubmit = {props : dynamicProperties, xml : bundleXml, params : this.get('bundle.parameters')};
-      this.set("bundleConfigs", configForSubmit);
-      this.set("showingJobConfig", true);
+      var propertyPromises = [];
+      this.$('#loading').show();
+      this.get('bundle.coordinators').forEach((coordinator) =>{
+        var deferred = this.getJobProperties(coordinator.appPath);
+        propertyPromises.push(deferred.promise);
+      }, this);
+      Ember.RSVP.Promise.all(propertyPromises).then(function(props){
+        var combinedProps = [];
+        props.forEach((prop)=>{
+          combinedProps = combinedProps.concat(prop);
+        });
+        var dynamicProperties = this.get('propertyExtractor').getDynamicProperties(bundleXml);
+        combinedProps.forEach((prop)=>{
+          dynamicProperties.set(prop, prop);
+        });
+        this.$('#loading').hide();
+        var configForSubmit = {props : dynamicProperties, xml : bundleXml, params : this.get('bundle.parameters')};
+        this.set("bundleConfigs", configForSubmit);
+        this.set("showingJobConfig", true);
+      }.bind(this)).catch(function(e){
+        this.$('#loading').hide();
+        this.get("errors").pushObject({'message' : 'Could not process coordinator from ' + e.path});
+        throw new Error(e.trace);
+      }.bind(this));
     },
     preview(){
       if(this.get('validations.isInvalid')) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
index 15eb1ce..1d7f435 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/coord-config.js
@@ -251,9 +251,10 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
     deferred.promise.then(function(data){
       this.getCoordinatorFromXml(data);
       this.set("isImporting", false);
-    }.bind(this)).catch(function(){
+    }.bind(this)).catch(function(e){
       this.set("isImporting", false);
       this.set("isImportingSuccess", false);
+      throw new Error(e);
     }.bind(this));
   },
   readFromHdfs(filePath){
@@ -269,8 +270,8 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
       }
     }).done(function(data){
       deferred.resolve(data);
-    }).fail(function(){
-      deferred.reject();
+    }).fail(function(e){
+      deferred.reject(e);
     });
     return deferred;
   },
@@ -396,12 +397,29 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
         this.set('showErrorMessage', true);
         return;
       }
-      var coordGenerator=CoordinatorGenerator.create({coordinator:this.get("coordinator")});
-      var coordinatorXml=coordGenerator.process();
-      var dynamicProperties = this.get('propertyExtractor').getDynamicProperties(coordinatorXml);
-      var configForSubmit={props:dynamicProperties,xml:coordinatorXml,params:this.get('coordinator.parameters')};
-      this.set("coordinatorConfigs", configForSubmit);
-      this.set("showingJobConfig", true);
+      this.$('#loading').show();
+      var deferred = this.readFromHdfs(this.get('coordinator.workflow.appPath'));
+      deferred.promise.then(function(data){
+        var x2js = new X2JS();
+        var workflowJson = x2js.xml_str2json(data);
+        this.set('workflowName', workflowJson["workflow-app"]._name);
+        var workflowProps = this.get('propertyExtractor').getDynamicProperties(data);
+        var coordGenerator = CoordinatorGenerator.create({coordinator:this.get("coordinator")});
+        var coordinatorXml = coordGenerator.process();
+        var dynamicProperties = this.get('propertyExtractor').getDynamicProperties(coordinatorXml);
+        workflowProps.forEach((prop)=>{
+          dynamicProperties.set(prop, prop);
+        });
+        this.$('#loading').hide();
+        var configForSubmit={props:dynamicProperties,xml:coordinatorXml,params:this.get('coordinator.parameters')};
+        this.set("coordinatorConfigs", configForSubmit);
+        this.set("showingJobConfig", true);
+      }.bind(this)).catch(function(e){
+        this.set('workflowProps',[]);
+        this.$('#loading').hide();
+        this.get("errors").pushObject({'message' : 'Could not process workflow from ' + this.get('coordinator.workflow.appPath')});
+        throw new Error(e);
+      }.bind(this));
     },
     closeCoordSubmitConfig(){
       this.set("showingJobConfig", false);
@@ -473,7 +491,6 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
         if(data.coordinator.get('dataInputType') === 'logical'){
           this.set('conditionalDataInExists', true);
         }
-        console.error(this.get('coordinator'));
       }.bind(this)).catch(function(e){
         throw new Error(e);
       });
@@ -527,8 +544,9 @@ export default Ember.Component.extend(Validations, Ember.Evented, {
         var x2js = new X2JS();
         var workflowJson = x2js.xml_str2json(data);
         this.set('workflowName', workflowJson["workflow-app"]._name);
-      }.bind(this)).catch(function(){
+      }.bind(this)).catch(function(e){
         this.set('workflowName', null);
+        throw new Error(e);
       }.bind(this));
     },
     showVersionSettings(value){

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
index 28239fa..50c7592 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/components/flow-designer.js
@@ -203,7 +203,7 @@ export default Ember.Component.extend(FindNodeMixin, Validations, {
   workflowXmlDownload(workflowXml){
       var link = document.createElement("a");
       link.download = "workflow.xml";
-      link.href = "data:text/xml,"+vkbeautify.xml(workflowXml);
+      link.href = "data:text/xml,"+workflowXml;
       link.click();
   },
   nodeRendered: function(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/services/property-extractor.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/services/property-extractor.js b/contrib/views/wfmanager/src/main/resources/ui/app/services/property-extractor.js
index 17ff9aa..0ebd9a7 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/services/property-extractor.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/services/property-extractor.js
@@ -16,6 +16,7 @@
 */
 
 import Ember from 'ember';
+import Constants from '../utils/constants';
 
 export default Ember.Service.extend({
   simpleProperty : /^[A-Za-z_][0-9A-Za-z_]+$/,
@@ -31,7 +32,7 @@ export default Ember.Service.extend({
       return dynamicProperties;
     }
     matches.forEach((match)=>{
-      if(this.get('dynamicProperty').test(match)){
+      if(this.get('dynamicProperty').test(match) && Constants.elConstants.indexOf(match) < 0){
         dynamicProperties.push(match);
       }
     }.bind(this));

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
index 036f529..6296a64 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
@@ -875,7 +875,7 @@ input:invalid {
     width: 50vw;
     height: 40vh;
     overflow: hidden;
-    z-index: 1;
+    z-index: 999;
 }
 
 .loader img {

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
index 8293dbe..93a0541 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
@@ -64,6 +64,9 @@
     </div>
   </nav>
   <div class="container-fluid">
+    <div id='loading'>
+      {{spin-spinner lines=13 length=20 width=10}}
+    </div>
     {{designer-errors errors=errors}}
     <form class="form-horizontal">
       <div class="col-sm-12 paddingtop10">

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
index 6b0ea84..fff8c8c 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
@@ -69,6 +69,9 @@
     </div>
   </div>
 </nav>
+<div id='loading'>
+  {{spin-spinner lines=13 length=20 width=10}}
+</div>
 <div class="container-fluid">
   {{designer-errors errors=errors}}
   <form class="form-horizontal">

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9000931/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js b/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
index 6e281d3..a508905 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/utils/constants.js
@@ -85,4 +85,7 @@ export default Ember.Object.create({
     {displayName:'(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka',gmtOffset:-12, value:'GMT+12:00'}
   ]),
   persistWorkInProgressInterval : 30000,
+  elConstants : [
+    '${YEAR}', '${MONTH}', '${DAY}', '${HOUR}', '${MINUTE}'
+  ]
 });