googleapis/google/cloud/appoptimize/v1beta/app_optimize.proto
Google APIs 9a832ccde3 feat: add C# namespace for App Optimize v1beta client
PiperOrigin-RevId: 896667346
2026-04-08 13:23:11 -07:00

408 lines
14 KiB
Protocol Buffer

// Copyright 2026 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
//
// 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.cloud.appoptimize.v1beta;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.AppOptimize.V1Beta";
option go_package = "cloud.google.com/go/appoptimize/apiv1beta/appoptimizepb;appoptimizepb";
option java_multiple_files = true;
option java_outer_classname = "AppOptimizeProto";
option java_package = "com.google.cloud.appoptimize.v1beta";
// Resource definition for App Hub Application.
option (google.api.resource_definition) = {
type: "apphub.googleapis.com/Application"
pattern: "projects/{project}/locations/{location}/applications/{application}"
};
// Service for managing and querying optimization reports.
service AppOptimize {
option (google.api.default_host) = "appoptimize.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates a new report.
//
// This initiates a long-running operation that, upon completion, results
// in a report resource. Once the report is created, its results can be read
// via `ReadReport`.
rpc CreateReport(CreateReportRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1beta/{parent=projects/*/locations/*}/reports"
body: "report"
};
option (google.api.method_signature) = "parent,report,report_id";
option (google.longrunning.operation_info) = {
response_type: "Report"
metadata_type: "OperationMetadata"
};
}
// Retrieves the details of a report configuration.
rpc GetReport(GetReportRequest) returns (Report) {
option (google.api.http) = {
get: "/v1beta/{name=projects/*/locations/*/reports/*}"
};
option (google.api.method_signature) = "name";
}
// Lists reports within a given project.
rpc ListReports(ListReportsRequest) returns (ListReportsResponse) {
option (google.api.http) = {
get: "/v1beta/{parent=projects/*/locations/*}/reports"
};
option (google.api.method_signature) = "parent";
}
// Deletes the specified report.
rpc DeleteReport(DeleteReportRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta/{name=projects/*/locations/*/reports/*}"
};
option (google.api.method_signature) = "name";
}
// Reads data within a specified report.
rpc ReadReport(ReadReportRequest) returns (ReadReportResponse) {
option (google.api.http) = {
post: "/v1beta/{name=projects/*/locations/*/reports/*}:read"
body: "*"
};
option (google.api.method_signature) = "name";
}
}
// Request message for the `CreateReport` method.
message CreateReportRequest {
// Required. The parent Google Cloud project that will own the report.
//
// This value does not define the scope of the report data. See `Report.scope`
// for setting the data scope.
//
// Format: `projects/{project}/locations/{location}`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "appoptimize.googleapis.com/Report"
}
];
// Required. The ID to use for this report. This ID must be unique within
// the parent project and should comply with RFC 1034 restrictions (letters,
// numbers, and hyphen, with the first character a letter, the last a letter
// or a number, and a 63 character maximum).
string report_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. The report resource to create.
Report report = 3 [(google.api.field_behavior) = REQUIRED];
}
// A configuration that defines the parameters for the data represented by a
// report.
message Report {
option (google.api.resource) = {
type: "appoptimize.googleapis.com/Report"
pattern: "projects/{project}/locations/{location}/reports/{report}"
plural: "reports"
singular: "report"
};
// Defines this report's expiration time.
oneof expiration {
// Output only. Timestamp in UTC of when this report expires. Once the
// report expires, it will no longer be accessible and the report's
// underlying data will be deleted.
google.protobuf.Timestamp expire_time = 6
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// Identifier. The name of this report.
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// Required. A list of dimensions to include in the report. Supported values:
//
// * `project`
// * `application`
// * `service_or_workload`
// * `resource`
// * `resource_type`
// * `location`
// * `product_display_name`
// * `sku`
// * `month`
// * `day`
// * `hour`
//
// To aggregate results by time, specify at least one time dimension
// (`month`, `day`, or `hour`). All time dimensions use Pacific Time,
// respect Daylight Saving Time (DST), and follow these ISO 8601 formats:
//
// * `month`: `YYYY-MM` (e.g., `2024-01`)
// * `day`: `YYYY-MM-DD` (e.g., `2024-01-10`)
// * `hour`: `YYYY-MM-DDTHH` (e.g., `2024-01-10T00`)
//
// If the time range filter does not align with the selected time dimension,
// the range is expanded to encompass the full period of the finest-grained
// time dimension.
//
// For example, if the filter is `2026-01-10` through `2026-01-12` and the
// `month` dimension is selected, the effective time range expands to include
// all of January (`2026-01-01` to `2026-02-01`).
repeated string dimensions = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A list of metrics to include in the report. Supported values:
//
// * `cost`
// * `cpu_mean_utilization`
// * `cpu_usage_core_seconds`
// * `cpu_allocation_core_seconds`
// * `cpu_p95_utilization`
// * `memory_mean_utilization`
// * `memory_usage_byte_seconds`
// * `memory_allocation_byte_seconds`
// * `memory_p95_utilization`
repeated string metrics = 7 [(google.api.field_behavior) = REQUIRED];
// Optional. The resource containers for which to fetch data. Default is the
// project specified in the report's parent.
repeated Scope scopes = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. A Common Expression Language (CEL) expression used to filter the
// data for the report.
//
// Predicates may refer to any dimension. Filtering must conform to these
// constraints:
//
// * All string field predicates must use exact string matches.
// * Multiple predicates referring to the same string field must be joined
// using the logical OR operator ('||').
// * All other predicates must be joined using the logical AND operator
// (`&&`).
// * A predicate on a time dimension (e.g., `day`) specifying the start time
// must use a greater-than-or-equal-to comparison (`>=`).
// * A predicate on a time dimension specifying the end time must use a
// less-than comparison (`<`).
//
// Examples:
//
// 1. Filter by a specific resource type:
// `"resource_type == 'compute.googleapis.com/Instance'"`
//
// 2. Filter data points that fall within a specific absolute time interval:
// `"hour >= timestamp('2024-01-01T00:00:00Z') &&
// hour < timestamp('2024-02-01T00:00:00Z')"`
//
// 3. Filter data points that fall within the past 72 hours:
// `"hour >= now - duration('72h')"`
//
// 4. Combine string predicate with time interval predicate:
// `"(location == 'us-east1' || location == 'us-west1') &&
// hour >= timestamp('2023-12-01T00:00:00Z') &&
// hour < timestamp('2024-02-01T00:00:00Z')"`
//
// If the filter omits time dimensions (`month`, `day`, `hour`), the report
// defaults to a 7-day range ending at the previous Pacific Time midnight,
// with Daylight Saving Time (DST) applied.
//
// For example, if the current Pacific Time is `2026-01-05T12:00:00`,
// the default range is `2025-12-29T00:00:00` to `2026-01-05T00:00:00` Pacific
// time.
string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}
// Specifies the report scope.
message Scope {
oneof scope {
// Required. A Google Cloud Platform project to fetch data from.
//
// Format: `"projects/{project}"`.
string project = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "cloudresourcemanager.googleapis.com/Project"
}
];
// Required. An App Hub Application to fetch data from.
//
// Format:
// `"projects/{project}/locations/{location}/applications/{application}"`.
string application = 2 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "apphub.googleapis.com/Application"
}
];
}
}
// Request message for the `GetReport` method.
message GetReportRequest {
// Required. The name of the report to retrieve.
//
// Format: `projects/{project}/locations/{location}/reports/{report_id}`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "appoptimize.googleapis.com/Report"
}
];
}
// Request message for the `ListReports` method.
message ListReportsRequest {
// Required. The parent project whose reports are to be listed.
//
// Format: `projects/{project}/locations/{location}`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "appoptimize.googleapis.com/Report"
}
];
// Optional. The maximum number of reports to return. The service may return
// fewer than this value. If unspecified, the server will determine the number
// of results to return.
int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token, received from a previous `ListReports` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListReports` must match
// the call that provided the page token.
string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}
// Response message for the `ListReports` method.
message ListReportsResponse {
// The list of reports.
repeated Report reports = 1;
// A token that can be sent as `page_token` to retrieve the next page.
// If this field is empty, there are no subsequent pages.
string next_page_token = 2;
}
// Request message for the `DeleteReport` method.
message DeleteReportRequest {
// Required. The name of the report to delete.
//
// Format: `projects/{project}/locations/{location}/reports/{report_id}`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "appoptimize.googleapis.com/Report"
}
];
// Optional. If set to true, and the report is not found, the request will
// succeed but no action will be taken on the server.
bool allow_missing = 2 [(google.api.field_behavior) = OPTIONAL];
}
// Request message for the `ReadReport` method.
message ReadReportRequest {
// Required. The resource name of the report to query.
//
// Format: `projects/{project}/locations/{location}/reports/{report_id}`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "appoptimize.googleapis.com/Report"
}
];
// Optional. The maximum number of rows to return. The service may return
// fewer than this value. If unspecified, at most 10,000 rows will be returned
// per page. The maximum allowed value is 25,000; values above 25,000 are
// coerced to 25,000.
int32 page_size = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token, received from a previous `ReadReport` call, to
// retrieve the subsequent page of results. When `page_token` is specified,
// `job_reference` must also be provided from the previous response, and the
// `statement` field must not be set.
string page_token = 5 [(google.api.field_behavior) = OPTIONAL];
}
// Response message for the `ReadReport` method.
message ReadReportResponse {
// A list of rows, where each row represents a record from the report.
repeated google.protobuf.ListValue rows = 1;
// The columns describing the structure of the data in the `rows` field.
repeated Column columns = 5;
// A token that can be sent as `page_token` in a subsequent `ReadReport`
// request to retrieve the next page of results. If this field is empty,
// there are no further pages.
string next_page_token = 3;
}
// Describes a single column within `Columns`.
message Column {
// The name of the column.
//
// This field:
//
// * Contains only letters (a-z, A-Z), numbers (0-9), or underscores (_);
// * Start with a letter or underscore; and
// * Has a maximum length is 128 characters.
string name = 1;
// The data type of the column.
//
// Supported values include:
//
// * `STRING`
// * `INT64`
// * `FLOAT64`
// * `BOOLEAN`
// * `TIMESTAMP`
// * `RECORD`
//
// `RECORD` indicates that the field contains a nested schema, described in
// the `columns` property of this `Column`.
string type = 2;
// The mode of the column, indicating if it is nullable, required, or
// repeated.
//
// Possible values:
//
// * `NULLABLE`: The column allows NULL values.
// * `REQUIRED`: The column does not allow NULL values.
// * `REPEATED`: The column contains an array of values.
string mode = 3;
// If the `type` of this column is `RECORD`, this sub-field describes the
// nested structure.
repeated Column columns = 4;
}
// Represents metadata related to the creation of a Report. This value is
// embedded in the Operation object returned by `CreateReport`.
message OperationMetadata {}