Browse Source

HUE-8550 [jb] Default to the last selected type of compute in the job browser

Johan Ahlen 7 năm trước cách đây
mục cha
commit
b79146d

+ 13 - 17
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -81,6 +81,17 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 
 
 % if is_mini:
+  <div class="pull-right" style="padding: 6px 10px 0 0">
+    <!-- ko component: {
+      name: 'hue-context-selector',
+      params: {
+        sourceType: 'jobs',
+        compute: compute,
+        onComputeSelect: onComputeSelect,
+        hideLabels: true
+      }
+    } --><!-- /ko -->
+  </div>
   <ul class="nav nav-pills">
     <!-- ko foreach: availableInterfaces -->
       <li data-bind="css: {'active': $parent.interface() === interface}, visible: condition()">
@@ -88,12 +99,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       </li>
     <!-- /ko -->
   </ul>
-  <span class="pull-right">
-    <!-- ko if: availableComputes().length > 1 -->
-      <div data-bind="component: { name: 'hue-drop-down', params: { value: compute, entries: availableComputes, labelAttribute: 'name', searchable: true, linkTitle: '${ _ko('Active clusters') }' } }"></div>
-    <!-- /ko -->
-  </span>
-% else:    
+% else:
   <div class="navbar hue-title-bar">
     <div class="navbar-inner">
       <div class="container-fluid">
@@ -117,9 +123,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
               params: {
                 sourceType: 'jobs',
                 compute: compute,
-                onComputeSelect: onComputeSelect,
-                showDatabases: false,
-                showNamespaces: false
+                onComputeSelect: onComputeSelect
               }
             } --><!-- /ko -->
           </div>
@@ -2778,16 +2782,8 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       self.clusterType = ko.observable();
       self.isMini = ko.observable(false);
 
-      self.availableComputes = ko.observableArray();
-      self.availableComputes.subscribe(function(newValue) {
-        if (newValue.length > 0 && !self.compute()) {
-          self.compute(self.availableComputes()[0]);
-        }
-      });
       self.compute = ko.observable();
 
-      ContextCatalog.getComputes({ sourceType: 'jobs' }).done(self.availableComputes);
-
       self.availableInterfaces = ko.pureComputed(function () {
         var jobsInterfaceCondition = function () {
           return self.appConfig() && self.appConfig()['browser'] && self.appConfig()['browser']['interpreter_names'].indexOf('yarn') != -1 && self.clusterType() != '${ ANALYTIC_DB }' && (!self.compute() || self.compute()['type'].indexOf('altus') == -1);

+ 1 - 1
desktop/core/src/desktop/api2.py

@@ -148,7 +148,7 @@ def get_context_computes(request, interface):
           'name': cluster.get('clusterName'),
           'status': cluster.get('status'),
           'namespace': cluster.get('namespaceCrn', cluster.get('crn')),
-          'type': 'altus-adb'
+          'type': 'altus-dw'
         } for cluster in AnalyticDbApi(request.user).list_clusters()['clusters'] if cluster.get('status') == 'CREATED' and cluster.get('cdhVersion') >= 'CDH515']
       )
 

+ 25 - 11
desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako

@@ -32,7 +32,7 @@ from desktop.views import _ko
     <div class="inline-block" style="display:none;" data-bind="visible: !loadingContext()">
       <!-- ko if: window.HAS_MULTI_CLUSTER -->
       <!-- ko if: availableComputes().length > 0 && !hideComputes -->
-      <span class="editor-header-title">${ _('Compute') }</span>
+      <!-- ko ifnot: hideLabels --><span class="editor-header-title">${ _('Compute') }</span><!-- /ko -->
       <div data-bind="component: { name: 'hue-drop-down', params: { value: compute, entries: availableComputes, labelAttribute: 'name', searchable: true, linkTitle: '${ _ko('Active compute') }' } }" style="display: inline-block"></div>
       <!-- /ko -->
       <!-- ko if: availableComputes().length === 0 && !hideComputes -->
@@ -40,7 +40,7 @@ from desktop.views import _ko
       <!-- /ko -->
 
       <!-- ko if: availableNamespaces().length > 0 && !hideNamespaces -->
-      <span class="editor-header-title">${ _('Namespace') }</span>
+      <!-- ko ifnot: hideLabels --><span class="editor-header-title">${ _('Namespace') }</span><!-- /ko -->
       <div data-bind="component: { name: 'hue-drop-down', params: { value: namespace, entries: availableNamespaces, labelAttribute: 'name', searchable: true, linkTitle: '${ _ko('Active namespace') }' } }" style="display: inline-block"></div>
       <!-- /ko -->
       <!-- ko if: availableNamespaces().length === 0 && !hideNamespaces -->
@@ -49,7 +49,7 @@ from desktop.views import _ko
       <!-- /ko -->
 
       <!-- ko if: availableDatabases().length > 0 && !hideDatabases-->
-      <span class="editor-header-title">${ _('Database') }</span>
+      <!-- ko ifnot: hideLabels --><span class="editor-header-title">${ _('Database') }</span><!-- /ko -->
       <div data-bind="component: { name: 'hue-drop-down', params: { value: database, entries: availableDatabases, foreachVisible: true, searchable: true, linkTitle: '${ _ko('Active database') }' } }" style="display: inline-block"></div>
       <!-- /ko -->
       <!-- ko if: availableDatabases().length === 0  && !hideDatabases -->
@@ -107,22 +107,36 @@ from desktop.views import _ko
         self.availableComputes = ko.observableArray();
         self.compute = params.compute;
         self.hideComputes = params.hideComputes || !self.compute;
+        self.hideLabels = params.hideLabels;
 
         if (params.compute) {
           self.loadingComputes(true);
           self.lastComputesPromise = ContextCatalog.getComputes({ sourceType: ko.unwrap(self.sourceType) }).done(function (computes) {
             self.availableComputes(computes);
-            if (!self.compute()) {
-              self.compute(apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute'));
-            }
-            if (!self.compute() || !computes.some(function (compute) {
-              if (compute.id === self.compute().id) {
-                self.compute(compute);
-                return true;
+            if (!self.compute() && apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute')) {
+              var lastSelectedCompute = apiHelper.getFromTotalStorage('contextSelector', 'lastSelectedCompute');
+              var found = computes.some(function (compute) {
+                if (compute.id === lastSelectedCompute.id) {
+                  self.compute(lastSelectedCompute);
+                  return true;
+                }
+              });
+
+              // If we can't find exact match we pick first based on type
+              if (!found) {
+                computes.some(function (compute) {
+                  if (compute.type === lastSelectedCompute.type) {
+                    self.compute(compute);
+                    return true;
+                  }
+                });
               }
-            })) {
+            }
+
+            if (!self.compute()) {
               self.compute(computes[0]);
             }
+
             var computeSub = self.compute.subscribe(function (newCompute) {
               if (params.onComputeSelect) {
                 params.onComputeSelect(newCompute);