<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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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>