Commit fad7c9a0 by Tuomas Riihimäki

Irc bot logging improvements

1 parent 136ad0f2
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.Set;
import javax.ejb.Local; import javax.ejb.Local;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
...@@ -7,6 +9,8 @@ import fi.iudex.utils.irc.IrcBot; ...@@ -7,6 +9,8 @@ import fi.iudex.utils.irc.IrcBot;
@Local @Local
public interface BotBeanLocal { public interface BotBeanLocal {
void add(IrcBot bot); public void addBot(IrcBot bot);
Set<String> getIgnoreTypes();
} }
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton; import javax.ejb.Singleton;
import javax.jms.JMSException;
import javax.jms.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.facade.EventFacade;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.moyamessage.MoyaEventMessage;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
/** /**
...@@ -10,9 +28,10 @@ import fi.iudex.utils.irc.IrcBot; ...@@ -10,9 +28,10 @@ import fi.iudex.utils.irc.IrcBot;
*/ */
@Singleton @Singleton
@LocalBean @LocalBean
@Lock(LockType.READ)
public class BotBean implements BotBeanLocal { public class BotBean implements BotBeanLocal {
private IrcBot bot; private static final Logger logger = LoggerFactory.getLogger(BotBean.class);
/** /**
* Default constructor. * Default constructor.
...@@ -20,10 +39,59 @@ public class BotBean implements BotBeanLocal { ...@@ -20,10 +39,59 @@ public class BotBean implements BotBeanLocal {
public BotBean() { public BotBean() {
} }
@Override private IrcBot bot;
public void add(IrcBot bot) {
this.setBot(bot); @EJB
private EventFacade eventfacade;
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventuserfacade;
private final Set<String> ignoreTypes = ConcurrentHashMap.newKeySet();
public void message(Message message) {
try {
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class);
// do not flood irc-channel, message only really needed ones
if (msg.getEventtype() != null && getIgnoreTypes().contains(msg.getEventtype()))
return;
String event = "unknown event";
if (msg.getEventId() != null) {
LanEvent e = eventfacade.find(msg.getEventId());
if (e != null)
event = e.getName();
}
StringBuilder sb = new StringBuilder();
sb.append(event).append(" ");
sb.append(msg.getEventtype()).append(" ");
if (msg.getCurrentUserId() != null) {
User user = userfacade.find(msg.getCurrentUserId());
if (user != null) {
sb.append("user: ").append(user.getLogin()).append(" ");
}
}
if (msg.getEventUserId() != null) {
EventUser eu = eventuserfacade.find(msg.getEventUserId());
if (eu != null && !eu.getUser().getId().equals(msg.getCurrentUserId())) {
sb.append("for user: ").append(eu.getUser().getLogin()).append(": ");
}
}
sb.append(msg.getDescription());
bot.say(sb.toString());
} catch (JMSException e) {
logger.warn("Error sending message",e);
bot.say("Error parsing message " + e.getMessage());
}
}
@Override
public Set<String> getIgnoreTypes() {
return ignoreTypes;
} }
public IrcBot getBot() { public IrcBot getBot() {
...@@ -34,4 +102,10 @@ public class BotBean implements BotBeanLocal { ...@@ -34,4 +102,10 @@ public class BotBean implements BotBeanLocal {
this.bot = bot; this.bot = bot;
} }
@Override
public void addBot(IrcBot bot) {
// TODO Auto-generated method stub
}
} }
...@@ -31,59 +31,18 @@ public class IrcBotMoyaEventTopicListener implements MessageListener { ...@@ -31,59 +31,18 @@ public class IrcBotMoyaEventTopicListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(IrcBotMoyaEventTopicListener.class); private static final Logger logger = LoggerFactory.getLogger(IrcBotMoyaEventTopicListener.class);
private static List<MoyaEventType> ignoreTypes = Arrays.asList(MoyaEventType.LOGIN_SUCCESSFULL);
@EJB @EJB
private BotBean botbean; private BotBean botbean;
@EJB
private EventFacade eventfacade;
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventuserfacade;
/** /**
* @see MessageListener#onMessage(Message) * @see MessageListener#onMessage(Message)
*/ */
public void onMessage(Message message) { public void onMessage(Message message) {
try { // botbean.getBot().say(toString(event, " ", msg.getEventtype(), " User
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class); // ", msg.getDescription()));
if (botbean!= null) {
// do not flood irc-channel, message only really needed ones botbean.message(message);
if(msg.getEventtype() != null && ignoreTypes.contains(msg.getEventtype()))
return;
String event = "unknown event";
if (msg.getEventId() != null) {
LanEvent e = eventfacade.find(msg.getEventId());
if (e != null)
event = e.getName();
}
StringBuilder sb = new StringBuilder();
sb.append(event).append(" ");
sb.append(msg.getEventtype()).append(" ");
if (msg.getCurrentUserId() != null) {
User user = userfacade.find(msg.getCurrentUserId());
if (user != null) {
sb.append("user: ").append(user.getLogin()).append(" ");
}
}
if (msg.getEventUserId() != null) {
EventUser eu = eventuserfacade.find(msg.getEventUserId());
if (eu != null && !eu.getUser().getId().equals(msg.getCurrentUserId())) {
sb.append("for user: ").append(eu.getUser().getLogin()).append(": ");
}
}
sb.append(msg.getDescription());
//botbean.getBot().say(toString(event, " ", msg.getEventtype(), " User ", msg.getDescription()));
botbean.getBot().say(sb.toString());
logger.warn("Received moya event message for irc bot {}", message);
} catch (JMSException e) {
logger.warn("Exception while getting jms message for IRCbot", e);
botbean.getBot().say("Caught exception while logging message" + e.getCause());
} }
} }
} }
...@@ -40,7 +40,6 @@ import java.io.IOException; ...@@ -40,7 +40,6 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Startup;
import javax.servlet.Servlet; import javax.servlet.Servlet;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletException; import javax.servlet.ServletException;
...@@ -49,8 +48,6 @@ import javax.servlet.http.HttpServlet; ...@@ -49,8 +48,6 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import net.sf.jerklib.Profile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -61,6 +58,7 @@ import fi.codecrew.moya.beans.PlaceBeanLocal; ...@@ -61,6 +58,7 @@ import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.utilities.SystemProperty; import fi.codecrew.moya.utilities.SystemProperty;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
import fi.iudex.utils.irc.IrcBotListener; import fi.iudex.utils.irc.IrcBotListener;
import net.sf.jerklib.Profile;
/** /**
* Servlet implementation class SshServlet * Servlet implementation class SshServlet
...@@ -105,13 +103,66 @@ public class IrcServlet extends HttpServlet { ...@@ -105,13 +103,66 @@ public class IrcServlet extends HttpServlet {
logger.info("Got irc server system property {}", ircserver); logger.info("Got irc server system property {}", ircserver);
if (ircserver != null) { if (ircserver != null) {
logger.info("Starting IRC client with server {}", ircserver); logger.info("Starting IRC client with server {}", ircserver);
IrcBot bot = new IrcBot(ircserver, 6667, SystemProperty.MOYA_IRC_SERVERPASS.getValueOrNull(), SystemProperty.MOYA_IRC_CHANNEL.getValueOrDefault(), new Profile("moyabot", "Moya bot", "moya-bot")); IrcBot bot = new IrcBot(ircserver, 6667, SystemProperty.MOYA_IRC_SERVERPASS.getValueOrNull(),
botbean.add(bot); SystemProperty.MOYA_IRC_CHANNEL.getValueOrDefault(),
new Profile("moyabot", "Moya bot", "moya-bot"));
botbean.addBot(bot);
bot.addCmdListener("addIgnore", new MessgaeIgnoreListener());
bot.addCmdListener("rmIgnore", new RemoveMessgaeIgnoreListener());
bot.addCmdListener("lsIgnores", new ListMessgaeIgnoreListener());
bots.add(bot); bots.add(bot);
bot.start(); bot.start();
} }
} }
private class MessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "Add value as message to be ignored";
}
@Override
public void executeIrc(IrcBot bot, String data) {
botbean.getIgnoreTypes().add(data);
bot.say("Added " + data + " as ignored message type");
}
}
private class RemoveMessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "remove value from message ignore list";
}
@Override
public void executeIrc(IrcBot bot, String data) {
botbean.getIgnoreTypes().remove(data);
bot.say("Removed " + data + " from ignored message types");
}
}
private class ListMessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "List message ignore list entries";
}
@Override
public void executeIrc(IrcBot bot, String data) {
StringBuilder sb = new StringBuilder();
sb.append("Ignored messagetypes: ");
for (String d : botbean.getIgnoreTypes()) {
sb.append(d).append(", ");
}
bot.say(sb.toString());
}
}
/** /**
* @see Servlet#destroy() * @see Servlet#destroy()
*/ */
...@@ -126,7 +177,8 @@ public class IrcServlet extends HttpServlet { ...@@ -126,7 +177,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
for (IrcBot b : bots) { for (IrcBot b : bots) {
try { try {
b.stop(); b.stop();
...@@ -145,7 +197,8 @@ public class IrcServlet extends HttpServlet { ...@@ -145,7 +197,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!