Jelajahi Sumber

HUE-1176 [jb] Link YARN job states filtering logic

Romain Rigaux 8 tahun lalu
induk
melakukan
aa90cb8

+ 4 - 1
apps/jobbrowser/src/jobbrowser/api.py

@@ -185,13 +185,16 @@ class YarnApi(JobBrowserApi):
 
   @rm_ha
   def get_jobs(self, user, **kwargs):
-    state_filters = {'running': 'UNDEFINED', 'completed': 'SUCCEEDED', 'failed': 'FAILED', 'killed': 'KILLED', }
+    state_filters = {'running': 'UNDEFINED', 'completed': 'SUCCEEDED', 'failed': 'FAILED', 'killed': 'KILLED',}
+    states_filters = {'running': 'NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING', 'completed': 'FINISHED', 'failed': 'FAILED,KILLED',}
     filters = {}
 
     if kwargs['username']:
       filters['user'] = kwargs['username']
     if kwargs['state'] and kwargs['state'] != 'all':
       filters['finalStatus'] = state_filters[kwargs['state']]
+    if kwargs['states']:
+      filters['states'] = ','.join([states_filters[_s] for _s in kwargs['states']])
     if kwargs.get('limit'):
       filters['limit'] = kwargs['limit']
     if kwargs.get('time_value'):

+ 5 - 1
apps/jobbrowser/src/jobbrowser/apis/job_api.py

@@ -79,11 +79,15 @@ class YarnApi(Api):
       'user': self.user,
       'username': '',
       'text': '',
-      'state': 'all'
+      'state': 'all',
+      'states': ''
     }
 
     filter_params.update(_extract_query_params(filters))
 
+    if filters.get('states'):
+      filter_params['states'] = filters['states']
+
     if 'time' in filters:
       filter_params['time_value'] = int(filters['time']['time_value'])
       filter_params['time_unit'] = filters['time']['time_unit']

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

@@ -130,6 +130,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             <!-- ko if: ! $root.job() -->
             ${_('Filter')} <input type="text" class="input-xlarge search-query" data-bind="textInput: jobs.textFilter" placeholder="${_('Filter by id, name, user...')}" />
             <div class="btn-group">
+              <select data-bind="options: jobs.statesValuesFilter, selectedOptions: jobs.statesFilter, optionsText: 'name', optionsValue: 'value'" size="3" multiple="true"></select>
               <a class="btn btn-status btn-success" data-value="completed">${ _('Succeeded') }</a>
               <a class="btn btn-status btn-warning" data-value="running">${ _('Running') }</a>
               <a class="btn btn-status btn-danger disable-feedback" data-value="failed">${ _('Failed') }</a>
@@ -1151,7 +1152,13 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       });
       self.loadingJobs = ko.observable(false);
 
-      self.textFilter = ko.observable('user:${ user.username } ').extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 500 } });
+      self.textFilter = ko.observable('user:${ user.username } ').extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 1000 } });
+      self.statesFilter = ko.observable('');
+      self.statesValuesFilter = ko.observable([
+        {'value': 'completed', 'name': '${_("Succeeded")}'},
+        {'value': 'running', 'name': '${_("Running")}'},
+        {'value': 'failed', 'name': '${_("Failed")}'},
+      ]);
       self.timeValueFilter = ko.observable(7).extend({ throttle: 500 });
       self.timeUnitFilter = ko.observable('days').extend({ throttle: 500 });
       self.timeUnitFilterUnits = ko.observable([
@@ -1163,7 +1170,8 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       self.filters = ko.computed(function() {
         return [
           {'text': self.textFilter()},
-          {'time': {'time_value': self.timeValueFilter(), 'time_unit': self.timeUnitFilter()}}
+          {'time': {'time_value': self.timeValueFilter(), 'time_unit': self.timeUnitFilter()}},
+          {'states': self.statesFilter()},
         ];
       });
       self.filters.subscribe(function(value) {