Commit e466ff51 by Tuukka Kivilahti

Merge branch 'loggingfixes' into 'master'

Logging fixes

Bot & logging fixes

See merge request !336
2 parents f2abe3a0 0433705e
package fi.codecrew.moya.beans;
import java.util.Set;
import javax.ejb.Local;
import fi.iudex.utils.irc.IrcBot;
......@@ -7,6 +9,8 @@ import fi.iudex.utils.irc.IrcBot;
@Local
public interface BotBeanLocal {
void add(IrcBot bot);
public void addBot(IrcBot bot);
Set<String> getIgnoreTypes();
}
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.Lock;
import javax.ejb.LockType;
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;
/**
......@@ -10,9 +28,10 @@ import fi.iudex.utils.irc.IrcBot;
*/
@Singleton
@LocalBean
@Lock(LockType.READ)
public class BotBean implements BotBeanLocal {
private IrcBot bot;
private static final Logger logger = LoggerFactory.getLogger(BotBean.class);
/**
* Default constructor.
......@@ -20,10 +39,59 @@ public class BotBean implements BotBeanLocal {
public BotBean() {
}
@Override
public void add(IrcBot bot) {
this.setBot(bot);
private IrcBot 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() {
......@@ -34,4 +102,10 @@ public class BotBean implements BotBeanLocal {
this.bot = bot;
}
@Override
public void addBot(IrcBot bot) {
setBot(bot);
}
}
......@@ -387,7 +387,9 @@ public class PlaceBean implements PlaceBeanLocal {
userfacade.flush();
boolean associatedToPlace = isUserMember(user, places.get(0).getProduct());
StringBuilder logSb = new StringBuilder();
logSb.append("User Locked ").append(places.size()).append(" places: ");
for (Place p : places) {
if (!p.isReservedFor(user)) {
......@@ -397,6 +399,8 @@ public class PlaceBean implements PlaceBeanLocal {
}
}
logger.info("Buying place {} for user {}", p.getName(), user.getUser().getLogin());
logSb.append(p.getName()).append(", ");
GroupMembership gm = buy(p, pg);
if (!associatedToPlace)
{
......@@ -410,6 +414,7 @@ public class PlaceBean implements PlaceBeanLocal {
}
}
loggerbean.sendMessage(MoyaEventType.PLACE_ACTION, permbean.getCurrentUser(), logSb.toString());
// adding account event does funny stuff. evicting helps...
userfacade.evict();
......
......@@ -641,7 +641,7 @@ public class UserBean implements UserBeanLocal {
if (eu == null)
return null;
loggerbean.sendMessage(MoyaEventType.INVITE_ACCEPTED, eu, "Ivite accepted by current user", gm, gm.getUser());
loggerbean.sendMessage(MoyaEventType.INVITE_ACCEPTED, eu, "Invite accepted by current user ", gm, gm.getUser());
gm.setUser(eu);
gm.setInviteAccepted(Calendar.getInstance());
......
......@@ -31,59 +31,18 @@ public class IrcBotMoyaEventTopicListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(IrcBotMoyaEventTopicListener.class);
private static List<MoyaEventType> ignoreTypes = Arrays.asList(MoyaEventType.LOGIN_SUCCESSFULL);
@EJB
private BotBean botbean;
@EJB
private EventFacade eventfacade;
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventuserfacade;
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
try {
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class);
// do not flood irc-channel, message only really needed ones
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());
// botbean.getBot().say(toString(event, " ", msg.getEventtype(), " User
// ", msg.getDescription()));
if (botbean!= null) {
botbean.message(message);
}
}
}
......@@ -63,11 +63,14 @@ public class MoyaEventSender implements LoggingBeanLocal {
MoyaEventMessage msg = new MoyaEventMessage();
msg.setEventtype(type);
msg.setTime(Calendar.getInstance());
msg.setEventUserId(user.getId());
if(user != null)
{
msg.setEventUserId(user.getId());
}
msg.setCurrentUserId(permbean.getCurrentUser().getUser().getId());
msg.setEventId(eventbean.getCurrentEvent().getId());
msg.setDescription(message);
logger.info("Sending Moya message {} with description ", type, message);
logger.debug("Sending Moya message {} with description ", type, message);
sendMessage(msg);
}
......@@ -83,6 +86,7 @@ public class MoyaEventSender implements LoggingBeanLocal {
@Override
public void sendMessage(MoyaEventType type, Object... message) {
StringBuilder sb = new StringBuilder();
for (Object m : message) {
sb.append(m);
......
......@@ -55,6 +55,7 @@ import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
@WebFilter(filterName = "hostnameFilter", displayName = "hostname and authentication filter", urlPatterns = { "/*" })
public class HostnameFilter implements Filter {
private static final String X_FORWARDED_PROTO = "X-Forwarded-Proto";
private static final String SESSION_HOSTNAMESTORE = "moya-session-hostname";
private static final Logger logger = LoggerFactory.getLogger(HostnameFilter.class);
private static final String HTTP_HOSTNAME_ID = "moya_hostname_session_id";
......@@ -228,26 +229,29 @@ public class HostnameFilter implements Filter {
String restAuthStr = null;
// Allow api auth with password only if ssl is enabled ( or in
// development mode... )
if (BortalLocalContextHolder.isSsl() || BortalLocalContextHolder.isInDevelopmentMode()) {
restAuthStr = httpRequest.getHeader("Authorization");
}
// if (BortalLocalContextHolder.isSsl() ||
// BortalLocalContextHolder.isInDevelopmentMode()) {
restAuthStr = httpRequest.getHeader("Authorization");
// }
if (restAuthStr == null) {
StringBuilder hashBuilder = new StringBuilder();
hashBuilder.append(JaasBeanLocal.REST_PREFIX );
hashBuilder.append(JaasBeanLocal.REST_PREFIX);
hashBuilder.append(httpRequest.getParameter("appkey")).append(":");
hashBuilder.append(httpRequest.getParameter("appuser")).append(":");
hashBuilder.append(httpRequest.getParameter("appstamp")).append(":");
hashBuilder.append(httpRequest.getParameter("appmac")).append(":");
hashBuilder.append(httpRequest.getPathInfo());
restAuthStr = hashBuilder.toString();
}
boolean ret = true;
try {
httpRequest.login(null, restAuthStr);
} catch (ServletException loginEx) {
ret = false;
logger.info("Rest api authentication failed! ", loginEx);
logger.info("Rest api authentication failed for path " + httpRequest.getPathInfo() + " "
+ httpRequest.getParameterMap().toString(), loginEx);
if (response instanceof HttpServletResponse) {
HttpServletResponse httpResp = ((HttpServletResponse) response);
httpResp.setStatus(HttpServletResponse.SC_FORBIDDEN);
......@@ -285,10 +289,13 @@ public class HostnameFilter implements Filter {
}
String hostname = url.substring(beginindex, lastindex);
// httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME,
// hostname);
String proto = url.substring(0, 5).toLowerCase();
boolean ssl = proto.equals("https");
// if proxy provides scheme in header, use it..
String scheme = httpRequest.getHeader(X_FORWARDED_PROTO);
if (scheme == null || scheme.isEmpty()) {
scheme = url.substring(0, 5).toLowerCase();
}
boolean ssl = scheme.trim().toLowerCase().equals("https");
BortalLocalContextHolder.setSsl(ssl);
HttpSession session = httpRequest.getSession();
......
......@@ -40,7 +40,6 @@ import java.io.IOException;
import java.util.ArrayList;
import javax.ejb.EJB;
import javax.ejb.Startup;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
......@@ -49,8 +48,6 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jerklib.Profile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -61,6 +58,7 @@ import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.utilities.SystemProperty;
import fi.iudex.utils.irc.IrcBot;
import fi.iudex.utils.irc.IrcBotListener;
import net.sf.jerklib.Profile;
/**
* Servlet implementation class SshServlet
......@@ -105,13 +103,66 @@ public class IrcServlet extends HttpServlet {
logger.info("Got irc server system property {}", ircserver);
if (ircserver != null) {
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"));
botbean.add(bot);
IrcBot bot = new IrcBot(ircserver, 6667, SystemProperty.MOYA_IRC_SERVERPASS.getValueOrNull(),
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);
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()
*/
......@@ -126,7 +177,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* 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) {
try {
b.stop();
......@@ -145,7 +197,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* 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
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!