opends/src/admin/defn/org/opends/server/admin/std/MonitorProviderConfiguration.xml
New file @@ -0,0 +1,91 @@ <?xml version="1.0" encoding="utf-8"?> <!-- ! CDDL HEADER START ! ! The contents of this file are subject to the terms of the ! Common Development and Distribution License, Version 1.0 only ! (the "License"). You may not use this file except in compliance ! with the License. ! ! You can obtain a copy of the license at ! trunk/opends/resource/legal-notices/OpenDS.LICENSE ! or https://OpenDS.dev.java.net/OpenDS.LICENSE. ! See the License for the specific language governing permissions ! and limitations under the License. ! ! When distributing Covered Code, include this CDDL HEADER in each ! file and include the License file at ! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, ! add the following below this CDDL HEADER, with the fields enclosed ! by brackets "[]" replaced with your own identifying information: ! Portions Copyright [yyyy] [name of copyright owner] ! ! CDDL HEADER END ! ! ! Portions Copyright 2007 Sun Microsystems, Inc. ! --> <adm:managed-object name="monitor-provider" plural-name="monitor-providers" package="org.opends.server.admin.std" abstract="false" xmlns:adm="http://www.opends.org/admin" xmlns:ldap="http://www.opends.org/admin-ldap"> <adm:synopsis> <adm:user-friendly-plural-name /> may be used to provide information about the state of the server or one of its components. This information may be useful for monitoring and/or troubleshooting purposes. </adm:synopsis> <adm:tag name="core"/> <adm:profile name="ldap"> <ldap:object-class> <ldap:oid>1.3.6.1.4.1.26027.1.2.34</ldap:oid> <ldap:name>ds-cfg-monitor-provider</ldap:name> <ldap:superior>top</ldap:superior> </ldap:object-class> </adm:profile> <adm:property name="enabled" mandatory="true"> <adm:synopsis> Indicate whether the <adm:user-friendly-name /> is enabled for use. </adm:synopsis> <adm:syntax> <adm:boolean /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.70</ldap:oid> <ldap:name>ds-cfg-monitor-provider-enabled</ldap:name> </ldap:attribute> </adm:profile> </adm:property> <adm:property name="monitor-class" mandatory="true"> <adm:synopsis> The fully-qualified name of the Java class that provides the <adm:user-friendly-name /> implementation. </adm:synopsis> <adm:syntax> <adm:java-class> <adm:instance-of> org.opends.server.api.MonitorProvider </adm:instance-of> </adm:java-class> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:oid>1.3.6.1.4.1.26027.1.1.69</ldap:oid> <ldap:name>ds-cfg-monitor-provider-class</ldap:name> </ldap:attribute> </adm:profile> </adm:property> </adm:managed-object> opends/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
@@ -347,6 +347,19 @@ </cli:relation> </adm:profile> </adm:relation> <adm:relation name="monitor-provider"> <adm:one-to-many /> <adm:profile name="ldap"> <ldap:rdn-sequence> cn=Monitor Providers,cn=config </ldap:rdn-sequence> </adm:profile> <adm:profile name="cli"> <cli:relation> <cli:default-property name="enabled" /> </cli:relation> </adm:profile> </adm:relation> <adm:product-name>OpenDS Directory Server</adm:product-name> <adm:tag-definition name="logging"> <adm:synopsis>Logging</adm:synopsis> opends/src/server/org/opends/server/api/MonitorProvider.java
@@ -30,7 +30,7 @@ import java.util.List; import org.opends.server.config.ConfigEntry; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.config.ConfigException; import org.opends.server.types.Attribute; import org.opends.server.types.DebugLogLevel; @@ -49,8 +49,11 @@ * implemented by a Directory Server module that can provide usage, * performance, availability, or other kinds of monitor information * to clients. * * @param <T> The type of configuration handled by this monitor * provider. */ public abstract class MonitorProvider public abstract class MonitorProvider<T extends MonitorProviderCfg> extends DirectoryThread { /** @@ -89,9 +92,8 @@ * Initializes this monitor provider based on the information in the * provided configuration entry. * * @param configEntry The configuration entry that contains the * information to use to initialize this * monitor provider. * @param configuration The configuration to use to initialize * this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in * the process of performing the @@ -102,8 +104,7 @@ * related to the server * configuration. */ public abstract void initializeMonitorProvider( ConfigEntry configEntry) public abstract void initializeMonitorProvider(T configuration) throws ConfigException, InitializationException; opends/src/server/org/opends/server/backends/MonitorBackend.java
@@ -35,6 +35,7 @@ import java.util.LinkedHashSet; import java.util.List; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.Backend; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; @@ -425,7 +426,7 @@ // Get the RDN value and see if it matches the instance name for one of // the directory server monitor providers. String rdnValue = entryRDN.getAttributeValue(0).getStringValue(); MonitorProvider monitorProvider = MonitorProvider<? extends MonitorProviderCfg> monitorProvider = DirectoryServer.getMonitorProvider(rdnValue.toLowerCase()); if (monitorProvider == null) { @@ -664,7 +665,9 @@ * @return The monitor entry generated from the information in the provided * monitor provider. */ private Entry getMonitorEntry(DN entryDN, MonitorProvider monitorProvider) private Entry getMonitorEntry(DN entryDN, MonitorProvider<? extends MonitorProviderCfg> monitorProvider) { HashMap<ObjectClass,String> monitorClasses = new LinkedHashMap<ObjectClass,String>(3); @@ -897,7 +900,7 @@ // Iterate through all of the monitor providers defined in the server. // Get an entry for each and compare it against the filter. for (MonitorProvider monitorProvider : for (MonitorProvider<? extends MonitorProviderCfg> monitorProvider : DirectoryServer.getMonitorProviders().values()) { DN providerDN = DirectoryServer.getMonitorProviderDN(monitorProvider); opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -44,6 +44,7 @@ import com.sleepycat.je.DatabaseException; import com.sleepycat.je.EnvironmentConfig; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.Backend; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigException; @@ -355,7 +356,7 @@ } // Register a monitor provider for the environment. MonitorProvider monitorProvider = MonitorProvider<? extends MonitorProviderCfg> monitorProvider = rootContainer.getMonitorProvider(); monitorProviders.add(monitorProvider); DirectoryServer.registerMonitorProvider(monitorProvider); opends/src/server/org/opends/server/config/JMXMBean.java
@@ -48,6 +48,7 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.AlertGenerator; import org.opends.server.api.ConfigurableComponent; import org.opends.server.api.DirectoryServerMBean; @@ -118,7 +119,8 @@ private CopyOnWriteArrayList<InvokableComponent> invokableComponents; // The set of monitor providers for this MBean. private CopyOnWriteArrayList<MonitorProvider> monitorProviders; private CopyOnWriteArrayList<MonitorProvider<? extends MonitorProviderCfg>> monitorProviders; // The DN of the configuration entry with which this MBean is associated. private DN configEntryDN; @@ -206,7 +208,9 @@ configurableComponents = new CopyOnWriteArrayList<ConfigurableComponent>(); invokableComponents = new CopyOnWriteArrayList<InvokableComponent>(); monitorProviders = new CopyOnWriteArrayList<MonitorProvider>(); monitorProviders = new CopyOnWriteArrayList<MonitorProvider< ? extends MonitorProviderCfg>>(); MBeanServer mBeanServer = DirectoryServer.getJMXMBeanServer(); if (mBeanServer != null) @@ -424,7 +428,8 @@ * * @return The set of monitor providers associated with this JMX MBean. */ public CopyOnWriteArrayList<MonitorProvider> getMonitorProviders() public CopyOnWriteArrayList<MonitorProvider<? extends MonitorProviderCfg>> getMonitorProviders() { return monitorProviders; } @@ -438,7 +443,8 @@ * @param component The component to add to the set of monitor providers * for this JMX MBean. */ public void addMonitorProvider(MonitorProvider component) public void addMonitorProvider(MonitorProvider<? extends MonitorProviderCfg> component) { synchronized (monitorProviders) { @@ -548,7 +554,8 @@ { attrType = DirectoryServer.getDefaultAttributeType(name); } for (MonitorProvider monitor : monitorProviders) for (MonitorProvider<? extends MonitorProviderCfg> monitor : monitorProviders) { for (org.opends.server.types.Attribute a : monitor.getMonitorData()) { @@ -912,7 +919,9 @@ attrType = DirectoryServer.getDefaultAttributeType(name); } monitorLoop: for (MonitorProvider monitor : monitorProviders) monitorLoop: for (MonitorProvider<? extends MonitorProviderCfg> monitor : monitorProviders) { for (org.opends.server.types.Attribute a : monitor.getMonitorData()) { @@ -1168,7 +1177,8 @@ } } for (MonitorProvider monitor : monitorProviders) for (MonitorProvider<? extends MonitorProviderCfg> monitor : monitorProviders) { for (org.opends.server.types.Attribute a : monitor.getMonitorData()) { opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
@@ -110,7 +110,7 @@ DN dn = configuration.dn(); try { // Attempt to start the connection handler. ConnectionHandler connectionHandler = ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler = getConnectionHandler(configuration); connectionHandler.start(); @@ -179,8 +179,9 @@ // Register the connection handler with the Directory // Server. DirectoryServer .registerConnectionHandler(connectionHandler); DirectoryServer.registerConnectionHandler( (ConnectionHandler<? extends ConnectionHandlerCfg>) connectionHandler); } catch (ConfigException e) { if (debugEnabled()) { @@ -305,7 +306,8 @@ // because we're still in the startup process. Therefore, we // will not do so and allow the server to start it at the very // end of the initialization process. ConnectionHandler connectionHandler = getConnectionHandler(config); ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler = getConnectionHandler(config); // Put this connection handler in the hash so that we will be // able to find it if it is altered. @@ -366,8 +368,10 @@ // Load and initialize the connection handler named in the config. private ConnectionHandler getConnectionHandler( ConnectionHandlerCfg config) throws ConfigException { private ConnectionHandler<? extends ConnectionHandlerCfg> getConnectionHandler(ConnectionHandlerCfg config) throws ConfigException { String className = config.getJavaImplementationClass(); ConnectionHandlerCfgDefn d = ConnectionHandlerCfgDefn.getInstance(); @@ -419,7 +423,8 @@ } // The connection handler has been successfully initialized. return connectionHandler; return (ConnectionHandler<? extends ConnectionHandlerCfg>) connectionHandler; } opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -53,7 +53,9 @@ import org.opends.server.admin.ClassLoaderProvider; import org.opends.server.admin.server.ServerManagementContext; import org.opends.server.admin.std.server.AttributeSyntaxCfg; import org.opends.server.admin.std.server.ConnectionHandlerCfg; import org.opends.server.admin.std.server.DirectoryStringAttributeSyntaxCfg; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.admin.std.server.PasswordValidatorCfg; import org.opends.server.admin.std.server.SynchronizationProviderCfg; import org.opends.server.admin.std.server.RootDSEBackendCfg; @@ -312,7 +314,9 @@ // The set of monitor providers registered with the Directory Server, as a // mapping between the monitor name and the corresponding implementation. private ConcurrentHashMap<String,MonitorProvider> monitorProviders; private ConcurrentHashMap<String, MonitorProvider<? extends MonitorProviderCfg>> monitorProviders; // The set of password storage schemes defined in the server (mapped between // the lowercase scheme name and the storage scheme) that support the @@ -668,7 +672,8 @@ directoryServer.defaultPasswordPolicyDN = null; directoryServer.defaultPasswordPolicyConfig = null; directoryServer.monitorProviders = new ConcurrentHashMap<String,MonitorProvider>(); new ConcurrentHashMap<String, MonitorProvider<? extends MonitorProviderCfg>>(); directoryServer.backends = new TreeMap<String,Backend>(); directoryServer.offlineBackendsStateIDs = new ConcurrentHashMap<String,Long>(); @@ -5232,7 +5237,9 @@ * @return The set of monitor providers that have been registered with the * Directory Server. */ public static ConcurrentHashMap<String,MonitorProvider> getMonitorProviders() public static ConcurrentHashMap<String, MonitorProvider<? extends MonitorProviderCfg>> getMonitorProviders() { return directoryServer.monitorProviders; } @@ -5248,7 +5255,8 @@ * @return The requested resource monitor, or <CODE>null</CODE> if none * exists with the specified name. */ public static MonitorProvider getMonitorProvider(String lowerName) public static MonitorProvider<? extends MonitorProviderCfg> getMonitorProvider(String lowerName) { return directoryServer.monitorProviders.get(lowerName); } @@ -5263,7 +5271,9 @@ * @param monitorProvider The monitor provider to register with the * Directory Server. */ public static void registerMonitorProvider(MonitorProvider monitorProvider) public static void registerMonitorProvider( MonitorProvider<? extends MonitorProviderCfg> monitorProvider) { String lowerName = toLowerCase(monitorProvider.getMonitorInstanceName()); directoryServer.monitorProviders.put(lowerName, monitorProvider); @@ -7054,7 +7064,9 @@ * @param handler The connection handler to register with the Directory * Server. */ public static void registerConnectionHandler(ConnectionHandler handler) public static void registerConnectionHandler( ConnectionHandler<? extends ConnectionHandlerCfg> handler) { synchronized (directoryServer.connectionHandlers) { opends/src/server/org/opends/server/core/MonitorConfigManager.java
@@ -28,22 +28,21 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import org.opends.server.api.ConfigAddListener; import org.opends.server.api.ConfigChangeListener; import org.opends.server.api.ConfigDeleteListener; import org.opends.server.api.ConfigHandler; import org.opends.server.api.ConfigurableComponent; import org.opends.server.admin.ClassPropertyDefinition; import org.opends.server.admin.server.ConfigurationAddListener; import org.opends.server.admin.server.ConfigurationChangeListener; import org.opends.server.admin.server.ConfigurationDeleteListener; import org.opends.server.admin.std.meta.MonitorProviderCfgDefn; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.admin.std.server.RootCfg; import org.opends.server.admin.server.ServerManagementContext; import org.opends.server.api.MonitorProvider; import org.opends.server.config.BooleanConfigAttribute; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.config.StringConfigAttribute; import org.opends.server.types.ConfigChangeResult; import org.opends.server.types.DN; import org.opends.server.types.ErrorLogCategory; @@ -51,52 +50,37 @@ import org.opends.server.types.InitializationException; import org.opends.server.types.ResultCode; import static org.opends.server.config.ConfigConstants.*; import org.opends.server.types.DebugLogLevel; import static org.opends.server.loggers.ErrorLogger.*; import static org.opends.server.loggers.debug.DebugLogger.*; import org.opends.server.loggers.debug.DebugTracer; import static org.opends.server.messages.ConfigMessages.*; import static org.opends.server.messages.MessageHandler.*; import static org.opends.server.util.ServerConstants.*; import static org.opends.server.util.StaticUtils.*; /** * This class defines a utility that will be used to manage the set of monitor * providers defined in the Directory Server. It will initialize the monitors * when the server starts, and then will manage any additions, removals, or * modifications of any monitor providers while the server is running. * providers defined in the Directory Server. It will initialize the monitor * providers when the server starts, and then will manage any additions, * removals, or modifications to any providers while the server is running. */ public class MonitorConfigManager implements ConfigChangeListener, ConfigAddListener, ConfigDeleteListener implements ConfigurationChangeListener<MonitorProviderCfg>, ConfigurationAddListener<MonitorProviderCfg>, ConfigurationDeleteListener<MonitorProviderCfg> { /** * The tracer object for the debug logger. */ private static final DebugTracer TRACER = getTracer(); // A mapping between the DNs of the monitor entries and the associated monitor // monitor providers. private ConcurrentHashMap<DN,MonitorProvider> monitorProviders; // The configuration handler for the Directory Server. private ConfigHandler configHandler; // A mapping between the DNs of the config entries and the associated monitor // providers. private ConcurrentHashMap<DN,MonitorProvider> monitors; /** * Creates a new instance of this monitor config manager. * Creates a new instance of this monitor provider config manager. */ public MonitorConfigManager() { configHandler = DirectoryServer.getConfigHandler(); monitorProviders = new ConcurrentHashMap<DN,MonitorProvider>(); monitors = new ConcurrentHashMap<DN,MonitorProvider>(); } @@ -106,857 +90,324 @@ * configuration. This should only be called at Directory Server startup. * * @throws ConfigException If a configuration problem causes the monitor * initialization process to fail. * provider initialization process to fail. * * @throws InitializationException If a problem occurs while initializing * the monitors that is not related to the * server configuration. * the monitor providers that is not related * to the server configuration. */ public void initializeMonitorProviders() throws ConfigException, InitializationException { // First, get the monitor configuration base entry. ConfigEntry monitorBaseEntry; try // Get the root configuration object. ServerManagementContext managementContext = ServerManagementContext.getInstance(); RootCfg rootConfiguration = managementContext.getRootConfiguration(); // Register as an add and delete listener with the root configuration so we // can be notified if any monitor provider entries are added or removed. rootConfiguration.addMonitorProviderAddListener(this); rootConfiguration.addMonitorProviderDeleteListener(this); //Initialize the existing monitor providers. for (String name : rootConfiguration.listMonitorProviders()) { DN monitorBaseDN = DN.decode(DN_MONITOR_CONFIG_BASE); monitorBaseEntry = configHandler.getConfigEntry(monitorBaseDN); } catch (Exception e) { if (debugEnabled()) MonitorProviderCfg monitorConfig = rootConfiguration.getMonitorProvider(name); monitorConfig.addChangeListener(this); if (monitorConfig.isEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_CANNOT_GET_BASE; String message = getMessage(msgID, String.valueOf(e)); throw new ConfigException(msgID, message, e); } if (monitorBaseEntry == null) { // The monitor base entry does not exist. This is not acceptable, so // throw an exception. int msgID = MSGID_CONFIG_MONITOR_BASE_DOES_NOT_EXIST; String message = getMessage(msgID); throw new ConfigException(msgID, message); } // Register add and delete listeners with the monitor base entry. We don't // care about modifications to it. monitorBaseEntry.registerAddListener(this); monitorBaseEntry.registerDeleteListener(this); // See if the monitor base has any children. If not, then we don't need to // do anything else. if (! monitorBaseEntry.hasChildren()) { return; } // Iterate through the child entries and process them as monitor // configuration entries. for (ConfigEntry childEntry : monitorBaseEntry.getChildren().values()) { childEntry.registerChangeListener(this); StringBuilder unacceptableReason = new StringBuilder(); if (! configAddIsAcceptable(childEntry, unacceptableReason)) { logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR, MSGID_CONFIG_MONITOR_ENTRY_UNACCEPTABLE, childEntry.getDN().toString(), unacceptableReason.toString()); continue; } try { ConfigChangeResult result = applyConfigurationAdd(childEntry); if (result.getResultCode() != ResultCode.SUCCESS) String className = monitorConfig.getMonitorClass(); try { StringBuilder buffer = new StringBuilder(); List<String> resultMessages = result.getMessages(); if ((resultMessages == null) || (resultMessages.isEmpty())) { buffer.append(getMessage(MSGID_CONFIG_UNKNOWN_UNACCEPTABLE_REASON)); } else { Iterator<String> iterator = resultMessages.iterator(); buffer.append(iterator.next()); while (iterator.hasNext()) { buffer.append(EOL); buffer.append(iterator.next()); } } MonitorProvider<? extends MonitorProviderCfg> monitor = loadMonitor(className, monitorConfig); monitors.put(monitorConfig.dn(), monitor); DirectoryServer.registerMonitorProvider(monitor); } catch (InitializationException ie) { logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR, MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR, childEntry.getDN().toString(), buffer.toString()); ie.getMessage(), ie.getMessageID()); continue; } } catch (Exception e) { logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR, MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR, childEntry.getDN().toString(), String.valueOf(e)); } } } /** * Indicates whether the configuration entry that will result from a proposed * modification is acceptable to this change listener. * * @param configEntry The configuration entry that will result from * the requested update. * @param unacceptableReason A buffer to which this method can append a * human-readable message explaining why the * proposed change is not acceptable. * * @return <CODE>true</CODE> if the proposed entry contains an acceptable * configuration, or <CODE>false</CODE> if it does not. * {@inheritDoc} */ public boolean configChangeIsAcceptable(ConfigEntry configEntry, StringBuilder unacceptableReason) public boolean isConfigurationAddAcceptable( MonitorProviderCfg configuration, List<String> unacceptableReasons) { // Make sure that the entry has an appropriate objectclass for a monitor // provider. if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER)) if (configuration.isEnabled()) { int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); return false; } // Make sure that the entry specifies the monitor class name. StringConfigAttribute classNameAttr; try { StringConfigAttribute classStub = new StringConfigAttribute(ATTR_MONITOR_CLASS, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME), true, false, true); classNameAttr = (StringConfigAttribute) configEntry.getConfigAttribute(classStub); if (classNameAttr == null) // Get the name of the class and make sure we can instantiate it as a // monitor provider. String className = configuration.getMonitorClass(); try { int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); loadMonitor(className, null); } catch (InitializationException ie) { unacceptableReasons.add(ie.getMessage()); return false; } } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } Class monitorClass; try { monitorClass = DirectoryServer.loadClass(classNameAttr.pendingValue()); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } try { MonitorProvider monitor = (MonitorProvider) monitorClass.newInstance(); } catch(Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS; String message = getMessage(msgID, monitorClass.getName(), String.valueOf(configEntry.getDN()), String.valueOf(e)); unacceptableReason.append(message); return false; } // See if this monitor should be enabled. BooleanConfigAttribute enabledAttr; try { BooleanConfigAttribute enabledStub = new BooleanConfigAttribute(ATTR_MONITOR_ENABLED, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED), false); enabledAttr = (BooleanConfigAttribute) configEntry.getConfigAttribute(enabledStub); if (enabledAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); return false; } } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } // If we've gotten here then the monitor entry appears to be acceptable. // If we've gotten here, then it's fine. return true; } /** * Attempts to apply a new configuration to this Directory Server component * based on the provided changed entry. * * @param configEntry The configuration entry that containing the updated * configuration for this component. * * @return Information about the result of processing the configuration * change. * {@inheritDoc} */ public ConfigChangeResult applyConfigurationChange(ConfigEntry configEntry) public ConfigChangeResult applyConfigurationAdd( MonitorProviderCfg configuration) { DN configEntryDN = configEntry.getDN(); ResultCode resultCode = ResultCode.SUCCESS; boolean adminActionRequired = false; ArrayList<String> messages = new ArrayList<String>(); configuration.addChangeListener(this); // Make sure that the entry has an appropriate objectclass for a monitor // provider. if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER)) if (! configuration.isEnabled()) { int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.UNWILLING_TO_PERFORM; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } MonitorProvider<? extends MonitorProviderCfg> monitor = null; // Get the corresponding monitor provider if it is active. MonitorProvider monitor = monitorProviders.get(configEntryDN); // See if this monitor should be enabled or disabled. boolean needsEnabled = false; BooleanConfigAttribute enabledAttr; // Get the name of the class and make sure we can instantiate it as a // monitor provider. String className = configuration.getMonitorClass(); try { BooleanConfigAttribute enabledStub = new BooleanConfigAttribute(ATTR_MONITOR_ENABLED, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED), false); enabledAttr = (BooleanConfigAttribute) configEntry.getConfigAttribute(enabledStub); if (enabledAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.UNWILLING_TO_PERFORM; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } if (enabledAttr.activeValue()) { if (monitor == null) { needsEnabled = true; } else { // The monitor is already active, so no action is required. } } else { if (monitor == null) { // The monitor provider is already disabled, so no action is required // and we can short-circuit out of this processing. return new ConfigChangeResult(resultCode, adminActionRequired, messages); } else { // The monitor is active, so it needs to be disabled. Do this and // return that we were successful. monitorProviders.remove(configEntryDN); monitor.finalizeMonitorProvider(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } } monitor = loadMonitor(className, configuration); } catch (Exception e) catch (InitializationException ie) { if (debugEnabled()) if (resultCode == ResultCode.SUCCESS) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE; messages.add(getMessage(msgID, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // Make sure that the entry specifies the monitor class name. If it has // changed, then we will not try to dynamically apply it. String className; try { StringConfigAttribute classStub = new StringConfigAttribute(ATTR_MONITOR_CLASS, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME), true, false, true); StringConfigAttribute classNameAttr = (StringConfigAttribute) configEntry.getConfigAttribute(classStub); if (classNameAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.OBJECTCLASS_VIOLATION; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } className = classNameAttr.pendingValue(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; messages.add(getMessage(msgID, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } boolean classChanged = false; String oldClassName = null; if (monitor != null) { oldClassName = monitor.getClass().getName(); classChanged = (! className.equals(oldClassName)); } if (classChanged) { // This will not be applied dynamically. Add a message to the response // and indicate that admin action is required. adminActionRequired = true; messages.add(getMessage(MSGID_CONFIG_MONITOR_CLASS_ACTION_REQUIRED, String.valueOf(oldClassName), String.valueOf(className), String.valueOf(configEntryDN))); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } if (needsEnabled) { try { Class monitorClass = DirectoryServer.loadClass(className); monitor = (MonitorProvider) monitorClass.newInstance(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS; messages.add(getMessage(msgID, className, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } try { monitor.initializeMonitorProvider(configEntry); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } messages.add(ie.getMessage()); } int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED; messages.add(getMessage(msgID, className, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } monitorProviders.put(configEntryDN, monitor); if (resultCode == ResultCode.SUCCESS) { monitors.put(configuration.dn(), monitor); DirectoryServer.registerMonitorProvider(monitor); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // If we've gotten here, then there haven't been any changes to anything // that we care about. return new ConfigChangeResult(resultCode, adminActionRequired, messages); } /** * Indicates whether the configuration entry that will result from a proposed * add is acceptable to this add listener. * * @param configEntry The configuration entry that will result from * the requested add. * @param unacceptableReason A buffer to which this method can append a * human-readable message explaining why the * proposed entry is not acceptable. * * @return <CODE>true</CODE> if the proposed entry contains an acceptable * configuration, or <CODE>false</CODE> if it does not. * {@inheritDoc} */ public boolean configAddIsAcceptable(ConfigEntry configEntry, StringBuilder unacceptableReason) public boolean isConfigurationDeleteAcceptable( MonitorProviderCfg configuration, List<String> unacceptableReasons) { // Make sure that no entry already exists with the specified DN. DN configEntryDN = configEntry.getDN(); if (monitorProviders.containsKey(configEntryDN)) { int msgID = MSGID_CONFIG_MONITOR_EXISTS; String message = getMessage(msgID, String.valueOf(configEntryDN)); unacceptableReason.append(message); return false; } // Make sure that the entry has an appropriate objectclass for a monitor // provider if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER)) { int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); return false; } // Make sure that the entry specifies the monitor class name. StringConfigAttribute classNameAttr; try { StringConfigAttribute classStub = new StringConfigAttribute(ATTR_MONITOR_CLASS, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME), true, false, true); classNameAttr = (StringConfigAttribute) configEntry.getConfigAttribute(classStub); if (classNameAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); return false; } } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } Class monitorClass; try { monitorClass = DirectoryServer.loadClass(classNameAttr.pendingValue()); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } MonitorProvider monitor; try { monitor = (MonitorProvider) monitorClass.newInstance(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS; String message = getMessage(msgID, monitorClass.getName(), String.valueOf(configEntryDN), String.valueOf(e)); unacceptableReason.append(message); return false; } // If the monitor provider is a configurable component, then make sure that // its configuration is valid. if (monitor instanceof ConfigurableComponent) { ConfigurableComponent cc = (ConfigurableComponent) monitor; LinkedList<String> errorMessages = new LinkedList<String>(); if (! cc.hasAcceptableConfiguration(configEntry, errorMessages)) { if (errorMessages.isEmpty()) { int msgID = MSGID_CONFIG_MONITOR_UNACCEPTABLE_CONFIG; unacceptableReason.append(getMessage(msgID, String.valueOf(configEntryDN))); } else { Iterator<String> iterator = errorMessages.iterator(); unacceptableReason.append(iterator.next()); while (iterator.hasNext()) { unacceptableReason.append(" "); unacceptableReason.append(iterator.next()); } } return false; } } // See if this monitor entry should be enabled. BooleanConfigAttribute enabledAttr; try { BooleanConfigAttribute enabledStub = new BooleanConfigAttribute(ATTR_MONITOR_ENABLED, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED), false); enabledAttr = (BooleanConfigAttribute) configEntry.getConfigAttribute(enabledStub); if (enabledAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR; String message = getMessage(msgID, configEntry.getDN().toString()); unacceptableReason.append(message); return false; } } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE; String message = getMessage(msgID, configEntry.getDN().toString(), String.valueOf(e)); unacceptableReason.append(message); return false; } // If we've gotten here then the monitor entry appears to be acceptable. // It will always be acceptable to delete or disable a monitor provider. return true; } /** * Attempts to apply a new configuration based on the provided added entry. * * @param configEntry The new configuration entry that contains the * configuration to apply. * * @return Information about the result of processing the configuration * change. * {@inheritDoc} */ public ConfigChangeResult applyConfigurationAdd(ConfigEntry configEntry) public ConfigChangeResult applyConfigurationDelete( MonitorProviderCfg configuration) { DN configEntryDN = configEntry.getDN(); ResultCode resultCode = ResultCode.SUCCESS; boolean adminActionRequired = false; ArrayList<String> messages = new ArrayList<String>(); // Make sure that the entry has an appropriate objectclass for a monitor // provider. if (! configEntry.hasObjectClass(OC_MONITOR_PROVIDER)) { int msgID = MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.UNWILLING_TO_PERFORM; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // See if this monitor should be enabled or disabled. BooleanConfigAttribute enabledAttr; try { BooleanConfigAttribute enabledStub = new BooleanConfigAttribute(ATTR_MONITOR_ENABLED, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED), false); enabledAttr = (BooleanConfigAttribute) configEntry.getConfigAttribute(enabledStub); if (enabledAttr == null) { // The attribute doesn't exist, so it will be disabled by default. int msgID = MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.SUCCESS; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } else if (! enabledAttr.activeValue()) { // It is explicitly configured as disabled, so we don't need to do // anything. return new ConfigChangeResult(resultCode, adminActionRequired, messages); } } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE; messages.add(getMessage(msgID, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // Make sure that the entry specifies the monitor class name. String className; try { StringConfigAttribute classStub = new StringConfigAttribute(ATTR_MONITOR_CLASS, getMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME), true, false, true); StringConfigAttribute classNameAttr = (StringConfigAttribute) configEntry.getConfigAttribute(classStub); if (classNameAttr == null) { int msgID = MSGID_CONFIG_MONITOR_NO_CLASS_NAME; messages.add(getMessage(msgID, String.valueOf(configEntryDN))); resultCode = ResultCode.OBJECTCLASS_VIOLATION; return new ConfigChangeResult(resultCode, adminActionRequired, messages); } className = classNameAttr.pendingValue(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME; messages.add(getMessage(msgID, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // Load and initialize the monitor class, and register it with the Directory // Server. MonitorProvider monitor; try { Class monitorClass = DirectoryServer.loadClass(className); monitor = (MonitorProvider) monitorClass.newInstance(); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INVALID_CLASS; messages.add(getMessage(msgID, className, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } try { monitor.initializeMonitorProvider(configEntry); } catch (Exception e) { if (debugEnabled()) { TRACER.debugCaught(DebugLogLevel.ERROR, e); } int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED; messages.add(getMessage(msgID, className, String.valueOf(configEntryDN), String.valueOf(e))); resultCode = DirectoryServer.getServerErrorResultCode(); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } monitorProviders.put(configEntryDN, monitor); DirectoryServer.registerMonitorProvider(monitor); return new ConfigChangeResult(resultCode, adminActionRequired, messages); } /** * Indicates whether it is acceptable to remove the provided configuration * entry. * * @param configEntry The configuration entry that will be removed * from the configuration. * @param unacceptableReason A buffer to which this method can append a * human-readable message explaining why the * proposed delete is not acceptable. * * @return <CODE>true</CODE> if the proposed entry may be removed from the * configuration, or <CODE>false</CODE> if not. */ public boolean configDeleteIsAcceptable(ConfigEntry configEntry, StringBuilder unacceptableReason) { // A delete should always be acceptable, so just return true. return true; } /** * Attempts to apply a new configuration based on the provided deleted entry. * * @param configEntry The new configuration entry that has been deleted. * * @return Information about the result of processing the configuration * change. */ public ConfigChangeResult applyConfigurationDelete(ConfigEntry configEntry) { DN configEntryDN = configEntry.getDN(); ResultCode resultCode = ResultCode.SUCCESS; boolean adminActionRequired = false; // See if the entry is registered as a monitor provider. If so, deregister // it and stop the monitor. MonitorProvider monitor = monitorProviders.remove(configEntryDN); MonitorProvider monitor = monitors.remove(configuration.dn()); if (monitor != null) { String lowerName = toLowerCase(monitor.getMonitorInstanceName()); DirectoryServer.deregisterMonitorProvider(lowerName); monitor.finalizeMonitorProvider(); } return new ConfigChangeResult(resultCode, adminActionRequired, messages); } return new ConfigChangeResult(resultCode, adminActionRequired); /** * {@inheritDoc} */ public boolean isConfigurationChangeAcceptable( MonitorProviderCfg configuration, List<String> unacceptableReasons) { if (configuration.isEnabled()) { // Get the name of the class and make sure we can instantiate it as a // monitor provider. String className = configuration.getMonitorClass(); try { loadMonitor(className, null); } catch (InitializationException ie) { unacceptableReasons.add(ie.getMessage()); return false; } } // If we've gotten here, then it's fine. return true; } /** * {@inheritDoc} */ public ConfigChangeResult applyConfigurationChange( MonitorProviderCfg configuration) { ResultCode resultCode = ResultCode.SUCCESS; boolean adminActionRequired = false; ArrayList<String> messages = new ArrayList<String>(); // Get the existing monitor provider if it's already enabled. MonitorProvider existingMonitor = monitors.get(configuration.dn()); // If the new configuration has the monitor disabled, then disable it if it // is enabled, or do nothing if it's already disabled. if (! configuration.isEnabled()) { if (existingMonitor != null) { String lowerName = toLowerCase(existingMonitor.getMonitorInstanceName()); DirectoryServer.deregisterMonitorProvider(lowerName); MonitorProvider monitor = monitors.remove(configuration.dn()); if (monitor != null) { monitor.finalizeMonitorProvider(); } } return new ConfigChangeResult(resultCode, adminActionRequired, messages); } // Get the class for the monitor provider. If the monitor is already // enabled, then we shouldn't do anything with it although if the class has // changed then we'll at least need to indicate that administrative action // is required. If the monitor is disabled, then instantiate the class and // initialize and register it as a monitor provider. String className = configuration.getMonitorClass(); if (existingMonitor != null) { if (! className.equals(existingMonitor.getClass().getName())) { adminActionRequired = true; } return new ConfigChangeResult(resultCode, adminActionRequired, messages); } MonitorProvider<? extends MonitorProviderCfg> monitor = null; try { monitor = loadMonitor(className, configuration); } catch (InitializationException ie) { if (resultCode == ResultCode.SUCCESS) { resultCode = DirectoryServer.getServerErrorResultCode(); } messages.add(ie.getMessage()); } if (resultCode == ResultCode.SUCCESS) { monitors.put(configuration.dn(), monitor); DirectoryServer.registerMonitorProvider(monitor); } return new ConfigChangeResult(resultCode, adminActionRequired, messages); } /** * Loads the specified class, instantiates it as a monitor provider, and * optionally initializes that instance. * * @param className The fully-qualified name of the monitor provider * class to load, instantiate, and initialize. * @param configuration The configuration to use to initialize the monitor * provider, or {@code null} if the monitor provider * should not be initialized. * * @return The possibly initialized monitor provider. * * @throws InitializationException If a problem occurred while attempting to * initialize the monitor provider. */ private MonitorProvider<? extends MonitorProviderCfg> loadMonitor(String className, MonitorProviderCfg configuration) throws InitializationException { try { MonitorProviderCfgDefn definition = MonitorProviderCfgDefn.getInstance(); ClassPropertyDefinition propertyDefinition = definition.getMonitorClassPropertyDefinition(); Class<? extends MonitorProvider> providerClass = propertyDefinition.loadClass(className, MonitorProvider.class); MonitorProvider monitor = providerClass.newInstance(); if (configuration != null) { Method method = monitor.getClass().getMethod("initializeMonitorProvider", configuration.definition().getServerConfigurationClass()); method.invoke(monitor, configuration); } return (MonitorProvider<? extends MonitorProviderCfg>) monitor; } catch (Exception e) { int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED; String message = getMessage(msgID, className, String.valueOf(configuration.dn()), stackTraceToSingleLineString(e)); throw new InitializationException(msgID, message, e); } } } opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
@@ -288,7 +288,7 @@ { TraditionalWorkQueueMonitor monitor = new TraditionalWorkQueueMonitor(this); monitor.initializeMonitorProvider(configEntry); monitor.initializeMonitorProvider(null); monitor.start(); DirectoryServer.registerMonitorProvider(monitor); } opends/src/server/org/opends/server/monitors/BackendMonitor.java
@@ -32,9 +32,9 @@ import java.util.LinkedList; import java.util.List; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.Backend; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.schema.BooleanSyntax; import org.opends.server.types.Attribute; import org.opends.server.types.AttributeType; @@ -54,11 +54,8 @@ * writability mode, and the number of entries it contains. */ public class BackendMonitor extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { // The attribute type that will be used to report the backend ID. private AttributeType backendIDType; @@ -102,7 +99,7 @@ /** * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) { monitorName = backend.getBackendID() + " Backend"; opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
@@ -32,10 +32,11 @@ import java.util.LinkedList; import java.util.List; import org.opends.server.admin.std.server.ConnectionHandlerCfg; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.ClientConnection; import org.opends.server.api.ConnectionHandler; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.types.Attribute; import org.opends.server.types.AttributeType; import org.opends.server.types.AttributeValue; @@ -54,11 +55,8 @@ * listeners, and established connections. */ public class ConnectionHandlerMonitor extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { // The attribute type that will be used to report the established connections. private AttributeType connectionsType; @@ -88,11 +86,11 @@ * @param connectionHandler The connection handler with which this monitor * is associated. */ public ConnectionHandlerMonitor(ConnectionHandler connectionHandler) public ConnectionHandlerMonitor( ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler) { super(connectionHandler.getConnectionHandlerName()); this.connectionHandler = connectionHandler; } @@ -101,7 +99,7 @@ /** * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) { monitorName = connectionHandler.getConnectionHandlerName(); opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
@@ -30,9 +30,9 @@ import org.opends.server.loggers.debug.DebugTracer; import org.opends.server.types.DebugLogLevel; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.AttributeSyntax; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.protocols.asn1.ASN1OctetString; @@ -58,7 +58,8 @@ * It uses reflection on the environment statistics object * so that we don't need to keep a list of all the stats. */ public class DatabaseEnvironmentMonitor extends MonitorProvider public class DatabaseEnvironmentMonitor extends MonitorProvider<MonitorProviderCfg> { /** * The tracer object for the debug logger. @@ -95,20 +96,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * @throws org.opends.server.config.ConfigException * If an unrecoverable problem arises in the * process of performing the initialization. * @throws org.opends.server.types.InitializationException * If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { } opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
@@ -34,8 +34,8 @@ import java.util.Map.Entry; import java.util.TreeMap; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.types.Attribute; @@ -52,11 +52,8 @@ * the JVM. */ public class StackTraceMonitorProvider extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { /** * Initializes this monitor provider. */ @@ -70,20 +67,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * * @throws InitializationException If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { // No initialization is required. opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
@@ -32,8 +32,8 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.protocols.asn1.ASN1OctetString; @@ -54,7 +54,7 @@ * Server is running. */ public class SystemInfoMonitorProvider extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { /** * The tracer object for the debug logger. @@ -77,20 +77,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * * @throws InitializationException If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { // No initialization is required. opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
@@ -31,9 +31,9 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.AttributeSyntax; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.extensions.TraditionalWorkQueue; @@ -51,11 +51,8 @@ * information about the state of the work queue. */ public class TraditionalWorkQueueMonitor extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { /** * The name to use for the monitor attribute that provides the current request * backlog. @@ -129,20 +126,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * * @throws InitializationException If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { maxBacklog = 0; opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
@@ -31,8 +31,8 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.protocols.asn1.ASN1OctetString; @@ -53,7 +53,7 @@ * information. */ public class VersionMonitorProvider extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { /** * The tracer object for the debug logger. @@ -158,20 +158,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * * @throws InitializationException If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { // No initialization is required. opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -32,9 +32,9 @@ import java.util.LinkedHashSet; import java.util.concurrent.locks.ReentrantLock; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.core.DirectoryServer; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.protocols.asn1.ASN1OctetString; import org.opends.server.types.Attribute; @@ -73,7 +73,7 @@ * about the interaction with a specific client or aggregated for all clients). */ public class LDAPStatistics extends MonitorProvider extends MonitorProvider<MonitorProviderCfg> { /** * The tracer object for the debug logger. @@ -82,7 +82,6 @@ // The statistics maintained by this class. private long abandonRequests; private long addRequests; @@ -203,16 +202,9 @@ /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * {@inheritDoc} */ public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException { // Throw an exception, because this monitor is not intended to be @@ -220,7 +212,7 @@ // explicitly created and registered by the LDAP connection handler or an // LDAP client connection. int msgID = MSGID_LDAP_STATS_INVALID_MONITOR_INITIALIZATION; String message = getMessage(msgID, String.valueOf(configEntry.getDN())); String message = getMessage(msgID, String.valueOf(configuration.dn())); throw new ConfigException(msgID, message); } opends/src/server/org/opends/server/replication/plugin/ReplicationMonitor.java
@@ -29,8 +29,8 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.core.DirectoryServer; import org.opends.server.types.Attribute; import org.opends.server.types.AttributeType; @@ -39,7 +39,7 @@ /** * Class used to generate monitoring information for the replication. */ public class ReplicationMonitor extends MonitorProvider public class ReplicationMonitor extends MonitorProvider<MonitorProviderCfg> { private ReplicationDomain domain; // the replication plugin @@ -54,12 +54,10 @@ } /** * initialization function for the Monitor. * Not used for now * @param configEntry the entry to use for initialization * {@inheritDoc} */ @Override public void initializeMonitorProvider(ConfigEntry configEntry) @Override() public void initializeMonitorProvider(MonitorProviderCfg configuration) { // TODO Auto-generated method stub } opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -37,9 +37,9 @@ import java.util.LinkedList; import java.util.NoSuchElementException; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.DirectoryThread; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.types.Attribute; import org.opends.server.types.DN; @@ -421,7 +421,7 @@ * This internal class is used to implement the Monitoring capabilities * of the dbHandler. */ private class DbMonitorProvider extends MonitorProvider private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg> { private DbMonitorProvider() { @@ -478,7 +478,7 @@ * {@inheritDoc} */ @Override public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException,InitializationException { // Nothing to do for now opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -46,6 +46,7 @@ import java.util.Set; import org.opends.server.admin.server.ConfigurationChangeListener; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.admin.std.server.ReplicationServerCfg; import org.opends.server.api.ConfigurableComponent; import org.opends.server.api.MonitorProvider; @@ -75,7 +76,7 @@ * * It is responsible for creating the replication server cache and managing it */ public class ReplicationServer extends MonitorProvider public class ReplicationServer extends MonitorProvider<MonitorProviderCfg> implements Runnable, ConfigurableComponent, ConfigurationChangeListener<ReplicationServerCfg> { @@ -534,7 +535,7 @@ * {@inheritDoc} */ @Override public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuraiton) { // Nothing to do for now } opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -44,8 +44,8 @@ import java.util.TreeSet; import java.util.concurrent.Semaphore; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.replication.common.ChangeNumber; @@ -73,7 +73,7 @@ * This class defines a server handler, which handles all interaction with a * replication server. */ public class ServerHandler extends MonitorProvider public class ServerHandler extends MonitorProvider<MonitorProviderCfg> { /** * The tracer object for the debug logger. @@ -1104,21 +1104,10 @@ } /** * Initializes this monitor provider based on the information in the provided * configuration entry. * * @param configEntry The configuration entry that contains the information * to use to initialize this monitor provider. * * @throws ConfigException If an unrecoverable problem arises in the * process of performing the initialization. * * @throws InitializationException If a problem occurs during initialization * that is not related to the server * configuration. * {@inheritDoc} */ @Override public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException,InitializationException { // Nothing to do for now opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitorTestCase.java
@@ -28,6 +28,7 @@ import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.core.DirectoryServer; @@ -64,7 +65,8 @@ throws Exception { String monitorName = "userroot database environment"; MonitorProvider provider = DirectoryServer.getMonitorProvider(monitorName); MonitorProvider<? extends MonitorProviderCfg> provider = DirectoryServer.getMonitorProvider(monitorName); provider.initializeMonitorProvider(null); return provider; } opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
@@ -61,7 +61,7 @@ public class InternalSearchMonitorTestCase extends MonitorTestCase { static MonitorProvider testMonitorProvider = new TestMonitorProvider(); static TestMonitorProvider testMonitorProvider = new TestMonitorProvider(); /** * Ensures that the Directory Server is started. opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/StackTraceMonitorTestCase.java
@@ -63,7 +63,7 @@ throws Exception { StackTraceMonitorProvider monitorProvider = new StackTraceMonitorProvider(); monitorProvider.initializeMonitorProvider(configEntry); monitorProvider.initializeMonitorProvider(null); return monitorProvider; } } opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/SystemInfoMonitorTestCase.java
@@ -63,7 +63,7 @@ throws Exception { SystemInfoMonitorProvider monitorProvider = new SystemInfoMonitorProvider(); monitorProvider.initializeMonitorProvider(configEntry); monitorProvider.initializeMonitorProvider(null); return monitorProvider; } } opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
@@ -27,8 +27,8 @@ package org.opends.server.monitors; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.types.InitializationException; import org.opends.server.types.Attribute; @@ -39,14 +39,14 @@ /** * This test monitor provider has a DN embedded in its instance name. */ class TestMonitorProvider extends MonitorProvider class TestMonitorProvider extends MonitorProvider<MonitorProviderCfg> { public TestMonitorProvider() { super("Test Monitor Thread"); } public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { // No implementation required. opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/VersionMonitorTestCase.java
@@ -63,7 +63,7 @@ throws Exception { VersionMonitorProvider monitorProvider = new VersionMonitorProvider(); monitorProvider.initializeMonitorProvider(configEntry); monitorProvider.initializeMonitorProvider(null); return monitorProvider; } } opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
@@ -37,8 +37,8 @@ import java.util.List; import org.opends.server.TestCaseUtils; import org.opends.server.admin.std.server.MonitorProviderCfg; import org.opends.server.api.MonitorProvider; import org.opends.server.config.ConfigEntry; import org.opends.server.config.ConfigException; import org.opends.server.core.AddOperation; import org.opends.server.core.DirectoryServer; @@ -213,7 +213,7 @@ ServerSocket socket = TestCaseUtils.bindFreePort(); replServerPort = socket.getLocalPort(); socket.close(); // Change log String replServerLdif = "dn: cn=Replication Server, " + synchroPluginStringDN + "\n" @@ -364,7 +364,7 @@ } } private class Monitor extends MonitorProvider private class Monitor extends MonitorProvider<MonitorProviderCfg> { protected Monitor(String threadName) { @@ -401,7 +401,7 @@ } @Override public void initializeMonitorProvider(ConfigEntry configEntry) public void initializeMonitorProvider(MonitorProviderCfg configuration) throws ConfigException, InitializationException { // nothing to do