Ver código fonte

[pig] Show progress of running scripts on dashboards

Romain Rigaux 12 anos atrás
pai
commit
94fa4cfe3b
2 arquivos alterados com 13 adições e 8 exclusões
  1. 12 7
      apps/pig/src/pig/api.py
  2. 1 1
      apps/pig/src/pig/views.py

+ 12 - 7
apps/pig/src/pig/api.py

@@ -153,13 +153,20 @@ class OozieApi:
       i = logs.index(group.group(1)) + len(group.group(1))
       return logs[i:]
 
-  def massaged_jobs_for_json(self, oozie_jobs, hue_jobs):
+  def massaged_jobs_for_json(self, request, oozie_jobs, hue_jobs):
     jobs = []
     hue_jobs = dict([(script.dict.get('job_id'), script) for script in hue_jobs if script.dict.get('job_id')])
 
     for job in oozie_jobs:
       if job.is_running():
         job = get_oozie().get_job(job.id)
+        get_copy = request.GET.copy() # Hacky, would need to refactor JobBrowser get logs
+        get_copy['format'] = 'python'
+        request.GET = get_copy
+        logs, workflow_action = self.get_log(request, job)
+        progress = workflow_action[0]['progress']
+      else:
+        progress = 100
 
       hue_pig = hue_jobs.get(job.id) and hue_jobs.get(job.id) or None
 
@@ -175,8 +182,8 @@ class OozieApi:
         'appName': hue_pig and hue_pig.dict['name'] or _('Unsaved script'),
         'scriptId': hue_pig and hue_pig.id or -1,
         'scriptContent': hue_pig and hue_pig.dict['script'] or '',
-        'progress': get_progress(job),
-        'progressPercent': '%d%%' % get_progress(job),
+        'progress': progress,
+        'progressPercent': '%d%%' % progress,
         'user': job.user,
         'absoluteUrl': job.get_absolute_url(),
         'canEdit': has_job_edition_permission(job, self.user),
@@ -192,16 +199,14 @@ class OozieApi:
 
     return jobs
 
-def get_progress(job, log=None):
+def get_progress(job, log):
   if job.status in ('SUCCEEDED', 'KILLED', 'FAILED'):
     return 100
-  elif log:
+  else:
     try:
       return int(re.findall("MapReduceLauncher  - (1?\d?\d)% complete", log)[-1])
     except:
       return 0
-  else:
-    return 0
 
 
 def format_time(st_time):

+ 1 - 1
apps/pig/src/pig/views.py

@@ -56,7 +56,7 @@ def dashboard(request):
 
   jobs = pig_api.get_jobs()
   hue_jobs = PigScript.objects.filter(owner=request.user)
-  massaged_jobs = pig_api.massaged_jobs_for_json(jobs, hue_jobs)
+  massaged_jobs = pig_api.massaged_jobs_for_json(request, jobs, hue_jobs)
 
   return HttpResponse(json.dumps(massaged_jobs), mimetype="application/json")