Autopsy  4.7.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor Class Reference

Inherits PropertyChangeListener.

Classes

class  DatabaseTimingResult
 
class  PeriodicHealthMonitorTask
 
class  TimingInfo
 
class  UserData
 
enum  UserEvent
 

Public Member Functions

void propertyChange (PropertyChangeEvent evt)
 

Static Public Member Functions

static TimingMetric getTimingMetric (String name)
 
static void submitNormalizedTimingMetric (TimingMetric metric, long normalization)
 
static void submitTimingMetric (TimingMetric metric)
 

Static Public Attributes

static final CaseDbSchemaVersionNumber CURRENT_DB_SCHEMA_VERSION = new CaseDbSchemaVersionNumber(1, 1)
 

Private Member Functions

 EnterpriseHealthMonitor () throws HealthMonitorException
 
synchronized void activateMonitorLocally () throws HealthMonitorException
 
void addTimingMetric (TimingMetric metric) throws HealthMonitorException
 
void addUserEvent (UserEvent eventType)
 
Connection connect () throws HealthMonitorException
 
void createDatabase () throws HealthMonitorException
 
boolean databaseExists () throws HealthMonitorException
 
boolean databaseIsInitialized () throws HealthMonitorException
 
synchronized void deactivateMonitorLocally () throws HealthMonitorException
 
void gatherTimerBasedMetrics () throws HealthMonitorException
 
CoordinationService.Lock getExclusiveDbLock () throws HealthMonitorException
 
boolean getGlobalEnabledStatusFromDB () throws HealthMonitorException
 
CoordinationService.Lock getSharedDbLock () throws HealthMonitorException
 
CaseDbSchemaVersionNumber getVersion () throws HealthMonitorException
 
void initializeDatabaseSchema () throws HealthMonitorException
 
void performDatabaseQuery () throws HealthMonitorException
 
void setGlobalEnabledStatusInDB (boolean status) throws HealthMonitorException
 
void setupConnectionPool () throws HealthMonitorException
 
void shutdownConnections () throws HealthMonitorException
 
synchronized void startTimer ()
 
synchronized void stopTimer ()
 
void upgradeDatabaseSchema () throws HealthMonitorException
 
void writeCurrentStateToDatabase () throws HealthMonitorException
 

Static Private Member Functions

static void recordMetrics ()
 

Private Attributes

BasicDataSource connectionPool = null
 
CaseDbConnectionInfo connectionSettingsInUse = null
 
ScheduledThreadPoolExecutor healthMonitorOutputTimer
 
String hostName
 
final Map< String, TimingInfotimingInfoMap
 
final List< UserData > userInfoList
 

Static Private Attributes

static final int CONN_POOL_SIZE = 10
 
static final String DATABASE_NAME = "EnterpriseHealthMonitor"
 
static final long DATABASE_WRITE_INTERVAL = 60
 
static EnterpriseHealthMonitor instance
 
static final AtomicBoolean isEnabled = new AtomicBoolean(false)
 
static final Logger logger = Logger.getLogger(EnterpriseHealthMonitor.class.getName())
 

Detailed Description

Class for recording data on the health of the system.

For timing data: Modules will call getTimingMetric() before the code to be timed to get a TimingMetric object Modules will call submitTimingMetric() with the obtained TimingMetric object to log it

Definition at line 64 of file EnterpriseHealthMonitor.java.

Constructor & Destructor Documentation

org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.EnterpriseHealthMonitor ( ) throws HealthMonitorException
private

Member Function Documentation

synchronized void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.activateMonitorLocally ( ) throws HealthMonitorException
private
void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.addTimingMetric ( TimingMetric  metric) throws HealthMonitorException
private

Add the timing metric data to the map.

Parameters
metricThe metric to add. stopTiming() should already have been called.

Definition at line 367 of file EnterpriseHealthMonitor.java.

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.submitNormalizedTimingMetric(), and org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.submitTimingMetric().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.addUserEvent ( UserEvent  eventType)
private

Add a user event to the list.

Parameters
eventType

Definition at line 390 of file EnterpriseHealthMonitor.java.

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.propertyChange().

Connection org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connect ( ) throws HealthMonitorException
private
void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.createDatabase ( ) throws HealthMonitorException
private

