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

HUE-4116 [editor] Loads the coordinator of the query

Romain Rigaux 9 жил өмнө
parent
commit
25bf2b2

+ 4 - 1
apps/oozie/src/oozie/static/oozie/js/coordinator-editor.ko.js

@@ -203,7 +203,7 @@ var CoordinatorEditorViewModel = function (coordinator_json, credentials_json, w
   }
 
 
-  self.save = function () {
+  self.save = function (cb) {
     if (!self.isSaving()) {
       self.isSaving(true);
       $(".jHueNotify").hide();
@@ -214,6 +214,9 @@ var CoordinatorEditorViewModel = function (coordinator_json, credentials_json, w
           self.coordinator.id(data.id);
           self.coordinator.tracker().markCurrentStateAsClean();
           $(document).trigger("info", data.message);
+          if (cb) {
+            cb(data);
+          }
           if (window.location.search.indexOf("coordinator") == -1) {
             window.location.hash = '#coordinator=' + data.id;
           }

+ 7 - 6
apps/oozie/src/oozie/views/editor2.py

@@ -495,10 +495,8 @@ def edit_coordinator(request):
     # Has already a workflow managing the query for this user?
     workflows = Document2.objects.filter(type='oozie-workflow2', owner=request.user, is_managed=True, dependencies__uuid__in=[document_uuid])
     if workflows.exists():
-      print workflows
       workflow_doc = workflows.get()
     else:
-      print 'create'
       workflow_doc = WorkflowBuilder().create_workflow(doc_uuid=document_uuid, user=request.user, managed=True)
     workflow_uuid = workflow_doc.uuid
     coordinator.data['name'] = _('Schedule of %s') % workflow_doc.name
@@ -603,10 +601,12 @@ def save_coordinator(request):
     Document.objects.link(coordinator_doc, owner=coordinator_doc.owner, name=coordinator_doc.name, description=coordinator_doc.description, extra='coordinator2')
 
   if coordinator_data['properties']['workflow']:
-    dependencies = Document2.objects.filter(type='oozie-workflow2', uuid=coordinator_data['properties']['workflow'])
-    for doc in dependencies:
-      doc.doc.get().can_read_or_exception(request.user)
-    coordinator_doc.dependencies = dependencies
+    workflow_doc = Document2.objects.get(type='oozie-workflow2', uuid=coordinator_data['properties']['workflow'])
+    workflow_doc.doc.get().can_read_or_exception(request.user)
+    coordinator_doc.dependencies = [workflow_doc]
+    scheduled_doc = workflow_doc.dependencies.filter(type__startswith='query-', owner=request.user, is_managed=True)
+    if scheduled_doc.exists():
+      print scheduled_doc
 
   coordinator_doc1 = coordinator_doc.doc.get()
   coordinator_doc.update_data(coordinator_data)
@@ -617,6 +617,7 @@ def save_coordinator(request):
 
   response['status'] = 0
   response['id'] = coordinator_doc.id
+  response['uuid'] = coordinator_doc.uuid
   response['message'] = _('Saved !')
 
   return JsonResponse(response)

+ 53 - 43
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1116,6 +1116,7 @@
     self.name = ko.observable(typeof notebook.name != "undefined" && notebook.name != null ? notebook.name : 'My Notebook');
     self.description = ko.observable(typeof notebook.description != "undefined" && notebook.description != null ? notebook.description: '');
     self.type = ko.observable(typeof notebook.type != "undefined" && notebook.type != null ? notebook.type : 'notebook');
+    self.coordinatorUuid = ko.observable(typeof notebook.coordinatorUuid != "undefined" && notebook.coordinatorUuid != null ? notebook.coordinatorUuid : null);
     self.isHistory = ko.observable(typeof notebook.is_history != "undefined" && notebook.is_history != null ? notebook.is_history : false);
     self.parentSavedQueryUuid = ko.observable(typeof notebook.parentSavedQueryUuid != "undefined" && notebook.parentSavedQueryUuid != null ? notebook.parentSavedQueryUuid : null); // History parent
     self.isSaved = ko.observable(typeof notebook.isSaved != "undefined" && notebook.isSaved != null ? notebook.isSaved : false);
@@ -1542,6 +1543,58 @@
       $(document).trigger("hideHistoryModal");
     };
 
+    self.schedulerViewModel;
+
+    self.loadScheduler = function() {      
+      var _action;
+      if (self.coordinatorUuid()) {
+    	_action = 'edit';
+      } else {
+    	_action = 'new';
+      }
+      logGA('schedule/' + _action);
+
+      $.get('/oozie/editor/coordinator/' + _action + '/', {
+        format: 'json',
+        document: self.uuid(),
+        uuid: self.coordinatorUuid()
+      }, function (data) {
+        $("#schedulerEditor").html(data.layout);
+        self.schedulerViewModel = new CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
+
+        ko.cleanNode($("#schedulerEditor")[0]);
+        ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
+
+        schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
+        schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
+      }).fail(function (xhr) {
+        $(document).trigger("error", xhr.responseText);
+      });
+    };
+
+    self.saveScheduler = function() {
+      self.schedulerViewModel.coordinator.name('My daily run');  // TODO Temp fix until js errors are gone
+      self.schedulerViewModel.save(function(data) {
+    	self.coordinatorUuid(data.uuid);
+      });
+    };
+
+    self.viewSchedulerId = ko.observable('0000000-160519110441280-oozie-oozi-C');
+    self.viewScheduler = function() {
+      logGA('schedule/view');
+      $.get("/oozie/list_oozie_coordinator/" + self.viewSchedulerId(), {
+        format: 'json'
+      }, function (data) {
+        $("#schedulerViewer").text(ko.mapping.toJSON(data));
+
+        //var viewModel = new RunningCoordinatorModel(data.actions);
+        //ko.cleanNode($("#schedulerViewer")[0]);
+        //ko.applyBindings(viewModel, $("#schedulerViewer")[0]);
+      }).fail(function (xhr) {
+        $(document).trigger("error", xhr.responseText);
+      });
+    };
+    
     self.exportJupyterNotebook = function () {
       function addCell(type, code) {
         var cell = {
@@ -1835,49 +1888,6 @@
       self.selectedNotebook().parentSavedQueryUuid(null);
       self.saveNotebook();
     };
-
-    var schedulerViewModel;
-
-    self.loadScheduler = function() {
-      logGA('schedule/edit');
-      // Create or load existing schedule
-      $.get("/oozie/editor/coordinator/new/", {
-        format: 'json',
-        document: self.selectedNotebook().uuid()
-      }, function (data) {
-        $("#schedulerEditor").html(data.layout);
-        schedulerViewModel = new CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
-
-        ko.cleanNode($("#schedulerEditor")[0]);
-        ko.applyBindings(schedulerViewModel, $("#schedulerEditor")[0]);
-
-        schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
-        schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
-      }).fail(function (xhr) {
-        $(document).trigger("error", xhr.responseText);
-      });
-    };
-
-    self.saveScheduler = function() {
-      schedulerViewModel.coordinator.name('My daily run');
-      schedulerViewModel.save();  // {"status": 0, "message": "Saved !", "id": 52677}
-    };
-
-    self.viewSchedulerId = ko.observable('0000000-160519110441280-oozie-oozi-C');
-    self.viewScheduler = function() {
-      logGA('schedule/view');
-      $.get("/oozie/list_oozie_coordinator/" + self.viewSchedulerId(), {
-        format: 'json'
-      }, function (data) {
-        $("#schedulerViewer").text(ko.mapping.toJSON(data));
-
-        //var viewModel = new RunningCoordinatorModel(data.actions);
-        //ko.cleanNode($("#schedulerViewer")[0]);
-        //ko.applyBindings(viewModel, $("#schedulerViewer")[0]);
-      }).fail(function (xhr) {
-        $(document).trigger("error", xhr.responseText);
-      });
-    };
   }
 
   function logGA(page) {

+ 22 - 15
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -1046,29 +1046,36 @@ ${ hueIcons.symbols() }
     % if ENABLE_QUERY_SCHEDULING.get():
     <div class="tab-pane" id="scheduleTab">
       <legend><i class="fa fa-calendar"></i> ${ _('Schedule') }</legend>
+      
+      <!-- ko if: $root.selectedNotebook() -->
+      <!-- ko with: $root.selectedNotebook() -->
+        <!-- ko if: $root.selectedNotebook().id() -->
+          <a data-bind="click: loadScheduler">Load</a></br>
+          <a data-bind="click: saveScheduler">Save</a></br></br>
+           Start</br>
+          <a href="#scheduledJobsTab" data-toggle="tab">${_('View')}</a>
+
+          <div id="schedulerEditor">
+          </div>
+        <!-- /ko -->
 
-      <!-- ko if: $root.selectedNotebook() && $root.selectedNotebook().id() -->
-        <a data-bind="click: $root.loadScheduler">Load scheduler</a></br>
-        <a data-bind="click: $root.saveScheduler">Save coord</a></br></br>
-
-        Start</br>
-        <a href="#scheduledJobsTab" data-toggle="tab">${_('View')}</a>
-
-        <div id="schedulerEditor">
-        </div>
+        <!-- ko ifnot: $root.selectedNotebook().id() -->
+          ${ _('Document needs to be saved first.') }
+        <!-- /ko -->
       <!-- /ko -->
-
-      <!-- ko ifnot: $root.selectedNotebook() && $root.selectedNotebook().id() -->
-        ${ _('Document needs to be saved first.') }
       <!-- /ko -->
     </div>
 
     ## To move to 'notification' panel
     <div class="tab-pane" id="scheduledJobsTab">
-      <input type="text" data-bind="value: viewSchedulerId, click: viewScheduler"></input>
+      <!-- ko if: $root.selectedNotebook() -->
+      <!-- ko with: $root.selectedNotebook() -->    
+        <input type="text" data-bind="value: viewSchedulerId, click: viewScheduler"></input>
 
-      <div id="schedulerViewer">
-      </div>
+        <div id="schedulerViewer">
+        </div>
+      <!-- /ko -->
+      <!-- /ko -->
     </div>
     % endif