Просмотр исходного кода

HUE-3450 [metastore] Initial metadata integration

Enrico Berti 9 лет назад
Родитель
Сommit
ee40e77

+ 12 - 2
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -48,6 +48,7 @@
     self.loading = ko.observable(false);
     self.tables = ko.observableArray();
     self.stats = ko.observable();
+    self.optimizerStats = ko.observable();
 
     self.tableQuery = ko.observable('').extend({rateLimit: 150});
 
@@ -69,7 +70,7 @@
     self.table = ko.observable(null);
   }
 
-  MetastoreDatabase.prototype.load = function (callback) {
+  MetastoreDatabase.prototype.load = function (callback, optimizerEnabled) {
     var self = this;
     if (self.loading()) {
       return;
@@ -110,6 +111,14 @@
       }
     });
 
+    if (optimizerEnabled) {
+      $.post('/metadata/api/optimizer_api/top_tables', function(data){
+        if (data && data.status == 0) {
+          self.optimizerStats(ko.mapping.fromJS(data.top_tables));
+        }
+      });
+    }
+
     $.totalStorage('hue.metastore.lastdb', self.name);
   };
 
@@ -443,6 +452,7 @@
     self.assistHelper = AssistHelper.getInstance(options);
     self.isLeftPanelVisible = ko.observable();
     self.assistHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);
+    self.optimizerEnabled = options.optimizerEnabled || false;
 
     huePubSub.subscribe("assist.db.panel.ready", function () {
       huePubSub.publish('assist.set.database', {
@@ -660,7 +670,7 @@
     self.database(metastoreDatabase);
 
     if (!metastoreDatabase.loaded()) {
-      metastoreDatabase.load(callback);
+      metastoreDatabase.load(callback, self.optimizerEnabled);
     } else if (callback) {
       callback();
     }

+ 48 - 4
apps/metastore/src/metastore/templates/metastore.mako

@@ -40,10 +40,15 @@ ${ assist.assistPanel() }
 <script src="${ static('desktop/ext/js/bootstrap-editable.min.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('desktop/ext/js/d3.v3.js') }" type="text/javascript" charset="utf-8"></script>
 <script src="${ static('beeswax/js/stats.utils.js') }"></script>
+<script src="${ static('desktop/js/nv.d3.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('desktop/js/nv.d3.growingPie.js') }" type="text/javascript" charset="utf-8"></script>
+<script src="${ static('desktop/js/nv.d3.growingPieChart.js') }" type="text/javascript" charset="utf-8"></script>
 
 <link rel="stylesheet" href="${ static('desktop/ext/css/bootstrap-editable.css') }">
 <link rel="stylesheet" href="${ static('metastore/css/metastore.css') }" type="text/css">
 <link rel="stylesheet" href="${ static('notebook/css/notebook.css') }">
+<link rel="stylesheet" href="${ static('desktop/ext/css/nv.d3.min.css') }">
+<link rel="stylesheet" href="${ static('desktop/css/nv.d3.css') }">
 <style type="text/css">
 % if conf.CUSTOM.BANNER_TOP_HTML.get():
   .show-assist {
@@ -323,9 +328,16 @@ ${ assist.assistPanel() }
 </script>
 
 <script type="text/html" id="metastore-tables">
-    <!-- ko with: stats  -->
     <div class="row-fluid">
-      <div class="span12 tile">
+      <!-- ko with: stats  -->
+      <div class="
+      %if is_optimizer_enabled:
+        span8
+      %else:
+        span12
+      %endif
+       tile">
+
         <h4>${ _('Stats') }</h4>
         <div class="row-fluid">
           <div class="span6">
@@ -360,8 +372,23 @@ ${ assist.assistPanel() }
         </div>
         <!-- /ko -->
       </div>
+      <!-- /ko -->
+
+      %if is_optimizer_enabled:
+      <!-- ko with: optimizerStats  -->
+      <div class="span4 tile chart-container">
+        <h4>${ _('Navigator optimizer') }</h4>
+
+        <div data-bind="attr:{'id': 'optimizerPieChart'}, pieChart: {data: {counts: details}, fqs: ko.observableArray([]),
+                      transformer: pieChartDataTransformer, maxWidth: 350, parentSelector: '.chart-container' }" class="chart"></div>
+
+      </div>
+      <!-- /ko -->
+      %endif
+
     </div>
-    <!-- /ko -->
+
+
     <div class="row-fluid">
       <div class="span12 tile">
         <h4>${ _('Tables') }</h4>
@@ -775,6 +802,22 @@ ${ assist.assistPanel() }
 
 <script type="text/javascript" charset="utf-8">
 
+  function pieChartDataTransformer(rawDatum) {
+    var _data = [];
+    $(rawDatum.counts()).each(function (cnt, item) {
+      _data.push({
+        label: item.name(),
+        value: item.total(),
+        obj: item
+      });
+    });
+    _data.sort(function (a, b) {
+      return a.value - b.value
+    });
+
+    return _data;
+  }
+
   require([
     'knockout',
     'metastore/js/metastore.ko',
@@ -799,7 +842,8 @@ ${ assist.assistPanel() }
           errorRefreshingTableStats: '${_('An error occurred refreshing the table stats. Please try again.')}',
           errorLoadingDatabases: '${ _('There was a problem loading the databases. Please try again.') }',
           errorLoadingTablePreview: '${ _('There was a problem loading the table preview. Please try again.') }'
-        }
+        },
+        optimizerEnabled: '${is_optimizer_enabled}' === 'True'
       };
 
       var viewModel = new MetastoreViewModel(options);