code: @SuppressWarnings("FutureReturnValueIgnored")
    public void reportMetric(final IMetric<?> metric) {
      if (metric != null && isAvailable()) {
        try {
          final IMetric<?> metricSnapshot;
          // take snapshot
          synchronized (metric) {
            metricSnapshot = metric.getSnapshot();
          }
          logger.debug(String
              .format("Submitting %s metric for metric emission pool", metricSnapshot.getName()));
          // report to all emitters
          for (final IMetricEmitter metricEmitter : this.metricEmitters) {
            this.executorService.submit(() -> {
              try {
                metricEmitter.reportMetric(metricSnapshot);
              } catch (final Exception ex) {
                logger.error(
                    String.format("Failed to report %s metric due to ", metricSnapshot.getName()),
                    ex);
              }
            });
          }
        } catch (final CloneNotSupportedException ex) {
          logger.error(
              String.format("Failed to take snapshot for %s metric", metric.getClass().getName()),
              ex);
        }
      }
    }
docs: *
  each element of metrics List is responsible to call this method and report metrics
  @param metric