/**********************************************************************
* Copyright (c) 2012 Ericsson
- *
+ *
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
+ *
+ * Contributors:
* Bernd Hufmann - Initial API and implementation
**********************************************************************/
package org.eclipse.linuxtools.internal.lttng2.ui.views.control.service;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IBaseEventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IDomainInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IEventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IProbeEventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ISessionInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IUstProviderInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceEventType;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceLogLevel;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.BaseEventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.ChannelInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.DomainInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.EventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.ProbeEventInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.SessionInfo;
-import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.UstProviderInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IBaseEventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IChannelInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IDomainInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IEventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IProbeEventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.ISessionInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.IUstProviderInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.LogLevelType;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.TraceEventType;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.TraceLogLevel;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.BaseEventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.ChannelInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.DomainInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.EventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.ProbeEventInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.SessionInfo;
+import org.eclipse.linuxtools.internal.lttng2.core.control.model.impl.UstProviderInfo;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.logging.ControlCommandLogger;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.messages.Messages;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.preferences.ControlPreferences;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.remote.ICommandResult;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.remote.ICommandShell;
/**
- * <b><u>LTTngControlService</u></b>
* <p>
* Service for sending LTTng trace control commands to remote host.
* </p>
+ *
+ * @author Bernd Hufmann
*/
public class LTTngControlService implements ILttngControlService {
- // ------------------------------------------------------------------------
- // Constants
- // ------------------------------------------------------------------------
- // Command constants
- /**
- * The lttng tools command.
- */
- private final static String CONTROL_COMMAND = "lttng"; //$NON-NLS-1$
- /**
- * Command: lttng list.
- */
- private final static String COMMAND_LIST = CONTROL_COMMAND + " list "; //$NON-NLS-1$
- /**
- * Command to list kernel tracer information.
- */
- private final static String COMMAND_LIST_KERNEL = COMMAND_LIST + "-k"; //$NON-NLS-1$
- /**
- * Command to list user space trace information.
- */
- private final static String COMMAND_LIST_UST = COMMAND_LIST + "-u"; //$NON-NLS-1$
- /**
- * Command to create a session.
- */
- private final static String COMMAND_CREATE_SESSION = CONTROL_COMMAND + " create "; //$NON-NLS-1$
- /**
- * Command to destroy a session.
- */
- private final static String COMMAND_DESTROY_SESSION = CONTROL_COMMAND + " destroy "; //$NON-NLS-1$
- /**
- * Command to destroy a session.
- */
- private final static String COMMAND_START_SESSION = CONTROL_COMMAND + " start "; //$NON-NLS-1$
- /**
- * Command to destroy a session.
- */
- private final static String COMMAND_STOP_SESSION = CONTROL_COMMAND + " stop "; //$NON-NLS-1$
- /**
- * Command to enable a channel.
- */
- private final static String COMMAND_ENABLE_CHANNEL = CONTROL_COMMAND + " enable-channel "; //$NON-NLS-1$
- /**
- * Command to disable a channel.
- */
- private final static String COMMAND_DISABLE_CHANNEL = CONTROL_COMMAND + " disable-channel "; //$NON-NLS-1$
- /**
- * Command to enable a event.
- */
- private final static String COMMAND_ENABLE_EVENT = CONTROL_COMMAND + " enable-event "; //$NON-NLS-1$
- /**
- * Command to disable a event.
- */
- private final static String COMMAND_DISABLE_EVENT = CONTROL_COMMAND + " disable-event "; //$NON-NLS-1$
- // Command options constants
- /**
- * Command line option for output path.
- */
- private final static String OPTION_OUTPUT_PATH = " -o "; //$NON-NLS-1$
- /**
- * Command line option for kernel tracer.
- */
- private final static String OPTION_KERNEL = " -k "; //$NON-NLS-1$
- /**
- * Command line option for UST tracer.
- */
- private final static String OPTION_UST = " -u "; //$NON-NLS-1$
- /**
- * Command line option for specifying a session.
- */
- private final static String OPTION_SESSION = " -s "; //$NON-NLS-1$
- /**
- * Command line option for specifying a channel.
- */
- private final static String OPTION_CHANNEL = " -c "; //$NON-NLS-1$
- /**
- * Command line option for specifying all events.
- */
- private final static String OPTION_ALL = " -a "; //$NON-NLS-1$
- /**
- * Command line option for specifying tracepoint events.
- */
- private final static String OPTION_TRACEPOINT = " --tracepoint "; //$NON-NLS-1$
- /**
- * Command line option for specifying syscall events.
- */
- private final static String OPTION_SYSCALL = " --syscall "; //$NON-NLS-1$
- /**
- * Command line option for specifying a dynamic probe.
- */
- private final static String OPTION_PROBE = " --probe "; //$NON-NLS-1$
- /**
- * Command line option for specifying a dynamic function entry/return probe.
- */
- private final static String OPTION_FUNCTION_PROBE = " --function "; //$NON-NLS-1$
- /**
- * Command line option for specifying a log level range.
- */
- private final static String OPTION_LOGLEVEL = " --loglevel "; //$NON-NLS-1$
- /**
- * Command line option for specifying a specific log level.
- */
- private final static String OPTION_LOGLEVEL_ONLY = " --loglevel-only "; //$NON-NLS-1$
- /**
- * Optional command line option for configuring a channel's overwrite mode.
- */
- private final static String OPTION_OVERWRITE = " --overwrite "; //$NON-NLS-1$
- /**
- * Optional command line option for configuring a channel's number of sub buffers.
- */
- private final static String OPTION_NUM_SUB_BUFFERS = " --num-subbuf "; //$NON-NLS-1$
- /**
- * Optional command line option for configuring a channel's sub buffer size.
- */
- private final static String OPTION_SUB_BUFFER_SIZE = " --subbuf-size "; //$NON-NLS-1$
- /**
- * Optional command line option for configuring a channel's switch timer interval.
- */
- private final static String OPTION_SWITCH_TIMER = " --switch-timer "; //$NON-NLS-1$
- /**
- * Optional command line option for configuring a channel's read timer interval.
- */
- private final static String OPTION_READ_TIMER = " --read-timer "; //$NON-NLS-1$
-
- // Parsing constants
- /**
- * Pattern to match for error output
- */
- private final static Pattern ERROR_PATTERN = Pattern.compile("\\s*Error\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for session information (lttng list)
- */
- private final static Pattern SESSION_PATTERN = Pattern.compile("\\s+(\\d+)\\)\\s+(.*)\\s+\\((.*)\\)\\s+\\[(active|inactive)\\].*"); //$NON-NLS-1$
- /**
- * Pattern to match for session information (lttng list <session>)
- */
- private final static Pattern TRACE_SESSION_PATTERN = Pattern.compile("\\s*Tracing\\s+session\\s+(.*)\\:\\s+\\[(active|inactive)\\].*"); //$NON-NLS-1$
- /**
- * Pattern to match for session path information (lttng list <session>)
- */
- private final static Pattern TRACE_SESSION_PATH_PATTERN = Pattern.compile("\\s*Trace\\s+path\\:\\s+(.*)"); //$NON-NLS-1$
- /**
- * Pattern to match for kernel domain information (lttng list <session>)
- */
- private final static Pattern DOMAIN_KERNEL_PATTERN = Pattern.compile("=== Domain: Kernel ==="); //$NON-NLS-1$
- /**
- * Pattern to match for ust domain information (lttng list <session>)
- */
- private final static Pattern DOMAIN_UST_GLOBAL_PATTERN = Pattern.compile("=== Domain: UST global ==="); //$NON-NLS-1$
- /**
- * Pattern to match for channels section (lttng list <session>)
- */
- private final static Pattern CHANNELS_SECTION_PATTERN = Pattern.compile("\\s*Channels\\:"); //$NON-NLS-1$
- /**
- * Pattern to match for channel information (lttng list <session>)
- */
- private final static Pattern CHANNEL_PATTERN = Pattern.compile("\\s*-\\s+(.*)\\:\\s+\\[(enabled|disabled)\\]"); //$NON-NLS-1$
- /**
- * Pattern to match for events section information (lttng list <session>)
- */
- private final static Pattern EVENT_SECTION_PATTERN = Pattern.compile("\\s*Events\\:"); //$NON-NLS-1$
- /**
- * Pattern to match for event information (no enabled events) (lttng list <session>)
- */
- // private final static String EVENT_NONE_PATTERN = "\\s+None"; //$NON-NLS-1$
- /**
- * Pattern to match for event information (lttng list <session>)
- */
- private final static Pattern EVENT_PATTERN = Pattern.compile("\\s+(.*)\\s+\\(loglevel:\\s+(.*)\\s+\\(\\d*\\)\\)\\s+\\(type:\\s+(.*)\\)\\s+\\[(enabled|disabled)\\].*"); //$NON-NLS-1$
- /**
- * Pattern to match a wildcarded event information (lttng list <session>)
- */
- private final static Pattern WILDCARD_EVENT_PATTERN = Pattern.compile("\\s+(.*)\\s+\\(type:\\s+(.*)\\)\\s+\\[(enabled|disabled)\\].*"); //$NON-NLS-1$
- /**
- * Pattern to match a probe address information (lttng list <session>)
- */
- private final static Pattern PROBE_ADDRESS_PATTERN = Pattern.compile("\\s+(addr)\\:\\s+(0x[0-9a-fA-F]{1,8})"); //$NON-NLS-1$
- /**
- * Pattern to match a probe OFFSET information (lttng list <session>)
- */
- private final static Pattern PROBE_OFFSET_PATTERN = Pattern.compile("\\s+(offset)\\:\\s+(0x[0-9a-fA-F]{1,8})"); //$NON-NLS-1$
- /**
- * Pattern to match a probe SYMBOL information (lttng list <session>)
- */
- private final static Pattern PROBE_SYMBOL_PATTERN = Pattern.compile("\\s+(symbol)\\:\\s+(.+)"); //$NON-NLS-1$
- /**
- * Pattern to match for channel (overwite mode) information (lttng list
- * <session>)
- */
- private final static Pattern OVERWRITE_MODE_ATTRIBUTE = Pattern.compile("\\s+overwrite\\s+mode\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match indicating false for overwrite mode
- */
- private final static String OVERWRITE_MODE_ATTRIBUTE_FALSE = "0"; //$NON-NLS-1$
- /**
- * Pattern to match for channel (sub-buffer size) information (lttng list
- * <session>)
- */
- private final static Pattern SUBBUFFER_SIZE_ATTRIBUTE = Pattern.compile("\\s+subbufers\\s+size\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for channel (number of sub-buffers) information (lttng
- * list <session>)
- */
- private final static Pattern NUM_SUBBUFFERS_ATTRIBUTE = Pattern.compile("\\s+number\\s+of\\s+subbufers\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for channel (switch timer) information (lttng list
- * <session>)
- */
- private final static Pattern SWITCH_TIMER_ATTRIBUTE = Pattern.compile("\\s+switch\\s+timer\\s+interval\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for channel (read timer) information (lttng list
- * <session>)
- */
- private final static Pattern READ_TIMER_ATTRIBUTE = Pattern.compile("\\s+read\\s+timer\\s+interval\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for channel (output type) information (lttng list
- * <session>)
- */
- private final static Pattern OUTPUT_ATTRIBUTE = Pattern.compile("\\s+output\\:.*"); //$NON-NLS-1$
- /**
- * Pattern to match for provider information (lttng list -k/-u)
- */
- private final static Pattern PROVIDER_EVENT_PATTERN = Pattern.compile("\\s*(.*)\\s+\\(loglevel:\\s+(.*)\\s+\\(\\d*\\)\\)\\s+\\(type:\\s+(.*)\\)"); //$NON-NLS-1$
- /**
- * Pattern to match for UST provider information (lttng list -u)
- */
- private final static Pattern UST_PROVIDER_PATTERN = Pattern.compile("\\s*PID\\:\\s+(\\d+)\\s+-\\s+Name\\:\\s+(.*)"); //$NON-NLS-1$
- /**
- * Pattern to match for session information (lttng create <session name>)
- */
- private final static Pattern CREATE_SESSION_NAME_PATTERN = Pattern.compile("\\s*Session\\s+(.*)\\s+created\\."); //$NON-NLS-1$
- /**
- * Pattern to match for session path information (lttng create <session name>)
- */
- private final static Pattern CREATE_SESSION_PATH_PATTERN = Pattern.compile("\\s*Traces\\s+will\\s+be\\s+written\\s+in\\s+(.*).*"); //$NON-NLS-1$
- /**
- * Pattern to match for session command output for "session name not found".
- */
- private final static Pattern SESSION_NOT_FOUND_ERROR_PATTERN = Pattern.compile("\\s*Error:\\s+Session\\s+name\\s+not\\s+found"); //$NON-NLS-1$
-
+
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The command shell implementation
*/
- private ICommandShell fCommandShell = null;
+ protected ICommandShell fCommandShell = null;
+
+ /**
+ * The version string.
+ */
+ protected String fVersion = "Unknown"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Constructors
/**
* Constructor
- *
+ *
* @param shell
* - the command shell implementation to use
*/
fCommandShell = shell;
}
+ // ------------------------------------------------------------------------
+ // Accessors
+ // ------------------------------------------------------------------------
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#getVersion()
+ */
+ @Override
+ public String getVersion() {
+ return fVersion;
+ }
+
+ /**
+ * Sets the version of the LTTng 2.0 control service.
+ * @param version - a version to set
+ */
+ public void setVersion(String version) {
+ fVersion = version;
+ }
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService
* #getSessionNames(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public String[] getSessionNames(IProgressMonitor monitor) throws ExecutionException {
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_LIST);
- String command = COMMAND_LIST;
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ ICommandResult result = executeCommand(command.toString(), monitor);
// Output:
// Available tracing sessions:
int index = 0;
while (index < result.getOutput().length) {
String line = result.getOutput()[index];
- Matcher matcher = SESSION_PATTERN.matcher(line);
+ Matcher matcher = LTTngControlServiceConstants.SESSION_PATTERN.matcher(line);
if (matcher.matches()) {
retArray.add(matcher.group(2).trim());
}
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService
* #getSession(java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public ISessionInfo getSession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
-
- String command = COMMAND_LIST + sessionName;
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_LIST, sessionName);
+ ICommandResult result = executeCommand(command.toString(), monitor);
int index = 0;
// === Domain: Kernel ===
//
String line = result.getOutput()[index];
- Matcher matcher = TRACE_SESSION_PATTERN.matcher(line);
+ Matcher matcher = LTTngControlServiceConstants.TRACE_SESSION_PATTERN.matcher(line);
if (matcher.matches()) {
sessionInfo.setSessionState(matcher.group(2));
index++;
continue;
}
- matcher = TRACE_SESSION_PATH_PATTERN.matcher(line);
+ matcher = LTTngControlServiceConstants.TRACE_SESSION_PATH_PATTERN.matcher(line);
if (matcher.matches()) {
sessionInfo.setSessionPath(matcher.group(1).trim());
index++;
continue;
}
- matcher = DOMAIN_KERNEL_PATTERN.matcher(line);
+ matcher = LTTngControlServiceConstants.DOMAIN_KERNEL_PATTERN.matcher(line);
if (matcher.matches()) {
// Create Domain
IDomainInfo domainInfo = new DomainInfo(Messages.TraceControl_KernelDomainDisplayName);
// set channels
domainInfo.setChannels(channels);
-
+
// set kernel flag
domainInfo.setIsKernel(true);
continue;
}
- matcher = DOMAIN_UST_GLOBAL_PATTERN.matcher(line);
+ matcher = LTTngControlServiceConstants.DOMAIN_UST_GLOBAL_PATTERN.matcher(line);
if (matcher.matches()) {
IDomainInfo domainInfo = new DomainInfo(Messages.TraceControl_UstGlobalDomainDisplayName);
sessionInfo.addDomain(domainInfo);
// set channels
domainInfo.setChannels(channels);
-
+
// set kernel flag
domainInfo.setIsKernel(false);
continue;
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService
* #getKernelProvider(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public List<IBaseEventInfo> getKernelProvider(IProgressMonitor monitor) throws ExecutionException {
- String command = COMMAND_LIST_KERNEL;
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_LIST_KERNEL);
+ ICommandResult result = executeCommand(command.toString(), monitor);
// Kernel events:
// -------------
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService
* #getUstProvider()
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService
* #getUstProvider(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public List<IUstProviderInfo> getUstProvider(IProgressMonitor monitor) throws ExecutionException {
- String command = COMMAND_LIST_UST;
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_LIST_UST);
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ ICommandResult result = executeCommand(command.toString(), monitor);
// UST events:
// -------------
int index = 0;
while (index < result.getOutput().length) {
String line = result.getOutput()[index];
- Matcher matcher = UST_PROVIDER_PATTERN.matcher(line);
+ Matcher matcher = LTTngControlServiceConstants.UST_PROVIDER_PATTERN.matcher(line);
if (matcher.matches()) {
provider = new UstProviderInfo(matcher.group(2).trim());
String newName = formatParameter(sessionName);
String newPath = formatParameter(sessionPath);
- StringBuffer command = new StringBuffer();
- command.append(COMMAND_CREATE_SESSION);
- command.append(newName);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_CREATE_SESSION, newName);
if (newPath != null && !"".equals(newPath)) { //$NON-NLS-1$
- command.append(OPTION_OUTPUT_PATH);
+ command.append(LTTngControlServiceConstants.OPTION_OUTPUT_PATH);
command.append(newPath);
}
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ ICommandResult result = executeCommand(command.toString(), monitor);
+
//Session myssession2 created.
//Traces will be written in /home/user/lttng-traces/myssession2-20120209-095418
String[] output = result.getOutput();
-
+
// Get and verify session name
- Matcher matcher = CREATE_SESSION_NAME_PATTERN.matcher(output[0]);
+ Matcher matcher = LTTngControlServiceConstants.CREATE_SESSION_NAME_PATTERN.matcher(output[0]);
String name = null;
if (matcher.matches()) {
name = String.valueOf(matcher.group(1).trim());
} else {
// Output format not expected
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
- Messages.TraceControl_UnexpectedCommnadOutputFormat + ":\n" + //$NON-NLS-1$
- formatOutput(result.getOutput()));
+ throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
+ Messages.TraceControl_UnexpectedCommandOutputFormat + ":\n" + //$NON-NLS-1$
+ formatOutput(result));
}
if ((name == null) || (!name.equals(sessionName))) {
// Unexpected name returned
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
- Messages.TraceControl_UnexpectedNameError + ": " + name); //$NON-NLS-1$
+ throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
+ Messages.TraceControl_UnexpectedNameError + ": " + name); //$NON-NLS-1$
}
-
+
// Get and verify session path
- matcher = CREATE_SESSION_PATH_PATTERN.matcher(output[1]);
+ matcher = LTTngControlServiceConstants.CREATE_SESSION_PATH_PATTERN.matcher(output[1]);
String path = null;
-
+
if (matcher.matches()) {
path = String.valueOf(matcher.group(1).trim());
} else {
// Output format not expected
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
- Messages.TraceControl_UnexpectedCommnadOutputFormat + ":\n" + //$NON-NLS-1$
- formatOutput(result.getOutput()));
+ throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
+ Messages.TraceControl_UnexpectedCommandOutputFormat + ":\n" + //$NON-NLS-1$
+ formatOutput(result));
}
if ((path == null) || ((sessionPath != null) && (!path.contains(sessionPath)))) {
// Unexpected path
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
+ throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
Messages.TraceControl_UnexpectedPathError + ": " + name); //$NON-NLS-1$
}
-
+
SessionInfo sessionInfo = new SessionInfo(name);
sessionInfo.setSessionPath(path);
return sessionInfo;
}
-
+
@Override
public void destroySession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
String newName = formatParameter(sessionName);
- String command = COMMAND_DESTROY_SESSION + newName;
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_DESTROY_SESSION, newName);
+
+ ICommandResult result = executeCommand(command.toString(), monitor, false);
String[] output = result.getOutput();
-
- if (isError(result) && ((output == null) || (!SESSION_NOT_FOUND_ERROR_PATTERN.matcher(output[0]).matches()))) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (isError(result) && ((output == null) || (!LTTngControlServiceConstants.SESSION_NOT_FOUND_ERROR_PATTERN.matcher(output[0]).matches()))) {
+ throw new ExecutionException(Messages.TraceControl_CommandError + " " + command.toString() + "\n" + formatOutput(result)); //$NON-NLS-1$ //$NON-NLS-2$
}
//Session <sessionName> destroyed
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#startSession(java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
String newSessionName = formatParameter(sessionName);
- String command = COMMAND_START_SESSION + newSessionName;
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_START_SESSION, newSessionName);
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
+ executeCommand(command.toString(), monitor);
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
//Session <sessionName> started
}
@Override
public void stopSession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
String newSessionName = formatParameter(sessionName);
- String command = COMMAND_STOP_SESSION + newSessionName;
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_STOP_SESSION, newSessionName);
- ICommandResult result = fCommandShell.executeCommand(command, monitor);
+ executeCommand(command.toString(), monitor);
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
//Session <sessionName> stopped
-
+
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#enableChannel(java.lang.String, java.util.List, boolean, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo, org.eclipse.core.runtime.IProgressMonitor)
return;
}
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_ENABLE_CHANNEL);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ENABLE_CHANNEL);
for (Iterator<String> iterator = channelNames.iterator(); iterator.hasNext();) {
- String channel = (String) iterator.next();
+ String channel = iterator.next();
command.append(channel);
if (iterator.hasNext()) {
command.append(',');
}
if (isKernel) {
- command.append(OPTION_KERNEL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
} else {
- command.append(OPTION_UST);
+ command.append(LTTngControlServiceConstants.OPTION_UST);
}
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (info != null) {
// --overwrite Flight recorder mode
if (info.isOverwriteMode()) {
- command.append(OPTION_OVERWRITE);
+ command.append(LTTngControlServiceConstants.OPTION_OVERWRITE);
}
// --subbuf-size SIZE Subbuffer size in bytes
// (default: 4096, kernel default: 262144)
- command.append(OPTION_SUB_BUFFER_SIZE);
+ command.append(LTTngControlServiceConstants.OPTION_SUB_BUFFER_SIZE);
command.append(String.valueOf(info.getSubBufferSize()));
// --num-subbuf NUM Number of subbufers
// (default: 8, kernel default: 4)
- command.append(OPTION_NUM_SUB_BUFFERS);
+ command.append(LTTngControlServiceConstants.OPTION_NUM_SUB_BUFFERS);
command.append(String.valueOf(info.getNumberOfSubBuffers()));
-
+
// --switch-timer USEC Switch timer interval in usec (default: 0)
- command.append(OPTION_SWITCH_TIMER);
+ command.append(LTTngControlServiceConstants.OPTION_SWITCH_TIMER);
command.append(String.valueOf(info.getSwitchTimer()));
// --read-timer USEC Read timer interval in usec (default: 200)
- command.append(OPTION_READ_TIMER);
+ command.append(LTTngControlServiceConstants.OPTION_READ_TIMER);
command.append(String.valueOf(info.getReadTimer()));
- }
-
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
}
+
+ executeCommand(command.toString(), monitor);
+
}
/*
*/
@Override
public void disableChannels(String sessionName, List<String> channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException {
-
+
// no channels to enable
if (channelNames.isEmpty()) {
return;
}
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_DISABLE_CHANNEL);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_DISABLE_CHANNEL);
for (Iterator<String> iterator = channelNames.iterator(); iterator.hasNext();) {
- String channel = (String) iterator.next();
+ String channel = iterator.next();
command.append(channel);
if (iterator.hasNext()) {
command.append(',');
}
if (isKernel) {
- command.append(OPTION_KERNEL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
} else {
- command.append(OPTION_UST);
+ command.append(LTTngControlServiceConstants.OPTION_UST);
}
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ executeCommand(command.toString(), monitor);
}
/*
@Override
public void enableEvents(String sessionName, String channelName, List<String> eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException {
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ENABLE_EVENT);
if (eventNames == null || eventNames.isEmpty()) {
- command.append(OPTION_ALL);
+ command.append(LTTngControlServiceConstants.OPTION_ALL);
} else {
for (Iterator<String> iterator = eventNames.iterator(); iterator.hasNext();) {
- String event = (String) iterator.next();
+ String event = iterator.next();
command.append(event);
if (iterator.hasNext()) {
command.append(',');
}
if (isKernel) {
- command.append(OPTION_KERNEL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
} else {
- command.append(OPTION_UST);
+ command.append(LTTngControlServiceConstants.OPTION_UST);
}
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (channelName != null) {
- command.append(OPTION_CHANNEL);
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
command.append(channelName);
}
-
- command.append(OPTION_TRACEPOINT);
-
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+
+ command.append(LTTngControlServiceConstants.OPTION_TRACEPOINT);
+
+ executeCommand(command.toString(), monitor);
+
}
/*
*/
@Override
public void enableSyscalls(String sessionName, String channelName, IProgressMonitor monitor) throws ExecutionException {
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT);
- command.append(OPTION_ALL);
- command.append(OPTION_KERNEL);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ENABLE_EVENT);
+
+ command.append(LTTngControlServiceConstants.OPTION_ALL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (channelName != null) {
- command.append(OPTION_CHANNEL);
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
command.append(channelName);
}
-
- command.append(OPTION_SYSCALL);
-
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+
+ command.append(LTTngControlServiceConstants.OPTION_SYSCALL);
+
+ executeCommand(command.toString(), monitor);
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#enableProbe(java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void enableProbe(String sessionName, String channelName, String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException {
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ENABLE_EVENT);
command.append(eventName);
- command.append(OPTION_KERNEL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (channelName != null) {
- command.append(OPTION_CHANNEL);
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
command.append(channelName);
}
if (isFunction) {
- command.append(OPTION_FUNCTION_PROBE);
+ command.append(LTTngControlServiceConstants.OPTION_FUNCTION_PROBE);
} else {
- command.append(OPTION_PROBE);
+ command.append(LTTngControlServiceConstants.OPTION_PROBE);
}
-
+
command.append(probe);
-
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+
+ executeCommand(command.toString(), monitor);
}
/*
*/
@Override
public void enableLogLevel(String sessionName, String channelName, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException {
- String newSessionName = formatParameter(sessionName);
-
- StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ENABLE_EVENT);
command.append(eventName);
- command.append(OPTION_UST);
+ command.append(LTTngControlServiceConstants.OPTION_UST);
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (channelName != null) {
- command.append(OPTION_CHANNEL);
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
command.append(channelName);
}
-
+
if (logLevelType == LogLevelType.LOGLEVEL) {
- command.append(OPTION_LOGLEVEL);
+ command.append(LTTngControlServiceConstants.OPTION_LOGLEVEL);
} else if (logLevelType == LogLevelType.LOGLEVEL_ONLY) {
- command.append(OPTION_LOGLEVEL_ONLY);
-
+ command.append(LTTngControlServiceConstants.OPTION_LOGLEVEL_ONLY);
+
} else {
return;
}
command.append(level.getInName());
-
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
- }
+
+ executeCommand(command.toString(), monitor);
+
}
/*
*/
@Override
public void disableEvent(String sessionName, String channelName, List<String> eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException {
- String newSessionName = formatParameter(sessionName);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_DISABLE_EVENT);
- StringBuffer command = new StringBuffer(COMMAND_DISABLE_EVENT);
if (eventNames == null) {
- command.append(OPTION_ALL);
+ command.append(LTTngControlServiceConstants.OPTION_ALL);
} else {
// no events to enable
if (eventNames.isEmpty()) {
}
for (Iterator<String> iterator = eventNames.iterator(); iterator.hasNext();) {
- String event = (String) iterator.next();
+ String event = iterator.next();
command.append(event);
if (iterator.hasNext()) {
command.append(',');
}
if (isKernel) {
- command.append(OPTION_KERNEL);
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
} else {
- command.append(OPTION_UST);
+ command.append(LTTngControlServiceConstants.OPTION_UST);
}
- command.append(OPTION_SESSION);
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
command.append(newSessionName);
if (channelName != null) {
- command.append(OPTION_CHANNEL);
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
command.append(channelName);
}
- ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor);
-
- if (isError(result)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$
+ executeCommand(command.toString(), monitor);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#getContexts(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public List<String> getContextList(IProgressMonitor monitor) throws ExecutionException {
+
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ADD_CONTEXT, LTTngControlServiceConstants.OPTION_HELP);
+
+ ICommandResult result = executeCommand(command.toString(), monitor);
+
+ String[] output = result.getOutput();
+
+ List<String> contexts = new ArrayList<String>(0);
+
+ int index = 0;
+ boolean inList = false;
+ while (index < output.length) {
+ String line = result.getOutput()[index];
+
+ Matcher startMatcher = LTTngControlServiceConstants.ADD_CONTEXT_HELP_CONTEXTS_INTRO.matcher(line);
+ Matcher endMatcher = LTTngControlServiceConstants.ADD_CONTEXT_HELP_CONTEXTS_END_LINE.matcher(line);
+
+ if (startMatcher.matches()) {
+ inList = true;
+ } else if (endMatcher.matches()) {
+ break;
+ } else if (inList == true) {
+ String[] tmp = line.split(","); //$NON-NLS-1$
+ for (int i = 0; i < tmp.length; i++) {
+ contexts.add(tmp[i].trim());
+ }
+ }
+ index++;
}
+ return contexts;
}
-
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#addContexts(java.lang.String, java.lang.String, java.lang.String, boolean, java.util.List, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void addContexts(String sessionName, String channelName, String eventName, boolean isKernel, List<String> contextNames, IProgressMonitor monitor) throws ExecutionException {
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_ADD_CONTEXT);
+
+ String newSessionName = formatParameter(sessionName);
+ command.append(LTTngControlServiceConstants.OPTION_SESSION);
+ command.append(newSessionName);
+
+ if (channelName != null) {
+ command.append(LTTngControlServiceConstants.OPTION_CHANNEL);
+ command.append(channelName);
+ }
+
+ if (eventName != null) {
+ command.append(LTTngControlServiceConstants.OPTION_EVENT);
+ command.append(eventName);
+ }
+
+ if (isKernel) {
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
+ } else {
+ command.append(LTTngControlServiceConstants.OPTION_UST);
+ }
+
+ for (Iterator<String> iterator = contextNames.iterator(); iterator.hasNext();) {
+ String context = iterator.next();
+ command.append(LTTngControlServiceConstants.OPTION_CONTEXT_TYPE);
+ command.append(context);
+ }
+
+ executeCommand(command.toString(), monitor);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#calibrate(boolean, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void calibrate(boolean isKernel, IProgressMonitor monitor) throws ExecutionException {
+// String newSessionName = formatParameter(sessionName);
+ StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_CALIBRATE);
+//
+// command.append(OPTION_SESSION);
+// command.append(newSessionName);
+
+ if (isKernel) {
+ command.append(LTTngControlServiceConstants.OPTION_KERNEL);
+ } else {
+ command.append(LTTngControlServiceConstants.OPTION_UST);
+ }
+
+ command.append(LTTngControlServiceConstants.OPTION_FUNCTION_PROBE);
+
+ executeCommand(command.toString(), monitor);
+ }
+
// ------------------------------------------------------------------------
// Helper methods
// ------------------------------------------------------------------------
/**
* Checks if command result is an error result.
- *
+ *
* @param result
* - the command result to check
* @return true if error else false
*/
- private boolean isError(ICommandResult result) {
- if ((result.getResult()) != 0 || (result.getOutput().length < 1 || ERROR_PATTERN.matcher(result.getOutput()[0]).matches())) {
+ protected boolean isError(ICommandResult result) {
+ if ((result.getResult()) != 0 || (result.getOutput().length < 1 || LTTngControlServiceConstants.ERROR_PATTERN.matcher(result.getOutput()[0]).matches())) {
return true;
}
return false;
/**
* Formats the output string as single string.
- *
+ *
* @param output
* - output array
* @return - the formatted output
*/
- private String formatOutput(String[] output) {
- if (output == null || output.length == 0) {
+ protected String formatOutput(ICommandResult result) {
+ if ((result == null) || result.getOutput() == null || result.getOutput().length == 0) {
return ""; //$NON-NLS-1$
}
-
+ String[] output = result.getOutput();
StringBuffer ret = new StringBuffer();
+ ret.append("Return Value: "); //$NON-NLS-1$
+ ret.append(result.getResult());
+ ret.append("\n"); //$NON-NLS-1$
for (int i = 0; i < output.length; i++) {
ret.append(output[i] + "\n"); //$NON-NLS-1$
}
/**
* Parses the domain information.
- *
+ *
* @param output
* - a command output array
* @param currentIndex
* - list for returning channel information
* @return the new current index in command output array
*/
- private int parseDomain(String[] output, int currentIndex, List<IChannelInfo> channels) {
+ protected int parseDomain(String[] output, int currentIndex, List<IChannelInfo> channels) {
int index = currentIndex;
// Channels:
while (index < output.length) {
String line = output[index];
- Matcher outerMatcher = CHANNELS_SECTION_PATTERN.matcher(line);
+ Matcher outerMatcher = LTTngControlServiceConstants.CHANNELS_SECTION_PATTERN.matcher(line);
if (outerMatcher.matches()) {
IChannelInfo channelInfo = null;
while (index < output.length) {
String subLine = output[index];
- Matcher innerMatcher = CHANNEL_PATTERN.matcher(subLine);
+ Matcher innerMatcher = LTTngControlServiceConstants.CHANNEL_PATTERN.matcher(subLine);
if (innerMatcher.matches()) {
channelInfo = new ChannelInfo(""); //$NON-NLS-1$
// get channel name
// add channel
channels.add(channelInfo);
- } else if (OVERWRITE_MODE_ATTRIBUTE.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.OVERWRITE_MODE_ATTRIBUTE.matcher(subLine).matches()) {
String value = getAttributeValue(subLine);
- channelInfo.setOverwriteMode(!OVERWRITE_MODE_ATTRIBUTE_FALSE.equals(value));
- } else if (SUBBUFFER_SIZE_ATTRIBUTE.matcher(subLine).matches()) {
+ channelInfo.setOverwriteMode(!LTTngControlServiceConstants.OVERWRITE_MODE_ATTRIBUTE_FALSE.equals(value));
+ } else if (LTTngControlServiceConstants.SUBBUFFER_SIZE_ATTRIBUTE.matcher(subLine).matches()) {
channelInfo.setSubBufferSize(Long.valueOf(getAttributeValue(subLine)));
- } else if (NUM_SUBBUFFERS_ATTRIBUTE.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.NUM_SUBBUFFERS_ATTRIBUTE.matcher(subLine).matches()) {
channelInfo.setNumberOfSubBuffers(Integer.valueOf(getAttributeValue(subLine)));
- } else if (SWITCH_TIMER_ATTRIBUTE.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.SWITCH_TIMER_ATTRIBUTE.matcher(subLine).matches()) {
channelInfo.setSwitchTimer(Long.valueOf(getAttributeValue(subLine)));
- } else if (READ_TIMER_ATTRIBUTE.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.READ_TIMER_ATTRIBUTE.matcher(subLine).matches()) {
channelInfo.setReadTimer(Long.valueOf(getAttributeValue(subLine)));
- } else if (OUTPUT_ATTRIBUTE.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.OUTPUT_ATTRIBUTE.matcher(subLine).matches()) {
channelInfo.setOutputType(getAttributeValue(subLine));
- } else if (EVENT_SECTION_PATTERN.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.EVENT_SECTION_PATTERN.matcher(subLine).matches()) {
List<IEventInfo> events = new ArrayList<IEventInfo>();
index = parseEvents(output, index, events);
channelInfo.setEvents(events);
// we want to stay at the current index to be able to
// exit the domain
continue;
- } else if (DOMAIN_KERNEL_PATTERN.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_KERNEL_PATTERN.matcher(subLine).matches()) {
return index;
- } else if (DOMAIN_UST_GLOBAL_PATTERN.matcher(subLine).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_UST_GLOBAL_PATTERN.matcher(subLine).matches()) {
return index;
}
index++;
/**
* Parses the event information within a domain.
- *
+ *
* @param output
* - a command output array
* @param currentIndex
* - list for returning event information
* @return the new current index in command output array
*/
- private int parseEvents(String[] output, int currentIndex, List<IEventInfo> events) {
+ protected int parseEvents(String[] output, int currentIndex, List<IEventInfo> events) {
int index = currentIndex;
while (index < output.length) {
String line = output[index];
- if (CHANNEL_PATTERN.matcher(line).matches()) {
+ if (LTTngControlServiceConstants.CHANNEL_PATTERN.matcher(line).matches()) {
// end of channel
return index;
- } else if (DOMAIN_KERNEL_PATTERN.matcher(line).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_KERNEL_PATTERN.matcher(line).matches()) {
// end of domain
return index;
- } else if (DOMAIN_UST_GLOBAL_PATTERN.matcher(line).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_UST_GLOBAL_PATTERN.matcher(line).matches()) {
// end of domain
return index;
- }
+ }
- Matcher matcher = EVENT_PATTERN.matcher(line);
- Matcher matcher2 = WILDCARD_EVENT_PATTERN.matcher(line);
+ Matcher matcher = LTTngControlServiceConstants.EVENT_PATTERN.matcher(line);
+ Matcher matcher2 = LTTngControlServiceConstants.WILDCARD_EVENT_PATTERN.matcher(line);
if (matcher.matches()) {
IEventInfo eventInfo = new EventInfo(matcher.group(1).trim());
eventInfo.setLogLevel(TraceLogLevel.LEVEL_UNKNOWN);
eventInfo.setEventType(matcher2.group(2).trim());
eventInfo.setState(matcher2.group(3));
-
+
if (eventInfo.getEventType() == TraceEventType.PROBE) {
IProbeEventInfo probeEvent = new ProbeEventInfo(eventInfo.getName());
probeEvent.setLogLevel(eventInfo.getLogLevel());
while (index < output.length) {
String probeLine = output[index];
// parse probe
- Matcher addrMatcher = PROBE_ADDRESS_PATTERN.matcher(probeLine);
- Matcher offsetMatcher = PROBE_OFFSET_PATTERN.matcher(probeLine);
- Matcher symbolMatcher = PROBE_SYMBOL_PATTERN.matcher(probeLine);
+ Matcher addrMatcher = LTTngControlServiceConstants.PROBE_ADDRESS_PATTERN.matcher(probeLine);
+ Matcher offsetMatcher = LTTngControlServiceConstants.PROBE_OFFSET_PATTERN.matcher(probeLine);
+ Matcher symbolMatcher = LTTngControlServiceConstants.PROBE_SYMBOL_PATTERN.matcher(probeLine);
if (addrMatcher.matches()) {
String addr = addrMatcher.group(2).trim();
probeEvent.setAddress(addr);
} else if (symbolMatcher.matches()) {
String symbol = symbolMatcher.group(2).trim();
probeEvent.setSymbol(symbol);
- } else if ((EVENT_PATTERN.matcher(probeLine).matches()) || (WILDCARD_EVENT_PATTERN.matcher(probeLine).matches())) {
+ } else if ((LTTngControlServiceConstants.EVENT_PATTERN.matcher(probeLine).matches()) || (LTTngControlServiceConstants.WILDCARD_EVENT_PATTERN.matcher(probeLine).matches())) {
break;
- } else if (CHANNEL_PATTERN.matcher(probeLine).matches()) {
+ } else if (LTTngControlServiceConstants.CHANNEL_PATTERN.matcher(probeLine).matches()) {
break;
- } else if (DOMAIN_KERNEL_PATTERN.matcher(probeLine).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_KERNEL_PATTERN.matcher(probeLine).matches()) {
// end of domain
break;
- } else if (DOMAIN_UST_GLOBAL_PATTERN.matcher(probeLine).matches()) {
+ } else if (LTTngControlServiceConstants.DOMAIN_UST_GLOBAL_PATTERN.matcher(probeLine).matches()) {
// end of domain
break;
}
}
// else if (line.matches(EVENT_NONE_PATTERN)) {
// do nothing
-// } else
+// } else
}
/**
* Parses a line with attributes: <attribute Name>: <attribute value>
- *
+ *
* @param line
* - attribute line to parse
* @return the attribute value as string
*/
- private String getAttributeValue(String line) {
+ protected String getAttributeValue(String line) {
String[] temp = line.split("\\: "); //$NON-NLS-1$
return temp[1];
}
/**
* Parses the event information within a provider.
- *
+ *
* @param output
* - a command output array
* @param currentIndex
* - list for returning event information
* @return the new current index in command output array
*/
- private int getProviderEventInfo(String[] output, int currentIndex, List<IBaseEventInfo> events) {
+ protected int getProviderEventInfo(String[] output, int currentIndex, List<IBaseEventInfo> events) {
int index = currentIndex;
while (index < output.length) {
String line = output[index];
- Matcher matcher = PROVIDER_EVENT_PATTERN.matcher(line);
+ Matcher matcher = LTTngControlServiceConstants.PROVIDER_EVENT_PATTERN.matcher(line);
if (matcher.matches()) {
// sched_kthread_stop (loglevel: TRACE_EMERG0) (type:
// tracepoint)
eventInfo.setLogLevel(matcher.group(2).trim());
eventInfo.setEventType(matcher.group(3).trim());
events.add(eventInfo);
- } else if (UST_PROVIDER_PATTERN.matcher(line).matches()) {
+ } else if (LTTngControlServiceConstants.UST_PROVIDER_PATTERN.matcher(line).matches()) {
return index;
}
index++;
}
/**
- * Formats a command parameter for the command execution i.e. adds quotes
+ * Formats a command parameter for the command execution i.e. adds quotes
* at the beginning and end if necessary.
* @param parameter - parameter to format
* @return formated parameter
*/
- private String formatParameter(String parameter) {
+ protected String formatParameter(String parameter) {
if (parameter != null) {
StringBuffer newString = new StringBuffer();
newString.append(parameter);
}
return null;
}
-
+
+ /**
+ * @param strings array of string that makes up a command line
+ * @return string buffer with created command line
+ */
+ protected StringBuffer createCommand(String... strings) {
+ StringBuffer command = new StringBuffer();
+ command.append(LTTngControlServiceConstants.CONTROL_COMMAND);
+ command.append(getTracingGroupOption());
+ command.append(getVerboseOption());
+ for (String string : strings) {
+ command.append(string);
+ }
+ return command;
+ }
+
+ /**
+ * @return the tracing group option if configured in the preferences
+ */
+ protected String getTracingGroupOption() {
+ if (!ControlPreferences.getInstance().isDefaultTracingGroup() && !ControlPreferences.getInstance().getTracingGroup().equals("")) { //$NON-NLS-1$
+ return LTTngControlServiceConstants.OPTION_TRACING_GROUP + ControlPreferences.getInstance().getTracingGroup();
+ }
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @return the verbose option as configured in the preferences
+ */
+ protected String getVerboseOption() {
+ if (ControlPreferences.getInstance().isLoggingEnabled()) {
+ String level = ControlPreferences.getInstance().getVerboseLevel();
+ if (ControlPreferences.TRACE_CONTROL_VERBOSE_LEVEL_VERBOSE.equals(level)) {
+ return LTTngControlServiceConstants.OPTION_VERBOSE;
+ }
+ if (ControlPreferences.TRACE_CONTROL_VERBOSE_LEVEL_V_VERBOSE.equals(level)) {
+ return LTTngControlServiceConstants.OPTION_VERY_VERBOSE;
+ }
+ if (ControlPreferences.TRACE_CONTROL_VERBOSE_LEVEL_V_V_VERBOSE.equals(level)) {
+ return LTTngControlServiceConstants.OPTION_VERY_VERY_VERBOSE;
+ }
+ }
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * Method that logs the command and command result if logging is enabled as
+ * well as forwards the command execution to the shell.
+ *
+ * @param command
+ * - the command to execute
+ * @param monitor
+ * - a progress monitor
+ * @return the command result
+ * @throws ExecutionException
+ */
+ protected ICommandResult executeCommand(String command,
+ IProgressMonitor monitor) throws ExecutionException {
+ return executeCommand(command, monitor, true);
+ }
+
+ /**
+ * Method that logs the command and command result if logging is enabled as
+ * well as forwards the command execution to the shell.
+ *
+ * @param command
+ * - the command to execute
+ * @param monitor
+ * - a progress monitor
+ * @param checkForError
+ * - true to verify command result, else false
+ * @return the command result
+ * @throws ExecutionException
+ * in case of error result
+ */
+ protected ICommandResult executeCommand(String command,
+ IProgressMonitor monitor, boolean checkForError)
+ throws ExecutionException {
+ if (ControlPreferences.getInstance().isLoggingEnabled()) {
+ ControlCommandLogger.log(command);
+ }
+
+ ICommandResult result = fCommandShell.executeCommand(
+ command.toString(), monitor);
+
+ if (ControlPreferences.getInstance().isLoggingEnabled()) {
+ ControlCommandLogger.log(formatOutput(result));
+ }
+
+ if (isError(result)) {
+ throw new ExecutionException(Messages.TraceControl_CommandError
+ + " " + command.toString() + "\n" + formatOutput(result)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ return result;
+ }
}