Browse Source

[oozie] Make the dashboard views compatible with Oozie v1

Romain Rigaux 10 years ago
parent
commit
d6692085fe

+ 2 - 2
apps/oozie/src/oozie/conf.py

@@ -63,12 +63,11 @@ OOZIE_JOBS_COUNT = Config(
 
 
 ENABLE_V2 = Config( # Until Hue 4
 ENABLE_V2 = Config( # Until Hue 4
   key='enable_v2',
   key='enable_v2',
-  default=False,
+  default=True,
   type=coerce_bool,
   type=coerce_bool,
   help=_t('Use version 2 of Editor.')
   help=_t('Use version 2 of Editor.')
 )
 )
 
 
-
 ENABLE_CRON_SCHEDULING = Config( # Until Hue 3.8
 ENABLE_CRON_SCHEDULING = Config( # Until Hue 3.8
   key='enable_cron_scheduling',
   key='enable_cron_scheduling',
   default=True,
   default=True,
@@ -76,6 +75,7 @@ ENABLE_CRON_SCHEDULING = Config( # Until Hue 3.8
   help=_t('Use Cron format for defining the frequency of a Coordinator instead of the old frequency number/unit.')
   help=_t('Use Cron format for defining the frequency of a Coordinator instead of the old frequency number/unit.')
 )
 )
 
 
+
 def config_validator(user):
 def config_validator(user):
   res = []
   res = []
 
 

+ 5 - 8
apps/oozie/src/oozie/models.py

@@ -42,7 +42,7 @@ from desktop.log.access import access_warn
 from desktop.lib import django_mako
 from desktop.lib import django_mako
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.json_utils import JSONEncoderForHTML
 from desktop.lib.json_utils import JSONEncoderForHTML
-from desktop.models import Document, Document2
+from desktop.models import Document
 from hadoop.fs.exceptions import WebHdfsException
 from hadoop.fs.exceptions import WebHdfsException
 
 
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.hadoopfs import Hdfs
@@ -50,7 +50,6 @@ from liboozie.submittion import Submission
 from liboozie.submittion import create_directories
 from liboozie.submittion import create_directories
 
 
 from oozie.conf import REMOTE_SAMPLE_DIR
 from oozie.conf import REMOTE_SAMPLE_DIR
-from oozie.models2 import Workflow as NewWorkflow, Coordinator as NewCoordinator
 from oozie.utils import utc_datetime_format
 from oozie.utils import utc_datetime_format
 from oozie.timezones import TIMEZONES
 from oozie.timezones import TIMEZONES
 
 
@@ -1909,17 +1908,15 @@ class History(models.Model):
   @classmethod
   @classmethod
   def get_workflow_from_config(self, conf_dict):
   def get_workflow_from_config(self, conf_dict):
     try:
     try:
-      doc = Document2.objects.get(type='oozie-workflow2', id=conf_dict.get(Workflow.HUE_ID))
-      return NewWorkflow(document=doc)
-    except Document2.DoesNotExist:
+      return Workflow.objects.get(id=conf_dict.get(Workflow.HUE_ID))
+    except Workflow.DoesNotExist:
       pass
       pass
 
 
   @classmethod
   @classmethod
   def get_coordinator_from_config(self, conf_dict):
   def get_coordinator_from_config(self, conf_dict):
     try:
     try:
-      doc = Document2.objects.get(type='oozie-coordinator2', id=conf_dict.get(Coordinator.HUE_ID))
-      return NewCoordinator(document=doc)
-    except Document2.DoesNotExist:
+      return Coordinator.objects.get(id=conf_dict.get(Coordinator.HUE_ID))
+    except Coordinator.DoesNotExist:
       pass
       pass
 
 
   @classmethod
   @classmethod

+ 19 - 1
apps/oozie/src/oozie/models2.py

@@ -1790,7 +1790,6 @@ class Bundle(Job):
                 'mapping': mapping
                 'mapping': mapping
            })))
            })))
 
 
-
   @property
   @property
   def name(self):
   def name(self):
     return self.data['name']
     return self.data['name']
@@ -1812,3 +1811,22 @@ class Bundle(Job):
 
 
   def find_parameters(self):
   def find_parameters(self):
     return {}
     return {}
