Pārlūkot izejas kodu

HUE-1176 [jb] Add workflow action page

Romain Rigaux 8 gadi atpakaļ
vecāks
revīzija
585bc48

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

@@ -22,6 +22,7 @@ from django.utils.translation import ugettext as _
 
 from jobbrowser.apis.base_api import Api, MockDjangoRequest
 from liboozie.oozie_api import get_oozie
+from oozie.views.dashboard import list_oozie_workflow_action
 
 
 LOG = logging.getLogger(__name__)
@@ -54,10 +55,13 @@ class WorkflowApi(Api):
 
 
   def app(self, appid):
+    if '@' in appid:
+      return WorkflowActionApi(self.user).app(appid)
+
     oozie_api = get_oozie(self.user)
     workflow = oozie_api.get_job(jobid=appid)
 
-    common = {'id': workflow.id, 'name': workflow.appName, 'status': workflow.status}
+    common = {'id': workflow.id, 'name': workflow.appName, 'status': workflow.status, 'type': 'workflow'}
 
     request = MockDjangoRequest(self.user)
     response = list_oozie_workflow(request, job_id=appid)
@@ -80,12 +84,19 @@ class WorkflowApi(Api):
 
 
   def logs(self, appid, app_type):
+    if '@' in appid:
+      return WorkflowActionApi(self.user).logs(appid, app_type)
+
     request = MockDjangoRequest(self.user)
     data = get_oozie_job_log(request, job_id=appid)
 
     return {'progress': 0, 'logs': {'default': json.loads(data.content)['log']}}
 
+
   def profile(self, appid, app_type, app_property):
+    if '@' in appid:
+      return WorkflowActionApi(self.self.user).profile(appid, app_type, app_property)
+
     if app_property == 'xml':
       oozie_api = get_oozie(self.user)
       workflow = oozie_api.get_job(jobid=appid)
@@ -100,3 +111,21 @@ class WorkflowApi(Api):
       }
 
     return {}
+
+
+class WorkflowActionApi(Api):
+
+  def app(self, appid):
+    oozie_api = get_oozie(self.user)
+    action = oozie_api.get_action(action_id=appid)
+
+    common = action.to_json()
+    
+    common['action_type'] = common['type']
+    common['type'] = 'workflow-action'
+
+    return common
+
+
+  def logs(self, appid, app_type):
+    return {'progress': 0, 'logs': {'default': ''}}

+ 24 - 8
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -177,22 +177,30 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           </div>
 
           <!-- ko if: $root.job() -->
-            <!-- ko if: $root.job().mainType() == 'apps' -->
-              <div data-bind="template: { name: 'job-page', data: $root.job() }"></div>
+          <!-- ko with: $root.job() -->
+            <!-- ko if: mainType() == 'apps' -->
+              <div data-bind="template: { name: 'job-page' }"></div>
             <!-- /ko -->
 
-            <!-- ko if: $root.job().mainType() == 'workflows' -->
-              <div data-bind="template: { name: 'workflow-page', data: $root.job() }"></div>
+            <!-- ko if: mainType() == 'workflows' -->
+              <!-- ko if: type() == 'workflow' -->
+                <div data-bind="template: { name: 'workflow-page' }"></div>
+              <!-- /ko -->
+
+              <!-- ko if: type() == 'workflow-action' -->
+                <div data-bind="template: { name: 'workflow-action-page' }"></div>
+              <!-- /ko -->
             <!-- /ko -->
 
-            <!-- ko if: $root.job().mainType() == 'schedules' -->
-              <div data-bind="template: { name: 'schedule-page', data: $root.job() }"></div>
+            <!-- ko if: mainType() == 'schedules' -->
+              <div data-bind="template: { name: 'schedule-page' }"></div>
             <!-- /ko -->
 
-            <!-- ko if: $root.job().mainType() == 'bundles' -->
-              <div data-bind="template: { name: 'bundle-page', data: $root.job() }"></div>
+            <!-- ko if: mainType() == 'bundles' -->
+              <div data-bind="template: { name: 'bundle-page' }"></div>
             <!-- /ko -->
           <!-- /ko -->
+          <!-- /ko -->
 
           <div data-bind="template: { name: 'pagination' }, visible: ! $root.job()"></div>
       </div>
@@ -676,6 +684,14 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
   ${ _('Progress') } <span data-bind="text: progress"></span>
   ${ _('Duration') } <span data-bind="text: duration"></span>
   ${ _('Submitted') } <span data-bind="text: submitted"></span>
+
+  </br></br>
+  Job ID ....</br>
+  Duration 8s</br>
+  </br></br>
+
+  Log (if external id) | Child jobs
+
 </script>
 
 

+ 6 - 0
desktop/libs/liboozie/src/liboozie/types.py

@@ -40,9 +40,12 @@ from django.core.urlresolvers import reverse
 
 LOG = logging.getLogger(__name__)
 
+
 class Action(object):
 
   def __init__(self, json_dict):
+    self.json_dict = json_dict
+
     for attr in self._ATTRS:
       setattr(self, attr, json_dict.get(attr))
     self._fixup()
@@ -62,6 +65,9 @@ class Action(object):
   def __str__(self):
     return '%s - %s' % (self.type, self.name)
 
+  def to_json(self):
+    return self.json_dict.copy()
+
 
 class ControlFlowAction(Action):
   _ATTRS = [