Skip to content

Commit

Permalink
SONAR-6137 Use min value from issues when createdAfter is not specified
Browse files Browse the repository at this point in the history
  • Loading branch information
jblievremont committed Feb 4, 2015
1 parent 22e886e commit 39ee3b2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
Expand Up @@ -39,6 +39,7 @@
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Order;
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.search.aggregations.metrics.min.Min;
import org.joda.time.Duration;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.Severity;
Expand Down Expand Up @@ -177,8 +178,17 @@ public Result<Issue> search(IssueQuery query, QueryContext options) {
setPagination(options, esSearch);

QueryBuilder esQuery = QueryBuilders.matchAllQuery();
BoolFilterBuilder esFilter = FilterBuilders.boolFilter();
Map<String, FilterBuilder> filters = getFilters(query, options);
setQueryFilter(esSearch, esQuery, filters);

setFacets(query, options, filters, esQuery, esSearch);

SearchResponse response = esSearch.get();
return new Result<>(this, response);
}

protected void setQueryFilter(SearchRequestBuilder esSearch, QueryBuilder esQuery, Map<String, FilterBuilder> filters) {
BoolFilterBuilder esFilter = FilterBuilders.boolFilter();
for (FilterBuilder filter : filters.values()) {
if (filter != null) {
esFilter.must(filter);
Expand All @@ -190,11 +200,6 @@ public Result<Issue> search(IssueQuery query, QueryContext options) {
} else {
esSearch.setQuery(esQuery);
}

setFacets(query, options, filters, esQuery, esSearch);

SearchResponse response = esSearch.get();
return new Result<>(this, response);
}

private BoolFilterBuilder getFilter(IssueQuery query, QueryContext options) {
Expand Down Expand Up @@ -551,7 +556,7 @@ private AggregationBuilder getCreatedAtFacet(IssueQuery query, Map<String, Filte
String timeZoneString = tzFormat.format(now);

Interval bucketSize = Interval.YEAR;
long startTime = query.createdAfter() == null ? 0L : query.createdAfter().getTime();
long startTime = query.createdAfter() == null ? getMinCreatedAt(filters, esQuery) : query.createdAfter().getTime();
long endTime = query.createdBefore() == null ? now.getTime() : query.createdBefore().getTime();
Duration timeSpan = new Duration(startTime, endTime);
if (timeSpan.isShorterThan(TWENTY_DAYS)) {
Expand All @@ -572,6 +577,18 @@ private AggregationBuilder getCreatedAtFacet(IssueQuery query, Map<String, Filte
.postZone(timeZoneString);
}

private long getMinCreatedAt(Map<String, FilterBuilder> filters, QueryBuilder esQuery) {
String facetNameAndField = IssueIndexDefinition.FIELD_ISSUE_FUNC_CREATED_AT;
SearchRequestBuilder minCount = getClient()
.prepareSearch(IssueIndexDefinition.INDEX)
.setTypes(IssueIndexDefinition.TYPE_ISSUE)
.setSearchType(SearchType.COUNT);
setQueryFilter(minCount, esQuery, filters);
minCount.addAggregation(AggregationBuilders.min(facetNameAndField).field(facetNameAndField));
Min minValue = minCount.get().getAggregations().get(facetNameAndField);
return Double.valueOf(minValue.getValue()).longValue();
}

private void setSorting(IssueQuery query, SearchRequestBuilder esRequest) {
String sortField = query.sort();
if (sortField != null) {
Expand Down
Expand Up @@ -708,6 +708,17 @@ public void facet_on_created_at() throws Exception {
new FacetValue("2013-01-01T04:00:00+0000", 0),
new FacetValue("2014-01-01T04:00:00+0000", 5),
new FacetValue("2015-01-01T04:00:00+0000", 1));

// createdAfter not set: taking min value
createdAt = index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2016-01-01")).build(),
queryContext).getFacets().get("createdAt");
assertThat(createdAt).hasSize(5)
.containsOnly(
new FacetValue("2011-01-01T04:00:00+0000", 1),
new FacetValue("2012-01-01T04:00:00+0000", 0),
new FacetValue("2013-01-01T04:00:00+0000", 0),
new FacetValue("2014-01-01T04:00:00+0000", 5),
new FacetValue("2015-01-01T04:00:00+0000", 1));
}

@Test
Expand Down

0 comments on commit 39ee3b2

Please sign in to comment.