code: public void report(ReportRequest req) {
      startIfStopped();
      statistics.totalReports.incrementAndGet();
      statistics.reportedOperations.addAndGet(req.getOperationsCount());
      Stopwatch w = Stopwatch.createStarted(ticker);
      boolean reported = reportAggregator.report(req);
      statistics.totalReportCacheUpdateTimeMillis.addAndGet(w.elapsed(TimeUnit.MILLISECONDS));
      if (!reported) {
        try {
          statistics.directReports.incrementAndGet();
          w.reset().start();
          transport.services().report(serviceName, req).execute();
          statistics.totalTransportedReportTimeMillis.addAndGet(w.elapsed(TimeUnit.MILLISECONDS));
        } catch (IOException e) {
          log.atSevere().withCause(e).log("direct send of a report request %s failed", req);
        }
      }
  
      if (isRunningSchedulerDirectly()) {
        try {
          scheduler.run(false /* don't block */);
        } catch (InterruptedException e) {
          log.atSevere().withCause(e).log("direct run of scheduler failed");
        }
      }
      logStatistics();
    }
docs: Process a report request.
  
  The {@code req} is first passed to the {@code ReportAggregator}. It will either be aggregated
  with prior requests or sent immediately
  
  @param req a {@link ReportRequest}