Ver código fonte

[oozie] Look for parameters in Workflows

Romain Rigaux 11 anos atrás
pai
commit
3c4e811

+ 62 - 45
apps/oozie/src/oozie/models2.py

@@ -101,17 +101,7 @@ class Workflow():
       
   @property
   def id(self):
-    return self.document.id
-
-  @property      
-  def deployment_dir(self):
-    _data = json.loads(self.data)
-    return _data['workflow']['properties']['deployment_dir']
-  
-  @property      
-  def parameters(self):
-    _data = json.loads(self.data)
-    return _data['workflow']['properties']['parameters']  
+    return self.document.id  
   
   def get_json(self):
     _data = self.get_data()
@@ -127,11 +117,11 @@ class Workflow():
     else:
       _data['workflow']['dependencies'] = []
 
-    if 'properties' not in _data['workflow']:
-      _data['workflow']['properties'] = {}
-      
-    if 'properties' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['properties'] = []      
+#    if 'properties' not in _data['workflow']:
+#      _data['workflow']['properties'] = {}
+#      
+#    if 'properties' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['properties'] = []      
     if 'deployment_dir' not in _data['workflow']['properties']:
       default_dir = Hdfs.join(REMOTE_SAMPLE_DIR.get(), 'hue-oozie-%s' % time.time()) # Could be home of user too
       _data['workflow']['properties']['deployment_dir'] = default_dir
@@ -140,18 +130,18 @@ class Workflow():
           {'name': 'oozie.use.system.libpath', 'value': True},
       ]
 
-    if 'sla_workflow_enabled' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['sla_workflow_enabled'] = False
-    if 'sla_enabled' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['sla_enabled'] = False            
-    
-    if 'schema_version' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['schema_version'] = 'uri:oozie:workflow:0.4'
-    if 'job_xml' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['job_xml'] = ''
-
-    if 'credentials' not in _data['workflow']['properties']:
-      _data['workflow']['properties']['credentials'] = []
+#    if 'sla_workflow_enabled' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['sla_workflow_enabled'] = False
+#    if 'sla_enabled' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['sla_enabled'] = False            
+#    
+#    if 'schema_version' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['schema_version'] = 'uri:oozie:workflow:0.4'
+#    if 'job_xml' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['job_xml'] = ''
+#
+#    if 'credentials' not in _data['workflow']['properties']:
+#      _data['workflow']['properties']['credentials'] = []
 
     return _data
   
@@ -161,8 +151,7 @@ class Workflow():
     tmpl = 'editor/gen2/workflow.xml.mako'
 
     data = self.get_data()
-    nodes = [Node(node) for node in data['workflow']['nodes'] if node['name'] != 'End'] + [
-                Node(node) for node in data['workflow']['nodes'] if node['name'] == 'End'] # End at the end
+    nodes = [node for node in self.nodes if node['name'] != 'End'] + [node for node in self.nodes if node['name'] == 'End'] # End at the end
     node_mapping = dict([(node.id, node) for node in nodes])
     
     sub_wfs_ids = [node.data['properties']['workflow'] for node in nodes if node.data['type'] == 'subworkflow']
@@ -177,27 +166,46 @@ class Workflow():
           }))
     return force_unicode(xml)  
 
+  @property      
+  def deployment_dir(self):
+    _data = self.get_data()
+    return _data['workflow']['properties']['deployment_dir']
+  
+  @property      
+  def parameters(self):
+    _data = self.get_data()
+    return _data['workflow']['properties']['parameters']
+
+  @property      
+  def sla_enabled(self):
+    _data = self.get_data()
+    return _data['workflow']['properties']['sla_enabled']
+
+  @property      
+  def sla(self):
+    _data = self.get_data()
+    return _data['workflow']['properties']['sla']
+
+  @property      
+  def nodes(self):
+    _data = self.get_data()
+    return [Node(node) for node in _data['workflow']['nodes']]
+
   def find_parameters(self):
     params = set()
 
-#    if self.sla_enabled:
-#      for param in find_json_parameters(self.sla):
-#        params.add(param)
+    if self.sla_enabled:
+      for param in find_json_parameters(self.sla):
+        params.add(param)
 
-#    for node in self.node_list:
-#      if hasattr(node, 'find_parameters'):
-#        params.update(node.find_parameters())
+    for node in self.nodes:
+      params.update(node.find_parameters())
 
     return dict([(param, '') for param in list(params)])
 
   def find_all_parameters(self):
     params = self.find_parameters()
 
-#    if hasattr(self, 'sla') and self.sla_enabled:
-#      for param in find_json_parameters(self.sla):
-#        if param not in params:
-#          params[param] = ''
-
     for param in self.parameters:
       params[param['name'].strip()] = param['value']
 
