<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, 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, 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, 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, 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
"google.rpc.retryinfo-bin".

Args:
  parent: string, Parent project to create the profile in. (required)
  body: object, The request body. (required)
    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.
    "profileType": [ # One or more profile types that the agent is capable of providing.
      "A String",
    ],
    "deployment": { # Deployment contains the deployment identification information. # Deployment details.
      "projectId": "A String", # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      "labels": { # 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 <= 512 bytes, the total
          # size of all label names and values must be <= 1024 bytes.
          #
          # Label named "language" can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include "java",
          # "go", "python", "ruby", "nodejs", "php", "dotnet".
          #
          # For deployments running on Google Cloud Platform, "zone" or "region" label
          # should be present describing the deployment location. An example of a zone
          # is "us-central1-a", an example of a region is "us-central1" or
          # "us-central".
        "a_key": "A String",
      },
      "target": "A String", # 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])?$`.
    },
  }

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

Returns:
  An object of the form:

    { # Profile resource.
    "name": "A String", # Output only. Opaque, server-assigned, unique ID for this profile.
    "labels": { # 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.
      "a_key": "A String",
    },
    "profileBytes": "A String", # Input only. Profile bytes, as a gzip compressed serialized proto, the
        # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
    "profileType": "A String", # 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.
    "deployment": { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
      "projectId": "A String", # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      "labels": { # 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 <= 512 bytes, the total
          # size of all label names and values must be <= 1024 bytes.
          #
          # Label named "language" can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include "java",
          # "go", "python", "ruby", "nodejs", "php", "dotnet".
          #
          # For deployments running on Google Cloud Platform, "zone" or "region" label
          # should be present describing the deployment location. An example of a zone
          # is "us-central1-a", an example of a region is "us-central1" or
          # "us-central".
        "a_key": "A String",
      },
      "target": "A String", # 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])?$`.
    },
    "duration": "A String", # 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'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, 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. (required)
    The object takes the form of:

{ # Profile resource.
  "name": "A String", # Output only. Opaque, server-assigned, unique ID for this profile.
  "labels": { # 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.
    "a_key": "A String",
  },
  "profileBytes": "A String", # Input only. Profile bytes, as a gzip compressed serialized proto, the
      # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
  "profileType": "A String", # 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.
  "deployment": { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
    "projectId": "A String", # Project ID is the ID of a cloud project.
        # Validation regex: `^a-z{4,61}[a-z0-9]$`.
    "labels": { # 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 <= 512 bytes, the total
        # size of all label names and values must be <= 1024 bytes.
        #
        # Label named "language" can be used to record the programming language of
        # the profiled deployment. The standard choices for the value include "java",
        # "go", "python", "ruby", "nodejs", "php", "dotnet".
        #
        # For deployments running on Google Cloud Platform, "zone" or "region" label
        # should be present describing the deployment location. An example of a zone
        # is "us-central1-a", an example of a region is "us-central1" or
        # "us-central".
      "a_key": "A String",
    },
    "target": "A String", # 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])?$`.
  },
  "duration": "A String", # 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'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.
    "name": "A String", # Output only. Opaque, server-assigned, unique ID for this profile.
    "labels": { # 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.
      "a_key": "A String",
    },
    "profileBytes": "A String", # Input only. Profile bytes, as a gzip compressed serialized proto, the
        # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
    "profileType": "A String", # 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.
    "deployment": { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
      "projectId": "A String", # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      "labels": { # 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 <= 512 bytes, the total
          # size of all label names and values must be <= 1024 bytes.
          #
          # Label named "language" can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include "java",
          # "go", "python", "ruby", "nodejs", "php", "dotnet".
          #
          # For deployments running on Google Cloud Platform, "zone" or "region" label
          # should be present describing the deployment location. An example of a zone
          # is "us-central1-a", an example of a region is "us-central1" or
          # "us-central".
        "a_key": "A String",
      },
      "target": "A String", # 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])?$`.
    },
    "duration": "A String", # 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'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, 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. (required)
    The object takes the form of:

{ # Profile resource.
  "name": "A String", # Output only. Opaque, server-assigned, unique ID for this profile.
  "labels": { # 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.
    "a_key": "A String",
  },
  "profileBytes": "A String", # Input only. Profile bytes, as a gzip compressed serialized proto, the
      # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
  "profileType": "A String", # 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.
  "deployment": { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
    "projectId": "A String", # Project ID is the ID of a cloud project.
        # Validation regex: `^a-z{4,61}[a-z0-9]$`.
    "labels": { # 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 <= 512 bytes, the total
        # size of all label names and values must be <= 1024 bytes.
        #
        # Label named "language" can be used to record the programming language of
        # the profiled deployment. The standard choices for the value include "java",
        # "go", "python", "ruby", "nodejs", "php", "dotnet".
        #
        # For deployments running on Google Cloud Platform, "zone" or "region" label
        # should be present describing the deployment location. An example of a zone
        # is "us-central1-a", an example of a region is "us-central1" or
        # "us-central".
      "a_key": "A String",
    },
    "target": "A String", # 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])?$`.
  },
  "duration": "A String", # 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'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.
    "name": "A String", # Output only. Opaque, server-assigned, unique ID for this profile.
    "labels": { # 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.
      "a_key": "A String",
    },
    "profileBytes": "A String", # Input only. Profile bytes, as a gzip compressed serialized proto, the
        # format is https://github.com/google/pprof/blob/master/proto/profile.proto.
    "profileType": "A String", # 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.
    "deployment": { # Deployment contains the deployment identification information. # Deployment this profile corresponds to.
      "projectId": "A String", # Project ID is the ID of a cloud project.
          # Validation regex: `^a-z{4,61}[a-z0-9]$`.
      "labels": { # 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 <= 512 bytes, the total
          # size of all label names and values must be <= 1024 bytes.
          #
          # Label named "language" can be used to record the programming language of
          # the profiled deployment. The standard choices for the value include "java",
          # "go", "python", "ruby", "nodejs", "php", "dotnet".
          #
          # For deployments running on Google Cloud Platform, "zone" or "region" label
          # should be present describing the deployment location. An example of a zone
          # is "us-central1-a", an example of a region is "us-central1" or
          # "us-central".
        "a_key": "A String",
      },
      "target": "A String", # 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])?$`.
    },
    "duration": "A String", # 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't be stopped immediately (e.g. in case
        # stopping the profiling is handled asynchronously).
  }</pre>
</div>

</body></html>