blob: 7800c077033c4bbc6f59664d8cf22757446f9567 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 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.opentracing.core.event;
import java.text.Format;
import java.util.Collections;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.common.core.format.SubSecondTimeWithUnitFormat;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
import com.google.common.collect.ImmutableList;
/**
* Aspects for Trace Compass Logs
*
* @author Katherine Nadeau
*/
public class OpenTracingAspects {
/**
* Apects of a trace
*/
private static @Nullable Iterable<@NonNull ITmfEventAspect<?>> aspects;
/**
* Get the event aspects
*
* @return get the event aspects
*/
public static Iterable<@NonNull ITmfEventAspect<?>> getAspects() {
Iterable<@NonNull ITmfEventAspect<?>> aspectSet = aspects;
if (aspectSet == null) {
aspectSet = ImmutableList.of(
new OpenTracingLabelAspect(),
TmfBaseAspects.getTimestampAspect(),
new OpenTracingDurationAspect(),
new OpenTracingSpanIdAspect(),
new OpenTracingProcessAspect(),
new OpenTracingProcessTagsAspect(),
new OpenTracingTagsAspect());
aspects = aspectSet;
}
return aspectSet;
}
private static class OpenTracingLabelAspect implements IOpenTracingAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.OpenTracingAspects_Name);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_NameD);
}
@Override
public String resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
return event.getName();
}
}
private static class OpenTracingProcessAspect implements IOpenTracingAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.OpenTracingAspects_Process);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_ProcessD);
}
@Override
public String resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
Object field = event.getField().getProcessName();
return String.valueOf(field);
}
}
private static class OpenTracingDurationAspect implements IOpenTracingAspect<@Nullable String> {
private static final Format FORMATTER = SubSecondTimeWithUnitFormat.getInstance();
@Override
public @NonNull String getName() {
return String.valueOf(Messages.OpenTracingAspects_Duration);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_DurationD);
}
@Override
public @Nullable String resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
return FORMATTER.format(event.getField().getDuration());
}
}
private static class OpenTracingSpanIdAspect implements IOpenTracingAspect<String> {
@Override
public @NonNull String getName() {
return String.valueOf(Messages.OpenTracingAspects_SpanId);
}
@Override
public @NonNull String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_SpanIdD);
}
@Override
public String resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
return event.getField().getSpanId();
}
}
private static class OpenTracingProcessTagsAspect implements IOpenTracingAspect<Map<String, Object>> {
@Override
public String getName() {
return String.valueOf(Messages.OpenTracingAspects_ProcessTags);
}
@Override
public String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_ProcessTagsD);
}
@Override
public Map<String, Object> resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
Map<String, Object> processTags = event.getField().getProcessTags();
return processTags == null ? Collections.emptyMap() : processTags;
}
}
private static class OpenTracingTagsAspect implements IOpenTracingAspect<Map<String, Object>> {
@Override
public String getName() {
return String.valueOf(Messages.OpenTracingAspects_Tags);
}
@Override
public String getHelpText() {
return String.valueOf(Messages.OpenTracingAspects_TagsD);
}
@Override
public Map<String, Object> resolveOpenTracingLogs(@NonNull OpenTracingEvent event) {
Map<String, Object> tags = event.getField().getTags();
return tags == null ? Collections.emptyMap() : tags;
}
}
}