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