code: @Override
    public void reportMetric(final IMetric<?> metric) throws MetricException {
      final String metricName = metric.getName();
      if (!this.historyListMapping.containsKey(metricName)) {
        logger.info("First time capturing metric: " + metricName);
        this.historyListMapping.put(metricName, new LinkedBlockingDeque<>());
      }
      synchronized (this.historyListMapping.get(metricName)) {
        logger.debug("Ingesting metric: " + metricName);
        this.historyListMapping.get(metricName).add(new InMemoryHistoryNode(metric.getValue()));
        cleanUsingTime(metricName, this.historyListMapping.get(metricName).peekLast().getTimestamp());
      }
    }
docs: Ingest metric in snapshot data structure while maintaining interval {@inheritDoc}
  
  @see azkaban.metric.IMetricEmitter#reportMetric(azkaban.metric.IMetric)