<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, pageToken=None, startTime=None, endTime=None, view=None, filter=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;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;endTime&quot;: &quot;A String&quot;, # End time of the span in nanoseconds from the UNIX epoch.
        &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;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;parentSpanId&quot;: &quot;A String&quot;, # Optional. ID of the parent span, if any.
        &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`.
        &quot;startTime&quot;: &quot;A String&quot;, # Start time of the span in nanoseconds from the UNIX epoch.
      },
    ],
    &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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, orderBy=None, pageSize=None, pageToken=None, startTime=None, endTime=None, view=None, filter=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.
  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.
  startTime: string, Start of the time interval (inclusive) during which the trace data was collected from the application.
  endTime: string, End of the time interval (inclusive) during which the trace data was collected from the application.
  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.
  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`.
  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;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;endTime&quot;: &quot;A String&quot;, # End time of the span in nanoseconds from the UNIX epoch.
            &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;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;parentSpanId&quot;: &quot;A String&quot;, # Optional. ID of the parent span, if any.
            &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`.
            &quot;startTime&quot;: &quot;A String&quot;, # Start time of the span in nanoseconds from the UNIX epoch.
          },
        ],
        &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.
      },
    ],
  }</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>