All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 com.google.auto.value.AutoValue;
import io.opencensus.common.Timestamp;
import io.opencensus.internal.Utils;
import io.opencensus.trace.Annotation;
import io.opencensus.trace.AttributeValue;
import io.opencensus.trace.Link;
import io.opencensus.trace.MessageEvent;
import io.opencensus.trace.Span;
import io.opencensus.trace.Span.Kind;
import io.opencensus.trace.SpanContext;
import io.opencensus.trace.SpanId;
import io.opencensus.trace.Status;
import io.opencensus.trace.internal.BaseMessageEventUtils;
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.
 *
 * @since 0.5
 */
@Immutable
@AutoValue
public abstract class SpanData {

  /**
   * Returns a new immutable {@code SpanData}.
   *
   * @deprecated Use {@link #create(SpanContext, SpanId, Boolean, String, Kind, Timestamp,
   *     Attributes, TimedEvents, TimedEvents, Links, Integer, Status, Timestamp)}.
   */
  @Deprecated
  public static SpanData create(
      SpanContext context,
      @Nullable SpanId parentSpanId,
      @Nullable Boolean hasRemoteParent,
      String name,
      Timestamp startTimestamp,
      Attributes attributes,
      TimedEvents annotations,
      TimedEvents messageOrNetworkEvents,
      Links links,
      @Nullable Integer childSpanCount,
      @Nullable Status status,
      @Nullable Timestamp endTimestamp) {
    return create(
        context,
        parentSpanId,
        hasRemoteParent,
        name,
        null,
        startTimestamp,
        attributes,
        annotations,
        messageOrNetworkEvents,
        links,
        childSpanCount,
        status,
        endTimestamp);
  }

  /**
   * 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 kind the kind 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 messageOrNetworkEvents the message events (or network events for backward compatibility)
   *     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}.
   * @since 0.14
   */
  @SuppressWarnings({"deprecation", "InconsistentOverloads"})
  public static SpanData create(
      SpanContext context,
      @Nullable SpanId parentSpanId,
      @Nullable Boolean hasRemoteParent,
      String name,
      @Nullable Kind kind,
      Timestamp startTimestamp,
      Attributes attributes,
      TimedEvents annotations,
      TimedEvents messageOrNetworkEvents,
      Links links,
      @Nullable Integer childSpanCount,
      @Nullable Status status,
      @Nullable Timestamp endTimestamp) {
    Utils.checkNotNull(messageOrNetworkEvents, "messageOrNetworkEvents");
    List> messageEventsList = new ArrayList>();
    for (TimedEvent timedEvent :
        messageOrNetworkEvents.getEvents()) {
      io.opencensus.trace.BaseMessageEvent event = timedEvent.getEvent();
      if (event instanceof MessageEvent) {
        @SuppressWarnings("unchecked")
        TimedEvent timedMessageEvent = (TimedEvent) timedEvent;
        messageEventsList.add(timedMessageEvent);
      } else {
        messageEventsList.add(
            TimedEvent.create(
                timedEvent.getTimestamp(), BaseMessageEventUtils.asMessageEvent(event)));
      }
    }
    TimedEvents messageEvents =
        TimedEvents.create(
            messageEventsList, messageOrNetworkEvents.getDroppedEventsCount());
    return new AutoValue_SpanData(
        context,
        parentSpanId,
        hasRemoteParent,
        name,
        kind,
        startTimestamp,
        attributes,
        annotations,
        messageEvents,
        links,
        childSpanCount,
        status,
        endTimestamp);
  }

