Эх сурвалжийг харах

[oozie] Add set_link() and get_link() to a Node

Romain Rigaux 11 жил өмнө
parent
commit
7a551d6

+ 4 - 4
apps/oozie/src/oozie/models2.py

@@ -67,7 +67,6 @@ class Workflow():
           'layout': [
               {"size":12, "rows":[
                     {"widgets":[{"size":12, "name":"Start", "id":"3f107997-04cc-8733-60a9-a4bb62cebffc", "widgetType":"start-widget", "properties":{}, "offset":0, "isLoading":False, "klass":"card card-widget span12"}]},
-                    # {"widgets":[]},
                     {"widgets":[{"size":12, "name":"End", "id":"33430f0f-ebfa-c3ec-f237-3e77efa03d0a", "widgetType":"end-widget", "properties":{}, "offset":0, "isLoading":False, "klass":"card card-widget span12"}]}], 
                  "drops":[ "temp"],
                  "klass":"card card-home card-column span12"}              
@@ -85,7 +84,8 @@ class Workflow():
               },
               "nodes":[
                   {"id":"3f107997-04cc-8733-60a9-a4bb62cebffc","name":"Start","type":"start-widget","properties":{},"children":[{'to': '33430f0f-ebfa-c3ec-f237-3e77efa03d0a'}]},            
-                  {"id":"33430f0f-ebfa-c3ec-f237-3e77efa03d0a","name":"End","type":"end-widget","properties":{},"children":[]}
+                  {"id":"33430f0f-ebfa-c3ec-f237-3e77efa03d0a","name":"End","type":"end-widget","properties":{},"children":[]},
+                  {"id":"17c9c895-5a16-7443-bb81-f34b30b21548","name":"Kill","type":"kill-widget","properties":{'message': _('Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]')},"children":[]}
               ]
           }
       })
@@ -210,7 +210,7 @@ class Node():
       mapping = {}
     if node_mapping is None:
       node_mapping = {}
-      
+
     data = {
       'node': self.data,
       'mapping': mapping,
@@ -226,7 +226,7 @@ class Node():
   @property      
   def id(self):
     return self.data['id']    
-  
+
   def _augment_data(self):
     self.data['type'] = self.data['type'].replace('-widget', '')
     self.data['uuid'] = self.data['id']

+ 2 - 2
apps/oozie/src/oozie/templates/editor/gen2/workflow-kill.xml.mako

@@ -15,6 +15,6 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 
-    <kill name="${ node }">
-        <message>${ node.message }</message>
+    <kill name="${ node['name'] }">
+        <message>${ node['properties']['message'] }</message>
     </kill>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/gen2/workflow-pig.xml.mako

@@ -39,7 +39,7 @@
 
             ${ common.distributed_cache(node['properties']['files'], node['properties']['archives']) }
         </pig>
-        <ok to="${ node_mapping[node['children'][0]['to']] }"/>
-        <error to="${ node_mapping[node['children'][0]['to']] }"/>
+        <ok to="${ node_mapping[node['children'][0]['ok']] }"/>
+        <error to="${ node_mapping[node['children'][1]['error']] }"/>
         ${ common.sla(node) }
     </action>

+ 6 - 27
apps/oozie/src/oozie/templates/editor/workflow_editor.mako

@@ -68,23 +68,6 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
     </div>
 
     <div data-bind="css: { 'draggable-widget': true }" rel="tooltip" data-placement="top">
-
-    </div>
-
-    <div data-bind="css: { 'draggable-widget': true },
-                    draggable: {data: draggableForkNode(), isEnabled: true,
-                    options: {'start': function(event, ui){lastWindowScrollPosition = $(window).scrollTop();$('.card-body').slideUp('fast');},
-                              'stop': function(event, ui){$('.card-body').slideDown('fast', function(){$(window).scrollTop(lastWindowScrollPosition)});}}}"
-         title="${_('Fork')}" rel="tooltip" data-placement="top">
-         <a class="draggable-icon"><i class="fa fa-share-alt"></i></a>
-    </div>
-
-    <div data-bind="css: { 'draggable-widget': true },
-                    draggable: {data: draggableDecisionNode(), isEnabled: true,
-                    options: {'start': function(event, ui){lastWindowScrollPosition = $(window).scrollTop();$('.card-body').slideUp('fast');},
-                              'stop': function(event, ui){$('.card-body').slideDown('fast', function(){$(window).scrollTop(lastWindowScrollPosition)});}}}"
-         title="${_('Decision')}" rel="tooltip" data-placement="top">
-         <a class="draggable-icon"><i class="fa fa-question"></i></a>
     </div>
 
     <div data-bind="css: { 'draggable-widget': true },
@@ -209,6 +192,7 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
   </div>
 </script>
 
+
 <script type="text/html" id="row-template">
   <div class="container-fluid">
     <div class="row-fluid">
@@ -288,14 +272,6 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
 </script>
 
 
-
-
-
-
-
-
-
-
 <script type="text/html" id="start-widget">
   <!-- ko if: $root.workflow.getNodeById(id()) -->
   <div class="row-fluid" data-bind="with: $root.workflow.getNodeById(id())">
@@ -493,8 +469,11 @@ ${ commonheader(_("Workflow Editor"), "Oozie", user) | n,unicode }
           <select data-bind="options: $root.credentials, value: properties.credentials" size="5" multiple="true"></select>
         </div>
         <div class="tab-pane" id="transitions">
-          OK --> []
-          KO --> []
+          <!-- ko if: children().length > 0 -->
+          OK --> <input type="text" data-bind="value: children()[0]['ok']" />
+          <br/>
+          KO --> <input type="text" data-bind="value: children()[0]['error']" />
+          <!-- /ko -->
         </div>
       </div>
     </div>

+ 8 - 9
apps/oozie/src/oozie/views/editor2.py

@@ -128,7 +128,12 @@ P = {
       'name': 'script_path',
       'label': _("Script Path"),
       'value': ''
-  }
+  },
+  'message': {
+      'name': 'message',
+      'label': _("Message"),
+      'value': ''
+  }     
 }
 
 def new_node(request):
