public interface PipelineResult { MetricResults metrics(); } public abstract class MetricResults { public abstract MetricQueryResults queryMetrics(@Nullable MetricsFilter filter); } public interface MetricQueryResults { Iterable<MetricResult<Long>> getCounters(); Iterable<MetricResult<DistributionResult>> getDistributions(); Iterable<MetricResult<GaugeResult>> getGauges(); } public interface MetricResult<T> { MetricName getName(); String getStep(); T getCommitted(); T getAttempted(); }