Browse Source

HUE-1176 [jb] Plug-in the YARN kill job

Romain Rigaux 9 years ago
parent
commit
9fc2e1e

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

@@ -71,7 +71,18 @@ def job(request):
 
 
 @api_error_handler
-def action(request): return {}
+def action(request):
+  response = {'status': -1}
+
+  interface = json.loads(request.POST.get('interface'))
+  app_id = json.loads(request.POST.get('app_id'))
+  action = json.loads(request.POST.get('action'))
+
+  response['action'] = action
+  response['action_status'] = get_api(request.user, interface).action(app_id, action)
+  response['status'] = 0
+
+  return JsonResponse(response)
 
 
 @api_error_handler

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

@@ -50,7 +50,7 @@ class Api(object):
 
   def app(self, appid): return {}
 
-  def action(self, appid): return {} # Kill, suspend...
+  def action(self, appid, action): return {} # Kill, suspend...
 
   def status(self, appid): return {'status': 'RUNNING'}
 
@@ -67,4 +67,4 @@ class MockDjangoRequest():
   def __init__(self, user):
     self.user = user
     self.jt = None
-    self.GET = {'format': 'json', 'is_jb2': True}
+    self.method = "POST"

+ 10 - 1
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
+from jobbrowser.views import job_attempt_logs_json, kill_job
 
 
 LOG = logging.getLogger(__name__)
@@ -50,6 +50,8 @@ class JobApi(Api):
   def app(self, appid):
     return self._get_api(appid).app(appid)
 
+  def action(self, appid, action): self._get_api(appid).action(action, appid)
+
   def logs(self, appid, app_type):
     return self._get_api(appid).logs(appid, app_type)
 
@@ -119,6 +121,13 @@ class YarnApi(Api):
     return common
 
 
+  def action(self, action, appid):
+    if action == 'kill':
+      return kill_job(MockDjangoRequest(self.user), job=appid)
+    else:
+      return {}
+
+
   def logs(self, appid, app_type):
     if app_type == 'MAPREDUCE':
       response = job_attempt_logs_json(MockDjangoRequest(self.user), job=appid)

+ 18 - 1
apps/jobbrowser/src/jobbrowser/templates/apps.mako

@@ -295,7 +295,8 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
     <div class="bar" data-bind="style: {'width': progress() + '%'}"></div>
   </div>
 
-  Stop
+  <a href="javascript:void(0)" data-bind="click: function() { changeStatus('kill'); }">Stop</a>
+    
 
   </br>
 
@@ -741,6 +742,22 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         }).always(function () {
         });
       };
+
+      self.changeStatus = function (name) {
+        $.post("/jobbrowser/api/job/action", {
+          app_id: ko.mapping.toJSON(self.id),
+          interface: ko.mapping.toJSON(vm.interface),
+          app_type: ko.mapping.toJSON(self.type),
+          action: ko.mapping.toJSON(name)
+        }, function (data) {
+          if (data.status == 0) {
+            
+          } else {
+            $(document).trigger("error", data.message);
+          }
+        }).always(function () {
+        });
+      };
     };
 
     var Jobs = function (vm, options) {