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