From 9b144e7b2d080f49566b8d830f3c39dab6a5e701 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Fri, 5 Apr 2019 20:07:18 -0400 Subject: [PATCH 01/11] Initial commit of admin cleanup manifest znodes action --- .../AutoIngestJobNodeDataCollector.java | 58 ++++++++++++ .../experimental/autoingest/Bundle.properties | 1 + .../autoingest/Bundle.properties-MERGED | 2 + .../autoingest/CaseNodesCleanupTask.java | 1 - .../CasesDashboardTopComponent.form | 23 +++-- .../CasesDashboardTopComponent.java | 26 +++++- .../ManifestNodesCleanupAction.java | 44 +++++++++ .../autoingest/ManifestNodesCleanupTask.java | 89 +++++++++++++++++++ 8 files changed, 236 insertions(+), 8 deletions(-) create mode 100755 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java create mode 100755 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java create mode 100755 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java new file mode 100755 index 0000000000..491068ffb7 --- /dev/null +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java @@ -0,0 +1,58 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019-2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.experimental.autoingest; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import org.sleuthkit.autopsy.coordinationservice.CoordinationService; +import org.sleuthkit.autopsy.coordinationservice.CoordinationService.CoordinationServiceException; +import org.sleuthkit.autopsy.coreutils.Logger; + +/** + * Collects the auto ingest job node data stored in the manifest file + * coordination service nodes. + */ +final class AutoIngestJobNodeDataCollector { + + private static final Logger logger = Logger.getLogger(AutoIngestJobNodeDataCollector.class.getName()); + + static List getNodeData() throws CoordinationServiceException, InterruptedException { + List nodeDataList = new ArrayList<>(); + CoordinationService coordinationService = CoordinationService.getInstance(); + List nodePaths = coordinationService.getNodeList(CoordinationService.CategoryNode.MANIFESTS); + for (String nodePath : nodePaths) { + try { + final byte[] nodeBytes = coordinationService.getNodeData(CoordinationService.CategoryNode.MANIFESTS, nodePath); + AutoIngestJobNodeData nodeData = new AutoIngestJobNodeData(nodeBytes); + nodeDataList.add(nodeData); + } catch (AutoIngestJobNodeData.InvalidDataException ex) { + logger.log(Level.WARNING, String.format("Error reading node data from manifest file coordination service node %s", nodePath), ex); // NON-NLS + } + } + return nodeDataList; + } + + /** + * Prevents instantiation of this utility class. + */ + private AutoIngestJobNodeDataCollector() { + } + +} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties index e756c0b2ad..e874b80bfd 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties @@ -256,3 +256,4 @@ AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress CasesDashboardTopComponent.cleanCaseNodesButton.text=Clean Case Znodes +CasesDashboardTopComponent.cleanManifestNodesButton.text=Clean Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 4a186b26f2..138eeaec4a 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -197,6 +197,7 @@ DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases +ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. OpenAutoIngestLogAction.menuItemText=Open Auto Ingest Log File @@ -432,3 +433,4 @@ AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress CasesDashboardTopComponent.cleanCaseNodesButton.text=Clean Case Znodes +CasesDashboardTopComponent.cleanManifestNodesButton.text=Clean Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java index 7cdb29711d..7f5f138b49 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java @@ -21,7 +21,6 @@ package org.sleuthkit.autopsy.experimental.autoingest; import java.io.File; import java.nio.file.Path; import java.util.List; -import java.util.concurrent.Callable; import java.util.logging.Level; import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeDataCollector; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form index dd74bacc5c..414589d0f0 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form @@ -20,10 +20,12 @@ - + - - + + + + @@ -40,8 +42,9 @@ - - + + + @@ -73,5 +76,15 @@ + + + + + + + + + + diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java index 5986593f88..e9b9bb9bb9 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java @@ -120,6 +120,7 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex refreshButton = new javax.swing.JButton(); caseBrowserScrollPane = new javax.swing.JScrollPane(); cleanCaseNodesButton = new javax.swing.JButton(); + cleanManifestNodesButton = new javax.swing.JButton(); org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.refreshButton.text")); // NOI18N refreshButton.addActionListener(new java.awt.event.ActionListener() { @@ -135,6 +136,13 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex } }); + org.openide.awt.Mnemonics.setLocalizedText(cleanManifestNodesButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.cleanManifestNodesButton.text")); // NOI18N + cleanManifestNodesButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cleanManifestNodesButtonActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -146,11 +154,16 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex .addComponent(refreshButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cleanCaseNodesButton) - .addGap(0, 313, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cleanManifestNodesButton) + .addGap(0, 44, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(caseBrowserScrollPane) .addContainerGap()))) ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cleanCaseNodesButton, cleanManifestNodesButton, refreshButton}); + layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() @@ -159,9 +172,13 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(refreshButton) - .addComponent(cleanCaseNodesButton)) + .addComponent(cleanCaseNodesButton) + .addComponent(cleanManifestNodesButton)) .addContainerGap()) ); + + layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cleanCaseNodesButton, cleanManifestNodesButton, refreshButton}); + }// //GEN-END:initComponents private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed @@ -172,9 +189,14 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex new CaseNodesCleanupAction().actionPerformed(evt); }//GEN-LAST:event_cleanCaseNodesButtonActionPerformed + private void cleanManifestNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanManifestNodesButtonActionPerformed + new ManifestNodesCleanupAction().actionPerformed(evt); + }//GEN-LAST:event_cleanManifestNodesButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane caseBrowserScrollPane; private javax.swing.JButton cleanCaseNodesButton; + private javax.swing.JButton cleanManifestNodesButton; private javax.swing.JButton refreshButton; // End of variables declaration//GEN-END:variables diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java new file mode 100755 index 0000000000..20269ea024 --- /dev/null +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java @@ -0,0 +1,44 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.experimental.autoingest; + +import java.awt.event.ActionEvent; +import java.util.concurrent.FutureTask; +import javax.swing.AbstractAction; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.progress.AppFrameProgressBar; +import org.sleuthkit.autopsy.progress.TaskCancellable; + +/** + * An action class that kicks off a cancellable manifest file nodes cleanup task + * that runs in a background thread and reports progress using an application + * frame progress bar. + */ +public class ManifestNodesCleanupAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + @Override + @NbBundle.Messages({ + "ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes" + }) + public void actionPerformed(ActionEvent event) { + final AppFrameProgressBar progress = new AppFrameProgressBar(Bundle.ManifestNodesCleanupAction_progressDisplayName()); + final TaskCancellable taskCanceller = new TaskCancellable(progress); + progress.setCancellationBehavior(taskCanceller); + final Runnable task = new ManifestNodesCleanupTask(progress); + final FutureTask future = new FutureTask<>(task, null); + taskCanceller.setFuture(future); + new Thread(future).start(); + } + + @Override + public ManifestNodesCleanupAction clone() throws CloneNotSupportedException { + super.clone(); + throw new CloneNotSupportedException(); + } + +} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java new file mode 100755 index 0000000000..d2e18fb08c --- /dev/null +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java @@ -0,0 +1,89 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019-2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.experimental.autoingest; + +import java.io.File; +import java.nio.file.Path; +import java.util.List; +import java.util.logging.Level; +import org.sleuthkit.autopsy.coordinationservice.CoordinationService; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.progress.ProgressIndicator; + +/** + * A task class for cleaning up auto ingest job coordination service nodes for + * which there is no longer a corresponding manifest file. + */ +final class ManifestNodesCleanupTask implements Runnable { + + private static final Logger logger = Logger.getLogger(ManifestNodesCleanupTask.class.getName()); + private final ProgressIndicator progress; + + /** + * Constucts an instance of a task for cleaning up case coordination service + * nodes for which there is no longer a corresponding case. + * + * @param progress + */ + ManifestNodesCleanupTask(ProgressIndicator progress) { + this.progress = progress; + } + + @Override + public void run() { + + CoordinationService coordinationService; + try { + coordinationService = CoordinationService.getInstance(); + } catch (CoordinationService.CoordinationServiceException ex) { + logger.log(Level.WARNING, "Error connecting to the coordination service", ex); // NON-NLS + return; + } + + List nodeDataList; + try { + nodeDataList = AutoIngestJobNodeDataCollector.getNodeData(); + } catch (CoordinationService.CoordinationServiceException ex) { + logger.log(Level.WARNING, "Error collecting auto ingest job node data", ex); // NON-NLS + return; + } catch (InterruptedException ex) { + logger.log(Level.WARNING, "Unexpected interrupt while collecting auot ingest job node data", ex); // NON-NLS + return; + } + + for (AutoIngestJobNodeData nodeData : nodeDataList) { + final String caseName = nodeData.getCaseName(); + final Path manifestFilePath = nodeData.getManifestFilePath(); + final File manifestFile = manifestFilePath.toFile(); + if (!manifestFile.exists()) { + try { + coordinationService.deleteNode(CoordinationService.CategoryNode.MANIFESTS, manifestFilePath.toString()); + } catch (CoordinationService.CoordinationServiceException ex) { + if (!DeleteCaseUtils.isNoNodeException(ex)) { + logger.log(Level.SEVERE, String.format("Error deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + } + } catch (InterruptedException ex) { + logger.log(Level.WARNING, String.format("Unexpected interrupt while deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + return; + } + } + } + } + +} From 3e0a6a708456ae97845dcc617878b76792da8593 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Mon, 8 Apr 2019 13:11:27 -0400 Subject: [PATCH 02/11] Refactor of orphan node cleanup --- .../autopsy/experimental/autoingest/CaseNodesCleanupAction.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java index a54308047d..2763ba2138 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java @@ -19,10 +19,8 @@ package org.sleuthkit.autopsy.experimental.autoingest; import java.awt.event.ActionEvent; -import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import javax.swing.AbstractAction; -import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.progress.AppFrameProgressBar; import org.sleuthkit.autopsy.progress.TaskCancellable; From 9a0c98b00dbd69971f504e4b7c8697ab2a5e49db Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Mon, 8 Apr 2019 13:11:42 -0400 Subject: [PATCH 03/11] Refactor of orphan node cleanup --- .../autoingest/BackgroundTaskAction.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java new file mode 100755 index 0000000000..f4a81efc88 --- /dev/null +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java @@ -0,0 +1,70 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019-2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.experimental.autoingest; + +import java.awt.event.ActionEvent; +import java.util.concurrent.FutureTask; +import javax.swing.AbstractAction; +import org.sleuthkit.autopsy.progress.AppFrameProgressBar; +import org.sleuthkit.autopsy.progress.ProgressIndicator; +import org.sleuthkit.autopsy.progress.TaskCancellable; + +/** + * A base class for action classes that kick off a cancellable task that runs in + * a background thread and reports progress using an application frame progress + * bar. + */ +abstract class BackgroundTaskAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + private final String progressDisplayName; + + /** + * Constructs the base class part of action classes that kick off a + * cancellable task that runs in a background thread and reports progress + * using an application frame progress bar. + * + * @param name The name of the action. + * @param progressDisplayName The display name for the progress bar. + */ + BackgroundTaskAction(String name, String progressDisplayName) { + super(name); + this.progressDisplayName = progressDisplayName; + } + + @Override + public void actionPerformed(ActionEvent event) { + final AppFrameProgressBar progress = new AppFrameProgressBar(progressDisplayName); + final TaskCancellable taskCanceller = new TaskCancellable(progress); + progress.setCancellationBehavior(taskCanceller); + final Runnable task = new CaseNodesCleanupTask(progress); + final FutureTask future = new FutureTask<>(task, null); + taskCanceller.setFuture(future); + new Thread(future).start(); + } + + abstract Runnable getTask(ProgressIndicator progress); + + @Override + public BackgroundTaskAction clone() throws CloneNotSupportedException { + super.clone(); + throw new CloneNotSupportedException(); + } + +} From 298b1dfa1e4f0757311ac2e1560126770866058e Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Mon, 8 Apr 2019 13:56:39 -0400 Subject: [PATCH 04/11] Refactor and polish orphan manifest file znode cleanup --- .../autoingest/BackgroundTaskAction.java | 20 +++-- .../autoingest/Bundle.properties-MERGED | 7 +- .../autoingest/CaseNodesCleanupAction.java | 29 +++---- .../autoingest/CaseNodesCleanupTask.java | 2 +- .../ManifestNodesCleanupAction.java | 50 +++++++---- .../autoingest/ManifestNodesCleanupTask.java | 87 ++++++++++++------- 6 files changed, 124 insertions(+), 71 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java index f4a81efc88..e6853119a0 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java @@ -40,11 +40,11 @@ abstract class BackgroundTaskAction extends AbstractAction { * cancellable task that runs in a background thread and reports progress * using an application frame progress bar. * - * @param name The name of the action. + * @param actionName The name of the action. * @param progressDisplayName The display name for the progress bar. */ - BackgroundTaskAction(String name, String progressDisplayName) { - super(name); + BackgroundTaskAction(String actionName, String progressDisplayName) { + super(actionName); this.progressDisplayName = progressDisplayName; } @@ -53,14 +53,24 @@ abstract class BackgroundTaskAction extends AbstractAction { final AppFrameProgressBar progress = new AppFrameProgressBar(progressDisplayName); final TaskCancellable taskCanceller = new TaskCancellable(progress); progress.setCancellationBehavior(taskCanceller); - final Runnable task = new CaseNodesCleanupTask(progress); + final Runnable task = getTask(progress); final FutureTask future = new FutureTask<>(task, null); taskCanceller.setFuture(future); new Thread(future).start(); } + /** + * Gets the background task to be executed. The task is expected to report + * its progress using the supplied progress indicator and to check for + * cancellation by checking to see if the thread it is running in has been + * interrupted. + * + * @param progress A progress indicator for the task. + * + * @return The Runnnable task. + */ abstract Runnable getTask(ProgressIndicator progress); - + @Override public BackgroundTaskAction clone() throws CloneNotSupportedException { super.clone(); diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 46ee7458f3..69379ab1a8 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -142,7 +142,7 @@ CaseNodesCleanupAction.progressDisplayName=Cleanup Case Znodes CaseNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service... # {0} - node path CaseNodesCleanupTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}... -CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case nodes... +CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes... CaseNodesCleanupTask.progress.startMessage=Starting orphaned case znode cleanup... ConfirmationDialog.DoNotDelete=Do not delete ConfirmationDialog.Delete=Permanently delete @@ -212,6 +212,11 @@ DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest fil DeleteCaseTask.progress.startMessage=Starting deletion... HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes +ManifestNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service... +# {0} - node path +ManifestNodesCleanupTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}... +ManifestNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes... +ManifestNodesCleanupTask.progress.startMessage=Starting orphaned manifest file znode cleanup... OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. OpenAutoIngestLogAction.menuItemText=Open Auto Ingest Log File diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java index 2763ba2138..2e3a4cc4e6 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java @@ -18,34 +18,33 @@ */ package org.sleuthkit.autopsy.experimental.autoingest; -import java.awt.event.ActionEvent; -import java.util.concurrent.FutureTask; -import javax.swing.AbstractAction; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.progress.AppFrameProgressBar; -import org.sleuthkit.autopsy.progress.TaskCancellable; +import org.sleuthkit.autopsy.progress.ProgressIndicator; /** * An action class that kicks off a cancellable case nodes cleanup task that * runs in a background thread and reports progress using an application frame * progress bar. */ -final class CaseNodesCleanupAction extends AbstractAction { +final class CaseNodesCleanupAction extends BackgroundTaskAction { private static final long serialVersionUID = 1L; - @Override + /** + * Constructs an instance of an action class that kicks off a cancellable + * case nodes cleanup task that runs in a background thread and reports + * progress using an application frame progress bar. + */ @NbBundle.Messages({ "CaseNodesCleanupAction.progressDisplayName=Cleanup Case Znodes" }) - public void actionPerformed(ActionEvent event) { - final AppFrameProgressBar progress = new AppFrameProgressBar(Bundle.CaseNodesCleanupAction_progressDisplayName()); - final TaskCancellable taskCanceller = new TaskCancellable(progress); - progress.setCancellationBehavior(taskCanceller); - final Runnable task = new CaseNodesCleanupTask(progress); - final FutureTask future = new FutureTask<>(task, null); - taskCanceller.setFuture(future); - new Thread(future).start(); + CaseNodesCleanupAction() { + super(Bundle.CaseNodesCleanupAction_progressDisplayName(), Bundle.CaseNodesCleanupAction_progressDisplayName()); + } + + @Override + Runnable getTask(ProgressIndicator progress) { + return new CaseNodesCleanupTask(progress); } @Override diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java index 79addde576..3c9ec8c601 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java @@ -53,7 +53,7 @@ final class CaseNodesCleanupTask implements Runnable { @NbBundle.Messages({ "CaseNodesCleanupTask.progress.startMessage=Starting orphaned case znode cleanup...", "CaseNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service...", - "CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case nodes..." + "CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes..." }) public void run() { progress.start(Bundle.CaseNodesCleanupTask_progress_startMessage()); diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java index 20269ea024..0ef46cee83 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java @@ -1,44 +1,56 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Autopsy Forensic Browser + * + * Copyright 2019-2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.sleuthkit.autopsy.experimental.autoingest; -import java.awt.event.ActionEvent; -import java.util.concurrent.FutureTask; -import javax.swing.AbstractAction; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.progress.AppFrameProgressBar; -import org.sleuthkit.autopsy.progress.TaskCancellable; +import org.sleuthkit.autopsy.progress.ProgressIndicator; /** * An action class that kicks off a cancellable manifest file nodes cleanup task * that runs in a background thread and reports progress using an application * frame progress bar. */ -public class ManifestNodesCleanupAction extends AbstractAction { +public class ManifestNodesCleanupAction extends BackgroundTaskAction { private static final long serialVersionUID = 1L; - @Override + /** + * Constructs an instance of an action class that kicks off a cancellable + * manifest file nodes cleanup task that runs in a background thread and + * reports progress using an application frame progress bar. + */ @NbBundle.Messages({ "ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes" }) - public void actionPerformed(ActionEvent event) { - final AppFrameProgressBar progress = new AppFrameProgressBar(Bundle.ManifestNodesCleanupAction_progressDisplayName()); - final TaskCancellable taskCanceller = new TaskCancellable(progress); - progress.setCancellationBehavior(taskCanceller); - final Runnable task = new ManifestNodesCleanupTask(progress); - final FutureTask future = new FutureTask<>(task, null); - taskCanceller.setFuture(future); - new Thread(future).start(); + ManifestNodesCleanupAction() { + super(Bundle.ManifestNodesCleanupAction_progressDisplayName(), Bundle.ManifestNodesCleanupAction_progressDisplayName()); } + + @Override + Runnable getTask(ProgressIndicator progress) { + return new ManifestNodesCleanupTask(progress); + } @Override public ManifestNodesCleanupAction clone() throws CloneNotSupportedException { super.clone(); throw new CloneNotSupportedException(); } - + } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java index d2e18fb08c..88fd30ca12 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java @@ -22,6 +22,7 @@ import java.io.File; import java.nio.file.Path; import java.util.List; import java.util.logging.Level; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coordinationservice.CoordinationService; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.progress.ProgressIndicator; @@ -46,43 +47,69 @@ final class ManifestNodesCleanupTask implements Runnable { } @Override + @NbBundle.Messages({ + "ManifestNodesCleanupTask.progress.startMessage=Starting orphaned manifest file znode cleanup...", + "ManifestNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service...", + "ManifestNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes...", + "# {0} - node path", "ManifestNodesCleanupTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}..." + }) public void run() { - - CoordinationService coordinationService; + progress.start(Bundle.ManifestNodesCleanupTask_progress_startMessage()); try { - coordinationService = CoordinationService.getInstance(); - } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error connecting to the coordination service", ex); // NON-NLS - return; - } + progress.progress(Bundle.ManifestNodesCleanupTask_progress_connectingToCoordSvc()); + logger.log(Level.INFO, "Connecting to the coordination service for orphan manifest file node clean up"); // NON-NLS + CoordinationService coordinationService; + try { + coordinationService = CoordinationService.getInstance(); + } catch (CoordinationService.CoordinationServiceException ex) { + logger.log(Level.WARNING, "Error connecting to the coordination service", ex); // NON-NLS + return; + } - List nodeDataList; - try { - nodeDataList = AutoIngestJobNodeDataCollector.getNodeData(); - } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error collecting auto ingest job node data", ex); // NON-NLS - return; - } catch (InterruptedException ex) { - logger.log(Level.WARNING, "Unexpected interrupt while collecting auot ingest job node data", ex); // NON-NLS - return; - } + progress.progress(Bundle.ManifestNodesCleanupTask_progress_gettingCaseNodesListing()); + logger.log(Level.INFO, "Querying coordination service for case nodes for orphaned case node clean up"); // NON-NLS + List nodeDataList; + try { + nodeDataList = AutoIngestJobNodeDataCollector.getNodeData(); + } catch (CoordinationService.CoordinationServiceException ex) { + logger.log(Level.WARNING, "Error collecting auto ingest job node data", ex); // NON-NLS + return; + } catch (InterruptedException ex) { + logger.log(Level.WARNING, "Unexpected interrupt while collecting auto ingest job node data", ex); // NON-NLS + return; + } - for (AutoIngestJobNodeData nodeData : nodeDataList) { - final String caseName = nodeData.getCaseName(); - final Path manifestFilePath = nodeData.getManifestFilePath(); - final File manifestFile = manifestFilePath.toFile(); - if (!manifestFile.exists()) { - try { - coordinationService.deleteNode(CoordinationService.CategoryNode.MANIFESTS, manifestFilePath.toString()); - } catch (CoordinationService.CoordinationServiceException ex) { - if (!DeleteCaseUtils.isNoNodeException(ex)) { - logger.log(Level.SEVERE, String.format("Error deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + for (AutoIngestJobNodeData nodeData : nodeDataList) { + final String caseName = nodeData.getCaseName(); + final Path manifestFilePath = nodeData.getManifestFilePath(); + final File manifestFile = manifestFilePath.toFile(); + if (!manifestFile.exists()) { + try { + progress.progress(Bundle.ManifestNodesCleanupTask_progress_deletingOrphanedManifestNode(manifestFilePath)); + logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", manifestFilePath, caseName)); // NON-NLS + coordinationService.deleteNode(CoordinationService.CategoryNode.MANIFESTS, manifestFilePath.toString()); + } catch (CoordinationService.CoordinationServiceException ex) { + if (!DeleteCaseUtils.isNoNodeException(ex)) { + logger.log(Level.SEVERE, String.format("Error deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + } + } catch (InterruptedException ex) { + logger.log(Level.WARNING, String.format("Unexpected interrupt while deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + return; } - } catch (InterruptedException ex) { - logger.log(Level.WARNING, String.format("Unexpected interrupt while deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS - return; } } + } catch (Exception ex) { + /* + * This is an unexpected runtime exceptions firewall. It is here + * because this task is designed to be able to be run in scenarios + * where there is no call to get() on a Future associated with + * the task, so this ensures that any such errors get logged. + */ + logger.log(Level.SEVERE, "Unexpected error during orphan manifest file znode cleanup", ex); // NON-NLS + throw ex; + + } finally { + progress.finish(); } } From b384cae76537c73519259c9e618bd6ae81d93282 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Mon, 8 Apr 2019 14:04:26 -0400 Subject: [PATCH 05/11] Refactor and polish orphan manifest file znode cleanup --- .../experimental/autoingest/Bundle.properties | 4 +-- .../autoingest/Bundle.properties-MERGED | 4 +-- .../CasesDashboardTopComponent.form | 8 +++--- .../CasesDashboardTopComponent.java | 6 ++--- ....java => DeleteOrphanCaseNodesAction.java} | 18 ++++++------- ...sk.java => DeleteOrphanCaseNodesTask.java} | 10 +++---- ...a => DeleteOrphanManifestNodesAction.java} | 26 +++++++++---------- ...ava => DeleteOrphanManifestNodesTask.java} | 6 ++--- 8 files changed, 41 insertions(+), 41 deletions(-) rename Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/{CaseNodesCleanupAction.java => DeleteOrphanCaseNodesAction.java} (70%) rename Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/{CaseNodesCleanupTask.java => DeleteOrphanCaseNodesTask.java} (95%) rename Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/{ManifestNodesCleanupAction.java => DeleteOrphanManifestNodesAction.java} (69%) rename Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/{ManifestNodesCleanupTask.java => DeleteOrphanManifestNodesTask.java} (95%) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties index e874b80bfd..7316b0308c 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties @@ -255,5 +255,5 @@ AinStatusDashboard.nodeStatusTableTitle.text=Auto Ingest Nodes AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress -CasesDashboardTopComponent.cleanCaseNodesButton.text=Clean Case Znodes -CasesDashboardTopComponent.cleanManifestNodesButton.text=Clean Manifest Znodes +CasesDashboardTopComponent.cleanCaseNodesButton.text=Delete Orphan Case Znodes +CasesDashboardTopComponent.cleanManifestNodesButton.text=Delete Orphan Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 69379ab1a8..8ba1f65c3c 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -452,5 +452,5 @@ AinStatusDashboard.nodeStatusTableTitle.text=Auto Ingest Nodes AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress -CasesDashboardTopComponent.cleanCaseNodesButton.text=Clean Case Znodes -CasesDashboardTopComponent.cleanManifestNodesButton.text=Clean Manifest Znodes +CasesDashboardTopComponent.cleanCaseNodesButton.text=Delete Orphan Case Znodes +CasesDashboardTopComponent.cleanManifestNodesButton.text=Delete Orphan Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form index 414589d0f0..8e7d4753a6 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form @@ -20,12 +20,12 @@ - + - + - - + + diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java index e9b9bb9bb9..3293969bd5 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java @@ -156,7 +156,7 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex .addComponent(cleanCaseNodesButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cleanManifestNodesButton) - .addGap(0, 44, Short.MAX_VALUE)) + .addGap(0, 0, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(caseBrowserScrollPane) .addContainerGap()))) @@ -186,11 +186,11 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex }//GEN-LAST:event_refreshButtonActionPerformed private void cleanCaseNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanCaseNodesButtonActionPerformed - new CaseNodesCleanupAction().actionPerformed(evt); + new DeleteOrphanCaseNodesAction().actionPerformed(evt); }//GEN-LAST:event_cleanCaseNodesButtonActionPerformed private void cleanManifestNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanManifestNodesButtonActionPerformed - new ManifestNodesCleanupAction().actionPerformed(evt); + new DeleteOrphanManifestNodesAction().actionPerformed(evt); }//GEN-LAST:event_cleanManifestNodesButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java similarity index 70% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java rename to Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java index 2e3a4cc4e6..8bf53de72b 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java @@ -22,33 +22,33 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.progress.ProgressIndicator; /** - * An action class that kicks off a cancellable case nodes cleanup task that - * runs in a background thread and reports progress using an application frame - * progress bar. + * An action class that kicks off a cancellable orphaned case nodes deletion + * task that runs in a background thread and reports progress using an + * application frame progress bar. */ -final class CaseNodesCleanupAction extends BackgroundTaskAction { +final class DeleteOrphanCaseNodesAction extends BackgroundTaskAction { private static final long serialVersionUID = 1L; /** * Constructs an instance of an action class that kicks off a cancellable - * case nodes cleanup task that runs in a background thread and reports - * progress using an application frame progress bar. + * orphaned case nodes deletion task that runs in a background thread and + * reports progress using an application frame progress bar. */ @NbBundle.Messages({ "CaseNodesCleanupAction.progressDisplayName=Cleanup Case Znodes" }) - CaseNodesCleanupAction() { + DeleteOrphanCaseNodesAction() { super(Bundle.CaseNodesCleanupAction_progressDisplayName(), Bundle.CaseNodesCleanupAction_progressDisplayName()); } @Override Runnable getTask(ProgressIndicator progress) { - return new CaseNodesCleanupTask(progress); + return new DeleteOrphanCaseNodesTask(progress); } @Override - public CaseNodesCleanupAction clone() throws CloneNotSupportedException { + public DeleteOrphanCaseNodesAction clone() throws CloneNotSupportedException { super.clone(); throw new CloneNotSupportedException(); } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java similarity index 95% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java rename to Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java index 3c9ec8c601..c6594308d3 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseNodesCleanupTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java @@ -31,21 +31,21 @@ import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.progress.ProgressIndicator; /** - * Task for cleaning up case coordination service nodes for which there is no + * Task for deleting case coordination service nodes for which there is no * longer a corresponding case. */ -final class CaseNodesCleanupTask implements Runnable { +final class DeleteOrphanCaseNodesTask implements Runnable { private static final Logger logger = AutoIngestDashboardLogger.getLogger(); private final ProgressIndicator progress; /** - * Constucts an instance of a task for cleaning up case coordination service + * Constucts an instance of a task for deleting case coordination service * nodes for which there is no longer a corresponding case. * * @param progress */ - CaseNodesCleanupTask(ProgressIndicator progress) { + DeleteOrphanCaseNodesTask(ProgressIndicator progress) { this.progress = progress; } @@ -115,7 +115,7 @@ final class CaseNodesCleanupTask implements Runnable { */ logger.log(Level.SEVERE, "Unexpected error during orphan case znode cleanup", ex); // NON-NLS throw ex; - + } finally { progress.finish(); } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java similarity index 69% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java rename to Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java index 0ef46cee83..0ac3607c01 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java @@ -22,33 +22,33 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.progress.ProgressIndicator; /** - * An action class that kicks off a cancellable manifest file nodes cleanup task - * that runs in a background thread and reports progress using an application - * frame progress bar. + * An action class that kicks off a cancellable orphaned manifest file nodes + * deletion task that runs in a background thread and reports progress using an + * application frame progress bar. */ -public class ManifestNodesCleanupAction extends BackgroundTaskAction { +public class DeleteOrphanManifestNodesAction extends BackgroundTaskAction { private static final long serialVersionUID = 1L; /** * Constructs an instance of an action class that kicks off a cancellable - * manifest file nodes cleanup task that runs in a background thread and - * reports progress using an application frame progress bar. + * orphaned manifest file nodes deletion task that runs in a background + * thread and reports progress using an application frame progress bar. */ @NbBundle.Messages({ "ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes" }) - ManifestNodesCleanupAction() { + DeleteOrphanManifestNodesAction() { super(Bundle.ManifestNodesCleanupAction_progressDisplayName(), Bundle.ManifestNodesCleanupAction_progressDisplayName()); } - - @Override - Runnable getTask(ProgressIndicator progress) { - return new ManifestNodesCleanupTask(progress); - } @Override - public ManifestNodesCleanupAction clone() throws CloneNotSupportedException { + Runnable getTask(ProgressIndicator progress) { + return new DeleteOrphanManifestNodesTask(progress); + } + + @Override + public DeleteOrphanManifestNodesAction clone() throws CloneNotSupportedException { super.clone(); throw new CloneNotSupportedException(); } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java similarity index 95% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java rename to Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java index 88fd30ca12..d17fb711ff 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ManifestNodesCleanupTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java @@ -31,9 +31,9 @@ import org.sleuthkit.autopsy.progress.ProgressIndicator; * A task class for cleaning up auto ingest job coordination service nodes for * which there is no longer a corresponding manifest file. */ -final class ManifestNodesCleanupTask implements Runnable { +final class DeleteOrphanManifestNodesTask implements Runnable { - private static final Logger logger = Logger.getLogger(ManifestNodesCleanupTask.class.getName()); + private static final Logger logger = Logger.getLogger(DeleteOrphanManifestNodesTask.class.getName()); private final ProgressIndicator progress; /** @@ -42,7 +42,7 @@ final class ManifestNodesCleanupTask implements Runnable { * * @param progress */ - ManifestNodesCleanupTask(ProgressIndicator progress) { + DeleteOrphanManifestNodesTask(ProgressIndicator progress) { this.progress = progress; } From ef6f979bd30d50d47153d36e6a4c0e92c43d2513 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:11:24 -0400 Subject: [PATCH 06/11] Clean up orphaned manifest node deletion --- .../autoingest/Bundle.properties-MERGED | 14 +++++++------- .../autoingest/DeleteOrphanCaseNodesAction.java | 4 ++-- .../DeleteOrphanManifestNodesAction.java | 4 ++-- .../DeleteOrphanManifestNodesTask.java | 16 ++++++++-------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 8ba1f65c3c..67c46d40b4 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -138,7 +138,6 @@ AutoIngestJobsNode.status.text=Status AutoIngestJobsPanel.waitNode.text=Please Wait... AutoIngestMetricsDialog.initReportText=Select a date above and click the 'Generate Metrics Report' button to generate\na metrics report. AutoIngestMetricsDialog.title.text=Auto Ingest Metrics -CaseNodesCleanupAction.progressDisplayName=Cleanup Case Znodes CaseNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service... # {0} - node path CaseNodesCleanupTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}... @@ -210,13 +209,14 @@ DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... # {0} - manifest file path DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... -HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases -ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes -ManifestNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service... +DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes +DeleteOrphanManifestNodesAction.progressDisplayName=Cleanup Manifest File Znodes +DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service... # {0} - node path -ManifestNodesCleanupTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}... -ManifestNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes... -ManifestNodesCleanupTask.progress.startMessage=Starting orphaned manifest file znode cleanup... +DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}... +DeleteOrphanManifestNodesTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes... +DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup... +HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. OpenAutoIngestLogAction.menuItemText=Open Auto Ingest Log File diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java index 8bf53de72b..dd4d461d43 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesAction.java @@ -36,10 +36,10 @@ final class DeleteOrphanCaseNodesAction extends BackgroundTaskAction { * reports progress using an application frame progress bar. */ @NbBundle.Messages({ - "CaseNodesCleanupAction.progressDisplayName=Cleanup Case Znodes" + "DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes" }) DeleteOrphanCaseNodesAction() { - super(Bundle.CaseNodesCleanupAction_progressDisplayName(), Bundle.CaseNodesCleanupAction_progressDisplayName()); + super(Bundle.DeleteOrphanCaseNodesAction_progressDisplayName(), Bundle.DeleteOrphanCaseNodesAction_progressDisplayName()); } @Override diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java index 0ac3607c01..e106b7a5de 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesAction.java @@ -36,10 +36,10 @@ public class DeleteOrphanManifestNodesAction extends BackgroundTaskAction { * thread and reports progress using an application frame progress bar. */ @NbBundle.Messages({ - "ManifestNodesCleanupAction.progressDisplayName=Cleanup Manifest File Znodes" + "DeleteOrphanManifestNodesAction.progressDisplayName=Cleanup Manifest File Znodes" }) DeleteOrphanManifestNodesAction() { - super(Bundle.ManifestNodesCleanupAction_progressDisplayName(), Bundle.ManifestNodesCleanupAction_progressDisplayName()); + super(Bundle.DeleteOrphanManifestNodesAction_progressDisplayName(), Bundle.DeleteOrphanManifestNodesAction_progressDisplayName()); } @Override diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java index d17fb711ff..ed957767c8 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java @@ -48,15 +48,15 @@ final class DeleteOrphanManifestNodesTask implements Runnable { @Override @NbBundle.Messages({ - "ManifestNodesCleanupTask.progress.startMessage=Starting orphaned manifest file znode cleanup...", - "ManifestNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service...", - "ManifestNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes...", - "# {0} - node path", "ManifestNodesCleanupTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}..." + "DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup...", + "DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service...", + "DeleteOrphanManifestNodesTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes...", + "# {0} - node path", "DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}..." }) public void run() { - progress.start(Bundle.ManifestNodesCleanupTask_progress_startMessage()); + progress.start(Bundle.DeleteOrphanManifestNodesTask_progress_startMessage()); try { - progress.progress(Bundle.ManifestNodesCleanupTask_progress_connectingToCoordSvc()); + progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_connectingToCoordSvc()); logger.log(Level.INFO, "Connecting to the coordination service for orphan manifest file node clean up"); // NON-NLS CoordinationService coordinationService; try { @@ -66,7 +66,7 @@ final class DeleteOrphanManifestNodesTask implements Runnable { return; } - progress.progress(Bundle.ManifestNodesCleanupTask_progress_gettingCaseNodesListing()); + progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_gettingCaseNodesListing()); logger.log(Level.INFO, "Querying coordination service for case nodes for orphaned case node clean up"); // NON-NLS List nodeDataList; try { @@ -85,7 +85,7 @@ final class DeleteOrphanManifestNodesTask implements Runnable { final File manifestFile = manifestFilePath.toFile(); if (!manifestFile.exists()) { try { - progress.progress(Bundle.ManifestNodesCleanupTask_progress_deletingOrphanedManifestNode(manifestFilePath)); + progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_deletingOrphanedManifestNode(manifestFilePath)); logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", manifestFilePath, caseName)); // NON-NLS coordinationService.deleteNode(CoordinationService.CategoryNode.MANIFESTS, manifestFilePath.toString()); } catch (CoordinationService.CoordinationServiceException ex) { From d8f75d58b3c852981ae4e0bbeac046409aa8376d Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:17:12 -0400 Subject: [PATCH 07/11] Clean up orphaned manifest node deletion --- .../experimental/autoingest/Bundle.properties | 4 +- .../autoingest/Bundle.properties-MERGED | 14 +++---- .../CasesDashboardTopComponent.form | 20 +++++----- .../CasesDashboardTopComponent.java | 40 +++++++++---------- .../autoingest/DeleteOrphanCaseNodesTask.java | 16 ++++---- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties index 7316b0308c..f3081bef89 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties @@ -255,5 +255,5 @@ AinStatusDashboard.nodeStatusTableTitle.text=Auto Ingest Nodes AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress -CasesDashboardTopComponent.cleanCaseNodesButton.text=Delete Orphan Case Znodes -CasesDashboardTopComponent.cleanManifestNodesButton.text=Delete Orphan Manifest Znodes +CasesDashboardTopComponent.deleteOrphanCaseNodesButton.text=Delete Orphan Case Znodes +CasesDashboardTopComponent.deleteOrphanManifestNodesButton.text=Delete Orphan Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 67c46d40b4..7cee160023 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -138,11 +138,6 @@ AutoIngestJobsNode.status.text=Status AutoIngestJobsPanel.waitNode.text=Please Wait... AutoIngestMetricsDialog.initReportText=Select a date above and click the 'Generate Metrics Report' button to generate\na metrics report. AutoIngestMetricsDialog.title.text=Auto Ingest Metrics -CaseNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service... -# {0} - node path -CaseNodesCleanupTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}... -CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes... -CaseNodesCleanupTask.progress.startMessage=Starting orphaned case znode cleanup... ConfirmationDialog.DoNotDelete=Do not delete ConfirmationDialog.Delete=Permanently delete ConfirmationDialog.DeleteAreYouSure=The entire case will be removed. Are you sure you want to delete case @@ -210,6 +205,11 @@ DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes +DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service... +# {0} - node path +DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}... +DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes... +DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup... DeleteOrphanManifestNodesAction.progressDisplayName=Cleanup Manifest File Znodes DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service... # {0} - node path @@ -452,5 +452,5 @@ AinStatusDashboard.nodeStatusTableTitle.text=Auto Ingest Nodes AinStatusDashboard.healthMonitorButton.text=Health Monitor CasesDashboardTopComponent.refreshButton.text=Refresh AutoIngestCasesDeletionDialog.jLabel1.text=Progress -CasesDashboardTopComponent.cleanCaseNodesButton.text=Delete Orphan Case Znodes -CasesDashboardTopComponent.cleanManifestNodesButton.text=Delete Orphan Manifest Znodes +CasesDashboardTopComponent.deleteOrphanCaseNodesButton.text=Delete Orphan Case Znodes +CasesDashboardTopComponent.deleteOrphanManifestNodesButton.text=Delete Orphan Manifest Znodes diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form index 8e7d4753a6..3ade741f25 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.form @@ -22,9 +22,9 @@ - + - + @@ -43,8 +43,8 @@ - - + + @@ -66,24 +66,24 @@ - + - + - + - + - + - + diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java index 3293969bd5..dcd7fa1fab 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CasesDashboardTopComponent.java @@ -119,8 +119,8 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex refreshButton = new javax.swing.JButton(); caseBrowserScrollPane = new javax.swing.JScrollPane(); - cleanCaseNodesButton = new javax.swing.JButton(); - cleanManifestNodesButton = new javax.swing.JButton(); + deleteOrphanCaseNodesButton = new javax.swing.JButton(); + deleteOrphanManifestNodesButton = new javax.swing.JButton(); org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.refreshButton.text")); // NOI18N refreshButton.addActionListener(new java.awt.event.ActionListener() { @@ -129,17 +129,17 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex } }); - org.openide.awt.Mnemonics.setLocalizedText(cleanCaseNodesButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.cleanCaseNodesButton.text")); // NOI18N - cleanCaseNodesButton.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(deleteOrphanCaseNodesButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.deleteOrphanCaseNodesButton.text")); // NOI18N + deleteOrphanCaseNodesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - cleanCaseNodesButtonActionPerformed(evt); + deleteOrphanCaseNodesButtonActionPerformed(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(cleanManifestNodesButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.cleanManifestNodesButton.text")); // NOI18N - cleanManifestNodesButton.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(deleteOrphanManifestNodesButton, org.openide.util.NbBundle.getMessage(CasesDashboardTopComponent.class, "CasesDashboardTopComponent.deleteOrphanManifestNodesButton.text")); // NOI18N + deleteOrphanManifestNodesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - cleanManifestNodesButtonActionPerformed(evt); + deleteOrphanManifestNodesButtonActionPerformed(evt); } }); @@ -153,16 +153,16 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex .addGroup(layout.createSequentialGroup() .addComponent(refreshButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cleanCaseNodesButton) + .addComponent(deleteOrphanCaseNodesButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cleanManifestNodesButton) + .addComponent(deleteOrphanManifestNodesButton) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(caseBrowserScrollPane) .addContainerGap()))) ); - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cleanCaseNodesButton, cleanManifestNodesButton, refreshButton}); + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteOrphanCaseNodesButton, deleteOrphanManifestNodesButton, refreshButton}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -172,12 +172,12 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(refreshButton) - .addComponent(cleanCaseNodesButton) - .addComponent(cleanManifestNodesButton)) + .addComponent(deleteOrphanCaseNodesButton) + .addComponent(deleteOrphanManifestNodesButton)) .addContainerGap()) ); - layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cleanCaseNodesButton, cleanManifestNodesButton, refreshButton}); + layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteOrphanCaseNodesButton, deleteOrphanManifestNodesButton, refreshButton}); }// //GEN-END:initComponents @@ -185,18 +185,18 @@ public final class CasesDashboardTopComponent extends TopComponent implements Ex caseBrowserPanel.displayCases(); }//GEN-LAST:event_refreshButtonActionPerformed - private void cleanCaseNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanCaseNodesButtonActionPerformed + private void deleteOrphanCaseNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteOrphanCaseNodesButtonActionPerformed new DeleteOrphanCaseNodesAction().actionPerformed(evt); - }//GEN-LAST:event_cleanCaseNodesButtonActionPerformed + }//GEN-LAST:event_deleteOrphanCaseNodesButtonActionPerformed - private void cleanManifestNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanManifestNodesButtonActionPerformed + private void deleteOrphanManifestNodesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteOrphanManifestNodesButtonActionPerformed new DeleteOrphanManifestNodesAction().actionPerformed(evt); - }//GEN-LAST:event_cleanManifestNodesButtonActionPerformed + }//GEN-LAST:event_deleteOrphanManifestNodesButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane caseBrowserScrollPane; - private javax.swing.JButton cleanCaseNodesButton; - private javax.swing.JButton cleanManifestNodesButton; + private javax.swing.JButton deleteOrphanCaseNodesButton; + private javax.swing.JButton deleteOrphanManifestNodesButton; private javax.swing.JButton refreshButton; // End of variables declaration//GEN-END:variables diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java index c6594308d3..d7e7a06c9a 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java @@ -51,14 +51,14 @@ final class DeleteOrphanCaseNodesTask implements Runnable { @Override @NbBundle.Messages({ - "CaseNodesCleanupTask.progress.startMessage=Starting orphaned case znode cleanup...", - "CaseNodesCleanupTask.progress.connectingToCoordSvc=Connecting to the coordination service...", - "CaseNodesCleanupTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes..." + "DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup...", + "DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service...", + "DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes..." }) public void run() { - progress.start(Bundle.CaseNodesCleanupTask_progress_startMessage()); + progress.start(Bundle.DeleteOrphanCaseNodesTask_progress_startMessage()); try { - progress.progress(Bundle.CaseNodesCleanupTask_progress_connectingToCoordSvc()); + progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_connectingToCoordSvc()); logger.log(Level.INFO, "Connecting to the coordination service for orphan case node clean up"); // NON-NLS CoordinationService coordinationService; try { @@ -68,7 +68,7 @@ final class DeleteOrphanCaseNodesTask implements Runnable { return; } - progress.progress(Bundle.CaseNodesCleanupTask_progress_gettingCaseNodesListing()); + progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_gettingCaseNodesListing()); logger.log(Level.INFO, "Querying coordination service for case nodes for orphaned case node clean up"); // NON-NLS List nodeDataList; try { @@ -132,11 +132,11 @@ final class DeleteOrphanCaseNodesTask implements Runnable { * interrupted during the delete operation. */ @NbBundle.Messages({ - "# {0} - node path", "CaseNodesCleanupTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}..." + "# {0} - node path", "DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}..." }) private void deleteNode(CoordinationService coordinationService, String caseName, String nodePath) throws InterruptedException { try { - progress.progress(Bundle.CaseNodesCleanupTask_progress_deletingOrphanedCaseNode(nodePath)); + progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_deletingOrphanedCaseNode(nodePath)); logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", nodePath, caseName)); // NON-NLS coordinationService.deleteNode(CoordinationService.CategoryNode.CASES, nodePath); } catch (CoordinationService.CoordinationServiceException ex) { From fc5e430e797c1b044fe60d6d7c1cc9addbd4c30e Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:20:49 -0400 Subject: [PATCH 08/11] Clean up orphaned manifest node deletion --- .../experimental/autoingest/DeleteOrphanManifestNodesTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java index ed957767c8..a87782e97b 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java @@ -67,7 +67,7 @@ final class DeleteOrphanManifestNodesTask implements Runnable { } progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_gettingCaseNodesListing()); - logger.log(Level.INFO, "Querying coordination service for case nodes for orphaned case node clean up"); // NON-NLS + logger.log(Level.INFO, "Querying coordination service for manifest file nodes for orphaned node clean up"); // NON-NLS List nodeDataList; try { nodeDataList = AutoIngestJobNodeDataCollector.getNodeData(); From d7abd4a72b5aa375dbed9ed98bdd0e03c3617e76 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:44:42 -0400 Subject: [PATCH 09/11] Clean up orphaned manifest node deletion --- .../autoingest/Bundle.properties-MERGED | 16 +++++----- .../autoingest/DeleteOrphanCaseNodesTask.java | 30 +++++++++---------- .../DeleteOrphanManifestNodesTask.java | 30 +++++++++---------- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 7cee160023..38d8ee47a1 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -205,17 +205,17 @@ DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes -DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service... +DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service # {0} - node path -DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}... -DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes... -DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup... +DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case znode {0} +DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes +DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup DeleteOrphanManifestNodesAction.progressDisplayName=Cleanup Manifest File Znodes -DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service... +DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service # {0} - node path -DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}... -DeleteOrphanManifestNodesTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes... -DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup... +DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file znode {0} +DeleteOrphanManifestNodesTask.progress.gettingManifestNodes=Querying the coordination service for manifest file znodes +DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java index d7e7a06c9a..e06427e500 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanCaseNodesTask.java @@ -51,33 +51,33 @@ final class DeleteOrphanCaseNodesTask implements Runnable { @Override @NbBundle.Messages({ - "DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup...", - "DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service...", - "DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes..." + "DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup", + "DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service", + "DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes" }) public void run() { progress.start(Bundle.DeleteOrphanCaseNodesTask_progress_startMessage()); try { progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_connectingToCoordSvc()); - logger.log(Level.INFO, "Connecting to the coordination service for orphan case node clean up"); // NON-NLS + logger.log(Level.INFO, Bundle.DeleteOrphanCaseNodesTask_progress_connectingToCoordSvc()); CoordinationService coordinationService; try { coordinationService = CoordinationService.getInstance(); } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error connecting to the coordination service", ex); // NON-NLS + logger.log(Level.SEVERE, "Error connecting to the coordination service", ex); //NON-NLS return; } progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_gettingCaseNodesListing()); - logger.log(Level.INFO, "Querying coordination service for case nodes for orphaned case node clean up"); // NON-NLS + logger.log(Level.INFO, Bundle.DeleteOrphanCaseNodesTask_progress_gettingCaseNodesListing()); List nodeDataList; try { nodeDataList = CaseNodeDataCollector.getNodeData(); } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error collecting case node data", ex); // NON-NLS + logger.log(Level.SEVERE, "Error collecting case node data", ex); //NON-NLS return; - } catch (InterruptedException ex) { - logger.log(Level.WARNING, "Unexpected interrupt while collecting case node data", ex); // NON-NLS + } catch (InterruptedException unused) { + logger.log(Level.WARNING, "Task cancelled while collecting case node data"); //NON-NLS return; } @@ -100,8 +100,8 @@ final class DeleteOrphanCaseNodesTask implements Runnable { nodePath = CoordinationServiceUtils.getCaseDirectoryNodePath(caseDirectoryPath); deleteNode(coordinationService, caseName, nodePath); - } catch (InterruptedException ex) { - logger.log(Level.WARNING, String.format("Unexpected interrupt while deleting orphaned znode %s for %s", nodePath, caseName), ex); // NON-NLS + } catch (InterruptedException unused) { + logger.log(Level.WARNING, String.format("Task cancelled while deleting orphaned znode %s for %s", nodePath, caseName)); //NON-NLS return; } } @@ -113,7 +113,7 @@ final class DeleteOrphanCaseNodesTask implements Runnable { * where there is no call to get() on a Future associated with * the task, so this ensures that any such errors get logged. */ - logger.log(Level.SEVERE, "Unexpected error during orphan case znode cleanup", ex); // NON-NLS + logger.log(Level.SEVERE, "Unexpected error during orphan case znode cleanup", ex); //NON-NLS throw ex; } finally { @@ -132,16 +132,16 @@ final class DeleteOrphanCaseNodesTask implements Runnable { * interrupted during the delete operation. */ @NbBundle.Messages({ - "# {0} - node path", "DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case node {0}..." + "# {0} - node path", "DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case znode {0}" }) private void deleteNode(CoordinationService coordinationService, String caseName, String nodePath) throws InterruptedException { try { progress.progress(Bundle.DeleteOrphanCaseNodesTask_progress_deletingOrphanedCaseNode(nodePath)); - logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", nodePath, caseName)); // NON-NLS + logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", nodePath, caseName)); //NON-NLS coordinationService.deleteNode(CoordinationService.CategoryNode.CASES, nodePath); } catch (CoordinationService.CoordinationServiceException ex) { if (!DeleteCaseUtils.isNoNodeException(ex)) { - logger.log(Level.SEVERE, String.format("Error deleting orphaned case node %s for %s", nodePath, caseName), ex); // NON-NLS + logger.log(Level.SEVERE, String.format("Error deleting orphaned case node %s for %s", nodePath, caseName), ex); //NON-NLS } } } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java index a87782e97b..158a092522 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DeleteOrphanManifestNodesTask.java @@ -48,34 +48,34 @@ final class DeleteOrphanManifestNodesTask implements Runnable { @Override @NbBundle.Messages({ - "DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup...", - "DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service...", - "DeleteOrphanManifestNodesTask.progress.gettingCaseNodesListing=Querying coordination service for manifest file znodes...", - "# {0} - node path", "DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file node {0}..." + "DeleteOrphanManifestNodesTask.progress.startMessage=Starting orphaned manifest file znode cleanup", + "DeleteOrphanManifestNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service", + "DeleteOrphanManifestNodesTask.progress.gettingManifestNodes=Querying the coordination service for manifest file znodes", + "# {0} - node path", "DeleteOrphanManifestNodesTask.progress.deletingOrphanedManifestNode=Deleting orphaned manifest file znode {0}" }) public void run() { progress.start(Bundle.DeleteOrphanManifestNodesTask_progress_startMessage()); try { progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_connectingToCoordSvc()); - logger.log(Level.INFO, "Connecting to the coordination service for orphan manifest file node clean up"); // NON-NLS + logger.log(Level.INFO, Bundle.DeleteOrphanManifestNodesTask_progress_connectingToCoordSvc()); CoordinationService coordinationService; try { coordinationService = CoordinationService.getInstance(); } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error connecting to the coordination service", ex); // NON-NLS + logger.log(Level.SEVERE, "Error connecting to the coordination service", ex); // NON-NLS return; } - progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_gettingCaseNodesListing()); - logger.log(Level.INFO, "Querying coordination service for manifest file nodes for orphaned node clean up"); // NON-NLS + progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_gettingManifestNodes()); + logger.log(Level.INFO, Bundle.DeleteOrphanManifestNodesTask_progress_gettingManifestNodes()); List nodeDataList; try { nodeDataList = AutoIngestJobNodeDataCollector.getNodeData(); } catch (CoordinationService.CoordinationServiceException ex) { - logger.log(Level.WARNING, "Error collecting auto ingest job node data", ex); // NON-NLS + logger.log(Level.SEVERE, "Error collecting auto ingest job node data", ex); // NON-NLS return; - } catch (InterruptedException ex) { - logger.log(Level.WARNING, "Unexpected interrupt while collecting auto ingest job node data", ex); // NON-NLS + } catch (InterruptedException unused) { + logger.log(Level.WARNING, "Task cancelled while collecting auto ingest job node data"); // NON-NLS return; } @@ -86,14 +86,14 @@ final class DeleteOrphanManifestNodesTask implements Runnable { if (!manifestFile.exists()) { try { progress.progress(Bundle.DeleteOrphanManifestNodesTask_progress_deletingOrphanedManifestNode(manifestFilePath)); - logger.log(Level.INFO, String.format("Deleting orphaned case node %s for %s", manifestFilePath, caseName)); // NON-NLS + logger.log(Level.INFO, String.format("Deleting orphaned manifest file znode %s for %s", manifestFilePath, caseName)); coordinationService.deleteNode(CoordinationService.CategoryNode.MANIFESTS, manifestFilePath.toString()); } catch (CoordinationService.CoordinationServiceException ex) { if (!DeleteCaseUtils.isNoNodeException(ex)) { logger.log(Level.SEVERE, String.format("Error deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS } - } catch (InterruptedException ex) { - logger.log(Level.WARNING, String.format("Unexpected interrupt while deleting %s znode for %s", manifestFilePath, caseName), ex); // NON-NLS + } catch (InterruptedException unused) { + logger.log(Level.WARNING, String.format("Task cancelled while deleting %s znode for %s", manifestFilePath, caseName)); // NON-NLS return; } } @@ -105,7 +105,7 @@ final class DeleteOrphanManifestNodesTask implements Runnable { * where there is no call to get() on a Future associated with * the task, so this ensures that any such errors get logged. */ - logger.log(Level.SEVERE, "Unexpected error during orphan manifest file znode cleanup", ex); // NON-NLS + logger.log(Level.SEVERE, "Unexpected error deleting orphan manifest file znodes", ex); // NON-NLS throw ex; } finally { From c623e8106cd99b82e6966cd7164c4a579927dc1a Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:47:38 -0400 Subject: [PATCH 10/11] Clean up orphaned manifest node deletion --- .../autoingest/AutoIngestJobNodeDataCollector.java | 6 +++--- .../experimental/autoingest/Bundle.properties-MERGED | 12 ------------ 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java index 491068ffb7..0f9554aeee 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobNodeDataCollector.java @@ -34,9 +34,9 @@ final class AutoIngestJobNodeDataCollector { private static final Logger logger = Logger.getLogger(AutoIngestJobNodeDataCollector.class.getName()); static List getNodeData() throws CoordinationServiceException, InterruptedException { - List nodeDataList = new ArrayList<>(); - CoordinationService coordinationService = CoordinationService.getInstance(); - List nodePaths = coordinationService.getNodeList(CoordinationService.CategoryNode.MANIFESTS); + final CoordinationService coordinationService = CoordinationService.getInstance(); + final List nodePaths = coordinationService.getNodeList(CoordinationService.CategoryNode.MANIFESTS); + final List nodeDataList = new ArrayList<>(); for (String nodePath : nodePaths) { try { final byte[] nodeBytes = coordinationService.getNodeData(CoordinationService.CategoryNode.MANIFESTS, nodePath); diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 38d8ee47a1..48a1e0784c 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -89,10 +89,6 @@ AutoIngestControlPanel.runningTable.toolTipText=The Running table displays the c AutoIngestControlPanel.SharedConfigurationDisabled=Shared configuration disabled AutoIngestControlPanel.ShowLogFailed.Message=Case log file does not exist AutoIngestControlPanel.ShowLogFailed.Title=Unable to display case log -# {0} - case db status -# {1} - search svc Status -# {2} - coord svc Status -# {3} - msg broker status AutoIngestControlPanel.tbServicesStatusMessage.Message=Case databases {0}, keyword search {1}, coordination {2}, messaging {3} AutoIngestControlPanel.tbServicesStatusMessage.Message.Down=down AutoIngestControlPanel.tbServicesStatusMessage.Message.Unknown=unknown @@ -186,27 +182,20 @@ DeleteCaseTask.progress.acquiringManifestLocks=Acquiring exclusive manifest file DeleteCaseTask.progress.connectingToCoordSvc=Connecting to the coordination service... DeleteCaseTask.progress.deletingCaseDirCoordSvcNode=Deleting case directory znode... DeleteCaseTask.progress.deletingCaseNameCoordSvcNode=Deleting case name znode... -# {0} - data source path DeleteCaseTask.progress.deletingDataSource=Deleting data source {0}... DeleteCaseTask.progress.deletingJobLogLockNode=Deleting case auto ingest log znode... -# {0} - manifest file path DeleteCaseTask.progress.deletingManifest=Deleting manifest file {0}... -# {0} - manifest file path DeleteCaseTask.progress.deletingManifestFileNode=Deleting the manifest file znode for {0}... DeleteCaseTask.progress.deletingResourcesLockNode=Deleting case resources znode... DeleteCaseTask.progress.gettingManifestPaths=Getting manifest file paths... -# {0} - manifest file path DeleteCaseTask.progress.lockingManifest=Locking manifest file {0}... DeleteCaseTask.progress.openingCaseDatabase=Opening the case database... DeleteCaseTask.progress.openingCaseMetadataFile=Opening case metadata file... -# {0} - manifest file path DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... -# {0} - manifest file path DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service -# {0} - node path DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case znode {0} DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup @@ -220,7 +209,6 @@ HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-use OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. OpenAutoIngestLogAction.menuItemText=Open Auto Ingest Log File -# {0} - caseErrorMessage OpenCaseAction.errorMsg=Failed to open case: {0} OpenCaseAction.menuItemText=Open OpenIDE-Module-Long-Description=This module contains features that are being developed by Basis Technology and are not part of the default Autopsy distribution. You can enable this module to use the new features. The features should be stable, but their exact behavior and API are subject to change.\n\nWe make no guarantee that the API of this module will not change, so developers should be careful when relying on it. From 99ef3c875b8a957412a09cdd08df190465ee73a5 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 9 Apr 2019 13:51:14 -0400 Subject: [PATCH 11/11] Clean up orphaned manifest node deletion --- .../autoingest/BackgroundTaskAction.java | 2 +- .../experimental/autoingest/Bundle.properties-MERGED | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java index e6853119a0..1140b49cf1 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/BackgroundTaskAction.java @@ -40,7 +40,7 @@ abstract class BackgroundTaskAction extends AbstractAction { * cancellable task that runs in a background thread and reports progress * using an application frame progress bar. * - * @param actionName The name of the action. + * @param actionName The name of the action. * @param progressDisplayName The display name for the progress bar. */ BackgroundTaskAction(String actionName, String progressDisplayName) { diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index 48a1e0784c..38d8ee47a1 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -89,6 +89,10 @@ AutoIngestControlPanel.runningTable.toolTipText=The Running table displays the c AutoIngestControlPanel.SharedConfigurationDisabled=Shared configuration disabled AutoIngestControlPanel.ShowLogFailed.Message=Case log file does not exist AutoIngestControlPanel.ShowLogFailed.Title=Unable to display case log +# {0} - case db status +# {1} - search svc Status +# {2} - coord svc Status +# {3} - msg broker status AutoIngestControlPanel.tbServicesStatusMessage.Message=Case databases {0}, keyword search {1}, coordination {2}, messaging {3} AutoIngestControlPanel.tbServicesStatusMessage.Message.Down=down AutoIngestControlPanel.tbServicesStatusMessage.Message.Unknown=unknown @@ -182,20 +186,27 @@ DeleteCaseTask.progress.acquiringManifestLocks=Acquiring exclusive manifest file DeleteCaseTask.progress.connectingToCoordSvc=Connecting to the coordination service... DeleteCaseTask.progress.deletingCaseDirCoordSvcNode=Deleting case directory znode... DeleteCaseTask.progress.deletingCaseNameCoordSvcNode=Deleting case name znode... +# {0} - data source path DeleteCaseTask.progress.deletingDataSource=Deleting data source {0}... DeleteCaseTask.progress.deletingJobLogLockNode=Deleting case auto ingest log znode... +# {0} - manifest file path DeleteCaseTask.progress.deletingManifest=Deleting manifest file {0}... +# {0} - manifest file path DeleteCaseTask.progress.deletingManifestFileNode=Deleting the manifest file znode for {0}... DeleteCaseTask.progress.deletingResourcesLockNode=Deleting case resources znode... DeleteCaseTask.progress.gettingManifestPaths=Getting manifest file paths... +# {0} - manifest file path DeleteCaseTask.progress.lockingManifest=Locking manifest file {0}... DeleteCaseTask.progress.openingCaseDatabase=Opening the case database... DeleteCaseTask.progress.openingCaseMetadataFile=Opening case metadata file... +# {0} - manifest file path DeleteCaseTask.progress.parsingManifest=Parsing manifest file {0}... +# {0} - manifest file path DeleteCaseTask.progress.releasingManifestLock=Releasing lock on the manifest file {0}... DeleteCaseTask.progress.startMessage=Starting deletion... DeleteOrphanCaseNodesAction.progressDisplayName=Cleanup Case Znodes DeleteOrphanCaseNodesTask.progress.connectingToCoordSvc=Connecting to the coordination service +# {0} - node path DeleteOrphanCaseNodesTask.progress.deletingOrphanedCaseNode=Deleting orphaned case znode {0} DeleteOrphanCaseNodesTask.progress.gettingCaseNodesListing=Querying coordination service for case znodes DeleteOrphanCaseNodesTask.progress.startMessage=Starting orphaned case znode cleanup @@ -209,6 +220,7 @@ HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-use OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. OpenAutoIngestLogAction.menuItemText=Open Auto Ingest Log File +# {0} - caseErrorMessage OpenCaseAction.errorMsg=Failed to open case: {0} OpenCaseAction.menuItemText=Open OpenIDE-Module-Long-Description=This module contains features that are being developed by Basis Technology and are not part of the default Autopsy distribution. You can enable this module to use the new features. The features should be stable, but their exact behavior and API are subject to change.\n\nWe make no guarantee that the API of this module will not change, so developers should be careful when relying on it.