blob: 1c51dce05bf42367efc2482c2629d62e448e2bb1 [file] [log] [blame] [edit]
// This is a generated file (see the discoveryapis_generator project).
// ignore_for_file: camel_case_types
// ignore_for_file: comment_references
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: doc_directive_unknown
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: prefer_interpolation_to_compose_strings
// ignore_for_file: unintended_html_in_doc_comment
// ignore_for_file: unnecessary_brace_in_string_interps
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: unnecessary_string_interpolations
/// Cloud Profiler API - v2
///
/// Manages continuous profiling information.
///
/// For more information, see <https://cloud.google.com/profiler/>
///
/// Create an instance of [CloudProfilerApi] to access these resources:
///
/// - [ProjectsResource]
/// - [ProjectsProfilesResource]
library;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Manages continuous profiling information.
class CloudProfilerApi {
/// See, edit, configure, and delete your Google Cloud data and see the email
/// address for your Google Account.
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
/// View and write monitoring data for all of your Google and third-party
/// Cloud and API projects
static const monitoringScope = 'https://www.googleapis.com/auth/monitoring';
/// Publish metric data to your Google Cloud projects
static const monitoringWriteScope =
'https://www.googleapis.com/auth/monitoring.write';
final commons.ApiRequester _requester;
ProjectsResource get projects => ProjectsResource(_requester);
CloudProfilerApi(
http.Client client, {
core.String rootUrl = 'https://cloudprofiler.googleapis.com/',
core.String servicePath = '',
}) : _requester = commons.ApiRequester(
client,
rootUrl,
servicePath,
requestHeaders,
);
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsProfilesResource get profiles => ProjectsProfilesResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsProfilesResource {
final commons.ApiRequester _requester;
ProjectsProfilesResource(commons.ApiRequester client) : _requester = client;
/// CreateProfile creates a new profile resource in the online mode.
///
/// _Direct use of this API is discouraged, please use a
/// [supported profiler agent](https://cloud.google.com/profiler/docs/about-profiler#profiling_agent)
/// instead for profile collection._ 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".
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Parent project to create the profile in.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Profile].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Profile> create(
CreateProfileRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/profiles';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return Profile.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// 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. _Direct use of this API is discouraged, please use
/// a
/// [supported profiler agent](https://cloud.google.com/profiler/docs/about-profiler#profiling_agent)
/// instead for profile collection._
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Parent project to create the profile in.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Profile].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Profile> createOffline(
Profile request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'fields': ?$fields == null ? null : [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$parent') + '/profiles:createOffline';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return Profile.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
/// Lists profiles which have been collected so far and for which the caller
/// has permission to view.
///
/// Request parameters:
///
/// [parent] - Required. The parent, which owns this collection of profiles.
/// Format: projects/{user_project_id}
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [pageSize] - Optional. The maximum number of items to return. Default
/// page_size is 1000. Max limit is 1000.
///
/// [pageToken] - Optional. 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.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ListProfilesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<ListProfilesResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
'pageSize': ?pageSize == null ? null : ['${pageSize}'],
'pageToken': ?pageToken == null ? null : [pageToken],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/profiles';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return ListProfilesResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}
/// 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. _Direct use of this API is discouraged, please use a
/// [supported profiler agent](https://cloud.google.com/profiler/docs/about-profiler#profiling_agent)
/// instead for profile collection._
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Output only. Opaque, server-assigned, unique ID for this profile.
/// Value must have pattern `^projects/\[^/\]+/profiles/\[^/\]+$`.
///
/// [updateMask] - 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.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Profile].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Profile> patch(
Profile request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'updateMask': ?updateMask == null ? null : [updateMask],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return Profile.fromJson(response_ as core.Map<core.String, core.dynamic>);
}
}
/// 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.
class CreateProfileRequest {
/// Deployment details.
Deployment? deployment;
/// One or more profile types that the agent is capable of providing.
core.List<core.String>? profileType;
CreateProfileRequest({this.deployment, this.profileType});
CreateProfileRequest.fromJson(core.Map json_)
: this(
deployment: json_.containsKey('deployment')
? Deployment.fromJson(
json_['deployment'] as core.Map<core.String, core.dynamic>,
)
: null,
profileType: (json_['profileType'] as core.List?)
?.map((value) => value as core.String)
.toList(),
);
core.Map<core.String, core.dynamic> toJson() {
final deployment = this.deployment;
final profileType = this.profileType;
return {'deployment': ?deployment, 'profileType': ?profileType};
}
}
/// Deployment contains the deployment identification information.
class Deployment {
/// 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".
core.Map<core.String, core.String>? labels;
/// Project ID is the ID of a cloud project.
///
/// Validation regex: `^a-z{4,61}[a-z0-9]$`.
core.String? projectId;
/// 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])?$`.
core.String? target;
Deployment({this.labels, this.projectId, this.target});
Deployment.fromJson(core.Map json_)
: this(
labels: (json_['labels'] as core.Map<core.String, core.dynamic>?)?.map(
(key, value) => core.MapEntry(key, value as core.String),
),
projectId: json_['projectId'] as core.String?,
target: json_['target'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final labels = this.labels;
final projectId = this.projectId;
final target = this.target;
return {'labels': ?labels, 'projectId': ?projectId, 'target': ?target};
}
}
/// ListProfileResponse contains the list of collected profiles for deployments
/// in projects which the user has permissions to view.
class ListProfilesResponse {
/// Token to receive the next page of results.
///
/// This field maybe empty if there are no more profiles to fetch.
core.String? nextPageToken;
/// List of profiles fetched.
core.List<Profile>? profiles;
/// 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.
core.int? skippedProfiles;
ListProfilesResponse({
this.nextPageToken,
this.profiles,
this.skippedProfiles,
});
ListProfilesResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_['nextPageToken'] as core.String?,
profiles: (json_['profiles'] as core.List?)
?.map(
(value) => Profile.fromJson(
value as core.Map<core.String, core.dynamic>,
),
)
.toList(),
skippedProfiles: json_['skippedProfiles'] as core.int?,
);
core.Map<core.String, core.dynamic> toJson() {
final nextPageToken = this.nextPageToken;
final profiles = this.profiles;
final skippedProfiles = this.skippedProfiles;
return {
'nextPageToken': ?nextPageToken,
'profiles': ?profiles,
'skippedProfiles': ?skippedProfiles,
};
}
}
/// Profile resource.
class Profile {
/// Deployment this profile corresponds to.
Deployment? deployment;
/// 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).
core.String? duration;
/// 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.
core.Map<core.String, core.String>? labels;
/// Opaque, server-assigned, unique ID for this profile.
///
/// Output only.
core.String? name;
/// Input only.
///
/// Profile bytes, as a gzip compressed serialized proto, the format is
/// https://github.com/google/pprof/blob/master/proto/profile.proto.
core.String? profileBytes;
core.List<core.int> get profileBytesAsBytes =>
convert.base64.decode(profileBytes!);
set profileBytesAsBytes(core.List<core.int> bytes_) {
profileBytes = convert.base64
.encode(bytes_)
.replaceAll('/', '_')
.replaceAll('+', '-');
}
/// 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.
/// Possible string values are:
/// - "PROFILE_TYPE_UNSPECIFIED" : Unspecified profile type.
/// - "CPU" : Thread CPU time sampling.
/// - "WALL" : Wallclock time sampling. More expensive as stops all threads.
/// - "HEAP" : In-use heap profile. Represents a snapshot of the allocations
/// that are live at the time of the profiling.
/// - "THREADS" : Single-shot collection of all thread stacks.
/// - "CONTENTION" : Synchronization contention profile.
/// - "PEAK_HEAP" : Peak heap profile.
/// - "HEAP_ALLOC" : 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.
core.String? profileType;
/// Start time for the profile.
///
/// This output is only present in response from the ListProfiles method.
///
/// Output only.
core.String? startTime;
Profile({
this.deployment,
this.duration,
this.labels,
this.name,
this.profileBytes,
this.profileType,
this.startTime,
});
Profile.fromJson(core.Map json_)
: this(
deployment: json_.containsKey('deployment')
? Deployment.fromJson(
json_['deployment'] as core.Map<core.String, core.dynamic>,
)
: null,
duration: json_['duration'] as core.String?,
labels: (json_['labels'] as core.Map<core.String, core.dynamic>?)?.map(
(key, value) => core.MapEntry(key, value as core.String),
),
name: json_['name'] as core.String?,
profileBytes: json_['profileBytes'] as core.String?,
profileType: json_['profileType'] as core.String?,
startTime: json_['startTime'] as core.String?,
);
core.Map<core.String, core.dynamic> toJson() {
final deployment = this.deployment;
final duration = this.duration;
final labels = this.labels;
final name = this.name;
final profileBytes = this.profileBytes;
final profileType = this.profileType;
final startTime = this.startTime;
return {
'deployment': ?deployment,
'duration': ?duration,
'labels': ?labels,
'name': ?name,
'profileBytes': ?profileBytes,
'profileType': ?profileType,
'startTime': ?startTime,
};
}
}