Browse Source

HUE-5721 [jb] Support text filtering on Workflows tab

krish 8 years ago
parent
commit
26ed0720b8

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

@@ -51,7 +51,11 @@ def jobs(request):
 
   interface = json.loads(request.POST.get('interface'))
 
-  response['apps'] = get_api(request.user, interface).apps()
+  filters = []
+  for _filter in json.loads(request.POST.get('filters', [])):
+    filters.extend([(key, value) for key, value in _filter.items() if value])
+
+  response['apps'] = get_api(request.user, interface).apps(filters)
   response['status'] = 0
 
   return JsonResponse(response)

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

@@ -49,7 +49,7 @@ class Api(object):
     self.user = user
     self.request = None
 
-  def apps(self): return []
+  def apps(self, filters): return []
 
   def app(self, appid): return {} # Also contains progress (0-100) and status [RUNNING, FINISHED, PAUSED]
 

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

@@ -38,7 +38,7 @@ except Exception, e:
 
 class BundleApi(Api):
 
-  def apps(self):
+  def apps(self, filters):
     oozie_api = get_oozie(self.user)
     kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
     wf_list = oozie_api.get_bundles(**kwargs)

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

@@ -41,7 +41,7 @@ class JobApi(Api):
     self.impala_api = ImpalaApi(user)
     self.request = None
 
-  def apps(self):
+  def apps(self, filters):
     jobs = self.yarn_api.apps()
     # += Impala
     # += Sqoop2

+ 1 - 1
apps/jobbrowser/src/jobbrowser/apis/schedule_api.py

@@ -39,7 +39,7 @@ except Exception, e:
 
 class ScheduleApi(Api):
 
-  def apps(self):
+  def apps(self, filters):
     oozie_api = get_oozie(self.user)
     kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
     wf_list = oozie_api.get_coordinators(**kwargs)

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

@@ -36,9 +36,9 @@ except Exception, e:
 
 class WorkflowApi(Api):
 
-  def apps(self):
+  def apps(self, filters):
     oozie_api = get_oozie(self.user)
-    kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': []}
+    kwargs = {'cnt': OOZIE_JOBS_COUNT.get(), 'filters': filters}
     wf_list = oozie_api.get_workflows(**kwargs)
 
     return [{

+ 16 - 5
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -161,7 +161,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             <div data-bind="template: { name: 'breadcrumbs' }"></div>
 
             <!-- ko if: ! $root.job() -->
-            ${_('Filter')} <input type="text" class="input-xlarge search-query" placeholder="${_('Filter by id, name, user...')}" value="user:${ user.username }" />
+            ${_('Filter')} <input type="text" class="input-xlarge search-query" data-bind="textInput: jobs.textFilter" placeholder="${_('Filter by id, name, user...')}" />
             <div class="btn-group">
               <a class="btn btn-status btn-success" data-value="completed">${ _('Succeeded') }</a>
               <a class="btn btn-status btn-warning" data-value="running">${ _('Running') }</a>
@@ -1020,16 +1020,27 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 
       self.apps = ko.observableArray();
       self.loadingJobs = ko.observable(false);
-
       self.username = ko.observable('${ user.username }');
+      self.textFilter = ko.observable('${ user.username }').extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 500 } });
+
+      self.filters = [ {'text': self.textFilter} ];
+
+      self.textFilter.subscribe(function(value) {
+        self.fetchJobs();
+        // TBD: refreshPagination()
+      });
 
       self.fetchJobs = function () {
         self.loadingJobs(true);
         vm.job(null);
-        $.post("/jobbrowser/api/jobs", {
+
+        url_data = {
           username: ko.mapping.toJSON(self.username),
-          interface: ko.mapping.toJSON(vm.interface)
-        }, function (data) {
+          interface: ko.mapping.toJSON(vm.interface),
+          filters: ko.mapping.toJSON(self.filters),
+        }
+
+        $.post("/jobbrowser/api/jobs", url_data, function (data) {
           if (data.status == 0) {
             var apps = [];
             if (data && data.apps) {