1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.recommender.v1; 18 19import "google/api/annotations.proto"; 20import "google/api/client.proto"; 21import "google/api/field_behavior.proto"; 22import "google/api/resource.proto"; 23import "google/cloud/recommender/v1/insight.proto"; 24import "google/cloud/recommender/v1/insight_type_config.proto"; 25import "google/cloud/recommender/v1/recommendation.proto"; 26import "google/cloud/recommender/v1/recommender_config.proto"; 27import "google/protobuf/field_mask.proto"; 28 29option csharp_namespace = "Google.Cloud.Recommender.V1"; 30option go_package = "cloud.google.com/go/recommender/apiv1/recommenderpb;recommenderpb"; 31option java_multiple_files = true; 32option java_outer_classname = "RecommenderProto"; 33option java_package = "com.google.cloud.recommender.v1"; 34option objc_class_prefix = "CREC"; 35 36// Provides insights and recommendations for cloud customers for various 37// categories like performance optimization, cost savings, reliability, feature 38// discovery, etc. Insights and recommendations are generated automatically 39// based on analysis of user resources, configuration and monitoring metrics. 40service Recommender { 41 option (google.api.default_host) = "recommender.googleapis.com"; 42 option (google.api.oauth_scopes) = 43 "https://www.googleapis.com/auth/cloud-platform"; 44 45 // Lists insights for the specified Cloud Resource. Requires the 46 // recommender.*.list IAM permission for the specified insight type. 47 rpc ListInsights(ListInsightsRequest) returns (ListInsightsResponse) { 48 option (google.api.http) = { 49 get: "/v1/{parent=projects/*/locations/*/insightTypes/*}/insights" 50 additional_bindings { 51 get: "/v1/{parent=billingAccounts/*/locations/*/insightTypes/*}/insights" 52 } 53 additional_bindings { 54 get: "/v1/{parent=folders/*/locations/*/insightTypes/*}/insights" 55 } 56 additional_bindings { 57 get: "/v1/{parent=organizations/*/locations/*/insightTypes/*}/insights" 58 } 59 }; 60 option (google.api.method_signature) = "parent"; 61 } 62 63 // Gets the requested insight. Requires the recommender.*.get IAM permission 64 // for the specified insight type. 65 rpc GetInsight(GetInsightRequest) returns (Insight) { 66 option (google.api.http) = { 67 get: "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}" 68 additional_bindings { 69 get: "/v1/{name=billingAccounts/*/locations/*/insightTypes/*/insights/*}" 70 } 71 additional_bindings { 72 get: "/v1/{name=folders/*/locations/*/insightTypes/*/insights/*}" 73 } 74 additional_bindings { 75 get: "/v1/{name=organizations/*/locations/*/insightTypes/*/insights/*}" 76 } 77 }; 78 option (google.api.method_signature) = "name"; 79 } 80 81 // Marks the Insight State as Accepted. Users can use this method to 82 // indicate to the Recommender API that they have applied some action based 83 // on the insight. This stops the insight content from being updated. 84 // 85 // MarkInsightAccepted can be applied to insights in ACTIVE state. Requires 86 // the recommender.*.update IAM permission for the specified insight. 87 rpc MarkInsightAccepted(MarkInsightAcceptedRequest) returns (Insight) { 88 option (google.api.http) = { 89 post: "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}:markAccepted" 90 body: "*" 91 additional_bindings { 92 post: "/v1/{name=billingAccounts/*/locations/*/insightTypes/*/insights/*}:markAccepted" 93 body: "*" 94 } 95 additional_bindings { 96 post: "/v1/{name=folders/*/locations/*/insightTypes/*/insights/*}:markAccepted" 97 body: "*" 98 } 99 additional_bindings { 100 post: "/v1/{name=organizations/*/locations/*/insightTypes/*/insights/*}:markAccepted" 101 body: "*" 102 } 103 }; 104 option (google.api.method_signature) = "name,state_metadata,etag"; 105 } 106 107 // Lists recommendations for the specified Cloud Resource. Requires the 108 // recommender.*.list IAM permission for the specified recommender. 109 rpc ListRecommendations(ListRecommendationsRequest) 110 returns (ListRecommendationsResponse) { 111 option (google.api.http) = { 112 get: "/v1/{parent=projects/*/locations/*/recommenders/*}/recommendations" 113 additional_bindings { 114 get: "/v1/{parent=billingAccounts/*/locations/*/recommenders/*}/recommendations" 115 } 116 additional_bindings { 117 get: "/v1/{parent=folders/*/locations/*/recommenders/*}/recommendations" 118 } 119 additional_bindings { 120 get: "/v1/{parent=organizations/*/locations/*/recommenders/*}/recommendations" 121 } 122 }; 123 option (google.api.method_signature) = "parent"; 124 option (google.api.method_signature) = "parent,filter"; 125 } 126 127 // Gets the requested recommendation. Requires the recommender.*.get 128 // IAM permission for the specified recommender. 129 rpc GetRecommendation(GetRecommendationRequest) returns (Recommendation) { 130 option (google.api.http) = { 131 get: "/v1/{name=projects/*/locations/*/recommenders/*/recommendations/*}" 132 additional_bindings { 133 get: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}" 134 } 135 additional_bindings { 136 get: "/v1/{name=folders/*/locations/*/recommenders/*/recommendations/*}" 137 } 138 additional_bindings { 139 get: "/v1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}" 140 } 141 }; 142 option (google.api.method_signature) = "name"; 143 } 144 145 // Mark the Recommendation State as Dismissed. Users can use this method to 146 // indicate to the Recommender API that an ACTIVE recommendation has to 147 // be marked back as DISMISSED. 148 // 149 // MarkRecommendationDismissed can be applied to recommendations in ACTIVE 150 // state. 151 // 152 // Requires the recommender.*.update IAM permission for the specified 153 // recommender. 154 rpc MarkRecommendationDismissed(MarkRecommendationDismissedRequest) 155 returns (Recommendation) { 156 option (google.api.http) = { 157 post: "/v1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markDismissed" 158 body: "*" 159 additional_bindings { 160 post: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markDismissed" 161 body: "*" 162 } 163 additional_bindings { 164 post: "/v1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markDismissed" 165 body: "*" 166 } 167 additional_bindings { 168 post: "/v1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markDismissed" 169 body: "*" 170 } 171 }; 172 } 173 174 // Marks the Recommendation State as Claimed. Users can use this method to 175 // indicate to the Recommender API that they are starting to apply the 176 // recommendation themselves. This stops the recommendation content from being 177 // updated. Associated insights are frozen and placed in the ACCEPTED state. 178 // 179 // MarkRecommendationClaimed can be applied to recommendations in CLAIMED, 180 // SUCCEEDED, FAILED, or ACTIVE state. 181 // 182 // Requires the recommender.*.update IAM permission for the specified 183 // recommender. 184 rpc MarkRecommendationClaimed(MarkRecommendationClaimedRequest) 185 returns (Recommendation) { 186 option (google.api.http) = { 187 post: "/v1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markClaimed" 188 body: "*" 189 additional_bindings { 190 post: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markClaimed" 191 body: "*" 192 } 193 additional_bindings { 194 post: "/v1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markClaimed" 195 body: "*" 196 } 197 additional_bindings { 198 post: "/v1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markClaimed" 199 body: "*" 200 } 201 }; 202 option (google.api.method_signature) = "name,state_metadata,etag"; 203 } 204 205 // Marks the Recommendation State as Succeeded. Users can use this method to 206 // indicate to the Recommender API that they have applied the recommendation 207 // themselves, and the operation was successful. This stops the recommendation 208 // content from being updated. Associated insights are frozen and placed in 209 // the ACCEPTED state. 210 // 211 // MarkRecommendationSucceeded can be applied to recommendations in ACTIVE, 212 // CLAIMED, SUCCEEDED, or FAILED state. 213 // 214 // Requires the recommender.*.update IAM permission for the specified 215 // recommender. 216 rpc MarkRecommendationSucceeded(MarkRecommendationSucceededRequest) 217 returns (Recommendation) { 218 option (google.api.http) = { 219 post: "/v1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markSucceeded" 220 body: "*" 221 additional_bindings { 222 post: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markSucceeded" 223 body: "*" 224 } 225 additional_bindings { 226 post: "/v1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markSucceeded" 227 body: "*" 228 } 229 additional_bindings { 230 post: "/v1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markSucceeded" 231 body: "*" 232 } 233 }; 234 option (google.api.method_signature) = "name,state_metadata,etag"; 235 } 236 237 // Marks the Recommendation State as Failed. Users can use this method to 238 // indicate to the Recommender API that they have applied the recommendation 239 // themselves, and the operation failed. This stops the recommendation content 240 // from being updated. Associated insights are frozen and placed in the 241 // ACCEPTED state. 242 // 243 // MarkRecommendationFailed can be applied to recommendations in ACTIVE, 244 // CLAIMED, SUCCEEDED, or FAILED state. 245 // 246 // Requires the recommender.*.update IAM permission for the specified 247 // recommender. 248 rpc MarkRecommendationFailed(MarkRecommendationFailedRequest) 249 returns (Recommendation) { 250 option (google.api.http) = { 251 post: "/v1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markFailed" 252 body: "*" 253 additional_bindings { 254 post: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markFailed" 255 body: "*" 256 } 257 additional_bindings { 258 post: "/v1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markFailed" 259 body: "*" 260 } 261 additional_bindings { 262 post: "/v1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markFailed" 263 body: "*" 264 } 265 }; 266 option (google.api.method_signature) = "name,state_metadata,etag"; 267 } 268 269 // Gets the requested Recommender Config. There is only one instance of the 270 // config for each Recommender. 271 rpc GetRecommenderConfig(GetRecommenderConfigRequest) 272 returns (RecommenderConfig) { 273 option (google.api.http) = { 274 get: "/v1/{name=projects/*/locations/*/recommenders/*/config}" 275 additional_bindings { 276 get: "/v1/{name=organizations/*/locations/*/recommenders/*/config}" 277 } 278 additional_bindings { 279 get: "/v1/{name=billingAccounts/*/locations/*/recommenders/*/config}" 280 } 281 }; 282 option (google.api.method_signature) = "name"; 283 } 284 285 // Updates a Recommender Config. This will create a new revision of the 286 // config. 287 rpc UpdateRecommenderConfig(UpdateRecommenderConfigRequest) 288 returns (RecommenderConfig) { 289 option (google.api.http) = { 290 patch: "/v1/{recommender_config.name=projects/*/locations/*/recommenders/*/config}" 291 body: "recommender_config" 292 additional_bindings { 293 patch: "/v1/{recommender_config.name=organizations/*/locations/*/recommenders/*/config}" 294 body: "recommender_config" 295 } 296 additional_bindings { 297 patch: "/v1/{recommender_config.name=billingAccounts/*/locations/*/recommenders/*/config}" 298 body: "recommender_config" 299 } 300 }; 301 option (google.api.method_signature) = "recommender_config,update_mask"; 302 } 303 304 // Gets the requested InsightTypeConfig. There is only one instance of the 305 // config for each InsightType. 306 rpc GetInsightTypeConfig(GetInsightTypeConfigRequest) 307 returns (InsightTypeConfig) { 308 option (google.api.http) = { 309 get: "/v1/{name=projects/*/locations/*/insightTypes/*/config}" 310 additional_bindings { 311 get: "/v1/{name=organizations/*/locations/*/insightTypes/*/config}" 312 } 313 additional_bindings { 314 get: "/v1/{name=billingAccounts/*/locations/*/insightTypes/*/config}" 315 } 316 }; 317 option (google.api.method_signature) = "name"; 318 } 319 320 // Updates an InsightTypeConfig change. This will create a new revision of the 321 // config. 322 rpc UpdateInsightTypeConfig(UpdateInsightTypeConfigRequest) 323 returns (InsightTypeConfig) { 324 option (google.api.http) = { 325 patch: "/v1/{insight_type_config.name=projects/*/locations/*/insightTypes/*/config}" 326 body: "insight_type_config" 327 additional_bindings { 328 patch: "/v1/{insight_type_config.name=organizations/*/locations/*/insightTypes/*/config}" 329 body: "insight_type_config" 330 } 331 additional_bindings { 332 patch: "/v1/{insight_type_config.name=billingAccounts/*/locations/*/insightTypes/*/config}" 333 body: "insight_type_config" 334 } 335 }; 336 option (google.api.method_signature) = "insight_type_config,update_mask"; 337 } 338} 339 340// Request for the `ListInsights` method. 341message ListInsightsRequest { 342 // Required. The container resource on which to execute the request. 343 // Acceptable formats: 344 // 345 // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]` 346 // 347 // * `projects/[PROJECT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]` 348 // 349 // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]` 350 // 351 // * `folders/[FOLDER_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]` 352 // 353 // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]` 354 // 355 // LOCATION here refers to GCP Locations: 356 // https://cloud.google.com/about/locations/ 357 // INSIGHT_TYPE_ID refers to supported insight types: 358 // https://cloud.google.com/recommender/docs/insights/insight-types. 359 string parent = 1 [ 360 (google.api.field_behavior) = REQUIRED, 361 (google.api.resource_reference) = { 362 type: "recommender.googleapis.com/InsightType" 363 } 364 ]; 365 366 // Optional. The maximum number of results to return from this request. 367 // Non-positive values are ignored. If not specified, the server will 368 // determine the number of results to return. 369 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 370 371 // Optional. If present, retrieves the next batch of results from the 372 // preceding call to this method. `page_token` must be the value of 373 // `next_page_token` from the previous response. The values of other method 374 // parameters must be identical to those in the previous call. 375 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 376 377 // Optional. Filter expression to restrict the insights returned. Supported 378 // filter fields: 379 // 380 // * `stateInfo.state` 381 // 382 // * `insightSubtype` 383 // 384 // * `severity` 385 // 386 // * `targetResources` 387 // 388 // Examples: 389 // 390 // * `stateInfo.state = ACTIVE OR stateInfo.state = DISMISSED` 391 // 392 // * `insightSubtype = PERMISSIONS_USAGE` 393 // 394 // * `severity = CRITICAL OR severity = HIGH` 395 // 396 // * `targetResources : 397 // //compute.googleapis.com/projects/1234/zones/us-central1-a/instances/instance-1` 398 // 399 // * `stateInfo.state = ACTIVE AND (severity = CRITICAL OR severity = HIGH)` 400 // 401 // The max allowed filter length is 500 characters. 402 // 403 // (These expressions are based on the filter language described at 404 // https://google.aip.dev/160) 405 string filter = 4 [(google.api.field_behavior) = OPTIONAL]; 406} 407 408// Response to the `ListInsights` method. 409message ListInsightsResponse { 410 // The set of insights for the `parent` resource. 411 repeated Insight insights = 1; 412 413 // A token that can be used to request the next page of results. This field is 414 // empty if there are no additional results. 415 string next_page_token = 2; 416} 417 418// Request to the `GetInsight` method. 419message GetInsightRequest { 420 // Required. Name of the insight. 421 string name = 1 [ 422 (google.api.field_behavior) = REQUIRED, 423 (google.api.resource_reference) = { 424 type: "recommender.googleapis.com/Insight" 425 } 426 ]; 427} 428 429// Request for the `MarkInsightAccepted` method. 430message MarkInsightAcceptedRequest { 431 // Required. Name of the insight. 432 string name = 1 [ 433 (google.api.field_behavior) = REQUIRED, 434 (google.api.resource_reference) = { 435 type: "recommender.googleapis.com/Insight" 436 } 437 ]; 438 439 // Optional. State properties user wish to include with this state. Full 440 // replace of the current state_metadata. 441 map<string, string> state_metadata = 2 442 [(google.api.field_behavior) = OPTIONAL]; 443 444 // Required. Fingerprint of the Insight. Provides optimistic locking. 445 string etag = 3 [(google.api.field_behavior) = REQUIRED]; 446} 447 448// Request for the `ListRecommendations` method. 449message ListRecommendationsRequest { 450 // Required. The container resource on which to execute the request. 451 // Acceptable formats: 452 // 453 // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]` 454 // 455 // * `projects/[PROJECT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]` 456 // 457 // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]` 458 // 459 // * `folders/[FOLDER_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]` 460 // 461 // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]` 462 // 463 // LOCATION here refers to GCP Locations: 464 // https://cloud.google.com/about/locations/ 465 // RECOMMENDER_ID refers to supported recommenders: 466 // https://cloud.google.com/recommender/docs/recommenders. 467 string parent = 1 [ 468 (google.api.field_behavior) = REQUIRED, 469 (google.api.resource_reference) = { 470 type: "recommender.googleapis.com/Recommender" 471 } 472 ]; 473 474 // Optional. The maximum number of results to return from this request. 475 // Non-positive values are ignored. If not specified, the server will 476 // determine the number of results to return. 477 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 478 479 // Optional. If present, retrieves the next batch of results from the 480 // preceding call to this method. `page_token` must be the value of 481 // `next_page_token` from the previous response. The values of other method 482 // parameters must be identical to those in the previous call. 483 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 484 485 // Filter expression to restrict the recommendations returned. Supported 486 // filter fields: 487 // 488 // * `state_info.state` 489 // 490 // * `recommenderSubtype` 491 // 492 // * `priority` 493 // 494 // * `targetResources` 495 // 496 // Examples: 497 // 498 // * `stateInfo.state = ACTIVE OR stateInfo.state = DISMISSED` 499 // 500 // * `recommenderSubtype = REMOVE_ROLE OR recommenderSubtype = REPLACE_ROLE` 501 // 502 // * `priority = P1 OR priority = P2` 503 // 504 // * `targetResources : 505 // //compute.googleapis.com/projects/1234/zones/us-central1-a/instances/instance-1` 506 // 507 // * `stateInfo.state = ACTIVE AND (priority = P1 OR priority = P2)` 508 // 509 // The max allowed filter length is 500 characters. 510 // 511 // (These expressions are based on the filter language described at 512 // https://google.aip.dev/160) 513 string filter = 5; 514} 515 516// Response to the `ListRecommendations` method. 517message ListRecommendationsResponse { 518 // The set of recommendations for the `parent` resource. 519 repeated Recommendation recommendations = 1; 520 521 // A token that can be used to request the next page of results. This field is 522 // empty if there are no additional results. 523 string next_page_token = 2; 524} 525 526// Request to the `GetRecommendation` method. 527message GetRecommendationRequest { 528 // Required. Name of the recommendation. 529 string name = 1 [ 530 (google.api.field_behavior) = REQUIRED, 531 (google.api.resource_reference) = { 532 type: "recommender.googleapis.com/Recommendation" 533 } 534 ]; 535} 536 537// Request for the `MarkRecommendationDismissed` Method. 538message MarkRecommendationDismissedRequest { 539 // Required. Name of the recommendation. 540 string name = 1 [ 541 (google.api.field_behavior) = REQUIRED, 542 (google.api.resource_reference) = { 543 type: "recommender.googleapis.com/Recommendation" 544 } 545 ]; 546 547 // Fingerprint of the Recommendation. Provides optimistic locking. 548 string etag = 2; 549} 550 551// Request for the `MarkRecommendationClaimed` Method. 552message MarkRecommendationClaimedRequest { 553 // Required. Name of the recommendation. 554 string name = 1 [ 555 (google.api.field_behavior) = REQUIRED, 556 (google.api.resource_reference) = { 557 type: "recommender.googleapis.com/Recommendation" 558 } 559 ]; 560 561 // State properties to include with this state. Overwrites any existing 562 // `state_metadata`. 563 // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`. 564 // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`. 565 map<string, string> state_metadata = 2; 566 567 // Required. Fingerprint of the Recommendation. Provides optimistic locking. 568 string etag = 3 [(google.api.field_behavior) = REQUIRED]; 569} 570 571// Request for the `MarkRecommendationSucceeded` Method. 572message MarkRecommendationSucceededRequest { 573 // Required. Name of the recommendation. 574 string name = 1 [ 575 (google.api.field_behavior) = REQUIRED, 576 (google.api.resource_reference) = { 577 type: "recommender.googleapis.com/Recommendation" 578 } 579 ]; 580 581 // State properties to include with this state. Overwrites any existing 582 // `state_metadata`. 583 // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`. 584 // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`. 585 map<string, string> state_metadata = 2; 586 587 // Required. Fingerprint of the Recommendation. Provides optimistic locking. 588 string etag = 3 [(google.api.field_behavior) = REQUIRED]; 589} 590 591// Request for the `MarkRecommendationFailed` Method. 592message MarkRecommendationFailedRequest { 593 // Required. Name of the recommendation. 594 string name = 1 [ 595 (google.api.field_behavior) = REQUIRED, 596 (google.api.resource_reference) = { 597 type: "recommender.googleapis.com/Recommendation" 598 } 599 ]; 600 601 // State properties to include with this state. Overwrites any existing 602 // `state_metadata`. 603 // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`. 604 // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`. 605 map<string, string> state_metadata = 2; 606 607 // Required. Fingerprint of the Recommendation. Provides optimistic locking. 608 string etag = 3 [(google.api.field_behavior) = REQUIRED]; 609} 610 611// Request for the GetRecommenderConfig` method. 612message GetRecommenderConfigRequest { 613 // Required. Name of the Recommendation Config to get. 614 // 615 // Acceptable formats: 616 // 617 // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config` 618 // 619 // * `projects/[PROJECT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config` 620 // 621 // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config` 622 // 623 // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config` 624 string name = 1 [ 625 (google.api.field_behavior) = REQUIRED, 626 (google.api.resource_reference) = { 627 type: "recommender.googleapis.com/RecommenderConfig" 628 } 629 ]; 630} 631 632// Request for the `UpdateRecommenderConfig` method. 633message UpdateRecommenderConfigRequest { 634 // Required. The RecommenderConfig to update. 635 RecommenderConfig recommender_config = 1 636 [(google.api.field_behavior) = REQUIRED]; 637 638 // The list of fields to be updated. 639 google.protobuf.FieldMask update_mask = 2; 640 641 // If true, validate the request and preview the change, but do not actually 642 // update it. 643 bool validate_only = 3; 644} 645 646// Request for the GetInsightTypeConfig` method. 647message GetInsightTypeConfigRequest { 648 // Required. Name of the InsightTypeConfig to get. 649 // 650 // Acceptable formats: 651 // 652 // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/config` 653 // 654 // * `projects/[PROJECT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/config` 655 // 656 // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/config` 657 // 658 // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/config` 659 string name = 1 [ 660 (google.api.field_behavior) = REQUIRED, 661 (google.api.resource_reference) = { 662 type: "recommender.googleapis.com/InsightTypeConfig" 663 } 664 ]; 665} 666 667// Request for the `UpdateInsightTypeConfig` method. 668message UpdateInsightTypeConfigRequest { 669 // Required. The InsightTypeConfig to update. 670 InsightTypeConfig insight_type_config = 1 671 [(google.api.field_behavior) = REQUIRED]; 672 673 // The list of fields to be updated. 674 google.protobuf.FieldMask update_mask = 2; 675 676 // If true, validate the request and preview the change, but do not actually 677 // update it. 678 bool validate_only = 3; 679} 680