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

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>