code: public Future<String> sendRequest(final String path, final ReportingHandler reportingHandler) {
          return threadPool.submit(new Callable<String>() {
              @Override
              public String call() {
                  String response = getResponse(path);
  
                  if (reportingHandler != null) {
                      reportingHandler.handleResponse(response);
                  }
  
                  return response;
              }
          });
      }
docs: Creates a future that will send a request to the reporting host and call
  the handler with the response
  
  @param path             the path at the reporting host which the request will be made
  @param reportingHandler the handler to receive the response once executed
  and recieved
  @return a {@link java.util.concurrent.Future} for handing the request