Updated files to work properly with applogger. Reworking how commands are called?
All checks were successful
Locusworks Team/eight-track/pipeline/head This commit looks good

This commit is contained in:
2020-05-30 21:58:46 -05:00
parent bbddcb93ba
commit f051e98768
12 changed files with 256 additions and 68 deletions

22
pom.xml
View File

@ -18,17 +18,17 @@
</scm>
<properties>
<flyway.version>6.4.2</flyway.version>
<flyway.version>6.4.3</flyway.version>
<mysql.version>8.0.20</mysql.version>
<hibernate.version>5.4.16.Final</hibernate.version>
<hibernate.version>5.4.17.Final</hibernate.version>
<spring.version>5.2.6.RELEASE</spring.version>
<spring.boot.version>2.3.0.RELEASE</spring.boot.version>
<spring.data.version>2.3.0.RELEASE</spring.data.version>
<jackson.version>2.10.1</jackson.version>
<log4j.version>2.12.1</log4j.version>
<slf4j.version>1.7.28</slf4j.version>
<maven.enforcer.version>3.0.0-M2</maven.enforcer.version>
<dep.check.version>5.2.2</dep.check.version>
<jackson.version>2.11.0</jackson.version>
<log4j.version>2.13.3</log4j.version>
<slf4j.version>1.7.30</slf4j.version>
<maven.enforcer.version>3.0.0-M3</maven.enforcer.version>
<dep.check.version>5.3.2</dep.check.version>
<license-maven-plugin.version>3.0</license-maven-plugin.version>
<nexus.repo>https://nexus.locusworks.net</nexus.repo>
</properties>
@ -154,7 +154,7 @@
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>4.1.0_88</version>
<version>4.1.1_155</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
@ -174,7 +174,7 @@
<dependency>
<groupId>com.sedmelluq</groupId>
<artifactId>lavaplayer</artifactId>
<version>1.3.32</version>
<version>1.3.49</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
@ -302,13 +302,13 @@
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
<version>3.0.0-M3</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.4.0-b180830.0438</version>
<version>3.0.0-M3</version>
</dependency>
<dependency>

View File

@ -0,0 +1,12 @@
package net.locusworks.discord.eighttrack.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface DiscordEventListener {
}

View File

@ -34,6 +34,9 @@ import javax.sql.DataSource;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.flywaydb.core.api.logging.Log;
import org.flywaydb.core.api.logging.LogCreator;
import org.flywaydb.core.api.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -48,6 +51,8 @@ import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Configuration(value="net.locusworks.discord.eighttrack.database.config.EightTrackBeanConfiguration")
@EnableTransactionManagement
@ -140,6 +145,7 @@ public class EightTrackBeanConfiguration {
@Bean(name="flyway", initMethod="migrate")
public Flyway flyway() {
LogFactory.setLogCreator(new FlywayLogCreator());
FluentConfiguration fc = Flyway.configure();
fc.schemas("eighttrack");
fc.table("_flyway_migration");
@ -149,5 +155,53 @@ public class EightTrackBeanConfiguration {
return fc.load();
}
private class FlywayLogCreator implements LogCreator {
@Override
public Log createLogger(Class<?> clazz) {
return new FlywayLog(clazz);
}
}
private class FlywayLog implements Log {
private ApplicationLogger logger;
public FlywayLog(Class<?> clazz) {
logger = ApplicationLoggerFactory.getLogger(clazz);
}
@Override
public boolean isDebugEnabled() {
return logger.isDebugEnabled();
}
@Override
public void debug(String message) {
logger.debug(message);
}
@Override
public void info(String message) {
logger.info(message);
}
@Override
public void warn(String message) {
logger.warn(message);
}
@Override
public void error(String message) {
logger.error(message);
}
@Override
public void error(String message, Exception e) {
logger.error(message, e);
}
}
}

View File

@ -36,14 +36,14 @@ import java.util.stream.Collectors;
import javax.sql.DataSource;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import net.locusworks.discord.eighttrack.services.ConfigurationService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Primary
@Component
@ -62,7 +62,7 @@ public class EightTrackDataSource {
mysqlProperties.put("serverTimezone", TimeZone.getDefault().getDisplayName(false, TimeZone.SHORT));
}
private Logger logger = LoggerFactory.getLogger(EightTrackDataSource.class);
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackDataSource.class);
@Autowired
private ConfigurationService confService;
@ -103,7 +103,7 @@ public class EightTrackDataSource {
url = String.format("%s?%s", url, StringUtils.join(params, "&"));
logger.debug("Database connection string: %s", url);
logger.debug(String.format("Database connection string: %s", url));
return DataSourceBuilder
.create()

View File

@ -106,33 +106,6 @@ public class DiscordEventHandler extends ListenerAdapter {
}
}
@Override
public void onGuildJoin(GuildJoinEvent event) {
try {
long guildId = event.getGuild().getIdLong();
DiscordGuild discordGuild = guildSongRepoService.getGuildRepo().findByGuildId(guildId);
if (discordGuild != null) {
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
return;
}
logger.debug("Joining Server: " + event.getGuild().getName());
discordGuild = new DiscordGuild();
discordGuild.setGuildId(guildId);
discordGuild.setGuildName(event.getGuild().getName());
discordGuild.setDateJoined(new Date());
guildSongRepoService.getGuildRepo().save(discordGuild);
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
} catch (Exception ex) {
logger.error("Unable to persist server information to database: " + ex.getMessage(), ex);
guildSongRepoService.logEntry(event.getGuild().getIdLong(), ex, "Unable to persist guild server info to database: %s", ex.getMessage());
}
}
@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
if (event.getAuthor().isBot()) return;

