package com.intrbiz.bergamot.nrpe.netty;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import java.util.function.Consumer;
import org.apache.log4j.Logger;
import com.intrbiz.bergamot.nrpe.model.NRPEPacket;
public class NRPEHandler extends ChannelInboundHandlerAdapter
{
private Logger logger = Logger.getLogger(NRPEHandler.class);
private long start;
private long end;
private NRPEPacket request;
private Consumer<NRPEPacket> responseHandler;
private Consumer<Throwable> errorHandler;
public NRPEHandler(NRPEPacket request, Consumer<NRPEPacket> responseHandler, Consumer<Throwable> errorHandler)
{
super();
this.request = request;
this.responseHandler = responseHandler;
this.errorHandler = errorHandler;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
{
this.end = System.currentTimeMillis();
NRPEPacket p = (NRPEPacket) msg;
p.setRuntime(this.end - this.start);
logger.debug("Got NRPE response in: status: " + p.getResponseCode() + ", message: " + p.getMessage() + ", runtime: " + p.getRuntime() + "ms");
// invoke the callback
this.responseHandler.accept(p);
// close
if (ctx.channel().isActive()) ctx.close();
}
@Override
public void channelActive(ChannelHandlerContext ctx)
{
logger.debug("Sending NRPE request");
this.start = System.currentTimeMillis();
ctx.writeAndFlush(this.request);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
{
logger.debug("Error processing NRPE request: " + cause);
// invoke the callback
this.errorHandler.accept(cause);
}
}