فهرست منبع

HUE-3450 [medatadata] Add tagging to databases

Romain Rigaux 9 سال پیش
والد
کامیت
2ed85db

+ 45 - 0
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -49,6 +49,10 @@
     self.tables = ko.observableArray();
     self.stats = ko.observable();
     self.optimizerStats = ko.observableArray();
+    self.navigatorStats = ko.observable();
+
+    self.showAddTagName = ko.observable(false);
+    self.addTagName = ko.observable('');
 
     self.tableQuery = ko.observable('').extend({rateLimit: 150});
 
@@ -68,6 +72,34 @@
     self.selectedTables = ko.observableArray();
 
     self.table = ko.observable(null);
+    
+    self.addTags = function () {
+      $.post('/metadata/api/navigator/add_tags', {
+        id: ko.mapping.toJSON(self.navigatorStats().identity),
+        tags: ko.mapping.toJSON([self.addTagName()])
+      }, function(data) {
+        if (data && data.status == 0) {
+          self.navigatorStats().tags.push(self.addTagName());
+          self.addTagName('');
+          self.showAddTagName(false);
+        } else {
+          $(document).trigger("error", data.message);
+        }
+      });
+    };
+      
+    self.deleteTags = function (tag) {
+      $.post('/metadata/api/navigator/delete_tags', {
+        id: ko.mapping.toJSON(self.navigatorStats().identity),
+        tags: ko.mapping.toJSON([tag])
+      }, function(data) {
+        if (data && data.status == 0) {
+          self.navigatorStats().tags.remove(tag);
+        } else {
+          $(document).trigger("error", data.message);
+        }
+      });
+    };
   }
 
   MetastoreDatabase.prototype.load = function (callback, optimizerEnabled) {
@@ -95,6 +127,19 @@
         self.loaded(true);
         self.loading(false);
         if (optimizerEnabled) {
+          $.get('/metadata/api/navigator/find_entity', {
+            type: 'database',
+            name: self.name
+          }, function(data){
+            if (data && data.status == 0) {
+              self.navigatorStats(ko.mapping.fromJS(data.entity));
+            } else {
+              $(document).trigger("info", data.message);
+            }
+          }).fail(function (xhr, textStatus, errorThrown) {
+            $(document).trigger("error", xhr.responseText);
+          });
+
           $.post('/metadata/api/optimizer_api/top_tables', {
             database: self.name
           }, function(data){

+ 26 - 0
apps/metastore/src/metastore/templates/metastore.mako

@@ -371,6 +371,10 @@ ${ assist.assistPanel() }
           </div>
         </div>
         <!-- /ko -->
+      
+      <!-- ko if: $root.optimizerEnabled() && $root.database().navigatorStats() && $root.database().navigatorStats().tags -->  
+        <!-- ko template: { name: 'metastore-databases-tags', data: $root.database() }--><!-- /ko -->
+      <!-- /ko -->
       </div>
       <!-- /ko -->
 
@@ -494,6 +498,28 @@ ${ assist.assistPanel() }
   </div>
 </script>
 
+
+<script type="text/html" id="metastore-databases-tags">
+  <div>
+      <h4>${ _('Tagging') }</h4>
+      <div title="${ _('Tags') }"><i class="fa fa-fw fa-tags muted"></i>
+        <!-- ko foreach: $data.navigatorStats().tags() -->
+          <span class="badge badge-info" data-bind="text: $data"></span><i class="fa fa-minus pointer" data-bind="click: $parent.deleteTags"></i>
+        <!-- /ko -->
+
+        <!-- ko if: $data.navigatorStats().tags().length == 0 -->
+          ${ _('No tags') }
+        <!-- /ko -->
+        <div data-bind="visible: $data.showAddTagName">
+          <input type="text" data-bind="value: $data.addTagName, valueUpdate:'afterkeydown'">
+          <i class="fa fa-save pointer" data-bind="click: $data.addTags, visible: $data.addTagName" title="${ _('Save tag') }"></i>
+        </div>
+        <i class="fa fa-plus pointer" data-bind="click: function() { $data.showAddTagName(true); }, visible: ! $data.showAddTagName()" title="${ _('Add a tag') }"></i>
+      </div>
+  </div>
+</script>
+
+
 <script type="text/html" id="metastore-databases-actions">
   <div class="inline-block pull-right">
     <a class="inactive-action" href="javascript:void(0)" data-bind="click: function () { huePubSub.publish('assist.db.refresh', 'hive'); }"><i class="pointer fa fa-refresh" data-bind="css: { 'fa-spin blue' : $root.reloading }" title="${_('Refresh')}"></i></a>