<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="cloudprofiler_v2.html">Stackdriver Profiler API</a> . <a href="cloudprofiler_v2.projects.html">projects</a> . <a href="cloudprofiler_v2.projects.profiles.html">profiles</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">CreateProfile creates a new profile resource in the online mode.</p>
<p class="toc_element">
  <code><a href="#createOffline">createOffline(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">CreateOfflineProfile creates a new profile resource in the offline mode.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">UpdateProfile updates the profile bytes and labels on the profile resource</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>CreateProfile creates a new profile resource in the online mode.

The server ensures that the new profiles are created at a constant rate per
deployment, so the creation request may hang for some time until the next
profile session is available.

The request may fail with ABORTED error if the creation is not available
within ~1m, the response will indicate the duration of the backoff the
client should take before attempting creating a profile again. The backoff
duration is returned in google.rpc.RetryInfo extension on the response
status. To a gRPC client, the extension will be return as a
binary-serialized proto in the trailing metadata item named
&quot;google.rpc.retryinfo-bin&quot;.

Args:
  parent: string, Parent project to create the profile in. (required)
  body: object, The request body.
    The object takes the form of:

{ # CreateProfileRequest describes a profile resource online creation request.
      # The deployment field must be populated. The profile_type specifies the list
      # of profile types supported by the agent. The creation call will hang until a
      # profile of one of these types needs to be collected.
    &quot;profileType&quot;: [ # One or more profile types that the agent is capable of providing.
      &quot;A String&quot;,
    ],
    &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment details.
      &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
          # * Service name for GAE Flex / Standard.
          # * Cluster and container name for GKE.
          # * User-specified string for direct GCE profiling (e.g. Java).
          # * Job name for Dataflow.
          # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
      &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
          # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
          # Value for an individual label must be &lt;= 512 bytes, the total
          # size of all label names and values must be &lt;= 1024 bytes.
          #
          # Label named &quot;language&quot; can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include &quot;java&quot;,
          # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
          #
          # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
          # should be present describing the deployment location. An example of a zone
          # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
          # &quot;us-central&quot;.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
  }

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

Returns:
  An object of the form:

    { # Profile resource.
      &quot;profileType&quot;: &quot;A String&quot;, # Type of profile.
          # For offline mode, this must be specified when creating the profile. For
          # online mode it is assigned and returned by the server.
      &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
        &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
            # * Service name for GAE Flex / Standard.
            # * Cluster and container name for GKE.
            # * User-specified string for direct GCE profiling (e.g. Java).
            # * Job name for Dataflow.
            # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
        &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
            # Validation regex: `^a-z{4,61}[a-z0-9]$`.
        &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
            # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
            # Value for an individual label must be &lt;= 512 bytes, the total
            # size of all label names and values must be &lt;= 1024 bytes.
            #
            # Label named &quot;language&quot; can be used to record the programming language of
            # the profiled deployment. The standard choices for the value include &quot;java&quot;,
            # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
            #
            # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
            # should be present describing the deployment location. An example of a zone
            # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
            # &quot;us-central&quot;.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
      &quot;labels&quot;: { # Input only. Labels associated to this specific profile. These labels will
          # get merged with the deployment labels for the final data set.  See
          # documentation on deployment labels for validation rules and limits.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;profileBytes&quot;: &quot;A String&quot;, # Input only. Profile bytes, as a gzip compressed serialized proto, the
          # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Opaque, server-assigned, unique ID for this profile.
      &quot;duration&quot;: &quot;A String&quot;, # Duration of the profiling session.
          # Input (for the offline mode) or output (for the online mode).
          # The field represents requested profiling duration. It may slightly differ
          # from the effective profiling duration, which is recorded in the profile
          # data, in case the profiling can&#x27;t be stopped immediately (e.g. in case
          # stopping the profiling is handled asynchronously).
    }</pre>
</div>

<div class="method">
    <code class="details" id="createOffline">createOffline(parent, body=None, x__xgafv=None)</code>
  <pre>CreateOfflineProfile creates a new profile resource in the offline mode.
The client provides the profile to create along with the profile bytes, the
server records it.

Args:
  parent: string, Parent project to create the profile in. (required)
  body: object, The request body.
    The object takes the form of:

{ # Profile resource.
    &quot;profileType&quot;: &quot;A String&quot;, # Type of profile.
        # For offline mode, this must be specified when creating the profile. For
        # online mode it is assigned and returned by the server.
    &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
      &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
          # * Service name for GAE Flex / Standard.
          # * Cluster and container name for GKE.
          # * User-specified string for direct GCE profiling (e.g. Java).
          # * Job name for Dataflow.
          # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
      &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
          # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
          # Value for an individual label must be &lt;= 512 bytes, the total
          # size of all label names and values must be &lt;= 1024 bytes.
          #
          # Label named &quot;language&quot; can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include &quot;java&quot;,
          # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
          #
          # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
          # should be present describing the deployment location. An example of a zone
          # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
          # &quot;us-central&quot;.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
    &quot;labels&quot;: { # Input only. Labels associated to this specific profile. These labels will
        # get merged with the deployment labels for the final data set.  See
        # documentation on deployment labels for validation rules and limits.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;profileBytes&quot;: &quot;A String&quot;, # Input only. Profile bytes, as a gzip compressed serialized proto, the
        # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
    &quot;name&quot;: &quot;A String&quot;, # Output only. Opaque, server-assigned, unique ID for this profile.
    &quot;duration&quot;: &quot;A String&quot;, # Duration of the profiling session.
        # Input (for the offline mode) or output (for the online mode).
        # The field represents requested profiling duration. It may slightly differ
        # from the effective profiling duration, which is recorded in the profile
        # data, in case the profiling can&#x27;t be stopped immediately (e.g. in case
        # stopping the profiling is handled asynchronously).
  }

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

Returns:
  An object of the form:

    { # Profile resource.
      &quot;profileType&quot;: &quot;A String&quot;, # Type of profile.
          # For offline mode, this must be specified when creating the profile. For
          # online mode it is assigned and returned by the server.
      &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
        &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
            # * Service name for GAE Flex / Standard.
            # * Cluster and container name for GKE.
            # * User-specified string for direct GCE profiling (e.g. Java).
            # * Job name for Dataflow.
            # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
        &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
            # Validation regex: `^a-z{4,61}[a-z0-9]$`.
        &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
            # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
            # Value for an individual label must be &lt;= 512 bytes, the total
            # size of all label names and values must be &lt;= 1024 bytes.
            #
            # Label named &quot;language&quot; can be used to record the programming language of
            # the profiled deployment. The standard choices for the value include &quot;java&quot;,
            # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
            #
            # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
            # should be present describing the deployment location. An example of a zone
            # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
            # &quot;us-central&quot;.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
      &quot;labels&quot;: { # Input only. Labels associated to this specific profile. These labels will
          # get merged with the deployment labels for the final data set.  See
          # documentation on deployment labels for validation rules and limits.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;profileBytes&quot;: &quot;A String&quot;, # Input only. Profile bytes, as a gzip compressed serialized proto, the
          # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Opaque, server-assigned, unique ID for this profile.
      &quot;duration&quot;: &quot;A String&quot;, # Duration of the profiling session.
          # Input (for the offline mode) or output (for the online mode).
          # The field represents requested profiling duration. It may slightly differ
          # from the effective profiling duration, which is recorded in the profile
          # data, in case the profiling can&#x27;t be stopped immediately (e.g. in case
          # stopping the profiling is handled asynchronously).
    }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>UpdateProfile updates the profile bytes and labels on the profile resource
created in the online mode. Updating the bytes for profiles created in the
offline mode is currently not supported: the profile content must be
provided at the time of the profile creation.

Args:
  name: string, Output only. Opaque, server-assigned, unique ID for this profile. (required)
  body: object, The request body.
    The object takes the form of:

{ # Profile resource.
    &quot;profileType&quot;: &quot;A String&quot;, # Type of profile.
        # For offline mode, this must be specified when creating the profile. For
        # online mode it is assigned and returned by the server.
    &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
      &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
          # * Service name for GAE Flex / Standard.
          # * Cluster and container name for GKE.
          # * User-specified string for direct GCE profiling (e.g. Java).
          # * Job name for Dataflow.
          # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
      &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
          # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
          # Value for an individual label must be &lt;= 512 bytes, the total
          # size of all label names and values must be &lt;= 1024 bytes.
          #
          # Label named &quot;language&quot; can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include &quot;java&quot;,
          # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
          #
          # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
          # should be present describing the deployment location. An example of a zone
          # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
          # &quot;us-central&quot;.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
    &quot;labels&quot;: { # Input only. Labels associated to this specific profile. These labels will
        # get merged with the deployment labels for the final data set.  See
        # documentation on deployment labels for validation rules and limits.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;profileBytes&quot;: &quot;A String&quot;, # Input only. Profile bytes, as a gzip compressed serialized proto, the
        # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
    &quot;name&quot;: &quot;A String&quot;, # Output only. Opaque, server-assigned, unique ID for this profile.
    &quot;duration&quot;: &quot;A String&quot;, # Duration of the profiling session.
        # Input (for the offline mode) or output (for the online mode).
        # The field represents requested profiling duration. It may slightly differ
        # from the effective profiling duration, which is recorded in the profile
        # data, in case the profiling can&#x27;t be stopped immediately (e.g. in case
        # stopping the profiling is handled asynchronously).
  }

  updateMask: string, Field mask used to specify the fields to be overwritten. Currently only
profile_bytes and labels fields are supported by UpdateProfile, so only
those fields can be specified in the mask. When no mask is provided, all
fields are overwritten.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Profile resource.
      &quot;profileType&quot;: &quot;A String&quot;, # Type of profile.
          # For offline mode, this must be specified when creating the profile. For
          # online mode it is assigned and returned by the server.
      &quot;deployment&quot;: { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
        &quot;target&quot;: &quot;A String&quot;, # Target is the service name used to group related deployments:
            # * Service name for GAE Flex / Standard.
            # * Cluster and container name for GKE.
            # * User-specified string for direct GCE profiling (e.g. Java).
            # * Job name for Dataflow.
            # Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
        &quot;projectId&quot;: &quot;A String&quot;, # Project ID is the ID of a cloud project.
            # Validation regex: `^a-z{4,61}[a-z0-9]$`.
        &quot;labels&quot;: { # Labels identify the deployment within the user universe and same target.
            # Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
            # Value for an individual label must be &lt;= 512 bytes, the total
            # size of all label names and values must be &lt;= 1024 bytes.
            #
            # Label named &quot;language&quot; can be used to record the programming language of
            # the profiled deployment. The standard choices for the value include &quot;java&quot;,
            # &quot;go&quot;, &quot;python&quot;, &quot;ruby&quot;, &quot;nodejs&quot;, &quot;php&quot;, &quot;dotnet&quot;.
            #
            # For deployments running on Google Cloud Platform, &quot;zone&quot; or &quot;region&quot; label
            # should be present describing the deployment location. An example of a zone
            # is &quot;us-central1-a&quot;, an example of a region is &quot;us-central1&quot; or
            # &quot;us-central&quot;.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
      &quot;labels&quot;: { # Input only. Labels associated to this specific profile. These labels will
          # get merged with the deployment labels for the final data set.  See
          # documentation on deployment labels for validation rules and limits.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;profileBytes&quot;: &quot;A String&quot;, # Input only. Profile bytes, as a gzip compressed serialized proto, the
          # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Opaque, server-assigned, unique ID for this profile.
      &quot;duration&quot;: &quot;A String&quot;, # Duration of the profiling session.
          # Input (for the offline mode) or output (for the online mode).
          # The field represents requested profiling duration. It may slightly differ
          # from the effective profiling duration, which is recorded in the profile
          # data, in case the profiling can&#x27;t be stopped immediately (e.g. in case
          # stopping the profiling is handled asynchronously).
    }</pre>
</div>

</body></html>