Sfoglia il codice sorgente

[metadata] Upload queries in CSV format

Romain Rigaux 9 anni fa
parent
commit
fbc1e81cb1

+ 18 - 5
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -18,9 +18,11 @@
 
 import json
 import logging
+import uuid
 
 from django.utils.translation import ugettext as _
 
+from desktop.lib import export_csvxls
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.rest.http_client import HttpClient, RestException
 from desktop.lib.rest import resource
@@ -115,14 +117,25 @@ class OptimizerApi(object):
       raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
-  def upload(self):
+  def upload(self, token, queries, email=None, sourcePlatform='generic'):
     try:
+      content_generator = OptimizerDataAdapter(queries)
+      queries_csv = export_csvxls.create_generator(content_generator, 'csv')
+
       data = {
-          'email': email,
+          'email': email if email is not None else self._email,
           'token': token,
-          'sourcePlatform': 'generic',
-          'file': 'file'
+          'sourcePlatform': sourcePlatform,
       }
-      return self._root.post('/api/upload', data)
+      return self._root.post('/api/upload', data=data, files = {'file': ('hue-report.csv', list(queries_csv)[0])})
+      
     except RestException, e:
       raise PopupException(e, title=_('Error while accessing Optimizer'))
+
+
+def OptimizerDataAdapter(queries):
+  headers = ['SQL_ID', 'ELAPSED_TIME', 'SQL_FULLTEXT']
+  rows = ([str(uuid.uuid4()), 1000, q] for q in queries)
+
+  yield headers, rows
+    

+ 16 - 0
desktop/libs/metadata/src/metadata/optimizer_tests.py

@@ -75,3 +75,19 @@ class TestOptimizerApi(object):
     assert_true(resp['token'], resp)
     assert_equal('success', resp['status'], resp)
 
+  def test_api_upload(self):
+    resp = self.api.authenticate()
+    token = resp['token']
+
+    queries = [
+        "select emps.id from emps where emps.name = 'Joe' group by emps.mgr, emps.id;",
+        "select emps.name from emps where emps.num = 007 group by emps.state, emps.name;",
+        "select Part.partkey, Part.name, Part.type from Part where Part.yyprice > 2095",
+        "select Part.partkey, Part.name, Part.mfgr FROM Part WHERE Part.name LIKE '%red';",
+        "select count(*) as loans from account a where a.account_state_id in (5,9);",
+        "select orders.key, orders.id from orders where orders.price < 9999",
+        "select mgr.name from mgr where mgr.reports > 10 group by mgr.state;"
+    ]
+
+    resp = self.api.upload(token=token, queries=queries)
+    assert_equal('success', resp['status'], resp)