code: @Override
    public Double getProgress() {
      if ((shardLogQuery.getStartTimeUsec() == null) || (shardLogQuery.getEndTimeUsec() == null)) {
        return null;
      } else if (lastLog == null) {
        return 0.0;
      } else {
        long processedTimeUsec = shardLogQuery.getEndTimeUsec() - lastLog.getEndTimeUsec();
        long totalTimeUsec = shardLogQuery.getEndTimeUsec() - shardLogQuery.getStartTimeUsec();
        return ((double) processedTimeUsec / totalTimeUsec);
      }
    }
docs: Determine the approximate progress for this shard assuming the RequestLogs are uniformly
  distributed across the entire time range.