Răsfoiți Sursa

HUE-6249 [optimizer] Support Sentry filtering on topColumns

Romain Rigaux 8 ani în urmă
părinte
comite
cfd5e1b

+ 1 - 2
desktop/core/src/desktop/templates/assist.mako

@@ -2027,9 +2027,8 @@ from notebook.conf import get_ordered_interpreters
           <a data-bind="click: showSubmitPopup" href="javascript: void(0);">${ _('Start') }</a>
           <!-- /ko -->
           <!-- ko if: schedulerViewModelIsLoaded() && viewSchedulerId()-->
-          <a data-bind="click: showSubmitPopup" href="javascript: void(0);">${ _('View') }</a>
+          <a data-bind="click: function() { huePubSub.publish('show.jobs.panel'); huePubSub.publish('mini.jb.navigate', 'schedules') }" href="javascript: void(0);">${ _('View') }</a>
           ##<a data-bind="click: showSubmitPopup">${ _('Synchronize') }</a>
-          <a data-bind="click: showSubmitPopup" href="javascript: void(0);">${ _('Stop') }</a>
           <!-- /ko -->
           <br>
           <br>

+ 5 - 1
desktop/core/src/desktop/templates/ko_components.mako

@@ -161,9 +161,9 @@ from desktop.views import _ko
 
   <script type="text/html" id="hue-history-panel-template">
     <button class="btn btn-flat pull-right" title="${_('Task history')}" data-bind="toggle: historyPanelVisible">
+      <i class="fa fa-history"></i>
       <div class="jobs-badge" data-bind="text: historyRunningJobs().length, visible: historyRunningJobs().length > 0"></div>
       <div class="jobs-badge" data-bind="text: historyFinishedJobs().length, visible: historyFinishedJobs().length > 0"></div>
-      <i class="fa fa-history"></i>
     </button>
 
     <div class="jobs-panel" data-bind="visible: historyPanelVisible" style="display: none;">
@@ -413,6 +413,10 @@ from desktop.views import _ko
           self.jobsPanelVisible(false);
         });
 
+        huePubSub.subscribe('show.jobs.panel', function () {
+          self.jobsPanelVisible(true);
+        });
+
         self.jobCount = ko.observable(0);
         self.onePageViewModel = params.onePageViewModel;
 

+ 27 - 3
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -70,7 +70,7 @@ def check_privileges(view_func):
         objects = [{'server': get_hive_sentry_provider()}]
         if kwargs.get('database_name'):
           objects[0]['db'] = kwargs['database_name']
-        if kwargs.get('database_name'):
+        if kwargs.get('table_name'):
           objects[0]['table'] = kwargs['table_name']
 
       if len(list(checker.filter_objects(objects, action))) != len(objects):
@@ -80,6 +80,27 @@ def check_privileges(view_func):
   return wraps(view_func)(decorate)
 
 
+def _secure_results(results, user, action='SELECT'):
+    if OPTIMIZER.APPLY_SENTRY_PERMISSIONS.get():
+      checker = get_checker(user=user)
+
+      def getkey(result):
+        key = {'server': get_hive_sentry_provider()}
+
+        if 'dbName' in result:
+          key['db'] = result['dbName']
+        if 'tableName' in result:
+          key['table'] = result['tableName']
+        if 'columnName' in result:
+          key['column'] = result['columnName']
+
+        return key
+
+      return checker.filter_objects(results, action, key=getkey)
+    else:
+      return results
+
+
 class OptimizerApi(object):
 
   def __init__(self, user, api_url=None, product_name=None, product_secret=None, ssl_cert_ca_verify=OPTIMIZER.SSL_CERT_CA_VERIFY.get(), product_auth_secret=None):
@@ -198,7 +219,7 @@ class OptimizerApi(object):
         names = _get_table_name(table['name']),
         return {'server': get_hive_sentry_provider(), 'db': names['database'], 'table': names['table']}
 
-      data['results'] = checker.filter_objects(data['results'], action, key=getkey)
+      data['results'] = list(checker.filter_objects(data['results'], action, key=getkey))
 
     return data
 
@@ -271,7 +292,10 @@ class OptimizerApi(object):
     if db_tables:
       args['dbTableList'] = [db_table.lower() for db_table in db_tables]
 
-    return self._call('getTopColumns', args)
+    results = self._call('getTopColumns', args)
+    for section in ['orderbyColumns', 'selectColumns', 'filterColumns', 'joinColumns', 'groupbyColumns']:
+      results[section] = list(_secure_results(results[section], self.user))
+    return results
 
 
   @check_privileges