libdd-trace-protobuf 2.0.0

Protobuf utils for Datadog's traces serialization
Documentation
syntax = "proto3";

package pb;

option go_package="pkg/proto/pbgo/trace";

message SpanLink {
   // @gotags: json:"trace_id" msg:"trace_id"
   uint64 traceID = 1;                         // Required.
   // @gotags: json:"trace_id_high" msg:"trace_id_high,omitempty"
   uint64 traceID_high = 2;                    // Optional. The high 64 bits of a referenced trace id.
   // @gotags: json:"span_id" msg:"span_id"
   uint64 spanID = 3;                          // Required.
   // @gotags: msg:"attributes,omitempty"
   map<string, string> attributes = 4;         // Optional. Simple mapping of keys to string values.
   // @gotags: msg:"tracestate,omitempty"
   string tracestate = 5;                      // Optional. W3C tracestate.
   // @gotags: msg:"flags,omitempty"
   uint32 flags = 6;                           // Optional. W3C trace flags. If set, the high bit (bit 31) must be set.
}

message SpanEvent {
  // @gotags: json:"time_unix_nano" msg:"time_unix_nano"
  fixed64 time_unix_nano = 1; // time is the number of nanoseconds between the Unix epoch and this event.
  // @gotags: json:"name" msg:"name"
  string name = 2; // name is this event's name.
  // attributes is a mapping from attribute key string to any value.
  // The order of attributes should be preserved in the key/value map.
  // The supported values match the OpenTelemetry attributes specification:
  // https://github.com/open-telemetry/opentelemetry-proto/blob/a8f08fc49d60538f97ffabcc7feac92f832976dd/opentelemetry/proto/common/v1/common.proto
  // @gotags: json:"attributes" msg:"attributes"
  map <string,AttributeAnyValue> attributes = 3;
}

// AttributeAnyValue is used to represent any type of attribute value. AttributeAnyValue may contain a
// primitive value such as a string or integer or it may contain an arbitrary nested
// object containing arrays, key-value lists and primitives.
message AttributeAnyValue {
  // We implement a union manually here because Go's MessagePack generator does not support
  // Protobuf `oneof` unions: https://github.com/tinylib/msgp/issues/184
  // Despite this, the format represented here is binary compatible with `oneof`, if we choose
  // to migrate to that in the future.
  // @gotags: json:"type" msg:"type"
  AttributeAnyValueType type = 1;

  enum AttributeAnyValueType {
    STRING_VALUE = 0;
    BOOL_VALUE = 1;
    INT_VALUE = 2;
    DOUBLE_VALUE = 3;
    ARRAY_VALUE = 4;
  }
  // @gotags: json:"string_value" msg:"string_value"
  string string_value = 2;
  // @gotags: json:"bool_value" msg:"bool_value"
  bool bool_value = 3;
  // @gotags: json:"int_value" msg:"int_value"
  int64 int_value = 4;
  // @gotags: json:"double_value" msg:"double_value"
  double double_value = 5;
  // @gotags: json:"array_value" msg:"array_value"
  AttributeArray array_value = 6;
}


// AttributeArray is a list of AttributeArrayValue messages. We need this as a message since `oneof` in AttributeAnyValue does not allow repeated fields.
message AttributeArray {
  // Array of values. The array may be empty (contain 0 elements).
  // @gotags: json:"values" msg:"values"
  repeated AttributeArrayValue values = 1;
}

// An element in the homogeneous AttributeArray.
// Compared to AttributeAnyValue, it only supports scalar values.
message AttributeArrayValue {
  // We implement a union manually here because Go's MessagePack generator does not support
  // Protobuf `oneof` unions: https://github.com/tinylib/msgp/issues/184
  // Despite this, the format represented here is binary compatible with `oneof`, if we choose
  // to migrate to that in the future.
  // @gotags: json:"type" msg:"type"
  AttributeArrayValueType type = 1;

  enum AttributeArrayValueType {
    STRING_VALUE = 0;
    BOOL_VALUE = 1;
    INT_VALUE = 2;
    DOUBLE_VALUE = 3;
  }

  // @gotags: json:"string_value" msg:"string_value"
  string string_value = 2;
  // @gotags: json:"bool_value" msg:"bool_value"
  bool bool_value = 3;
  // @gotags: json:"int_value" msg:"int_value"
  int64 int_value = 4;
  // @gotags: json:"double_value" msg:"double_value"
  double double_value = 5;
}


message Span {
    // service is the name of the service with which this span is associated.
    // @gotags: json:"service" msg:"service"
    string service = 1;
    // name is the operation name of this span.
    // @gotags: json:"name" msg:"name"
    string name = 2;
    // resource is the resource name of this span, also sometimes called the endpoint (for web spans).
    // @gotags: json:"resource" msg:"resource"
    string resource = 3;
    // traceID is the ID of the trace to which this span belongs.
    // @gotags: json:"trace_id" msg:"trace_id"
    uint64 traceID = 4;
    // spanID is the ID of this span.
    // @gotags: json:"span_id" msg:"span_id"
    uint64 spanID = 5;
    // parentID is the ID of this span's parent, or zero if this span has no parent.
    // @gotags: json:"parent_id" msg:"parent_id"
    uint64 parentID = 6;
    // start is the number of nanoseconds between the Unix epoch and the beginning of this span.
    // @gotags: json:"start" msg:"start"
    int64 start = 7;
    // duration is the time length of this span in nanoseconds.
    // @gotags: json:"duration" msg:"duration"
    int64 duration = 8;
    // error is 1 if there is an error associated with this span, or 0 if there is not.
    // @gotags: json:"error" msg:"error"
    int32 error = 9;
    // meta is a mapping from tag name to tag value for string-valued tags.
    // @gotags: json:"meta,omitempty" msg:"meta,omitempty"
    map<string, string> meta = 10;
    // metrics is a mapping from tag name to tag value for numeric-valued tags.
    // @gotags: json:"metrics,omitempty" msg:"metrics,omitempty"
    map<string, double> metrics = 11;
    // type is the type of the service with which this span is associated.  Example values: web, db, lambda.
    // @gotags: json:"type" msg:"type"
    string type = 12;
    // meta_struct is a registry of structured "other" data used by, e.g., AppSec.
    // @gotags: json:"meta_struct,omitempty" msg:"meta_struct,omitempty"
    map<string, bytes> meta_struct = 13;
    // span_links represents a collection of links, where each link defines a causal relationship between two spans.
    // @gotags: json:"span_links,omitempty" msg:"span_links,omitempty"
    repeated SpanLink spanLinks = 14;
    // spanEvents represent an event at an instant in time related to this span, but not necessarily during the span.
    // @gotags: json:"span_events,omitempty" msg:"span_events,omitempty"
    repeated SpanEvent spanEvents = 15;
}