Prechádzať zdrojové kódy

HUE-6399 [jb] Support job filtering for schedules and bundles

Romain Rigaux 8 rokov pred
rodič
commit
82e80d81d2

+ 4 - 1
apps/jobbrowser/src/jobbrowser/apis/bundle_api.py

@@ -23,7 +23,7 @@ from django.utils.translation import ugettext as _
 from liboozie.oozie_api import get_oozie
 
 from jobbrowser.apis.base_api import Api, MockDjangoRequest
-from jobbrowser.apis.workflow_api import _manage_oozie_job
+from jobbrowser.apis.workflow_api import _manage_oozie_job, _filter_oozie_jobs
 from liboozie.utils import format_time
 
 
@@ -41,7 +41,10 @@ class BundleApi(Api):
 
   def apps(self, filters):
     oozie_api = get_oozie(self.user)
+
     kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
+    _filter_oozie_jobs(self.user, filters, kwargs)
+
     jobs = oozie_api.get_bundles(**kwargs)
 
     return {

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

@@ -21,10 +21,10 @@ import json
 from django.utils.translation import ugettext as _
 
 from liboozie.oozie_api import get_oozie
+from liboozie.utils import format_time
 
 from jobbrowser.apis.base_api import Api, MockDjangoRequest
-from jobbrowser.apis.workflow_api import _manage_oozie_job
-from liboozie.utils import format_time
+from jobbrowser.apis.workflow_api import _manage_oozie_job, _filter_oozie_jobs
 
 
 LOG = logging.getLogger(__name__)
@@ -42,6 +42,9 @@ class ScheduleApi(Api):
   def apps(self, filters):
     oozie_api = get_oozie(self.user)
     kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
+
+    _filter_oozie_jobs(self.user, filters, kwargs)
+
     jobs = oozie_api.get_coordinators(**kwargs)
 
     return {

+ 28 - 25
apps/jobbrowser/src/jobbrowser/apis/workflow_api.py

@@ -38,33 +38,11 @@ except Exception, e:
 class WorkflowApi(Api):
 
   def apps(self, filters):
-    kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
-
-    text_filters = _extract_query_params(filters)
-
-    if not has_dashboard_jobs_access(self.user):
-      kwargs['filters'].append(('user', self.user.username))
-    elif 'user' in text_filters:
-      kwargs['filters'].append(('user', text_filters['username']))
-
-    if 'time' in filters:
-      kwargs['filters'].extend([('startcreatedtime', '-%s%s' % (filters['time']['time_value'], filters['time']['time_unit'][:1]))])
-
-    if ENABLE_OOZIE_BACKEND_FILTERING.get() and text_filters.get('text'):
-      kwargs['filters'].extend([('text', text_filters.get('text'))])
-
-    if filters['pagination']:
-      kwargs['offset'] = filters['pagination']['offset']
-      kwargs['cnt'] = min(filters['pagination']['limit'], OOZIE_JOBS_COUNT.get())
-
-    if filters.get('states'):
-      states_filters = {'running': ['RUNNING', 'PREP', 'SUSPENDED'], 'completed': ['SUCCEEDED'], 'failed': ['FAILED', 'KILLED'],}
-      for _state in filters.get('states'):
-        for _status in states_filters[_state]:
-          kwargs['filters'].extend([('status', _status)])
-
     oozie_api = get_oozie(self.user)
 
+    kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
+    _filter_oozie_jobs(self.user, filters, kwargs)
+
     wf_list = oozie_api.get_workflows(**kwargs)
 
     return {
@@ -213,3 +191,28 @@ def _manage_oozie_job(user, action, app_ids):
   result['status'] = result.get('totalErrors', 0)
   result['message'] = _('%s action sent to %s jobs') % (action['action'], result.get('totalRequests', 1))
   return result
+
+
+def _filter_oozie_jobs(user, filters, kwargs):
+    text_filters = _extract_query_params(filters)
+
+    if not has_dashboard_jobs_access(user):
+      kwargs['filters'].append(('user', user.username))
+    elif 'user' in text_filters:
+      kwargs['filters'].append(('user', text_filters['username']))
+
+    if 'time' in filters:
+      kwargs['filters'].extend([('startcreatedtime', '-%s%s' % (filters['time']['time_value'], filters['time']['time_unit'][:1]))])
+
+    if ENABLE_OOZIE_BACKEND_FILTERING.get() and text_filters.get('text'):
+      kwargs['filters'].extend([('text', text_filters.get('text'))])
+
+    if filters['pagination']:
+      kwargs['offset'] = filters['pagination']['offset']
+      kwargs['cnt'] = min(filters['pagination']['limit'], OOZIE_JOBS_COUNT.get())
+
+    if filters.get('states'):
+      states_filters = {'running': ['RUNNING', 'PREP', 'SUSPENDED'], 'completed': ['SUCCEEDED'], 'failed': ['FAILED', 'KILLED'],}
+      for _state in filters.get('states'):
+        for _status in states_filters[_state]:
+          kwargs['filters'].extend([('status', _status)])