implemented logging

pull/2/head
Vyacheslav N. Boyko 2018-03-10 12:10:10 +03:00
parent 8ed9452deb
commit 4cecda7c72
9 changed files with 269 additions and 5 deletions

View File

@ -2,7 +2,9 @@
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
<configuration>
<fileset id="fileset" name="Spring Application Context" removed="false" />
</configuration>
</facet>
<facet type="web" name="Web">
<configuration>
@ -32,7 +34,6 @@
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" level="project" />
@ -40,9 +41,31 @@
<orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.13.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.23" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.23" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.23" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.23" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.6.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.10" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring4:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ognl:ognl:3.0.8" level="project" />
<orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.4.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.13" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.23" level="project" />
@ -85,7 +108,6 @@
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" name="Maven: com.google.http-client:google-http-client-jackson2:1.23.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava-jdk5:17.0" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />

14
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>ru.bvn13</groupId>
<artifactId>jircbot</artifactId>
<version>1.1.3</version>
<version>1.1.4</version>
<packaging>jar</packaging>
@ -62,6 +62,18 @@
</exclusions>
</dependency>
<!--Spring Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<!-- Dependencies for Database, Hibernate and ORM -->

View File

@ -79,6 +79,9 @@ public class JircBot extends ListenerAdapter {
@Autowired
private GoogleSearchListener googleSearchListener;
@Autowired
private LoggerListener loggerListener;
@PostConstruct
public void postConstruct() {
this.executorService = Executors.newSingleThreadScheduledExecutor();
@ -121,6 +124,7 @@ public class JircBot extends ListenerAdapter {
.addListener(helloOnJoinListener)
.addListener(grammarCorrectorListener)
.addListener(googleSearchListener)
.addListener(loggerListener)
// not tested
//.addListener(new GoogleDoodleListener(this.config))

View File

@ -76,4 +76,10 @@ public class ChannelSettings extends BaseModel {
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
private Boolean googleSearchEnabled = false;
@Getter
@Setter
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
private Boolean loggingEnabled = false;
}

View File

@ -0,0 +1,43 @@
package ru.bvn13.jircbot.database.entities;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* Created by bvn13 on 10.03.2018.
*/
@Entity
@Table(name = "irc_messages")
@Getter @Setter
public class IrcMessage extends BaseModel {
@Column
private String channelName;
@Column
private String username;
@Column
private String message;
public IrcMessage(String channelName, String username, String message) {
this.channelName = channelName;
this.username = username;
this.message = message;
}
public IrcMessage(String channelName, String message) {
this.channelName = channelName;
this.message = message;
}
public IrcMessage(String message) {
this.message = message;
}
}

View File

@ -0,0 +1,11 @@
package ru.bvn13.jircbot.database.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import ru.bvn13.jircbot.database.entities.IrcMessage;
/**
* Created by bvn13 on 10.03.2018.
*/
public interface IrcMessageRepository extends JpaRepository<IrcMessage, Long> {
}

View File

@ -0,0 +1,21 @@
package ru.bvn13.jircbot.database.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.bvn13.jircbot.database.entities.IrcMessage;
import ru.bvn13.jircbot.database.repositories.IrcMessageRepository;
/**
* Created by bvn13 on 10.03.2018.
*/
@Service
public class IrcMessageService {
@Autowired
private IrcMessageRepository ircMessageRepository;
public void save(IrcMessage message) {
ircMessageRepository.save(message);
}
}

View File

@ -0,0 +1,126 @@
package ru.bvn13.jircbot.listeners;
import org.pircbotx.hooks.Event;
import org.pircbotx.hooks.events.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter;
import ru.bvn13.jircbot.database.entities.IrcMessage;
import ru.bvn13.jircbot.database.services.ChannelSettingsService;
import ru.bvn13.jircbot.database.services.IrcMessageService;
import java.util.*;
/**
* Created by bvn13 on 10.03.2018.
*/
@Component
public class LoggerListener extends ImprovedListenerAdapter {
@Autowired
private ChannelSettingsService channelSettingsService;
@Autowired
private IrcMessageService ircMessageService;
private Map<String, Set<String>> onlineUsers = new HashMap<>();
public boolean isEnabled(Event event) throws Exception {
return channelSettingsService.getChannelSettings(getChannelName(event)).getLoggingEnabled();
}
public boolean isEnabled(String channelName) throws Exception {
return channelSettingsService.getChannelSettings(channelName).getLoggingEnabled();
}
@Override
public void onJoin(JoinEvent event) throws Exception {
if (!isEnabled(event)) return;
if (!onlineUsers.containsKey(event.getChannel().getName())) {
onlineUsers.put(event.getChannel().getName(), new HashSet<>());
}
Set<String> users = onlineUsers.get(event.getChannel().getName());
event.getChannel().getUsers().forEach(user -> {
users.add(user.getNick().toLowerCase());
});
log(event.getChannel().getName(), "User joined: "+event.getUser().getNick());
}
@Override
public void onQuit(QuitEvent event) throws Exception {
List<String> channels = new ArrayList<>();
for (String channelName : onlineUsers.keySet()) {
Set<String> users = onlineUsers.get(channelName);
if (users.contains(event.getUser().getNick().toLowerCase())) {
if (isEnabled(channelName)) {
log(channelName, "User " + event.getUser().getNick() + " quit (" + event.getReason() + ")");
users.remove(event.getUser().getNick().toLowerCase());
}
}
}
}
@Override
public void onKick(KickEvent event) throws Exception {
if (!isEnabled(event)) return;
if (onlineUsers.containsKey(event.getChannel().getName())) {
onlineUsers.get(event.getChannel().getName()).remove(event.getUser().getNick().toLowerCase());
}
log(event.getChannel().getName(), "User "+event.getRecipient().getNick()+" was kicked by "+event.getUser().getNick()+" by reason: "+event.getReason());
}
@Override
public void onMessage(MessageEvent event) throws Exception {
if (!isEnabled(event)) return;
log(event.getChannel().getName(), event.getUser().getNick(), event.getMessage());
}
@Override
public void onNickChange(NickChangeEvent event) throws Exception {
List<String> channels = new ArrayList<>();
for (String channelName : onlineUsers.keySet()) {
Set<String> users = onlineUsers.get(channelName);
if (users.contains(event.getUser().getNick().toLowerCase())) {
if (isEnabled(channelName)) {
log(channelName,"User "+event.getOldNick()+" is now known as "+event.getNewNick());
users.remove(event.getUser().getNick().toLowerCase());
}
}
}
}
@Override
public void onNotice(NoticeEvent event) throws Exception {
if (!isEnabled(event)) return;
log(event.getChannel().getName(), event.getMessage());
}
@Override
public void onTopic(TopicEvent event) throws Exception {
if (!isEnabled(event)) return;
log(event.getChannel().getName(), ""+event.getUser().getNick()+" set topic: "+event.getTopic());
}
private void log(String channelName, String username, String message) {
IrcMessage msg = new IrcMessage(channelName, username, message);
ircMessageService.save(msg);
}
private void log(String channelName, String message) {
IrcMessage msg = new IrcMessage(channelName, message);
ircMessageService.save(msg);
}
private void log(String message) {
IrcMessage msg = new IrcMessage(message);
ircMessageService.save(msg);
}
}

View File

@ -0,0 +1,19 @@
package ru.bvn13.jircbot.web.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Created by bvn13 on 10.03.2018.
*/
@Controller
@RequestMapping("/logs")
public class IrcLogController {
@RequestMapping(value = "", method = RequestMethod.GET)
public String index() {
return "irclog";
}
}