<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> . <a href="cloudtrace_v1.projects.traces.html">traces</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, traceId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a single trace by its ID.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, orderBy=None, pageSize=None, filter=None, startTime=None, pageToken=None, view=None, endTime=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns of a list of traces that match the specified filter conditions.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, traceId, x__xgafv=None)</code>
  <pre>Gets a single trace by its ID.

Args:
  projectId: string, Required. ID of the Cloud project where the trace data is stored. (required)
  traceId: string, Required. ID of the trace to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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;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`. The numeric value should not be zero.
    &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;parentSpanId&quot;: &quot;A String&quot;, # Optional. ID of the parent span, if any.
        &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;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;startTime&quot;: &quot;A String&quot;, # Start time of the span in nanoseconds from the UNIX epoch.
        &quot;endTime&quot;: &quot;A String&quot;, # End time of the span in nanoseconds from the UNIX epoch.
        &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 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`.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, orderBy=None, pageSize=None, filter=None, startTime=None, pageToken=None, view=None, endTime=None, x__xgafv=None)</code>
  <pre>Returns of a list of traces that match the specified filter conditions.

Args:
  projectId: string, Required. ID of the Cloud project where the trace data is stored. (required)
  orderBy: string, Optional. Field used to sort the returned traces. Can be one of the following: * `trace_id` * `name` (`name` field of root span in the trace) * `duration` (difference between `end_time` and `start_time` fields of the root span) * `start` (`start_time` field of the root span) Descending order can be specified by appending `desc` to the sort field (for example, `name desc`). Only one sort field is permitted.
  pageSize: integer, Optional. Maximum number of traces to return. If not specified or &lt;= 0, the implementation selects a reasonable value. The implementation may return fewer traces than the requested page size.
  filter: string, Optional. A filter against labels for the request. By default, searches use prefix matching. To specify exact match, prepend a plus symbol (`+`) to the search term. Multiple terms are ANDed. Syntax: * `root:NAME_PREFIX` or `NAME_PREFIX`: Return traces where any root span starts with `NAME_PREFIX`. * `+root:NAME` or `+NAME`: Return traces where any root span&#x27;s name is exactly `NAME`. * `span:NAME_PREFIX`: Return traces where any span starts with `NAME_PREFIX`. * `+span:NAME`: Return traces where any span&#x27;s name is exactly `NAME`. * `latency:DURATION`: Return traces whose overall latency is greater or equal to than `DURATION`. Accepted units are nanoseconds (`ns`), milliseconds (`ms`), and seconds (`s`). Default is `ms`. For example, `latency:24ms` returns traces whose overall latency is greater than or equal to 24 milliseconds. * `label:LABEL_KEY`: Return all traces containing the specified label key (exact match, case-sensitive) regardless of the key:value pair&#x27;s value (including empty values). * `LABEL_KEY:VALUE_PREFIX`: Return all traces containing the specified label key (exact match, case-sensitive) whose value starts with `VALUE_PREFIX`. Both a key and a value must be specified. * `+LABEL_KEY:VALUE`: Return all traces containing a key:value pair exactly matching the specified text. Both a key and a value must be specified. * `method:VALUE`: Equivalent to `/http/method:VALUE`. * `url:VALUE`: Equivalent to `/http/url:VALUE`.
  startTime: string, Start of the time interval (inclusive) during which the trace data was collected from the application.
  pageToken: string, Token identifying the page of results to return. If provided, use the value of the `next_page_token` field from a previous request.
  view: string, Optional. Type of data returned for traces in the list. Default is `MINIMAL`.
    Allowed values
      VIEW_TYPE_UNSPECIFIED - Default is `MINIMAL` if unspecified.
      MINIMAL - Minimal view of the trace record that contains only the project and trace IDs.
      ROOTSPAN - Root span view of the trace record that returns the root spans along with the minimal trace data.
      COMPLETE - Complete view of the trace record that contains the actual trace data. This is equivalent to calling the REST `get` or RPC `GetTrace` method using the ID of each listed trace.
  endTime: string, End of the time interval (inclusive) during which the trace data was collected from the application.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for the `ListTraces` method.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If defined, indicates that there are more traces that match the request and that this value should be passed to the next request to continue retrieving additional traces.
    &quot;traces&quot;: [ # List of trace records as specified by the view parameter.
      { # 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;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`. The numeric value should not be zero.
        &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;parentSpanId&quot;: &quot;A String&quot;, # Optional. ID of the parent span, if any.
            &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;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;startTime&quot;: &quot;A String&quot;, # Start time of the span in nanoseconds from the UNIX epoch.
            &quot;endTime&quot;: &quot;A String&quot;, # End time of the span in nanoseconds from the UNIX epoch.
            &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 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`.
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>