Create a new health monitor database.

Exceptions
HealthMonitorException

Definition at line 561 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.core.UserPreferences.getDatabaseConnectionInfo().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.activateMonitorLocally().

boolean org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.databaseExists ( ) throws HealthMonitorException
private

Check whether the health monitor database exists. Does not check the schema.

Returns
true if the database exists, false otherwise
Exceptions
HealthMonitorException

Definition at line 533 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.core.UserPreferences.getDatabaseConnectionInfo().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.activateMonitorLocally().

boolean org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.databaseIsInitialized ( ) throws HealthMonitorException
private

Test whether the database schema has been initialized. We do this by looking for the version number.

Returns
True if it has been initialized, false otherwise.
Exceptions
HealthMonitorException

Definition at line 653 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connect().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.activateMonitorLocally().

synchronized void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.deactivateMonitorLocally ( ) throws HealthMonitorException
private

Deactivate the health monitor. This should only be used when disabling the monitor, not when Autopsy is closing. Clears out any metrics that haven't been written, stops the database write timer, and shuts down the connection pool.

Exceptions
HealthMonitorException

Definition at line 229 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.shutdownConnections().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.gatherTimerBasedMetrics ( ) throws HealthMonitorException
private

Collect metrics at a scheduled time.

Exceptions
HealthMonitorException

Definition at line 437 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.performDatabaseQuery().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.recordMetrics().

CoordinationService.Lock org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getExclusiveDbLock ( ) throws HealthMonitorException
private

Get an exclusive lock for the health monitor database. Acquire this before creating, initializing, or updating the database schema.

Returns
The lock
Exceptions
HealthMonitorException

Definition at line 1204 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.coordinationservice.CoordinationService.getInstance(), org.sleuthkit.autopsy.coordinationservice.CoordinationService.CategoryNode.HEALTH_MONITOR, and org.sleuthkit.autopsy.coordinationservice.CoordinationService.tryGetExclusiveLock().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.activateMonitorLocally().

boolean org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getGlobalEnabledStatusFromDB ( ) throws HealthMonitorException
private

Read the enabled status from the database. Check that the health monitor database exists before calling this.

Returns
true if the database is enabled, false otherwise
Exceptions
HealthMonitorException

Definition at line 755 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connect().

CoordinationService.Lock org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getSharedDbLock ( ) throws HealthMonitorException
private
static TimingMetric org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getTimingMetric ( String  name)
static

Get a metric that will measure the time to execute a section of code. Call this before the section of code to be timed and then submit it afterward using submitTimingMetric(). This method is safe to call regardless of whether the Enterprise Health Monitor is enabled.

Parameters
nameA short but descriptive name describing the code being timed. This name will appear in the UI.
Returns
The TimingMetric object

Definition at line 315 of file EnterpriseHealthMonitor.java.

Referenced by org.sleuthkit.autopsy.keywordsearch.Server.openCore(), org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.performDatabaseQuery(), and org.sleuthkit.autopsy.modules.hashdatabase.HashDbIngestModule.process().

CaseDbSchemaVersionNumber org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getVersion ( ) throws HealthMonitorException
private
void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.initializeDatabaseSchema ( ) throws HealthMonitorException
private
void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.performDatabaseQuery ( ) throws HealthMonitorException
private

Time a database query. Database queries are hard to test in normal processing because the time is so dependent on the size of the tables being queried. We use getImages here because every table it queries is the same size (one entry for each image) so we a) know the size of the tables and b) can use that table size to do normalization.

Exceptions
HealthMonitorException

Definition at line 406 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.casemodule.Case.getCurrentCaseThrows(), org.sleuthkit.autopsy.casemodule.Case.getSleuthkitCase(), org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.getTimingMetric(), and org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.submitNormalizedTimingMetric().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.gatherTimerBasedMetrics().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.propertyChange ( PropertyChangeEvent  evt)
static void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.recordMetrics ( )
staticprivate

Perform all periodic tasks:

  • Check if monitoring has been enabled / disabled in the database
  • Gather any additional metrics
  • Write current metric data to the database Do not run this from a new thread if the case/application is closing.

