浏览代码

HUE-1176 [jb] Adding fetching of the proper log names

Romain Rigaux 8 年之前
父节点
当前提交
49b22a4

+ 2 - 1
apps/jobbrowser/src/jobbrowser/api2.py

@@ -95,8 +95,9 @@ def logs(request):
   interface = json.loads(request.POST.get('interface'))
   app_id = json.loads(request.POST.get('app_id'))
   app_type = json.loads(request.POST.get('type'))
+  log_name = json.loads(request.POST.get('name'))
 
-  response['logs'] = get_api(request.user, interface).logs(app_id, app_type)
+  response['logs'] = get_api(request.user, interface).logs(app_id, app_type, log_name)
   response['status'] = 0
 
   return JsonResponse(response)

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

@@ -57,7 +57,7 @@ class Api(object):
 
   def action(self, appid, operation): return {}
 
-  def logs(self, appid, app_type): return {'progress': 0, 'logs': {'default': ''}}
+  def logs(self, appid, app_type, log_name): return {'progress': 0, 'logs': ''}
 
   def profile(self, appid, app_type, app_property): return {} # Tasks, XML, counters...
 

+ 13 - 10
apps/jobbrowser/src/jobbrowser/apis/job_api.py

@@ -53,8 +53,8 @@ class JobApi(Api):
   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)
+  def logs(self, appid, app_type, log_name):
+    return self._get_api(appid).logs(appid, app_type, log_name)
 
   def profile(self, appid, app_type, app_property):
     return self._get_api(appid).profile(appid, app_type, app_property)
@@ -131,13 +131,16 @@ class YarnApi(Api):
       return {}
 
 
-  def logs(self, appid, app_type):
+  def logs(self, appid, app_type, log_name):
+    if log_name == 'default':
+      log_name = 'syslog'
+
     if app_type == 'MAPREDUCE':
-      response = job_attempt_logs_json(MockDjangoRequest(self.user), job=appid)
+      response = job_attempt_logs_json(MockDjangoRequest(self.user), job=appid, name=log_name)
       logs = json.loads(response.content)['log']
     else:
       logs = None
-    return {'logs': {'default': logs}}
+    return {'logs': logs}
 
 
   def profile(self, appid, app_type, app_property):
@@ -185,11 +188,11 @@ class YarnMapReduceTaskApi(Api):
     return common
 
 
-  def logs(self, appid, app_type):
-    response = job_attempt_logs_json(MockDjangoRequest(self.user), job=self.app_id)
+  def logs(self, appid, app_type, log_name):
+    response = job_attempt_logs_json(MockDjangoRequest(self.user), job=self.app_id, name=log_name)
     logs = json.loads(response.content)['log']
 
-    return {'progress': 0, 'logs': {'default': logs}}
+    return {'progress': 0, 'logs': logs}
 
 
   def profile(self, appid, app_type, app_property):
@@ -240,11 +243,11 @@ class YarnMapReduceTaskAttemptApi(Api):
     return common
 
 
-  def logs(self, appid, app_type):
+  def logs(self, appid, app_type, log_name):
     task = NativeYarnApi(self.user).get_task(jobid=self.app_id, task_id=self.task_id).get_attempt(self.attempt_id)
     stdout, stderr, syslog = task.get_task_log()
 
-    return {'progress': 0, 'logs': {'default': stdout, 'stdout': stdout, 'stderr': stderr, 'syslog': syslog}}
+    return {'progress': 0, 'logs': syslog if log_name == 'syslog' else stderr if log_name == 'stderr' else stdout}
 
 
   def profile(self, appid, app_type, app_property):

+ 2 - 2
apps/jobbrowser/src/jobbrowser/apis/schedule_api.py

@@ -79,11 +79,11 @@ class ScheduleApi(Api):
 
     return common
 
-  def logs(self, appid, app_type):
+  def logs(self, appid, app_type, log_name=None):
     request = MockDjangoRequest(self.user)
     data = get_oozie_job_log(request, job_id=appid)
 
-    return {'logs': {'default': json.loads(data.content)['log']}}
+    return {'logs': json.loads(data.content)['log']}
 
 
   def profile(self, appid, app_type, app_property):

+ 4 - 4
apps/jobbrowser/src/jobbrowser/apis/workflow_api.py

@@ -90,14 +90,14 @@ class WorkflowApi(Api):
     return json.loads(response.content)
 
 
-  def logs(self, appid, app_type):
+  def logs(self, appid, app_type, log_name=None):
     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 {'logs': {'default': json.loads(data.content)['log']}}
