From feb5d90ec016c99712f19c5485cf7633cd38f111 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 23 Mar 2007 14:26:04 +0000
Subject: [PATCH] Merge admin framework from config-prototype-branch onto trunk.
---
opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java | 720 ++++++++++-------------------------------------------------
1 files changed, 125 insertions(+), 595 deletions(-)
diff --git a/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java b/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
index d39c478..1a248e4 100644
--- a/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
+++ b/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
@@ -30,24 +30,15 @@
import java.io.File;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import org.opends.server.api.ConfigurableComponent;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.ProfilerPluginCfg;
import org.opends.server.api.plugin.DirectoryServerPlugin;
import org.opends.server.api.plugin.PluginType;
import org.opends.server.api.plugin.StartupPluginResult;
-import org.opends.server.config.BooleanConfigAttribute;
-import org.opends.server.config.ConfigAttribute;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
-import org.opends.server.config.IntegerWithUnitConfigAttribute;
-import org.opends.server.config.MultiChoiceConfigAttribute;
-import org.opends.server.config.ReadOnlyConfigAttribute;
-import org.opends.server.config.StringConfigAttribute;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DirectoryConfig;
import org.opends.server.types.DN;
@@ -56,14 +47,12 @@
import org.opends.server.types.ResultCode;
import org.opends.server.util.TimeThread;
-import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.debug.DebugLogger.debugCaught;
import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
import org.opends.server.types.DebugLogLevel;
import static org.opends.server.loggers.Error.*;
import static org.opends.server.messages.MessageHandler.*;
import static org.opends.server.messages.PluginMessages.*;
-import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -78,12 +67,9 @@
* time.
*/
public final class ProfilerPlugin
- extends DirectoryServerPlugin
- implements ConfigurableComponent
+ extends DirectoryServerPlugin<ProfilerPluginCfg>
+ implements ConfigurationChangeListener<ProfilerPluginCfg>
{
-
-
-
/**
* The value to use for the profiler action when no action is necessary.
*/
@@ -115,45 +101,15 @@
- /**
- * The set of time units that will be used for expressing the task retention
- * time.
- */
- private static final LinkedHashMap<String,Double> timeUnits =
- new LinkedHashMap<String,Double>();
-
-
-
- // Indicates whether the profiler should be started automatically when the
- // Directory Server is started.
- private boolean autoStart;
-
// The DN of the configuration entry for this plugin.
private DN configEntryDN;
- // The set of profiler actions that a client may request.
- private LinkedHashSet<String> profilerActions;
-
- // The sample interval to use when capturing stack traces.
- private long sampleInterval;
+ // The current configuration for this plugin.
+ private ProfilerPluginCfg currentConfig;
// The thread that is actually capturing the profile information.
private ProfilerThread profilerThread;
- // The path to the directory into which the captured information should be
- // written.
- private String profileDirectory;
-
-
-
- static
- {
- timeUnits.put(TIME_UNIT_MILLISECONDS_ABBR, 1D);
- timeUnits.put(TIME_UNIT_MILLISECONDS_FULL, 1D);
- timeUnits.put(TIME_UNIT_SECONDS_ABBR, 1000D);
- timeUnits.put(TIME_UNIT_SECONDS_FULL, 1000D);
- }
-
/**
@@ -175,19 +131,13 @@
*/
@Override()
public final void initializePlugin(Set<PluginType> pluginTypes,
- ConfigEntry configEntry)
+ ProfilerPluginCfg configuration)
throws ConfigException
{
- // Initialize the set of profiler actions.
- profilerActions = new LinkedHashSet<String>(4);
- profilerActions.add(PROFILE_ACTION_NONE);
- profilerActions.add(PROFILE_ACTION_START);
- profilerActions.add(PROFILE_ACTION_STOP);
- profilerActions.add(PROFILE_ACTION_CANCEL);
+ configuration.addProfilerChangeListener(this);
-
- // Get and store the DN of the associated configuration entry.
- configEntryDN = configEntry.getDN();
+ currentConfig = configuration;
+ configEntryDN = configuration.dn();
// Make sure that this plugin is only registered as a startup plugin.
@@ -212,114 +162,15 @@
}
- // Get the name of the profile directory from the config entry. We may
- // override this value when reading the stop request, but if that attribute
- // is missing or we get a request to finalize while the profiler is still
- // active, then we will want to know it ahead of time. If there is no
- // value, then just use the current working directory.
- profileDirectory = System.getProperty("user.dir");
-
- int msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR;
- StringConfigAttribute profileDirStub =
- new StringConfigAttribute(ATTR_PROFILE_DIR, getMessage(msgID), true,
- false, false);
- try
+ // Make sure that the profile directory exists.
+ File profileDirectory = getFileForPath(configuration.getProfileDirectory());
+ if (! (profileDirectory.exists() && profileDirectory.isDirectory()))
{
- StringConfigAttribute profileDirAttr =
- (StringConfigAttribute)
- configEntry.getConfigAttribute(profileDirStub);
- if (profileDirAttr != null)
- {
- profileDirectory =
- getFileForPath(profileDirAttr.activeValue()).getAbsolutePath();
- }
+ int msgID = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
+ String message = getMessage(msgID, profileDirectory.getAbsolutePath(),
+ String.valueOf(configEntryDN));
+ throw new ConfigException(msgID, message);
}
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_PROFILE_DIR;
- String message = getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e),
- profileDirectory);
- logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING,
- message, msgID);
- }
-
-
- // Determine whether the plugin should start capturing data automatically
- // when the server is starting.
- autoStart = false;
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART;
- BooleanConfigAttribute autoStartStub =
- new BooleanConfigAttribute(ATTR_PROFILE_AUTOSTART, getMessage(msgID),
- false);
- try
- {
- BooleanConfigAttribute autoStartAttr =
- (BooleanConfigAttribute)
- configEntry.getConfigAttribute(autoStartStub);
- if (autoStartAttr != null)
- {
- autoStart = autoStartAttr.activeValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_AUTOSTART;
- String message = getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e));
- logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING,
- message, msgID);
- }
-
-
- // Determine the sample interval that should be used when capturing stack
- // traces.
- sampleInterval = DEFAULT_PROFILE_INTERVAL;
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL;
- IntegerWithUnitConfigAttribute intervalStub =
- new IntegerWithUnitConfigAttribute(ATTR_PROFILE_INTERVAL,
- getMessage(msgID), false, timeUnits,
- true, 1, false, 0);
- try
- {
- IntegerWithUnitConfigAttribute intervalAttr =
- (IntegerWithUnitConfigAttribute)
- configEntry.getConfigAttribute(intervalStub);
- if (intervalAttr != null)
- {
- sampleInterval = intervalAttr.activeCalculatedValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_INTERVAL;
- String message = getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e),
- sampleInterval);
- logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING,
- message, msgID);
- }
-
-
- // Register with the Directory Server as a configurable component.
- DirectoryConfig.registerConfigurableComponent(this);
}
@@ -330,6 +181,8 @@
@Override()
public final void finalizePlugin()
{
+ currentConfig.removeProfilerChangeListener(this);
+
// If the profiler thread is still active, then cause it to dump the
// information it has captured and exit.
synchronized (this)
@@ -338,8 +191,8 @@
{
profilerThread.stopProfiling();
- String filename = profileDirectory + File.separator + "profile." +
- TimeThread.getGMTTime();
+ String filename = currentConfig.getProfileDirectory() + File.separator +
+ "profile." + TimeThread.getGMTTime();
try
{
profilerThread.writeCaptureData(filename);
@@ -360,9 +213,6 @@
}
}
}
-
-
- DirectoryConfig.deregisterConfigurableComponent(this);
}
@@ -373,10 +223,12 @@
@Override()
public final StartupPluginResult doStartup()
{
+ ProfilerPluginCfg config = currentConfig;
+
// If the profiler should be started automatically, then do so now.
- if (autoStart)
+ if (config.isEnableProfilingOnStartup())
{
- profilerThread = new ProfilerThread(sampleInterval);
+ profilerThread = new ProfilerThread(config.getProfileSampleInterval());
profilerThread.start();
}
@@ -388,465 +240,143 @@
/**
* {@inheritDoc}
*/
- public final DN getConfigurableComponentEntryDN()
+ public boolean isConfigurationChangeAcceptable(
+ ProfilerPluginCfg configuration,
+ List<String> unacceptableReasons)
{
- return configEntryDN;
+ boolean configAcceptable = true;
+
+ // Make sure that the profile directory exists.
+ File profileDirectory = getFileForPath(configuration.getProfileDirectory());
+ if (! (profileDirectory.exists() && profileDirectory.isDirectory()))
+ {
+ int msgID = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
+ unacceptableReasons.add(getMessage(msgID,
+ profileDirectory.getAbsolutePath(),
+ String.valueOf(configEntryDN)));
+ configAcceptable = false;
+ }
+
+ return configAcceptable;
}
/**
- * {@inheritDoc}
+ * Applies the configuration changes to this change listener.
+ *
+ * @param configuration
+ * The new configuration containing the changes.
+ * @return Returns information about the result of changing the
+ * configuration.
*/
- public final List<ConfigAttribute> getConfigurationAttributes()
- {
- LinkedList<ConfigAttribute> attrList = new LinkedList<ConfigAttribute>();
-
-
- int msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL;
- IntegerWithUnitConfigAttribute intervalAttr =
- new IntegerWithUnitConfigAttribute(ATTR_PROFILE_INTERVAL,
- getMessage(msgID), false, timeUnits,
- true, 1, false, 0, sampleInterval,
- TIME_UNIT_MILLISECONDS_FULL);
- attrList.add(intervalAttr);
-
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR;
- StringConfigAttribute profileDirAttr =
- new StringConfigAttribute(ATTR_PROFILE_DIR, getMessage(msgID), true,
- false, false, profileDirectory);
- attrList.add(profileDirAttr);
-
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART;
- BooleanConfigAttribute autoStartAttr =
- new BooleanConfigAttribute(ATTR_PROFILE_AUTOSTART, getMessage(msgID),
- false, autoStart);
- attrList.add(autoStartAttr);
-
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_STATE;
- String stateStr = (profilerThread == null) ? "disabled" : "enabled";
- ReadOnlyConfigAttribute stateAttr =
- new ReadOnlyConfigAttribute(ATTR_PROFILE_STATE, getMessage(msgID),
- stateStr);
- attrList.add(stateAttr);
-
-
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_ACTION;
- MultiChoiceConfigAttribute actionAttr =
- new MultiChoiceConfigAttribute(ATTR_PROFILE_ACTION, getMessage(msgID),
- true, false, false, profilerActions,
- PROFILE_ACTION_NONE);
- attrList.add(actionAttr);
-
-
- return attrList;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- public final boolean hasAcceptableConfiguration(ConfigEntry configEntry,
- List<String> unacceptableReasons)
- {
- // See if there is an acceptable value for the sample interval.
- int msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL;
- IntegerWithUnitConfigAttribute intervalStub =
- new IntegerWithUnitConfigAttribute(ATTR_PROFILE_INTERVAL,
- getMessage(msgID), false, timeUnits,
- true, 1, false, 0);
- try
- {
- IntegerWithUnitConfigAttribute intervalAttr =
- (IntegerWithUnitConfigAttribute)
- configEntry.getConfigAttribute(intervalStub);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_INTERVAL;
- unacceptableReasons.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e),
- sampleInterval));
- return false;
- }
-
-
- // See if there is an acceptable value for the profiler directory.
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR;
- StringConfigAttribute profileDirStub =
- new StringConfigAttribute(ATTR_PROFILE_DIR, getMessage(msgID), true,
- false, false);
- try
- {
- StringConfigAttribute profileDirAttr =
- (StringConfigAttribute)
- configEntry.getConfigAttribute(profileDirStub);
- if (profileDirAttr != null)
- {
- File dirFile = getFileForPath(profileDirAttr.activeValue());
- if (! (dirFile.exists() && dirFile.isDirectory()))
- {
- msgID = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
- unacceptableReasons.add(getMessage(msgID,
- profileDirAttr.activeValue(),
- String.valueOf(configEntryDN)));
- return false;
- }
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_PROFILE_DIR;
- unacceptableReasons.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e),
- sampleInterval));
- return false;
- }
-
-
- // See if there is an acceptable value for the autostart flag.
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART;
- BooleanConfigAttribute autoStartStub =
- new BooleanConfigAttribute(ATTR_PROFILE_AUTOSTART, getMessage(msgID),
- false);
- try
- {
- BooleanConfigAttribute autoStartAttr =
- (BooleanConfigAttribute)
- configEntry.getConfigAttribute(autoStartStub);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_AUTOSTART;
- unacceptableReasons.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e)));
- return false;
- }
-
-
- // See if there is an acceptable value for the profiler action.
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_ACTION;
- MultiChoiceConfigAttribute actionStub =
- new MultiChoiceConfigAttribute(ATTR_PROFILE_ACTION, getMessage(msgID),
- false, false, false, profilerActions);
- try
- {
- MultiChoiceConfigAttribute actionAttr =
- (MultiChoiceConfigAttribute)
- configEntry.getConfigAttribute(actionStub);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_ACTION;
- unacceptableReasons.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e)));
- return false;
- }
-
-
- // If we've gotten here, then everything looks OK.
- return true;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- public final ConfigChangeResult applyNewConfiguration(ConfigEntry configEntry,
- boolean detailedResults)
+ public ConfigChangeResult applyConfigurationChange(
+ ProfilerPluginCfg configuration)
{
ResultCode resultCode = ResultCode.SUCCESS;
boolean adminActionRequired = false;
ArrayList<String> messages = new ArrayList<String>();
+ currentConfig = configuration;
- // Check to see if the sample interval needs to change and apply it as
- // necessary.
- int msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL;
- IntegerWithUnitConfigAttribute intervalStub =
- new IntegerWithUnitConfigAttribute(ATTR_PROFILE_INTERVAL,
- getMessage(msgID), false, timeUnits,
- true, 1, false, 0);
- try
+ // See if we need to perform any action.
+ switch (configuration.getProfileAction())
{
- IntegerWithUnitConfigAttribute intervalAttr =
- (IntegerWithUnitConfigAttribute)
- configEntry.getConfigAttribute(intervalStub);
- if (intervalAttr != null)
- {
- long newInterval = intervalAttr.pendingCalculatedValue();
- if (newInterval != sampleInterval)
+ case START:
+ // See if the profiler thread is running. If so, then don't do
+ // anything. Otherwise, start it.
+ synchronized (this)
{
- sampleInterval = newInterval;
-
- if (detailedResults)
+ if (profilerThread == null)
{
- msgID = MSGID_PLUGIN_PROFILER_UPDATED_INTERVAL;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- sampleInterval));
- }
- }
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
+ profilerThread =
+ new ProfilerThread(configuration.getProfileSampleInterval());
+ profilerThread.start();
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_INTERVAL;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e)));
- resultCode = DirectoryConfig.getServerErrorResultCode();
- }
-
-
-
- // Check to see if the profile directory needs to change.
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR;
- StringConfigAttribute profileDirStub =
- new StringConfigAttribute(ATTR_PROFILE_DIR, getMessage(msgID), true,
- false, false);
- try
- {
- StringConfigAttribute profileDirAttr =
- (StringConfigAttribute)
- configEntry.getConfigAttribute(profileDirStub);
- if (profileDirAttr != null)
- {
- String dirString = profileDirAttr.pendingValue();
- if (! dirString.equals(profileDirectory))
- {
- File dirFile = getFileForPath(dirString);
- if (! (dirFile.exists() && dirFile.isDirectory()))
- {
- msgID = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
- messages.add(getMessage(msgID, dirString,
- String.valueOf(configEntryDN)));
-
- resultCode = DirectoryConfig.getServerErrorResultCode();
+ int msgID = MSGID_PLUGIN_PROFILER_STARTED_PROFILING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
}
else
{
- profileDirectory = dirFile.getAbsolutePath();
+ int msgID = MSGID_PLUGIN_PROFILER_ALREADY_PROFILING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+ }
+ }
+ break;
- if (detailedResults)
+ case STOP:
+ // See if the profiler thread is running. If so, then stop it and write
+ // the information captured to disk. Otherwise, don't do anything.
+ synchronized (this)
+ {
+ if (profilerThread == null)
+ {
+ int msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+ }
+ else
+ {
+ profilerThread.stopProfiling();
+
+ int msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+
+ String filename =
+ getFileForPath(
+ configuration.getProfileDirectory()).getAbsolutePath() +
+ File.separator + "profile." + TimeThread.getGMTTime();
+
+ try
{
- msgID = MSGID_PLUGIN_PROFILER_UPDATED_DIRECTORY;
+ profilerThread.writeCaptureData(filename);
+
+ msgID = MSGID_PLUGIN_PROFILER_WROTE_PROFILE_DATA;
messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- profileDirectory));
+ filename));
}
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ msgID = MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN),
+ filename,
+ stackTraceToSingleLineString(e)));
+
+ resultCode = DirectoryConfig.getServerErrorResultCode();
+ }
+
+ profilerThread = null;
}
}
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
+ break;
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_DIRECTORY;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e)));
-
- resultCode = DirectoryConfig.getServerErrorResultCode();
- }
-
-
- // Check to see if we need to invoke some profiler action. We will only
- // try to take action if we haven't seen any problems with other parameters.
- msgID = MSGID_PLUGIN_PROFILER_DESCRIPTION_ACTION;
- MultiChoiceConfigAttribute actionStub =
- new MultiChoiceConfigAttribute(ATTR_PROFILE_ACTION, getMessage(msgID),
- false, false, false, profilerActions);
- try
- {
- MultiChoiceConfigAttribute actionAttr =
- (MultiChoiceConfigAttribute)
- configEntry.getConfigAttribute(actionStub);
-
- if (actionAttr != null)
- {
- if (resultCode == ResultCode.SUCCESS)
+ case CANCEL:
+ // See if the profiler thread is running. If so, then stop it but don't
+ // write anything to disk. Otherwise, don't do anything.
+ synchronized (this)
{
- String action = actionAttr.pendingValue().toLowerCase();
- if (action.equals(PROFILE_ACTION_NONE))
+ if (profilerThread == null)
{
- // We don't need to do anything at all.
- }
- else if (action.equals(PROFILE_ACTION_START))
- {
- // See if the profiler thread is running. If so, then don't do
- // anything. Otherwise, start it.
- synchronized (this)
- {
- if (profilerThread == null)
- {
- profilerThread = new ProfilerThread(sampleInterval);
- profilerThread.start();
-
- if (detailedResults)
- {
- msgID = MSGID_PLUGIN_PROFILER_STARTED_PROFILING;
- messages.add(getMessage(msgID,
- String.valueOf(configEntryDN)));
- }
- }
- else
- {
- msgID = MSGID_PLUGIN_PROFILER_ALREADY_PROFILING;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- }
- }
- }
- else if (action.equals(PROFILE_ACTION_STOP))
- {
- // See if the profiler thread is running. If so, then stop it and
- // write the information captured to disk. Otherwise, don't do
- // anything.
- synchronized (this)
- {
- if (profilerThread == null)
- {
- msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- }
- else
- {
- profilerThread.stopProfiling();
-
- if (detailedResults)
- {
- msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
- messages.add(getMessage(msgID,
- String.valueOf(configEntryDN)));
- }
-
- String filename = profileDirectory + File.separator +
- "profile." + TimeThread.getGMTTime();
-
- try
- {
- profilerThread.writeCaptureData(filename);
-
- if (detailedResults)
- {
- msgID = MSGID_PLUGIN_PROFILER_WROTE_PROFILE_DATA;
- messages.add(getMessage(msgID,
- String.valueOf(configEntryDN),
- filename));
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- filename,
- stackTraceToSingleLineString(e)));
-
- resultCode = DirectoryConfig.getServerErrorResultCode();
- }
-
- profilerThread = null;
- }
- }
- }
- else if (action.equals(PROFILE_ACTION_CANCEL))
- {
- // See if the profiler thread is running. If so, then stop it but
- // don't write anything to disk. Otherwise, don't do anything.
- synchronized (this)
- {
- if (profilerThread == null)
- {
- msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
- }
- else
- {
- profilerThread.stopProfiling();
-
- if (detailedResults)
- {
- msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
- messages.add(getMessage(msgID,
- String.valueOf(configEntryDN)));
- }
-
- profilerThread = null;
- }
- }
+ int msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
}
else
{
- // This was an unrecognized action. We won't do anything.
- msgID = MSGID_PLUGIN_PROFILER_UNKNOWN_ACTION;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- action));
+ profilerThread.stopProfiling();
- resultCode = DirectoryConfig.getServerErrorResultCode();
+ int msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
+ messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+
+ profilerThread = null;
}
}
- else
- {
- msgID = MSGID_PLUGIN_PROFILER_SKIPPING_ACTION;
- messages.add(getMessage(msgID, actionAttr.pendingValue(),
- String.valueOf(configEntryDN)));
- }
-
- configEntry.removeConfigAttribute(ATTR_PROFILE_ACTION.toLowerCase());
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PLUGIN_PROFILER_CANNOT_PERFORM_ACTION;
- messages.add(getMessage(msgID, String.valueOf(configEntryDN),
- stackTraceToSingleLineString(e)));
-
- resultCode = DirectoryConfig.getServerErrorResultCode();
+ break;
}
-
- // Return the result of the processing.
return new ConfigChangeResult(resultCode, adminActionRequired, messages);
}
}
-
--
Gitblit v1.10.0