From 6f97a4140c7dd7ce3507993fe7f4c5bb1a876b07 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Wed, 18 Dec 2013 18:08:46 +0100 Subject: [PATCH] Fix last details of rules search (profiling logs, activation checkbox) --- .../server/qualityprofile/QProfileRule.java | 2 +- .../org/sonar/server/rule/ProfileRules.java | 5 +- .../org/sonar/server/search/SearchIndex.java | 28 +++++++++-- .../new_rules_configuration_controller.rb | 50 +++++++++---------- .../new_rules_configuration/_rule.html.erb | 2 +- 5 files changed, 53 insertions(+), 34 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java index dd3df99bd4a..137b5e376d5 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java @@ -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; diff --git a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java index e3bc3df437f..1125d7dff11 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java @@ -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))); diff --git a/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java b/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java index 5c3bffa208f..86466b32566 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java @@ -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) { diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb index b86b10fc7c5..9f3c7e94735 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/new_rules_configuration_controller.rb @@ -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 diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/new_rules_configuration/_rule.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/new_rules_configuration/_rule.html.erb index 49a714ea9c1..31694628def 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/new_rules_configuration/_rule.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/new_rules_configuration/_rule.html.erb @@ -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))}) %> -- 2.39.5