
com.yammer.metrics.jetty.InstrumentedBlockingChannelConnector Maven / Gradle / Ivy
package com.yammer.metrics.jetty;
import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Counter;
import com.yammer.metrics.core.Meter;
import com.yammer.metrics.core.MetricsRegistry;
import com.yammer.metrics.core.Timer;
import org.eclipse.jetty.io.Connection;
import org.eclipse.jetty.server.nio.BlockingChannelConnector;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class InstrumentedBlockingChannelConnector extends BlockingChannelConnector {
private final Timer duration;
private final Meter accepts, connects, disconnects;
private final Counter connections;
public InstrumentedBlockingChannelConnector(int port) {
this(Metrics.defaultRegistry(), port);
}
public InstrumentedBlockingChannelConnector(MetricsRegistry registry,
int port) {
super();
setPort(port);
this.duration = registry.newTimer(BlockingChannelConnector.class,
"connection-duration",
Integer.toString(port),
TimeUnit.MILLISECONDS,
TimeUnit.SECONDS);
this.accepts = registry.newMeter(BlockingChannelConnector.class,
"accepts",
Integer.toString(port),
"connections",
TimeUnit.SECONDS);
this.connects = registry.newMeter(BlockingChannelConnector.class,
"connects",
Integer.toString(port),
"connections",
TimeUnit.SECONDS);
this.disconnects = registry.newMeter(BlockingChannelConnector.class,
"disconnects",
Integer.toString(port),
"connections",
TimeUnit.SECONDS);
this.connections = registry.newCounter(BlockingChannelConnector.class,
"active-connections",
Integer.toString(port));
}
@Override
public void accept(int acceptorID) throws IOException, InterruptedException {
super.accept(acceptorID);
accepts.mark();
}
@Override
protected void connectionOpened(Connection connection) {
connections.inc();
super.connectionOpened(connection);
connects.mark();
}
@Override
protected void connectionClosed(Connection connection) {
super.connectionClosed(connection);
disconnects.mark();
final long duration = System.currentTimeMillis() - connection.getTimeStamp();
this.duration.update(duration, TimeUnit.MILLISECONDS);
connections.dec();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy