<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_v1.html">Cloud Trace API</a> . <a href="cloudtrace_v1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudtrace_v1.projects.traces.html">traces()</a></code>
</p>
<p class="firstline">Returns the traces Resource.</p>

<p class="toc_element">
  <code><a href="#patchTraces">patchTraces(projectId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sends new traces to Stackdriver Trace or updates existing traces. If the ID</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="patchTraces">patchTraces(projectId, body=None, x__xgafv=None)</code>
  <pre>Sends new traces to Stackdriver Trace or updates existing traces. If the ID
of a trace that you send matches that of an existing trace, any fields
in the existing trace and its spans are overwritten by the provided values,
and any new fields provided are merged with the existing trace data. If the
ID does not match, a new trace is created.
In this case, writing traces is not considered an active developer
method since traces are machine generated.

Args:
  projectId: string, Required. ID of the Cloud project where the trace data is stored. (required)
  body: object, The request body.
    The object takes the form of:

{ # List of new or updated traces.
    &quot;traces&quot;: [ # List of traces.
      { # A trace describes how long it takes for an application to perform an
          # operation. It consists of a set of spans, each of which represent a single
          # timed event within the operation.
        &quot;projectId&quot;: &quot;A String&quot;, # Project ID of the Cloud project where the trace data is stored.
        &quot;spans&quot;: [ # Collection of spans in the trace.
          { # A span represents a single timed event within a trace. Spans can be nested
              # and form a trace tree. Often, a trace contains a root span that describes the
              # end-to-end latency of an operation and, optionally, one or more subspans for
              # its suboperations. Spans do not need to be contiguous. There may be gaps
              # between spans in a trace.
            &quot;labels&quot;: { # Collection of labels associated with the span. Label keys must be less than
                # 128 bytes. Label values must be less than 16 kilobytes (10MB for
                # `/stacktrace` values).
                #
                # Some predefined label keys exist, or you may create your own. When creating
                # your own, we recommend the following formats:
                #
                # * `/category/product/key` for agents of well-known products (e.g.
                #   `/db/mongodb/read_size`).
                # * `short_host/path/key` for domain-specific keys (e.g.
                #   `foo.com/myproduct/bar`)
                #
                # Predefined labels include:
                #
                # *   `/agent`
                # *   `/component`
                # *   `/error/message`
                # *   `/error/name`
                # *   `/http/client_city`
                # *   `/http/client_country`
                # *   `/http/client_protocol`
                # *   `/http/client_region`
                # *   `/http/host`
                # *   `/http/method`
                # *   `/http/path`
                # *   `/http/redirected_url`
                # *   `/http/request/size`
                # *   `/http/response/size`
                # *   `/http/route`
                # *   `/http/status_code`
                # *   `/http/url`
                # *   `/http/user_agent`
                # *   `/pid`
                # *   `/stacktrace`
                # *   `/tid`
              &quot;a_key&quot;: &quot;A String&quot;,
            },
            &quot;name&quot;: &quot;A String&quot;, # Name of the span. Must be less than 128 bytes. The span name is sanitized
                # and displayed in the Stackdriver Trace tool in the
                # Google Cloud Platform Console.
                # The name may be a method name or some other per-call site name.
                # For the same executable and the same call point, a best practice is
                # to use a consistent name, which makes it easier to correlate
                # cross-trace spans.
            &quot;spanId&quot;: &quot;A String&quot;, # Identifier for the span. Must be a 64-bit integer other than 0 and
                # unique within a trace. For example, `2205310701640571284`.
            &quot;parentSpanId&quot;: &quot;A String&quot;, # Optional. ID of the parent span, if any.
            &quot;endTime&quot;: &quot;A String&quot;, # End time of the span in nanoseconds from the UNIX epoch.
            &quot;startTime&quot;: &quot;A String&quot;, # Start time of the span in nanoseconds from the UNIX epoch.
            &quot;kind&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 `RPC_CLIENT`
                # and `RPC_SERVER` to identify queueing latency associated with the span.
          },
        ],
        &quot;traceId&quot;: &quot;A String&quot;, # Globally unique identifier for the trace. This identifier is a 128-bit
            # numeric value formatted as a 32-byte hex string. For example,
            # `382d4f4c6b7bb2f4a972559d9085001d`.
      },
    ],
  }

  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>