
se.l4.vibe.internal.ScopedVibe Maven / Gradle / Ivy
package se.l4.vibe.internal;
import se.l4.vibe.Vibe;
import se.l4.vibe.backend.VibeBackend;
import se.l4.vibe.builder.EventsBuilder;
import se.l4.vibe.builder.ProbeBuilder;
import se.l4.vibe.builder.SamplerBuilder;
import se.l4.vibe.builder.TimerBuilder;
import se.l4.vibe.event.Events;
import se.l4.vibe.internal.builder.EventsBuilderImpl;
import se.l4.vibe.internal.builder.ProbeBuilderImpl;
import se.l4.vibe.internal.builder.SamplerBuilderImpl;
import se.l4.vibe.internal.builder.TimerBuilderImpl;
import se.l4.vibe.probes.Probe;
import se.l4.vibe.probes.SampledProbe;
import se.l4.vibe.probes.Sampler;
import se.l4.vibe.timer.Timer;
public class ScopedVibe
implements Vibe
{
private final VibeImpl vibe;
private final VibeBackend parent;
private final String scope;
private final ScopedBackend backend;
public ScopedVibe(VibeImpl vibe, VibeBackend parent, String scope)
{
this.vibe = vibe;
this.parent = parent;
this.scope = scope;
this.backend = new ScopedBackend();
}
private String scopePath(String path)
{
return scope + '/' + path;
}
@Override
public ProbeBuilder probe(Probe probe)
{
return new ProbeBuilderImpl<>(backend, probe);
}
@Override
public SamplerBuilder sample(SampledProbe probe)
{
return new SamplerBuilderImpl<>(backend, vibe.sampler(), probe);
}
@Override
public EventsBuilder events(Class base)
{
return new EventsBuilderImpl<>(backend);
}
@Override
public TimerBuilder timer()
{
return new TimerBuilderImpl(backend);
}
@Override
public Probe getProbe(String path)
{
return vibe.getProbe(scopePath(path));
}
@Override
public Sampler getTimeSeries(String path)
{
return vibe.getTimeSeries(scopePath(path));
}
@Override
public Events getEvents(String path)
{
return vibe.getEvents(scopePath(path));
}
@Override
public Timer getTimer(String path)
{
return vibe.getTimer(scopePath(path));
}
@Override
public Vibe scope(String path)
{
return new ScopedVibe(vibe, parent, scopePath(path));
}
@Override
public void addBackend(VibeBackend backend)
{
throw new UnsupportedOperationException();
}
private class ScopedBackend
implements VibeBackend
{
public ScopedBackend()
{
}
@Override
public void export(String path, Events> events)
{
parent.export(scopePath(path), events);
}
@Override
public void export(String path, Probe> probe)
{
parent.export(scopePath(path), probe);
}
@Override
public void export(String path, Sampler> series)
{
parent.export(scopePath(path), series);
}
@Override
public void export(String path, Timer timer)
{
parent.export(scopePath(path), timer);
}
@Override
public void close()
{
// Closing scoped instances does nothing
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy