aboutsummaryrefslogtreecommitdiff
path: root/google/cloud/support/common.proto
blob: 3b667e6fbbd2cd993bf9d906cdb8dee9a0d09c39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
// Copyright 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.support.common;

import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";

option go_package = "google.golang.org/genproto/googleapis/cloud/support/common;common";
option java_outer_classname = "CloudSupportProto";
option java_package = "com.google.cloud.support.common";

// A Google Cloud Platform account that identifies support eligibility for a
// Cloud resource. Currently the Cloud resource can only be an Organization
// but this might change in future.
message SupportAccount {
  // The current state of this SupportAccount.
  enum State {
    // Account is in an unknown state.
    STATE_UNSPECIFIED = 0;

    // Account is in an active state.
    ACTIVE = 1;

    // Account has been created but is being provisioned in support systems.
    PENDING = 2;

    // Account deletion has been requested by the user.
    PENDING_DELETION = 3;
  }

  // Pricing model applicable to this support account.
  enum PricingModel {
    // This account is subscribed to an unknown pricing model.
    PRICING_MODEL_UNKNOWN = 0;

    // Package based pricing (Platinum, Gold, Silver, Bronze).
    PACKAGES = 1;

    // Support charges are calculated based on user seats a.k.a,
    // "Pick Your Team" model.
    USER_ROLES = 2;
  }

  // The resource name for a support account in format
  // `supportAccounts/{account_id}`.
  // Output only.
  string name = 1;

  // Identifier for this entity that gets persisted in storage system. The
  // resource name is populated using this field in format
  // `supportAccounts/{account_id}`.
  string account_id = 2;

  // The Cloud resource with which this support account is associated.
  string cloud_resource = 3;

  // A user friendly display name assigned to this support account.
  string display_name = 4;

  // Indicates the current state of an account.
  State state = 5;

  // Time when this account was created.
  // Output only.
  google.protobuf.Timestamp create_time = 6;

  // The resource name of a billing account associated with this support
  // account. For example, `billingAccounts/ABCDEF-012345-567890`.
  string billing_account_name = 7;

  string unify_account_id = 8;

  // The PricingModel applicable to this support account.
  PricingModel pricing_model = 9;
}

// A support case created by the user.
message Case {
  // The case priority with P0 being the most urgent and P4 the least.
  enum Priority {
    // Priority is undefined or has not been set yet.
    PRIORITY_UNSPECIFIED = 0;

    // Extreme impact on a production service - Service is hard down.
    P0 = 1;

    // Critical impact on a production service - Service is currently unusable.
    P1 = 2;

    // Severe impact on a production service - Service is usable but greatly
    // impaired.
    P2 = 3;

    // Medium impact on a production service - Service is available, but
    // moderately impaired.
    P3 = 4;

    // General questions or minor issues - Production service is fully
    // available.
    P4 = 5;
  }

  // The state of a case.
  enum State {
    // Case is in an unknown state.
    STATE_UNSPECIFIED = 0;

    // Case has been created but no one is assigned to work on it yet.
    NEW = 1;

    // Case has been assigned to a support agent.
    ASSIGNED = 2;

    // A support agent is currently investigating the case.
    IN_PROGRESS_GOOGLE_SUPPORT = 3;

    // Case has been forwarded to product team for further investigation.
    IN_PROGRESS_GOOGLE_ENG = 4;

    // Case is under investigation and relates to a known issue.
    IN_PROGRESS_KNOWN_ISSUE = 5;

    // Case is waiting for a response from the customer.
    WAITING_FOR_CUSTOMER_RESPONSE = 6;

    // A solution has been offered for the case but it isn't closed yet.
    SOLUTION_OFFERED = 7;

    // Cases has been fully resolved and is in a closed state.
    CLOSED = 8;
  }

  // The resource name for the Case in format
  // `supportAccounts/{account_id}/cases/{case_id}`
  string name = 1;

  // The short summary of the issue reported in this case.
  string display_name = 2;

  // The board description of issue provided with initial summary.
  string description = 3;

  // The product component for which this Case is reported.
  string component = 4;

  // The product subcomponent for which this Case is reported.
  string subcomponent = 5;

  // Timezone the client sending this request is in.
  // It should be in a format IANA recognizes: https://www.iana.org/time-zone
  // There is no additional validation done by the API.
  string client_timezone = 6;

  // The email addresses that can be copied to receive updates on this case.
  // Users can specify a maximum of 10 email addresses.
  repeated string cc_addresses = 7;

  // The Google Cloud Platform project ID for which this case is created.
  string project_id = 8;

  // List of customer issues associated with this case.
  repeated CustomerIssue issues = 10;

  // The current priority of this case.
  Priority priority = 11;

  // The current state of this case.
  State state = 12;

  // Time when this case was created.
  // Output only.
  google.protobuf.Timestamp create_time = 13;

  // Time when this case was last updated.
  // Output only.
  google.protobuf.Timestamp update_time = 14;

  // Email address of user who created this case.
  // Output only. It is inferred from credentials supplied during case creation.
  string creator_email = 15;

  // The issue category applicable to this case.
  string category = 16;
}

// Reference to a Google internal ticket used for investigating a support case.
// Not every support case will have an internal ticket associated with it.
// A support case can have multiple tickets linked to it.
message CustomerIssue {
  // The status of a customer issue.
  enum IssueState {
    // Issue in an unknown state.
    ISSUE_STATE_UNSPECIFIED = 0;

    // Issue is currently open but the work on it has not been started.
    OPEN = 1;

    // Issue is currently being worked on.
    IN_PROGRESS = 2;

    // Issue is fixed.
    FIXED = 3;

    // Issue has been marked as invalid.
    WONT_FIX = 4;

    // Issue verified and in production.
    VERIFIED = 5;
  }

  // Unique identifier for the internal issue.
  // Output only.
  string issue_id = 1;

  // Represents current status of the internal ticket.
  // Output only.
  IssueState state = 2;

  // Time when the internal issue was created.
  // Output only.
  google.protobuf.Timestamp create_time = 3;

  // Time when the internal issue was marked as resolved.
  // Output only.
  google.protobuf.Timestamp resolve_time = 4;

  // Time when the internal issue was last updated.
  // Output only.
  google.protobuf.Timestamp update_time = 5;
}

// A message that contains mapping of a user and their role under a support
// account.
message SupportRole {
  // A role which determines the support resources and features a user might
  // get access to.
  enum Role {
    // An unknown role.
    ROLE_UNSPECIFIED = 0;

    // The basic support role.
    BASIC = 1;

    // The developer role.
    DEVELOPER = 2;

    // The operation role.
    OPERATION = 3;

    // The site reliability role.
    SITE_RELIABILITY = 4;
  }

  // Email address of user being added through this Role.
  string email = 1;

  // The type of role assigned to user.
  Role role = 2;
}

// The comment text associated with a `Case`.
message Comment {
  // Text containing a maximum of 3000 characters.
  string text = 1;

  // Time when this update was created.
  // Output only.
  google.protobuf.Timestamp create_time = 2;

  // The email address/name of user who created this comment.
  // Output only.
  string author = 3;

  // The resource name for this comment in format
  // `supportAccounts/{account_id}/cases/{case_id}/{comment_id}`.
  // Output only.
  string name = 4;
}

// Represents the product component taxonomy that is to be used while creating
// or updating a `Case`. A client should obtain the list of issue categories,
// component/subcomponent from this object and specify it in `Case.category`,
// `Case.component` and `Case.subcomponent` fields respectively.
message IssueTaxonomy {
  // The representation of a product component. It is composed of a canonical
  // name for the product (e.g., Google App Engine), languages in which a
  // support ticket can be created under this component, a template that
  // provides hints on important details to be filled out before submitting a
  // case. It also contains an embedded list of product subcomponents that have
  // similar attributes as top-level components.
  // (e.g., Google App Engine > Memcache).
  message Component {
    // User friendly name of this component.
    string display_name = 1;

    // List of languages in which a support case can be created under this
    // component. Represented by language codes in ISO_639-1 standard.
    repeated string languages = 2;

    // Template to be used while filling the description of a support case.
    string template = 3;

    // List of subcomponents under this component.
    repeated Component subcomponents = 4;
  }

  // Represents the category of issue (Technical or Non-Technical)
  // reported through a support case.
  message Category {
    // User friendly name of this category.
    string display_name = 1;

    // Map of product components under this category.
    map<string, Component> components = 2;
  }

  // Map of available categories.
  map<string, Category> categories = 1;
}