@@ -137,8 +142,6 @@ def new_node(request):
   workflow = json.loads(request.POST.get('workflow', '{}')) # TODO perms
   node = json.loads(request.POST.get('node', '{}'))
 
-  print node
-  
   properties = []
   workflows = []
 
@@ -148,6 +151,8 @@ def new_node(request):
     properties = [P['script_path']]
   elif node['widgetType'] == 'hive-widget':
     properties = [P['script_path']]
+  elif node['widgetType'] == 'kill-widget':
+    properties = [P['message']]
   elif node['widgetType'] == 'subworkflow-widget':
     workflows = [{
         'name': workflow.name,
@@ -156,9 +161,6 @@ def new_node(request):
       } for workflow in Document2.objects.filter(type='oozie-workflow2', owner=request.user)
     ]
     
-  print properties
-  
-
   response['status'] = 0
   response['properties'] = properties 
   response['workflows'] = workflows
@@ -174,9 +176,6 @@ def add_node(request):
   properties = json.loads(request.POST.get('properties', '{}'))
   subworkflow = json.loads(request.POST.get('subworkflow', '{}'))
 
-  print node
-  print subworkflow
-  
   properties = response['properties'] = dict([(property['name'], property['value']) for property in properties])
   if subworkflow:
     properties.update({

+ 59 - 8
apps/oozie/static/js/workflow-editor.ko.js

@@ -96,6 +96,34 @@ var Node = function (node) {
 
   self.properties = ko.mapping.fromJS(typeof node.properties != "undefined" && node.properties != null ? node.properties : {});
   self.children = ko.mapping.fromJS(typeof node.children != "undefined" && node.children != null ? node.children : []);
+  
+  self.get_link = function(name) {
+    var _link = null;
+    $.each(self.children(), function(index, link) {
+      if (name in link) {
+        _link = link;
+        return false;
+      }
+    });
+    return _link;
+  }
+  
+  self.set_link = function(name, node_id) {
+	var _link = {};
+    $.each(self.children(), function(index, link) {
+      if (name in link) {
+        _link = link;
+        return false;
+      }
+    });
+    
+    var notFound = $.isEmptyObject(_link);
+    _link[name] = node_id;
+    
+    if (notFound) {
+      self.children.push(_link);
+    }
+  }
 }
 
 
@@ -144,20 +172,45 @@ var Workflow = function (vm, workflow) {
         "properties": ko.mapping.toJSON(viewModel.addActionProperties()),
         "subworkflow": viewModel.selectedSubWorkflow() ? ko.mapping.toJSON(viewModel.selectedSubWorkflow()) : '{}',
       }, function (data) {
-      if (data.status == 0) {        
+      if (data.status == 0) {
         var _node = ko.mapping.toJS(widget);
         _node.properties = data.properties;
         _node.name = data.name;
-        var node = new Node(_node);
-        node.children().push({'to': '33430f0f-ebfa-c3ec-f237-3e77efa03d0a'}) // Link to child
 
+        var node = new Node(_node);    	 
+        
         // Add to list of nodes
         var end = self.nodes.pop();
         self.nodes.push(node);
-        self.nodes.push(end);
+        self.nodes.push(end);        
+        
+       // if node != kill node
+
+        // if was dragged on the sides ?
+    	  // get neighbor
+    	  
+    	// else    	  
+    	  // get parent
+          var parent = self.nodes()[0];
+    	  
+    	  // if parent is start node
+          if (self.nodes().length == 4) {	        
+	        // Star node link to new node	        
+	        parent.set_link('to', node.id());
+	        
+	        // Link to end
+	        node.set_link('ok', '33430f0f-ebfa-c3ec-f237-3e77efa03d0a');
+	        node.set_link('error', '17c9c895-5a16-7443-bb81-f34b30b21548');
+          } else {
+          // else if parent regular node        	
+        	var parent = self.nodes()[self.nodes().length - 3];
+        	
+  	        node.set_link('ok', parent.get_link('ok'));
+  	        parent.set_link('ok', node.id());        	  
+          }    	  
+    	  // else if parent fork/decision/join...
+          
 
-        self.nodes()[0].children.removeAll(); // Parent link to new node
-        self.nodes()[0].children().push({'to': node.id()});
       } else {
         $(document).trigger("error", data.message);
        }
@@ -465,7 +518,5 @@ var WorkflowEditorViewModel = function (layout_json, workflow_json, credentials_
   self.draggableMapReduceAction = ko.observable(bareWidgetBuilder("MapReduce job", "mapreduce-widget"));
   self.draggableSubworkflowAction = ko.observable(bareWidgetBuilder("Sub workflow", "subworkflow-widget"));
 
-  self.draggableForkNode = ko.observable(bareWidgetBuilder("Fork", "fork-widget"));
-  self.draggableDecisionNode = ko.observable(bareWidgetBuilder("Decision", "decision-widget"));
   self.draggableStopNode = ko.observable(bareWidgetBuilder("Kill", "kill-widget"));
 };