mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 00:16:16 +00:00
update for listening to file analyzed events
This commit is contained in:
parent
e755142947
commit
a1e12837d6
@ -25,6 +25,7 @@ import java.util.HashSet;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.DataSource;
|
import org.sleuthkit.datamodel.DataSource;
|
||||||
@ -64,6 +65,11 @@ public class ContainerSummary implements DefaultArtifactUpdateGovernor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRefreshRequired(AbstractFile file) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<Integer> getArtifactTypeIdsForRefresh() {
|
public Set<Integer> getArtifactTypeIdsForRefresh() {
|
||||||
return ARTIFACT_UPDATE_TYPE_IDS;
|
return ARTIFACT_UPDATE_TYPE_IDS;
|
||||||
|
@ -28,6 +28,7 @@ import java.util.stream.Collectors;
|
|||||||
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.DataSource;
|
import org.sleuthkit.datamodel.DataSource;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
@ -62,6 +63,11 @@ public class MimeTypeSummary implements DefaultUpdateGovernor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRefreshRequired(AbstractFile file) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRefreshRequired(IngestManager.IngestJobEvent evt) {
|
public boolean isRefreshRequired(IngestManager.IngestJobEvent evt) {
|
||||||
return (evt != null && INGEST_JOB_EVENTS.contains(evt));
|
return (evt != null && INGEST_JOB_EVENTS.contains(evt));
|
||||||
|
@ -26,6 +26,7 @@ import java.util.Set;
|
|||||||
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.DataSource;
|
import org.sleuthkit.datamodel.DataSource;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.sleuthkit.datamodel.TskData;
|
import org.sleuthkit.datamodel.TskData;
|
||||||
@ -61,6 +62,11 @@ public class TypesSummary implements DefaultUpdateGovernor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRefreshRequired(AbstractFile file) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRefreshRequired(IngestManager.IngestJobEvent evt) {
|
public boolean isRefreshRequired(IngestManager.IngestJobEvent evt) {
|
||||||
return (evt != null && INGEST_JOB_EVENTS.contains(evt));
|
return (evt != null && INGEST_JOB_EVENTS.contains(evt));
|
||||||
|
@ -27,6 +27,7 @@ import java.util.logging.Level;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchResult;
|
import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchResult;
|
||||||
@ -39,6 +40,7 @@ import org.sleuthkit.autopsy.datasourcesummary.uiutils.UpdateGovernor;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
import org.sleuthkit.datamodel.DataSource;
|
import org.sleuthkit.datamodel.DataSource;
|
||||||
@ -140,6 +142,33 @@ abstract class BaseDataSourceSummaryPanel extends JPanel {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRefreshRequired(AbstractFile file) {
|
||||||
|
DataSource currentDataSource = getDataSource();
|
||||||
|
if (currentDataSource == null || file == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the file is for the current data source
|
||||||
|
Long fileDsId = null;
|
||||||
|
try {
|
||||||
|
Content fileDataSource = file.getDataSource();
|
||||||
|
fileDsId = fileDataSource.getId();
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to get the datasource for newly added file", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileDsId != null && currentDataSource.getId() == fileDsId) {
|
||||||
|
for (UpdateGovernor governor : governors) {
|
||||||
|
if (governor.isRefreshRequired(file)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRefreshRequired(IngestJobEvent evt) {
|
public boolean isRefreshRequired(IngestJobEvent evt) {
|
||||||
for (UpdateGovernor governor : governors) {
|
for (UpdateGovernor governor : governors) {
|
||||||
|
@ -25,6 +25,7 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default UpdateGovernor where no updates will be triggered unless
|
* The default UpdateGovernor where no updates will be triggered unless
|
||||||
@ -61,4 +62,9 @@ public interface DefaultUpdateGovernor extends UpdateGovernor {
|
|||||||
default Set<IngestManager.IngestJobEvent> getIngestJobEventUpdates() {
|
default Set<IngestManager.IngestJobEvent> getIngestJobEventUpdates() {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean isRefreshRequired(AbstractFile evt) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import org.sleuthkit.autopsy.ingest.events.FileAnalyzedEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles ingest and case events, and determines whether they should trigger an
|
* Handles ingest and case events, and determines whether they should trigger an
|
||||||
@ -54,6 +56,9 @@ public class EventUpdateHandler {
|
|||||||
} else if (IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString().equals(eventType) && evt.getOldValue() instanceof ModuleContentEvent) {
|
} else if (IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString().equals(eventType) && evt.getOldValue() instanceof ModuleContentEvent) {
|
||||||
ModuleContentEvent contentEvent = (ModuleContentEvent) evt.getOldValue();
|
ModuleContentEvent contentEvent = (ModuleContentEvent) evt.getOldValue();
|
||||||
return EventUpdateHandler.this.isRefreshRequired(contentEvent);
|
return EventUpdateHandler.this.isRefreshRequired(contentEvent);
|
||||||
|
} else if (IngestManager.IngestModuleEvent.FILE_DONE.toString().equals(eventType) && evt.getNewValue() instanceof AbstractFile) {
|
||||||
|
AbstractFile analyzedFile = (AbstractFile) evt.getNewValue();
|
||||||
|
return EventUpdateHandler.this.isRefreshRequired(analyzedFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -127,6 +132,17 @@ public class EventUpdateHandler {
|
|||||||
protected boolean isRefreshRequired(ModuleContentEvent evt) {
|
protected boolean isRefreshRequired(ModuleContentEvent evt) {
|
||||||
return governor.isRefreshRequired(evt);
|
return governor.isRefreshRequired(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles whether or not a newly added AbstractFile should trigger an update.
|
||||||
|
*
|
||||||
|
* @param evt The AbstractFile.
|
||||||
|
*
|
||||||
|
* @return True if an update should occur.
|
||||||
|
*/
|
||||||
|
protected boolean isRefreshRequired(AbstractFile evt) {
|
||||||
|
return governor.isRefreshRequired(evt);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles whether or not a IngestJobEvent should trigger an update.
|
* Handles whether or not a IngestJobEvent should trigger an update.
|
||||||
|
@ -24,6 +24,7 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for determiining when data should update based on autopsy (i.e.
|
* Interface for determiining when data should update based on autopsy (i.e.
|
||||||
@ -77,4 +78,13 @@ public interface UpdateGovernor {
|
|||||||
* @return Whether or not this event should trigger an update.
|
* @return Whether or not this event should trigger an update.
|
||||||
*/
|
*/
|
||||||
boolean isRefreshRequiredForCaseEvent(PropertyChangeEvent evt);
|
boolean isRefreshRequiredForCaseEvent(PropertyChangeEvent evt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not a newly added AbstractFile should trigger an update.
|
||||||
|
*
|
||||||
|
* @param evt The AbstractFile.
|
||||||
|
*
|
||||||
|
* @return True if an update should occur.
|
||||||
|
*/
|
||||||
|
boolean isRefreshRequired(AbstractFile evt);
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,8 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class that can be used by UI nodes to reduce the number of
|
* Utility class that can be used by UI nodes to reduce the number of
|
||||||
* potentially expensive UI refresh events when DATA_ADDED and CONTENT_CHANGED
|
* potentially expensive UI refresh events when DATA_ADDED, CONTENT_CHANGED, and
|
||||||
* ingest manager events are received.
|
* FILE_DONE ingest manager events are received.
|
||||||
*/
|
*/
|
||||||
public class RefreshThrottler {
|
public class RefreshThrottler {
|
||||||
|
|
||||||
@ -66,7 +66,10 @@ public class RefreshThrottler {
|
|||||||
|
|
||||||
private static final long MIN_SECONDS_BETWEEN_REFRESH = 5;
|
private static final long MIN_SECONDS_BETWEEN_REFRESH = 5;
|
||||||
|
|
||||||
private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS_OF_INTEREST = EnumSet.of(IngestManager.IngestModuleEvent.DATA_ADDED, IngestManager.IngestModuleEvent.CONTENT_CHANGED);
|
private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS_OF_INTEREST = EnumSet.of(
|
||||||
|
IngestManager.IngestModuleEvent.DATA_ADDED,
|
||||||
|
IngestManager.IngestModuleEvent.CONTENT_CHANGED,
|
||||||
|
IngestManager.IngestModuleEvent.FILE_DONE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A RefreshTask is scheduled to run when an event arrives and there isn't
|
* A RefreshTask is scheduled to run when an event arrives and there isn't
|
||||||
@ -96,7 +99,8 @@ public class RefreshThrottler {
|
|||||||
pcl = (PropertyChangeEvent evt) -> {
|
pcl = (PropertyChangeEvent evt) -> {
|
||||||
String eventType = evt.getPropertyName();
|
String eventType = evt.getPropertyName();
|
||||||
if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())
|
if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())
|
||||||
|| eventType.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())) {
|
|| eventType.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())
|
||||||
|
|| eventType.equals(IngestManager.IngestModuleEvent.FILE_DONE.toString())) {
|
||||||
if (!refresher.isRefreshRequired(evt)) {
|
if (!refresher.isRefreshRequired(evt)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user