mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 00:16:16 +00:00
Converted AutoIngestControlPanel to use cached service statuses
This commit is contained in:
parent
b6154cffb3
commit
ffe6ac2ee1
@ -38,7 +38,11 @@ import java.util.logging.Level;
|
|||||||
import javax.swing.DefaultListSelectionModel;
|
import javax.swing.DefaultListSelectionModel;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
@ -149,6 +153,11 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
private Color pendingTableBackground;
|
private Color pendingTableBackground;
|
||||||
private Color pendingTablelForeground;
|
private Color pendingTablelForeground;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maintain a mapping of each service to it's last status update.
|
||||||
|
*/
|
||||||
|
private final ConcurrentHashMap<String, String> statusByService;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The enum is used in conjunction with the DefaultTableModel class to
|
* The enum is used in conjunction with the DefaultTableModel class to
|
||||||
* provide table models for the JTables used to display a view of the
|
* provide table models for the JTables used to display a view of the
|
||||||
@ -235,6 +244,8 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
* controlling automated ingest for a single node within the cluster.
|
* controlling automated ingest for a single node within the cluster.
|
||||||
*/
|
*/
|
||||||
private AutoIngestControlPanel() {
|
private AutoIngestControlPanel() {
|
||||||
|
|
||||||
|
this.statusByService = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
//Disable the main window so they can only use the dashboard (if we used setVisible the taskBar icon would go away)
|
//Disable the main window so they can only use the dashboard (if we used setVisible the taskBar icon would go away)
|
||||||
WindowManager.getDefault().getMainWindow().setEnabled(false);
|
WindowManager.getDefault().getMainWindow().setEnabled(false);
|
||||||
@ -248,6 +259,9 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
completedTableModel = new AutoIngestTableModel(JobsTableModelColumns.headers, 0);
|
completedTableModel = new AutoIngestTableModel(JobsTableModelColumns.headers, 0);
|
||||||
|
|
||||||
initComponents(); // Generated code.
|
initComponents(); // Generated code.
|
||||||
|
statusByService.put(ServicesMonitor.Service.REMOTE_CASE_DATABASE.toString(), NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Down"));
|
||||||
|
statusByService.put(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString(), NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Down"));
|
||||||
|
statusByService.put(ServicesMonitor.Service.MESSAGING.toString(), NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Down"));
|
||||||
setServicesStatusMessage();
|
setServicesStatusMessage();
|
||||||
initPendingJobsTable();
|
initPendingJobsTable();
|
||||||
initRunningJobsTable();
|
initRunningJobsTable();
|
||||||
@ -260,6 +274,25 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
UIManager.put("PopupMenu.consumeEventOnClose", false);
|
UIManager.put("PopupMenu.consumeEventOnClose", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update status of the services on the dashboard
|
||||||
|
*/
|
||||||
|
private void displayServicesStatus() {
|
||||||
|
tbServicesStatusMessage.setText(NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message",
|
||||||
|
statusByService.get(ServicesMonitor.Service.REMOTE_CASE_DATABASE.toString()),
|
||||||
|
statusByService.get(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString()),
|
||||||
|
statusByService.get(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString()),
|
||||||
|
statusByService.get(ServicesMonitor.Service.MESSAGING.toString())));
|
||||||
|
String upStatus = NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Up");
|
||||||
|
if (statusByService.get(ServicesMonitor.Service.REMOTE_CASE_DATABASE.toString()).compareTo(upStatus) != 0
|
||||||
|
|| statusByService.get(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString()).compareTo(upStatus) != 0
|
||||||
|
|| statusByService.get(ServicesMonitor.Service.MESSAGING.toString()).compareTo(upStatus) != 0) {
|
||||||
|
tbServicesStatusMessage.setForeground(Color.RED);
|
||||||
|
} else {
|
||||||
|
tbServicesStatusMessage.setForeground(Color.BLACK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries the services monitor and sets the text for the services status
|
* Queries the services monitor and sets the text for the services status
|
||||||
* text box.
|
* text box.
|
||||||
@ -274,15 +307,11 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
private void setServicesStatusMessage() {
|
private void setServicesStatusMessage() {
|
||||||
new SwingWorker<Void, Void>() {
|
new SwingWorker<Void, Void>() {
|
||||||
|
|
||||||
String caseDatabaseServerStatus = ServicesMonitor.ServiceStatus.DOWN.toString();
|
|
||||||
String keywordSearchServiceStatus = ServicesMonitor.ServiceStatus.DOWN.toString();
|
|
||||||
String messagingStatus = ServicesMonitor.ServiceStatus.DOWN.toString();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
caseDatabaseServerStatus = getServiceStatus(ServicesMonitor.Service.REMOTE_CASE_DATABASE);
|
statusByService.put(ServicesMonitor.Service.REMOTE_CASE_DATABASE.toString(), getServiceStatus(ServicesMonitor.Service.REMOTE_CASE_DATABASE));
|
||||||
keywordSearchServiceStatus = getServiceStatus(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH);
|
statusByService.put(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString(), getServiceStatus(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH));
|
||||||
messagingStatus = getServiceStatus(ServicesMonitor.Service.MESSAGING);
|
statusByService.put(ServicesMonitor.Service.MESSAGING.toString(), getServiceStatus(ServicesMonitor.Service.MESSAGING));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,15 +340,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void done() {
|
protected void done() {
|
||||||
tbServicesStatusMessage.setText(NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message", caseDatabaseServerStatus, keywordSearchServiceStatus, keywordSearchServiceStatus, messagingStatus));
|
displayServicesStatus();
|
||||||
String upStatus = NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Up");
|
|
||||||
if (caseDatabaseServerStatus.compareTo(upStatus) != 0
|
|
||||||
|| keywordSearchServiceStatus.compareTo(upStatus) != 0
|
|
||||||
|| messagingStatus.compareTo(upStatus) != 0) {
|
|
||||||
tbServicesStatusMessage.setForeground(Color.RED);
|
|
||||||
} else {
|
|
||||||
tbServicesStatusMessage.setForeground(Color.BLACK);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}.execute();
|
}.execute();
|
||||||
@ -682,12 +703,33 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
PropertyChangeListener propChangeListener = (PropertyChangeEvent evt) -> {
|
||||||
* Subscribe to services monitor events.
|
|
||||||
*/
|
String serviceDisplayName = ServicesMonitor.Service.valueOf(evt.getPropertyName()).toString();
|
||||||
ServicesMonitor.getInstance().addSubscriber((PropertyChangeEvent evt) -> {
|
String status = evt.getNewValue().toString();
|
||||||
setServicesStatusMessage();
|
|
||||||
});
|
if (status.equals(ServicesMonitor.ServiceStatus.UP.toString())) {
|
||||||
|
status = NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Up");
|
||||||
|
} else if (status.equals(ServicesMonitor.ServiceStatus.DOWN.toString())) {
|
||||||
|
status = NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.tbServicesStatusMessage.Message.Down");
|
||||||
|
SYS_LOGGER.log(Level.SEVERE, "Connection to {0} is down", serviceDisplayName); //NON-NLS
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the status update is for an existing service who's status hasn't changed - do nothing.
|
||||||
|
if (statusByService.containsKey(serviceDisplayName) && status.equals(statusByService.get(serviceDisplayName))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusByService.put(serviceDisplayName, status);
|
||||||
|
displayServicesStatus();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Subscribe to all multi-user services in order to display their status
|
||||||
|
Set<String> servicesList = new HashSet<>();
|
||||||
|
servicesList.add(ServicesMonitor.Service.REMOTE_CASE_DATABASE.toString());
|
||||||
|
servicesList.add(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString());
|
||||||
|
servicesList.add(ServicesMonitor.Service.MESSAGING.toString());
|
||||||
|
ServicesMonitor.getInstance().addSubscriber(servicesList, propChangeListener);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register with the AIM as an observer.
|
* Register with the AIM as an observer.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user