@@ -236,13 +244,18 @@ class Node():
 
     return django_mako.render_to_string(self.get_template_name(), data)
 
+  @property      
+  def id(self):
+    return self.data['id']
+  
   @property      
   def name(self):
     return self.data['name']
-  
+
   @property      
-  def id(self):
-    return self.data['id']    
+  def sla_enabled(self):
+    _data = self.get_data()
+    return _data['workflow']['properties']['sla_enabled']
 
   def _augment_data(self):
     self.data['type'] = self.data['type'].replace('-widget', '')
@@ -271,6 +284,9 @@ class Node():
   def get_template_name(self):
     return 'editor/gen2/workflow-%s.xml.mako' % self.data['type']    
 
+  def find_parameters(self):
+    return find_parameters(self.data)    
+
 
 class Action(object):
   
@@ -1011,7 +1027,8 @@ for node in NODES.itervalues():
 def find_parameters(instance, fields=None):
   """Find parameters in the given fields"""
   if fields is None:
-    fields = [field.name for field in instance._meta.fields]
+    fields = NODES[self.data['type']].FIELDS.keys()
+    #fields = [field.name for field in instance._meta.fields]
 
   params = []
   for field in fields:

+ 2 - 3
apps/oozie/src/oozie/templates/editor/coordinator_editor.mako

@@ -40,9 +40,6 @@ ${ commonheader(_("Coordinator Editor"), "Oozie", user) | n,unicode }
     <a title="${ _('Gen XML') }" rel="tooltip" data-placement="bottom" data-bind="click: gen_xml, css: {'btn': true}">
       <i class="fa fa-file-code-o"></i>
     </a>
-    <a title="${ _('Import coordinators') }" rel="tooltip" data-placement="bottom" data-bind="click: import_coordinators, css: {'btn': true}">
-      <i class="fa fa fa-download"></i>
-    </a>
     &nbsp;&nbsp;&nbsp;
     <a title="${ _('Submit') }" rel="tooltip" data-placement="bottom" data-bind="click: showSubmitPopup, css: {'btn': true}">
       <i class="fa fa-play"></i>
@@ -72,6 +69,8 @@ ${ commonheader(_("Coordinator Editor"), "Oozie", user) | n,unicode }
   <form class="form-search" style="margin: 0">
     <strong>${_("Name")}</strong>
     <input data-bind="value: $root.coordinator.name"/>
+    &nbsp;&nbsp;&nbsp;
+    Scrollspy?
   </form>
 </div>
 

+ 5 - 36
apps/oozie/static/js/coordinator-editor.ko.js

@@ -14,24 +14,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-var Dataset = function (vm, dataset) {
-  var self = this;
-
-}
-
-
-var InputDataset = function (vm, input_dataset) {
-  var self = this;
-  
-  
-}
-
-
-var OutputDataset = function (vm, output_dataset) {
-  var self = this;
-  
-  
-}
 
 var Coordinator = function (vm, coordinator) {
   var self = this;
@@ -49,7 +31,8 @@ var Coordinator = function (vm, coordinator) {
   self.properties.workflow.subscribe(function(newVal) {
     if (newVal) {
 	  $.get("/desktop/api2/doc/get", {
-        "uuid": self.properties.workflow()
+        "uuid": self.properties.workflow(),
+        "with_data": true
 	   }, function (data) {
 	    // set wf
 	  }).fail(function (xhr, textStatus, errorThrown) {
@@ -60,11 +43,11 @@ var Coordinator = function (vm, coordinator) {
   
   self.addVariable = function() {
     var _var = {       
-       'workflow_variable': '',
+       'workflow_variable': '', // Variable we want to fill in the workflow
        
        'dataset_type': 'parameter',
        
-       'uuid': UUID(),
+       'uuid': UUID(), // Dataset
        'dataset_variable': '',       
        'show_advanced': false,
        'use_done_flag': false,
@@ -148,20 +131,6 @@ var CoordinatorEditorViewModel = function (coordinator_json, credentials_json, w
       $(document).trigger("error", xhr.responseText);
     });
   };
-
-  self.import_coordinators = function () {
-    $.post("/oozie/editor/coordinator/import_coordinators/", {
-    }, function (data) {
-      if (data.status == 0) {
-        console.log(data.json);
-      }
-      else {
-        $(document).trigger("error", data.message);
-     }
-   }).fail(function (xhr, textStatus, errorThrown) {
-      $(document).trigger("error", xhr.responseText);
-    });
-  };
   
   self.showSubmitPopup = function () {
     // If self.coordinator.id() == null, need to save wf for now
@@ -180,4 +149,4 @@ function logGA(page) {
   if (typeof trackOnGA == 'function') {
     trackOnGA('oozie/editor/coordinator/' + page);
   }
-}
+}