فهرست منبع

HUE-1176 [jb2] Plugged in Workflow graph

Enrico Berti 8 سال پیش
والد
کامیت
e837ecf

+ 34 - 1
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -640,7 +640,6 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 
   <div class="tab-content">
     <div class="tab-pane active" id="workflow-page-graph">
-      <span data-bind="html: properties['graph']"></span>
     </div>
 
     <div class="tab-pane" id="workflow-page-logs">
@@ -870,6 +869,38 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             vm.job().fetchLogs();
             vm.job().fetchStatus();
 
+            var lastPosition = {
+              top: 0,
+              left: 0
+            }
+
+            var updateArrowPosition = function () {
+              huePubSub.publish('draw.graph.arrows');
+              if ($('canvas').position().top !== lastPosition.top && $('canvas').position().left !== lastPosition.left) {
+                lastPosition = $('canvas').position();
+                window.setTimeout(updateArrowPosition, 100);
+              }
+            }
+
+            if (vm.job().type() === 'workflow') {
+              // load the graph
+              $.ajax({
+                url: "/oozie/list_oozie_workflow/" + vm.job().id(),
+                data: {
+                  'graph': true,
+                  'element': 'workflow-page-graph'
+                },
+                beforeSend: function (xhr) {
+                  xhr.setRequestHeader("X-Requested-With", "Hue");
+                },
+                dataType: "html",
+                success: function (response) {
+                  $('#workflow-page-graph').html(response);
+                  updateArrowPosition();
+                }
+              });
+            }
+
             if (self.mainType() == 'schedules') {
               //vm.job().coordVM.setActions(data.app.actions);
             }
@@ -1073,6 +1104,8 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 </script>
 </span>
 
+<div id="diocan"></div>
+
 % if not is_embeddable:
 ${ commonfooter(request, messages) | n,unicode }
 % endif

+ 9 - 1
apps/oozie/src/oozie/static/oozie/js/workflow-editor.utils.js

