From 24366986fdb4edb2eec2918bbdfc3286290cb617 Mon Sep 17 00:00:00 2001 From: Gertjan van Oosten Date: Tue, 27 Oct 2020 09:16:09 +0100 Subject: [PATCH] NCI-Agency/anet#3231: Pull up logger, and always pass AnetConfiguration to constructor Move worker creation closer to where it's scheduled. Make some variables final. --- .../java/mil/dds/anet/AnetApplication.java | 37 ++++++++++--------- .../mil/dds/anet/threads/AbstractWorker.java | 7 +++- .../threads/AccountDeactivationWorker.java | 9 +---- .../mil/dds/anet/threads/AnetEmailWorker.java | 10 +---- .../anet/threads/FutureEngagementWorker.java | 11 ++---- .../MaterializedViewRefreshWorker.java | 11 ++---- .../anet/threads/ReportApprovalWorker.java | 10 +---- .../anet/threads/ReportPublicationWorker.java | 10 +---- .../db/FutureEngagementWorkerTest.java | 5 ++- .../db/ReportPublicationWorkerTest.java | 4 +- .../emails/AnetEmailWorkerTest.java | 2 +- .../anet/test/resources/TaskApprovalTest.java | 2 +- 12 files changed, 45 insertions(+), 73 deletions(-) diff --git a/src/main/java/mil/dds/anet/AnetApplication.java b/src/main/java/mil/dds/anet/AnetApplication.java index 1ebf9028be..fd71e0a09d 100644 --- a/src/main/java/mil/dds/anet/AnetApplication.java +++ b/src/main/java/mil/dds/anet/AnetApplication.java @@ -207,31 +207,32 @@ public void run(AnetConfiguration configuration, Environment environment) } else { logger.info("AnetApplication is starting scheduled workers"); // Schedule any tasks that need to run on an ongoing basis. - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - AnetEmailWorker emailWorker = new AnetEmailWorker(engine.getEmailDao(), configuration); - FutureEngagementWorker futureWorker = new FutureEngagementWorker(engine.getReportDao()); - ReportPublicationWorker reportPublicationWorker = - new ReportPublicationWorker(engine.getReportDao(), configuration); - final ReportApprovalWorker reportApprovalWorker = - new ReportApprovalWorker(engine.getReportDao(), configuration); + final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // Check for any reports that need to be published every 5 minutes. // And run once in 5 seconds from boot-up. (give the server time to boot up). + final ReportPublicationWorker reportPublicationWorker = + new ReportPublicationWorker(configuration, engine.getReportDao()); scheduler.scheduleAtFixedRate(reportPublicationWorker, 5, 5, TimeUnit.MINUTES); scheduler.schedule(reportPublicationWorker, 5, TimeUnit.SECONDS); // Check for any emails that need to be sent every 5 minutes. // And run once in 10 seconds from boot-up. (give the server time to boot up). + final AnetEmailWorker emailWorker = new AnetEmailWorker(configuration, engine.getEmailDao()); scheduler.scheduleAtFixedRate(emailWorker, 5, 5, TimeUnit.MINUTES); scheduler.schedule(emailWorker, 10, TimeUnit.SECONDS); // Check for any future engagements every 3 hours. // And run once in 15 seconds from boot-up. (give the server time to boot up). + final FutureEngagementWorker futureWorker = + new FutureEngagementWorker(configuration, engine.getReportDao()); scheduler.scheduleAtFixedRate(futureWorker, 0, 3, TimeUnit.HOURS); scheduler.schedule(futureWorker, 15, TimeUnit.SECONDS); // Check for any reports that need to be approved every 5 minutes. // And run once in 20 seconds from boot-up. (give the server time to boot up). + final ReportApprovalWorker reportApprovalWorker = + new ReportApprovalWorker(configuration, engine.getReportDao()); scheduler.scheduleAtFixedRate(reportApprovalWorker, 5, 5, TimeUnit.MINUTES); scheduler.schedule(reportApprovalWorker, 5, TimeUnit.SECONDS); @@ -241,22 +242,22 @@ public void run(AnetConfiguration configuration, Environment environment) // Wait 60 seconds between updates of PostgreSQL materialized views, // starting 30 seconds after boot-up. final MaterializedViewRefreshWorker materializedViewRefreshWorker = - new MaterializedViewRefreshWorker(engine.getAdminDao()); + new MaterializedViewRefreshWorker(configuration, engine.getAdminDao()); scheduler.scheduleWithFixedDelay(materializedViewRefreshWorker, 30, 60, TimeUnit.SECONDS); } } // Create all of the HTTP Resources. - LoggingResource loggingResource = new LoggingResource(); - PersonResource personResource = new PersonResource(engine, configuration); - TaskResource taskResource = new TaskResource(engine, configuration); - LocationResource locationResource = new LocationResource(engine); - OrganizationResource orgResource = new OrganizationResource(engine); - PositionResource positionResource = new PositionResource(engine); - ReportResource reportResource = new ReportResource(engine, configuration); - AdminResource adminResource = new AdminResource(engine, configuration); - HomeResource homeResource = new HomeResource(engine, configuration); - SavedSearchResource savedSearchResource = new SavedSearchResource(engine); + final LoggingResource loggingResource = new LoggingResource(); + final PersonResource personResource = new PersonResource(engine, configuration); + final TaskResource taskResource = new TaskResource(engine, configuration); + final LocationResource locationResource = new LocationResource(engine); + final OrganizationResource orgResource = new OrganizationResource(engine); + final PositionResource positionResource = new PositionResource(engine); + final ReportResource reportResource = new ReportResource(engine, configuration); + final AdminResource adminResource = new AdminResource(engine, configuration); + final HomeResource homeResource = new HomeResource(engine, configuration); + final SavedSearchResource savedSearchResource = new SavedSearchResource(engine); final TagResource tagResource = new TagResource(engine); final AuthorizationGroupResource authorizationGroupResource = new AuthorizationGroupResource(engine); diff --git a/src/main/java/mil/dds/anet/threads/AbstractWorker.java b/src/main/java/mil/dds/anet/threads/AbstractWorker.java index d9c40da70a..94ae3ca709 100644 --- a/src/main/java/mil/dds/anet/threads/AbstractWorker.java +++ b/src/main/java/mil/dds/anet/threads/AbstractWorker.java @@ -4,19 +4,22 @@ import java.time.Instant; import mil.dds.anet.AnetObjectEngine; import mil.dds.anet.beans.JobHistory; +import mil.dds.anet.config.AnetConfiguration; import mil.dds.anet.database.JobHistoryDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractWorker implements Runnable { - private static final Logger logger = + protected static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + protected final AnetConfiguration config; private final String startMessage; private JobHistoryDao jobHistoryDao; - public AbstractWorker(String startMessage) { + public AbstractWorker(AnetConfiguration config, String startMessage) { + this.config = config; this.startMessage = startMessage; this.jobHistoryDao = AnetObjectEngine.getInstance().getJobHistoryDao(); } diff --git a/src/main/java/mil/dds/anet/threads/AccountDeactivationWorker.java b/src/main/java/mil/dds/anet/threads/AccountDeactivationWorker.java index bd024adfb4..167aa584fc 100644 --- a/src/main/java/mil/dds/anet/threads/AccountDeactivationWorker.java +++ b/src/main/java/mil/dds/anet/threads/AccountDeactivationWorker.java @@ -1,6 +1,5 @@ package mil.dds.anet.threads; -import java.lang.invoke.MethodHandles; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.ArrayList; @@ -19,14 +18,9 @@ import mil.dds.anet.emails.AccountDeactivationWarningEmail; import mil.dds.anet.utils.AnetAuditLogger; import mil.dds.anet.utils.Utils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AccountDeactivationWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final PersonDao dao; private final List daysTillEndOfTourWarnings; @@ -36,7 +30,8 @@ public class AccountDeactivationWorker extends AbstractWorker { public AccountDeactivationWorker(AnetConfiguration config, PersonDao dao, int warningIntervalInSecs) { - super("Deactivation Warning Worker waking up to check for Future Account Deactivations"); + super(config, + "Deactivation Warning Worker waking up to check for Future Account Deactivations"); this.dao = dao; @SuppressWarnings("unchecked") diff --git a/src/main/java/mil/dds/anet/threads/AnetEmailWorker.java b/src/main/java/mil/dds/anet/threads/AnetEmailWorker.java index b443e8ab19..ecdb1d1a7d 100644 --- a/src/main/java/mil/dds/anet/threads/AnetEmailWorker.java +++ b/src/main/java/mil/dds/anet/threads/AnetEmailWorker.java @@ -10,7 +10,6 @@ import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; -import java.lang.invoke.MethodHandles; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.time.format.DateTimeFormatter; @@ -42,14 +41,9 @@ import org.simplejavamail.api.email.Email; import org.simplejavamail.email.EmailBuilder; import org.simplejavamail.mailer.MailerBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AnetEmailWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static AnetEmailWorker instance; private EmailDao dao; @@ -70,8 +64,8 @@ public class AnetEmailWorker extends AbstractWorker { private final List activeDomainNames; @SuppressWarnings("unchecked") - public AnetEmailWorker(EmailDao dao, AnetConfiguration config) { - super("AnetEmailWorker waking up to send emails!"); + public AnetEmailWorker(AnetConfiguration config, EmailDao dao) { + super(config, "AnetEmailWorker waking up to send emails!"); this.dao = dao; this.mapper = MapperUtils.getDefaultMapper(); this.fromAddr = config.getEmailFromAddr(); diff --git a/src/main/java/mil/dds/anet/threads/FutureEngagementWorker.java b/src/main/java/mil/dds/anet/threads/FutureEngagementWorker.java index 2e1ac086a1..6c51b0b510 100644 --- a/src/main/java/mil/dds/anet/threads/FutureEngagementWorker.java +++ b/src/main/java/mil/dds/anet/threads/FutureEngagementWorker.java @@ -1,6 +1,5 @@ package mil.dds.anet.threads; -import java.lang.invoke.MethodHandles; import java.time.Instant; import java.util.List; import java.util.Map; @@ -8,20 +7,16 @@ import mil.dds.anet.beans.AnetEmail; import mil.dds.anet.beans.JobHistory; import mil.dds.anet.beans.Report; +import mil.dds.anet.config.AnetConfiguration; import mil.dds.anet.database.ReportDao; import mil.dds.anet.emails.FutureEngagementUpdated; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class FutureEngagementWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private ReportDao dao; - public FutureEngagementWorker(ReportDao dao) { - super("Future Engagement Worker waking up to check for Future Engagements"); + public FutureEngagementWorker(AnetConfiguration config, ReportDao dao) { + super(config, "Future Engagement Worker waking up to check for Future Engagements"); this.dao = dao; } diff --git a/src/main/java/mil/dds/anet/threads/MaterializedViewRefreshWorker.java b/src/main/java/mil/dds/anet/threads/MaterializedViewRefreshWorker.java index fa986d5b5d..4061a275c5 100644 --- a/src/main/java/mil/dds/anet/threads/MaterializedViewRefreshWorker.java +++ b/src/main/java/mil/dds/anet/threads/MaterializedViewRefreshWorker.java @@ -1,25 +1,20 @@ package mil.dds.anet.threads; -import java.lang.invoke.MethodHandles; import java.time.Instant; import mil.dds.anet.beans.JobHistory; +import mil.dds.anet.config.AnetConfiguration; import mil.dds.anet.database.AdminDao; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class MaterializedViewRefreshWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static final String[] materializedViews = {"mv_fts_authorizationGroups", "mv_fts_locations", "mv_fts_organizations", "mv_fts_people", "mv_fts_positions", "mv_fts_reports", "mv_fts_tags", "mv_fts_tasks"}; private final AdminDao dao; - public MaterializedViewRefreshWorker(AdminDao dao) { - super("Refreshing materialized views"); + public MaterializedViewRefreshWorker(AnetConfiguration config, AdminDao dao) { + super(config, "Refreshing materialized views"); this.dao = dao; } diff --git a/src/main/java/mil/dds/anet/threads/ReportApprovalWorker.java b/src/main/java/mil/dds/anet/threads/ReportApprovalWorker.java index d763da78d1..fd07a2d55d 100644 --- a/src/main/java/mil/dds/anet/threads/ReportApprovalWorker.java +++ b/src/main/java/mil/dds/anet/threads/ReportApprovalWorker.java @@ -1,6 +1,5 @@ package mil.dds.anet.threads; -import java.lang.invoke.MethodHandles; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -17,19 +16,14 @@ import mil.dds.anet.database.ReportDao; import mil.dds.anet.utils.AnetAuditLogger; import mil.dds.anet.utils.DaoUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ReportApprovalWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final ReportDao dao; private final Integer nbOfHoursApprovalTimeout; - public ReportApprovalWorker(ReportDao dao, AnetConfiguration config) { - super("Report Approval Worker waking up to check for reports to be approved"); + public ReportApprovalWorker(AnetConfiguration config, ReportDao dao) { + super(config, "Report Approval Worker waking up to check for reports to be approved"); this.dao = dao; this.nbOfHoursApprovalTimeout = (Integer) config.getDictionaryEntry("reportWorkflow.nbOfHoursApprovalTimeout"); diff --git a/src/main/java/mil/dds/anet/threads/ReportPublicationWorker.java b/src/main/java/mil/dds/anet/threads/ReportPublicationWorker.java index 1b523d6b05..634614f78d 100644 --- a/src/main/java/mil/dds/anet/threads/ReportPublicationWorker.java +++ b/src/main/java/mil/dds/anet/threads/ReportPublicationWorker.java @@ -1,6 +1,5 @@ package mil.dds.anet.threads; -import java.lang.invoke.MethodHandles; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -15,19 +14,14 @@ import mil.dds.anet.config.AnetConfiguration; import mil.dds.anet.database.ReportDao; import mil.dds.anet.utils.AnetAuditLogger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ReportPublicationWorker extends AbstractWorker { - private static final Logger logger = - LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final ReportDao dao; private final Integer nbOfHoursQuarantineApproved; - public ReportPublicationWorker(ReportDao dao, AnetConfiguration config) { - super("Report Publication Worker waking up to check for reports to be published"); + public ReportPublicationWorker(AnetConfiguration config, ReportDao dao) { + super(config, "Report Publication Worker waking up to check for reports to be published"); this.dao = dao; this.nbOfHoursQuarantineApproved = (Integer) config.getDictionaryEntry("reportWorkflow.nbOfHoursQuarantineApproved"); diff --git a/src/test/java/mil/dds/anet/test/integration/db/FutureEngagementWorkerTest.java b/src/test/java/mil/dds/anet/test/integration/db/FutureEngagementWorkerTest.java index d26fa85a41..bc77435cb0 100644 --- a/src/test/java/mil/dds/anet/test/integration/db/FutureEngagementWorkerTest.java +++ b/src/test/java/mil/dds/anet/test/integration/db/FutureEngagementWorkerTest.java @@ -60,8 +60,9 @@ public static void setUpClass() throws Exception { "@" + ((List) app.getConfiguration().getDictionaryEntry("domainNames")).get(0); final AnetObjectEngine engine = AnetObjectEngine.getInstance(); - emailWorker = new AnetEmailWorker(engine.getEmailDao(), app.getConfiguration()); - futureEngagementWorker = new FutureEngagementWorker(engine.getReportDao()); + emailWorker = new AnetEmailWorker(app.getConfiguration(), engine.getEmailDao()); + futureEngagementWorker = + new FutureEngagementWorker(app.getConfiguration(), engine.getReportDao()); emailServer = new FakeSmtpServer(app.getConfiguration().getSmtp()); // Flush all reports from previous tests diff --git a/src/test/java/mil/dds/anet/test/integration/db/ReportPublicationWorkerTest.java b/src/test/java/mil/dds/anet/test/integration/db/ReportPublicationWorkerTest.java index 18c4b65f06..ae39ac04db 100644 --- a/src/test/java/mil/dds/anet/test/integration/db/ReportPublicationWorkerTest.java +++ b/src/test/java/mil/dds/anet/test/integration/db/ReportPublicationWorkerTest.java @@ -69,8 +69,8 @@ public static void setUpClass() throws Exception { "@" + ((List) configuration.getDictionaryEntry("domainNames")).get(0); final AnetObjectEngine engine = AnetObjectEngine.getInstance(); - emailWorker = new AnetEmailWorker(engine.getEmailDao(), configuration); - reportPublicationWorker = new ReportPublicationWorker(engine.getReportDao(), configuration); + emailWorker = new AnetEmailWorker(configuration, engine.getEmailDao()); + reportPublicationWorker = new ReportPublicationWorker(configuration, engine.getReportDao()); emailServer = new FakeSmtpServer(configuration.getSmtp()); // Flush all reports from previous tests diff --git a/src/test/java/mil/dds/anet/test/integration/emails/AnetEmailWorkerTest.java b/src/test/java/mil/dds/anet/test/integration/emails/AnetEmailWorkerTest.java index de2bf41815..36188d1091 100644 --- a/src/test/java/mil/dds/anet/test/integration/emails/AnetEmailWorkerTest.java +++ b/src/test/java/mil/dds/anet/test/integration/emails/AnetEmailWorkerTest.java @@ -41,7 +41,7 @@ public static void setUp() throws Exception { final DropwizardAppExtension app = TestApp.app; emailDao = mock(EmailDao.class, Mockito.RETURNS_DEEP_STUBS); - emailWorker = new AnetEmailWorker(emailDao, app.getConfiguration()); + emailWorker = new AnetEmailWorker(app.getConfiguration(), emailDao); whitelistedEmail = "@" + ((List) app.getConfiguration().getDictionaryEntry("domainNames")).get(0); diff --git a/src/test/java/mil/dds/anet/test/resources/TaskApprovalTest.java b/src/test/java/mil/dds/anet/test/resources/TaskApprovalTest.java index 30552e5b51..de11d7abe6 100644 --- a/src/test/java/mil/dds/anet/test/resources/TaskApprovalTest.java +++ b/src/test/java/mil/dds/anet/test/resources/TaskApprovalTest.java @@ -93,7 +93,7 @@ public static void setUpEmailServer() throws Exception { final List activeDomainNames = (List) dict.get("activeDomainNames"); activeDomainNames.add("dds.mil"); config.setDictionary(dict); - emailWorker = new AnetEmailWorker(AnetObjectEngine.getInstance().getEmailDao(), config); + emailWorker = new AnetEmailWorker(config, AnetObjectEngine.getInstance().getEmailDao()); emailServer = new FakeSmtpServer(config.getSmtp()); }