Browse Source

HUE-3828 [sentry] Autocomplete list of configs

Enrico Berti 9 years ago
parent
commit
fe7731269f

+ 1 - 1
apps/security/src/security/templates/sentry.mako

@@ -75,7 +75,7 @@ ${ layout.menubar(section=component) }
     <!-- /ko -->
     <!-- /ko -->
 
 
     <!-- ko if: $root.component() == 'solr' -->
     <!-- ko if: $root.component() == 'solr' -->
-      <input type="text" class="input-xxlarge" data-bind="solrchooser: $data.path" placeholder="collection name <CTRL+SPACE>">
+      <input type="text" class="input-xxlarge" data-bind="solrchooser: $data.path" placeholder="collection or config name <CTRL+SPACE>">
       <select data-bind="options: privilegeType() == 'CONFIG' ? $root.availableSolrConfigActions : $root.availableActions, value: $data.action, enable: (privilegeType() == 'COLLECTION')" style="width: 100px; margin-bottom: 0"></select>
       <select data-bind="options: privilegeType() == 'CONFIG' ? $root.availableSolrConfigActions : $root.availableActions, value: $data.action, enable: (privilegeType() == 'COLLECTION')" style="width: 100px; margin-bottom: 0"></select>
     <!-- /ko -->
     <!-- /ko -->
 
 

+ 11 - 5
desktop/core/src/desktop/static/desktop/js/jquery.hiveautocomplete.js

@@ -203,7 +203,7 @@
       BASE_PATH = "/impala/api/autocomplete/";
       BASE_PATH = "/impala/api/autocomplete/";
     }
     }
     if (_this.options.serverType == "SOLR"){
     if (_this.options.serverType == "SOLR"){
-      BASE_PATH = "/indexer/api/collections/";
+      BASE_PATH = "/indexer/api/autocomplete/";
     }
     }
     var _currentFiles = [];
     var _currentFiles = [];
 
 
@@ -263,9 +263,10 @@
           if (! _isSkipColumns){
           if (! _isSkipColumns){
             $(_iterable).each(function (cnt, item) {
             $(_iterable).each(function (cnt, item) {
               if (_this.options.serverType == "SOLR") {
               if (_this.options.serverType == "SOLR") {
-                if (!item.isCoreOnly){
-                  _currentFiles.push('<li class="hiveAutocompleteItem" data-value="' + item.name + '" title="' + item.name + '"><i class="fa '+ _ico +'"></i> ' + item.name + '</li>');
+                if (item.isConfig) {
+                  _ico = 'fa-cogs';
                 }
                 }
+                _currentFiles.push('<li class="hiveAutocompleteItem" data-value="' + item.name + '" title="' + item.name + '"><i class="fa '+ _ico +'"></i> ' + item.name + '</li>');
               }
               }
               else {
               else {
                 _currentFiles.push('<li class="hiveAutocompleteItem" data-value="' + item + '" title="' + item + '"><i class="fa '+ _ico +'"></i> ' + item + '</li>');
                 _currentFiles.push('<li class="hiveAutocompleteItem" data-value="' + item + '" title="' + item + '"><i class="fa '+ _ico +'"></i> ' + item + '</li>');
@@ -280,8 +281,13 @@
               var item = $(this).text().trim();
               var item = $(this).text().trim();
               var path = autocompleteUrl.substring(BASE_PATH.length);
               var path = autocompleteUrl.substring(BASE_PATH.length);
 
 
-              if ($(this).html().indexOf("search") > -1) {
-                _el.val("collections." + item);
+              if ($(this).html().indexOf("search") > -1 || $(this).html().indexOf("cogs") > -1) {
+                if ($(this).html().indexOf("search") > -1){
+                  _el.val("collections." + item);
+                }
+                else {
+                  _el.val("configs." + item);
+                }
                 _this.options.onPathChange(_el.val());
                 _this.options.onPathChange(_el.val());
                 $("#jHueGenericAutocomplete").hide();
                 $("#jHueGenericAutocomplete").hide();
                 _hiveAutocompleteSelectedIndex = -1;
                 _hiveAutocompleteSelectedIndex = -1;

+ 27 - 0
desktop/libs/indexer/src/indexer/api.py

@@ -88,6 +88,33 @@ def parse_fields(request):
 
 
   return JsonResponse(result)
   return JsonResponse(result)
 
 
+def autocomplete(request):
+  searcher = CollectionManagerController(request.user)
+  autocomplete = searcher.get_autocomplete()
+
+  massaged_collections = []
+
+  for collection in autocomplete['collections']:
+    massaged_collections.append({
+      'name': collection,
+      'isCollection': True,
+      'isConfig': False,
+    })
+
+  for config in autocomplete['configs']:
+    massaged_collections.append({
+      'name': config,
+      'isCollection': False,
+      'isConfig': True,
+    })
+
+  response = {
+    'status': 0,
+    'collections': massaged_collections
+  }
+
+  return JsonResponse(response)
+
 
 
 def collections(request):
 def collections(request):
   searcher = CollectionManagerController(request.user)
   searcher = CollectionManagerController(request.user)

+ 12 - 0
desktop/libs/indexer/src/indexer/controller.py

@@ -106,6 +106,18 @@ class CollectionManagerController(object):
     solr_cores.update(solr_aliases)
     solr_cores.update(solr_aliases)
     return solr_cores
     return solr_cores
 
 
+  def get_autocomplete(self):
+    autocomplete = {}
+    try:
+      api = SolrApi(SOLR_URL.get(), self.user, SECURITY_ENABLED.get())
+      autocomplete['collections'] = api.collections2()
+      autocomplete['configs'] = api.configs()
+
+    except Exception, e:
+      LOG.warn('No Zookeeper servlet running on Solr server: %s' % e)
+
+    return autocomplete
+
   def get_fields(self, collection_or_core_name):
   def get_fields(self, collection_or_core_name):
     api = SolrApi(SOLR_URL.get(), self.user, SECURITY_ENABLED.get())
     api = SolrApi(SOLR_URL.get(), self.user, SECURITY_ENABLED.get())
 
 

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

@@ -27,6 +27,7 @@ urlpatterns = patterns('indexer.views',
 
 
 urlpatterns += patterns('indexer.api',
 urlpatterns += patterns('indexer.api',
   url(r'^api/fields/parse/$', 'parse_fields', name='api_parse_fields'),
   url(r'^api/fields/parse/$', 'parse_fields', name='api_parse_fields'),
+  url(r'^api/autocomplete/$', 'autocomplete', name='api_autocomplete'),
   url(r'^api/collections/$', 'collections', name='api_collections'),
   url(r'^api/collections/$', 'collections', name='api_collections'),
   url(r'^api/collections/create/$', 'collections_create', name='api_collections_create'),
   url(r'^api/collections/create/$', 'collections_create', name='api_collections_create'),
   url(r'^api/collections/import/$', 'collections_import', name='api_collections_import'),
   url(r'^api/collections/import/$', 'collections_import', name='api_collections_import'),