<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_v2beta1.html">Cloud Trace API</a> . <a href="cloudtrace_v2beta1.projects.html">projects</a> . <a href="cloudtrace_v2beta1.projects.traceSinks.html">traceSinks</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="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a sink that exports trace spans to a destination. The export of newly-ingested traces begins immediately, unless the sink's `writer_identity` is not permitted to write to the destination. A sink can export traces only from the resource owning the sink (the 'parent').</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a sink.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get a trace sink by name under the parent resource (GCP project).</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all sinks for the parent resource (GCP project).</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a sink. This method updates fields in the existing sink according to the provided update mask. The sink's name cannot be changed nor any output-only fields (e.g. the writer_identity).</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="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a sink that exports trace spans to a destination. The export of newly-ingested traces begins immediately, unless the sink&#x27;s `writer_identity` is not permitted to write to the destination. A sink can export traces only from the resource owning the sink (the &#x27;parent&#x27;).

Args:
  parent: string, Required. The resource in which to create the sink (currently only project sinks are supported): &quot;projects/[PROJECT_ID]&quot; Examples: `&quot;projects/my-trace-project&quot;`, `&quot;projects/123456789&quot;`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
  &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
  &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
    &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
  },
  &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
}

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

Returns:
  An object of the form:

    { # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
  &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
  &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
    &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
  },
  &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a sink.

Args:
  name: string, Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: &quot;projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]&quot; Example: `&quot;projects/12345/traceSinks/my-sink-id&quot;`. (required)
  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get a trace sink by name under the parent resource (GCP project).

Args:
  name: string, Required. The resource name of the sink: &quot;projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]&quot; Example: `&quot;projects/12345/traceSinks/my-sink-id&quot;`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
  &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
  &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
    &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
  },
  &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all sinks for the parent resource (GCP project).

Args:
  parent: string, Required. The parent resource whose sinks are to be listed (currently only project parent resources are supported): &quot;projects/[PROJECT_ID]&quot; (required)
  pageSize: integer, Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of `next_page_token` in the response indicates that more results might be available.
  pageToken: string, Optional. If present, then retrieve the next batch of results from the preceding call to this method. `page_token` must be the value of `next_page_token` from the previous response. The values of other method parameters should be identical to those in the previous call.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Result returned from `ListTraceSinks`.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A paginated response where more pages might be available has `next_page_token` set. To get the next set of results, call the same method again using the value of `next_page_token` as `page_token`.
  &quot;sinks&quot;: [ # A list of sinks.
    { # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
      &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
      &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
        &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
      },
      &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a sink. This method updates fields in the existing sink according to the provided update mask. The sink&#x27;s name cannot be changed nor any output-only fields (e.g. the writer_identity).

Args:
  name: string, Required. The full resource name of the sink to update, including the parent resource and the sink identifier: &quot;projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]&quot; Example: `&quot;projects/12345/traceSinks/my-sink-id&quot;`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
  &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
  &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
    &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
  },
  &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
}

  updateMask: string, Required. Field mask that specifies the fields in `trace_sink` that are to be updated. A sink field is overwritten if, and only if, it is in the update mask. `name` and `writer_identity` fields cannot be updated. An empty `update_mask` is considered an error. For a detailed `FieldMask` definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask Example: `updateMask=output_config`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a sink used to export traces to a BigQuery dataset. The sink must be created within a project.
  &quot;name&quot;: &quot;A String&quot;, # Required. The canonical sink resource name, unique within the project. Must be of the form: projects/[PROJECT_NUMBER]/traceSinks/[SINK_ID]. E.g.: `&quot;projects/12345/traceSinks/my-project-trace-sink&quot;`. Sink identifiers are limited to 256 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods.
  &quot;outputConfig&quot;: { # OutputConfig contains a destination for writing trace data. # Required. The export destination.
    &quot;destination&quot;: &quot;A String&quot;, # The destination for writing trace data. Supported formats include: &quot;bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]&quot;
  },
  &quot;writerIdentity&quot;: &quot;A String&quot;, # Output only. A service account name for exporting the data. This field is set by sinks.create and sinks.update. The service account will need to be granted write access to the destination specified in the output configuration, see [Granting access for a resource](/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). To create tables and to write data, this account needs the `dataEditor` role. Read more about roles in the [BigQuery documentation](https://cloud.google.com/bigquery/docs/access-control). E.g.: &quot;service-00000001@00000002.iam.gserviceaccount.com&quot;
}</pre>
</div>

</body></html>