public <T> AcceptableValue<T> buildMetrics(String metricsName,
                                               Class<T> dataType) {
        MeterDefinition meterDefinition = meterPrototypes.get(metricsName);
        if (meterDefinition == null) {
            throw new IllegalArgumentException("Uncreated metrics " + metricsName);
        }
        if (!meterDefinition.getDataType().equals(dataType)) {
            throw new IllegalArgumentException(
                "Unmatched metrics data type, request for " + dataType.getName()
                    + ", but defined as " + meterDefinition.getDataType());
        }

        return meterDefinition.getMeterPrototype().createNew();
    }
Create an {@link AcceptableValue} instance for streaming calculation. AcceptableValue instance is stateful,
shouldn't do {@link AcceptableValue#accept(MeterEntity, Object)} once it is pushed into {@link
#doStreamingCalculation(AcceptableValue)}.

@param metricsName A defined metrics name. Use {@link #create(String, String, ScopeType, Class)} to define a new
                   one.
@param dataType    class type of the input of {@link AcceptableValue}
@return usable an {@link AcceptableValue} instance.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java