package org.atomnuke.syslog.netty.channel;
import java.util.UUID;
import org.atomnuke.atom.model.builder.CategoryBuilder;
import org.atomnuke.atom.model.builder.ContentBuilder;
import org.atomnuke.atom.model.builder.EntryBuilder;
import org.atomnuke.atom.model.builder.IdBuilder;
import org.atomnuke.atom.model.builder.PublishedBuilder;
import org.atomnuke.syslog.SyslogMessage;
import org.atomnuke.util.source.QueueSource;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author zinic
*/
public class SyslogMessageHandler extends SimpleChannelHandler {
private static final Logger LOG = LoggerFactory.getLogger(SyslogMessageHandler.class);
private final QueueSource queueSource;
public SyslogMessageHandler(QueueSource queueSource) {
this.queueSource = queueSource;
}
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
if (e.getMessage() instanceof SyslogMessage) {
final SyslogMessage syslogMessage = (SyslogMessage) e.getMessage();
final EntryBuilder atomEntryBuilder = new EntryBuilder();
atomEntryBuilder.setId(new IdBuilder().setValue(UUID.randomUUID().toString()).build());
atomEntryBuilder.setPublished(new PublishedBuilder().setValue(syslogMessage.timestamp()).build());
atomEntryBuilder.addCategory(new CategoryBuilder().setScheme("app").setTerm("syslog").build());
atomEntryBuilder.setContent(new ContentBuilder().setType("application/text").setValue(syslogMessage.content()).build());
queueSource.put(atomEntryBuilder.build());
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
LOG.error(e.getCause().getMessage(), e.getCause());
}
}