package se.l4.vibe.internal.time; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import se.l4.vibe.internal.SampleCollector; import se.l4.vibe.probes.SampledProbe; import se.l4.vibe.probes.Sampler; public class TimeSampler { private final Map<Long, SampleCollector> samplers; private final ScheduledExecutorService executor; private final long defaultTime; public TimeSampler(long defaultTime) { this.defaultTime = defaultTime; samplers = new HashMap<>(); executor = Executors.newScheduledThreadPool(1, new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, "vibe"); t.setDaemon(true); return t; } }); } public long getDefaultTime() { return defaultTime; } public <T> Sampler<T> sampleTimeSeries(long sampleIntervalInMs, SampledProbe<T> probe) { SampleCollector sampler = samplers.get(sampleIntervalInMs); if(sampler == null) { sampler = new SampleCollector(executor, sampleIntervalInMs, TimeUnit.MILLISECONDS); samplers.put(sampleIntervalInMs, sampler); sampler.start(); } // Create the series return sampler.add(probe); } }