Jelajahi Sumber

[metadata] Add API call to upload query history

Romain Rigaux 9 tahun lalu
induk
melakukan
efd9a9c

+ 22 - 0
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -24,6 +24,8 @@ from django.views.decorators.http import require_POST
 
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.i18n import force_unicode
+from desktop.models import Document2
+from notebook.models import Notebook
 
 from metadata.optimizer_client import OptimizerApi
 
@@ -72,3 +74,23 @@ def table_details(request):
   response['status'] = 0
 
   return JsonResponse(response)
+
+
+@require_POST
+@error_handler
+def upload_history(request):
+  response = {'status': -1}
+
+  query_type = 'hive'
+
+  queries = [
+      (doc.uuid, 1000, Notebook(document=doc).get_data()['snippets'][0]['statement'])
+      for doc in Document2.objects.get_history(doc_type='query-%s' % query_type, user=request.user)[:25]
+  ]
+
+  api = OptimizerApi()
+
+  response['upload_history'] = api.upload(queries=queries, source_platform=query_type)
+  response['status'] = 0
+
+  return JsonResponse(response)

+ 10 - 4
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -126,15 +126,18 @@ class OptimizerApi(object):
       raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
-  def upload(self, token, queries, email=None, sourcePlatform='generic'):
-    try:
+  def upload(self, queries, token=None, email=None, source_platform='generic'):
+    if token is None:
+      token = self._authenticate()
+
+    try:      
       content_generator = OptimizerDataAdapter(queries)
       queries_csv = export_csvxls.create_generator(content_generator, 'csv')
 
       data = {
           'email': email if email is not None else self._email,
           'token': token,
-          'sourcePlatform': sourcePlatform,
+          'sourcePlatform': source_platform,
       }
       return self._root.post('/api/upload', data=data, files = {'file': ('hue-report.csv', list(queries_csv)[0])})
 
@@ -173,6 +176,9 @@ class OptimizerApi(object):
 
 def OptimizerDataAdapter(queries):
   headers = ['SQL_ID', 'ELAPSED_TIME', 'SQL_FULLTEXT']
-  rows = ([str(uuid.uuid4()), 1000, q] for q in queries)
+  if queries and len(queries[0]) == 3:
+    rows = queries
+  else:  
+    rows = ([str(uuid.uuid4()), 1000, q] for q in queries)
 
   yield headers, rows

+ 1 - 0
desktop/libs/metadata/src/metadata/urls.py

@@ -32,4 +32,5 @@ urlpatterns = patterns('metadata.navigator_api',
 urlpatterns = patterns('metadata.optimizer_api',
   url(r'^api/optimizer_api/top_tables/?$', 'top_tables', name='top_tables'),
   url(r'^api/optimizer_api/table_details/?$', 'table_details', name='table_details'),
+  url(r'^api/optimizer_api/upload_history/?$', 'upload_history', name='upload_history'),
 )