瀏覽代碼

[oozie] Hide graph from workflows with unavailable graph data

Enrico Berti 10 年之前
父節點
當前提交
e7a7a15ca7

+ 12 - 2
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow.mako

@@ -150,8 +150,12 @@ ${ layout.menubar(section='workflows', dashboard=True) }
         ${ _('Workflow') } ${ oozie_workflow.appName }
       </h1>
       <ul class="nav nav-tabs">
+        % if workflow_graph != 'MISSING':
         <li class="active"><a href="#graph" data-toggle="tab">${ _('Graph') }</a></li>
         <li><a href="#actions" data-toggle="tab">${ _('Actions') }</a></li>
+        % else:
+        <li class="active"><a href="#actions" data-toggle="tab">${ _('Actions') }</a></li>
+        % endif
         <li><a href="#details" data-toggle="tab">${ _('Details') }</a></li>
         <li><a href="#configuration" data-toggle="tab">${ _('Configuration') }</a></li>
         <li><a href="#log" data-toggle="tab">${ _('Log') }</a></li>
@@ -161,7 +165,8 @@ ${ layout.menubar(section='workflows', dashboard=True) }
         % endif
       </ul>
 
-      <div id="workflow-tab-content" class="tab-content" style="min-height:200px">    
+      <div id="workflow-tab-content" class="tab-content" style="min-height:200px">
+        % if workflow_graph != 'MISSING':
         <div id="graph" class="tab-pane active">
         % if layout_json == '':
         ${ workflow_graph | n,unicode }
@@ -170,6 +175,9 @@ ${ layout.menubar(section='workflows', dashboard=True) }
         % endif
         </div>
         <div id="actions" class="tab-pane">
+        % else:
+        <div id="actions" class="tab-pane active">
+        % endif
           <table class="table table-striped table-condensed selectable">
             <thead>
             <tr>
@@ -703,7 +711,9 @@ ${ utils.slaGlobal() }
 
         $("#progress .bar").text(data.progress + "%").css("width", data.progress + "%").attr("class", "bar " + getStatusClass(data.status, "bar-"));
         %if layout_json == '':
-        $("#graph").html(data.graph);
+          if (data.graph != "MISSING") { // constant from dashboard.py
+            $("#graph").html(data.graph);
+          }
         %endif
 
         if (data.status != "RUNNING" && data.status != "PREP"){

+ 27 - 21
apps/oozie/src/oozie/views/dashboard.py

@@ -256,28 +256,34 @@ def list_oozie_workflow(request, job_id):
   workflow_data = None
   credentials = None
   doc = None
+  hue_workflow = None
+  workflow_graph = 'MISSING'  # default to prevent loading the graph tab for deleted workflows
+  full_node_list = None
 
   if ENABLE_V2.get():
-    # To update with the new History document model
-    hue_coord = get_history().get_coordinator_from_config(oozie_workflow.conf_dict)
-    hue_workflow = (hue_coord and hue_coord.workflow) or get_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
-      workflow_id = hue_workflow.id  
-      wid = {
-        'id': workflow_id
-      }
-      doc = Document2.objects.get(type='oozie-workflow2', **wid)
-      new_workflow = get_workflow()(document=doc)
-      workflow_data = new_workflow.get_data()
-      credentials = Credentials()
-    else:
-      workflow_graph, full_node_list = OldWorkflow.gen_status_graph_from_xml(request.user, oozie_workflow)
+    try:
+      # To update with the new History document model
+      hue_coord = get_history().get_coordinator_from_config(oozie_workflow.conf_dict)
+      hue_workflow = (hue_coord and hue_coord.workflow) or get_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
+        workflow_id = hue_workflow.id
+        wid = {
+          'id': workflow_id
+        }
+        doc = Document2.objects.get(type='oozie-workflow2', **wid)
+        new_workflow = get_workflow()(document=doc)
+        workflow_data = new_workflow.get_data()
+        credentials = Credentials()
+      else:
+        workflow_graph, full_node_list = OldWorkflow.gen_status_graph_from_xml(request.user, oozie_workflow)
+    except:
+      pass
   else:
     history = get_history().cross_reference_submission_history(request.user, job_id)
 
@@ -945,7 +951,7 @@ def check_job_access_permission(request, job_id):
       oozie_job = get_job(job_id)
     except RestException, ex:
       raise PopupException(_("Error accessing Oozie job %s.") % (job_id,),
-                           detail=ex._headers['oozie-error-message'])
+                           detail=ex._headers['oozie-error-message', ''])
 
   if request.user.is_superuser \
       or oozie_job.user == request.user.username \