19package org.sleuthkit.autopsy.ingest;
21import java.awt.event.ActionEvent;
22import java.awt.event.ActionListener;
23import java.beans.PropertyChangeEvent;
25import java.io.IOException;
26import java.util.EnumSet;
27import java.util.logging.FileHandler;
28import java.util.logging.Level;
29import java.util.logging.SimpleFormatter;
30import org.openide.util.NbBundle;
31import org.sleuthkit.autopsy.coreutils.Logger;
32import javax.swing.Timer;
33import org.sleuthkit.autopsy.casemodule.Case;
34import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
35import org.sleuthkit.autopsy.coreutils.PlatformUtil;
36import org.sleuthkit.autopsy.events.AutopsyEvent;
44public final class IngestMonitor {
54 private static final java.util.logging.Logger
monitorLogger = java.util.logging.Logger.getLogger(
"monitor");
69 monitorLogHandler.setFormatter(
new SimpleFormatter());
73 }
catch (IOException | SecurityException ex) {
74 logger.log(Level.SEVERE,
"Failed to create memory usage logger", ex);
101 boolean isRunning() {
111 long getFreeSpace() {
117 }
catch (SecurityException e) {
118 logger.log(Level.WARNING,
"Error checking for free disk space on ingest data drive", e);
127 private class MonitorTimerAction
implements ActionListener {
132 MonitorTimerAction() {
135 if (evt instanceof AutopsyEvent) {
136 AutopsyEvent event = (AutopsyEvent) evt;
137 if (AutopsyEvent.SourceType.LOCAL == event.getSourceType() && event.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
142 if (null != evt.getNewValue()) {
143 findRootDirectoryForCurrentCase((Case) evt.getNewValue());
163 root =
new File(File.separator);
176 File parentDir = curDir.getParentFile();
177 while (
null != parentDir) {
179 parentDir = curDir.getParentFile();
190 logger.log(Level.INFO,
"Monitoring disk space of {0}",
root.getAbsolutePath());
209 String diskPath =
root.getAbsolutePath();
211 NbBundle.getMessage(
this.getClass(),
"IngestMonitor.mgrErrMsg.lowDiskSpace.title", diskPath),
212 NbBundle.getMessage(
this.getClass(),
"IngestMonitor.mgrErrMsg.lowDiskSpace.msg", diskPath)));
213 monitorLogger.log(Level.SEVERE,
"Stopping ingest due to low disk space on {0}", diskPath);
214 logger.log(Level.SEVERE,
"Stopping ingest due to low disk space on {0}", diskPath);
230 final long freeSpace =
root.getFreeSpace();
231 logger.log(Level.INFO,
"Available disk space on drive where case dir resides is {0} (bytes)", freeSpace);
244 }
catch (SecurityException e) {
245 logger.log(Level.WARNING,
"Unable to check for free disk space (permission issue)", e);
static Case getCurrentCaseThrows()
String getCaseDirectory()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
synchronized static Logger getLogger(String name)
static synchronized IngestManager getInstance()
boolean isIngestRunning()
void cancelAllIngestJobs(IngestJob.CancellationReason reason)
void actionPerformed(ActionEvent e)
static final long MIN_FREE_DISK_SPACE
void logMonitoredRootDirectory()
boolean enoughDiskSpace()
void findRootDirectoryForCurrentCase()
void findRootDirectoryForCurrentCase(Case currentCase)
MonitorTimerAction timerAction
static final int INITIAL_INTERVAL_MS
static final java.util.logging.Logger monitorLogger
static final int DISK_FREE_SPACE_UNKNOWN
static final int MAX_LOG_FILES
void postMessage(final IngestMessage message)
static synchronized IngestServices getInstance()