@@ -18,6 +18,12 @@ function linkWidgets(fromId, toId) {
   var _from = $("#wdg_" + (typeof fromId == "function" ? fromId() : fromId));
   var _to = $("#wdg_" + (typeof toId == "function" ? toId() : toId));
   if (_from.length > 0 && _to.length > 0) {
+    var $painter = $(document.body);
+
+    if ($('.content-panel').length > 0){
+      $painter = $('.content-panel');
+    }
+
     var _fromCenter = {
       x: _from.position().left + _from.outerWidth() / 2,
       y: _from.position().top + _from.outerHeight() + 3
@@ -45,7 +51,7 @@ function linkWidgets(fromId, toId) {
       _curveCoords.y = _fromCenter.y + (_toCenter.y - _fromCenter.y) / 2;
     }
 
-    $(document.body).curvedArrow({
+    $painter.curvedArrow({
       p0x: _fromCenter.x,
       p0y: _fromCenter.y,
       p1x: _curveCoords.x,
@@ -73,6 +79,8 @@ function drawArrows() {
   }
 }
 
+huePubSub.subscribe('draw.graph.arrows', drawArrows);
+
 function toggleProperties(widget) {
   if (widget.oozieMovable()) {
     var _el = $("#wdg_" + widget.id());

+ 5 - 7
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow.mako

@@ -370,11 +370,15 @@ ${ layout.menubar(section='workflows', dashboard=True) }
 %endif
 
 % if layout_json != '':
+
 <link rel="stylesheet" href="${ static('oozie/css/common-editor.css') }">
 <link rel="stylesheet" href="${ static('oozie/css/workflow-editor.css') }">
+<link rel="stylesheet" href="${ static('desktop/ext/css/bootstrap-editable.css') }">
 
 ${ dashboard.import_layout() }
 
+<script src="${ static('desktop/ext/js/bootstrap-editable.min.js') }"></script>
+<script src="${ static('desktop/js/ko.editable.js') }"></script>
 <script src="${ static('oozie/js/workflow-editor.ko.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('oozie/js/workflow-editor.utils.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('desktop/ext/js/jquery/plugins/jquery.curvedarrow.js') }" type="text/javascript" charset="utf-8"></script>
@@ -417,13 +421,7 @@ ${ dashboard.import_layout() }
 
 <script type="text/javascript">
 
-${ utils.slaGlobal() }
-
-  ko.bindingHandlers.editable = { // overwrite the editable bindings with a simple text filler
-    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
-      $(element).text(valueAccessor()());
-    }
-  }
+  ${ utils.slaGlobal() }
 
   var Action = function (action) {
     return {

+ 54 - 0
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow_graph.mako

@@ -14,7 +14,61 @@
 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
+<%!
+  from django.utils.translation import ugettext as _
+%>
+
 
 <%namespace name="workflow" file="../editor2/common_workflow.mako" />
+<%namespace name="utils" file="../utils.inc.mako" />
+<%namespace name="dashboard" file="/common_dashboard.mako" />
+
+<link rel="stylesheet" href="${ static('oozie/css/common-editor.css') }">
+<link rel="stylesheet" href="${ static('oozie/css/workflow-editor.css') }">
+<link rel="stylesheet" href="${ static('desktop/ext/css/bootstrap-editable.css') }">
+
+${ dashboard.import_layout() }
+
+<script src="${ static('desktop/ext/js/bootstrap-editable.min.js') }"></script>
+<script src="${ static('desktop/js/ko.editable.js') }"></script>
+<script src="${ static('oozie/js/workflow-editor.ko.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('oozie/js/workflow-editor.utils.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('desktop/ext/js/jquery/plugins/jquery.curvedarrow.js') }" type="text/javascript" charset="utf-8"></script>
 
 ${ workflow.render() }
+
+<div id="loaded${doc_uuid}graph">
+  ${ workflow_graph | n,unicode }
+</div>
+
+<script type="text/javascript">
+
+  ${ utils.slaGlobal() }
+
+  % if layout_json != '':
+  var viewModel = new WorkflowEditorViewModel(${ layout_json | n,unicode }, ${ workflow_json | n,unicode }, ${ credentials_json | n,unicode }, ${ workflow_properties_json | n,unicode }, ${ subworkflows_json | n,unicode }, ${ can_edit_json | n,unicode });
+  ko.applyBindings(viewModel, $("#${graph_element_id}")[0]);
+  viewModel.isViewer = ko.observable(true);
+  viewModel.init();
+  fullLayout(viewModel);
+
+  var globalFilechooserOptions = {
+    skipInitialPathIfEmpty: true,
+    showExtraHome: true,
+    uploadFile: true,
+    createFolder: true,
+    extraHomeProperties: {
+      label: '${ _('Workspace') }',
+      icon: 'fa-folder-open',
+      path: viewModel.workflow.properties.deployment_dir()
+    },
+    deploymentDir: viewModel.workflow.properties.deployment_dir()
+  }
+  %endif
+
+  $(document).ready(function() {
+    % if layout_json != '':
+    drawArrows();
+    %endif
+  });
+</script>

+ 13 - 0
apps/oozie/src/oozie/views/dashboard.py

@@ -395,6 +395,19 @@ def list_oozie_workflow(request, job_id):
     }
     return JsonResponse(return_obj, encoder=JSONEncoderForHTML)
 
+  if request.GET.get('graph'):
+    return render('dashboard/list_oozie_workflow_graph.mako', request, {
+      'workflow_graph': workflow_graph,
+      'layout_json': json.dumps(workflow_data.get('layout', ''), cls=JSONEncoderForHTML),
+      'workflow_json': json.dumps(workflow_data.get('workflow', ''), cls=JSONEncoderForHTML),
+      'credentials_json': json.dumps(credentials.credentials.keys(), cls=JSONEncoderForHTML) if credentials else '',
+      'workflow_properties_json': json.dumps(WORKFLOW_NODE_PROPERTIES, cls=JSONEncoderForHTML),
+      'doc_uuid': doc.uuid if doc else '',
+      'graph_element_id': request.GET.get('element') if request.GET.get('element') else 'loaded' + doc_uuid + 'graph',
+      'subworkflows_json': json.dumps(_get_workflows(request.user), cls=JSONEncoderForHTML),
+      'can_edit_json': json.dumps(doc is None or doc.doc.get().is_editable(request.user))
+    })
+
   oozie_slas = []
   if oozie_workflow.has_sla:
     oozie_api = get_oozie(request.user, api_version="v2")