blob: 4dec2cdef056f6aa30f94cbdac9cda2283fd1339 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2012, 2014 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
* Marc-Andre Laperle - Support for creating a live session
**********************************************************************/
package org.eclipse.tracecompass.internal.lttng2.control.core.model.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IDomainInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ISessionInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ISnapshotInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceSessionState;
/**
* Implementation of the trace session interface (ISessionInfo) to store session
* related data.
*
* @author Bernd Hufmann
*/
public class SessionInfo extends TraceInfo implements ISessionInfo {
/**
* The default network URL when creating a live session.
*/
public static final String DEFAULT_LIVE_NETWORK_URL = "net://127.0.0.1"; //$NON-NLS-1$
/**
* The default live port for a live session.
*/
public static final int DEFAULT_LIVE_PORT = 5344;
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The trace session state.
*/
private TraceSessionState fState = TraceSessionState.INACTIVE;
/**
* The trace session path for storing traces.
*/
private String fSessionPath = ""; //$NON-NLS-1$
/**
* The domains information of this session.
*/
private final List<IDomainInfo> fDomains = new ArrayList<>();
/**
* Flag to indicate whether trace is streamed over network or not.
*/
private boolean fIsStreamedTrace = false;
/**
* Flag to indicate whether the session is a snapshot session or not.
*/
private boolean fIsSnapshot = false;
/**
* The snapshot information of the session
*/
private ISnapshotInfo fSnapshotInfo = null;
/**
* The network URL for the session (-U)
*/
private String fNetworkUrl = null;
/**
* The control URL for the session (-C)
*/
private String fControlUrl = null;
/**
* The data URL for the session (-D)
*/
private String fDataUrl = null;
/**
* Flag to indicate whether trace is live or not.
*/
private boolean fIsLive = false;
/**
* The delay in micro seconds before the data is flushed and streamed.
*/
private long fLiveDelay = -1;
/**
* The live connection url (Relayd).
*/
private String fLiveUrl;
/**
* The live connection port (Relayd).
*/
private Integer fLivePort;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
*
* @param name
* - name of base event
*/
public SessionInfo(String name) {
super(name);
}
/**
* Copy constructor
*
* @param other
* - the instance to copy
*/
public SessionInfo(SessionInfo other) {
super(other);
fState = other.fState;
fSessionPath = other.fSessionPath;
fIsStreamedTrace = other.fIsStreamedTrace;
fIsSnapshot = other.fIsSnapshot;
fSnapshotInfo = other.fSnapshotInfo;
fNetworkUrl = other.fNetworkUrl;
fControlUrl = other.fControlUrl;
fDataUrl = other.fDataUrl;
for (Iterator<IDomainInfo> iterator = other.fDomains.iterator(); iterator.hasNext();) {
IDomainInfo domain = iterator.next();
if (domain instanceof DomainInfo) {
fDomains.add(new DomainInfo((DomainInfo) domain));
} else {
fDomains.add(domain);
}
}
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
@Override
public TraceSessionState getSessionState() {
return fState;
}
@Override
public void setSessionState(TraceSessionState state) {
fState = state;
}
@Override
public void setSessionState(String stateName) {
fState = TraceSessionState.valueOfString(stateName);
}
@Override
public String getSessionPath() {
if (isSnapshotSession() && fSnapshotInfo != null) {
return fSnapshotInfo.getSnapshotPath();
}
return fSessionPath;
}
@Override
public void setSessionPath(String path) {
fSessionPath = path;
}
@Override
public IDomainInfo[] getDomains() {
return fDomains.toArray(new IDomainInfo[fDomains.size()]);
}
@Override
public void setDomains(List<IDomainInfo> domains) {
fDomains.clear();
for (Iterator<IDomainInfo> iterator = domains.iterator(); iterator.hasNext();) {
IDomainInfo domainInfo = iterator.next();
fDomains.add(domainInfo);
}
}
@Override
public boolean isStreamedTrace() {
if (isSnapshotSession() && getSnapshotInfo() != null) {
return getSnapshotInfo().isStreamedSnapshot();
}
return fIsStreamedTrace;
}
@Override
public void setStreamedTrace(boolean isStreamedTrace) {
fIsStreamedTrace = isStreamedTrace;
}
@Override
public boolean isSnapshotSession() {
return fIsSnapshot || fSnapshotInfo != null;
}
@Override
public void setSnapshot(boolean isSnapshot) {
fIsSnapshot = isSnapshot;
}
@Override
public ISnapshotInfo getSnapshotInfo() {
return fSnapshotInfo;
}
@Override
public void setSnapshotInfo(ISnapshotInfo info) {
fSnapshotInfo = info;
}
@Override
public boolean isLive() {
// FIXME: Disable Live support until we have a better implementation
return fIsLive && false;
}
@Override
public void setLive(boolean isLive) {
fIsLive = isLive;
}
@Override
public long getLiveDelay() {
return fLiveDelay;
}
@Override
public void setLiveDelay(long liveDelay) {
fLiveDelay = liveDelay;
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
public void addDomain(IDomainInfo domainInfo) {
fDomains.add(domainInfo);
}
@SuppressWarnings("nls")
@Override
public String toString() {
StringBuffer output = new StringBuffer();
output.append("[SessionInfo(");
output.append(super.toString());
output.append(",Path=");
output.append(getSessionPath());
output.append(",State=");
output.append(fState);
output.append(",isStreamedTrace=");
output.append(fIsStreamedTrace);
output.append(",isSnapshot=");
output.append(fIsSnapshot);
if (fSnapshotInfo != null) {
output.append(",snapshotInfo=");
output.append(fSnapshotInfo.toString());
}
output.append(",Domains=");
for (Iterator<IDomainInfo> iterator = fDomains.iterator(); iterator.hasNext();) {
IDomainInfo domain = iterator.next();
output.append(domain.toString());
}
output.append(",NetworkUrl=");
output.append(getNetworkUrl());
output.append(",ControlUrl=");
output.append(getControlUrl());
output.append(",DataUrl=");
output.append(getDataUrl());
output.append(")]");
return output.toString();
}
@Override
public String getNetworkUrl() {
return fNetworkUrl;
}
@Override
public void setNetworkUrl(String networkUrl) {
fNetworkUrl = networkUrl;
}
@Override
public String getControlUrl() {
return fControlUrl;
}
@Override
public void setControlUrl(String controlUrl) {
fControlUrl = controlUrl;
}
@Override
public void setDataUrl(String datalUrl) {
fDataUrl = datalUrl;
}
@Override
public String getDataUrl() {
return fDataUrl;
}
@Override
public void setLiveUrl(String liveUrl) {
fLiveUrl = liveUrl;
}
@Override
public void setLivePort(Integer livePort) {
fLivePort = livePort;
}
@Override
public String getLiveUrl() {
return fLiveUrl;
}
@Override
public Integer getLivePort() {
return fLivePort;
}
}