io.opencensus.trace.export.SpanData Maven / Gradle / Ivy
/*
* Copyright 2017, OpenCensus Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.opencensus.trace.export;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.auto.value.AutoValue;
import io.opencensus.common.Timestamp;
import io.opencensus.trace.Annotation;
import io.opencensus.trace.AttributeValue;
import io.opencensus.trace.Link;
import io.opencensus.trace.NetworkEvent;
import io.opencensus.trace.Span;
import io.opencensus.trace.SpanContext;
import io.opencensus.trace.SpanId;
import io.opencensus.trace.Status;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
/*>>>
import org.checkerframework.dataflow.qual.Deterministic;
*/
/** Immutable representation of all data collected by the {@link Span} class. */
@Immutable
@AutoValue
// Suppress Checker Framework warning about missing @Nullable in generated equals method.
@AutoValue.CopyAnnotations
@SuppressWarnings("nullness")
public abstract class SpanData {
/**
* Returns a new immutable {@code SpanData}.
*
* @param context the {@code SpanContext} of the {@code Span}.
* @param parentSpanId the parent {@code SpanId} of the {@code Span}. {@code null} if the {@code
* Span} is a root.
* @param hasRemoteParent {@code true} if the parent {@code Span} is remote. {@code null} if this
* is a root span.
* @param name the name of the {@code Span}.
* @param startTimestamp the start {@code Timestamp} of the {@code Span}.
* @param attributes the attributes associated with the {@code Span}.
* @param annotations the annotations associated with the {@code Span}.
* @param networkEvents the network events associated with the {@code Span}.
* @param links the links associated with the {@code Span}.
* @param childSpanCount the number of child spans that were generated while the span was active.
* @param status the {@code Status} of the {@code Span}. {@code null} if the {@code Span} is still
* active.
* @param endTimestamp the end {@code Timestamp} of the {@code Span}. {@code null} if the {@code
* Span} is still active.
* @return a new immutable {@code SpanData}.
*/
public static SpanData create(
SpanContext context,
@Nullable SpanId parentSpanId,
@Nullable Boolean hasRemoteParent,
String name,
Timestamp startTimestamp,
Attributes attributes,
TimedEvents annotations,
TimedEvents networkEvents,
Links links,
@Nullable Integer childSpanCount,
@Nullable Status status,
@Nullable Timestamp endTimestamp) {
return new AutoValue_SpanData(
context,
parentSpanId,
hasRemoteParent,
name,
startTimestamp,
attributes,
annotations,
networkEvents,
links,
childSpanCount,
status,
endTimestamp);
}
/**
* Returns the {@code SpanContext} associated with this {@code Span}.
*
* @return the {@code SpanContext} associated with this {@code Span}.
*/
public abstract SpanContext getContext();
/**
* Returns the parent {@code SpanId} or {@code null} if the {@code Span} is a root {@code Span}.
*
* @return the parent {@code SpanId} or {@code null} if the {@code Span} is a root {@code Span}.
*/
@Nullable
/*@Deterministic*/
public abstract SpanId getParentSpanId();
/**
* Returns {@code true} if the parent is on a different process. {@code null} if this is a root
* span.
*
* @return {@code true} if the parent is on a different process. {@code null} if this is a root
* span.
*/
@Nullable
public abstract Boolean getHasRemoteParent();
/**
* Returns the name of this {@code Span}.
*
* @return the name of this {@code Span}.
*/
public abstract String getName();
/**
* Returns the start {@code Timestamp} of this {@code Span}.
*
* @return the start {@code Timestamp} of this {@code Span}.
*/
public abstract Timestamp getStartTimestamp();
/**
* Returns the attributes recorded for this {@code Span}.
*
* @return the attributes recorded for this {@code Span}.
*/
public abstract Attributes getAttributes();
/**
* Returns the annotations recorded for this {@code Span}.
*
* @return the annotations recorded for this {@code Span}.
*/
public abstract TimedEvents getAnnotations();
/**
* Returns network events recorded for this {@code Span}.
*
* @return network events recorded for this {@code Span}.
*/
public abstract TimedEvents getNetworkEvents();
/**
* Returns links recorded for this {@code Span}.
*
* @return links recorded for this {@code Span}.
*/
public abstract Links getLinks();
/**
* Returns the number of child spans that were generated while the {@code Span} was running. If
* not {@code null} allows service implementations to detect missing child spans.
*
* This information is not always available.
*
* @return the number of child spans that were generated while the {@code Span} was running.
*/
@Nullable
public abstract Integer getChildSpanCount();
/**
* Returns the {@code Status} or {@code null} if {@code Span} is still active.
*
* @return the {@code Status} or {@code null} if {@code Span} is still active.
*/
@Nullable
/*@Deterministic*/
public abstract Status getStatus();
/**
* Returns the end {@code Timestamp} or {@code null} if the {@code Span} is still active.
*
* @return the end {@code Timestamp} or {@code null} if the {@code Span} is still active.
*/
@Nullable
/*@Deterministic*/
public abstract Timestamp getEndTimestamp();
SpanData() {}
/**
* A timed event representation.
*
* @param the type of value that is timed.
*/
@Immutable
@AutoValue
// Suppress Checker Framework warning about missing @Nullable in generated equals method.
@AutoValue.CopyAnnotations
@SuppressWarnings("nullness")
public abstract static class TimedEvent {
/**
* Returns a new immutable {@code TimedEvent}.
*
* @param timestamp the {@code Timestamp} of this event.
* @param event the event.
* @param the type of value that is timed.
* @return a new immutable {@code TimedEvent}
*/
public static TimedEvent create(Timestamp timestamp, T event) {
return new AutoValue_SpanData_TimedEvent(timestamp, event);
}
/**
* Returns the {@code Timestamp} of this event.
*
* @return the {@code Timestamp} of this event.
*/
public abstract Timestamp getTimestamp();
/**
* Returns the event.
*
* @return the event.
*/
/*@Deterministic*/
public abstract T getEvent();
TimedEvent() {}
}
/**
* A list of timed events and the number of dropped events representation.
*
* @param the type of value that is timed.
*/
@Immutable
@AutoValue
// Suppress Checker Framework warning about missing @Nullable in generated equals method.
@AutoValue.CopyAnnotations
@SuppressWarnings("nullness")
public abstract static class TimedEvents {
/**
* Returns a new immutable {@code TimedEvents}.
*
* @param events the list of events.
* @param droppedEventsCount the number of dropped events.
* @param the type of value that is timed.
* @return a new immutable {@code TimedEvents}
*/
public static TimedEvents create(List> events, int droppedEventsCount) {
return new AutoValue_SpanData_TimedEvents(
Collections.unmodifiableList(
new ArrayList>(checkNotNull(events, "events"))),
droppedEventsCount);
}
/**
* Returns the list of events.
*
* @return the list of events.
*/
public abstract List> getEvents();
/**
* Returns the number of dropped events.
*
* @return the number of dropped events.
*/
public abstract int getDroppedEventsCount();
TimedEvents() {}
}
/** A set of attributes and the number of dropped attributes representation. */
@Immutable
@AutoValue
// Suppress Checker Framework warning about missing @Nullable in generated equals method.
@AutoValue.CopyAnnotations
@SuppressWarnings("nullness")
public abstract static class Attributes {
/**
* Returns a new immutable {@code Attributes}.
*
* @param attributeMap the set of attributes.
* @param droppedAttributesCount the number of dropped attributes.
* @return a new immutable {@code Attributes}.
*/
public static Attributes create(
Map attributeMap, int droppedAttributesCount) {
// TODO(bdrutu): Consider to use LinkedHashMap here and everywhere else, less test flakes
// for others on account of determinism.
return new AutoValue_SpanData_Attributes(
Collections.unmodifiableMap(
new HashMap(checkNotNull(attributeMap, "attributeMap"))),
droppedAttributesCount);
}
/**
* Returns the set of attributes.
*
* @return the set of attributes.
*/
public abstract Map getAttributeMap();
/**
* Returns the number of dropped attributes.
*
* @return the number of dropped attributes.
*/
public abstract int getDroppedAttributesCount();
Attributes() {}
}
/** A list of links and the number of dropped links representation. */
@Immutable
@AutoValue
// Suppress Checker Framework warning about missing @Nullable in generated equals method.
@AutoValue.CopyAnnotations
@SuppressWarnings("nullness")
public abstract static class Links {
/**
* Returns a new immutable {@code Links}.
*
* @param links the list of links.
* @param droppedLinksCount the number of dropped links.
* @return a new immutable {@code Links}.
*/
public static Links create(List links, int droppedLinksCount) {
return new AutoValue_SpanData_Links(
Collections.unmodifiableList(new ArrayList(checkNotNull(links, "links"))),
droppedLinksCount);
}
/**
* Returns the list of links.
*
* @return the list of links.
*/
public abstract List getLinks();
/**
* Returns the number of dropped links.
*
* @return the number of dropped links.
*/
public abstract int getDroppedLinksCount();
Links() {}
}
}