xref: /aosp_15_r20/external/googleapis/google/cloud/recommender/v1/recommender_service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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