Definition at line 918 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.gatherTimerBasedMetrics(), and org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.writeCurrentStateToDatabase().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.setGlobalEnabledStatusInDB ( boolean  status) throws HealthMonitorException
private

Set the global enabled status in the database.

Exceptions
HealthMonitorException

Definition at line 774 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connect().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.setupConnectionPool ( ) throws HealthMonitorException
private

Setup a connection pool for db connections.

Exceptions
HealthMonitorException

Definition at line 581 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.core.UserPreferences.getDatabaseConnectionInfo().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connect().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.shutdownConnections ( ) throws HealthMonitorException
private
synchronized void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.startTimer ( )
private

Start the ScheduledThreadPoolExecutor that will handle the database writes.

Definition at line 243 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.stopTimer().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.EnterpriseHealthMonitor().

synchronized void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.stopTimer ( )
private

Stop the ScheduledThreadPoolExecutor to prevent further database writes.

Definition at line 254 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.coreutils.ThreadUtils.shutDownTaskExecutor().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.startTimer().

static void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.submitNormalizedTimingMetric ( TimingMetric  metric,
long  normalization 
)
static

Submit the metric that was previously obtained through getTimingMetric(), incorporating a count that the time should be divided by. Call this immediately after the section of code being timed. This method is safe to call regardless of whether the Enterprise Health Monitor is enabled.

Parameters
metricThe TimingMetric object obtained from getTimingMetric()
normalizationThe number to divide the time by (a zero here will be treated as a one)

Definition at line 350 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.addTimingMetric().

Referenced by org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.performDatabaseQuery(), and org.sleuthkit.autopsy.modules.hashdatabase.HashDbIngestModule.process().

static void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.submitTimingMetric ( TimingMetric  metric)
static

Submit the metric that was previously obtained through getTimingMetric(). Call this immediately after the section of code being timed. This method is safe to call regardless of whether the Enterprise Health Monitor is enabled.

Parameters
metricThe TimingMetric object obtained from getTimingMetric()

Definition at line 329 of file EnterpriseHealthMonitor.java.

References org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.addTimingMetric().

Referenced by org.sleuthkit.autopsy.keywordsearch.Server.openCore(), and org.sleuthkit.autopsy.modules.hashdatabase.HashDbIngestModule.process().

void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.upgradeDatabaseSchema ( ) throws HealthMonitorException
private
void org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.writeCurrentStateToDatabase ( ) throws HealthMonitorException
private

Member Data Documentation

final int org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.CONN_POOL_SIZE = 10
staticprivate

Definition at line 78 of file EnterpriseHealthMonitor.java.

BasicDataSource org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connectionPool = null
private

Definition at line 79 of file EnterpriseHealthMonitor.java.

CaseDbConnectionInfo org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.connectionSettingsInUse = null
private

Definition at line 80 of file EnterpriseHealthMonitor.java.

final CaseDbSchemaVersionNumber org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.CURRENT_DB_SCHEMA_VERSION = new CaseDbSchemaVersionNumber(1, 1)
static
final String org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.DATABASE_NAME = "EnterpriseHealthMonitor"
staticprivate
final long org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.DATABASE_WRITE_INTERVAL = 60
staticprivate

Definition at line 68 of file EnterpriseHealthMonitor.java.

ScheduledThreadPoolExecutor org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.healthMonitorOutputTimer
private

Definition at line 75 of file EnterpriseHealthMonitor.java.

String org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.hostName
private

Definition at line 81 of file EnterpriseHealthMonitor.java.

EnterpriseHealthMonitor org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.instance
staticprivate

Definition at line 73 of file EnterpriseHealthMonitor.java.

final AtomicBoolean org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.isEnabled = new AtomicBoolean(false)
staticprivate

Definition at line 72 of file EnterpriseHealthMonitor.java.

final Logger org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.logger = Logger.getLogger(EnterpriseHealthMonitor.class.getName())
staticprivate

Definition at line 66 of file EnterpriseHealthMonitor.java.

final Map<String, TimingInfo> org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.timingInfoMap
private
final List<UserData> org.sleuthkit.autopsy.healthmonitor.EnterpriseHealthMonitor.userInfoList
private

The documentation for this class was generated from the following file:

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jun 18 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.