Browse Source

HUE-1176 [jb] Open a Task Attempt operation

Romain Rigaux 9 years ago
parent
commit
d736ac3

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

@@ -21,7 +21,7 @@ import logging
 from django.utils.translation import ugettext as _
 
 from jobbrowser.apis.base_api import Api, MockDjangoRequest
-from jobbrowser.views import job_attempt_logs_json, tasks
+from jobbrowser.views import job_attempt_logs_json
 
 
 LOG = logging.getLogger(__name__)
@@ -59,6 +59,8 @@ class JobApi(Api):
   def _get_api(self, appid):
     if appid.startswith('task_'):
       return YarnMapReduceTaskApi(self.user, appid)
+    elif appid.startswith('attempt_'):
+      return YarnMapReduceTaskAttemptApi(self.user, appid)
     else:
       return self.yarn_api # application_
 
@@ -189,19 +191,19 @@ class YarnMapReduceTaskAttemptApi(Api):
 
   def __init__(self, user, app_id):
     Api.__init__(self, user)
-    self.app_id = '_'.join(app_id.replace('task_', 'application_').split('_')[:3])
-    self.task_id = app_id
+    self.app_id = '_'.join(app_id.replace('task_', 'application_').replace('attempt_', 'application_').split('_')[:3])
+    self.task_id = '_'.join(app_id.replace('attempt_', 'task_').split('_')[:5])
+    self.attempt_id = app_id
 
   def apps(self):
     return [self._massage_task(task) for task in NativeYarnApi(self.user).get_task(jobid=self.app_id, task_id=self.task_id).attempts]
 
 
   def app(self, appid):
-    task = NativeYarnApi(self.user).get_task(jobid=self.app_id, task_id=appid)
+    task = NativeYarnApi(self.user).get_task(jobid=self.app_id, task_id=self.task_id).get_attempt(self.attempt_id)
 
     common = self._massage_task(task)
     common['properties'] = {
-      'attempts': []
     }
 
     return common
@@ -225,18 +227,18 @@ class YarnMapReduceTaskAttemptApi(Api):
 
   def _massage_task(self, task):
     return {
-#         "elapsedMergeTime" : task.elapsedMergeTime,
-#         "shuffleFinishTime" : task.shuffleFinishTime,
+        #"elapsedMergeTime" : task.elapsedMergeTime,
+        #"shuffleFinishTime" : task.shuffleFinishTime,
         "assignedContainerId" : task.assignedContainerId,
         "progress" : task.progress,
         "elapsedTime" : task.elapsedTime,
         "state" : task.state,
-#         "elapsedShuffleTime" : task.elapsedShuffleTime,
-#         "mergeFinishTime" : task.mergeFinishTime,
+        #"elapsedShuffleTime" : task.elapsedShuffleTime,
+        #"mergeFinishTime" : task.mergeFinishTime,
         "rack" : task.rack,
-#         "elapsedReduceTime" : task.elapsedReduceTime,
+        #"elapsedReduceTime" : task.elapsedReduceTime,
         "nodeHttpAddress" : task.nodeHttpAddress,
-        "type" : task.type,
+        "type" : task.type + '_ATTEMPT',
         "startTime" : task.startTime,
         "id" : task.id,
         "finishTime" : task.finishTime

+ 7 - 5
apps/jobbrowser/src/jobbrowser/templates/apps.mako

@@ -240,6 +240,10 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     <div data-bind="template: { name: 'job-mapreduce-task-page', data: $root.job() }"></div>
   <!-- /ko -->
 
+  <!-- ko if: type() == 'MAP_ATTEMPT' || type() == 'REDUCE_ATTEMPT' -->
+    <div data-bind="template: { name: 'job-mapreduce-task-attempt-page', data: $root.job() }"></div>
+  <!-- /ko -->
+
   <!-- ko if: type() == 'YARN' -->
     <div data-bind="template: { name: 'job-yarn-page', data: $root.job() }"></div>
   <!-- /ko -->
@@ -429,12 +433,13 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         <tbody data-bind="foreach: properties['attempts']()['task_list']">
           <tr data-bind="click: function() { $root.job().id(id); $root.job().fetchJob(); }">
             <td><div class="hueCheckbox fa"></div></td>
-            <td data-bind="text: assignedContainerId"></td>            
+            <td data-bind="text: assignedContainerId"></td>
             <td data-bind="text: progress"></td>
-            <td data-bind="text: elapsedTime"></td>            
+            <td data-bind="text: elapsedTime"></td>
             <td data-bind="text: state"></td>
             <td data-bind="text: rack"></td>
             <td data-bind="text: nodeHttpAddress"></td>
+            <td data-bind="text: type"></td>
             <td data-bind="text: startTime"></td>
             <td data-bind="text: id"></td>
             <td data-bind="text: finishTime"></td>
@@ -457,9 +462,6 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 </script>
 
 <script type="text/html" id="job-mapreduce-task-attempt-page">
-  <h2>MapReduce Task attempt</h2>
-  <br/>
-
   Logs | Metadata | Counters
 
   <br/><br/>