  /**
   * Returns the {@code SpanContext} associated with this {@code Span}.
   *
   * @return the {@code SpanContext} associated with this {@code Span}.
   * @since 0.5
   */
  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}.
   * @since 0.5
   */
  @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.
   * @since 0.5
   */
  @Nullable
  public abstract Boolean getHasRemoteParent();

  /**
   * Returns the name of this {@code Span}.
   *
   * @return the name of this {@code Span}.
   * @since 0.5
   */
  public abstract String getName();

  /**
   * Returns the kind of this {@code Span}.
   *
   * @return the kind of this {@code Span}.
   * @since 0.14
   */
  @Nullable
  public abstract Kind getKind();

  /**
   * Returns the start {@code Timestamp} of this {@code Span}.
   *
   * @return the start {@code Timestamp} of this {@code Span}.
   * @since 0.5
   */
  public abstract Timestamp getStartTimestamp();

  /**
   * Returns the attributes recorded for this {@code Span}.
   *
   * @return the attributes recorded for this {@code Span}.
   * @since 0.5
   */
  public abstract Attributes getAttributes();

  /**
   * Returns the annotations recorded for this {@code Span}.
   *
   * @return the annotations recorded for this {@code Span}.
   * @since 0.5
   */
  public abstract TimedEvents getAnnotations();

  /**
   * Returns network events recorded for this {@code Span}.
   *
   * @return network events recorded for this {@code Span}.
   * @deprecated Use {@link #getMessageEvents}.
   * @since 0.5
   */
  @Deprecated
  @SuppressWarnings({"deprecation"})
  public TimedEvents getNetworkEvents() {
    TimedEvents timedEvents = getMessageEvents();
    List> networkEventsList =
        new ArrayList>();
    for (TimedEvent timedEvent : timedEvents.getEvents()) {
      networkEventsList.add(
          TimedEvent.create(
              timedEvent.getTimestamp(),
              BaseMessageEventUtils.asNetworkEvent(timedEvent.getEvent())));
    }
    return TimedEvents.create(
        networkEventsList, timedEvents.getDroppedEventsCount());
  }

  /**
   * Returns message events recorded for this {@code Span}.
   *
   * @return message events recorded for this {@code Span}.
   * @since 0.12
   */
  public abstract TimedEvents getMessageEvents();

  /**
   * Returns links recorded for this {@code Span}.
   *
   * @return links recorded for this {@code Span}.
   * @since 0.5
   */
  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. * @since 0.5 */ @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. * @since 0.5 */ @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. * @since 0.5 */ @Nullable /*@Deterministic*/ public abstract Timestamp getEndTimestamp(); SpanData() {} /** * A timed event representation. * * @param the type of value that is timed. * @since 0.5 */ @Immutable @AutoValue 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} * @since 0.5 */ 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. * @since 0.5 */ public abstract Timestamp getTimestamp(); /** * Returns the event. * * @return the event. * @since 0.5 */ /*@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. * @since 0.5 */ @Immutable @AutoValue 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} * @since 0.5 */ public static TimedEvents create(List> events, int droppedEventsCount) { return new AutoValue_SpanData_TimedEvents( Collections.unmodifiableList( new ArrayList>(Utils.checkNotNull(events, "events"))), droppedEventsCount); } /** * Returns the list of events. * * @return the list of events. * @since 0.5 */ public abstract List> getEvents(); /** * Returns the number of dropped events. * * @return the number of dropped events. * @since 0.5 */ public abstract int getDroppedEventsCount(); TimedEvents() {} } /** * A set of attributes and the number of dropped attributes representation. * * @since 0.5 */ @Immutable @AutoValue 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}. * @since 0.5 */ 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( Utils.checkNotNull(attributeMap, "attributeMap"))), droppedAttributesCount); } /** * Returns the set of attributes. * * @return the set of attributes. * @since 0.5 */ public abstract Map getAttributeMap(); /** * Returns the number of dropped attributes. * * @return the number of dropped attributes. * @since 0.5 */ public abstract int getDroppedAttributesCount(); Attributes() {} } /** * A list of links and the number of dropped links representation. * * @since 0.5 */ @Immutable @AutoValue 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}. * @since 0.5 */ public static Links create(List links, int droppedLinksCount) { return new AutoValue_SpanData_Links( Collections.unmodifiableList(new ArrayList(Utils.checkNotNull(links, "links"))), droppedLinksCount); } /** * Returns the list of links. * * @return the list of links. * @since 0.5 */ public abstract List getLinks(); /** * Returns the number of dropped links. * * @return the number of dropped links. * @since 0.5 */ public abstract int getDroppedLinksCount(); Links() {} } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy