| // Copyright 2017 Google Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| syntax = "proto3"; |
| |
| package google.devtools.cloudprofiler.v2; |
| |
| import "google/api/annotations.proto"; |
| import "google/protobuf/duration.proto"; |
| import "google/protobuf/timestamp.proto"; |
| |
| option go_package = "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2;cloudprofiler"; |
| |
| |
| // Service for recording the profiling data from profiling agents running |
| // in the cloud or from an offline provider of profiling data. |
| // |
| // General guidelines: |
| // * Profiles for a single deployment must be created in ascending time order. |
| // * Profiles can be created in either online or offline mode, see below. |
| service ProfilerService { |
| // CreateProfile creates a new profile resource. |
| // |
| // In the online creation 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". |
| // |
| // In the offline creation mode: |
| // * The client provides the profile to create along with the profile bytes, |
| // the server records it. |
| rpc CreateProfile(CreateProfileRequest) returns (Profile) { |
| option (google.api.http) = { post: "/v2/projects/{deployment.project_id}/profiles" body: "*" }; |
| } |
| |
| // UpdateProfile updates the profile bytes and labels on the profile resource |
| // created in the online mode. |
| rpc UpdateProfile(UpdateProfileRequest) returns (Profile) { |
| option (google.api.http) = { patch: "/v2/{profile.name=projects/*/profiles/*}" body: "profile" }; |
| } |
| } |
| |
| // CreateProfileRequest describes a profile resource creation request. |
| // Deployment field must be populated for both online and offline modes. |
| // For the online mode, profile field is not set and 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. For offline |
| // mode, profile field must be set, profile_type must be empty, and deployment |
| // field must be identical to the deployment in the profile. |
| message CreateProfileRequest { |
| // Deployment details. |
| Deployment deployment = 1; |
| |
| // Online mode: One or more profile types that the agent is capable of |
| // providing. |
| repeated ProfileType profile_type = 2; |
| |
| // Offline mode: Contents of the profile to create. |
| Profile profile = 3; |
| } |
| |
| // UpdateProfileRequest contains the profile to update. |
| message UpdateProfileRequest { |
| // Profile to update |
| Profile profile = 1; |
| } |
| |
| // Profile resource. |
| message Profile { |
| // Opaque, server-assigned, unique ID for this profile. |
| // Output only. |
| string name = 1; |
| |
| // Type of profile. |
| // Input (for the offline mode) or output (for the online mode). |
| ProfileType profile_type = 2; |
| |
| // Deployment this profile corresponds to. |
| Deployment deployment = 3; |
| |
| // 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). |
| google.protobuf.Duration duration = 4; |
| |
| // Profile bytes, as a gzip compressed serialized proto, the format is |
| // https://github.com/google/pprof/blob/master/proto/profile.proto. |
| bytes profile_bytes = 5; |
| |
| // 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. |
| // Input only, will not be populated on responses. |
| map<string, string> labels = 6; |
| } |
| |
| // Deployment contains the deployment identification information. |
| message Deployment { |
| // Project ID is the ID of a cloud project. |
| // Validation regex: `^[a-z][-a-z0-9:.]{4,61}[a-z0-9]$`. |
| string project_id = 1; |
| |
| // 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])?$`. |
| string target = 2; |
| |
| // 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". |
| map<string, string> labels = 3; |
| } |
| |
| // ProfileType is type of profiling data. |
| // NOTE: the enumeration member names are used (in lowercase) as unique string |
| // identifiers of profile types, so they must not be renamed. |
| enum ProfileType { |
| // Unspecified profile type. |
| PROFILE_TYPE_UNSPECIFIED = 0; |
| |
| // Thread CPU time sampling. |
| CPU = 1; |
| |
| // Wallclock time sampling. More expensive as stops all threads. |
| WALL = 2; |
| |
| // Heap allocation sampling. |
| HEAP = 3; |
| |
| // Single-shot collection of all thread stacks. |
| THREADS = 4; |
| |
| // Synchronization contention profile. |
| CONTENTION = 5; |
| } |