<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="cloudtrace_v2.html">Cloud Trace API</a> . <a href="cloudtrace_v2.projects.html">projects</a> . <a href="cloudtrace_v2.projects.traces.html">traces</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudtrace_v2.projects.traces.spans.html">spans()</a></code>
</p>
<p class="firstline">Returns the spans Resource.</p>

<p class="toc_element">
  <code><a href="#batchWrite">batchWrite(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sends new spans to new or existing traces. You cannot update</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchWrite">batchWrite(name, body=None, x__xgafv=None)</code>
  <pre>Sends new spans to new or existing traces. You cannot update
existing spans.
In this case, writing traces is not considered an active developer
method since traces are machine generated.

Args:
  name: string, Required. The name of the project where the spans belong. The format is
`projects/[PROJECT_ID]`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for the `BatchWriteSpans` method.
    &quot;spans&quot;: [ # Required. A list of new spans. The span names must not match existing
        # spans, or the results are undefined.
      { # A span represents a single operation within a trace. Spans can be
          # nested to form a trace tree. Often, a trace contains a root span
          # that describes the end-to-end latency, and one or more subspans for
          # its sub-operations. A trace can also contain multiple root spans,
          # or none at all. Spans do not need to be contiguous&amp;mdash;there may be
          # gaps or overlaps between spans in a trace.
        &quot;childSpanCount&quot;: 42, # Optional. The number of child spans that were generated while this span
            # was active. If set, allows implementation to detect missing child spans.
        &quot;sameProcessAsParentSpan&quot;: True or False, # Optional. Set this parameter to indicate whether this span is in
            # the same process as its parent. If you do not set this parameter,
            # Stackdriver Trace is unable to take advantage of this helpful
            # information.
        &quot;status&quot;: { # The `Status` type defines a logical error model that is suitable for # Optional. The final status for this span.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        },
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the span in the following format:
            #
            #     projects/[PROJECT_ID]/traces/[TRACE_ID]/spans/SPAN_ID is a unique identifier for a trace within a project;
            # it is a 32-character hexadecimal encoding of a 16-byte array.
            #
            # [SPAN_ID] is a unique identifier for a span within a trace; it
            # is a 16-character hexadecimal encoding of an 8-byte array.
        &quot;stackTrace&quot;: { # A call stack appearing in a trace. # Stack trace captured at the start of the span.
          &quot;stackFrames&quot;: { # A collection of stack frames, which can be truncated. # Stack frames in this stack trace. A maximum of 128 frames are allowed.
            &quot;frame&quot;: [ # Stack frames in this call stack.
              { # Represents a single stack frame in a stack trace.
                &quot;lineNumber&quot;: &quot;A String&quot;, # The line number in `file_name` where the function call appears.
                &quot;loadModule&quot;: { # Binary module. # The binary module from where the code was loaded.
                  &quot;module&quot;: { # Represents a string that might be shortened to a specified length. # For example: main binary, kernel modules, and dynamic libraries
                      # such as libc.so, sharedlib.so (up to 256 bytes).
                    &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                        # value is 0, then the string was not shortened.
                    &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                        # bytes long and the limit of the string is 128 bytes, then
                        # `value` contains the first 128 bytes of the 500-byte string.
                        #
                        # Truncation always happens on a UTF8 character boundary. If there
                        # are multi-byte characters in the string, then the length of the
                        # shortened string might be less than the size limit.
                  },
                  &quot;buildId&quot;: { # Represents a string that might be shortened to a specified length. # A unique identifier for the module, usually a hash of its
                      # contents (up to 128 bytes).
                    &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                        # value is 0, then the string was not shortened.
                    &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                        # bytes long and the limit of the string is 128 bytes, then
                        # `value` contains the first 128 bytes of the 500-byte string.
                        #
                        # Truncation always happens on a UTF8 character boundary. If there
                        # are multi-byte characters in the string, then the length of the
                        # shortened string might be less than the size limit.
                  },
                },
                &quot;columnNumber&quot;: &quot;A String&quot;, # The column number where the function call appears, if available.
                    # This is important in JavaScript because of its anonymous functions.
                &quot;fileName&quot;: { # Represents a string that might be shortened to a specified length. # The name of the source file where the function call appears (up to 256
                    # bytes).
                  &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                      # value is 0, then the string was not shortened.
                  &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                      # bytes long and the limit of the string is 128 bytes, then
                      # `value` contains the first 128 bytes of the 500-byte string.
                      #
                      # Truncation always happens on a UTF8 character boundary. If there
                      # are multi-byte characters in the string, then the length of the
                      # shortened string might be less than the size limit.
                },
                &quot;sourceVersion&quot;: { # Represents a string that might be shortened to a specified length. # The version of the deployed source code (up to 128 bytes).
                  &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                      # value is 0, then the string was not shortened.
                  &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                      # bytes long and the limit of the string is 128 bytes, then
                      # `value` contains the first 128 bytes of the 500-byte string.
                      #
                      # Truncation always happens on a UTF8 character boundary. If there
                      # are multi-byte characters in the string, then the length of the
                      # shortened string might be less than the size limit.
                },
                &quot;originalFunctionName&quot;: { # Represents a string that might be shortened to a specified length. # An un-mangled function name, if `function_name` is
                    # [mangled](http://www.avabodh.com/cxxin/namemangling.html). The name can
                    # be fully-qualified (up to 1024 bytes).
                  &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                      # value is 0, then the string was not shortened.
                  &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                      # bytes long and the limit of the string is 128 bytes, then
                      # `value` contains the first 128 bytes of the 500-byte string.
                      #
                      # Truncation always happens on a UTF8 character boundary. If there
                      # are multi-byte characters in the string, then the length of the
                      # shortened string might be less than the size limit.
                },
                &quot;functionName&quot;: { # Represents a string that might be shortened to a specified length. # The fully-qualified name that uniquely identifies the function or
                    # method that is active in this frame (up to 1024 bytes).
                  &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                      # value is 0, then the string was not shortened.
                  &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                      # bytes long and the limit of the string is 128 bytes, then
                      # `value` contains the first 128 bytes of the 500-byte string.
                      #
                      # Truncation always happens on a UTF8 character boundary. If there
                      # are multi-byte characters in the string, then the length of the
                      # shortened string might be less than the size limit.
                },
              },
            ],
            &quot;droppedFramesCount&quot;: 42, # The number of stack frames that were dropped because there
                # were too many stack frames.
                # If this value is 0, then no stack frames were dropped.
          },
          &quot;stackTraceHashId&quot;: &quot;A String&quot;, # The hash ID is used to conserve network bandwidth for duplicate
              # stack traces within a single trace.
              #
              # Often multiple spans will have identical stack traces.
              # The first occurrence of a stack trace should contain both the
              # `stackFrame` content and a value in `stackTraceHashId`.
              #
              # Subsequent spans within the same request can refer
              # to that stack trace by only setting `stackTraceHashId`.
        },
        &quot;parentSpanId&quot;: &quot;A String&quot;, # The [SPAN_ID] of this span&#x27;s parent span. If this is a root span,
            # then this field must be empty.
        &quot;endTime&quot;: &quot;A String&quot;, # Required. The end time of the span. On the client side, this is the time kept by
            # the local machine where the span execution ends. On the server side, this
            # is the time when the server application handler stops running.
        &quot;spanKind&quot;: &quot;A String&quot;, # Distinguishes between spans generated in a particular context. For example,
            # two spans with the same name may be distinguished using `CLIENT` (caller)
            # and `SERVER` (callee) to identify an RPC call.
        &quot;startTime&quot;: &quot;A String&quot;, # Required. The start time of the span. On the client side, this is the time kept by
            # the local machine where the span execution starts. On the server side, this
            # is the time when the server&#x27;s application handler starts running.
        &quot;displayName&quot;: { # Represents a string that might be shortened to a specified length. # Required. A description of the span&#x27;s operation (up to 128 bytes).
            # Stackdriver Trace displays the description in the
            # Google Cloud Platform Console.
            # For example, the display name can be a qualified method name or a file name
            # and a line number where the operation is called. A best practice is to use
            # the same display name within an application and at the same call point.
            # This makes it easier to correlate spans in different traces.
          &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
              # value is 0, then the string was not shortened.
          &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
              # bytes long and the limit of the string is 128 bytes, then
              # `value` contains the first 128 bytes of the 500-byte string.
              #
              # Truncation always happens on a UTF8 character boundary. If there
              # are multi-byte characters in the string, then the length of the
              # shortened string might be less than the size limit.
        },
        &quot;timeEvents&quot;: { # A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation # A set of time events. You can have up to 32 annotations and 128 message
            # events per span.
            # on the span, consisting of either user-supplied key:value pairs, or
            # details of a message sent/received between Spans.
          &quot;droppedMessageEventsCount&quot;: 42, # The number of dropped message events in all the included time events.
              # If the value is 0, then no message events were dropped.
          &quot;timeEvent&quot;: [ # A collection of `TimeEvent`s.
            { # A time-stamped annotation or message event in the Span.
              &quot;annotation&quot;: { # Text annotation with a set of attributes. # Text annotation with a set of attributes.
                &quot;description&quot;: { # Represents a string that might be shortened to a specified length. # A user-supplied message describing the event. The maximum length for
                    # the description is 256 bytes.
                  &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                      # value is 0, then the string was not shortened.
                  &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                      # bytes long and the limit of the string is 128 bytes, then
                      # `value` contains the first 128 bytes of the 500-byte string.
                      #
                      # Truncation always happens on a UTF8 character boundary. If there
                      # are multi-byte characters in the string, then the length of the
                      # shortened string might be less than the size limit.
                },
                &quot;attributes&quot;: { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the annotation. You can have up to 4 attributes
                    # per Annotation.
                  &quot;droppedAttributesCount&quot;: 42, # The number of attributes that were discarded. Attributes can be discarded
                      # because their keys are too long or because there are too many attributes.
                      # If this value is 0 then all attributes are valid.
                  &quot;attributeMap&quot;: { # The set of attributes. Each attribute&#x27;s key can be up to 128 bytes
                      # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
                      # or the Boolean values `true` and `false`. For example:
                      #
                      #     &quot;/instance_id&quot;: { &quot;string_value&quot;: { &quot;value&quot;: &quot;my-instance&quot; } }
                      #     &quot;/http/request_bytes&quot;: { &quot;int_value&quot;: 300 }
                      #     &quot;abc.com/myattribute&quot;: { &quot;bool_value&quot;: false }
                    &quot;a_key&quot;: { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
                      &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
                      &quot;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                        &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                            # value is 0, then the string was not shortened.
                        &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                            # bytes long and the limit of the string is 128 bytes, then
                            # `value` contains the first 128 bytes of the 500-byte string.
                            #
                            # Truncation always happens on a UTF8 character boundary. If there
                            # are multi-byte characters in the string, then the length of the
                            # shortened string might be less than the size limit.
                      },
                      &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
                    },
                  },
                },
              },
              &quot;messageEvent&quot;: { # An event describing a message sent/received between Spans. # An event describing a message sent/received between Spans.
                &quot;id&quot;: &quot;A String&quot;, # An identifier for the MessageEvent&#x27;s message that can be used to match
                    # SENT and RECEIVED MessageEvents. It is recommended to be unique within
                    # a Span.
                &quot;compressedSizeBytes&quot;: &quot;A String&quot;, # The number of compressed bytes sent or received. If missing assumed to
                    # be the same size as uncompressed.
                &quot;uncompressedSizeBytes&quot;: &quot;A String&quot;, # The number of uncompressed bytes sent or received.
                &quot;type&quot;: &quot;A String&quot;, # Type of MessageEvent. Indicates whether the message was sent or
                    # received.
              },
              &quot;time&quot;: &quot;A String&quot;, # The timestamp indicating the time the event occurred.
            },
          ],
          &quot;droppedAnnotationsCount&quot;: 42, # The number of dropped annotations in all the included time events.
              # If the value is 0, then no annotations were dropped.
        },
        &quot;links&quot;: { # A collection of links, which are references from this span to a span # Links associated with the span. You can have up to 128 links per Span.
            # in the same or different trace.
          &quot;link&quot;: [ # A collection of links.
            { # A pointer from the current span to another span in the same trace or in a
                # different trace. For example, this can be used in batching operations,
                # where a single batch handler processes multiple requests from different
                # traces or when the handler receives a request from a different project.
              &quot;type&quot;: &quot;A String&quot;, # The relationship of the current span relative to the linked span.
              &quot;traceId&quot;: &quot;A String&quot;, # The [TRACE_ID] for a trace within a project.
              &quot;attributes&quot;: { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the link. You have have up to  32 attributes per
                  # link.
                &quot;droppedAttributesCount&quot;: 42, # The number of attributes that were discarded. Attributes can be discarded
                    # because their keys are too long or because there are too many attributes.
                    # If this value is 0 then all attributes are valid.
                &quot;attributeMap&quot;: { # The set of attributes. Each attribute&#x27;s key can be up to 128 bytes
                    # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
                    # or the Boolean values `true` and `false`. For example:
                    #
                    #     &quot;/instance_id&quot;: { &quot;string_value&quot;: { &quot;value&quot;: &quot;my-instance&quot; } }
                    #     &quot;/http/request_bytes&quot;: { &quot;int_value&quot;: 300 }
                    #     &quot;abc.com/myattribute&quot;: { &quot;bool_value&quot;: false }
                  &quot;a_key&quot;: { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
                    &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
                    &quot;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                      &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                          # value is 0, then the string was not shortened.
                      &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                          # bytes long and the limit of the string is 128 bytes, then
                          # `value` contains the first 128 bytes of the 500-byte string.
                          #
                          # Truncation always happens on a UTF8 character boundary. If there
                          # are multi-byte characters in the string, then the length of the
                          # shortened string might be less than the size limit.
                    },
                    &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
                  },
                },
              },
              &quot;spanId&quot;: &quot;A String&quot;, # The [SPAN_ID] for a span within a trace.
            },
          ],
          &quot;droppedLinksCount&quot;: 42, # The number of dropped links after the maximum size was enforced. If
              # this value is 0, then no links were dropped.
        },
        &quot;attributes&quot;: { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the span. You can have up to 32 attributes per
            # span.
          &quot;droppedAttributesCount&quot;: 42, # The number of attributes that were discarded. Attributes can be discarded
              # because their keys are too long or because there are too many attributes.
              # If this value is 0 then all attributes are valid.
          &quot;attributeMap&quot;: { # The set of attributes. Each attribute&#x27;s key can be up to 128 bytes
              # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
              # or the Boolean values `true` and `false`. For example:
              #
              #     &quot;/instance_id&quot;: { &quot;string_value&quot;: { &quot;value&quot;: &quot;my-instance&quot; } }
              #     &quot;/http/request_bytes&quot;: { &quot;int_value&quot;: 300 }
              #     &quot;abc.com/myattribute&quot;: { &quot;bool_value&quot;: false }
            &quot;a_key&quot;: { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
              &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
              &quot;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                &quot;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this
                    # value is 0, then the string was not shortened.
                &quot;value&quot;: &quot;A String&quot;, # The shortened string. For example, if the original string is 500
                    # bytes long and the limit of the string is 128 bytes, then
                    # `value` contains the first 128 bytes of the 500-byte string.
                    #
                    # Truncation always happens on a UTF8 character boundary. If there
                    # are multi-byte characters in the string, then the length of the
                    # shortened string might be less than the size limit.
              },
              &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
            },
          },
        },
        &quot;spanId&quot;: &quot;A String&quot;, # Required. The [SPAN_ID] portion of the span&#x27;s resource name.
      },
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

</body></html>