|
@@ -72,7 +72,11 @@ def check_privileges(view_func):
|
|
|
|
|
|
|
|
if kwargs.get('db_tables'):
|
|
if kwargs.get('db_tables'):
|
|
|
for db_table in kwargs['db_tables']:
|
|
for db_table in kwargs['db_tables']:
|
|
|
- objects.append({'server': get_hive_sentry_provider(), 'db': _get_table_name(db_table)['database'], 'table': _get_table_name(db_table)['table']})
|
|
|
|
|
|
|
+ objects.append({
|
|
|
|
|
+ 'server': get_hive_sentry_provider(),
|
|
|
|
|
+ 'db': _get_table_name(db_table)['database'],
|
|
|
|
|
+ 'table': _get_table_name(db_table)['table']
|
|
|
|
|
+ })
|
|
|
else:
|
|
else:
|
|
|
objects = [{'server': get_hive_sentry_provider()}]
|
|
objects = [{'server': get_hive_sentry_provider()}]
|
|
|
if kwargs.get('database_name'):
|
|
if kwargs.get('database_name'):
|
|
@@ -82,7 +86,9 @@ def check_privileges(view_func):
|
|
|
|
|
|
|
|
filtered = list(checker.filter_objects(objects, action))
|
|
filtered = list(checker.filter_objects(objects, action))
|
|
|
if len(filtered) != len(objects):
|
|
if len(filtered) != len(objects):
|
|
|
- raise MissingSentryPrivilegeException({'pre_filtering': objects, 'post_filtering': filtered, 'diff': len(objects) - len(filtered)})
|
|
|
|
|
|
|
+ raise MissingSentryPrivilegeException(
|
|
|
|
|
+ {'pre_filtering': objects, 'post_filtering': filtered, 'diff': len(objects) - len(filtered)}
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
return view_func(*args, **kwargs)
|
|
return view_func(*args, **kwargs)
|
|
|
return wraps(view_func)(decorate)
|
|
return wraps(view_func)(decorate)
|
|
@@ -121,7 +127,7 @@ class OptimizerClient(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_tenant(self, cluster_id='default'):
|
|
def get_tenant(self, cluster_id='default'):
|
|
|
- return self._call('getTenant', {'clusterId' : cluster_id})
|
|
|
|
|
|
|
+ return self._call('getTenant', {'clusterId': cluster_id})
|
|
|
|
|
|
|
|
|
|
|
|
|
def upload(self, data, data_type='queries', source_platform='generic', workload_id=None):
|
|
def upload(self, data, data_type='queries', source_platform='generic', workload_id=None):
|
|
@@ -169,7 +175,7 @@ class OptimizerClient(object):
|
|
|
f_queries.close()
|
|
f_queries.close()
|
|
|
|
|
|
|
|
parameters = {
|
|
parameters = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'fileLocation': f_queries.name,
|
|
'fileLocation': f_queries.name,
|
|
|
'sourcePlatform': source_platform,
|
|
'sourcePlatform': source_platform,
|
|
|
}
|
|
}
|
|
@@ -187,14 +193,14 @@ class OptimizerClient(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
def upload_status(self, workload_id):
|
|
def upload_status(self, workload_id):
|
|
|
- return self._call('uploadStatus', {'tenant' : self._tenant_id, 'workloadId': workload_id})
|
|
|
|
|
|
|
+ return self._call('uploadStatus', {'tenant': self._tenant_id, 'workloadId': workload_id})
|
|
|
|
|
|
|
|
# Sentry permissions work bottom to top.
|
|
# Sentry permissions work bottom to top.
|
|
|
# @check_privileges
|
|
# @check_privileges
|
|
|
def top_tables(self, workfloadId=None, database_name='default', page_size=1000, startingToken=None, connector=None):
|
|
def top_tables(self, workfloadId=None, database_name='default', page_size=1000, startingToken=None, connector=None):
|
|
|
return self._call(
|
|
return self._call(
|
|
|
'getTopTables', {
|
|
'getTopTables', {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'connector': connector,
|
|
'connector': connector,
|
|
|
'dbName': database_name.lower(),
|
|
'dbName': database_name.lower(),
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
@@ -207,7 +213,7 @@ class OptimizerClient(object):
|
|
|
def table_details(self, database_name, table_name, page_size=100, startingToken=None):
|
|
def table_details(self, database_name, table_name, page_size=100, startingToken=None):
|
|
|
return self._call(
|
|
return self._call(
|
|
|
'getTablesDetail', {
|
|
'getTablesDetail', {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'dbName': database_name.lower(),
|
|
'dbName': database_name.lower(),
|
|
|
'tableName': table_name.lower(),
|
|
'tableName': table_name.lower(),
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
@@ -219,7 +225,7 @@ class OptimizerClient(object):
|
|
|
def query_compatibility(self, source_platform, target_platform, query, page_size=100, startingToken=None):
|
|
def query_compatibility(self, source_platform, target_platform, query, page_size=100, startingToken=None):
|
|
|
return self._call(
|
|
return self._call(
|
|
|
'getQueryCompatible', {
|
|
'getQueryCompatible', {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'query': query,
|
|
'query': query,
|
|
|
'sourcePlatform': source_platform,
|
|
'sourcePlatform': source_platform,
|
|
|
'targetPlatform': target_platform,
|
|
'targetPlatform': target_platform,
|
|
@@ -231,7 +237,7 @@ class OptimizerClient(object):
|
|
|
def query_risk(self, query, source_platform, db_name, page_size=100, startingToken=None):
|
|
def query_risk(self, query, source_platform, db_name, page_size=100, startingToken=None):
|
|
|
response = self._call(
|
|
response = self._call(
|
|
|
'getQueryRisk', {
|
|
'getQueryRisk', {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'query': _clean_query(query),
|
|
'query': _clean_query(query),
|
|
|
'dbName': db_name,
|
|
'dbName': db_name,
|
|
|
'sourcePlatform': source_platform,
|
|
'sourcePlatform': source_platform,
|
|
@@ -253,7 +259,15 @@ class OptimizerClient(object):
|
|
|
|
|
|
|
|
def similar_queries(self, source_platform, query, page_size=100, startingToken=None):
|
|
def similar_queries(self, source_platform, query, page_size=100, startingToken=None):
|
|
|
if is_admin(self.user):
|
|
if is_admin(self.user):
|
|
|
- return self._call('getSimilarQueries', {'tenant' : self._tenant_id, 'sourcePlatform': source_platform, 'query': query, 'pageSize': page_size, 'startingToken': startingToken})
|
|
|
|
|
|
|
+ return self._call(
|
|
|
|
|
+ 'getSimilarQueries', {
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
|
|
+ 'sourcePlatform': source_platform,
|
|
|
|
|
+ 'query': query,
|
|
|
|
|
+ 'pageSize': page_size,
|
|
|
|
|
+ 'startingToken': startingToken
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
else:
|
|
else:
|
|
|
raise PopupException(_('Call not supported'))
|
|
raise PopupException(_('Call not supported'))
|
|
|
|
|
|
|
@@ -261,7 +275,7 @@ class OptimizerClient(object):
|
|
|
@check_privileges
|
|
@check_privileges
|
|
|
def top_filters(self, db_tables=None, page_size=100, startingToken=None):
|
|
def top_filters(self, db_tables=None, page_size=100, startingToken=None):
|
|
|
args = {
|
|
args = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
|
'startingToken': startingToken
|
|
'startingToken': startingToken
|
|
|
}
|
|
}
|
|
@@ -274,7 +288,7 @@ class OptimizerClient(object):
|
|
|
@check_privileges
|
|
@check_privileges
|
|
|
def top_aggs(self, db_tables=None, page_size=100, startingToken=None):
|
|
def top_aggs(self, db_tables=None, page_size=100, startingToken=None):
|
|
|
args = {
|
|
args = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
|
'startingToken': startingToken
|
|
'startingToken': startingToken
|
|
|
}
|
|
}
|
|
@@ -300,8 +314,8 @@ class OptimizerClient(object):
|
|
|
@check_privileges
|
|
@check_privileges
|
|
|
def top_columns(self, db_tables=None, page_size=100, startingToken=None, connector=None):
|
|
def top_columns(self, db_tables=None, page_size=100, startingToken=None, connector=None):
|
|
|
args = {
|
|
args = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
- 'connector' : connector,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
|
|
+ 'connector': connector,
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
|
'startingToken': startingToken
|
|
'startingToken': startingToken
|
|
|
}
|
|
}
|
|
@@ -319,7 +333,7 @@ class OptimizerClient(object):
|
|
|
@check_privileges
|
|
@check_privileges
|
|
|
def top_joins(self, db_tables=None, page_size=100, startingToken=None, connector=None):
|
|
def top_joins(self, db_tables=None, page_size=100, startingToken=None, connector=None):
|
|
|
args = {
|
|
args = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'connector': connector,
|
|
'connector': connector,
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
|
'startingToken': startingToken
|
|
'startingToken': startingToken
|
|
@@ -341,7 +355,7 @@ class OptimizerClient(object):
|
|
|
|
|
|
|
|
def top_databases(self, page_size=100, startingToken=None):
|
|
def top_databases(self, page_size=100, startingToken=None):
|
|
|
args = {
|
|
args = {
|
|
|
- 'tenant' : self._tenant_id,
|
|
|
|
|
|
|
+ 'tenant': self._tenant_id,
|
|
|
'pageSize': page_size,
|
|
'pageSize': page_size,
|
|
|
'startingToken': startingToken
|
|
'startingToken': startingToken
|
|
|
}
|
|
}
|
|
@@ -382,30 +396,30 @@ def _get_table_name(path):
|
|
|
|
|
|
|
|
|
|
|
|
|
def _secure_results(results, user, action='SELECT'):
|
|
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']
|
|
|
|
|
- elif 'database' in result:
|
|
|
|
|
- key['db'] = result['database']
|
|
|
|
|
- if 'tableName' in result:
|
|
|
|
|
- key['table'] = result['tableName']
|
|
|
|
|
- elif 'table' in result:
|
|
|
|
|
- key['table'] = result['table']
|
|
|
|
|
- if 'columnName' in result:
|
|
|
|
|
- key['column'] = result['columnName']
|
|
|
|
|
- elif 'column' in result:
|
|
|
|
|
- key['column'] = result['column']
|
|
|
|
|
-
|
|
|
|
|
- return key
|
|
|
|
|
-
|
|
|
|
|
- return checker.filter_objects(results, action, key=getkey)
|
|
|
|
|
- else:
|
|
|
|
|
- return results
|
|
|
|
|
|
|
+ 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']
|
|
|
|
|
+ elif 'database' in result:
|
|
|
|
|
+ key['db'] = result['database']
|
|
|
|
|
+ if 'tableName' in result:
|
|
|
|
|
+ key['table'] = result['tableName']
|
|
|
|
|
+ elif 'table' in result:
|
|
|
|
|
+ key['table'] = result['table']
|
|
|
|
|
+ if 'columnName' in result:
|
|
|
|
|
+ key['column'] = result['columnName']
|
|
|
|
|
+ elif 'column' in result:
|
|
|
|
|
+ key['column'] = result['column']
|
|
|
|
|
+
|
|
|
|
|
+ return key
|
|
|
|
|
+
|
|
|
|
|
+ return checker.filter_objects(results, action, key=getkey)
|
|
|
|
|
+ else:
|
|
|
|
|
+ return results
|
|
|
|
|
|
|
|
|
|
|
|
|
def _clean_query(query):
|
|
def _clean_query(query):
|