package se.l4.vibe.internal.builder;
import se.l4.vibe.backend.VibeBackend;
import se.l4.vibe.builder.TimerBuilder;
import se.l4.vibe.internal.timer.TimerImpl;
import se.l4.vibe.percentile.BucketPercentileCounter;
import se.l4.vibe.percentile.FakePercentileCounter;
import se.l4.vibe.percentile.PercentileCounter;
import se.l4.vibe.timer.Timer;
/**
* Implementation of {@link TimerBuilder}.
*
* @author Andreas Holstenson
*
*/
public class TimerBuilderImpl
extends AbstractBuilder<TimerBuilder>
implements TimerBuilder
{
private VibeBackend backend;
private PercentileCounter percentileCounter;
public TimerBuilderImpl(VibeBackend backend)
{
this.backend = backend;
percentileCounter = new FakePercentileCounter();
}
@Override
public TimerBuilder withBuckets(int... limits)
{
int[] msLimits = new int[limits.length];
for(int i=0, n=limits.length; i<n; i++)
{
msLimits[i] = limits[i] * 1000000;
}
return withPercentiles(new BucketPercentileCounter(msLimits));
}
@Override
public TimerBuilder withPercentiles(PercentileCounter counter)
{
this.percentileCounter = counter;
return this;
}
@Override
public Timer build()
{
return new TimerImpl(percentileCounter);
}
@Override
public Timer export()
{
verify();
Timer result = build();
backend.export(path, result);
return result;
}
}