Added progress bar (using Progress API) for the ingest worker which shows progress for all services.

This commit is contained in:
adam-m 2012-01-25 18:04:38 -05:00
parent 9b460ac359
commit a0dff53d16

View File

@ -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