Search in sources :

Example 6 with MersenneTwister64

use of cern.jet.random.engine.MersenneTwister64 in project micrometer by micrometer-metrics.

the class LongTaskTimerSample method main.

public static void main(String[] args) {
    MeterRegistry registry = SampleConfig.myMonitoringSystem();
    LongTaskTimer timer = registry.more().longTaskTimer("longTaskTimer");
    RandomEngine r = new MersenneTwister64(0);
    Normal incomingRequests = new Normal(0, 1, r);
    Normal duration = new Normal(30, 50, r);
    AtomicInteger latencyForThisSecond = new AtomicInteger(duration.nextInt());
    Flux.interval(Duration.ofSeconds(1)).doOnEach(d -> latencyForThisSecond.set(duration.nextInt())).subscribe();
    final Map<LongTaskTimer.Sample, CountDownLatch> tasks = new ConcurrentHashMap<>();
    // the potential for an "incoming request" every 10 ms
    Flux.interval(Duration.ofSeconds(1)).doOnEach(d -> {
        if (incomingRequests.nextDouble() + 0.4 > 0 && tasks.isEmpty()) {
            int taskDur;
            while ((taskDur = duration.nextInt()) < 0) ;
            synchronized (tasks) {
                tasks.put(timer.start(), new CountDownLatch(taskDur));
            }
        }
        synchronized (tasks) {
            for (Map.Entry<LongTaskTimer.Sample, CountDownLatch> e : tasks.entrySet()) {
                e.getValue().countDown();
                if (e.getValue().getCount() == 0) {
                    e.getKey().stop();
                    tasks.remove(e.getKey());
                }
            }
        }
    }).blockLast();
}
Also used : LongTaskTimer(io.micrometer.core.instrument.LongTaskTimer) Flux(reactor.core.publisher.Flux) CountDownLatch(java.util.concurrent.CountDownLatch) RandomEngine(cern.jet.random.engine.RandomEngine) SampleConfig(io.micrometer.core.samples.utils.SampleConfig) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Duration(java.time.Duration) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) RandomEngine(cern.jet.random.engine.RandomEngine) LongTaskTimer(io.micrometer.core.instrument.LongTaskTimer) Normal(cern.jet.random.Normal) CountDownLatch(java.util.concurrent.CountDownLatch) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MeterRegistry(io.micrometer.core.instrument.MeterRegistry)

Example 7 with MersenneTwister64

use of cern.jet.random.engine.MersenneTwister64 in project micrometer by micrometer-metrics.

the class SimulatedEndpointInstrumentation method main.

public static void main(String[] args) {
    MeterRegistry registry = SampleConfig.myMonitoringSystem();
    Timer e1Success = Timer.builder("http.server.requests").tags("uri", "/api/bar").tags("response", "200").publishPercentiles(0.5, 0.95).register(registry);
    Timer e2Success = Timer.builder("http.server.requests").tags("uri", "/api/foo").tags("response", "200").publishPercentiles(0.5, 0.95).register(registry);
    Timer e1Fail = Timer.builder("http.server.requests").tags("uri", "/api/bar").tags("response", "500").publishPercentiles(0.5, 0.95).register(registry);
    Timer e2Fail = Timer.builder("http.server.requests").tags("uri", "/api/foo").tags("response", "500").publishPercentiles(0.5, 0.95).register(registry);
    RandomEngine r = new MersenneTwister64(0);
    Normal incomingRequests = new Normal(0, 1, r);
    Normal successOrFail = new Normal(0, 1, r);
    Normal duration = new Normal(250, 50, r);
    Normal duration2 = new Normal(250, 50, r);
    AtomicInteger latencyForThisSecond = new AtomicInteger(duration.nextInt());
    Flux.interval(Duration.ofSeconds(1)).doOnEach(d -> latencyForThisSecond.set(duration.nextInt())).subscribe();
    AtomicInteger latencyForThisSecond2 = new AtomicInteger(duration2.nextInt());
    Flux.interval(Duration.ofSeconds(1)).doOnEach(d -> latencyForThisSecond2.set(duration2.nextInt())).subscribe();
    // the potential for an "incoming request" every 10 ms
    Flux.interval(Duration.ofMillis(10)).doOnEach(d -> {
        // are we going to receive a request for /api/foo?
        if (incomingRequests.nextDouble() + 0.4 > 0) {
            if (successOrFail.nextDouble() + 0.8 > 0) {
                // pretend the request took some amount of time, such that the time is
                // distributed normally with a mean of 250ms
                e1Success.record(latencyForThisSecond.get(), TimeUnit.MILLISECONDS);
            } else {
                e1Fail.record(latencyForThisSecond.get(), TimeUnit.MILLISECONDS);
            }
        }
    }).subscribe();
    // the potential for an "incoming request" every 1 ms
    Flux.interval(Duration.ofMillis(1)).doOnEach(d -> {
        // are we going to receive a request for /api/bar?
        if (incomingRequests.nextDouble() + 0.4 > 0) {
            if (successOrFail.nextDouble() + 0.8 > 0) {
                // pretend the request took some amount of time, such that the time is
                // distributed normally with a mean of 250ms
                e2Success.record(latencyForThisSecond2.get(), TimeUnit.MILLISECONDS);
            } else {
                e2Fail.record(latencyForThisSecond2.get(), TimeUnit.MILLISECONDS);
            }
        }
    }).blockLast();
}
Also used : TimeUnit(java.util.concurrent.TimeUnit) Flux(reactor.core.publisher.Flux) Timer(io.micrometer.core.instrument.Timer) RandomEngine(cern.jet.random.engine.RandomEngine) SampleConfig(io.micrometer.core.samples.utils.SampleConfig) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Duration(java.time.Duration) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) Timer(io.micrometer.core.instrument.Timer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) RandomEngine(cern.jet.random.engine.RandomEngine) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry)

Aggregations

Normal (cern.jet.random.Normal)7 MersenneTwister64 (cern.jet.random.engine.MersenneTwister64)7 RandomEngine (cern.jet.random.engine.RandomEngine)7 MeterRegistry (io.micrometer.core.instrument.MeterRegistry)6 SampleConfig (io.micrometer.core.samples.utils.SampleConfig)6 Duration (java.time.Duration)6 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)6 Flux (reactor.core.publisher.Flux)6 Timer (io.micrometer.core.instrument.Timer)4 TimeUnit (java.util.concurrent.TimeUnit)4 FunctionTimer (io.micrometer.core.instrument.FunctionTimer)2 Counter (io.micrometer.core.instrument.Counter)1 LongTaskTimer (io.micrometer.core.instrument.LongTaskTimer)1 Tags (io.micrometer.core.instrument.Tags)1 TimeUtils (io.micrometer.core.instrument.util.TimeUtils)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 Stream (java.util.stream.Stream)1