public Maybe fetchCountResult()

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();
                                  });
                        }));
  }