+
+
+class History(object):
+
+  @classmethod
+  def get_workflow_from_config(self, conf_dict):
+    try:
+      doc = Document2.objects.get(type='oozie-workflow2', id=conf_dict.get(Workflow.HUE_ID))
+      return Workflow(document=doc)
+    except Document2.DoesNotExist:
+      pass
+
+  @classmethod
+  def get_coordinator_from_config(self, conf_dict):
+    try:
+      doc = Document2.objects.get(type='oozie-coordinator2', id=conf_dict.get(Coordinator.HUE_ID))
+      return Coordinator(document=doc)
+    except Document2.DoesNotExist:
+      pass

+ 13 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinator.mako

@@ -18,6 +18,8 @@
 <%!
 <%!
   from desktop.views import commonheader, commonfooter
   from desktop.views import commonheader, commonfooter
   from django.utils.translation import ugettext as _
   from django.utils.translation import ugettext as _
+  
+  from oozie.conf import ENABLE_V2
 %>
 %>
 
 
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="layout" file="../navigation-bar.mako" />
@@ -70,15 +72,25 @@ ${ layout.menubar(section='coordinators', dashboard=True) }
               <li class="white">${ oozie_coordinator.id }</li>
               <li class="white">${ oozie_coordinator.id }</li>
 
 
               % if coordinator:
               % if coordinator:
+              % if ENABLE_V2.get():
                   <li class="nav-header">${ _('Datasets') }</li>
                   <li class="nav-header">${ _('Datasets') }</li>
                 % for dataset in coordinator.datasets:
                 % for dataset in coordinator.datasets:
                   <li rel="tooltip" title="${ dataset.data['dataset_variable'] }" class="white">
                   <li rel="tooltip" title="${ dataset.data['dataset_variable'] }" class="white">
-                    <i class="fa fa-eye"></i> <span class="dataset">${ dataset.data['workflow_variable'] }</span>
+                    <i class="fa fa-eye"></i> <span class="dataset">${ dataset.data['workflow_variable'][:20] }</span>
                   </li>
                   </li>
                 % endfor
                 % endfor
                 % if not coordinator.datasets:
                 % if not coordinator.datasets:
                   <li class="white">${ _('No available datasets') }</li>
                   <li class="white">${ _('No available datasets') }</li>
                 % endif
                 % endif
+              % else:
+                  <li class="nav-header">${ _('Datasets') }</li>
+                % for dataset in coordinator.dataset_set.all():
+                  <li rel="tooltip" title="${ dataset.name } : ${ dataset.uri }" class="white"><i class="fa fa-eye"></i> <span class="dataset">${ dataset.name }</span></li>
+                % endfor
+                % if not coordinator.dataset_set.all():
+                  <li class="white">${ _('No available datasets') }</li>
+                % endif
+              % endif
               % endif
               % endif
 
 
               % if has_job_edition_permission(oozie_coordinator, user) and oozie_coordinator.status not in ('KILLED', 'KILLED', 'SUCCEEDED'):
               % if has_job_edition_permission(oozie_coordinator, user) and oozie_coordinator.status not in ('KILLED', 'KILLED', 'SUCCEEDED'):

+ 41 - 18
apps/oozie/src/oozie/views/dashboard.py

@@ -41,17 +41,22 @@ from liboozie.oozie_api import get_oozie
 from liboozie.submittion import Submission
 from liboozie.submittion import Submission
 from liboozie.types import Workflow as OozieWorkflow, Coordinator as CoordinatorWorkflow, Bundle as BundleWorkflow
 from liboozie.types import Workflow as OozieWorkflow, Coordinator as CoordinatorWorkflow, Bundle as BundleWorkflow
 
 
-from oozie.conf import OOZIE_JOBS_COUNT, ENABLE_CRON_SCHEDULING
-from oozie.forms import RerunForm, ParameterForm, RerunCoordForm,\
-  RerunBundleForm
-from oozie.models import History, Job, Workflow, utc_datetime_format, Bundle,\
-  Coordinator, get_link
+from oozie.conf import OOZIE_JOBS_COUNT, ENABLE_CRON_SCHEDULING, ENABLE_V2
+from oozie.forms import RerunForm, ParameterForm, RerunCoordForm, RerunBundleForm
+from oozie.models import Workflow, Job, utc_datetime_format, Bundle, Coordinator, get_link
 from oozie.settings import DJANGO_APPS
 from oozie.settings import DJANGO_APPS
 
 
 
 
