blob: e33e0e9a531bf7aacb9fc627b013d99ec11373e6 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2012, 2015 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
* Bernd Hufmann - Updated for support of LTTng Tools 2.1
**********************************************************************/
package org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IChannelInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceChannelOutputType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ChannelInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ProbeEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.property.TraceChannelPropertySource;
import org.eclipse.ui.views.properties.IPropertySource;
/**
* <p>
* Implementation of the trace channel component.
* </p>
*
* @author Bernd Hufmann
*/
public class TraceChannelComponent extends TraceControlComponent {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Path to icon file for this component (state enabled).
*/
public static final String TRACE_CHANNEL_ICON_FILE_ENABLED = "icons/obj16/channel.gif"; //$NON-NLS-1$
/**
* Path to icon file for this component (state disabled).
*/
public static final String TRACE_CHANNEL_ICON_FILE_DISABLED = "icons/obj16/channel_disabled.gif"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The channel information.
*/
private IChannelInfo fChannelInfo = null;
/**
* The image to be displayed in disabled state.
*/
private Image fDisabledImage = null;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
* @param name - the name of the component.
* @param parent - the parent of this component.
*/
public TraceChannelComponent(String name, ITraceControlComponent parent) {
super(name, parent);
setImage(TRACE_CHANNEL_ICON_FILE_ENABLED);
setToolTip(Messages.TraceControl_ChannelDisplayName);
fChannelInfo = new ChannelInfo(name);
fDisabledImage = Activator.getDefault().loadIcon(TRACE_CHANNEL_ICON_FILE_DISABLED);
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
@Override
public Image getImage() {
if (fChannelInfo.getState() == TraceEnablement.DISABLED) {
return fDisabledImage;
}
return super.getImage();
}
/**
* Sets the channel information.
*
* @param channelInfo
* The channel info to assign to this component
*/
public void setChannelInfo(IChannelInfo channelInfo) {
fChannelInfo = channelInfo;
IEventInfo[] events = fChannelInfo.getEvents();
List<ITraceControlComponent> eventComponents = new ArrayList<>();
for (int i = 0; i < events.length; i++) {
TraceEventComponent event = null;
if (events[i].getClass() == ProbeEventInfo.class) {
event = new TraceProbeEventComponent(events[i].getName(), this);
} else {
event = new TraceEventComponent(events[i].getName(), this);
}
eventComponents.add(event);
event.setEventInfo(events[i]);
}
if (!eventComponents.isEmpty()) {
setChildren(eventComponents);
}
}
/**
* @return the overwrite mode value.
*/
public boolean isOverwriteMode() {
return fChannelInfo.isOverwriteMode();
}
/**
* Sets the overwrite mode value to the given mode.
* @param mode - mode to set.
*/
public void setOverwriteMode(boolean mode){
fChannelInfo.setOverwriteMode(mode);
}
/**
* @return the sub-buffer size.
*/
public long getSubBufferSize() {
return fChannelInfo.getSubBufferSize();
}
/**
* Sets the sub-buffer size to the given value.
* @param bufferSize - size to set to set.
*/
public void setSubBufferSize(long bufferSize) {
fChannelInfo.setSubBufferSize(bufferSize);
}
/**
* @return the number of sub-buffers.
*/
public int getNumberOfSubBuffers() {
return fChannelInfo.getNumberOfSubBuffers();
}
/**
* Sets the number of sub-buffers to the given value.
* @param numberOfSubBuffers - value to set.
*/
public void setNumberOfSubBuffers(int numberOfSubBuffers) {
fChannelInfo.setNumberOfSubBuffers(numberOfSubBuffers);
}
/**
* @return the switch timer interval.
*/
public long getSwitchTimer() {
return fChannelInfo.getSwitchTimer();
}
/**
* Sets the switch timer interval to the given value.
* @param timer - timer value to set.
*/
public void setSwitchTimer(long timer) {
fChannelInfo.setSwitchTimer(timer);
}
/**
* @return the read timer interval.
*/
public long getReadTimer() {
return fChannelInfo.getReadTimer();
}
/**
* Sets the read timer interval to the given value.
* @param timer - timer value to set..
*/
public void setReadTimer(long timer) {
fChannelInfo.setReadTimer(timer);
}
/**
* @return the output type.
*/
public TraceChannelOutputType getOutputType() {
return fChannelInfo.getOutputType();
}
/**
* Sets the output type to the given value.
* @param type - type to set.
*/
public void setOutputType(TraceChannelOutputType type) {
fChannelInfo.setOutputType(type);
}
/**
* Sets the output type to the given value.
* @param type - type to set.
*/
public void setOutputType(String type) {
fChannelInfo.setOutputType(type);
}
/**
* @return the channel state (enabled or disabled).
*/
public TraceEnablement getState() {
return fChannelInfo.getState();
}
/**
* Sets the channel state (enablement) to the given value.
* @param state - state to set.
*/
public void setState(TraceEnablement state) {
fChannelInfo.setState(state);
}
/**
* Sets the channel state (enablement) to the value specified by the given name.
* @param stateName - state to set.
*/
public void setState(String stateName) {
fChannelInfo.setState(stateName);
}
/**
* @return number of discarded events
*/
public long getNumberOfDiscardedEvents() {
return fChannelInfo.getNumberOfDiscardedEvents();
}
/**
* @return number of lost packets
*/
public long getNumberOfLostPackets() {
return fChannelInfo.getNumberOfLostPackets();
}
/**
* @return maximum size of trace files
*/
public long getMaxSizeTraceFiles() {
return fChannelInfo.getMaxSizeTraceFiles();
}
/**
* @return maximum number of trace files
*/
public int getMaxNumberTraceFiles() {
return fChannelInfo.getMaxNumberTraceFiles();
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == IPropertySource.class) {
return adapter.cast(new TraceChannelPropertySource(this));
}
return null;
}
/**
* @return session name from parent
*/
public String getSessionName() {
return ((TraceDomainComponent)getParent()).getSessionName();
}
/**
* @return session from parent
*/
public TraceSessionComponent getSession() {
return ((TraceDomainComponent)getParent()).getSession();
}
/**
* @return the domain type ({@link TraceDomainType})
*/
public TraceDomainType getDomain() {
return ((TraceDomainComponent)getParent()).getDomain();
}
/**
* @return the parent target node
*/
public TargetNodeComponent getTargetNode() {
return ((TraceDomainComponent)getParent()).getTargetNode();
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
/**
* Enables a list of events with no additional parameters.
*
* @param eventNames
* - a list of event names to enabled.
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void enableEvents(List<String> eventNames, IProgressMonitor monitor) throws ExecutionException {
enableEvents(eventNames, null, null, monitor);
}
/**
* Enables a list of events with no additional parameters.
*
* @param eventNames
* - a list of event names to enabled.
* @param filterExpression
* - a filter expression
* @param excludedEvents
* - a list of events to exclude.
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void enableEvents(List<String> eventNames, String filterExpression, List<String> excludedEvents, IProgressMonitor monitor) throws ExecutionException {
getControlService().enableEvents(getSessionName(), getName(), eventNames, getDomain(), filterExpression, excludedEvents, monitor);
}
/**
* Enables all syscalls (for kernel domain)
*
* @param syscallNames
* - a list of syscall to enable
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void enableSyscalls(List<String> syscallNames, IProgressMonitor monitor) throws ExecutionException {
getControlService().enableSyscalls(getSessionName(), getName(), syscallNames, monitor);
}
/**
* Enables a dynamic probe (for kernel domain)
*
* @param eventName
* - event name for probe
* @param isFunction
* - true for dynamic function entry/return probe else false
* @param probe
* - the actual probe
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void enableProbe(String eventName, boolean isFunction, String probe,
IProgressMonitor monitor) throws ExecutionException {
getControlService().enableProbe(getSessionName(), getName(), eventName, isFunction, probe, monitor);
}
/**
* Enables events using log level.
*
* @param eventNames
* - a list of event names
* @param logLevelType
* - a log level type
* @param level
* - a log level
* @param filterExpression
* - a filter expression
* @param domain
* - the domain type ({@link TraceDomainType})
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void enableLogLevel(List<String> eventNames, LogLevelType logLevelType,
ITraceLogLevel level, String filterExpression, TraceDomainType domain, IProgressMonitor monitor)
throws ExecutionException {
getControlService().enableLogLevel(getSessionName(), getName(), eventNames, logLevelType, level, filterExpression, domain, monitor);
}
/**
* Enables a list of events with no additional parameters.
*
* @param eventNames
* - a list of event names to enabled.
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void disableEvent(List<String> eventNames, IProgressMonitor monitor)
throws ExecutionException {
getControlService().disableEvent(getParent().getParent().getName(),
getName(), eventNames, getDomain(), monitor);
}
/**
* Add contexts to given channels and or events
*
* @param contexts
* - a list of contexts to add
* @param monitor
* - a progress monitor
* @throws ExecutionException
* If the command fails
*/
public void addContexts(List<String> contexts, IProgressMonitor monitor)
throws ExecutionException {
getControlService().addContexts(getSessionName(), getName(), null,
getDomain(), contexts, monitor);
}
}