View File

@ -0,0 +1,50 @@
package net.locusworks.discord.eighttrack.listeners;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.locusworks.discord.eighttrack.annotations.DiscordEventListener;
import net.locusworks.discord.eighttrack.database.entities.DiscordGuild;
import net.locusworks.discord.eighttrack.services.RepositoryService;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Service
@DiscordEventListener
public class DiscordGuildJoinEventListener extends ListenerAdapter {
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(DiscordGuildJoinEventListener.class);
@Autowired
private RepositoryService guildSongRepoService;
@Override
public void onGuildJoin(GuildJoinEvent event) {
try {
long guildId = event.getGuild().getIdLong();
DiscordGuild discordGuild = guildSongRepoService.getGuildRepo().findByGuildId(guildId);
if (discordGuild != null) {
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
return;
}
logger.debug("Joining Server: " + event.getGuild().getName());
discordGuild = new DiscordGuild();
discordGuild.setGuildId(guildId);
discordGuild.setGuildName(event.getGuild().getName());
discordGuild.setDateJoined(new Date());
guildSongRepoService.getGuildRepo().save(discordGuild);
guildSongRepoService.logEntry(guildId, "Eight Track joined guild %s", discordGuild.getGuildName());
} catch (Exception ex) {
logger.error("Unable to persist server information to database: " + ex.getMessage(), ex);
guildSongRepoService.logEntry(event.getGuild().getIdLong(), ex, "Unable to persist guild server info to database: %s", ex.getMessage());
}
}
}

View File

