mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 10:17:41 +00:00
Added progress bar (using Progress API) for the ingest worker which shows progress for all services.
This commit is contained in:
parent
9b460ac359
commit
a0dff53d16
@ -33,6 +33,8 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.SwingWorker;
|
||||
import org.netbeans.api.progress.ProgressHandle;
|
||||
import org.netbeans.api.progress.ProgressHandleFactory;
|
||||
import org.openide.util.Lookup;
|
||||
import org.sleuthkit.datamodel.FsContent;
|
||||
import org.sleuthkit.datamodel.Image;
|
||||
@ -219,6 +221,14 @@ public class IngestManager {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private int getNumFsContents() {
|
||||
int ret = 0;
|
||||
synchronized (queueLock) {
|
||||
ret = fsContentQueue.getCount();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* get next Image to process
|
||||
* the queue of Images to process is maintained internally
|
||||
@ -240,6 +250,14 @@ public class IngestManager {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private int getNumImages() {
|
||||
int ret = 0;
|
||||
synchronized (queueLock) {
|
||||
ret = imageQueue.getCount();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//manages queue of pending FsContent and IngestServiceFsContent to use on that content
|
||||
//TODO in future content sort will be maintained based on priorities
|
||||
private class FsContentQueue {
|
||||
@ -278,6 +296,10 @@ public class IngestManager {
|
||||
return !fsContentUnits.isEmpty();
|
||||
}
|
||||
|
||||
int getCount() {
|
||||
return fsContentUnits.size();
|
||||
}
|
||||
|
||||
QueueUnit<FsContent, IngestServiceFsContent> dequeue() {
|
||||
if (!hasNext()) {
|
||||
throw new UnsupportedOperationException("FsContent processing queue is empty");
|
||||
@ -340,6 +362,10 @@ public class IngestManager {
|
||||
return !imageUnits.isEmpty();
|
||||
}
|
||||
|
||||
int getCount() {
|
||||
return imageUnits.size();
|
||||
}
|
||||
|
||||
QueueUnit<Image, IngestServiceImage> dequeue() {
|
||||
if (!hasNext()) {
|
||||
throw new UnsupportedOperationException("Image processing queue is empty");
|
||||
@ -460,6 +486,7 @@ public class IngestManager {
|
||||
private class IngestThread extends SwingWorker {
|
||||
|
||||
private Logger logger = Logger.getLogger(IngestThread.class.getName());
|
||||
private ProgressHandle progress;
|
||||
|
||||
@Override
|
||||
protected Object doInBackground() throws Exception {
|
||||
@ -467,6 +494,13 @@ public class IngestManager {
|
||||
logger.log(Level.INFO, "Starting background processing");
|
||||
stats.start();
|
||||
|
||||
progress = ProgressHandleFactory.createHandle("Ingesting");
|
||||
|
||||
progress.start();
|
||||
progress.switchToIndeterminate();
|
||||
int numImages = getNumImages();
|
||||
progress.switchToDeterminate(numImages);
|
||||
int processedImages = 0;
|
||||
//process image queue
|
||||
while (hasNextImage()) {
|
||||
QueueUnit<Image, IngestServiceImage> unit = getNextImage();
|
||||
@ -480,6 +514,17 @@ public class IngestManager {
|
||||
|
||||
try {
|
||||
service.process(unit.content);
|
||||
//check if new files enqueued
|
||||
int newImages = getNumImages();
|
||||
if (newImages > numImages) {
|
||||
numImages = newImages;
|
||||
processedImages = 0;
|
||||
progress.switchToIndeterminate();
|
||||
progress.switchToDeterminate(numImages);
|
||||
|
||||
}
|
||||
progress.progress("Images (" + service.getName() + ")", ++processedImages);
|
||||
--numImages;
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.INFO, "Exception from service: " + service.getName(), e);
|
||||
stats.addError(service);
|
||||
@ -487,7 +532,12 @@ public class IngestManager {
|
||||
}
|
||||
}
|
||||
|
||||
progress.switchToIndeterminate();
|
||||
int numFsContents = getNumFsContents();
|
||||
progress.switchToDeterminate(numFsContents);
|
||||
int processedFiles = 0;
|
||||
//process fscontents queue
|
||||
progress.progress("Running file ingest services.");
|
||||
while (hasNextFsContent()) {
|
||||
QueueUnit<FsContent, IngestServiceFsContent> unit = getNextFsContent();
|
||||
for (IngestServiceFsContent service : unit.services) {
|
||||
@ -499,6 +549,17 @@ public class IngestManager {
|
||||
}
|
||||
try {
|
||||
service.process(unit.content);
|
||||
int newFsContents = getNumFsContents();
|
||||
if (newFsContents > numFsContents) {
|
||||
//update progress bar if new enqueued
|
||||
numFsContents = newFsContents;
|
||||
processedFiles = 0;
|
||||
progress.switchToIndeterminate();
|
||||
progress.switchToDeterminate(numFsContents);
|
||||
|
||||
}
|
||||
progress.progress("Files (" + service.getName() + ")", ++processedFiles);
|
||||
--numFsContents;
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.INFO, "Exception from service: " + service.getName(), e);
|
||||
stats.addError(service);
|
||||
@ -533,7 +594,10 @@ public class IngestManager {
|
||||
|
||||
} catch (Exception ex) {
|
||||
logger.log(Level.SEVERE, "Fatal error during ingest.", ex);
|
||||
} finally {
|
||||
progress.finish();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user