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

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

package com.ringcentral.platform.metrics.stub;

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

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

import static java.util.Collections.emptyMap;

public class StubTimer extends AbstractTimer implements Timer {

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

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

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

    public StubTimer(
        MetricName name,
        TimerConfig config,
        TimeMsProvider timeMsProvider,
        ScheduledExecutorService executor,
        MetricRegistry registry) {

        super(
            name,
            config,
            stubMeasurableValueProvidersProviderInstance,
            stubTimerImplMaker,
            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);
    }

    @Override
    public Stopwatch stopwatch(LabelValues labelValues) {
        return new StubStopWatch();
    }
}