blob: e777aeb33e61a96acea18d8a2abf38ebffe2724e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 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
*******************************************************************************/
package org.eclipse.tracecompass.incubator.internal.traceevent.core.event;
import java.util.Map;
import java.util.logging.Level;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.analysis.os.linux.core.event.aspect.LinuxTidAspect;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfCallsite;
import com.google.common.collect.ImmutableList;
/**
* Aspects for Trace Compass Logs
*
* @author Matthew Khouzam
*/
public class TraceEventAspects {
/**
* Argumnts aspect
*/
public static final ITmfEventAspect<Map<String, Object>> ARGS_ASPECT = new TraceCompassScopeLogArgsAspect();
/**
* An ID aspect, can be used to identify flows.
*/
public static final ITmfEventAspect<String> ID_ASPECT = new TraceCompassScopeLogIdAspect();
/**
* A category aspect, can be used to identify flows.
*/
public static final ITmfEventAspect<String> CATEGORY_ASPECT = new TraceCompassScopeLogCategoryAspect();
/**
* Aspects of a trace
*/
private static Iterable<@NonNull ITmfEventAspect<?>> aspects;
/**
* Get the event aspects
*
* @return get the event aspects
*/
@SuppressWarnings("null")
public static @NonNull Iterable<@NonNull ITmfEventAspect<?>> getAspects() {
Iterable<@NonNull ITmfEventAspect<?>> aspectSet = aspects;
if (aspectSet == null) {
aspectSet = ImmutableList.of(
new TraceCompassScopeLogLabelAspect(),
TmfBaseAspects.getTimestampAspect(),
new TraceCompassLogPhaseAspect(),
new TraceCompassScopeLogLevel(),
new TraceCompassScopeLogTidAspect(),
new TraceCompassScopeLogPidAspect(),
CATEGORY_ASPECT,
new TraceCompassScopeLogDurationAspect(),
ID_ASPECT,
ARGS_ASPECT,
new TraceCompassScopeLogCallsiteAspect());
aspects = aspectSet;
}
return aspectSet;
}
private static class TraceCompassLogPhaseAspect implements ITraceEventAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Phase);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_PhaseD);
}
@Override
public @Nullable String resolveTCL(TraceEventEvent event) {
return String.valueOf(event.getField().getPhase());
}
}
private static class TraceCompassScopeLogLevel implements ITraceEventAspect<Level> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_LogLevel);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_LogLevelD);
}
@Override
public @Nullable Level resolveTCL(@NonNull TraceEventEvent event) {
return event.getLevel();
}
}
private static class TraceCompassScopeLogCallsiteAspect implements ITraceEventAspect<ITmfCallsite> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Callsite);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_CallsiteD);
}
@Override
public @Nullable ITmfCallsite resolveTCL(@NonNull TraceEventEvent event) {
return event.getCallsite();
}
}
private static class TraceCompassScopeLogLabelAspect implements ITraceEventAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Name);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_NameD);
}
@Override
public @Nullable String resolveTCL(@NonNull TraceEventEvent event) {
return event.getName();
}
}
private static class TraceCompassScopeLogTidAspect extends LinuxTidAspect {
@Override
public boolean isHiddenByDefault() {
return false;
}
@Override
public @Nullable Integer resolve(@NonNull ITmfEvent event) {
if (event instanceof TraceEventEvent) {
return ((TraceEventEvent) event).getField().getTid();
}
return null;
}
}
/**
* Numerical PID aspect
*
* @author Matthew Khouzam
*/
public static class TraceCompassScopeLogPidAspect implements ITraceEventAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceEventAspects_Pid);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(
Messages.TraceEventAspects_PidD);
}
@Override
public @Nullable String resolveTCL(@NonNull TraceEventEvent event) {
Object field = event.getField().getPid();
if (field != null) {
return String.valueOf(field);
}
return null;
}
}
private static class TraceCompassScopeLogDurationAspect implements ITraceEventAspect<Long> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceEventAspects_Duration);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceEventAspects_DurationD);
}
@Override
public @Nullable Long resolveTCL(@NonNull TraceEventEvent event) {
return event.getField().getDuration();
}
}
private static class TraceCompassScopeLogCategoryAspect implements ITraceEventAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Category);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_CategoryD);
}
@Override
public @Nullable String resolveTCL(@NonNull TraceEventEvent event) {
return event.getField().getCategory();
}
}
private static class TraceCompassScopeLogIdAspect implements ITraceEventAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Id);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_IdD);
}
@Override
public @Nullable String resolveTCL(@NonNull TraceEventEvent event) {
return event.getField().getId();
}
}
private static class TraceCompassScopeLogArgsAspect implements ITraceEventAspect<Map<String, Object>> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_Args);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.TraceCompassScopeLogAspects_ArgsD);
}
@Override
public @Nullable Map<String, Object> resolveTCL(@NonNull TraceEventEvent event) {
return event.getField().getArgs();
}
}
}