7712 scheduled weekly ingest pause

This commit is contained in:
Richard Cordovano 2021-06-28 17:12:54 -04:00
parent f4462ed78e
commit 03675696f7
2 changed files with 19 additions and 3 deletions

View File

@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.ingest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@ -597,6 +598,14 @@ final class IngestJobPipeline {
}
}
ScheduledIngestPauseSettings.setPauseEnabled(true);
LocalDateTime testDateTime = LocalDateTime.now();
testDateTime.plusMinutes(2);
ScheduledIngestPauseSettings.setPauseDayOfWeek(testDateTime.getDayOfWeek());
ScheduledIngestPauseSettings.setPauseStartTimeHour(testDateTime.getHour());
ScheduledIngestPauseSettings.setPauseStartTimeMinute(testDateTime.getMinute());
ScheduledIngestPauseSettings.setPauseDurationMinutes(2);
return errors;
}

View File

@ -180,6 +180,9 @@ abstract class IngestTaskPipeline<T extends IngestTask> {
List<IngestModuleError> errors = new ArrayList<>();
if (!this.ingestJobPipeline.isCancelled()) {
pauseIfScheduled();
if (ingestJobPipeline.isCancelled()) {
return errors;
}
try {
prepareTask(task);
} catch (IngestTaskPipelineException ex) {
@ -188,6 +191,9 @@ abstract class IngestTaskPipeline<T extends IngestTask> {
}
for (PipelineModule<T> module : modules) {
pauseIfScheduled();
if (ingestJobPipeline.isCancelled()) {
break;
}
try {
currentModule = module;
currentModule.setProcessingStartTime();
@ -228,6 +234,7 @@ abstract class IngestTaskPipeline<T extends IngestTask> {
}
pauseStart = pauseStart.withHour(ScheduledIngestPauseSettings.getPauseStartTimeHour());
pauseStart = pauseStart.withMinute(ScheduledIngestPauseSettings.getPauseStartTimeMinute());
pauseStart = pauseStart.withSecond(0);
/*
* Calculate the pause end date/time.
@ -241,11 +248,11 @@ abstract class IngestTaskPipeline<T extends IngestTask> {
* whatever time remains in the pause interval has expired.
*/
LocalDateTime timeNow = LocalDateTime.now();
long timeRemainingMillis = ChronoUnit.MILLIS.between(timeNow, pauseEnd);
if (timeNow.isAfter(pauseStart) && timeNow.isBefore(pauseEnd) && timeRemainingMillis > 0) {
if ((timeNow.equals(pauseStart) || timeNow.isAfter(pauseStart)) && timeNow.isBefore(pauseEnd)) {
ingestJobPipeline.registerPausedIngestThread(Thread.currentThread());
try {
logger.log(Level.INFO, String.format("%s pausing at %s for %d minutes", Thread.currentThread().getName(), LocalDateTime.now(), TimeUnit.MILLISECONDS.toMinutes(timeRemainingMillis)));
long timeRemainingMillis = ChronoUnit.MILLIS.between(timeNow, pauseEnd);
logger.log(Level.INFO, String.format("%s pausing at %s for ~%d minutes", Thread.currentThread().getName(), LocalDateTime.now(), TimeUnit.MILLISECONDS.toMinutes(timeRemainingMillis)));
sleep(timeRemainingMillis);
logger.log(Level.INFO, String.format("%s resuming at %s", Thread.currentThread().getName(), LocalDateTime.now()));
} catch (InterruptedException notLogged) {