<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="#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</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, pageToken=None, pageSize=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(previous_request, previous_response)</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</p>
<h3>Method Details</h3>
<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:
        # 
        #   project/[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. Currently only BigQuery is
          # supported. E.g.:
          #
          #     &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 write data this account will need 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:
          #
          #   project/[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. Currently only BigQuery is
            # supported. E.g.:
            #
            #     &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 write data this account will need 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);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</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:
          #
          #   project/[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. Currently only BigQuery is
            # supported. E.g.:
            #
            #     &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 write data this account will need 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, pageToken=None, pageSize=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)
  pageToken: string, Optional. If present, then retrieve the next batch of results from the
preceding call to this method.  `pageToken` must be the value of
`nextPageToken` from the previous response.  The values of other method
parameters should be identical to those in the previous call.
  pageSize: integer, Optional. The maximum number of results to return from this request.
Non-positive values are ignored.  The presence of `nextPageToken` in the
response indicates that more results might be available.
  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;, # If there might be more results than appear in this response, then
        # `nextPageToken` is included.  To get the next set of results, call the same
        # method again using the value of `nextPageToken` as `pageToken`.
    &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:
              #
              #   project/[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. Currently only BigQuery is
                # supported. E.g.:
                #
                #     &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 write data this account will need 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(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>

<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:
        # 
        #   project/[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. Currently only BigQuery is
          # supported. E.g.:
          #
          #     &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 write data this account will need 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 updateMask 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:
          #
          #   project/[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. Currently only BigQuery is
            # supported. E.g.:
            #
            #     &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 write data this account will need 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>