Browse Source

HUE-8330 [dashboard] Minimal support for cluster in dashboard.

jdesjean 7 years ago
parent
commit
05af489b71

+ 2 - 2
apps/search/src/search/dashboard_api.py

@@ -30,8 +30,8 @@ LOG = logging.getLogger(__name__)
 
 class SearchApi(DashboardApi):
 
-  def __init__(self, user):
-    DashboardApi.__init__(self, user)
+  def __init__(self, user, cluster):
+    DashboardApi.__init__(self, user, cluster)
     self.api = SolrApi(SOLR_URL.get(), self.user)
 
   def query(self, collection, query, facet=None):

+ 4 - 3
desktop/libs/dashboard/src/dashboard/api.py

@@ -49,16 +49,17 @@ def search(request):
   collection = json.loads(request.POST.get('collection', '{}'))
   query = json.loads(request.POST.get('query', '{}'))
   facet = json.loads(request.POST.get('facet', '{}'))
+  cluster = request.POST.get('cluster', '""')
 
   query['download'] = 'download' in request.POST
   fetch_result = 'fetch_result' in request.POST
-  
+
   if collection:
     try:
       if fetch_result:
-        response = get_engine(request.user, collection, facet).fetch_result(collection, query, facet)
+        response = get_engine(request.user, collection, facet, cluster=cluster).fetch_result(collection, query, facet)
       else:
-        response = get_engine(request.user, collection, facet).query(collection, query, facet)
+        response = get_engine(request.user, collection, facet, cluster=cluster).query(collection, query, facet)
     except RestException, e:
       response.update(extract_solr_exception_message(e))
     except Exception, e:

+ 7 - 6
desktop/libs/dashboard/src/dashboard/dashboard_api.py

@@ -21,7 +21,7 @@ import logging
 LOG = logging.getLogger(__name__)
 
 
-def get_engine(user, engine='solr', facet=None, source='data'):
+def get_engine(user, engine='solr', facet=None, source='data', cluster='""'):
   if isinstance(engine, dict):
     if source == 'data':
       source = engine.get('source')
@@ -33,23 +33,24 @@ def get_engine(user, engine='solr', facet=None, source='data'):
   if engine != 'solr':
     if engine == 'impala':
       from impala.dashboard_api import ImpalaDashboardApi
-      return ImpalaDashboardApi(user, engine, source=source)
+      return ImpalaDashboardApi(user, engine, source=source, cluster=cluster)
     elif engine == 'hive':
       from beeswax.dashboard_api import HiveDashboardApi
-      return HiveDashboardApi(user, engine, source=source)
+      return HiveDashboardApi(user, engine, source=source, cluster=cluster)
     else:
       from notebook.dashboard_api import SQLDashboardApi
-      return SQLDashboardApi(user, engine, source=source)
+      return SQLDashboardApi(user, engine, source=source, cluster=cluster)
   else:
     from search.dashboard_api import SearchApi
     # Could add source to Solr at some point, to behave like a 'view', but need state in query history or URL params
-    return SearchApi(user)
+    return SearchApi(user, cluster)
 
 
 class DashboardApi(object):
 
-  def __init__(self, user):
+  def __init__(self, user, cluster):
     self.user = user
+    self.cluster = cluster
 
   def datasets(self, show_all=False): pass
 

+ 2 - 1
desktop/libs/dashboard/src/dashboard/views.py

@@ -132,7 +132,8 @@ def index_m(request):
 
 def new_search(request):
   engine = request.GET.get('engine', 'solr')
-  collections = get_engine(request.user, engine).datasets() if engine != 'report' else ['default']
+  cluster = request.POST.get('cluster','""')
+  collections = get_engine(request.user, engine, cluster=cluster).datasets() if engine != 'report' else ['default']
   if not collections:
     if engine == 'solr':
       return no_collections(request)

+ 10 - 9
desktop/libs/notebook/src/notebook/dashboard_api.py

@@ -40,14 +40,15 @@ LIMIT = 100
 
 
 class MockRequest():
-  def __init__(self, user):
+  def __init__(self, user, cluster):
     self.user = user
+    self.POST = {'cluster': cluster}
 
 
 class SQLDashboardApi(DashboardApi):
 
-  def __init__(self, user, engine, source='data'):
-    super(SQLDashboardApi, self).__init__(user)
+  def __init__(self, user, engine, source='data', cluster='""'):
+    super(SQLDashboardApi, self).__init__(user, cluster)
     self.engine = engine
     self.source = source
     self.async = engine == 'hive' or engine == 'impala'
@@ -176,7 +177,7 @@ class SQLDashboardApi(DashboardApi):
         skip_historify=True
     )
 
-    response = editor.execute(MockRequest(self.user))
+    response = editor.execute(MockRequest(self.user, self.cluster))
 
     if 'handle' in response and response['handle'].get('sync'):
       response['result'] = self._convert_result(response['result'], dashboard, facet, query)
@@ -192,7 +193,7 @@ class SQLDashboardApi(DashboardApi):
 
     start_over = True # TODO
 
-    result = get_api(MockRequest(self.user), snippet).fetch_result(
+    result = get_api(MockRequest(self.user, self.cluster), snippet).fetch_result(
         notebook,
         snippet,
         dashboard['template']['rows'],
@@ -206,9 +207,9 @@ class SQLDashboardApi(DashboardApi):
   def datasets(self, show_all=False):
     snippet = {'type': self.engine}
     # Ideally from left assist at some point instead
-    databases = get_api(MockRequest(self.user), snippet).autocomplete(snippet)['databases']
+    databases = get_api(MockRequest(self.user, self.cluster), snippet).autocomplete(snippet)['databases']
     database = databases and 'default' not in databases and databases[0] or 'default'
-    return [database + '.' + table['name'] for table in get_api(MockRequest(self.user), snippet).autocomplete(snippet, database=database)['tables_meta']]
+    return [database + '.' + table['name'] for table in get_api(MockRequest(self.user, self.cluster), snippet).autocomplete(snippet, database=database)['tables_meta']]
 
 
   # This method currently behaves more like a static method
@@ -221,7 +222,7 @@ class SQLDashboardApi(DashboardApi):
     else:
       database, table = self._get_database_table_names(name)
 
-    table_metadata = get_api(MockRequest(self.user), snippet).autocomplete(snippet, database, table)
+    table_metadata = get_api(MockRequest(self.user, self.cluster), snippet).autocomplete(snippet, database, table)
 
     return {
       'schema': {
@@ -322,7 +323,7 @@ class SQLDashboardApi(DashboardApi):
         # async=False
     )
 
-    request = MockRequest(self.user)
+    request = MockRequest(self.user, self.cluster)
     mock_notebook = {}
     snippet = {'type': self.engine}
     response = editor.execute(request)