All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ringcentral.platform.metrics.stub.StubRate Maven / Gradle / Ivy

package com.ringcentral.platform.metrics.stub;

import com.ringcentral.platform.metrics.MetricRegistry;
import com.ringcentral.platform.metrics.labels.LabelValue;
import com.ringcentral.platform.metrics.measurables.Measurable;
import com.ringcentral.platform.metrics.names.MetricName;
import com.ringcentral.platform.metrics.rate.*;
import com.ringcentral.platform.metrics.rate.configs.*;
import com.ringcentral.platform.metrics.utils.TimeMsProvider;

import java.util.*;
import java.util.concurrent.ScheduledExecutorService;

import static java.util.Collections.emptyMap;

public class StubRate extends AbstractRate implements Rate {

    static final MeasurableValueProvidersProvider stubMeasurableValueProvidersProviderInstance =
        (ic, sc, c, m) -> emptyMap();

    static final MeterImplUpdater stubMeterImplUpdaterInstance = (meterImpl, value) -> {};
    static final Object stubRateImplInstance = new Object();

    static final MeterImplMaker stubRateImplMaker =
        (ic, sc, c, m, e, r) -> stubRateImplInstance;

    public StubRate(
        MetricName name,
        RateConfig config,
        TimeMsProvider timeMsProvider,
        ScheduledExecutorService executor,
        MetricRegistry registry) {

        super(
            name,
            config,
            stubMeasurableValueProvidersProviderInstance,
            stubRateImplMaker,
            stubMeterImplUpdaterInstance,
            new InstanceMaker<>() {

                @Override
                public AbstractMeterInstance makeInstance(
                    MetricName name,
                    List labelValues,
                    boolean totalInstance,
                    boolean labeledMetricTotalInstance,
                    boolean levelInstance,
                    Map> measurableValueProviders,
                    Object meterImpl) {

                    return new StubMeterInstance(
                        name,
                        labelValues,
                        totalInstance,
                        labeledMetricTotalInstance,
                        levelInstance,
                        measurableValueProviders,
                        meterImpl);
                }

                @Override
                public AbstractExpirableMeterInstance makeExpirableInstance(
                    MetricName name,
                    List labelValues,
                    boolean totalInstance,
                    boolean labeledMetricTotalInstance,
                    boolean levelInstance,
                    Map> measurableValueProviders,
                    Object meterImpl,
                    long creationTimeMs) {

                    return new StubExpirableMeterInstance(
                        name,
                        labelValues,
                        totalInstance,
                        labeledMetricTotalInstance,
                        levelInstance,
                        measurableValueProviders,
                        meterImpl,
                        creationTimeMs);
                }
            },
            timeMsProvider,
            executor,
            registry);
    }
}