ソースを参照

HUE-1176 [jb] Adding sections to the Workflow page

Romain Rigaux 9 年 前
コミット
db4e5c9

+ 3 - 3
apps/jobbrowser/src/jobbrowser/api2.py

@@ -76,10 +76,10 @@ def action(request):
 
   interface = json.loads(request.POST.get('interface'))
   app_id = json.loads(request.POST.get('app_id'))
-  action = json.loads(request.POST.get('action'))
+  operation = json.loads(request.POST.get('operation'))
 
-  response['action'] = action
-  response['action_status'] = get_api(request.user, interface).action(app_id, action)
+  response['operation'] = operation
+  response['action_status'] = get_api(request.user, interface).action(app_id, operation)
   response['status'] = 0
 
   return JsonResponse(response)

+ 2 - 1
apps/jobbrowser/src/jobbrowser/apis/base_api.py

@@ -50,7 +50,7 @@ class Api(object):
 
   def app(self, appid): return {}
 
-  def action(self, appid, action): return {} # Kill, suspend...
+  def action(self, appid, operation): return {}
 
   def status(self, appid): return {'status': 'RUNNING'}
 
@@ -67,4 +67,5 @@ class MockDjangoRequest():
   def __init__(self, user):
     self.user = user
     self.jt = None
+    self.GET = {'format': 'json'}
     self.method = "POST"

+ 4 - 3
apps/jobbrowser/src/jobbrowser/apis/job_api.py

@@ -50,7 +50,8 @@ class JobApi(Api):
   def app(self, appid):
     return self._get_api(appid).app(appid)
 
-  def action(self, appid, action): self._get_api(appid).action(action, appid)
+  def action(self, appid, operation):
+    return self._get_api(appid).action(operation, appid)
 
   def logs(self, appid, app_type):
     return self._get_api(appid).logs(appid, app_type)
@@ -121,8 +122,8 @@ class YarnApi(Api):
     return common
 
 
-  def action(self, action, appid):
-    if action == 'kill':
+  def action(self, operation, appid):
+    if operation['action'] == 'kill':
       return kill_job(MockDjangoRequest(self.user), job=appid)
     else:
       return {}

+ 12 - 1
apps/jobbrowser/src/jobbrowser/apis/workflow_api.py

@@ -29,7 +29,7 @@ LOG = logging.getLogger(__name__)
 
 try:
   from oozie.conf import OOZIE_JOBS_COUNT
-  from oozie.views.dashboard import get_oozie_job_log, list_oozie_workflow
+  from oozie.views.dashboard import get_oozie_job_log, list_oozie_workflow, manage_oozie_jobs, bulk_manage_oozie_jobs
 except Exception, e:
   LOG.exception('Some application are not enabled for Job Browser v2: %s' % e)
 
@@ -64,6 +64,17 @@ class WorkflowApi(Api):
 
     return common
 
+
+  def action(self, appid, action):
+    request = MockDjangoRequest(self.user)
+    manage_oozie_jobs(request, action)
+
+    if action == 'change' or action == 'ignore' or ',' not in appid:
+      return manage_oozie_jobs(request, action)
+    else:
+      return bulk_manage_oozie_jobs(request)
+
+
   def logs(self, appid, app_type):
     request = MockDjangoRequest(self.user)
     data = get_oozie_job_log(request, job_id=appid)

+ 26 - 10
apps/jobbrowser/src/jobbrowser/templates/apps.mako

@@ -296,7 +296,6 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
   </div>
 
   <a href="javascript:void(0)" data-bind="click: function() { changeStatus('kill'); }">Stop</a>
-    
 
   </br>
 
@@ -578,7 +577,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
   ${ _('Submitted') } <span data-bind="text: submitted"></span>
 
   </br></br>
-  Variables</br>
+  Variables, Workspace</br>
   Duration 8s</br>
   </br></br>
 
@@ -586,7 +585,9 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     <div class="bar" data-bind="style: {'width': progress() + '%'}"></div>
   </div>
 
-  Stop | Resume
+  <a href="javascript:void(0)" data-bind="click: function() { changeStatus('kill'); }">Stop</a> |
+  <a href="javascript:void(0)" data-bind="click: function() { changeStatus('resume'); }">Resume</a> |
+  <a href="javascript:void(0)" data-bind="click: function() { changeStatus('rerun'); }">Rerun</a>
 
   <br/>
 
@@ -594,7 +595,8 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     <li class="active"><a href="#workflow-page-graph" data-toggle="tab">${ _('Graph') }</a></li>
     <li><a href="#workflow-page-logs" data-toggle="tab">${ _('Logs') }</a></li>
     <li><a href="#workflow-page-tasks" data-toggle="tab">${ _('Tasks') }</a></li>
-    <li><a href="#workflow-page-metadata" data-toggle="tab">${ _('Metadata') }</a></li>
+    <li><a href="#workflow-page-metadata" data-toggle="tab">${ _('Properties') }</a></li>
+    <li><a href="#workflow-page-xml" data-toggle="tab">${ _('XML') }</a></li>
   </ul>
 
   <div class="tab-content">
@@ -607,13 +609,12 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     </div>
 
     <div class="tab-pane" id="workflow-page-tasks">
-      <table class="table table-condensed">
-      </table>
     </div>
 
     <div class="tab-pane" id="workflow-page-metadata">
-      <table class="table table-condensed">
-      </table>
+    </div>
+    
+    <div class="tab-pane" id="workflow-page-xml">
     </div>
   </div>
 
@@ -748,10 +749,10 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           app_id: ko.mapping.toJSON(self.id),
           interface: ko.mapping.toJSON(vm.interface),
           app_type: ko.mapping.toJSON(self.type),
-          action: ko.mapping.toJSON(name)
+          operation: ko.mapping.toJSON({action: name})
         }, function (data) {
           if (data.status == 0) {
-            
+
           } else {
             $(document).trigger("error", data.message);
           }
@@ -790,6 +791,21 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           self.loadingJobs(false);
         });
       };
+
+      self.changeStatuses = function (name) {
+        $.post("/jobbrowser/api/job/action", {
+          app_id: ko.mapping.toJSON(self.id), // CSV list
+          interface: ko.mapping.toJSON(vm.interface),
+          operation: ko.mapping.toJSON({action: name})
+        }, function (data) {
+          if (data.status == 0) {
+
+          } else {
+            $(document).trigger("error", data.message);
+          }
+        }).always(function () {
+        });
+      };
     };
 
     var JobBrowserViewModel = function (options, RunningCoordinatorModel) {