Browse Source

HUE-6870 [jb] Add status API field to tasks and task attempts

Romain Rigaux 8 years ago
parent
commit
e26a199

+ 22 - 2
apps/jobbrowser/src/jobbrowser/apis/job_api.py

@@ -326,9 +326,18 @@ class YarnMapReduceTaskApi(Api):
         'state': task.state,
         'startTime': task.startTime,
         'successfulAttempt': task.successfulAttempt,
-        'finishTime': task.finishTime
+        'finishTime': task.finishTime,
+        'apiStatus': self._api_status(task.state),
     }
 
+  def _api_status(self, status):
+    if status in ['NEW', 'SUBMITTED', 'ACCEPTED', 'RUNNING']:
+      return 'RUNNING'
+    elif status == 'SUCCEEDED':
+      return 'SUCCEEDED'
+    else:
+      return 'FAILED' # FAILED, KILLED
+
 
 class YarnMapReduceTaskAttemptApi(Api):
 
@@ -377,6 +386,16 @@ class YarnMapReduceTaskAttemptApi(Api):
 
     return {}
 
+
+  def _api_status(self, status):
+    if status in ['NEW', 'SUBMITTED', 'ACCEPTED', 'RUNNING']:
+      return 'RUNNING'
+    elif status == 'SUCCEEDED':
+      return 'SUCCEEDED'
+    else:
+      return 'FAILED' # FAILED, KILLED
+
+
   def _massage_task(self, task):
     return {
         #"elapsedMergeTime" : task.elapsedMergeTime,
@@ -395,7 +414,8 @@ class YarnMapReduceTaskAttemptApi(Api):
         "id" : task.id,
         "finishTime" : task.finishTime,
         "app_id": self.app_id,
-        "task_id": self.task_id
+        "task_id": self.task_id,
+        'apiStatus': self._api_status(task.state),
     }
 
 

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

@@ -524,7 +524,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             </tr>
             </thead>
             <tbody data-bind="foreach: properties['tasks']()['task_list']">
-              <tr data-bind="click: function() { $root.job().id(id); $root.job().fetchJob(); }" class="pointer">
+              <tr data-bind="click: function() { $root.job().id(id); $root.job().fetchJob(); }, css: {'completed': apiStatus == 'SUCCEEDED', 'running': apiStatus == 'RUNNING', 'failed': apiStatus == 'FAILED'}" class="status-border pointer">
                 <td data-bind="text: type"></td>
                 <td data-bind="text: id"></td>
                 <td data-bind="text: elapsedTime"></td>
@@ -660,7 +660,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           <li class="nav-header">${ _('Progress') }</li>
           <li><span data-bind="text: progress"></span>%</li>
           <li>
-            <div class="progress-job progress" style="background-color: #FFF; width: 100%" data-bind="css: {'progress-warning': apiStatus() !== 'FAILED' && progress() < 100, 'progress-success': apiStatus() !== 'FAILED' && progress() === 100, 'progress-danger': apiStatus() === 'FAILED'}">
+            <div class="progress-job progress" style="background-color: #FFF; width: 100%" data-bind="css: {'progress-warning': apiStatus() == 'RUNNING', 'progress-success': apiStatus() == 'SUCCEEDED', 'progress-danger': apiStatus() == 'FAILED'}">
               <div class="bar" data-bind="style: {'width': progress() + '%'}"></div>
             </div>
           </li>