package org.opennms.newts.graphite; import static com.codahale.metrics.MetricRegistry.name; import javax.inject.Inject; import org.opennms.newts.api.SampleRepository; import com.codahale.metrics.Counter; import com.codahale.metrics.MetricRegistry; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.Delimiters; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; public class GraphiteInitializer extends ChannelInitializer<SocketChannel> { private static final StringDecoder DECODER = new StringDecoder(); private static final StringEncoder ENCODER = new StringEncoder(); private final SampleRepository m_repository; private final Counter m_protocolErrors; private final Counter m_storageErrors; @Inject public GraphiteInitializer(SampleRepository repostory, MetricRegistry registry) { m_repository = repostory; m_protocolErrors = registry.counter(name("graphite-listener", "protocol-errors")); m_storageErrors = registry.counter(name("graphite-listener", "storage-errors")); } @Override public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); // Add the text line codec combination first, pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); // the encoder and decoder are static as these are sharable pipeline.addLast(DECODER); pipeline.addLast(ENCODER); // and then business logic. pipeline.addLast(new GraphiteHandler(m_repository, this)); } void protocolErrorsInc() { m_protocolErrors.inc(); } void storageErrorsInc() { m_storageErrors.inc(); } }