1*d5c09012SAndroid Build Coastguard Worker// Copyright 2022 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.recommender.v1beta1; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/struct.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 23*d5c09012SAndroid Build Coastguard Workerimport "google/type/money.proto"; 24*d5c09012SAndroid Build Coastguard Worker 25*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Recommender.V1Beta1"; 26*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/recommender/apiv1beta1/recommenderpb;recommenderpb"; 27*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 28*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.recommender.v1beta1"; 29*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "CREC"; 30*d5c09012SAndroid Build Coastguard Worker 31*d5c09012SAndroid Build Coastguard Worker// A recommendation along with a suggested action. E.g., a rightsizing 32*d5c09012SAndroid Build Coastguard Worker// recommendation for an underutilized VM, IAM role recommendations, etc 33*d5c09012SAndroid Build Coastguard Workermessage Recommendation { 34*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 35*d5c09012SAndroid Build Coastguard Worker type: "recommender.googleapis.com/Recommendation" 36*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}" 37*d5c09012SAndroid Build Coastguard Worker pattern: "billingAccounts/{billing_account}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}" 38*d5c09012SAndroid Build Coastguard Worker pattern: "folders/{folder}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}" 39*d5c09012SAndroid Build Coastguard Worker pattern: "organizations/{organization}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}" 40*d5c09012SAndroid Build Coastguard Worker }; 41*d5c09012SAndroid Build Coastguard Worker 42*d5c09012SAndroid Build Coastguard Worker // Recommendation priority levels. 43*d5c09012SAndroid Build Coastguard Worker enum Priority { 44*d5c09012SAndroid Build Coastguard Worker // Recommendation has unspecified priority. 45*d5c09012SAndroid Build Coastguard Worker PRIORITY_UNSPECIFIED = 0; 46*d5c09012SAndroid Build Coastguard Worker 47*d5c09012SAndroid Build Coastguard Worker // Recommendation has P4 priority (lowest priority). 48*d5c09012SAndroid Build Coastguard Worker P4 = 1; 49*d5c09012SAndroid Build Coastguard Worker 50*d5c09012SAndroid Build Coastguard Worker // Recommendation has P3 priority (second lowest priority). 51*d5c09012SAndroid Build Coastguard Worker P3 = 2; 52*d5c09012SAndroid Build Coastguard Worker 53*d5c09012SAndroid Build Coastguard Worker // Recommendation has P2 priority (second highest priority). 54*d5c09012SAndroid Build Coastguard Worker P2 = 3; 55*d5c09012SAndroid Build Coastguard Worker 56*d5c09012SAndroid Build Coastguard Worker // Recommendation has P1 priority (highest priority). 57*d5c09012SAndroid Build Coastguard Worker P1 = 4; 58*d5c09012SAndroid Build Coastguard Worker } 59*d5c09012SAndroid Build Coastguard Worker 60*d5c09012SAndroid Build Coastguard Worker // Reference to an associated insight. 61*d5c09012SAndroid Build Coastguard Worker message InsightReference { 62*d5c09012SAndroid Build Coastguard Worker // Insight resource name, e.g. 63*d5c09012SAndroid Build Coastguard Worker // projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID] 64*d5c09012SAndroid Build Coastguard Worker string insight = 1; 65*d5c09012SAndroid Build Coastguard Worker } 66*d5c09012SAndroid Build Coastguard Worker 67*d5c09012SAndroid Build Coastguard Worker // Name of recommendation. 68*d5c09012SAndroid Build Coastguard Worker string name = 1; 69*d5c09012SAndroid Build Coastguard Worker 70*d5c09012SAndroid Build Coastguard Worker // Free-form human readable summary in English. The maximum length is 500 71*d5c09012SAndroid Build Coastguard Worker // characters. 72*d5c09012SAndroid Build Coastguard Worker string description = 2; 73*d5c09012SAndroid Build Coastguard Worker 74*d5c09012SAndroid Build Coastguard Worker // Contains an identifier for a subtype of recommendations produced for the 75*d5c09012SAndroid Build Coastguard Worker // same recommender. Subtype is a function of content and impact, meaning a 76*d5c09012SAndroid Build Coastguard Worker // new subtype might be added when significant changes to `content` or 77*d5c09012SAndroid Build Coastguard Worker // `primary_impact.category` are introduced. See the Recommenders section 78*d5c09012SAndroid Build Coastguard Worker // to see a list of subtypes for a given Recommender. 79*d5c09012SAndroid Build Coastguard Worker // 80*d5c09012SAndroid Build Coastguard Worker // Examples: 81*d5c09012SAndroid Build Coastguard Worker // For recommender = "google.iam.policy.Recommender", 82*d5c09012SAndroid Build Coastguard Worker // recommender_subtype can be one of "REMOVE_ROLE"/"REPLACE_ROLE" 83*d5c09012SAndroid Build Coastguard Worker string recommender_subtype = 12; 84*d5c09012SAndroid Build Coastguard Worker 85*d5c09012SAndroid Build Coastguard Worker // Last time this recommendation was refreshed by the system that created it 86*d5c09012SAndroid Build Coastguard Worker // in the first place. 87*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp last_refresh_time = 4; 88*d5c09012SAndroid Build Coastguard Worker 89*d5c09012SAndroid Build Coastguard Worker // The primary impact that this recommendation can have while trying to 90*d5c09012SAndroid Build Coastguard Worker // optimize for one category. 91*d5c09012SAndroid Build Coastguard Worker Impact primary_impact = 5; 92*d5c09012SAndroid Build Coastguard Worker 93*d5c09012SAndroid Build Coastguard Worker // Optional set of additional impact that this recommendation may have when 94*d5c09012SAndroid Build Coastguard Worker // trying to optimize for the primary category. These may be positive 95*d5c09012SAndroid Build Coastguard Worker // or negative. 96*d5c09012SAndroid Build Coastguard Worker repeated Impact additional_impact = 6; 97*d5c09012SAndroid Build Coastguard Worker 98*d5c09012SAndroid Build Coastguard Worker // Recommendation's priority. 99*d5c09012SAndroid Build Coastguard Worker Priority priority = 17; 100*d5c09012SAndroid Build Coastguard Worker 101*d5c09012SAndroid Build Coastguard Worker // Content of the recommendation describing recommended changes to resources. 102*d5c09012SAndroid Build Coastguard Worker RecommendationContent content = 7; 103*d5c09012SAndroid Build Coastguard Worker 104*d5c09012SAndroid Build Coastguard Worker // Information for state. Contains state and metadata. 105*d5c09012SAndroid Build Coastguard Worker RecommendationStateInfo state_info = 10; 106*d5c09012SAndroid Build Coastguard Worker 107*d5c09012SAndroid Build Coastguard Worker // Fingerprint of the Recommendation. Provides optimistic locking when 108*d5c09012SAndroid Build Coastguard Worker // updating states. 109*d5c09012SAndroid Build Coastguard Worker string etag = 11; 110*d5c09012SAndroid Build Coastguard Worker 111*d5c09012SAndroid Build Coastguard Worker // Insights that led to this recommendation. 112*d5c09012SAndroid Build Coastguard Worker repeated InsightReference associated_insights = 14; 113*d5c09012SAndroid Build Coastguard Worker 114*d5c09012SAndroid Build Coastguard Worker // Corresponds to a mutually exclusive group ID within a recommender. 115*d5c09012SAndroid Build Coastguard Worker // A non-empty ID indicates that the recommendation belongs to a mutually 116*d5c09012SAndroid Build Coastguard Worker // exclusive group. This means that only one recommendation within the group 117*d5c09012SAndroid Build Coastguard Worker // is suggested to be applied. 118*d5c09012SAndroid Build Coastguard Worker string xor_group_id = 18; 119*d5c09012SAndroid Build Coastguard Worker} 120*d5c09012SAndroid Build Coastguard Worker 121*d5c09012SAndroid Build Coastguard Worker// Contains what resources are changing and how they are changing. 122*d5c09012SAndroid Build Coastguard Workermessage RecommendationContent { 123*d5c09012SAndroid Build Coastguard Worker // Operations to one or more Google Cloud resources grouped in such a way 124*d5c09012SAndroid Build Coastguard Worker // that, all operations within one group are expected to be performed 125*d5c09012SAndroid Build Coastguard Worker // atomically and in an order. 126*d5c09012SAndroid Build Coastguard Worker repeated OperationGroup operation_groups = 2; 127*d5c09012SAndroid Build Coastguard Worker 128*d5c09012SAndroid Build Coastguard Worker // Condensed overview information about the recommendation. 129*d5c09012SAndroid Build Coastguard Worker google.protobuf.Struct overview = 3; 130*d5c09012SAndroid Build Coastguard Worker} 131*d5c09012SAndroid Build Coastguard Worker 132*d5c09012SAndroid Build Coastguard Worker// Group of operations that need to be performed atomically. 133*d5c09012SAndroid Build Coastguard Workermessage OperationGroup { 134*d5c09012SAndroid Build Coastguard Worker // List of operations across one or more resources that belong to this group. 135*d5c09012SAndroid Build Coastguard Worker // Loosely based on RFC6902 and should be performed in the order they appear. 136*d5c09012SAndroid Build Coastguard Worker repeated Operation operations = 1; 137*d5c09012SAndroid Build Coastguard Worker} 138*d5c09012SAndroid Build Coastguard Worker 139*d5c09012SAndroid Build Coastguard Worker// Contains an operation for a resource loosely based on the JSON-PATCH format 140*d5c09012SAndroid Build Coastguard Worker// with support for: 141*d5c09012SAndroid Build Coastguard Worker// 142*d5c09012SAndroid Build Coastguard Worker// * Custom filters for describing partial array patch. 143*d5c09012SAndroid Build Coastguard Worker// * Extended path values for describing nested arrays. 144*d5c09012SAndroid Build Coastguard Worker// * Custom fields for describing the resource for which the operation is being 145*d5c09012SAndroid Build Coastguard Worker// described. 146*d5c09012SAndroid Build Coastguard Worker// * Allows extension to custom operations not natively supported by RFC6902. 147*d5c09012SAndroid Build Coastguard Worker// See https://tools.ietf.org/html/rfc6902 for details on the original RFC. 148*d5c09012SAndroid Build Coastguard Workermessage Operation { 149*d5c09012SAndroid Build Coastguard Worker // Type of this operation. Contains one of 'add', 'remove', 'replace', 'move', 150*d5c09012SAndroid Build Coastguard Worker // 'copy', 'test' and 'custom' operations. This field is case-insensitive and 151*d5c09012SAndroid Build Coastguard Worker // always populated. 152*d5c09012SAndroid Build Coastguard Worker string action = 1; 153*d5c09012SAndroid Build Coastguard Worker 154*d5c09012SAndroid Build Coastguard Worker // Type of GCP resource being modified/tested. This field is always populated. 155*d5c09012SAndroid Build Coastguard Worker // Example: cloudresourcemanager.googleapis.com/Project, 156*d5c09012SAndroid Build Coastguard Worker // compute.googleapis.com/Instance 157*d5c09012SAndroid Build Coastguard Worker string resource_type = 2; 158*d5c09012SAndroid Build Coastguard Worker 159*d5c09012SAndroid Build Coastguard Worker // Contains the fully qualified resource name. This field is always populated. 160*d5c09012SAndroid Build Coastguard Worker // ex: //cloudresourcemanager.googleapis.com/projects/foo. 161*d5c09012SAndroid Build Coastguard Worker string resource = 3; 162*d5c09012SAndroid Build Coastguard Worker 163*d5c09012SAndroid Build Coastguard Worker // Path to the target field being operated on. If the operation is at the 164*d5c09012SAndroid Build Coastguard Worker // resource level, then path should be "/". This field is always populated. 165*d5c09012SAndroid Build Coastguard Worker string path = 4; 166*d5c09012SAndroid Build Coastguard Worker 167*d5c09012SAndroid Build Coastguard Worker // Can be set with action 'copy' to copy resource configuration across 168*d5c09012SAndroid Build Coastguard Worker // different resources of the same type. Example: A resource clone can be 169*d5c09012SAndroid Build Coastguard Worker // done via action = 'copy', path = "/", from = "/", 170*d5c09012SAndroid Build Coastguard Worker // source_resource = <source> and resource_name = <target>. 171*d5c09012SAndroid Build Coastguard Worker // This field is empty for all other values of `action`. 172*d5c09012SAndroid Build Coastguard Worker string source_resource = 5; 173*d5c09012SAndroid Build Coastguard Worker 174*d5c09012SAndroid Build Coastguard Worker // Can be set with action 'copy' or 'move' to indicate the source field within 175*d5c09012SAndroid Build Coastguard Worker // resource or source_resource, ignored if provided for other operation types. 176*d5c09012SAndroid Build Coastguard Worker string source_path = 6; 177*d5c09012SAndroid Build Coastguard Worker 178*d5c09012SAndroid Build Coastguard Worker // One of the fields in the following block will be set and intend to 179*d5c09012SAndroid Build Coastguard Worker // describe a value for 'path' field. 180*d5c09012SAndroid Build Coastguard Worker oneof path_value { 181*d5c09012SAndroid Build Coastguard Worker // Value for the `path` field. Will be set for actions:'add'/'replace'. 182*d5c09012SAndroid Build Coastguard Worker // Maybe set for action: 'test'. Either this or `value_matcher` will be set 183*d5c09012SAndroid Build Coastguard Worker // for 'test' operation. An exact match must be performed. 184*d5c09012SAndroid Build Coastguard Worker google.protobuf.Value value = 7; 185*d5c09012SAndroid Build Coastguard Worker 186*d5c09012SAndroid Build Coastguard Worker // Can be set for action 'test' for advanced matching for the value of 187*d5c09012SAndroid Build Coastguard Worker // 'path' field. Either this or `value` will be set for 'test' operation. 188*d5c09012SAndroid Build Coastguard Worker ValueMatcher value_matcher = 10; 189*d5c09012SAndroid Build Coastguard Worker } 190*d5c09012SAndroid Build Coastguard Worker 191*d5c09012SAndroid Build Coastguard Worker // Set of filters to apply if `path` refers to array elements or nested array 192*d5c09012SAndroid Build Coastguard Worker // elements in order to narrow down to a single unique element that is being 193*d5c09012SAndroid Build Coastguard Worker // tested/modified. 194*d5c09012SAndroid Build Coastguard Worker // This is intended to be an exact match per filter. To perform advanced 195*d5c09012SAndroid Build Coastguard Worker // matching, use path_value_matchers. 196*d5c09012SAndroid Build Coastguard Worker // 197*d5c09012SAndroid Build Coastguard Worker // * Example: 198*d5c09012SAndroid Build Coastguard Worker // ``` 199*d5c09012SAndroid Build Coastguard Worker // { 200*d5c09012SAndroid Build Coastguard Worker // "/versions/*/name" : "it-123" 201*d5c09012SAndroid Build Coastguard Worker // "/versions/*/targetSize/percent": 20 202*d5c09012SAndroid Build Coastguard Worker // } 203*d5c09012SAndroid Build Coastguard Worker // ``` 204*d5c09012SAndroid Build Coastguard Worker // * Example: 205*d5c09012SAndroid Build Coastguard Worker // ``` 206*d5c09012SAndroid Build Coastguard Worker // { 207*d5c09012SAndroid Build Coastguard Worker // "/bindings/*/role": "roles/owner" 208*d5c09012SAndroid Build Coastguard Worker // "/bindings/*/condition" : null 209*d5c09012SAndroid Build Coastguard Worker // } 210*d5c09012SAndroid Build Coastguard Worker // ``` 211*d5c09012SAndroid Build Coastguard Worker // * Example: 212*d5c09012SAndroid Build Coastguard Worker // ``` 213*d5c09012SAndroid Build Coastguard Worker // { 214*d5c09012SAndroid Build Coastguard Worker // "/bindings/*/role": "roles/owner" 215*d5c09012SAndroid Build Coastguard Worker // "/bindings/*/members/*" : ["[email protected]", "[email protected]"] 216*d5c09012SAndroid Build Coastguard Worker // } 217*d5c09012SAndroid Build Coastguard Worker // ``` 218*d5c09012SAndroid Build Coastguard Worker // When both path_filters and path_value_matchers are set, an implicit AND 219*d5c09012SAndroid Build Coastguard Worker // must be performed. 220*d5c09012SAndroid Build Coastguard Worker map<string, google.protobuf.Value> path_filters = 8; 221*d5c09012SAndroid Build Coastguard Worker 222*d5c09012SAndroid Build Coastguard Worker // Similar to path_filters, this contains set of filters to apply if `path` 223*d5c09012SAndroid Build Coastguard Worker // field refers to array elements. This is meant to support value matching 224*d5c09012SAndroid Build Coastguard Worker // beyond exact match. To perform exact match, use path_filters. 225*d5c09012SAndroid Build Coastguard Worker // When both path_filters and path_value_matchers are set, an implicit AND 226*d5c09012SAndroid Build Coastguard Worker // must be performed. 227*d5c09012SAndroid Build Coastguard Worker map<string, ValueMatcher> path_value_matchers = 11; 228*d5c09012SAndroid Build Coastguard Worker} 229*d5c09012SAndroid Build Coastguard Worker 230*d5c09012SAndroid Build Coastguard Worker// Contains various matching options for values for a GCP resource field. 231*d5c09012SAndroid Build Coastguard Workermessage ValueMatcher { 232*d5c09012SAndroid Build Coastguard Worker oneof match_variant { 233*d5c09012SAndroid Build Coastguard Worker // To be used for full regex matching. The regular expression is using the 234*d5c09012SAndroid Build Coastguard Worker // Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be 235*d5c09012SAndroid Build Coastguard Worker // used with RE2::FullMatch 236*d5c09012SAndroid Build Coastguard Worker string matches_pattern = 1; 237*d5c09012SAndroid Build Coastguard Worker } 238*d5c09012SAndroid Build Coastguard Worker} 239*d5c09012SAndroid Build Coastguard Worker 240*d5c09012SAndroid Build Coastguard Worker// Contains metadata about how much money a recommendation can save or incur. 241*d5c09012SAndroid Build Coastguard Workermessage CostProjection { 242*d5c09012SAndroid Build Coastguard Worker // An approximate projection on amount saved or amount incurred. Negative cost 243*d5c09012SAndroid Build Coastguard Worker // units indicate cost savings and positive cost units indicate increase. 244*d5c09012SAndroid Build Coastguard Worker // See google.type.Money documentation for positive/negative units. 245*d5c09012SAndroid Build Coastguard Worker // 246*d5c09012SAndroid Build Coastguard Worker // A user's permissions may affect whether the cost is computed using list 247*d5c09012SAndroid Build Coastguard Worker // prices or custom contract prices. 248*d5c09012SAndroid Build Coastguard Worker google.type.Money cost = 1; 249*d5c09012SAndroid Build Coastguard Worker 250*d5c09012SAndroid Build Coastguard Worker // Duration for which this cost applies. 251*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration duration = 2; 252*d5c09012SAndroid Build Coastguard Worker} 253*d5c09012SAndroid Build Coastguard Worker 254*d5c09012SAndroid Build Coastguard Worker// Contains various ways of describing the impact on Security. 255*d5c09012SAndroid Build Coastguard Workermessage SecurityProjection { 256*d5c09012SAndroid Build Coastguard Worker // This field can be used by the recommender to define details specific to 257*d5c09012SAndroid Build Coastguard Worker // security impact. 258*d5c09012SAndroid Build Coastguard Worker google.protobuf.Struct details = 2; 259*d5c09012SAndroid Build Coastguard Worker} 260*d5c09012SAndroid Build Coastguard Worker 261*d5c09012SAndroid Build Coastguard Worker// Contains metadata about how much sustainability a recommendation can save or 262*d5c09012SAndroid Build Coastguard Worker// incur. 263*d5c09012SAndroid Build Coastguard Workermessage SustainabilityProjection { 264*d5c09012SAndroid Build Coastguard Worker // Carbon Footprint generated in kg of CO2 equivalent. 265*d5c09012SAndroid Build Coastguard Worker // Chose kg_c_o2e so that the name renders correctly in camelCase (kgCO2e). 266*d5c09012SAndroid Build Coastguard Worker double kg_c_o2e = 1; 267*d5c09012SAndroid Build Coastguard Worker 268*d5c09012SAndroid Build Coastguard Worker // Duration for which this sustanability applies. 269*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration duration = 2; 270*d5c09012SAndroid Build Coastguard Worker} 271*d5c09012SAndroid Build Coastguard Worker 272*d5c09012SAndroid Build Coastguard Worker// Contains the impact a recommendation can have for a given category. 273*d5c09012SAndroid Build Coastguard Workermessage Impact { 274*d5c09012SAndroid Build Coastguard Worker // The category of the impact. 275*d5c09012SAndroid Build Coastguard Worker enum Category { 276*d5c09012SAndroid Build Coastguard Worker // Default unspecified category. Don't use directly. 277*d5c09012SAndroid Build Coastguard Worker CATEGORY_UNSPECIFIED = 0; 278*d5c09012SAndroid Build Coastguard Worker 279*d5c09012SAndroid Build Coastguard Worker // Indicates a potential increase or decrease in cost. 280*d5c09012SAndroid Build Coastguard Worker COST = 1; 281*d5c09012SAndroid Build Coastguard Worker 282*d5c09012SAndroid Build Coastguard Worker // Indicates a potential increase or decrease in security. 283*d5c09012SAndroid Build Coastguard Worker SECURITY = 2; 284*d5c09012SAndroid Build Coastguard Worker 285*d5c09012SAndroid Build Coastguard Worker // Indicates a potential increase or decrease in performance. 286*d5c09012SAndroid Build Coastguard Worker PERFORMANCE = 3; 287*d5c09012SAndroid Build Coastguard Worker 288*d5c09012SAndroid Build Coastguard Worker // Indicates a potential increase or decrease in manageability. 289*d5c09012SAndroid Build Coastguard Worker MANAGEABILITY = 4; 290*d5c09012SAndroid Build Coastguard Worker 291*d5c09012SAndroid Build Coastguard Worker // Indicates a potential increase or decrease in sustainability. 292*d5c09012SAndroid Build Coastguard Worker SUSTAINABILITY = 5; 293*d5c09012SAndroid Build Coastguard Worker } 294*d5c09012SAndroid Build Coastguard Worker 295*d5c09012SAndroid Build Coastguard Worker // Category that is being targeted. 296*d5c09012SAndroid Build Coastguard Worker Category category = 1; 297*d5c09012SAndroid Build Coastguard Worker 298*d5c09012SAndroid Build Coastguard Worker // Contains projections (if any) for this category. 299*d5c09012SAndroid Build Coastguard Worker oneof projection { 300*d5c09012SAndroid Build Coastguard Worker // Use with CategoryType.COST 301*d5c09012SAndroid Build Coastguard Worker CostProjection cost_projection = 100; 302*d5c09012SAndroid Build Coastguard Worker 303*d5c09012SAndroid Build Coastguard Worker // Use with CategoryType.SECURITY 304*d5c09012SAndroid Build Coastguard Worker SecurityProjection security_projection = 101; 305*d5c09012SAndroid Build Coastguard Worker 306*d5c09012SAndroid Build Coastguard Worker // Use with CategoryType.SUSTAINABILITY 307*d5c09012SAndroid Build Coastguard Worker SustainabilityProjection sustainability_projection = 102; 308*d5c09012SAndroid Build Coastguard Worker } 309*d5c09012SAndroid Build Coastguard Worker} 310*d5c09012SAndroid Build Coastguard Worker 311*d5c09012SAndroid Build Coastguard Worker// Information for state. Contains state and metadata. 312*d5c09012SAndroid Build Coastguard Workermessage RecommendationStateInfo { 313*d5c09012SAndroid Build Coastguard Worker // Represents Recommendation State. 314*d5c09012SAndroid Build Coastguard Worker enum State { 315*d5c09012SAndroid Build Coastguard Worker // Default state. Don't use directly. 316*d5c09012SAndroid Build Coastguard Worker STATE_UNSPECIFIED = 0; 317*d5c09012SAndroid Build Coastguard Worker 318*d5c09012SAndroid Build Coastguard Worker // Recommendation is active and can be applied. Recommendations content can 319*d5c09012SAndroid Build Coastguard Worker // be updated by Google. 320*d5c09012SAndroid Build Coastguard Worker // 321*d5c09012SAndroid Build Coastguard Worker // ACTIVE recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED. 322*d5c09012SAndroid Build Coastguard Worker ACTIVE = 1; 323*d5c09012SAndroid Build Coastguard Worker 324*d5c09012SAndroid Build Coastguard Worker // Recommendation is in claimed state. Recommendations content is 325*d5c09012SAndroid Build Coastguard Worker // immutable and cannot be updated by Google. 326*d5c09012SAndroid Build Coastguard Worker // 327*d5c09012SAndroid Build Coastguard Worker // CLAIMED recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED. 328*d5c09012SAndroid Build Coastguard Worker CLAIMED = 6; 329*d5c09012SAndroid Build Coastguard Worker 330*d5c09012SAndroid Build Coastguard Worker // Recommendation is in succeeded state. Recommendations content is 331*d5c09012SAndroid Build Coastguard Worker // immutable and cannot be updated by Google. 332*d5c09012SAndroid Build Coastguard Worker // 333*d5c09012SAndroid Build Coastguard Worker // SUCCEEDED recommendations can be marked as SUCCEEDED, or FAILED. 334*d5c09012SAndroid Build Coastguard Worker SUCCEEDED = 3; 335*d5c09012SAndroid Build Coastguard Worker 336*d5c09012SAndroid Build Coastguard Worker // Recommendation is in failed state. Recommendations content is immutable 337*d5c09012SAndroid Build Coastguard Worker // and cannot be updated by Google. 338*d5c09012SAndroid Build Coastguard Worker // 339*d5c09012SAndroid Build Coastguard Worker // FAILED recommendations can be marked as SUCCEEDED, or FAILED. 340*d5c09012SAndroid Build Coastguard Worker FAILED = 4; 341*d5c09012SAndroid Build Coastguard Worker 342*d5c09012SAndroid Build Coastguard Worker // Recommendation is in dismissed state. Recommendation content can be 343*d5c09012SAndroid Build Coastguard Worker // updated by Google. 344*d5c09012SAndroid Build Coastguard Worker // 345*d5c09012SAndroid Build Coastguard Worker // DISMISSED recommendations can be marked as ACTIVE. 346*d5c09012SAndroid Build Coastguard Worker DISMISSED = 5; 347*d5c09012SAndroid Build Coastguard Worker } 348*d5c09012SAndroid Build Coastguard Worker 349*d5c09012SAndroid Build Coastguard Worker // The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED. 350*d5c09012SAndroid Build Coastguard Worker State state = 1; 351*d5c09012SAndroid Build Coastguard Worker 352*d5c09012SAndroid Build Coastguard Worker // A map of metadata for the state, provided by user or automations systems. 353*d5c09012SAndroid Build Coastguard Worker map<string, string> state_metadata = 2; 354*d5c09012SAndroid Build Coastguard Worker} 355*d5c09012SAndroid Build Coastguard Worker 356*d5c09012SAndroid Build Coastguard Worker// The type of a recommender. 357*d5c09012SAndroid Build Coastguard Workermessage RecommenderType { 358*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 359*d5c09012SAndroid Build Coastguard Worker type: "recommender.googleapis.com/Recommender" 360*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/locations/{location}/recommenders/{recommender}" 361*d5c09012SAndroid Build Coastguard Worker pattern: "billingAccounts/{billing_account}/locations/{location}/recommenders/{recommender}" 362*d5c09012SAndroid Build Coastguard Worker pattern: "folders/{folder}/locations/{location}/recommenders/{recommender}" 363*d5c09012SAndroid Build Coastguard Worker pattern: "organizations/{organization}/locations/{location}/recommenders/{recommender}" 364*d5c09012SAndroid Build Coastguard Worker pattern: "recommenders/{recommender}" 365*d5c09012SAndroid Build Coastguard Worker }; 366*d5c09012SAndroid Build Coastguard Worker 367*d5c09012SAndroid Build Coastguard Worker // The recommender's name in format RecommenderTypes/{recommender_type} 368*d5c09012SAndroid Build Coastguard Worker // eg: recommenderTypes/google.iam.policy.Recommender 369*d5c09012SAndroid Build Coastguard Worker string name = 1; 370*d5c09012SAndroid Build Coastguard Worker} 371