+if ENABLE_V2.get():
+  from oozie.models2 import History
+else:
+  from oozie.models import History
+
+
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
 MAX_COORD_ACTIONS = 250
 MAX_COORD_ACTIONS = 250
 
 
+
 """
 """
 Permissions:
 Permissions:
 
 
@@ -216,22 +221,40 @@ def list_oozie_workflow(request, job_id):
   if oozie_bundle is not None:
   if oozie_bundle is not None:
     setattr(oozie_workflow, 'oozie_bundle', oozie_bundle)
     setattr(oozie_workflow, 'oozie_bundle', oozie_bundle)
 
 
-  # To update with the new History document model
-  hue_coord = History.get_coordinator_from_config(oozie_workflow.conf_dict)
-  hue_workflow = (hue_coord and hue_coord.workflow) or History.get_workflow_from_config(oozie_workflow.conf_dict)
+  if ENABLE_V2.get():
+    # To update with the new History document model
+    hue_coord = History.get_coordinator_from_config(oozie_workflow.conf_dict)
+    hue_workflow = (hue_coord and hue_coord.workflow) or History.get_workflow_from_config(oozie_workflow.conf_dict)
+  
+    if hue_coord and hue_coord.workflow: hue_coord.workflow.document.doc.get().can_read_or_exception(request.user)
+    if hue_workflow: hue_workflow.document.doc.get().can_read_or_exception(request.user)
+    
+    if hue_workflow:
+      workflow_graph = hue_workflow.gen_status_graph(oozie_workflow)
+      full_node_list = hue_workflow.nodes
+    else:
+      workflow_graph, full_node_list = '', None    
+  else:
+    history = History.cross_reference_submission_history(request.user, job_id)
+
+    hue_coord = history and history.get_coordinator() or History.get_coordinator_from_config(oozie_workflow.conf_dict)
+    hue_workflow = (hue_coord and hue_coord.workflow) or (history and history.get_workflow()) or History.get_workflow_from_config(oozie_workflow.conf_dict)
 
 
-  if hue_coord and hue_coord.workflow: hue_coord.workflow.document.doc.get().can_read_or_exception(request.user)
-  if hue_workflow: hue_workflow.document.doc.get().can_read_or_exception(request.user)
+    if hue_coord and hue_coord.workflow: Job.objects.can_read_or_exception(request, hue_coord.workflow.id)
+    if hue_workflow: Job.objects.can_read_or_exception(request, hue_workflow.id)
+    
+    if hue_workflow:
+      workflow_graph = hue_workflow.gen_status_graph(oozie_workflow)
+      full_node_list = hue_workflow.node_list
+    else:
+      workflow_graph, full_node_list = Workflow.gen_status_graph_from_xml(request.user, oozie_workflow)
 
 
   parameters = oozie_workflow.conf_dict.copy()
   parameters = oozie_workflow.conf_dict.copy()
+
   for action in oozie_workflow.actions:
   for action in oozie_workflow.actions:
     action.oozie_coordinator = oozie_coordinator
     action.oozie_coordinator = oozie_coordinator
     action.oozie_bundle = oozie_bundle
     action.oozie_bundle = oozie_bundle
 
 
-  if hue_workflow:
-    workflow_graph = hue_workflow.gen_status_graph(oozie_workflow)
-    full_node_list = hue_workflow.nodes
-  # If no saved workflow, we could try to parse the XML like: workflow_graph, full_node_list = Workflow.gen_status_graph_from_xml(request.user, oozie_workflow)
 
 
   if request.GET.get('format') == 'json':
   if request.GET.get('format') == 'json':
     return_obj = {
     return_obj = {
@@ -271,10 +294,10 @@ def list_oozie_coordinator(request, job_id):
 
 
   # Cross reference the submission history (if any)
   # Cross reference the submission history (if any)
   coordinator = History.get_coordinator_from_config(oozie_coordinator.conf_dict)
   coordinator = History.get_coordinator_from_config(oozie_coordinator.conf_dict)
-#  try:
-#    coordinator = History.objects.get(oozie_job_id=job_id).job.get_full_node()
-#  except History.DoesNotExist:
-#    pass
+  try:
+    coordinator = History.objects.get(oozie_job_id=job_id).job.get_full_node()
+  except:
+    pass
 
 
   oozie_bundle = None
   oozie_bundle = None
   if request.GET.get('bundle_job_id'):
   if request.GET.get('bundle_job_id'):