+    return {'logs': json.loads(data.content)['log']}
 
 
   def profile(self, appid, app_type, app_property):
@@ -142,5 +142,5 @@ class WorkflowActionApi(Api):
     return common
 
 
-  def logs(self, appid, app_type):
-    return {'progress': 0, 'logs': {'default': ''}}
+  def logs(self, appid, app_type, log_name=None):
+    return {'progress': 0, 'logs': ''}

+ 13 - 13
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -362,11 +362,11 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
   <div class="tab-content">
     <div class="tab-pane active" id="job-mapreduce-page-logs">
       % for name in ['stdout', 'stderr', 'syslog']:
-        <a href="javascript:void(0)" data-bind="click: fetchLogs, text: '${ name }'"></a>
+        <a href="javascript:void(0)" data-bind="click: function() { fetchLogs('${ name }'); }, text: '${ name }'"></a>
       % endfor
       <br>
 
-      <pre data-bind="html: logs['default']"></pre>
+      <pre data-bind="html: logs"></pre>
     </div>
 
     <div class="tab-pane" id="job-mapreduce-page-tasks">
@@ -454,11 +454,11 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
   <div class="tab-content">
     <div class="tab-pane active" id="job-mapreduce-task-page-logs">
       % for name in ['stdout', 'stderr', 'syslog']:
-        <a href="javascript:void(0)" data-bind="click: fetchLogs, text: '${ name }'"></a>
+        <a href="javascript:void(0)" data-bind="click: function() { fetchLogs('${ name }'); }, text: '${ name }'"></a>
       % endfor
       <br>
 
-      <pre data-bind="html: logs['default']"></pre>
+      <pre data-bind="html: logs"></pre>
     </div>
 
     <div class="tab-pane" id="job-mapreduce-task-page-attempts">
@@ -555,18 +555,18 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       <div class="tab-content">
         <div class="tab-pane active" id="job-mapreduce-task-attempt-page-logs-attempts">
           % for name in ['stdout', 'stderr', 'syslog']:
-            <a href="javascript:void(0)" data-bind="click: fetchLogs, text: '${ name }'"></a>
+            <a href="javascript:void(0)" data-bind="click: function() { fetchLogs('${ name }'); }, text: '${ name }'"></a>
           % endfor
           <br>
-          <pre data-bind="html: logs['default']"></pre>
+          <pre data-bind="html: logs"></pre>
         </div>
 
         <div class="tab-pane" id="job-mapreduce-task-attempt-page-logs-container">
           % for name in ['container-stdout', 'container-stderr', 'container-syslog']:
-            <a href="javascript:void(0)" data-bind="click: fetchLogs, text: '${ name }'"></a>
+            <a href="javascript:void(0)" data-bind="click: function() { fetchLogs('${ name }'); }, text: '${ name }'"></a>
           % endfor
           <br>
-          <pre data-bind="html: logs['default']"></pre>
+          <pre data-bind="html: logs"></pre>
         </div>
       </div>
     </div>
@@ -641,7 +641,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     </div>
 
     <div class="tab-pane" id="workflow-page-logs">
-      <pre data-bind="html: logs['default']"></pre>
+      <pre data-bind="html: logs"></pre>
     </div>
 
     <div class="tab-pane" id="workflow-page-tasks">
@@ -750,7 +750,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     </div>
 
     <div class="tab-pane" id="schedule-page-logs">
-      <pre data-bind="html: logs['default']"></pre>
+      <pre data-bind="html: logs"></pre>
     </div>
 
     <div class="tab-pane" id="schedule-page-tasks">
@@ -991,7 +991,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       self.duration = ko.observableDefault(job.duration);
       self.submitted = ko.observableDefault(job.submitted);
 
-      self.logs = ko.mapping.fromJS({'default': ''});
+      self.logs = ko.observable('');
 
       //self.coordVM = new RunningCoordinatorModel([]);
 
@@ -1042,10 +1042,10 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           app_id: ko.mapping.toJSON(self.id),
           interface: ko.mapping.toJSON(vm.interface),
           type: ko.mapping.toJSON(self.type),
-          name: name ? name : 'default'
+          name: ko.mapping.toJSON(name ? name : 'default')
         }, function (data) {
           if (data.status == 0) {
-            self.logs['default'](data.logs.logs['default'])
+            self.logs(data.logs.logs)
           } else {
             $(document).trigger("error", data.message);
           }