@ -30,14 +30,14 @@ package net.locusworks.discord.eighttrack.services;
import java.util.Set;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import net.dv8tion.jda.api.JDA;
import net.locusworks.discord.eighttrack.database.repos.GuildRepository;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Service
public class DatabaseCleanupService {
@ -47,7 +47,7 @@ public class DatabaseCleanupService {
private static final long HOUR = 60 * MINUTE;
private static final long DAY = 24 * HOUR;
private Logger logger = LoggerFactory.getLogger(DatabaseCleanupService.class);
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(DatabaseCleanupService.class);
@Autowired
private GuildRepository guildRepo;

View File

@ -27,42 +27,62 @@
*/
package net.locusworks.discord.eighttrack.services;
import java.util.List;
import javax.security.auth.login.LoginException;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.core.type.filter.TypeFilter;
import org.springframework.stereotype.Service;
import net.dv8tion.jda.api.AccountType;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.locusworks.discord.eighttrack.handlers.DiscordEventHandler;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.locusworks.discord.eighttrack.annotations.DiscordEventListener;
import net.locusworks.discord.eighttrack.utils.BeanFinder;
import net.locusworks.logger.ApplicationLogger;
import net.locusworks.logger.ApplicationLoggerFactory;
@Service
public class EightTrackService {
private ApplicationLogger logger = ApplicationLoggerFactory.getLogger(EightTrackService.class);
private static JDA client;
@Autowired
private ConfigurationService confService;
@Autowired
private DiscordEventHandler eventListener;
public void begin() throws LoginException {
String token = confService.getDiscordToken();
logger.debug("Logging in with token %s", token);
client = new JDABuilder(AccountType.BOT).setToken(token).build();
client.addEventListener(eventListener);
try {
final TypeFilter serviceFilter = new AnnotationTypeFilter(Service.class);
final TypeFilter eventListenerFilter = new AnnotationTypeFilter(DiscordEventListener.class);
List<ListenerAdapter> eventListeners = BeanFinder.autowireBeans(ListenerAdapter.class, "net.locusworks.discord.eighttrack", serviceFilter, eventListenerFilter);
if (eventListeners == null ||eventListeners.size() < 1) {
throw new LoginException("No event listeners found. Exiting");
}
String token = confService.getDiscordToken();
JDABuilder builder = JDABuilder.createDefault(token);
logger.debug("Logging in with token %s", token);
logger.info(String.format("Loading %d listeners", eventListeners.size()));
for (ListenerAdapter la : eventListeners) {
logger.debug("Loading eventListener: %s", la.getClass().getName());
builder.addEventListeners(la);
}
client = builder.build();
} catch (BeansException e) {
throw new LoginException(e.getMessage());
}
}
public static JDA getClient() {
return client;
}
}

View File

@ -0,0 +1,24 @@
package net.locusworks.discord.eighttrack.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
if (context == null) {
context = ctx;
}
}
public static ApplicationContext getContext() {
return context;
}
}

View File

@ -0,0 +1,54 @@
package net.locusworks.discord.eighttrack.utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
public class BeanFinder {
public static List<BeanDefinition> getBeans(String basePackage, TypeFilter... filters) {
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new TypeFilter() {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
boolean found = true;
for (TypeFilter filter : filters) {
found &= filter.match(metadataReader, metadataReaderFactory);
}
return found;
}
});
return scanner.findCandidateComponents(basePackage).stream().collect(Collectors.toList());
}
@SuppressWarnings("unchecked")
public static <T> List<T> autowireBeans(Class<T> clazz, String basePackage, TypeFilter... filters) throws BeansException {
try {
List<T> list = new ArrayList<>();
for (BeanDefinition bd : getBeans(basePackage, filters)) {
Object obj = ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().createBean(Class.forName(bd.getBeanClassName()), Autowire.BY_TYPE.value(), true);
if (clazz.isInstance(obj)) {
list.add((T) obj);
}
}
return list;
} catch (Exception ex) {
throw new BeanInitializationException(ex.getMessage(), ex);
}
}
}

View File

@ -6,5 +6,5 @@ dbHost=localhost
dbPort=3306
logLevel=INFO
musicDir=E:/Music
discordToken=NjI5MTQ0OTk1ODA2MzE0NTA5.XZVlRQ.7hiB0u4Zp5pxPrPfvdOdyr4TCh4
discordToken=NjMzMDA2ODIzNzk1OTgyMzQ0.XtLtpA.sramb2b8w4itTFPQ92HqZgyeBJU

View File

@ -3,7 +3,7 @@
<Configuration status="WARN" shutdownHook="disable"
packages="net.locusworks.discord.eighttrack">
<Properties>
<Property name="logFormat">%d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5p] [%c{1}] %m%n</Property>
<Property name="logFormat">%d{dd-MMM-yyyy HH:mm:ss.SSS} %m%n</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
@ -20,9 +20,10 @@
</RollingFile>
</Appenders>
<Loggers>
<Root level="TRACE">
<AppenderRef ref="ConsoleAppender" level="INFO" />
<AppenderRef ref="eighttrack" level="INFO" />
</Root>
<Root level="ALL"/>
<Logger name="net.locusworks.logger" level="ALL">
<AppenderRef ref="eighttrack"/>
<AppenderRef ref="ConsoleAppender"/>
</Logger>
</Loggers>
</Configuration>