19 package org.sleuthkit.autopsy.ingest;
21 import java.text.SimpleDateFormat;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Date;
25 import java.util.List;
27 import javax.swing.JDialog;
28 import javax.swing.table.AbstractTableModel;
29 import javax.swing.table.TableColumn;
30 import org.apache.commons.lang3.time.DurationFormatUtils;
31 import org.openide.util.NbBundle;
36 @SuppressWarnings(
"PMD.SingularField")
37 class IngestProgressSnapshotPanel extends javax.swing.JPanel {
39 private final JDialog parent;
40 private final IngestProgressSnapshotProvider snapshotProvider;
41 private final IngestThreadActivitySnapshotsTableModel threadActivityTableModel;
42 private final IngestJobTableModel jobTableModel;
43 private final ModuleTableModel moduleTableModel;
45 IngestProgressSnapshotPanel(JDialog parent, IngestProgressSnapshotProvider snapshotProvider) {
47 this.snapshotProvider = snapshotProvider;
48 threadActivityTableModel =
new IngestThreadActivitySnapshotsTableModel();
49 jobTableModel =
new IngestJobTableModel();
50 moduleTableModel =
new ModuleTableModel();
52 customizeComponents();
55 private void customizeComponents() {
56 threadActivitySnapshotsTable.setModel(threadActivityTableModel);
57 jobTable.setModel(jobTableModel);
58 moduleTable.setModel(moduleTableModel);
60 int width = snapshotsScrollPane.getPreferredSize().width;
61 for (
int i = 0; i < threadActivitySnapshotsTable.getColumnCount(); ++i) {
62 TableColumn column = threadActivitySnapshotsTable.getColumnModel().getColumn(i);
65 column.setPreferredWidth(((
int) (width * 0.02)));
68 column.setPreferredWidth(((
int) (width * 0.20)));
71 column.setPreferredWidth(((
int) (width * 0.15)));
74 column.setPreferredWidth(((
int) (width * 0.35)));
77 column.setPreferredWidth(((
int) (width * 0.18)));
80 column.setPreferredWidth(((
int) (width * 0.10)));
85 threadActivitySnapshotsTable.setFillsViewportHeight(
true);
90 private final String[] columnNames = {NbBundle.getMessage(this.getClass(),
91 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.threadID"),
92 NbBundle.getMessage(this.getClass(),
93 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.activity"),
94 NbBundle.getMessage(this.getClass(),
95 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.dataSource"),
96 NbBundle.getMessage(this.getClass(),
97 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.file"),
98 NbBundle.getMessage(this.getClass(),
99 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.startTime"),
100 NbBundle.getMessage(this.getClass(),
101 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.elapsedTime"),
102 NbBundle.getMessage(this.getClass(),
103 "IngestProgressSnapshotPanel.SnapshotsTableModel.colNames.jobID")};
111 snapshots = snapshotProvider.getIngestThreadActivitySnapshots();
112 fireTableDataChanged();
117 return snapshots.size();
122 return columnNames.length;
127 return columnNames[col];
134 switch (columnIndex) {
136 cellValue = snapshot.getThreadId();
139 cellValue = snapshot.getActivity();
142 cellValue = snapshot.getDataSourceName();
145 cellValue = snapshot.getFileName();
148 cellValue = snapshot.getStartTime();
151 Date now =
new Date();
152 long elapsedTime = now.getTime() - snapshot.getStartTime().getTime();
153 cellValue = DurationFormatUtils.formatDurationHMS(elapsedTime);
156 cellValue = snapshot.getIngestJobId();
168 private final String[] columnNames = {NbBundle.getMessage(this.getClass(),
"IngestJobTableModel.colName.jobID"),
169 NbBundle.getMessage(this.getClass(),
170 "IngestJobTableModel.colName.dataSource"),
171 NbBundle.getMessage(this.getClass(),
"IngestJobTableModel.colName.start"),
172 NbBundle.getMessage(this.getClass(),
173 "IngestJobTableModel.colName.numProcessed"),
174 NbBundle.getMessage(this.getClass(),
175 "IngestJobTableModel.colName.filesPerSec"),
176 NbBundle.getMessage(this.getClass(),
177 "IngestJobTableModel.colName.inProgress"),
178 NbBundle.getMessage(this.getClass(),
179 "IngestJobTableModel.colName.filesQueued"),
180 NbBundle.getMessage(this.getClass(),
181 "IngestJobTableModel.colName.dirQueued"),
182 NbBundle.getMessage(this.getClass(),
183 "IngestJobTableModel.colName.rootQueued"),
184 NbBundle.getMessage(this.getClass(),
185 "IngestJobTableModel.colName.streamingQueued"),
186 NbBundle.getMessage(this.getClass(),
187 "IngestJobTableModel.colName.dsQueued")};
195 jobSnapshots = snapshotProvider.getIngestJobSnapshots();
196 fireTableDataChanged();
201 return jobSnapshots.size();
206 return columnNames.length;
211 return columnNames[col];
216 Snapshot snapShot = jobSnapshots.get(rowIndex);
218 switch (columnIndex) {
220 cellValue = snapShot.getJobId();
223 cellValue = snapShot.getDataSource();
226 SimpleDateFormat dateFormat =
new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss");
227 cellValue = dateFormat.format(
new Date(snapShot.getJobStartTime()));
230 cellValue = snapShot.getFilesProcessed();
233 cellValue = snapShot.getSpeed();
236 cellValue = snapShot.getRunningListSize();
239 cellValue = snapShot.getFileQueueSize();
242 cellValue = snapShot.getDirQueueSize();
245 cellValue = snapShot.getRootQueueSize();
248 cellValue = snapShot.getStreamingQueueSize();
251 cellValue = snapShot.getDsQueueSize();
270 this.duration = duration;
299 private final String[] columnNames = {NbBundle.getMessage(this.getClass(),
"ModuleTableModel.colName.module"),
300 NbBundle.getMessage(this.getClass(),
301 "ModuleTableModel.colName.duration")};
302 private final List<ModuleStats> moduleStats =
new ArrayList<>();
310 Map<String, Long> moduleStatMap = snapshotProvider.getModuleRunTimes();
313 for (String k : moduleStatMap.keySet()) {
314 moduleStats.add(
new ModuleStats(k, moduleStatMap.get(k)));
315 totalTime += moduleStatMap.get(k);
317 Collections.sort(moduleStats);
318 fireTableDataChanged();
323 return moduleStats.size();
328 return columnNames.length;
333 return columnNames[col];
338 ModuleStats moduleStat = moduleStats.get(rowIndex);
340 switch (columnIndex) {
342 cellValue = moduleStat.
getName();
345 cellValue = DurationFormatUtils.formatDurationHMS(moduleStat.
getDuration()) +
" (" + (moduleStat.
getDuration() * 100) / totalTime +
"%)";
361 @SuppressWarnings(
"unchecked")
363 private
void initComponents() {
365 snapshotsScrollPane =
new javax.swing.JScrollPane();
366 threadActivitySnapshotsTable =
new javax.swing.JTable();
367 jobScrollPane =
new javax.swing.JScrollPane();
368 jobTable =
new javax.swing.JTable();
369 refreshButton =
new javax.swing.JButton();
370 closeButton =
new javax.swing.JButton();
371 moduleScrollPane =
new javax.swing.JScrollPane();
372 moduleTable =
new javax.swing.JTable();
374 threadActivitySnapshotsTable.setModel(
new javax.swing.table.DefaultTableModel(
382 snapshotsScrollPane.setViewportView(threadActivitySnapshotsTable);
384 jobTable.setModel(
new javax.swing.table.DefaultTableModel(
392 jobScrollPane.setViewportView(jobTable);
394 org.openide.awt.Mnemonics.setLocalizedText(refreshButton,
org.openide.util.NbBundle.getMessage(IngestProgressSnapshotPanel.class,
"IngestProgressSnapshotPanel.refreshButton.text"));
395 refreshButton.addActionListener(
new java.awt.event.ActionListener() {
396 public void actionPerformed(java.awt.event.ActionEvent evt) {
397 refreshButtonActionPerformed(evt);
401 org.openide.awt.Mnemonics.setLocalizedText(closeButton,
org.openide.util.NbBundle.getMessage(IngestProgressSnapshotPanel.class,
"IngestProgressSnapshotPanel.closeButton.text"));
402 closeButton.addActionListener(
new java.awt.event.ActionListener() {
403 public void actionPerformed(java.awt.event.ActionEvent evt) {
404 closeButtonActionPerformed(evt);
408 moduleTable.setModel(
new javax.swing.table.DefaultTableModel(
416 moduleScrollPane.setViewportView(moduleTable);
418 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
419 this.setLayout(layout);
420 layout.setHorizontalGroup(
421 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
422 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
424 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
425 .addComponent(snapshotsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 881, Short.MAX_VALUE)
426 .addGroup(layout.createSequentialGroup()
427 .addGap(0, 0, Short.MAX_VALUE)
428 .addComponent(refreshButton)
429 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
430 .addComponent(closeButton))
431 .addComponent(jobScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 881, Short.MAX_VALUE)
432 .addComponent(moduleScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 881, Short.MAX_VALUE))
436 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {closeButton, refreshButton});
438 layout.setVerticalGroup(
439 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
440 .addGroup(layout.createSequentialGroup()
442 .addComponent(snapshotsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE)
443 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
444 .addComponent(jobScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE)
445 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
446 .addComponent(moduleScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
447 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
448 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
449 .addComponent(refreshButton)
450 .addComponent(closeButton))
454 layout.linkSize(javax.swing.SwingConstants.VERTICAL,
new java.awt.Component[] {closeButton, refreshButton});
458 private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {
462 private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {
463 threadActivityTableModel.refresh();
464 jobTableModel.refresh();
465 moduleTableModel.refresh();
468 private javax.swing.JButton closeButton;
469 private javax.swing.JScrollPane jobScrollPane;
470 private javax.swing.JTable jobTable;
471 private javax.swing.JScrollPane moduleScrollPane;
472 private javax.swing.JTable moduleTable;
473 private javax.swing.JButton refreshButton;
474 private javax.swing.JScrollPane snapshotsScrollPane;
475 private javax.swing.JTable threadActivitySnapshotsTable;
Object getValueAt(int rowIndex, int columnIndex)
Object getValueAt(int rowIndex, int columnIndex)
String getColumnName(int col)
String getColumnName(int col)
IngestThreadActivitySnapshotsTableModel()
int compareTo(ModuleStats o)
String getColumnName(int col)
List< Snapshot > jobSnapshots
List< IngestManager.IngestThreadActivitySnapshot > snapshots
Object getValueAt(int rowIndex, int columnIndex)