]> source.dussan.org Git - sonarqube.git/commitdiff
Fix last details of rules search (profiling logs, activation checkbox)
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 18 Dec 2013 17:08:46 +0000 (18:08 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 18 Dec 2013 17:08:56 +0000 (18:08 +0100)
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java
sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java
sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/views/new_rules_configuration/_rule.html.erb

index dd3df99bd4a352ae4690c4923cd6668f92b91dfb..137b5e376d50d05d456f4ee442246a286bc9df7c 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.qualityprofile;
 
 import org.elasticsearch.common.collect.Lists;
 import org.elasticsearch.common.collect.Maps;
-import org.joda.time.format.ISODateTimeFormat;
+import org.elasticsearch.common.joda.time.format.ISODateTimeFormat;
 import org.sonar.api.rules.ActiveRule;
 import org.sonar.check.Cardinality;
 import org.sonar.server.rule.ActiveRuleDocument;
index e3bc3df437f409773f5058344aba1a0584dd1a83..1125d7dff11bcf4f3dac933e4cf212a4966ff956 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.server.rule;
 
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.action.get.MultiGetItemResponse;
+import org.elasticsearch.action.get.MultiGetRequestBuilder;
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.common.collect.Lists;
 import org.elasticsearch.index.query.BoolFilterBuilder;
@@ -80,8 +81,8 @@ public class ProfileRules implements ServerExtension {
     }
 
     if (hitCounter > 0) {
-      MultiGetItemResponse[] responses = index.client().prepareMultiGet().add(INDEX_RULES, TYPE_RULE, parentIds)
-        .execute().actionGet().getResponses();
+      MultiGetRequestBuilder getParentRules = index.client().prepareMultiGet().add(INDEX_RULES, TYPE_RULE, parentIds);
+      MultiGetItemResponse[] responses = index.executeMultiGet(getParentRules);
 
       for (int i = 0; i < hitCounter; i ++) {
         result.add(new QProfileRule(responses[i].getResponse().getSourceAsMap(), activeRuleSources.get(i)));
index 5c3bffa208f6f5e3785be4a7ac9067db34445d32..86466b325669e1d7e18ac120767247a96e6beb82 100644 (file)
@@ -26,8 +26,12 @@ import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsReques
 import org.elasticsearch.action.bulk.BulkItemResponse;
 import org.elasticsearch.action.bulk.BulkRequestBuilder;
 import org.elasticsearch.action.bulk.BulkResponse;
+import org.elasticsearch.action.count.CountRequest;
 import org.elasticsearch.action.count.CountRequestBuilder;
+import org.elasticsearch.action.get.MultiGetItemResponse;
+import org.elasticsearch.action.get.MultiGetRequestBuilder;
 import org.elasticsearch.action.index.IndexRequestBuilder;
+import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.action.search.SearchType;
@@ -50,6 +54,7 @@ import org.sonar.core.profiling.StopWatch;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
@@ -213,17 +218,34 @@ public class SearchIndex {
     try {
       return builder.execute().actionGet().getHits();
     } finally {
-      watch.stop("Request executed: %s", builderToString(builder));
+      SearchRequest request = builder.request();
+      watch.stop("Executed search on ind(ex|ices) '%s' and type(s) '%s' with request: %s",
+        Arrays.toString(request.indices()), Arrays.toString(request.types()), builderToString(builder));
     }
   }
 
+  public MultiGetItemResponse[] executeMultiGet(MultiGetRequestBuilder builder) {
+    StopWatch watch = createWatch();
+    MultiGetItemResponse[] result = null;
+    try {
+      result = builder.execute().actionGet().getResponses();
+    } finally {
+      watch.stop("Got %d documents by multiget", result == null ? 0 : result.length);
+    }
+    return result;
+  }
+
   public long executeCount(CountRequestBuilder builder) {
     StopWatch watch = createWatch();
+    long count = 0;
     try {
-      return builder.execute().actionGet().getCount();
+      count = builder.execute().actionGet().getCount();
     } finally {
-      watch.stop("Count executed: %s", builder.toString());
+      CountRequest request = builder.request();
+      watch.stop("Counted %d documents on ind(ex|ices) '%s'",
+        count, Arrays.toString(request.indices()));
     }
+    return count;
   }
 
   private String builderToString(SearchRequestBuilder builder) {
index b86b10fc7c521cf5e08efd6c65b228bd930b1098..9f3c7e94735247f3db89f9865ad14b59a25f56f4 100644 (file)
@@ -49,43 +49,39 @@ class NewRulesConfigurationController < ApplicationController
                       [message('rules.status.ready'), Rule::STATUS_READY]]
     @select_sort_by = [[message('rules_configuration.rule_name'), Rule::SORT_BY_RULE_NAME], [message('rules_configuration.creation_date'), Rule::SORT_BY_CREATION_DATE]]
 
-    begin
-      stop_watch = Internal.profiling.start("rules", "BASIC")
+    stop_watch = Internal.profiling.start("rules", "BASIC")
 
-      criteria = {
-      "profileId" => @profile.id.to_i, "activation" => @activation, "severities" => @priorities, "inheritance" => @inheritance, "statuses" => @status,
-      "repositoryKeys" => @repositories, "nameOrKey" => @searchtext, "include_parameters_and_notes" => true, "language" => @profile.language, "sort_by" => @sort_by}
+    criteria = {
+    "profileId" => @profile.id.to_i, "activation" => @activation, "severities" => @priorities, "inheritance" => @inheritance, "statuses" => @status,
+    "repositoryKeys" => @repositories, "nameOrKey" => @searchtext, "include_parameters_and_notes" => true, "language" => @profile.language, "sort_by" => @sort_by}
 
-      @rules = []
-      @pagination = Api::Pagination.new(params)
+    @rules = []
+    @pagination = Api::Pagination.new(params)
 
-      call_backend do
-        query = Java::OrgSonarServerRule::ProfileRuleQuery::parse(criteria.to_java)
-        paging = Java::OrgSonarServerQualityprofile::Paging.create(@pagination.per_page.to_i, @pagination.page.to_i)
+    call_backend do
+      query = Java::OrgSonarServerRule::ProfileRuleQuery::parse(criteria.to_java)
+      paging = Java::OrgSonarServerQualityprofile::Paging.create(@pagination.per_page.to_i, @pagination.page.to_i)
 
-        if @activation==STATUS_ACTIVE
-          result = Internal.quality_profiles.searchActiveRules(query, paging)
-        else
-          result = Internal.quality_profiles.searchInactiveRules(query, paging)
-        end
+      if @activation==STATUS_ACTIVE
+        result = Internal.quality_profiles.searchActiveRules(query, paging)
+      else
+        result = Internal.quality_profiles.searchInactiveRules(query, paging)
+      end
 
-        @rules = result.rules
-        @pagination.count = result.paging.total
+      @rules = result.rules
+      @pagination.count = result.paging.total
 
-        unless @searchtext.blank?
-          if @activation==STATUS_ACTIVE
-            @hidden_inactives = Internal.quality_profiles.countInactiveRules(query)
-          else
-            @hidden_actives = Internal.quality_profiles.countActiveRules(query)
-          end
+      unless @searchtext.blank?
+        if @activation==STATUS_ACTIVE
+          @hidden_inactives = Internal.quality_profiles.countInactiveRules(query)
+        else
+          @hidden_actives = Internal.quality_profiles.countActiveRules(query)
         end
       end
-
-      stop_watch.stop("found #{@rules.size} rules with criteria #{criteria.to_json}")
-    rescue
-      @rules = []
     end
 
+    stop_watch.stop("found #{@pagination.count} rules with criteria #{criteria.to_json}, displaying #{@pagination.per_page} items")
+
     @current_rules = @rules
   end
 
index 49a714ea9c15c04bf68cb5074d0b3ffb6c1862b0..31694628defc1e8683c6f350f73388ce2c9053eb 100644 (file)
@@ -12,7 +12,7 @@
                                   data:'level='+$j('#levels_select_#{rule.id} :selected').val()})}"
     %>
 
-    <%= check_box_tag(check_box_id, 'yes', true, :onclick => activate_rule, :disabled => !enable_modification || rule.inherited? || rule.overrides?) %>
+    <%= check_box_tag(check_box_id, 'yes', !rule.activeRuleId.nil?, :onclick => activate_rule, :disabled => !enable_modification || rule.inherited? || rule.overrides?) %>
     <%= select_tag(select_box_id, options_for_select(RulesConfigurationController::RULE_PRIORITIES, rule.severity),
                    {:onchange => changel_level, :disabled => (!(enable_modification))}) %>