in dashboard/server/src/main/java/build/bazel/dashboard/github/issuequery/task/GithubIssueQueryCountTaskRestController.java [46:102]
public Maybe<CountResult> fetchCountResult(
@PathVariable("owner") String owner,
@PathVariable("repo") String repo,
@PathVariable("queryId") String queryId,
@RequestParam("period") Period period,
@RequestParam(name = "amount", defaultValue = "30") Integer amount) {
Instant now = Instant.now();
Instant to = period.prev(now, 1);
Instant from = period.prev(to, amount);
return githubIssueQueryRepo
.findOne(owner, repo, queryId)
.flatMapSingle(
query ->
githubIssueQueryCountTaskRepo
.listResult(query.getOwner(), query.getRepo(), query.getId(), period, from, to)
.collect(
Collectors.toMap(GithubIssueQueryCountTaskResult::getTimestamp, it -> it))
.flatMap(
resultMap -> {
Instant end = period.truncate(to);
List<CountResultItem> items = new ArrayList<>();
for (Instant timestamp = period.truncate(from);
!timestamp.isAfter(end);
timestamp = period.next(timestamp)) {
Integer count = null;
GithubIssueQueryCountTaskResult result = resultMap.get(timestamp);
if (result != null) {
count = result.getCount();
}
CountResultItem item =
CountResultItem.builder().timestamp(timestamp).count(count).build();
items.add(item);
}
return githubIssueQueryExecutor
.fetchQueryResultCount(owner, repo, query.getQuery())
.map(
count -> {
items.add(
CountResultItem.builder()
.timestamp(now)
.count(count)
.build());
return CountResult.builder()
.id(query.getId())
.name(query.getName())
.url(
GithubUtils.buildIssueQueryUrl(
query.getOwner(),
query.getRepo(),
query.getQuery()))
.items(items)
.build();
});
}));
}