org.opends.server.api
Class MonitorProvider<T extends MonitorProviderCfg>

java.lang.Object
  extended by java.lang.Thread
      extended by org.opends.server.api.DirectoryThread
          extended by org.opends.server.api.MonitorProvider<T>
Type Parameters:
T - The type of configuration handled by this monitor provider.
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
BackendMonitor, ClientConnectionMonitorProvider, ConnectionHandlerMonitor, DatabaseEnvironmentMonitor, EntryCacheMonitorProvider, LDAPStatistics, LightweightServerHandler, MemoryUsageMonitorProvider, ReplicationMonitor, ReplicationServer, ServerHandler, StackTraceMonitorProvider, SystemInfoMonitorProvider, TraditionalWorkQueueMonitor, VersionMonitorProvider

@PublicAPI(stability=VOLATILE,
           mayInstantiate=false,
           mayExtend=true,
           mayInvoke=false)
public abstract class MonitorProvider<T extends MonitorProviderCfg>
extends DirectoryThread

This class defines the set of methods and structures that must be implemented by a Directory Server module that can provide usage, performance, availability, or other kinds of monitor information to clients.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
protected MonitorProvider(java.lang.String threadName)
          Initializes this monitor provider.
 
Method Summary
 void finalizeMonitorProvider()
          Finalizes this monitor provider so that it may be unloaded and taken out of service.
abstract  java.util.List<Attribute> getMonitorData()
          Retrieves a set of attributes containing monitor data that should be returned to the client if the corresponding monitor entry is requested.
abstract  java.lang.String getMonitorInstanceName()
          Retrieves the name of this monitor provider.
 ObjectClass getMonitorObjectClass()
          Retrieves the objectclass that should be included in the monitor entry created from this monitor provider.
abstract  long getUpdateInterval()
          Retrieves the length of time in milliseconds that should elapse between calls to the updateMonitorData method.
abstract  void initializeMonitorProvider(T configuration)
          Initializes this monitor provider based on the information in the provided configuration entry.
 boolean isConfigurationAcceptable(MonitorProviderCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the provided configuration is acceptable for this monitor provider.
 void run()
          Enters a loop, periodically invoking the getUpdateInterval method to updates the data associated with this monitor.
abstract  void updateMonitorData()
          Performs any processing periodic processing that may be desired to update the information associated with this monitor.
 
Methods inherited from class org.opends.server.api.DirectoryThread
getAssociatedTask, getCreationStackTrace, getDebugProperties, getParentThread, setAssociatedTask
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

MonitorProvider

protected MonitorProvider(java.lang.String threadName)
Initializes this monitor provider. Note that no initialization should be done here, since it should be performed in the initializeMonitorProvider class.

Parameters:
threadName - The name to use for this thread for debugging purposes.
Method Detail

initializeMonitorProvider

public abstract void initializeMonitorProvider(T configuration)
                                        throws ConfigException,
                                               InitializationException
Initializes this monitor provider based on the information in the provided configuration entry.

Parameters:
configuration - The configuration to use to initialize this monitor provider.
Throws:
ConfigException - If an unrecoverable problem arises in the process of performing the initialization.
InitializationException - If a problem occurs during initialization that is not related to the server configuration.

isConfigurationAcceptable

public boolean isConfigurationAcceptable(MonitorProviderCfg configuration,
                                         java.util.List<Message> unacceptableReasons)
Indicates whether the provided configuration is acceptable for this monitor provider. It should be possible to call this method on an uninitialized monitor provider instance in order to determine whether the monitor provider would be able to use the provided configuration.

Note that implementations which use a subclass of the provided configuration class will likely need to cast the configuration to the appropriate subclass type.

Parameters:
configuration - The monitor provider configuration for which to make the determination.
unacceptableReasons - A list that may be used to hold the reasons that the provided configuration is not acceptable.
Returns:
true if the provided configuration is acceptable for this monitor provider, or false if not.

finalizeMonitorProvider

public void finalizeMonitorProvider()
Finalizes this monitor provider so that it may be unloaded and taken out of service. This method should be overridden by any monitor provider that has resources that should be released when the monitor is no longer needed. Any monitor that does override this method must first invoke this version by calling super.finalizeMonitorProvider.


getMonitorInstanceName

public abstract java.lang.String getMonitorInstanceName()
Retrieves the name of this monitor provider. It should be unique among all monitor providers, including all instances of the same monitor provider.

Returns:
The name of this monitor provider.

getMonitorObjectClass

public ObjectClass getMonitorObjectClass()
Retrieves the objectclass that should be included in the monitor entry created from this monitor provider. This may be overridden by subclasses that wish to include their own custom objectclass in the monitor entry (e.g., to make it easier to search for monitor entries of that type). The default implementation returns the "extensibleObject" objectclass.

Returns:
The objectclass that should be included in the monitor entry created from this monitor provider.

getUpdateInterval

public abstract long getUpdateInterval()
Retrieves the length of time in milliseconds that should elapse between calls to the updateMonitorData method. A negative or zero return value indicates that the updateMonitorData method should not be periodically invoked.

Returns:
The length of time in milliseconds that should elapse between calls to the updateMonitorData() method.

updateMonitorData

public abstract void updateMonitorData()
Performs any processing periodic processing that may be desired to update the information associated with this monitor. Note that best-effort attempts will be made to ensure that calls to this method come getUpdateInterval milliseconds apart, but no guarantees will be made.


getMonitorData

public abstract java.util.List<Attribute> getMonitorData()
Retrieves a set of attributes containing monitor data that should be returned to the client if the corresponding monitor entry is requested.

Returns:
A set of attributes containing monitor data that should be returned to the client if the corresponding monitor entry is requested.

run

public final void run()
Enters a loop, periodically invoking the getUpdateInterval method to updates the data associated with this monitor.

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread