<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 existing spans.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</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.

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—there may be gaps or overlaps between spans in a trace.
        &quot;status&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # Optional. The final status for this span.
          &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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &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;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). 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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
        },
        &quot;spanId&quot;: &quot;A String&quot;, # Required. The [SPAN_ID] portion of the span&#x27;s resource name.
        &quot;name&quot;: &quot;A String&quot;, # Required. 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. It should not be zero.
        &quot;links&quot;: { # A collection of links, which are references from this span to a span in the same or different trace. # Links associated with the span. You can have up to 128 links per Span.
          &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;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;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;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                      &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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                    },
                    &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
                    &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
                  },
                },
                &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;type&quot;: &quot;A String&quot;, # The relationship of the current span relative to the linked span.
              &quot;spanId&quot;: &quot;A String&quot;, # The [SPAN_ID] for a span within a trace.
              &quot;traceId&quot;: &quot;A String&quot;, # The [TRACE_ID] for a trace within a project.
            },
          ],
          &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;timeEvents&quot;: { # A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation on the span, consisting of either user-supplied key:value pairs, or details of a message sent/received between Spans. # A set of time events. You can have up to 32 annotations and 128 message events per span.
          &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;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;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;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                        &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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                      },
                      &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
                      &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
                    },
                  },
                  &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;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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                },
              },
              &quot;messageEvent&quot;: { # An event describing a message sent/received between Spans. # An event describing a message sent/received between Spans.
                &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;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;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;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;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;spanKind&quot;: &quot;A String&quot;, # Optional. 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;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, Trace is unable to take advantage of this helpful information.
        &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;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;stringValue&quot;: { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
                &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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
              },
              &quot;boolValue&quot;: True or False, # A Boolean value represented by `true` or `false`.
              &quot;intValue&quot;: &quot;A String&quot;, # A 64-bit signed integer.
            },
          },
          &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;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;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;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;frame&quot;: [ # Stack frames in this call stack.
              { # Represents a single stack frame in a stack trace.
                &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                  },
                  &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                  },
                },
                &quot;lineNumber&quot;: &quot;A String&quot;, # The line number in `file_name` where the function call appears.
                &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                },
                &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                },
                &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                },
                &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;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;truncatedByteCount&quot;: 42, # The number of bytes removed from the original string. If this value is 0, then the string was not shortened.
                },
              },
            ],
          },
          &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;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;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;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.
      },
    ],
  }

  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>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

</body></html>