From b4a65b61decfc7d4e58a368508df3945b35aa8f7 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Wed, 11 Mar 2015 09:52:52 +0100 Subject: [PATCH] Fix quality flaws --- .../dashboards/ProjectIssuesDashboard.java | 21 +++++++------- .../sonar/server/issue/index/IssueIndex.java | 28 +++++++++++-------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/ProjectIssuesDashboard.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/ProjectIssuesDashboard.java index 32c23a27545..810211751ad 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/ProjectIssuesDashboard.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/ProjectIssuesDashboard.java @@ -25,6 +25,7 @@ import org.sonar.api.web.DashboardLayout; import org.sonar.api.web.DashboardTemplate; import org.sonar.core.issue.db.IssueFilterDao; import org.sonar.core.issue.db.IssueFilterDto; +import org.sonar.plugins.core.widgets.issues.ProjectIssueFilterWidget; /** * Issues dashboard for Sonar @@ -66,25 +67,25 @@ public final class ProjectIssuesDashboard extends DashboardTemplate { private void addFirstColumn(Dashboard dashboard, IssueFilterDto unresolvedIssues) { // Unresolved issues by status - dashboard.addWidget("project_issue_filter", 1) - .setProperty("filter", Long.toString(unresolvedIssues.getId())) - .setProperty("distributionAxis", "statuses"); + dashboard.addWidget(ProjectIssueFilterWidget.ID, 1) + .setProperty(ProjectIssueFilterWidget.FILTER_PROPERTY, Long.toString(unresolvedIssues.getId())) + .setProperty(ProjectIssueFilterWidget.DISTRIBUTION_AXIS_PROPERTY, "statuses"); // Action plans dashboard.addWidget("action_plans", 1); } private void addSecondColumn(Dashboard dashboard, IssueFilterDto unresolvedIssues, IssueFilterDto hiddenDebt, IssueFilterDto myUnresolvedIssues) { // Unresolved issues by assignee - dashboard.addWidget("project_issue_filter", 2) - .setProperty("filter", Long.toString(unresolvedIssues.getId())) - .setProperty("distributionAxis", "assignees"); + dashboard.addWidget(ProjectIssueFilterWidget.ID, 2) + .setProperty(ProjectIssueFilterWidget.FILTER_PROPERTY, Long.toString(unresolvedIssues.getId())) + .setProperty(ProjectIssueFilterWidget.DISTRIBUTION_AXIS_PROPERTY, "assignees"); // My unresolved issues - dashboard.addWidget("project_issue_filter", 2) + dashboard.addWidget(ProjectIssueFilterWidget.ID, 2) .setProperty("filter", Long.toString(myUnresolvedIssues.getId())); // False positive and won't fix issues by resolution - dashboard.addWidget("project_issue_filter", 2) - .setProperty("filter", Long.toString(hiddenDebt.getId())) - .setProperty("distributionAxis", "resolutions"); + dashboard.addWidget(ProjectIssueFilterWidget.ID, 2) + .setProperty(ProjectIssueFilterWidget.FILTER_PROPERTY, Long.toString(hiddenDebt.getId())) + .setProperty(ProjectIssueFilterWidget.DISTRIBUTION_AXIS_PROPERTY, "resolutions"); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index abe6c83a571..1fc2e9ec102 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -73,6 +73,7 @@ import static com.google.common.collect.Lists.newArrayList; */ public class IssueIndex extends BaseIndex { + private static final int SCROLL_TIME_IN_MINUTES = 3; private static final String SUBSTRING_MATCH_REGEXP = ".*%s.*"; @@ -99,6 +100,8 @@ public class IssueIndex extends BaseIndex { // TODO move to Facets ? private static final String FACET_SUFFIX_MISSING = "_missing"; + private static final String IS_ASSIGNED_FILTER = "__isAssigned"; + private static final int DEFAULT_FACET_SIZE = 15; private static final Duration TWENTY_DAYS = Duration.standardDays(20L); private static final Duration TWENTY_WEEKS = Duration.standardDays(20L * 7L); @@ -210,11 +213,10 @@ public class IssueIndex extends BaseIndex { filters.put("__authorization", createAuthorizationFilter(query.checkAuthorization(), query.userLogin(), query.userGroups())); // Issue is assigned Filter - String isAssigned = "__isAssigned"; if (BooleanUtils.isTrue(query.assigned())) { - filters.put(isAssigned, FilterBuilders.existsFilter(IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE)); + filters.put(IS_ASSIGNED_FILTER, FilterBuilders.existsFilter(IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE)); } else if (BooleanUtils.isFalse(query.assigned())) { - filters.put(isAssigned, FilterBuilders.missingFilter(IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE)); + filters.put(IS_ASSIGNED_FILTER, FilterBuilders.missingFilter(IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE)); } // Issue is planned Filter @@ -471,7 +473,7 @@ public class IssueIndex extends BaseIndex { // Same as in super.stickyFacetBuilder Map assigneeFilters = Maps.newHashMap(filters); - assigneeFilters.remove("__isAssigned"); + assigneeFilters.remove(IS_ASSIGNED_FILTER); assigneeFilters.remove(fieldName); StickyFacetBuilder assigneeFacetBuilder = new StickyFacetBuilder(queryBuilder, assigneeFilters); BoolFilterBuilder facetFilter = assigneeFacetBuilder.getStickyFacetFilter(fieldName); @@ -515,7 +517,7 @@ public class IssueIndex extends BaseIndex { // Same as in super.stickyFacetBuilder StickyFacetBuilder assignedToMeFacetBuilder = new StickyFacetBuilder(queryBuilder, filters); - BoolFilterBuilder facetFilter = assignedToMeFacetBuilder.getStickyFacetFilter("__isAssigned", fieldName); + BoolFilterBuilder facetFilter = assignedToMeFacetBuilder.getStickyFacetFilter(IS_ASSIGNED_FILTER, fieldName); FilterAggregationBuilder facetTopAggregation = AggregationBuilders .filter(facetName + "__filter") @@ -593,8 +595,12 @@ public class IssueIndex extends BaseIndex { requestBuilder.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), createBoolFilter(query))); + GlobalBuilder topAggreg = AggregationBuilders.global("tags"); - TermsBuilder issueTags = AggregationBuilders.terms("tags__issues") + String tagsOnIssuesSubAggregation = "tags__issues"; + String tagsOnRulesSubAggregation = "tags__rules"; + + TermsBuilder issueTags = AggregationBuilders.terms(tagsOnIssuesSubAggregation) .field(IssueIndexDefinition.FIELD_ISSUE_TAGS) .size(maxNumberOfTags) .order(Terms.Order.term(true)) @@ -602,7 +608,7 @@ public class IssueIndex extends BaseIndex { if (textQuery != null) { issueTags.include(String.format(SUBSTRING_MATCH_REGEXP, textQuery)); } - TermsBuilder ruleTags = AggregationBuilders.terms("tags__rules") + TermsBuilder ruleTags = AggregationBuilders.terms(tagsOnRulesSubAggregation) .field(RuleNormalizer.RuleField.ALL_TAGS.field()) .size(maxNumberOfTags) .order(Terms.Order.term(true)) @@ -614,8 +620,8 @@ public class IssueIndex extends BaseIndex { SearchResponse searchResponse = requestBuilder.addAggregation(topAggreg.subAggregation(issueTags).subAggregation(ruleTags)).get(); Global allTags = searchResponse.getAggregations().get("tags"); SortedSet result = Sets.newTreeSet(); - Terms issuesResult = allTags.getAggregations().get("tags__issues"); - Terms rulesResult = allTags.getAggregations().get("tags__rules"); + Terms issuesResult = allTags.getAggregations().get(tagsOnIssuesSubAggregation); + Terms rulesResult = allTags.getAggregations().get(tagsOnRulesSubAggregation); result.addAll(EsUtils.termsKeys(issuesResult)); result.addAll(EsUtils.termsKeys(rulesResult)); List resultAsList = Lists.newArrayList(result); @@ -635,13 +641,13 @@ public class IssueIndex extends BaseIndex { private Terms listTermsMatching(String fieldName, IssueQuery query, @Nullable String textQuery, Terms.Order termsOrder, int maxNumberOfTags) { SearchRequestBuilder requestBuilder = getClient() .prepareSearch(IssueIndexDefinition.INDEX) + // Avoids returning search hits + .setSearchType(SearchType.COUNT) .setTypes(IssueIndexDefinition.TYPE_ISSUE); requestBuilder.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), createBoolFilter(query))); - // TODO do not return hits - TermsBuilder aggreg = AggregationBuilders.terms("_ref") .field(fieldName) .size(maxNumberOfTags) -- 2.39.5