# frozen_string_literal: true

# Copyright 2021 Google LLC
#
# 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
#
#     https://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.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module Profiler
      module V2
        # 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.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Parent project to create the profile in.
        # @!attribute [rw] deployment
        #   @return [::Google::Cloud::Profiler::V2::Deployment]
        #     Deployment details.
        # @!attribute [rw] profile_type
        #   @return [::Array<::Google::Cloud::Profiler::V2::ProfileType>]
        #     One or more profile types that the agent is capable of providing.
        class CreateProfileRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # CreateOfflineProfileRequest describes a profile resource offline creation
        # request.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Parent project to create the profile in.
        # @!attribute [rw] profile
        #   @return [::Google::Cloud::Profiler::V2::Profile]
        #     Contents of the profile to create.
        class CreateOfflineProfileRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # UpdateProfileRequest contains the profile to update.
        # @!attribute [rw] profile
        #   @return [::Google::Cloud::Profiler::V2::Profile]
        #     Profile to update.
        # @!attribute [rw] update_mask
        #   @return [::Google::Protobuf::FieldMask]
        #     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.
        class UpdateProfileRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Profile resource.
        # @!attribute [r] name
        #   @return [::String]
        #     Output only. Opaque, server-assigned, unique ID for this profile.
        # @!attribute [rw] profile_type
        #   @return [::Google::Cloud::Profiler::V2::ProfileType]
        #     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.
        # @!attribute [rw] deployment
        #   @return [::Google::Cloud::Profiler::V2::Deployment]
        #     Deployment this profile corresponds to.
        # @!attribute [rw] duration
        #   @return [::Google::Protobuf::Duration]
        #     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).
        # @!attribute [rw] profile_bytes
        #   @return [::String]
        #     Input only. Profile bytes, as a gzip compressed serialized proto, the
        #     format is https://github.com/google/pprof/blob/master/proto/profile.proto.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     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.
        # @!attribute [r] start_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Start time for the profile.
        #     This output is only present in response from the ListProfiles method.
        class Profile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Deployment contains the deployment identification information.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Project ID is the ID of a cloud project.
        #     Validation regex: `^[a-z][-a-z0-9:.]{4,61}[a-z0-9]$`.
        # @!attribute [rw] target
        #   @return [::String]
        #     Target is the service name used to group related deployments:
        #     * Service name for App Engine Flex / Standard.
        #     * Cluster and container name for GKE.
        #     * User-specified string for direct Compute Engine profiling (e.g. Java).
        #     * Job name for Dataflow.
        #     Validation regex: `^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     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".
        class Deployment
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # ListProfilesRequest contains request parameters for listing profiles for
        # deployments in projects which the user has permissions to view.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. The parent, which owns this collection of profiles.
        #     Format: projects/\\{user_project_id}
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     The maximum number of items to return.
        #     Default page_size is 1000.
        #     Max limit is 1000.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     The token to continue pagination and get profiles from a particular page.
        #     When paginating, all other parameters provided to `ListProfiles` must match
        #     the call that provided the page token.
        class ListProfilesRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # ListProfileResponse contains the list of collected profiles for deployments
        # in projects which the user has permissions to view.
        # @!attribute [rw] profiles
        #   @return [::Array<::Google::Cloud::Profiler::V2::Profile>]
        #     List of profiles fetched.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Token to receive the next page of results.
        #     This field maybe empty if there are no more profiles to fetch.
        # @!attribute [rw] skipped_profiles
        #   @return [::Integer]
        #     Number of profiles that were skipped in the current page since they were
        #     not able to be fetched successfully. This should typically be zero. A
        #     non-zero value may indicate a transient failure, in which case if the
        #     number is too high for your use case, the call may be retried.
        class ListProfilesResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # 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.
        module 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

          # In-use heap profile. Represents a snapshot of the allocations that are
          # live at the time of the profiling.
          HEAP = 3

          # Single-shot collection of all thread stacks.
          THREADS = 4

          # Synchronization contention profile.
          CONTENTION = 5

          # Peak heap profile.
          PEAK_HEAP = 6

          # Heap allocation profile. It represents the aggregation of all allocations
          # made over the duration of the profile. All allocations are included,
          # including those that might have been freed by the end of the profiling
          # interval. The profile is in particular useful for garbage collecting
          # languages to understand which parts of the code create most of the garbage
          # collection pressure to see if those can be optimized.
          HEAP_ALLOC = 7
        end
      end
    end
  end
end
