mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +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;
|
||||||
@ -98,7 +100,7 @@ public class IngestManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.log(Level.INFO, "Queues: " + imageQueue.toString() + " " + fsContentQueue.toString());
|
logger.log(Level.INFO, "Queues: " + imageQueue.toString() + " " + fsContentQueue.toString());
|
||||||
|
|
||||||
boolean start = false;
|
boolean start = false;
|
||||||
if (ingester == null) {
|
if (ingester == null) {
|
||||||
start = true;
|
start = true;
|
||||||
@ -218,6 +220,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
|
||||||
@ -239,6 +249,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
|
||||||
@ -277,6 +295,10 @@ public class IngestManager {
|
|||||||
boolean hasNext() {
|
boolean hasNext() {
|
||||||
return !fsContentUnits.isEmpty();
|
return !fsContentUnits.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getCount() {
|
||||||
|
return fsContentUnits.size();
|
||||||
|
}
|
||||||
|
|
||||||
QueueUnit<FsContent, IngestServiceFsContent> dequeue() {
|
QueueUnit<FsContent, IngestServiceFsContent> dequeue() {
|
||||||
if (!hasNext()) {
|
if (!hasNext()) {
|
||||||
@ -339,6 +361,10 @@ public class IngestManager {
|
|||||||
boolean hasNext() {
|
boolean hasNext() {
|
||||||
return !imageUnits.isEmpty();
|
return !imageUnits.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getCount() {
|
||||||
|
return imageUnits.size();
|
||||||
|
}
|
||||||
|
|
||||||
QueueUnit<Image, IngestServiceImage> dequeue() {
|
QueueUnit<Image, IngestServiceImage> dequeue() {
|
||||||
if (!hasNext()) {
|
if (!hasNext()) {
|
||||||
@ -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,14 +514,30 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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