go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/swarming/proto/api/swarming.pb.go (about) 1 // Copyright 2018 The LUCI Authors. All rights reserved. 2 // Use of this source code is governed under the Apache License, Version 2.0 3 // that can be found in the LICENSE file. 4 5 // This proto tries to converge with 6 // https://github.com/googleapis/googleapis/blob/master/google/devtools/remoteworkers/v1test2/ 7 // as much as it is sensible to (not much). It has several inherent divergences 8 // as Swarming has a much wider use case and has a different fundamental model 9 // for bot state. Swarming has the limitation of not supporting children 10 // devices: as a single bot is a single execution unit, unlike RBE. 11 12 // Code generated by protoc-gen-go. DO NOT EDIT. 13 // versions: 14 // protoc-gen-go v1.31.0 15 // protoc v3.21.7 16 // source: go.chromium.org/luci/swarming/proto/api/swarming.proto 17 18 package apipb 19 20 import prpc "go.chromium.org/luci/grpc/prpc" 21 22 import ( 23 context "context" 24 grpc "google.golang.org/grpc" 25 codes "google.golang.org/grpc/codes" 26 status "google.golang.org/grpc/status" 27 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 28 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 29 durationpb "google.golang.org/protobuf/types/known/durationpb" 30 structpb "google.golang.org/protobuf/types/known/structpb" 31 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 32 reflect "reflect" 33 sync "sync" 34 ) 35 36 const ( 37 // Verify that this generated code is sufficiently up-to-date. 38 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 39 // Verify that runtime/protoimpl is sufficiently up-to-date. 40 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 41 ) 42 43 // BotStatusType is one of the states the bot can be in. 44 // 45 // A bot status implies being in this status for a certain amount of time, for 46 // example a hook running for N seconds, contrary to BotEventType which is about 47 // an event that doesn't have an inherent duration. 48 // 49 // Some values are more important than others. For example if a bot is now 50 // MISSING but used to be QUARANTINED, the value is still MISSING. 51 type BotStatusType int32 52 53 const ( 54 // Invalid bot status, do not use. 55 BotStatusType_BOT_STATUS_UNSPECIFIED BotStatusType = 0 56 // The server detected that the bot is not pinging the server anymore. Unlike 57 // other statuses, this value is set after a timeout. 58 // 59 // Bot.status_msg shall not be set. 60 BotStatusType_MISSING BotStatusType = 1 61 // Bot was quarantined by the server. 62 // 63 // Bot.status_msg shall include the server provided rationale. 64 BotStatusType_QUARANTINED_BY_SERVER BotStatusType = 2 // Not used yet. https://crbug.com/757931 65 // Bot self-reported as unhealthy. 66 // 67 // What is currently called as 'quarantined' in the old API. 68 // 69 // Bot.status_msg shall include the bot provided rationale. 70 BotStatusType_QUARANTINED_BY_BOT BotStatusType = 3 71 // Bot self-reported as unable to run tasks due to externally induced 72 // overhead. 73 // 74 // Examples include: 75 // - The temperature of the DUT (Device Under Test) is too high, and the bot 76 // is waiting for cool down 77 // - host is doing self-cleaning work out of the bot's control (puppet is 78 // running), etc. 79 // 80 // Bot.status_msg shall include the bot provided rationale. 81 BotStatusType_OVERHEAD_MAINTENANCE_EXTERNAL BotStatusType = 4 82 // Bot self-reported as unable to run tasks due to doing internal overhead. 83 // 84 // Examples include: 85 // - Running hooks 86 // - Cleaning up or verifying its local cache 87 // - Bot is starting for a version upgrade 88 // 89 // Bot.status_msg shall disambiguate the type of work item done. 90 BotStatusType_OVERHEAD_BOT_INTERNAL BotStatusType = 5 // Not used yet. https://crbug.com/870723 91 // Bot is down as its host is rebooting and contact was lost. 92 // 93 // If the bot doesn't contact back soon enough, it will be considered MISSING. 94 // 95 // Bot.status_msg shall not be set. 96 BotStatusType_HOST_REBOOTING BotStatusType = 6 // Not used yet. https://crbug.com/870723 97 // Running a task. 98 // 99 // Bot.status_msg shall not be set. 100 BotStatusType_BUSY BotStatusType = 7 101 // Bot is 'reserved' for operations outside of normal operations. This can be 102 // relevant for SUT (System Under Test). 103 // 104 // Bot.status_msg shall not be set. 105 BotStatusType_RESERVED BotStatusType = 8 // Not used yet. https://crbug.com/913978 106 // Bot is healthy and waiting for tasks. 107 // 108 // Bot.status_msg shall not be set. 109 BotStatusType_IDLE BotStatusType = 9 110 ) 111 112 // Enum value maps for BotStatusType. 113 var ( 114 BotStatusType_name = map[int32]string{ 115 0: "BOT_STATUS_UNSPECIFIED", 116 1: "MISSING", 117 2: "QUARANTINED_BY_SERVER", 118 3: "QUARANTINED_BY_BOT", 119 4: "OVERHEAD_MAINTENANCE_EXTERNAL", 120 5: "OVERHEAD_BOT_INTERNAL", 121 6: "HOST_REBOOTING", 122 7: "BUSY", 123 8: "RESERVED", 124 9: "IDLE", 125 } 126 BotStatusType_value = map[string]int32{ 127 "BOT_STATUS_UNSPECIFIED": 0, 128 "MISSING": 1, 129 "QUARANTINED_BY_SERVER": 2, 130 "QUARANTINED_BY_BOT": 3, 131 "OVERHEAD_MAINTENANCE_EXTERNAL": 4, 132 "OVERHEAD_BOT_INTERNAL": 5, 133 "HOST_REBOOTING": 6, 134 "BUSY": 7, 135 "RESERVED": 8, 136 "IDLE": 9, 137 } 138 ) 139 140 func (x BotStatusType) Enum() *BotStatusType { 141 p := new(BotStatusType) 142 *p = x 143 return p 144 } 145 146 func (x BotStatusType) String() string { 147 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 148 } 149 150 func (BotStatusType) Descriptor() protoreflect.EnumDescriptor { 151 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[0].Descriptor() 152 } 153 154 func (BotStatusType) Type() protoreflect.EnumType { 155 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[0] 156 } 157 158 func (x BotStatusType) Number() protoreflect.EnumNumber { 159 return protoreflect.EnumNumber(x) 160 } 161 162 // Deprecated: Use BotStatusType.Descriptor instead. 163 func (BotStatusType) EnumDescriptor() ([]byte, []int) { 164 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{0} 165 } 166 167 // BotEventType defines the reason why BotEvent was created. 168 type BotEventType int32 169 170 const ( 171 // Invalid bot event type, do not use. 172 BotEventType_BOT_EVENT_TYPE_UNSPECIFIED BotEventType = 0 173 // Bot connected and started a new session. 174 // 175 // BotEvent.event_msg shall not be set. 176 BotEventType_BOT_NEW_SESSION BotEventType = 1 177 // Currently unused. 178 BotEventType_BOT_INTERNAL_FAILURE BotEventType = 2 179 // Bot had an hook error to report to the server. This shall send a report to 180 // the administrator of the instance. 181 // 182 // BotEvent.event_msg shall contain the error message. 183 BotEventType_BOT_HOOK_ERROR BotEventType = 3 184 // Bot hook logged information. The bot hooks can log locally to the local log 185 // file, which itself can be streamed out of band. For special notifications 186 // that are worth notifying the administrator, this event can be used to raise 187 // these. Due to the cost of doing an RPC just for this, this should be used 188 // sparingly; vs local logging. 189 // 190 // BotEvent.event_msg shall contain the log entry. 191 BotEventType_BOT_HOOK_LOG BotEventType = 4 192 // Bot initiated a host reboot. An example is a bot hook requesting to reboot 193 // the host after a task failure. 194 // 195 // BotEvent.event_msg shall contain the reason for rebooting the host, if any. 196 BotEventType_BOT_REBOOTING_HOST BotEventType = 5 197 // Bot is shutting down. It may be restarting for an update. 198 // 199 // BotEvent.event_msg shall contain the reason. 200 BotEventType_BOT_SHUTDOWN BotEventType = 6 201 // Currently unused. 202 BotEventType_BOT_DELETED BotEventType = 7 203 // Bot is missing. There have been no communication from the bot for longer 204 // than deadline configured on server side. 205 BotEventType_BOT_MISSING BotEventType = 8 206 // The server instructs the bot to stay idle. This is when there is no task 207 // pending for this bot. Will only be stored when there are other state 208 // changes. 209 // 210 // BotEvent.event_msg shall not be set. 211 BotEventType_INSTRUCT_IDLE BotEventType = 10 212 // The server instructs the bot to start a task. 213 // 214 // BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall 215 // contain the task ID. 216 BotEventType_INSTRUCT_START_TASK BotEventType = 11 217 // The server instructs the bot to restart without self-updating. This is to 218 // initiate a new bot session, with potentially new bot hooks. 219 // 220 // BotEvent.event_msg can be set to the rationale, if any. 221 BotEventType_INSTRUCT_RESTART_BOT BotEventType = 12 222 // The server instructs the bot to self-update. 223 // 224 // BotEvent.event_msg shall be set to the version to update to. 225 // BotEvent.bot.info.version contains the bot's previous version. 226 BotEventType_INSTRUCT_UPDATE_BOT_CODE BotEventType = 13 227 // The server instructs the bot to stop its process. 228 // 229 // BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall 230 // contain the task ID. 231 BotEventType_INSTRUCT_TERMINATE_BOT BotEventType = 14 232 // Bot completed a task. 233 // 234 // BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall 235 // contain the task ID. 236 BotEventType_TASK_COMPLETED BotEventType = 20 237 // Bot had an internal failure (RAN_INTERNAL_FAILURE) to report to the server 238 // while processing a task. This shall send a report to the administrator of 239 // the instance and service author. 240 // 241 // This event shall not be filed in case of a MISSING_INPUTS. 242 // 243 // BotEvent.event_msg shall contain the error message. 244 // BotEvent.bot.current_task_id shall contain the task ID. 245 BotEventType_TASK_INTERNAL_FAILURE BotEventType = 21 246 // Bot is forcibly killing the task. 247 // 248 // This can be induced by a server side request (KILLED, PREEMPTED) or by a 249 // bot side decision (TIMED_OUT, TIMED_OUT_SILENCE). 250 // 251 // BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall 252 // contain the task ID. 253 BotEventType_TASK_KILLED BotEventType = 22 254 ) 255 256 // Enum value maps for BotEventType. 257 var ( 258 BotEventType_name = map[int32]string{ 259 0: "BOT_EVENT_TYPE_UNSPECIFIED", 260 1: "BOT_NEW_SESSION", 261 2: "BOT_INTERNAL_FAILURE", 262 3: "BOT_HOOK_ERROR", 263 4: "BOT_HOOK_LOG", 264 5: "BOT_REBOOTING_HOST", 265 6: "BOT_SHUTDOWN", 266 7: "BOT_DELETED", 267 8: "BOT_MISSING", 268 10: "INSTRUCT_IDLE", 269 11: "INSTRUCT_START_TASK", 270 12: "INSTRUCT_RESTART_BOT", 271 13: "INSTRUCT_UPDATE_BOT_CODE", 272 14: "INSTRUCT_TERMINATE_BOT", 273 20: "TASK_COMPLETED", 274 21: "TASK_INTERNAL_FAILURE", 275 22: "TASK_KILLED", 276 } 277 BotEventType_value = map[string]int32{ 278 "BOT_EVENT_TYPE_UNSPECIFIED": 0, 279 "BOT_NEW_SESSION": 1, 280 "BOT_INTERNAL_FAILURE": 2, 281 "BOT_HOOK_ERROR": 3, 282 "BOT_HOOK_LOG": 4, 283 "BOT_REBOOTING_HOST": 5, 284 "BOT_SHUTDOWN": 6, 285 "BOT_DELETED": 7, 286 "BOT_MISSING": 8, 287 "INSTRUCT_IDLE": 10, 288 "INSTRUCT_START_TASK": 11, 289 "INSTRUCT_RESTART_BOT": 12, 290 "INSTRUCT_UPDATE_BOT_CODE": 13, 291 "INSTRUCT_TERMINATE_BOT": 14, 292 "TASK_COMPLETED": 20, 293 "TASK_INTERNAL_FAILURE": 21, 294 "TASK_KILLED": 22, 295 } 296 ) 297 298 func (x BotEventType) Enum() *BotEventType { 299 p := new(BotEventType) 300 *p = x 301 return p 302 } 303 304 func (x BotEventType) String() string { 305 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 306 } 307 308 func (BotEventType) Descriptor() protoreflect.EnumDescriptor { 309 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[1].Descriptor() 310 } 311 312 func (BotEventType) Type() protoreflect.EnumType { 313 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[1] 314 } 315 316 func (x BotEventType) Number() protoreflect.EnumNumber { 317 return protoreflect.EnumNumber(x) 318 } 319 320 // Deprecated: Use BotEventType.Descriptor instead. 321 func (BotEventType) EnumDescriptor() ([]byte, []int) { 322 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{1} 323 } 324 325 // The user to run the task. 326 type User int32 327 328 const ( 329 // Unspecified; will default to pool-level defaults. 330 User_USER_UNSPECIFIED User = 0 331 // Historical value; tasks currently run as the same user that Swarming ran 332 // as. 333 User_USER_SWARMING User = 1 334 // Using the new, unprivileged user to run the task. 335 User_USER_TEMPORARY User = 2 336 ) 337 338 // Enum value maps for User. 339 var ( 340 User_name = map[int32]string{ 341 0: "USER_UNSPECIFIED", 342 1: "USER_SWARMING", 343 2: "USER_TEMPORARY", 344 } 345 User_value = map[string]int32{ 346 "USER_UNSPECIFIED": 0, 347 "USER_SWARMING": 1, 348 "USER_TEMPORARY": 2, 349 } 350 ) 351 352 func (x User) Enum() *User { 353 p := new(User) 354 *p = x 355 return p 356 } 357 358 func (x User) String() string { 359 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 360 } 361 362 func (User) Descriptor() protoreflect.EnumDescriptor { 363 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[2].Descriptor() 364 } 365 366 func (User) Type() protoreflect.EnumType { 367 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[2] 368 } 369 370 func (x User) Number() protoreflect.EnumNumber { 371 return protoreflect.EnumNumber(x) 372 } 373 374 // Deprecated: Use User.Descriptor instead. 375 func (User) EnumDescriptor() ([]byte, []int) { 376 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{2} 377 } 378 379 // TaskStateCategory represents the 5 different categories of task state. 380 // 381 // For active state categories (RUNNING_MASK and TRANSIENT_DONE_MASK), it is 382 // possible to go 'back' to PENDING_MASK category; for example, a task has an 383 // internal error, and the server reenqueues the task for a second try. 384 type TaskStateCategory int32 385 386 const ( 387 // Invalid value. 388 TaskStateCategory_TASK_STATE_CATEGORY_UNSPECIFIED TaskStateCategory = 0 389 // Bit mask for the TaskState inside each category. 390 TaskStateCategory_TASK_STATE_MASK TaskStateCategory = 15 391 // The task is enqueued and pending bot availability. 392 TaskStateCategory_CATEGORY_PENDING TaskStateCategory = 16 393 // The task is running. 394 TaskStateCategory_CATEGORY_RUNNING TaskStateCategory = 32 395 // Transient done states are uncertain states; something ran but the result 396 // was inconclusive. 397 // 398 // They can trigger the Swarming internal retry mechanism. In this case, the 399 // "task try" will have this state, but the task summary will become PENDING. 400 // In case the task cannot be retried, when idempotent is false, then this 401 // becomes a final state. 402 TaskStateCategory_CATEGORY_TRANSIENT_DONE TaskStateCategory = 48 403 // The task ran, and it is done. 404 TaskStateCategory_CATEGORY_EXECUTION_DONE TaskStateCategory = 64 405 // The task did not run, and won't. 406 TaskStateCategory_CATEGORY_NEVER_RAN_DONE TaskStateCategory = 80 407 ) 408 409 // Enum value maps for TaskStateCategory. 410 var ( 411 TaskStateCategory_name = map[int32]string{ 412 0: "TASK_STATE_CATEGORY_UNSPECIFIED", 413 15: "TASK_STATE_MASK", 414 16: "CATEGORY_PENDING", 415 32: "CATEGORY_RUNNING", 416 48: "CATEGORY_TRANSIENT_DONE", 417 64: "CATEGORY_EXECUTION_DONE", 418 80: "CATEGORY_NEVER_RAN_DONE", 419 } 420 TaskStateCategory_value = map[string]int32{ 421 "TASK_STATE_CATEGORY_UNSPECIFIED": 0, 422 "TASK_STATE_MASK": 15, 423 "CATEGORY_PENDING": 16, 424 "CATEGORY_RUNNING": 32, 425 "CATEGORY_TRANSIENT_DONE": 48, 426 "CATEGORY_EXECUTION_DONE": 64, 427 "CATEGORY_NEVER_RAN_DONE": 80, 428 } 429 ) 430 431 func (x TaskStateCategory) Enum() *TaskStateCategory { 432 p := new(TaskStateCategory) 433 *p = x 434 return p 435 } 436 437 func (x TaskStateCategory) String() string { 438 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 439 } 440 441 func (TaskStateCategory) Descriptor() protoreflect.EnumDescriptor { 442 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[3].Descriptor() 443 } 444 445 func (TaskStateCategory) Type() protoreflect.EnumType { 446 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[3] 447 } 448 449 func (x TaskStateCategory) Number() protoreflect.EnumNumber { 450 return protoreflect.EnumNumber(x) 451 } 452 453 // Deprecated: Use TaskStateCategory.Descriptor instead. 454 func (TaskStateCategory) EnumDescriptor() ([]byte, []int) { 455 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{3} 456 } 457 458 // TaskState represents the different possible states for a Task. 459 // 460 // Each state is in one of the bitmask in TaskStateCategory. 461 type TaskState int32 462 463 const ( 464 // Invalid task state. 465 TaskState_TASK_STATE_INVALID TaskState = 0 466 // The task is currently pending. 467 // 468 // This means that no bot reaped the task yet. It will stay in this state 469 // until either a bot reaps the task, or the expiration elapsed or all bots 470 // become MISSING, leading to a NO_RESOURCE. The task pending expiration is 471 // specified as TaskSlice.expiration, one per task slice. 472 // 473 // The task may go through multiple pending TaskSlice as they expire or are 474 // skipped due to NO_RESOURCE (see definition below). In this situation the 475 // task state still stays in PENDING state as long as there's a chance for a 476 // bot to reap the task. 477 TaskState_PENDING TaskState = 16 478 // The task is currently pending, but another previously scheduled task was 479 // identified to be deduped against, but the previously scheduled task hasn't 480 // completed yet. 481 // 482 // In this case, the task may go back into PENDING if the previous identical 483 // task failed, or immediately into DEDUPED if it succeeded. 484 TaskState_PENDING_DEDUPING TaskState = 17 // Not used yet, https://crbug.com/915342 485 // The task is currently running. 486 // 487 // For new tasks, this is only the actual tasks runtime. For old tasks, this 488 // includes RUNNING_OVERHEAD_START and RUNNING_OVERHEAD_END. 489 TaskState_RUNNING TaskState = 32 490 // The task is assigned to a bot. The bot is fetching input files and setting 491 // up the runtime environment. 492 TaskState_RUNNING_OVERHEAD_SETUP TaskState = 33 // Not used yet, https://crbug.com/796757 493 // Task completed and result metadata is available. Outputs and other 494 // associated logs are still being uploaded and the environment is being 495 // teared down. 496 // 497 // A client that only needs the exit code may chose to stop waiting for the 498 // task, as the task will end with COMPLETED, unless there's a failure during 499 // outputs upload, which would result in INTERNAL_FAILURE. 500 TaskState_RUNNING_OVERHEAD_TEARDOWN TaskState = 34 // Not used yet, https://crbug.com/813412 501 // The task is being forcibly terminated. This can be due to either a kill 502 // request, preemption or time out. 503 // 504 // See 505 // https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Bot.md#graceful-termination_aka-the-sigterm-and-sigkill-dance 506 TaskState_TERMINATING TaskState = 35 // Not used yet. https://crbug.com/916560 507 // Task completed, result metadata and task outputs are available. There's 508 // still some overhead being finished like attaching relevant bot logs to the 509 // task. 510 // 511 // The client can return right away unless infrastructure issue debugging is 512 // needed. 513 TaskState_COMPLETING TaskState = 47 // Not used yet, https://crbug.com/813412 514 // The task ran but the bot had an internal failure, unrelated to the task 515 // itself. It can be due to disk or network I/O issues. 516 TaskState_RAN_INTERNAL_FAILURE TaskState = 48 517 // The task ran and completed normally, but returned an exit code that was 518 // provided in the TaskProperties as signaling an hardware failure of the DUT 519 // (Device Under Test). 520 // 521 // As such, the task may need to be retried. 522 TaskState_DUT_FAILURE TaskState = 49 // Not used yet, https://crbug.com/902807 523 // The task started but the bot failed to keep the connection to the server 524 // alive. This can be due to the bot's host crashing, or network connectivity 525 // issues. 526 TaskState_BOT_DISAPPEARED TaskState = 50 // Not used yet. https://crbug.com/916553 527 // The task ran but was killed by the client or an external scheduler in a way 528 // that it should still be retried as another task try. 529 // 530 // This can happen via the external scheduler or an API yet to be defined. The 531 // rationale is to kill slow running low priority task, without disrupting the 532 // client and simply postponing the task for later. 533 TaskState_PREEMPTED TaskState = 51 // Not used yet. https://crbug.com/916559 534 // The task ran and completed normally. The task process exit code may be 0 or 535 // another value. 536 // 537 // This value is also used when the task is deduped against a previous task. 538 TaskState_COMPLETED TaskState = 64 539 // The task ran for longer than the allowed time in 540 // TaskProperties.execution_timeout. 541 // 542 // This means the bot forcefully killed the task process as described in the 543 // graceful termination dance in the documentation. 544 TaskState_TIMED_OUT TaskState = 65 545 // The task timed out due to not sending updates to stdout or stderr within 546 // the period specified in TaskProperties.io_timeout. 547 // 548 // This means the bot forcefully killed the task process as described in the 549 // graceful termination dance in the documentation. 550 TaskState_TIMED_OUT_SILENCE TaskState = 66 // Not used yet. https://crbug.com/916556 551 // The task ran but was manually killed via the 'cancel' API. 552 // 553 // This means the bot forcefully killed the task process as described in the 554 // graceful termination dance in the documentation. 555 TaskState_KILLED TaskState = 67 556 // The task had specified invalid inputs. This is found out by the bot while 557 // RUNNING_OVERHEAD_SETUP. 558 // 559 // For example, the cas_inputs or cipd_inputs refers to missing items, 560 // or the requested containment cannot be achieved. 561 TaskState_MISSING_INPUTS TaskState = 68 // Not used yet. https://crbug.com/916553 562 // The task didn't have to run, because a previous task had results. It is 563 // functionally equivalent to COMPLETED, except that previous results were 564 // returned as-is. 565 TaskState_DEDUPED TaskState = 80 566 // The task is not pending anymore; it never ran due to lack of capacity. 567 // 568 // This means that other higher priority tasks ran instead and that not enough 569 // bots were available to run this task for TaskSlice.expiration. 570 TaskState_EXPIRED TaskState = 81 571 // The task never ran, and was manually cancelled via the 'cancel' API before 572 // it was reaped. 573 TaskState_CANCELED TaskState = 82 574 // The task was never set to PENDING and was immediately refused, as the 575 // server determined that there is no bot capacity to run this task. This 576 // happens because no bot exposes a superset of the requested task dimensions. 577 // 578 // There can be a situation where a task goes from PENDING to NO_RESOURCE if 579 // capacity (bots) is removed. 580 // 581 // Set TaskSlice.wait_for_capacity to True to force the server to keep the 582 // task slice pending even in this case. Generally speaking, the task will 583 // eventually switch to EXPIRED, as there's no bot to run it. That said, there 584 // are situations where it is known that in some not-too-distant future a wild 585 // bot will appear that will be able to run this task. 586 TaskState_NO_RESOURCE TaskState = 83 587 // The task was valid but was denied due to a temporary capacity surcharge. 588 // The user should try again after a delay, or surface the lack of capacity to 589 // the user. 590 TaskState_LOAD_SHED TaskState = 84 // Not used yet. https://crbug.com/916562 591 // The task is valid but was denied due to insufficient quota. 592 TaskState_RESOURCE_EXHAUSTED TaskState = 85 // Not used yet. https://crbug.com/916557 593 // The task never ran, the server had an internal failure, unrelated to the 594 // task itself. It can be due to a server bug or network I/O issues. 595 TaskState_SKIPPED_INTERNAL_FAILURE TaskState = 86 // Not used yet. https://crbug.com/916553 596 // The task encounted an error caused by the client. This means that 597 // rerunning the task with the same parameters will not change the result 598 TaskState_CLIENT_ERROR TaskState = 87 599 ) 600 601 // Enum value maps for TaskState. 602 var ( 603 TaskState_name = map[int32]string{ 604 0: "TASK_STATE_INVALID", 605 16: "PENDING", 606 17: "PENDING_DEDUPING", 607 32: "RUNNING", 608 33: "RUNNING_OVERHEAD_SETUP", 609 34: "RUNNING_OVERHEAD_TEARDOWN", 610 35: "TERMINATING", 611 47: "COMPLETING", 612 48: "RAN_INTERNAL_FAILURE", 613 49: "DUT_FAILURE", 614 50: "BOT_DISAPPEARED", 615 51: "PREEMPTED", 616 64: "COMPLETED", 617 65: "TIMED_OUT", 618 66: "TIMED_OUT_SILENCE", 619 67: "KILLED", 620 68: "MISSING_INPUTS", 621 80: "DEDUPED", 622 81: "EXPIRED", 623 82: "CANCELED", 624 83: "NO_RESOURCE", 625 84: "LOAD_SHED", 626 85: "RESOURCE_EXHAUSTED", 627 86: "SKIPPED_INTERNAL_FAILURE", 628 87: "CLIENT_ERROR", 629 } 630 TaskState_value = map[string]int32{ 631 "TASK_STATE_INVALID": 0, 632 "PENDING": 16, 633 "PENDING_DEDUPING": 17, 634 "RUNNING": 32, 635 "RUNNING_OVERHEAD_SETUP": 33, 636 "RUNNING_OVERHEAD_TEARDOWN": 34, 637 "TERMINATING": 35, 638 "COMPLETING": 47, 639 "RAN_INTERNAL_FAILURE": 48, 640 "DUT_FAILURE": 49, 641 "BOT_DISAPPEARED": 50, 642 "PREEMPTED": 51, 643 "COMPLETED": 64, 644 "TIMED_OUT": 65, 645 "TIMED_OUT_SILENCE": 66, 646 "KILLED": 67, 647 "MISSING_INPUTS": 68, 648 "DEDUPED": 80, 649 "EXPIRED": 81, 650 "CANCELED": 82, 651 "NO_RESOURCE": 83, 652 "LOAD_SHED": 84, 653 "RESOURCE_EXHAUSTED": 85, 654 "SKIPPED_INTERNAL_FAILURE": 86, 655 "CLIENT_ERROR": 87, 656 } 657 ) 658 659 func (x TaskState) Enum() *TaskState { 660 p := new(TaskState) 661 *p = x 662 return p 663 } 664 665 func (x TaskState) String() string { 666 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 667 } 668 669 func (TaskState) Descriptor() protoreflect.EnumDescriptor { 670 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[4].Descriptor() 671 } 672 673 func (TaskState) Type() protoreflect.EnumType { 674 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[4] 675 } 676 677 func (x TaskState) Number() protoreflect.EnumNumber { 678 return protoreflect.EnumNumber(x) 679 } 680 681 // Deprecated: Use TaskState.Descriptor instead. 682 func (TaskState) EnumDescriptor() ([]byte, []int) { 683 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{4} 684 } 685 686 type Containment_ContainmentType int32 687 688 const ( 689 // Historical value, not specified. Containment may or may not be used. 690 Containment_NOT_SPECIFIED Containment_ContainmentType = 0 691 // No containment, the default for now. 692 Containment_NONE Containment_ContainmentType = 1 693 // Use the containment appropriate on the platform. 694 Containment_AUTO Containment_ContainmentType = 2 695 // Use Job Object on Windows. Will fail if used on other platforms. 696 Containment_JOB_OBJECT Containment_ContainmentType = 3 697 ) 698 699 // Enum value maps for Containment_ContainmentType. 700 var ( 701 Containment_ContainmentType_name = map[int32]string{ 702 0: "NOT_SPECIFIED", 703 1: "NONE", 704 2: "AUTO", 705 3: "JOB_OBJECT", 706 } 707 Containment_ContainmentType_value = map[string]int32{ 708 "NOT_SPECIFIED": 0, 709 "NONE": 1, 710 "AUTO": 2, 711 "JOB_OBJECT": 3, 712 } 713 ) 714 715 func (x Containment_ContainmentType) Enum() *Containment_ContainmentType { 716 p := new(Containment_ContainmentType) 717 *p = x 718 return p 719 } 720 721 func (x Containment_ContainmentType) String() string { 722 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 723 } 724 725 func (Containment_ContainmentType) Descriptor() protoreflect.EnumDescriptor { 726 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[5].Descriptor() 727 } 728 729 func (Containment_ContainmentType) Type() protoreflect.EnumType { 730 return &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes[5] 731 } 732 733 func (x Containment_ContainmentType) Number() protoreflect.EnumNumber { 734 return protoreflect.EnumNumber(x) 735 } 736 737 // Deprecated: Use Containment_ContainmentType.Descriptor instead. 738 func (Containment_ContainmentType) EnumDescriptor() ([]byte, []int) { 739 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{16, 0} 740 } 741 742 // Request for BotAPI.Events. 743 type BotEventsRequest struct { 744 state protoimpl.MessageState 745 sizeCache protoimpl.SizeCache 746 unknownFields protoimpl.UnknownFields 747 748 // Required. Bot ID to retrieve results from. 749 BotId string `protobuf:"bytes,1,opt,name=bot_id,json=botId,proto3" json:"bot_id,omitempty"` 750 // Optional. Use this field to specify the maximum number of results to be 751 // returned by the server. 752 // 753 // The server may further constrain the maximum number of results returned in 754 // a single page. If the page_size is 0, the server will decide the number of 755 // results to be returned. 756 PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` 757 // Optional. Use this field to request a specific page of the list results, 758 // following a previous call. 759 // 760 // When specified, page_size, start_time and end_time must match exactly the 761 // previous call's argument. 762 PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` 763 // Optional. Earliest time to return bot event. Inclusive. 764 // 765 // If not specified, pagination is done until all events are returned. 766 StartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` 767 // Optional. Most recent time to return bot event. Exclusive. 768 // 769 // If not specified, defaults to the current time. 770 EndTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` 771 } 772 773 func (x *BotEventsRequest) Reset() { 774 *x = BotEventsRequest{} 775 if protoimpl.UnsafeEnabled { 776 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[0] 777 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 778 ms.StoreMessageInfo(mi) 779 } 780 } 781 782 func (x *BotEventsRequest) String() string { 783 return protoimpl.X.MessageStringOf(x) 784 } 785 786 func (*BotEventsRequest) ProtoMessage() {} 787 788 func (x *BotEventsRequest) ProtoReflect() protoreflect.Message { 789 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[0] 790 if protoimpl.UnsafeEnabled && x != nil { 791 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 792 if ms.LoadMessageInfo() == nil { 793 ms.StoreMessageInfo(mi) 794 } 795 return ms 796 } 797 return mi.MessageOf(x) 798 } 799 800 // Deprecated: Use BotEventsRequest.ProtoReflect.Descriptor instead. 801 func (*BotEventsRequest) Descriptor() ([]byte, []int) { 802 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{0} 803 } 804 805 func (x *BotEventsRequest) GetBotId() string { 806 if x != nil { 807 return x.BotId 808 } 809 return "" 810 } 811 812 func (x *BotEventsRequest) GetPageSize() int32 { 813 if x != nil { 814 return x.PageSize 815 } 816 return 0 817 } 818 819 func (x *BotEventsRequest) GetPageToken() string { 820 if x != nil { 821 return x.PageToken 822 } 823 return "" 824 } 825 826 func (x *BotEventsRequest) GetStartTime() *timestamppb.Timestamp { 827 if x != nil { 828 return x.StartTime 829 } 830 return nil 831 } 832 833 func (x *BotEventsRequest) GetEndTime() *timestamppb.Timestamp { 834 if x != nil { 835 return x.EndTime 836 } 837 return nil 838 } 839 840 // Response of BotAPI.Events. 841 type BotEventsResponse struct { 842 state protoimpl.MessageState 843 sizeCache protoimpl.SizeCache 844 unknownFields protoimpl.UnknownFields 845 846 // Events are in reverse chronological order, most recents first and going 847 // down to older events. 848 Events []*BotEvent `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` 849 // This field represents the pagination token to retrieve the next page of 850 // results. If the value is "", it means no further results for the request. 851 NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` 852 } 853 854 func (x *BotEventsResponse) Reset() { 855 *x = BotEventsResponse{} 856 if protoimpl.UnsafeEnabled { 857 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[1] 858 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 859 ms.StoreMessageInfo(mi) 860 } 861 } 862 863 func (x *BotEventsResponse) String() string { 864 return protoimpl.X.MessageStringOf(x) 865 } 866 867 func (*BotEventsResponse) ProtoMessage() {} 868 869 func (x *BotEventsResponse) ProtoReflect() protoreflect.Message { 870 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[1] 871 if protoimpl.UnsafeEnabled && x != nil { 872 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 873 if ms.LoadMessageInfo() == nil { 874 ms.StoreMessageInfo(mi) 875 } 876 return ms 877 } 878 return mi.MessageOf(x) 879 } 880 881 // Deprecated: Use BotEventsResponse.ProtoReflect.Descriptor instead. 882 func (*BotEventsResponse) Descriptor() ([]byte, []int) { 883 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{1} 884 } 885 886 func (x *BotEventsResponse) GetEvents() []*BotEvent { 887 if x != nil { 888 return x.Events 889 } 890 return nil 891 } 892 893 func (x *BotEventsResponse) GetNextPageToken() string { 894 if x != nil { 895 return x.NextPageToken 896 } 897 return "" 898 } 899 900 // Represents a mapping of string to a string. 901 // 902 // The same as a map<key, value>, except that the encoding is deterministic. 903 // 904 // If the StringPair is itself repeated inside another message, the list 905 // must be sorted by key and the keys must be unique. 906 type StringPair struct { 907 state protoimpl.MessageState 908 sizeCache protoimpl.SizeCache 909 unknownFields protoimpl.UnknownFields 910 911 Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` 912 Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 913 } 914 915 func (x *StringPair) Reset() { 916 *x = StringPair{} 917 if protoimpl.UnsafeEnabled { 918 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[2] 919 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 920 ms.StoreMessageInfo(mi) 921 } 922 } 923 924 func (x *StringPair) String() string { 925 return protoimpl.X.MessageStringOf(x) 926 } 927 928 func (*StringPair) ProtoMessage() {} 929 930 func (x *StringPair) ProtoReflect() protoreflect.Message { 931 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[2] 932 if protoimpl.UnsafeEnabled && x != nil { 933 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 934 if ms.LoadMessageInfo() == nil { 935 ms.StoreMessageInfo(mi) 936 } 937 return ms 938 } 939 return mi.MessageOf(x) 940 } 941 942 // Deprecated: Use StringPair.ProtoReflect.Descriptor instead. 943 func (*StringPair) Descriptor() ([]byte, []int) { 944 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{2} 945 } 946 947 func (x *StringPair) GetKey() string { 948 if x != nil { 949 return x.Key 950 } 951 return "" 952 } 953 954 func (x *StringPair) GetValue() string { 955 if x != nil { 956 return x.Value 957 } 958 return "" 959 } 960 961 // Represents a mapping of string to a list of strings. 962 // 963 // The same as a map<key, repeated values>, except that the encoding is 964 // deterministic. 965 // 966 // If the StringListPair is itself repeated inside another message, the list 967 // must be sorted by key and the keys must be unique. 968 type StringListPair struct { 969 state protoimpl.MessageState 970 sizeCache protoimpl.SizeCache 971 unknownFields protoimpl.UnknownFields 972 973 Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` 974 // All the values for this key. values must be sorted. Human readable. 975 // 976 // This string should make sense to a user in the context of 'key'. 977 Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` 978 } 979 980 func (x *StringListPair) Reset() { 981 *x = StringListPair{} 982 if protoimpl.UnsafeEnabled { 983 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[3] 984 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 985 ms.StoreMessageInfo(mi) 986 } 987 } 988 989 func (x *StringListPair) String() string { 990 return protoimpl.X.MessageStringOf(x) 991 } 992 993 func (*StringListPair) ProtoMessage() {} 994 995 func (x *StringListPair) ProtoReflect() protoreflect.Message { 996 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[3] 997 if protoimpl.UnsafeEnabled && x != nil { 998 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 999 if ms.LoadMessageInfo() == nil { 1000 ms.StoreMessageInfo(mi) 1001 } 1002 return ms 1003 } 1004 return mi.MessageOf(x) 1005 } 1006 1007 // Deprecated: Use StringListPair.ProtoReflect.Descriptor instead. 1008 func (*StringListPair) Descriptor() ([]byte, []int) { 1009 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{3} 1010 } 1011 1012 func (x *StringListPair) GetKey() string { 1013 if x != nil { 1014 return x.Key 1015 } 1016 return "" 1017 } 1018 1019 func (x *StringListPair) GetValues() []string { 1020 if x != nil { 1021 return x.Values 1022 } 1023 return nil 1024 } 1025 1026 // Bot describes a Swarming bot. 1027 // 1028 // Because a Swarming bot is a single execution unit unlike RBE, it doesn't have 1029 // a concept of owned device at the moment. This may change later. 1030 type Bot struct { 1031 state protoimpl.MessageState 1032 sizeCache protoimpl.SizeCache 1033 unknownFields protoimpl.UnknownFields 1034 1035 // Bot ID. It must be unique across the Swarming fleet. Generally based on the 1036 // hostname where the bot runs, but that's not a requirement. Must be 1037 // predefined in bots.cfg. 1038 // 1039 // This value is also included in dimensions for the key 'id'. 1040 BotId string `protobuf:"bytes,1,opt,name=bot_id,json=botId,proto3" json:"bot_id,omitempty"` 1041 // Bot session ID. An opaque value. 1042 // 1043 // There is one bot session ID per bot process ID on the host. When the bot 1044 // self-upgrades, it creates a new bot session ID. 1045 SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` // Not used yet. https://crbug.com/786735 1046 // Pools that this bot belongs to. Normally assigned via bots.cfg. The 1047 // pools must be defined in pools.cfg. 1048 // 1049 // Normally a bot shall belong to a single pool, but belonging to multiple 1050 // pool is allowed. This is generally helpful for transitioning bots. 1051 // 1052 // This value is also included in dimensions for the key 'pool'. 1053 Pools []string `protobuf:"bytes,3,rep,name=pools,proto3" json:"pools,omitempty"` 1054 // Current bot status. A bot status is a state in which the bot is for a 1055 // certain amount of time. 1056 Status BotStatusType `protobuf:"varint,4,opt,name=status,proto3,enum=swarming.v1.BotStatusType" json:"status,omitempty"` 1057 // Supplemental information to describe the bot status. Human readable. 1058 // 1059 // See BotStatusType for the meaning of this string for each status. 1060 StatusMsg string `protobuf:"bytes,5,opt,name=status_msg,json=statusMsg,proto3" json:"status_msg,omitempty"` 1061 // Current task being handled by the bot, if there is one. 1062 // 1063 // In Swarming, only a single task can be assigned to a bot at any given time. 1064 CurrentTaskId string `protobuf:"bytes,6,opt,name=current_task_id,json=currentTaskId,proto3" json:"current_task_id,omitempty"` 1065 // Bot reported dimensions. dimensions is a {key: [values]} dictionary. This 1066 // can be used to declare the properties of the host or for the DUT (Device 1067 // Under Test) under control. This is used for task selection. 1068 // 1069 // In RBE, this is called Property. The difference is that RBE's Property is a 1070 // string:string flat dictionary, it doesn't allow repeated values. 1071 // 1072 // https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Detailed-Design.md#bot-dimensions 1073 // 1074 // dimensions MUST be sorted by keys, and each values list must be sorted. 1075 // Each dimension key must be unique. 1076 // 1077 // The values are effectively an OR, a task may match any of the value. 1078 // 1079 // Human readable. 1080 Dimensions []*StringListPair `protobuf:"bytes,7,rep,name=dimensions,proto3" json:"dimensions,omitempty"` 1081 // Bot reported informational state. This can be used to describe the host, 1082 // the bot itself and the DUT (Device Under Test) under control as applicable. 1083 // 1084 // This is NOT used for task selection. 1085 Info *BotInfo `protobuf:"bytes,8,opt,name=info,proto3" json:"info,omitempty"` 1086 } 1087 1088 func (x *Bot) Reset() { 1089 *x = Bot{} 1090 if protoimpl.UnsafeEnabled { 1091 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[4] 1092 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1093 ms.StoreMessageInfo(mi) 1094 } 1095 } 1096 1097 func (x *Bot) String() string { 1098 return protoimpl.X.MessageStringOf(x) 1099 } 1100 1101 func (*Bot) ProtoMessage() {} 1102 1103 func (x *Bot) ProtoReflect() protoreflect.Message { 1104 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[4] 1105 if protoimpl.UnsafeEnabled && x != nil { 1106 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1107 if ms.LoadMessageInfo() == nil { 1108 ms.StoreMessageInfo(mi) 1109 } 1110 return ms 1111 } 1112 return mi.MessageOf(x) 1113 } 1114 1115 // Deprecated: Use Bot.ProtoReflect.Descriptor instead. 1116 func (*Bot) Descriptor() ([]byte, []int) { 1117 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{4} 1118 } 1119 1120 func (x *Bot) GetBotId() string { 1121 if x != nil { 1122 return x.BotId 1123 } 1124 return "" 1125 } 1126 1127 func (x *Bot) GetSessionId() string { 1128 if x != nil { 1129 return x.SessionId 1130 } 1131 return "" 1132 } 1133 1134 func (x *Bot) GetPools() []string { 1135 if x != nil { 1136 return x.Pools 1137 } 1138 return nil 1139 } 1140 1141 func (x *Bot) GetStatus() BotStatusType { 1142 if x != nil { 1143 return x.Status 1144 } 1145 return BotStatusType_BOT_STATUS_UNSPECIFIED 1146 } 1147 1148 func (x *Bot) GetStatusMsg() string { 1149 if x != nil { 1150 return x.StatusMsg 1151 } 1152 return "" 1153 } 1154 1155 func (x *Bot) GetCurrentTaskId() string { 1156 if x != nil { 1157 return x.CurrentTaskId 1158 } 1159 return "" 1160 } 1161 1162 func (x *Bot) GetDimensions() []*StringListPair { 1163 if x != nil { 1164 return x.Dimensions 1165 } 1166 return nil 1167 } 1168 1169 func (x *Bot) GetInfo() *BotInfo { 1170 if x != nil { 1171 return x.Info 1172 } 1173 return nil 1174 } 1175 1176 // Bot reported informational state. This can be used to describe the host, 1177 // the bot itself and the DUT (Device Under Test) under control as applicable. 1178 // 1179 // This is NOT used for task selection. 1180 type BotInfo struct { 1181 state protoimpl.MessageState 1182 sizeCache protoimpl.SizeCache 1183 unknownFields protoimpl.UnknownFields 1184 1185 // supplemental contains the free form JSON data that includes interesting 1186 // information about the bot that doesn't fit in any of the fields below. 1187 // 1188 // Anything that is usable by multiple customers should eventually be moved to 1189 // a new field below. 1190 Supplemental *structpb.Struct `protobuf:"bytes,1,opt,name=supplemental,proto3" json:"supplemental,omitempty"` 1191 // Bot's version. An opaque value. 1192 // 1193 // This value is Swarming instance and configuration dependent. Bot are 1194 // updated through the process described at 1195 // https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Bot.md#update 1196 Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` 1197 // External IP address as visible by the server. 1198 // 1199 // This could be a NAT'ing router external IP. 1200 // 1201 // Can be either IPv4 or IPv6. 1202 ExternalIp string `protobuf:"bytes,3,opt,name=external_ip,json=externalIp,proto3" json:"external_ip,omitempty"` 1203 // Authentication identity that the bot identified as. An opaque value. 1204 AuthenticatedAs string `protobuf:"bytes,4,opt,name=authenticated_as,json=authenticatedAs,proto3" json:"authenticated_as,omitempty"` 1205 // State of the content addressed cache on the bot. This is used for inputs 1206 // files. 1207 CasStats *CASStats `protobuf:"bytes,5,opt,name=cas_stats,json=casStats,proto3" json:"cas_stats,omitempty"` 1208 // State of the named caches (used by incremental tasks) on the bot. This is 1209 // used for task that benefits from incrementality, like builds. 1210 // 1211 // Should be sorted by name. 1212 NamedCachesStats []*NamedCacheStats `protobuf:"bytes,6,rep,name=named_caches_stats,json=namedCachesStats,proto3" json:"named_caches_stats,omitempty"` 1213 // State of the CIPD packages cache on the bot. This is use for installable, 1214 // versioned packages. 1215 // 1216 // Should be sorted by package name, then version. 1217 CipdPackagesCacheStats []*CIPDPackageCacheStats `protobuf:"bytes,7,rep,name=cipd_packages_cache_stats,json=cipdPackagesCacheStats,proto3" json:"cipd_packages_cache_stats,omitempty"` 1218 // Information about the host. 1219 Host *PhysicalEntity `protobuf:"bytes,8,opt,name=host,proto3" json:"host,omitempty"` 1220 // Information about the devices connected to the host. 1221 // 1222 // This can be the DUT (Device Under Test) or other peripherals. 1223 Devices []*PhysicalEntity `protobuf:"bytes,9,rep,name=devices,proto3" json:"devices,omitempty"` 1224 // This field is used in BOT_MISSING event to know the timestamp of the last activity. 1225 LastSeenTs *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=last_seen_ts,json=lastSeenTs,proto3" json:"last_seen_ts,omitempty"` 1226 // The time when the bot became idle. 1227 IdleSinceTs *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=idle_since_ts,json=idleSinceTs,proto3" json:"idle_since_ts,omitempty"` 1228 } 1229 1230 func (x *BotInfo) Reset() { 1231 *x = BotInfo{} 1232 if protoimpl.UnsafeEnabled { 1233 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[5] 1234 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1235 ms.StoreMessageInfo(mi) 1236 } 1237 } 1238 1239 func (x *BotInfo) String() string { 1240 return protoimpl.X.MessageStringOf(x) 1241 } 1242 1243 func (*BotInfo) ProtoMessage() {} 1244 1245 func (x *BotInfo) ProtoReflect() protoreflect.Message { 1246 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[5] 1247 if protoimpl.UnsafeEnabled && x != nil { 1248 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1249 if ms.LoadMessageInfo() == nil { 1250 ms.StoreMessageInfo(mi) 1251 } 1252 return ms 1253 } 1254 return mi.MessageOf(x) 1255 } 1256 1257 // Deprecated: Use BotInfo.ProtoReflect.Descriptor instead. 1258 func (*BotInfo) Descriptor() ([]byte, []int) { 1259 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{5} 1260 } 1261 1262 func (x *BotInfo) GetSupplemental() *structpb.Struct { 1263 if x != nil { 1264 return x.Supplemental 1265 } 1266 return nil 1267 } 1268 1269 func (x *BotInfo) GetVersion() string { 1270 if x != nil { 1271 return x.Version 1272 } 1273 return "" 1274 } 1275 1276 func (x *BotInfo) GetExternalIp() string { 1277 if x != nil { 1278 return x.ExternalIp 1279 } 1280 return "" 1281 } 1282 1283 func (x *BotInfo) GetAuthenticatedAs() string { 1284 if x != nil { 1285 return x.AuthenticatedAs 1286 } 1287 return "" 1288 } 1289 1290 func (x *BotInfo) GetCasStats() *CASStats { 1291 if x != nil { 1292 return x.CasStats 1293 } 1294 return nil 1295 } 1296 1297 func (x *BotInfo) GetNamedCachesStats() []*NamedCacheStats { 1298 if x != nil { 1299 return x.NamedCachesStats 1300 } 1301 return nil 1302 } 1303 1304 func (x *BotInfo) GetCipdPackagesCacheStats() []*CIPDPackageCacheStats { 1305 if x != nil { 1306 return x.CipdPackagesCacheStats 1307 } 1308 return nil 1309 } 1310 1311 func (x *BotInfo) GetHost() *PhysicalEntity { 1312 if x != nil { 1313 return x.Host 1314 } 1315 return nil 1316 } 1317 1318 func (x *BotInfo) GetDevices() []*PhysicalEntity { 1319 if x != nil { 1320 return x.Devices 1321 } 1322 return nil 1323 } 1324 1325 func (x *BotInfo) GetLastSeenTs() *timestamppb.Timestamp { 1326 if x != nil { 1327 return x.LastSeenTs 1328 } 1329 return nil 1330 } 1331 1332 func (x *BotInfo) GetIdleSinceTs() *timestamppb.Timestamp { 1333 if x != nil { 1334 return x.IdleSinceTs 1335 } 1336 return nil 1337 } 1338 1339 // PhysicalEntity includes information about an host or device. 1340 // 1341 // This can be the host where the bot runs, or a device under control of the 1342 // bot. 1343 // 1344 // If the bot runs inside a docker container, this information is about the 1345 // container, or whatever the bot can observe from its vantage point. 1346 type PhysicalEntity struct { 1347 state protoimpl.MessageState 1348 sizeCache protoimpl.SizeCache 1349 unknownFields protoimpl.UnknownFields 1350 1351 // Name that represents this physical entity. 1352 // 1353 // For a host, it shall be the hostname. For a device, it should be the device 1354 // hostname, if any. Failing that, something that makes sense to the users. 1355 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1356 // supplemental contains the free form JSON data that includes interesting 1357 // information about the device that doesn't fit in any of the fields below. 1358 // 1359 // Anything that is usable by multiple customers should eventually be moved to 1360 // a new field below. 1361 Supplemental *structpb.Struct `protobuf:"bytes,2,opt,name=supplemental,proto3" json:"supplemental,omitempty"` 1362 // IP address as visible by the bot process (bot_main) itself. 1363 // 1364 // In the case of the host, it will be one of the IP addresses assigned to it. 1365 // In the case of the host where the bot is running inside docker, it will be 1366 // the IP address assigned to the docker container. 1367 // In the case of a device, it is the IP address of the device, if any. 1368 // 1369 // Can be either IPv4 or IPv6. 1370 Ip string `protobuf:"bytes,3,opt,name=ip,proto3" json:"ip,omitempty"` 1371 } 1372 1373 func (x *PhysicalEntity) Reset() { 1374 *x = PhysicalEntity{} 1375 if protoimpl.UnsafeEnabled { 1376 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[6] 1377 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1378 ms.StoreMessageInfo(mi) 1379 } 1380 } 1381 1382 func (x *PhysicalEntity) String() string { 1383 return protoimpl.X.MessageStringOf(x) 1384 } 1385 1386 func (*PhysicalEntity) ProtoMessage() {} 1387 1388 func (x *PhysicalEntity) ProtoReflect() protoreflect.Message { 1389 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[6] 1390 if protoimpl.UnsafeEnabled && x != nil { 1391 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1392 if ms.LoadMessageInfo() == nil { 1393 ms.StoreMessageInfo(mi) 1394 } 1395 return ms 1396 } 1397 return mi.MessageOf(x) 1398 } 1399 1400 // Deprecated: Use PhysicalEntity.ProtoReflect.Descriptor instead. 1401 func (*PhysicalEntity) Descriptor() ([]byte, []int) { 1402 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{6} 1403 } 1404 1405 func (x *PhysicalEntity) GetName() string { 1406 if x != nil { 1407 return x.Name 1408 } 1409 return "" 1410 } 1411 1412 func (x *PhysicalEntity) GetSupplemental() *structpb.Struct { 1413 if x != nil { 1414 return x.Supplemental 1415 } 1416 return nil 1417 } 1418 1419 func (x *PhysicalEntity) GetIp() string { 1420 if x != nil { 1421 return x.Ip 1422 } 1423 return "" 1424 } 1425 1426 // Bot local content addressed cache information. 1427 type CASStats struct { 1428 state protoimpl.MessageState 1429 sizeCache protoimpl.SizeCache 1430 unknownFields protoimpl.UnknownFields 1431 1432 NumberItems int64 `protobuf:"varint,1,opt,name=number_items,json=numberItems,proto3" json:"number_items,omitempty"` 1433 Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` 1434 OldestTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_time,json=oldestTime,proto3" json:"oldest_time,omitempty"` 1435 } 1436 1437 func (x *CASStats) Reset() { 1438 *x = CASStats{} 1439 if protoimpl.UnsafeEnabled { 1440 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[7] 1441 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1442 ms.StoreMessageInfo(mi) 1443 } 1444 } 1445 1446 func (x *CASStats) String() string { 1447 return protoimpl.X.MessageStringOf(x) 1448 } 1449 1450 func (*CASStats) ProtoMessage() {} 1451 1452 func (x *CASStats) ProtoReflect() protoreflect.Message { 1453 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[7] 1454 if protoimpl.UnsafeEnabled && x != nil { 1455 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1456 if ms.LoadMessageInfo() == nil { 1457 ms.StoreMessageInfo(mi) 1458 } 1459 return ms 1460 } 1461 return mi.MessageOf(x) 1462 } 1463 1464 // Deprecated: Use CASStats.ProtoReflect.Descriptor instead. 1465 func (*CASStats) Descriptor() ([]byte, []int) { 1466 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{7} 1467 } 1468 1469 func (x *CASStats) GetNumberItems() int64 { 1470 if x != nil { 1471 return x.NumberItems 1472 } 1473 return 0 1474 } 1475 1476 func (x *CASStats) GetSize() int64 { 1477 if x != nil { 1478 return x.Size 1479 } 1480 return 0 1481 } 1482 1483 func (x *CASStats) GetOldestTime() *timestamppb.Timestamp { 1484 if x != nil { 1485 return x.OldestTime 1486 } 1487 return nil 1488 } 1489 1490 // Bot local named cache information. 1491 type NamedCacheStats struct { 1492 state protoimpl.MessageState 1493 sizeCache protoimpl.SizeCache 1494 unknownFields protoimpl.UnknownFields 1495 1496 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1497 Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` 1498 LastUseTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_use_time,json=lastUseTime,proto3" json:"last_use_time,omitempty"` 1499 } 1500 1501 func (x *NamedCacheStats) Reset() { 1502 *x = NamedCacheStats{} 1503 if protoimpl.UnsafeEnabled { 1504 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[8] 1505 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1506 ms.StoreMessageInfo(mi) 1507 } 1508 } 1509 1510 func (x *NamedCacheStats) String() string { 1511 return protoimpl.X.MessageStringOf(x) 1512 } 1513 1514 func (*NamedCacheStats) ProtoMessage() {} 1515 1516 func (x *NamedCacheStats) ProtoReflect() protoreflect.Message { 1517 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[8] 1518 if protoimpl.UnsafeEnabled && x != nil { 1519 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1520 if ms.LoadMessageInfo() == nil { 1521 ms.StoreMessageInfo(mi) 1522 } 1523 return ms 1524 } 1525 return mi.MessageOf(x) 1526 } 1527 1528 // Deprecated: Use NamedCacheStats.ProtoReflect.Descriptor instead. 1529 func (*NamedCacheStats) Descriptor() ([]byte, []int) { 1530 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{8} 1531 } 1532 1533 func (x *NamedCacheStats) GetName() string { 1534 if x != nil { 1535 return x.Name 1536 } 1537 return "" 1538 } 1539 1540 func (x *NamedCacheStats) GetSize() int64 { 1541 if x != nil { 1542 return x.Size 1543 } 1544 return 0 1545 } 1546 1547 func (x *NamedCacheStats) GetLastUseTime() *timestamppb.Timestamp { 1548 if x != nil { 1549 return x.LastUseTime 1550 } 1551 return nil 1552 } 1553 1554 // Bot local CIPD package cache information. 1555 type CIPDPackageCacheStats struct { 1556 state protoimpl.MessageState 1557 sizeCache protoimpl.SizeCache 1558 unknownFields protoimpl.UnknownFields 1559 1560 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1561 Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` 1562 Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"` 1563 LastUseTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_use_time,json=lastUseTime,proto3" json:"last_use_time,omitempty"` 1564 } 1565 1566 func (x *CIPDPackageCacheStats) Reset() { 1567 *x = CIPDPackageCacheStats{} 1568 if protoimpl.UnsafeEnabled { 1569 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[9] 1570 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1571 ms.StoreMessageInfo(mi) 1572 } 1573 } 1574 1575 func (x *CIPDPackageCacheStats) String() string { 1576 return protoimpl.X.MessageStringOf(x) 1577 } 1578 1579 func (*CIPDPackageCacheStats) ProtoMessage() {} 1580 1581 func (x *CIPDPackageCacheStats) ProtoReflect() protoreflect.Message { 1582 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[9] 1583 if protoimpl.UnsafeEnabled && x != nil { 1584 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1585 if ms.LoadMessageInfo() == nil { 1586 ms.StoreMessageInfo(mi) 1587 } 1588 return ms 1589 } 1590 return mi.MessageOf(x) 1591 } 1592 1593 // Deprecated: Use CIPDPackageCacheStats.ProtoReflect.Descriptor instead. 1594 func (*CIPDPackageCacheStats) Descriptor() ([]byte, []int) { 1595 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{9} 1596 } 1597 1598 func (x *CIPDPackageCacheStats) GetName() string { 1599 if x != nil { 1600 return x.Name 1601 } 1602 return "" 1603 } 1604 1605 func (x *CIPDPackageCacheStats) GetVersion() string { 1606 if x != nil { 1607 return x.Version 1608 } 1609 return "" 1610 } 1611 1612 func (x *CIPDPackageCacheStats) GetSize() int64 { 1613 if x != nil { 1614 return x.Size 1615 } 1616 return 0 1617 } 1618 1619 func (x *CIPDPackageCacheStats) GetLastUseTime() *timestamppb.Timestamp { 1620 if x != nil { 1621 return x.LastUseTime 1622 } 1623 return nil 1624 } 1625 1626 // BotEvent represents an event on the bot. 1627 // 1628 // This message is used both in the API and as a BigQuery table description for 1629 // the table 'bot_events' in dataset 'swarming'. 1630 type BotEvent struct { 1631 state protoimpl.MessageState 1632 sizeCache protoimpl.SizeCache 1633 unknownFields protoimpl.UnknownFields 1634 1635 EventTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=event_time,json=eventTime,proto3" json:"event_time,omitempty"` 1636 // Snapshot of the Bot that had this event. 1637 // 1638 // Eventually we'd want to only snapshot the difference from the previous 1639 // event, but this would make the SQL queries much more complicated. 1640 Bot *Bot `protobuf:"bytes,2,opt,name=bot,proto3" json:"bot,omitempty"` 1641 // Type of state change (event) that trigger this message. 1642 Event BotEventType `protobuf:"varint,3,opt,name=event,proto3,enum=swarming.v1.BotEventType" json:"event,omitempty"` 1643 // Supplementation information to describe the bot event. Human readable. 1644 // 1645 // See BotEventType for the meaning of this string for each status. 1646 EventMsg string `protobuf:"bytes,4,opt,name=event_msg,json=eventMsg,proto3" json:"event_msg,omitempty"` 1647 } 1648 1649 func (x *BotEvent) Reset() { 1650 *x = BotEvent{} 1651 if protoimpl.UnsafeEnabled { 1652 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[10] 1653 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1654 ms.StoreMessageInfo(mi) 1655 } 1656 } 1657 1658 func (x *BotEvent) String() string { 1659 return protoimpl.X.MessageStringOf(x) 1660 } 1661 1662 func (*BotEvent) ProtoMessage() {} 1663 1664 func (x *BotEvent) ProtoReflect() protoreflect.Message { 1665 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[10] 1666 if protoimpl.UnsafeEnabled && x != nil { 1667 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1668 if ms.LoadMessageInfo() == nil { 1669 ms.StoreMessageInfo(mi) 1670 } 1671 return ms 1672 } 1673 return mi.MessageOf(x) 1674 } 1675 1676 // Deprecated: Use BotEvent.ProtoReflect.Descriptor instead. 1677 func (*BotEvent) Descriptor() ([]byte, []int) { 1678 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{10} 1679 } 1680 1681 func (x *BotEvent) GetEventTime() *timestamppb.Timestamp { 1682 if x != nil { 1683 return x.EventTime 1684 } 1685 return nil 1686 } 1687 1688 func (x *BotEvent) GetBot() *Bot { 1689 if x != nil { 1690 return x.Bot 1691 } 1692 return nil 1693 } 1694 1695 func (x *BotEvent) GetEvent() BotEventType { 1696 if x != nil { 1697 return x.Event 1698 } 1699 return BotEventType_BOT_EVENT_TYPE_UNSPECIFIED 1700 } 1701 1702 func (x *BotEvent) GetEventMsg() string { 1703 if x != nil { 1704 return x.EventMsg 1705 } 1706 return "" 1707 } 1708 1709 // Defines a Content Addressed Storage (a cache in practice) data tree 1710 // reference, normally a reference to a .isolated file. 1711 // 1712 // Deprecated: Isoalte server is being migrated to RBE-CAS. Use `CASReference` 1713 // for the digest on RBE-CAS. 1714 // 1715 // This can be used to refer to either a task's inputs or a task's outputs. 1716 // 1717 // The .isolated file format is defined at 1718 // https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/isolate/doc/Design.md#file-format 1719 // It is a JSON file listing all the inputs. 1720 // 1721 // It is very different RBE's CAS format, which uses a merkel tree of protobuf 1722 // files. 1723 type CASTree struct { 1724 state protoimpl.MessageState 1725 sizeCache protoimpl.SizeCache 1726 unknownFields protoimpl.UnknownFields 1727 1728 // server is one of: 1729 // - The isolated server to fetch (or push) content from. Must contain 1730 // "https://" or "http://" prefix. 1731 // - The Google Cloud Project name hosting the RBE CAS. 1732 Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` 1733 // The hex encoded hash of an isolated archive. It is expected to be a SHA-1 1734 // (40 characters) or SHA-256 (64 characters), based on the namespace value 1735 // below. 1736 Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` 1737 // Namespace on the isolate server. This currently defines the hashing 1738 // algorithm and compression algorithm but is currently loosely defined. 1739 // 1740 // A prefix "sha256-" defines a SHA-256 hashing. Defaults to SHA-1. 1741 // A suffix "-deflate" or "-gzip" defines a deflate algorithm. 1742 // 1743 // When referring to a RBE CAS instance, the namespace must be set to 1744 // "sha256-GCP". The GCP RBE CAS requires SHA-256 and doesn't support 1745 // precompressed data. 1746 Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` 1747 } 1748 1749 func (x *CASTree) Reset() { 1750 *x = CASTree{} 1751 if protoimpl.UnsafeEnabled { 1752 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[11] 1753 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1754 ms.StoreMessageInfo(mi) 1755 } 1756 } 1757 1758 func (x *CASTree) String() string { 1759 return protoimpl.X.MessageStringOf(x) 1760 } 1761 1762 func (*CASTree) ProtoMessage() {} 1763 1764 func (x *CASTree) ProtoReflect() protoreflect.Message { 1765 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[11] 1766 if protoimpl.UnsafeEnabled && x != nil { 1767 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1768 if ms.LoadMessageInfo() == nil { 1769 ms.StoreMessageInfo(mi) 1770 } 1771 return ms 1772 } 1773 return mi.MessageOf(x) 1774 } 1775 1776 // Deprecated: Use CASTree.ProtoReflect.Descriptor instead. 1777 func (*CASTree) Descriptor() ([]byte, []int) { 1778 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{11} 1779 } 1780 1781 func (x *CASTree) GetServer() string { 1782 if x != nil { 1783 return x.Server 1784 } 1785 return "" 1786 } 1787 1788 func (x *CASTree) GetDigest() string { 1789 if x != nil { 1790 return x.Digest 1791 } 1792 return "" 1793 } 1794 1795 func (x *CASTree) GetNamespace() string { 1796 if x != nil { 1797 return x.Namespace 1798 } 1799 return "" 1800 } 1801 1802 type Digest struct { 1803 state protoimpl.MessageState 1804 sizeCache protoimpl.SizeCache 1805 unknownFields protoimpl.UnknownFields 1806 1807 // This is a [Digest][build.bazel.remote.execution.v2.Digest] of a blob on 1808 // RBE-CAS. See the explanations at the original definition. 1809 // https://github.com/bazelbuild/remote-apis/blob/77cfb44a88577a7ade5dd2400425f6d50469ec6d/build/bazel/remote/execution/v2/remote_execution.proto#L753-L791 1810 Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` 1811 SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` 1812 } 1813 1814 func (x *Digest) Reset() { 1815 *x = Digest{} 1816 if protoimpl.UnsafeEnabled { 1817 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[12] 1818 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1819 ms.StoreMessageInfo(mi) 1820 } 1821 } 1822 1823 func (x *Digest) String() string { 1824 return protoimpl.X.MessageStringOf(x) 1825 } 1826 1827 func (*Digest) ProtoMessage() {} 1828 1829 func (x *Digest) ProtoReflect() protoreflect.Message { 1830 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[12] 1831 if protoimpl.UnsafeEnabled && x != nil { 1832 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1833 if ms.LoadMessageInfo() == nil { 1834 ms.StoreMessageInfo(mi) 1835 } 1836 return ms 1837 } 1838 return mi.MessageOf(x) 1839 } 1840 1841 // Deprecated: Use Digest.ProtoReflect.Descriptor instead. 1842 func (*Digest) Descriptor() ([]byte, []int) { 1843 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{12} 1844 } 1845 1846 func (x *Digest) GetHash() string { 1847 if x != nil { 1848 return x.Hash 1849 } 1850 return "" 1851 } 1852 1853 func (x *Digest) GetSizeBytes() int64 { 1854 if x != nil { 1855 return x.SizeBytes 1856 } 1857 return 0 1858 } 1859 1860 type CASReference struct { 1861 state protoimpl.MessageState 1862 sizeCache protoimpl.SizeCache 1863 unknownFields protoimpl.UnknownFields 1864 1865 // Full name of RBE-CAS instance. `projects/{project_id}/instances/{instance}`. 1866 // e.g. projects/chromium-swarm/instances/default_instance 1867 CasInstance string `protobuf:"bytes,1,opt,name=cas_instance,json=casInstance,proto3" json:"cas_instance,omitempty"` 1868 // CAS Digest consists of hash and size bytes. 1869 Digest *Digest `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` 1870 } 1871 1872 func (x *CASReference) Reset() { 1873 *x = CASReference{} 1874 if protoimpl.UnsafeEnabled { 1875 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[13] 1876 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1877 ms.StoreMessageInfo(mi) 1878 } 1879 } 1880 1881 func (x *CASReference) String() string { 1882 return protoimpl.X.MessageStringOf(x) 1883 } 1884 1885 func (*CASReference) ProtoMessage() {} 1886 1887 func (x *CASReference) ProtoReflect() protoreflect.Message { 1888 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[13] 1889 if protoimpl.UnsafeEnabled && x != nil { 1890 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1891 if ms.LoadMessageInfo() == nil { 1892 ms.StoreMessageInfo(mi) 1893 } 1894 return ms 1895 } 1896 return mi.MessageOf(x) 1897 } 1898 1899 // Deprecated: Use CASReference.ProtoReflect.Descriptor instead. 1900 func (*CASReference) Descriptor() ([]byte, []int) { 1901 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{13} 1902 } 1903 1904 func (x *CASReference) GetCasInstance() string { 1905 if x != nil { 1906 return x.CasInstance 1907 } 1908 return "" 1909 } 1910 1911 func (x *CASReference) GetDigest() *Digest { 1912 if x != nil { 1913 return x.Digest 1914 } 1915 return nil 1916 } 1917 1918 // Defines one CIPD package to install prior to running the task. 1919 // 1920 // CIPD packages are versioned and ACL'ed packages that are meant for tools that 1921 // are kept for a long time. 1922 type CIPDPackage struct { 1923 state protoimpl.MessageState 1924 sizeCache protoimpl.SizeCache 1925 unknownFields protoimpl.UnknownFields 1926 1927 // The template for the CIPD package name that will have its variables 1928 // evaluated, e.g. "infra/tools/authutil/${platform}". 1929 // 1930 // TODO(vadimsh): Link to documentation of the variable usable. 1931 PackageName string `protobuf:"bytes,1,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"` 1932 // Valid package version for the requested package. 1933 Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` 1934 // Path to directory relative to the task's root dir, where the package is to 1935 // be installed. 1936 // 1937 // If empty, the package will be installed at the root of the mapped 1938 // directory. If file names in the package and in the isolate clash, it will 1939 // cause a failure. 1940 DestPath string `protobuf:"bytes,3,opt,name=dest_path,json=destPath,proto3" json:"dest_path,omitempty"` 1941 } 1942 1943 func (x *CIPDPackage) Reset() { 1944 *x = CIPDPackage{} 1945 if protoimpl.UnsafeEnabled { 1946 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[14] 1947 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1948 ms.StoreMessageInfo(mi) 1949 } 1950 } 1951 1952 func (x *CIPDPackage) String() string { 1953 return protoimpl.X.MessageStringOf(x) 1954 } 1955 1956 func (*CIPDPackage) ProtoMessage() {} 1957 1958 func (x *CIPDPackage) ProtoReflect() protoreflect.Message { 1959 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[14] 1960 if protoimpl.UnsafeEnabled && x != nil { 1961 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1962 if ms.LoadMessageInfo() == nil { 1963 ms.StoreMessageInfo(mi) 1964 } 1965 return ms 1966 } 1967 return mi.MessageOf(x) 1968 } 1969 1970 // Deprecated: Use CIPDPackage.ProtoReflect.Descriptor instead. 1971 func (*CIPDPackage) Descriptor() ([]byte, []int) { 1972 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{14} 1973 } 1974 1975 func (x *CIPDPackage) GetPackageName() string { 1976 if x != nil { 1977 return x.PackageName 1978 } 1979 return "" 1980 } 1981 1982 func (x *CIPDPackage) GetVersion() string { 1983 if x != nil { 1984 return x.Version 1985 } 1986 return "" 1987 } 1988 1989 func (x *CIPDPackage) GetDestPath() string { 1990 if x != nil { 1991 return x.DestPath 1992 } 1993 return "" 1994 } 1995 1996 // Describes a named cache that should be reused on the bot. 1997 // 1998 // A NamedCacheEntry in a task specifies that the task wants a directory to be 1999 // persisted on the bot across tasks. 2000 // 2001 // The cache directory is created at <run_dir>/|path|. If the cache was not 2002 // present on the bot prior the task's execution, the directory is empty when 2003 // the task starts. Any change done in the directory by the task is persisted on 2004 // the bot after the task completes. 2005 // 2006 // If another task runs on the same bot and requests the same named cache, even 2007 // if mapped to a different path, it will get the updated content. 2008 type NamedCacheEntry struct { 2009 state protoimpl.MessageState 2010 sizeCache protoimpl.SizeCache 2011 unknownFields protoimpl.UnknownFields 2012 2013 // Unique name of the cache. Required. Length is limited to 4096. 2014 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 2015 // Path to directory relative to the task's root dir, where the named cache is 2016 // to be installed. 2017 // 2018 // A path cannot be shared among multiple caches or CIPD installations. 2019 // A task will fail if a file/dir with the same name already exists. 2020 DestPath string `protobuf:"bytes,2,opt,name=dest_path,json=destPath,proto3" json:"dest_path,omitempty"` 2021 } 2022 2023 func (x *NamedCacheEntry) Reset() { 2024 *x = NamedCacheEntry{} 2025 if protoimpl.UnsafeEnabled { 2026 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[15] 2027 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2028 ms.StoreMessageInfo(mi) 2029 } 2030 } 2031 2032 func (x *NamedCacheEntry) String() string { 2033 return protoimpl.X.MessageStringOf(x) 2034 } 2035 2036 func (*NamedCacheEntry) ProtoMessage() {} 2037 2038 func (x *NamedCacheEntry) ProtoReflect() protoreflect.Message { 2039 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[15] 2040 if protoimpl.UnsafeEnabled && x != nil { 2041 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2042 if ms.LoadMessageInfo() == nil { 2043 ms.StoreMessageInfo(mi) 2044 } 2045 return ms 2046 } 2047 return mi.MessageOf(x) 2048 } 2049 2050 // Deprecated: Use NamedCacheEntry.ProtoReflect.Descriptor instead. 2051 func (*NamedCacheEntry) Descriptor() ([]byte, []int) { 2052 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{15} 2053 } 2054 2055 func (x *NamedCacheEntry) GetName() string { 2056 if x != nil { 2057 return x.Name 2058 } 2059 return "" 2060 } 2061 2062 func (x *NamedCacheEntry) GetDestPath() string { 2063 if x != nil { 2064 return x.DestPath 2065 } 2066 return "" 2067 } 2068 2069 // Defines the type of containment to use to put the task primary process 2070 // inside. 2071 // 2072 // TODO(maruel): https://crbug.com/808836 2073 // 2074 // This is highly OS specific: 2075 // - Lower the integrity level on Windows. https://crbug.com/916586 2076 // - Job Object on Windows. https://crbug.com/732818 2077 // - Docker on Linux or Windows. https://crbug.com/916584 2078 // - cgroup on Linux. https://crbug.com/764493 2079 // - Creating a temporary user on Windows and macOS. https://crbug.com/916585 2080 // - Lightweight home directory override on Windows, Linux and macOS. 2081 // https://crbug.com/811411 2082 type Containment struct { 2083 state protoimpl.MessageState 2084 sizeCache protoimpl.SizeCache 2085 unknownFields protoimpl.UnknownFields 2086 2087 // Lowers the priority of the task process when started. Doesn't require 2088 // containment. This gives the bot a chance to survive when the task starts an 2089 // overwhelming number of children processes. 2090 LowerPriority bool `protobuf:"varint,1,opt,name=lower_priority,json=lowerPriority,proto3" json:"lower_priority,omitempty"` 2091 // Defines the type of containment used. 2092 ContainmentType Containment_ContainmentType `protobuf:"varint,2,opt,name=containment_type,json=containmentType,proto3,enum=swarming.v1.Containment_ContainmentType" json:"containment_type,omitempty"` 2093 // Limits the number of concurrent active processes. 2094 LimitProcesses int64 `protobuf:"varint,3,opt,name=limit_processes,json=limitProcesses,proto3" json:"limit_processes,omitempty"` 2095 // Limits the total amount of memory allocated by processes. 2096 LimitTotalCommittedMemory int64 `protobuf:"varint,4,opt,name=limit_total_committed_memory,json=limitTotalCommittedMemory,proto3" json:"limit_total_committed_memory,omitempty"` 2097 } 2098 2099 func (x *Containment) Reset() { 2100 *x = Containment{} 2101 if protoimpl.UnsafeEnabled { 2102 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[16] 2103 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2104 ms.StoreMessageInfo(mi) 2105 } 2106 } 2107 2108 func (x *Containment) String() string { 2109 return protoimpl.X.MessageStringOf(x) 2110 } 2111 2112 func (*Containment) ProtoMessage() {} 2113 2114 func (x *Containment) ProtoReflect() protoreflect.Message { 2115 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[16] 2116 if protoimpl.UnsafeEnabled && x != nil { 2117 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2118 if ms.LoadMessageInfo() == nil { 2119 ms.StoreMessageInfo(mi) 2120 } 2121 return ms 2122 } 2123 return mi.MessageOf(x) 2124 } 2125 2126 // Deprecated: Use Containment.ProtoReflect.Descriptor instead. 2127 func (*Containment) Descriptor() ([]byte, []int) { 2128 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{16} 2129 } 2130 2131 func (x *Containment) GetLowerPriority() bool { 2132 if x != nil { 2133 return x.LowerPriority 2134 } 2135 return false 2136 } 2137 2138 func (x *Containment) GetContainmentType() Containment_ContainmentType { 2139 if x != nil { 2140 return x.ContainmentType 2141 } 2142 return Containment_NOT_SPECIFIED 2143 } 2144 2145 func (x *Containment) GetLimitProcesses() int64 { 2146 if x != nil { 2147 return x.LimitProcesses 2148 } 2149 return 0 2150 } 2151 2152 func (x *Containment) GetLimitTotalCommittedMemory() int64 { 2153 if x != nil { 2154 return x.LimitTotalCommittedMemory 2155 } 2156 return 0 2157 } 2158 2159 // Defines the 'what' to run. 2160 // 2161 // A serialization of this message is hashed and this hash is what is used for 2162 // task deduping. 2163 // NEXT_ID: 20 2164 type TaskProperties struct { 2165 state protoimpl.MessageState 2166 sizeCache protoimpl.SizeCache 2167 unknownFields protoimpl.UnknownFields 2168 2169 // Isolated inputs to map in the working directory. 2170 // 2171 // Deprecated: Isolate server is being migrated to RBE-CAS. `cas_input_root` 2172 // will be used to reference to the input root on RBE-CAS. 2173 // Deprecated: the isolated file may optionally specify a command to run. 2174 // Otherwise, 'command' must be specified. 2175 CasInputs *CASTree `protobuf:"bytes,1,opt,name=cas_inputs,json=casInputs,proto3" json:"cas_inputs,omitempty"` 2176 // Digest of the input root on RBE-CAS. 2177 // cas_input_root.digest MUST be digest of [build.bazel.remote.execution.v2.Directory]. 2178 CasInputRoot *CASReference `protobuf:"bytes,18,opt,name=cas_input_root,json=casInputRoot,proto3" json:"cas_input_root,omitempty"` 2179 // Defines the set of CIPD packages to install prior to running the task. 2180 // 2181 // These packages are meant to be software that is needed (a dependency) by 2182 // the task being run. Unlike isolated files from cas_inputs, the CIPD 2183 // packages do not expire from the server. 2184 // 2185 // Items must be sorted per the CIPD package name. 2186 CipdInputs []*CIPDPackage `protobuf:"bytes,2,rep,name=cipd_inputs,json=cipdInputs,proto3" json:"cipd_inputs,omitempty"` 2187 // Specifies named caches to map into the working directory. These caches 2188 // outlive the task, which can then be reused by tasks later used on this bot 2189 // that request the same named cache. 2190 // 2191 // Items must be sorted per the named cache name. 2192 NamedCaches []*NamedCacheEntry `protobuf:"bytes,3,rep,name=named_caches,json=namedCaches,proto3" json:"named_caches,omitempty"` 2193 // Command to run. This has priority over a command specified in the isolated 2194 // files. 2195 Command []string `protobuf:"bytes,4,rep,name=command,proto3" json:"command,omitempty"` 2196 // Relative working directory to start the 'command' in, defaults to the root 2197 // mapped directory or what is provided in the isolated file, if any. 2198 RelativeCwd string `protobuf:"bytes,5,opt,name=relative_cwd,json=relativeCwd,proto3" json:"relative_cwd,omitempty"` 2199 // Extraneous arguments to append to the command specified in the isolated 2200 // file. Can only be used when an isolated file specifies a command. 2201 // 2202 // Deprecated. 2203 ExtraArgs []string `protobuf:"bytes,6,rep,name=extra_args,json=extraArgs,proto3" json:"extra_args,omitempty"` 2204 // Secret bytes to provide to the task. Write only, cannot be retrieved back. 2205 SecretBytes []byte `protobuf:"bytes,7,opt,name=secret_bytes,json=secretBytes,proto3" json:"secret_bytes,omitempty"` 2206 // When retrieved back, has_secret_bytes is set to true. 2207 HasSecretBytes bool `protobuf:"varint,8,opt,name=has_secret_bytes,json=hasSecretBytes,proto3" json:"has_secret_bytes,omitempty"` 2208 // Dimensions are what is used to determine which bot can run the task. 2209 // 2210 // The values are effectively an AND, a bot must match all dimensions to be 2211 // selected to run the task. 2212 // 2213 // Items must be sorted. 2214 Dimensions []*StringListPair `protobuf:"bytes,9,rep,name=dimensions,proto3" json:"dimensions,omitempty"` 2215 // Environment variables to set when running the task. 2216 // 2217 // Items must be sorted. 2218 Env []*StringPair `protobuf:"bytes,10,rep,name=env,proto3" json:"env,omitempty"` 2219 // Task root relative paths to prepend to a given environment variable. 2220 // 2221 // This allows one to safely modify variables like PATH, PYTHONPATH, or other 2222 // PATH-like environment variables. The order of operations is: 2223 // - Turn slashes into native-platform slashes 2224 // - Make the path absolute 2225 // - Prepend it to the current value of the envvar using the os-native list 2226 // separator (`;` on Windows, `:` on POSIX) 2227 // 2228 // Each key can have multiple paths to prepend. They will be prepended in 2229 // the order seen here. 2230 // 2231 // For example, if env_paths is: 2232 // 2233 // [ (key="PATH", values=["foo", "bar"]), 2234 // (key="CUSTOMPATH", values=["custom"]), ] 2235 // 2236 // The task would see: 2237 // 2238 // PATH=/path/to/swarming/rundir/foo:/path/to/swarming/rundir/bar:$PATH 2239 // CUSTOMPATH=/path/to/swarming/rundir/custom 2240 // 2241 // Paths must always be specified here with forward-slashes, and must not 2242 // attempt to escape the task's root (i.e. must not contain `..`). 2243 // 2244 // This is applied AFTER evaluating `env`. 2245 // 2246 // Items must be sorted by key, but exceptionally not by values. 2247 EnvPaths []*StringListPair `protobuf:"bytes,11,rep,name=env_paths,json=envPaths,proto3" json:"env_paths,omitempty"` 2248 // Declare what kind of containment shall be used to run the task process 2249 // in. 2250 Containment *Containment `protobuf:"bytes,12,opt,name=containment,proto3" json:"containment,omitempty"` // Not used yet. https://crbug.com/808836 2251 // Maximum number of seconds the task can run before its process is forcibly 2252 // terminated and the task results in TIMED_OUT. 2253 ExecutionTimeout *durationpb.Duration `protobuf:"bytes,13,opt,name=execution_timeout,json=executionTimeout,proto3" json:"execution_timeout,omitempty"` 2254 // Maximum number of seconds the task may be silent (no output to stdout nor 2255 // stderr) before it is considered hung and it forcibly terminated early and 2256 // the task results in TIMED_OUT_SILENCE. 2257 IoTimeout *durationpb.Duration `protobuf:"bytes,14,opt,name=io_timeout,json=ioTimeout,proto3" json:"io_timeout,omitempty"` 2258 // Number of second to give the child process after a SIGTERM before sending a 2259 // SIGKILL. See ../../doc/Bot.md#timeout-handling 2260 GracePeriod *durationpb.Duration `protobuf:"bytes,15,opt,name=grace_period,json=gracePeriod,proto3" json:"grace_period,omitempty"` 2261 // True if the task does not access any service through the network and is 2262 // believed to be certain to produce the same output given the same input. In 2263 // the case of a successful task, previous results will be reused if possible, 2264 // leading to DEDUPED task result for the tasks that could reuse previous 2265 // task's outcome. 2266 Idempotent bool `protobuf:"varint,16,opt,name=idempotent,proto3" json:"idempotent,omitempty"` 2267 // Paths in the working directory to archive back and store as 2268 // TaskResult.outputs. 2269 // 2270 // Items must be sorted. 2271 Outputs []string `protobuf:"bytes,17,rep,name=outputs,proto3" json:"outputs,omitempty"` 2272 // User to run the task as. 2273 User User `protobuf:"varint,19,opt,name=user,proto3,enum=swarming.v1.User" json:"user,omitempty"` 2274 } 2275 2276 func (x *TaskProperties) Reset() { 2277 *x = TaskProperties{} 2278 if protoimpl.UnsafeEnabled { 2279 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[17] 2280 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2281 ms.StoreMessageInfo(mi) 2282 } 2283 } 2284 2285 func (x *TaskProperties) String() string { 2286 return protoimpl.X.MessageStringOf(x) 2287 } 2288 2289 func (*TaskProperties) ProtoMessage() {} 2290 2291 func (x *TaskProperties) ProtoReflect() protoreflect.Message { 2292 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[17] 2293 if protoimpl.UnsafeEnabled && x != nil { 2294 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2295 if ms.LoadMessageInfo() == nil { 2296 ms.StoreMessageInfo(mi) 2297 } 2298 return ms 2299 } 2300 return mi.MessageOf(x) 2301 } 2302 2303 // Deprecated: Use TaskProperties.ProtoReflect.Descriptor instead. 2304 func (*TaskProperties) Descriptor() ([]byte, []int) { 2305 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{17} 2306 } 2307 2308 func (x *TaskProperties) GetCasInputs() *CASTree { 2309 if x != nil { 2310 return x.CasInputs 2311 } 2312 return nil 2313 } 2314 2315 func (x *TaskProperties) GetCasInputRoot() *CASReference { 2316 if x != nil { 2317 return x.CasInputRoot 2318 } 2319 return nil 2320 } 2321 2322 func (x *TaskProperties) GetCipdInputs() []*CIPDPackage { 2323 if x != nil { 2324 return x.CipdInputs 2325 } 2326 return nil 2327 } 2328 2329 func (x *TaskProperties) GetNamedCaches() []*NamedCacheEntry { 2330 if x != nil { 2331 return x.NamedCaches 2332 } 2333 return nil 2334 } 2335 2336 func (x *TaskProperties) GetCommand() []string { 2337 if x != nil { 2338 return x.Command 2339 } 2340 return nil 2341 } 2342 2343 func (x *TaskProperties) GetRelativeCwd() string { 2344 if x != nil { 2345 return x.RelativeCwd 2346 } 2347 return "" 2348 } 2349 2350 func (x *TaskProperties) GetExtraArgs() []string { 2351 if x != nil { 2352 return x.ExtraArgs 2353 } 2354 return nil 2355 } 2356 2357 func (x *TaskProperties) GetSecretBytes() []byte { 2358 if x != nil { 2359 return x.SecretBytes 2360 } 2361 return nil 2362 } 2363 2364 func (x *TaskProperties) GetHasSecretBytes() bool { 2365 if x != nil { 2366 return x.HasSecretBytes 2367 } 2368 return false 2369 } 2370 2371 func (x *TaskProperties) GetDimensions() []*StringListPair { 2372 if x != nil { 2373 return x.Dimensions 2374 } 2375 return nil 2376 } 2377 2378 func (x *TaskProperties) GetEnv() []*StringPair { 2379 if x != nil { 2380 return x.Env 2381 } 2382 return nil 2383 } 2384 2385 func (x *TaskProperties) GetEnvPaths() []*StringListPair { 2386 if x != nil { 2387 return x.EnvPaths 2388 } 2389 return nil 2390 } 2391 2392 func (x *TaskProperties) GetContainment() *Containment { 2393 if x != nil { 2394 return x.Containment 2395 } 2396 return nil 2397 } 2398 2399 func (x *TaskProperties) GetExecutionTimeout() *durationpb.Duration { 2400 if x != nil { 2401 return x.ExecutionTimeout 2402 } 2403 return nil 2404 } 2405 2406 func (x *TaskProperties) GetIoTimeout() *durationpb.Duration { 2407 if x != nil { 2408 return x.IoTimeout 2409 } 2410 return nil 2411 } 2412 2413 func (x *TaskProperties) GetGracePeriod() *durationpb.Duration { 2414 if x != nil { 2415 return x.GracePeriod 2416 } 2417 return nil 2418 } 2419 2420 func (x *TaskProperties) GetIdempotent() bool { 2421 if x != nil { 2422 return x.Idempotent 2423 } 2424 return false 2425 } 2426 2427 func (x *TaskProperties) GetOutputs() []string { 2428 if x != nil { 2429 return x.Outputs 2430 } 2431 return nil 2432 } 2433 2434 func (x *TaskProperties) GetUser() User { 2435 if x != nil { 2436 return x.User 2437 } 2438 return User_USER_UNSPECIFIED 2439 } 2440 2441 // Defines a possible task execution for a task request to be run on the 2442 // Swarming infrastructure. 2443 // 2444 // When there is more than TaskSlice specified in TaskRequest, the second 2445 // TaskSlice onwards represent possible fallbacks. 2446 type TaskSlice struct { 2447 state protoimpl.MessageState 2448 sizeCache protoimpl.SizeCache 2449 unknownFields protoimpl.UnknownFields 2450 2451 // The property of the task to try to run. 2452 // 2453 // If there is no bot that can serve this properties.dimensions when this task 2454 // slice is enqueued, it is immediately denied. This can trigger if: 2455 // - There is no bot with these dimensions currently known (NO_RESOURCE). 2456 // - Bots that could run this task are either all missing or quarantined. 2457 Properties *TaskProperties `protobuf:"bytes,1,opt,name=properties,proto3" json:"properties,omitempty"` 2458 // If this task slice is not scheduled after waiting this long, the next one 2459 // will be processed. 2460 Expiration *durationpb.Duration `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"` 2461 // When a task is scheduled and there are currently no bots available to run 2462 // the task, the TaskSlice can either be PENDING, or be denied immediately. 2463 // When denied, the next TaskSlice is enqueued, and if there's no following 2464 // TaskSlice, the task state is set to NO_RESOURCE. This should normally be 2465 // set to False to avoid unnecessary waiting. 2466 WaitForCapacity bool `protobuf:"varint,3,opt,name=wait_for_capacity,json=waitForCapacity,proto3" json:"wait_for_capacity,omitempty"` 2467 // Digest of a serialized form of TaskProperties. 2468 // 2469 // This is used for DEDUPED and PENDING_DEDUPING when idempotent is true. 2470 // Consider this value as opaque string, only use to check equality. 2471 // 2472 // It is set even if idempotent is false. 2473 PropertiesHash string `protobuf:"bytes,4,opt,name=properties_hash,json=propertiesHash,proto3" json:"properties_hash,omitempty"` 2474 } 2475 2476 func (x *TaskSlice) Reset() { 2477 *x = TaskSlice{} 2478 if protoimpl.UnsafeEnabled { 2479 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[18] 2480 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2481 ms.StoreMessageInfo(mi) 2482 } 2483 } 2484 2485 func (x *TaskSlice) String() string { 2486 return protoimpl.X.MessageStringOf(x) 2487 } 2488 2489 func (*TaskSlice) ProtoMessage() {} 2490 2491 func (x *TaskSlice) ProtoReflect() protoreflect.Message { 2492 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[18] 2493 if protoimpl.UnsafeEnabled && x != nil { 2494 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2495 if ms.LoadMessageInfo() == nil { 2496 ms.StoreMessageInfo(mi) 2497 } 2498 return ms 2499 } 2500 return mi.MessageOf(x) 2501 } 2502 2503 // Deprecated: Use TaskSlice.ProtoReflect.Descriptor instead. 2504 func (*TaskSlice) Descriptor() ([]byte, []int) { 2505 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{18} 2506 } 2507 2508 func (x *TaskSlice) GetProperties() *TaskProperties { 2509 if x != nil { 2510 return x.Properties 2511 } 2512 return nil 2513 } 2514 2515 func (x *TaskSlice) GetExpiration() *durationpb.Duration { 2516 if x != nil { 2517 return x.Expiration 2518 } 2519 return nil 2520 } 2521 2522 func (x *TaskSlice) GetWaitForCapacity() bool { 2523 if x != nil { 2524 return x.WaitForCapacity 2525 } 2526 return false 2527 } 2528 2529 func (x *TaskSlice) GetPropertiesHash() string { 2530 if x != nil { 2531 return x.PropertiesHash 2532 } 2533 return "" 2534 } 2535 2536 // This message is used to create a new task and can be retrieved back, except 2537 // for a few write-only fields. 2538 // 2539 // A TaskRequest is immutable, it cannot be updated once created. 2540 type TaskRequest struct { 2541 state protoimpl.MessageState 2542 sizeCache protoimpl.SizeCache 2543 unknownFields protoimpl.UnknownFields 2544 2545 // List of TaskSlice, along with their scheduling parameters. 2546 // 2547 // This defines all the various possible task execution for a task request to 2548 // be run on the Swarming infrastructure. They are processed in order, and it 2549 // is guaranteed that at most one of these will be processed. 2550 // 2551 // At least one must be specified, and a maximum number of 8 can be included. 2552 TaskSlices []*TaskSlice `protobuf:"bytes,1,rep,name=task_slices,json=taskSlices,proto3" json:"task_slices,omitempty"` 2553 // Task priority, the lower the more important. 2554 // 2555 // Valid values are between 1 and 255. 2556 Priority int32 `protobuf:"varint,2,opt,name=priority,proto3" json:"priority,omitempty"` 2557 // Defines what OAuth2 credentials the task uses when calling other services. 2558 // 2559 // Possible values are: 2560 // - 'none': do not use a task service account at all, this is the default. 2561 // - 'bot': use bot's own account, works only if bots authenticate with 2562 // OAuth2. 2563 // - <some email>: use this specific service account if it is allowed in the 2564 // pool (via 'allowed_service_account' pools.cfg setting) and configured 2565 // in the token server's service_accounts.cfg. 2566 // 2567 // Note that the service account name is specified outside of task properties, 2568 // and thus it is possible to have two tasks with different service accounts, 2569 // but identical properties hash (so one can be deduped). If this is 2570 // unsuitable use 'idempotent=False' or include a service account name in 2571 // properties separately. 2572 ServiceAccount string `protobuf:"bytes,3,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"` 2573 // When the task was created. 2574 CreateTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` 2575 // Task name for display purpose. 2576 // 2577 // Note: this value is not indexed. If you want to be able to query for tasks 2578 // based on names, use tags below. 2579 Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` 2580 // Tags are 'key:value' strings that describes what the task is about (it's 2581 // semantic meaning). 2582 // 2583 // It is fine to reuse the same 'key' multiple times. It is not fine to use a 2584 // key that is also used as a dimension. 2585 // 2586 // The tags are indexed, thus can be used for search with exact matches. 2587 // 2588 // Items must be sorted. 2589 Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"` 2590 // User for this task is run, if relevant. Not validated. 2591 User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"` 2592 // Authenticated client that triggered this task. 2593 Authenticated string `protobuf:"bytes,13,opt,name=authenticated,proto3" json:"authenticated,omitempty"` 2594 // Task realm is used to control who can interact with the task e.g. get, 2595 // cancel etc, and which task service accounts can be used in the realm. 2596 Realm string `protobuf:"bytes,14,opt,name=realm,proto3" json:"realm,omitempty"` 2597 // Swarming:ResultDB integration configuration for a task. 2598 Resultdb *ResultDBCfg `protobuf:"bytes,15,opt,name=resultdb,proto3" json:"resultdb,omitempty"` 2599 // The task request ID. 2600 // 2601 // The request wasn't "run" so it is the same ID as the summary (ending with 2602 // '0'). 2603 TaskId string `protobuf:"bytes,8,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` 2604 // Parent Swarming task summary ID of the process requesting this task. 2605 // 2606 // This points to the TaskResult.task_id (ending with '0'). Note that an 2607 // idempotent task can be automatically retried by Swarming, which may result 2608 // in two TaskResult with the same task_id but different run_id. 2609 // 2610 // This field is read-only and derived from parent_run_id. It cannot be 2611 // specified at task creation. 2612 ParentTaskId string `protobuf:"bytes,9,opt,name=parent_task_id,json=parentTaskId,proto3" json:"parent_task_id,omitempty"` 2613 // Parent Swarming task run ID of the process requesting this task. 2614 // 2615 // This field is set on the children tasks when a Swarming task creates 2616 // children Swarming tasks. 2617 // 2618 // This points to the TaskResult.run_id (ending with '1', '2' or more). 2619 ParentRunId string `protobuf:"bytes,11,opt,name=parent_run_id,json=parentRunId,proto3" json:"parent_run_id,omitempty"` 2620 // Root task id, independent of the depth of recursive tasks. 2621 RootTaskId string `protobuf:"bytes,16,opt,name=root_task_id,json=rootTaskId,proto3" json:"root_task_id,omitempty"` 2622 // Root task run id, independent of the depth of recursive tasks. 2623 RootRunId string `protobuf:"bytes,17,opt,name=root_run_id,json=rootRunId,proto3" json:"root_run_id,omitempty"` 2624 // Send notification to this pubsub topic for updates of this task. 2625 PubsubNotification *PubSub `protobuf:"bytes,10,opt,name=pubsub_notification,json=pubsubNotification,proto3" json:"pubsub_notification,omitempty"` 2626 // Maximum delay between bot pings before the bot is considered dead 2627 // while running a task. 2628 // 2629 // When a task is running, the bot sends update to the server every 2630 // few seconds. In some cases, like when the system is overloaded, 2631 // the bot may be preempted and delayed in sending its updates. 2632 // After the delay specified here, the server will claim the bot to 2633 // be dead and will forcibly abort the task as BOT_DIED. This is to 2634 // catch system wide issues like a BSOD. 2635 BotPingTolerance *durationpb.Duration `protobuf:"bytes,12,opt,name=bot_ping_tolerance,json=botPingTolerance,proto3" json:"bot_ping_tolerance,omitempty"` 2636 } 2637 2638 func (x *TaskRequest) Reset() { 2639 *x = TaskRequest{} 2640 if protoimpl.UnsafeEnabled { 2641 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[19] 2642 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2643 ms.StoreMessageInfo(mi) 2644 } 2645 } 2646 2647 func (x *TaskRequest) String() string { 2648 return protoimpl.X.MessageStringOf(x) 2649 } 2650 2651 func (*TaskRequest) ProtoMessage() {} 2652 2653 func (x *TaskRequest) ProtoReflect() protoreflect.Message { 2654 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[19] 2655 if protoimpl.UnsafeEnabled && x != nil { 2656 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2657 if ms.LoadMessageInfo() == nil { 2658 ms.StoreMessageInfo(mi) 2659 } 2660 return ms 2661 } 2662 return mi.MessageOf(x) 2663 } 2664 2665 // Deprecated: Use TaskRequest.ProtoReflect.Descriptor instead. 2666 func (*TaskRequest) Descriptor() ([]byte, []int) { 2667 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{19} 2668 } 2669 2670 func (x *TaskRequest) GetTaskSlices() []*TaskSlice { 2671 if x != nil { 2672 return x.TaskSlices 2673 } 2674 return nil 2675 } 2676 2677 func (x *TaskRequest) GetPriority() int32 { 2678 if x != nil { 2679 return x.Priority 2680 } 2681 return 0 2682 } 2683 2684 func (x *TaskRequest) GetServiceAccount() string { 2685 if x != nil { 2686 return x.ServiceAccount 2687 } 2688 return "" 2689 } 2690 2691 func (x *TaskRequest) GetCreateTime() *timestamppb.Timestamp { 2692 if x != nil { 2693 return x.CreateTime 2694 } 2695 return nil 2696 } 2697 2698 func (x *TaskRequest) GetName() string { 2699 if x != nil { 2700 return x.Name 2701 } 2702 return "" 2703 } 2704 2705 func (x *TaskRequest) GetTags() []string { 2706 if x != nil { 2707 return x.Tags 2708 } 2709 return nil 2710 } 2711 2712 func (x *TaskRequest) GetUser() string { 2713 if x != nil { 2714 return x.User 2715 } 2716 return "" 2717 } 2718 2719 func (x *TaskRequest) GetAuthenticated() string { 2720 if x != nil { 2721 return x.Authenticated 2722 } 2723 return "" 2724 } 2725 2726 func (x *TaskRequest) GetRealm() string { 2727 if x != nil { 2728 return x.Realm 2729 } 2730 return "" 2731 } 2732 2733 func (x *TaskRequest) GetResultdb() *ResultDBCfg { 2734 if x != nil { 2735 return x.Resultdb 2736 } 2737 return nil 2738 } 2739 2740 func (x *TaskRequest) GetTaskId() string { 2741 if x != nil { 2742 return x.TaskId 2743 } 2744 return "" 2745 } 2746 2747 func (x *TaskRequest) GetParentTaskId() string { 2748 if x != nil { 2749 return x.ParentTaskId 2750 } 2751 return "" 2752 } 2753 2754 func (x *TaskRequest) GetParentRunId() string { 2755 if x != nil { 2756 return x.ParentRunId 2757 } 2758 return "" 2759 } 2760 2761 func (x *TaskRequest) GetRootTaskId() string { 2762 if x != nil { 2763 return x.RootTaskId 2764 } 2765 return "" 2766 } 2767 2768 func (x *TaskRequest) GetRootRunId() string { 2769 if x != nil { 2770 return x.RootRunId 2771 } 2772 return "" 2773 } 2774 2775 func (x *TaskRequest) GetPubsubNotification() *PubSub { 2776 if x != nil { 2777 return x.PubsubNotification 2778 } 2779 return nil 2780 } 2781 2782 func (x *TaskRequest) GetBotPingTolerance() *durationpb.Duration { 2783 if x != nil { 2784 return x.BotPingTolerance 2785 } 2786 return nil 2787 } 2788 2789 // PubSub is a Cloud Pub/Sub topic to send task updates to. 2790 // 2791 // For this to work, the Swarming's AppEngine service account must have 2792 // roles/pubsub.publisher role on the Cloud Pub/Sub topic. 2793 // 2794 // For a Swarming instance "FOOBAR.appspot.com", the service account to grant 2795 // publisher right is "FOOBAR@@appspot.gserviceaccount.com". 2796 // 2797 // This is described at https://cloud.google.com/pubsub/docs/access-control. 2798 // 2799 // To grant Swarming instance FOOBAR.appspot.com publisher rights to topic 2800 // projects/PROJ/topics/TOP, use: 2801 // 2802 // gcloud beta pubsub topics add-iam-policy-binding \ 2803 // TOP \ 2804 // --project PROJ \ 2805 // --member serviceAccount:FOOBAR@appspot.gserviceaccount.com \ 2806 // --role roles/pubsub.publisher 2807 // 2808 // See https://cloud.google.com/pubsub/docs/authentication for more 2809 // information. 2810 type PubSub struct { 2811 state protoimpl.MessageState 2812 sizeCache protoimpl.SizeCache 2813 unknownFields protoimpl.UnknownFields 2814 2815 // Full topic name to post task state updates to, e.g. 2816 // "projects/<id>/topics/<id>". 2817 Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` 2818 // Secret string to put into "auth_token" attribute of PubSub messages. 2819 // 2820 // This value is write only, it cannot be retrieved back. 2821 AuthToken string `protobuf:"bytes,2,opt,name=auth_token,json=authToken,proto3" json:"auth_token,omitempty"` 2822 // String to put into "userdata" attribute of PubSub messages. 2823 Userdata string `protobuf:"bytes,3,opt,name=userdata,proto3" json:"userdata,omitempty"` 2824 } 2825 2826 func (x *PubSub) Reset() { 2827 *x = PubSub{} 2828 if protoimpl.UnsafeEnabled { 2829 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[20] 2830 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2831 ms.StoreMessageInfo(mi) 2832 } 2833 } 2834 2835 func (x *PubSub) String() string { 2836 return protoimpl.X.MessageStringOf(x) 2837 } 2838 2839 func (*PubSub) ProtoMessage() {} 2840 2841 func (x *PubSub) ProtoReflect() protoreflect.Message { 2842 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[20] 2843 if protoimpl.UnsafeEnabled && x != nil { 2844 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2845 if ms.LoadMessageInfo() == nil { 2846 ms.StoreMessageInfo(mi) 2847 } 2848 return ms 2849 } 2850 return mi.MessageOf(x) 2851 } 2852 2853 // Deprecated: Use PubSub.ProtoReflect.Descriptor instead. 2854 func (*PubSub) Descriptor() ([]byte, []int) { 2855 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{20} 2856 } 2857 2858 func (x *PubSub) GetTopic() string { 2859 if x != nil { 2860 return x.Topic 2861 } 2862 return "" 2863 } 2864 2865 func (x *PubSub) GetAuthToken() string { 2866 if x != nil { 2867 return x.AuthToken 2868 } 2869 return "" 2870 } 2871 2872 func (x *PubSub) GetUserdata() string { 2873 if x != nil { 2874 return x.Userdata 2875 } 2876 return "" 2877 } 2878 2879 // TaskResult is the result of a TaskRequest as it is processed by Swarming. 2880 // 2881 // The TaskResult represents one attempt (run on a bot) and/or the final result 2882 // (summary). When the task never ran (for example EXPIRED), there's one summary 2883 // but no run. 2884 // 2885 // An idempotent task can be automatically retried by Swarming, which may result 2886 // in two TaskResult with the same task_id but different run_id; two runs, one 2887 // summary. 2888 // 2889 // A retry is done when a task fails with a retriable error (for example with 2890 // RAN_INTERNAL_FAILURE). For the client's perspective when looking at the 2891 // summary (ID ending with '0'), the task went from PENDING to RUNNING and then 2892 // back to PENDING. 2893 // 2894 // When stored in BigQuery in table task_result_run and task_results_summary, 2895 // on-going tasks are in the __NULL__ partition since end_time is unset. 2896 // 2897 // There's a risk of duplicate rows because BigQuery is eventually consistent 2898 // with regards to duplicate rows. Set your filter to ignore the __NULL__ 2899 // partition to enforce strong consistency and ignore on-going tasks. See 2900 // https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency 2901 // for more information. 2902 // NEXT_ID: 23 2903 type TaskResult struct { 2904 state protoimpl.MessageState 2905 sizeCache protoimpl.SizeCache 2906 unknownFields protoimpl.UnknownFields 2907 2908 Request *TaskRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` 2909 // Time the task was requested. 2910 CreateTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` 2911 // Time the task started being run by a bot, before RUNNING_OVERHEAD_SETUP. 2912 // 2913 // Doing "start_time - create_time" gives the task pending time. 2914 StartTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` 2915 // Time when the task was abandoned instead of normal completion. 2916 // 2917 // This happens for example when a task was KILLED, this then represents the 2918 // time a client requested the task to be killed, which is before end_time. 2919 // Same for TIMED_OUT state, this then represents the time when the bot 2920 // decided to abort the task. 2921 AbandonTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=abandon_time,json=abandonTime,proto3" json:"abandon_time,omitempty"` 2922 // Time the task completed and teared down, after RUNNING_OVERHEAD_TEARDOWN. 2923 // 2924 // Doing "end_time - start_time" will not lead to the exact task duration, 2925 // since this time frame includes overheads. 2926 EndTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` 2927 // Duration of the task. This excludes overheads. 2928 Duration *durationpb.Duration `protobuf:"bytes,6,opt,name=duration,proto3" json:"duration,omitempty"` 2929 // Current state of the task (e.g. PENDING, RUNNING, COMPLETED, EXPIRED, etc). 2930 State TaskState `protobuf:"varint,7,opt,name=state,proto3,enum=swarming.v1.TaskState" json:"state,omitempty"` 2931 // The category of the current task state. This is primarily useful to 2932 // simplify BigQuery queries. This can be used to determine if a task is done 2933 // or if still considered for execution. 2934 StateCategory TaskStateCategory `protobuf:"varint,8,opt,name=state_category,json=stateCategory,proto3,enum=swarming.v1.TaskStateCategory" json:"state_category,omitempty"` 2935 // The task try number. 2936 // 2937 // It is 0 for a deduped task, since nothing ran. It is 0 if the task is still 2938 // PENDING. 2939 // 2940 // It is normally 1 for a task that started running and runs a normal flow. 2941 // 2942 // A number above 1 means that the the task was tried multiple times. It can 2943 // be due to a previous try resulting in a task state in the category 2944 // CATEGORY_TRANSIENT_DONE. 2945 TryNumber int32 `protobuf:"varint,9,opt,name=try_number,json=tryNumber,proto3" json:"try_number,omitempty"` 2946 // Index in the TaskRequest.task_slices (TaskSlice instance) that this result 2947 // represents. This is updated when a TaskSlice is enqueued to run. It can be 2948 // updated until the task state is in either category CATEGORY_EXECUTION_DONE 2949 // or CATEGORY_NEVER_RAN_DONE. 2950 // 2951 // The TaskSlice contains a TaskProperties, which defines what is run. 2952 CurrentTaskSlice int32 `protobuf:"varint,10,opt,name=current_task_slice,json=currentTaskSlice,proto3" json:"current_task_slice,omitempty"` 2953 // Snapshot of the bot that was assigned to this task at the start of the 2954 // task. This includes bot local cache information. 2955 Bot *Bot `protobuf:"bytes,11,opt,name=bot,proto3" json:"bot,omitempty"` 2956 // Server versions that touched this task. 2957 // 2958 // A different version of the server may get the request and hand it to the 2959 // bot. This is primarily useful to detect if a new server version introduced 2960 // a bug and for canarying purpose. 2961 ServerVersions []string `protobuf:"bytes,12,rep,name=server_versions,json=serverVersions,proto3" json:"server_versions,omitempty"` 2962 // List of children task IDs that this task triggered, if any. 2963 // 2964 // This happens only in the case of reentrant tasks, a Swarming task that 2965 // itself triggers more Swarming task. Each of these task will have 'run_id' 2966 // set as their 'TaskRequest.parent_task_id'. 2967 ChildrenTaskIds []string `protobuf:"bytes,13,rep,name=children_task_ids,json=childrenTaskIds,proto3" json:"children_task_ids,omitempty"` 2968 // Task ID which results was reused for state DEDUPED. 2969 // 2970 // This is the run_id (ending with '1', '2' or more). 2971 DedupedFrom string `protobuf:"bytes,14,opt,name=deduped_from,json=dedupedFrom,proto3" json:"deduped_from,omitempty"` 2972 // Summary task ID (ending with '0') when creating a new task. 2973 TaskId string `protobuf:"bytes,15,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` 2974 // Actual executed task id that this task represents. 2975 // 2976 // This value is only set if it ran, that is, the task went through one of the 2977 // state in CATEGORY_RUNNING. 2978 // 2979 // A task_id can have multiple run_id associated to it, they will have the 2980 // corresponding try_number incremented starting at 1. 2981 RunId string `protobuf:"bytes,16,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` 2982 // Listing of the actual pinned CIPDPackages that the task used. 2983 // 2984 // These can vary from the input packages if the inputs included non-identity 2985 // versions (e.g. a ref like "latest"). This can be available once task setup 2986 // is completed. 2987 CipdPins *CIPDPins `protobuf:"bytes,17,opt,name=cipd_pins,json=cipdPins,proto3" json:"cipd_pins,omitempty"` 2988 // Statistics about overhead for an isolated task. This is populated as the 2989 // task goes through setup, execution and teardown. 2990 Performance *TaskPerformance `protobuf:"bytes,18,opt,name=performance,proto3" json:"performance,omitempty"` 2991 // Process exit code if relevant. May be forcibly set to -1 in exceptional 2992 // cases. 2993 ExitCode int64 `protobuf:"zigzag64,19,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` 2994 // Isolated outputs, if any. 2995 // Deprecated: `cas_output_root` will be used. 2996 Outputs *CASTree `protobuf:"bytes,20,opt,name=outputs,proto3" json:"outputs,omitempty"` 2997 // RBE-CAS output, if any. 2998 CasOutputRoot *CASReference `protobuf:"bytes,21,opt,name=cas_output_root,json=casOutputRoot,proto3" json:"cas_output_root,omitempty"` 2999 // ResultDB related properties for this task. 3000 ResultdbInfo *ResultDBInfo `protobuf:"bytes,22,opt,name=resultdb_info,json=resultdbInfo,proto3" json:"resultdb_info,omitempty"` 3001 } 3002 3003 func (x *TaskResult) Reset() { 3004 *x = TaskResult{} 3005 if protoimpl.UnsafeEnabled { 3006 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[21] 3007 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3008 ms.StoreMessageInfo(mi) 3009 } 3010 } 3011 3012 func (x *TaskResult) String() string { 3013 return protoimpl.X.MessageStringOf(x) 3014 } 3015 3016 func (*TaskResult) ProtoMessage() {} 3017 3018 func (x *TaskResult) ProtoReflect() protoreflect.Message { 3019 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[21] 3020 if protoimpl.UnsafeEnabled && x != nil { 3021 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3022 if ms.LoadMessageInfo() == nil { 3023 ms.StoreMessageInfo(mi) 3024 } 3025 return ms 3026 } 3027 return mi.MessageOf(x) 3028 } 3029 3030 // Deprecated: Use TaskResult.ProtoReflect.Descriptor instead. 3031 func (*TaskResult) Descriptor() ([]byte, []int) { 3032 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{21} 3033 } 3034 3035 func (x *TaskResult) GetRequest() *TaskRequest { 3036 if x != nil { 3037 return x.Request 3038 } 3039 return nil 3040 } 3041 3042 func (x *TaskResult) GetCreateTime() *timestamppb.Timestamp { 3043 if x != nil { 3044 return x.CreateTime 3045 } 3046 return nil 3047 } 3048 3049 func (x *TaskResult) GetStartTime() *timestamppb.Timestamp { 3050 if x != nil { 3051 return x.StartTime 3052 } 3053 return nil 3054 } 3055 3056 func (x *TaskResult) GetAbandonTime() *timestamppb.Timestamp { 3057 if x != nil { 3058 return x.AbandonTime 3059 } 3060 return nil 3061 } 3062 3063 func (x *TaskResult) GetEndTime() *timestamppb.Timestamp { 3064 if x != nil { 3065 return x.EndTime 3066 } 3067 return nil 3068 } 3069 3070 func (x *TaskResult) GetDuration() *durationpb.Duration { 3071 if x != nil { 3072 return x.Duration 3073 } 3074 return nil 3075 } 3076 3077 func (x *TaskResult) GetState() TaskState { 3078 if x != nil { 3079 return x.State 3080 } 3081 return TaskState_TASK_STATE_INVALID 3082 } 3083 3084 func (x *TaskResult) GetStateCategory() TaskStateCategory { 3085 if x != nil { 3086 return x.StateCategory 3087 } 3088 return TaskStateCategory_TASK_STATE_CATEGORY_UNSPECIFIED 3089 } 3090 3091 func (x *TaskResult) GetTryNumber() int32 { 3092 if x != nil { 3093 return x.TryNumber 3094 } 3095 return 0 3096 } 3097 3098 func (x *TaskResult) GetCurrentTaskSlice() int32 { 3099 if x != nil { 3100 return x.CurrentTaskSlice 3101 } 3102 return 0 3103 } 3104 3105 func (x *TaskResult) GetBot() *Bot { 3106 if x != nil { 3107 return x.Bot 3108 } 3109 return nil 3110 } 3111 3112 func (x *TaskResult) GetServerVersions() []string { 3113 if x != nil { 3114 return x.ServerVersions 3115 } 3116 return nil 3117 } 3118 3119 func (x *TaskResult) GetChildrenTaskIds() []string { 3120 if x != nil { 3121 return x.ChildrenTaskIds 3122 } 3123 return nil 3124 } 3125 3126 func (x *TaskResult) GetDedupedFrom() string { 3127 if x != nil { 3128 return x.DedupedFrom 3129 } 3130 return "" 3131 } 3132 3133 func (x *TaskResult) GetTaskId() string { 3134 if x != nil { 3135 return x.TaskId 3136 } 3137 return "" 3138 } 3139 3140 func (x *TaskResult) GetRunId() string { 3141 if x != nil { 3142 return x.RunId 3143 } 3144 return "" 3145 } 3146 3147 func (x *TaskResult) GetCipdPins() *CIPDPins { 3148 if x != nil { 3149 return x.CipdPins 3150 } 3151 return nil 3152 } 3153 3154 func (x *TaskResult) GetPerformance() *TaskPerformance { 3155 if x != nil { 3156 return x.Performance 3157 } 3158 return nil 3159 } 3160 3161 func (x *TaskResult) GetExitCode() int64 { 3162 if x != nil { 3163 return x.ExitCode 3164 } 3165 return 0 3166 } 3167 3168 func (x *TaskResult) GetOutputs() *CASTree { 3169 if x != nil { 3170 return x.Outputs 3171 } 3172 return nil 3173 } 3174 3175 func (x *TaskResult) GetCasOutputRoot() *CASReference { 3176 if x != nil { 3177 return x.CasOutputRoot 3178 } 3179 return nil 3180 } 3181 3182 func (x *TaskResult) GetResultdbInfo() *ResultDBInfo { 3183 if x != nil { 3184 return x.ResultdbInfo 3185 } 3186 return nil 3187 } 3188 3189 // Defines pinned CIPD packages that were installed during the task. 3190 type CIPDPins struct { 3191 state protoimpl.MessageState 3192 sizeCache protoimpl.SizeCache 3193 unknownFields protoimpl.UnknownFields 3194 3195 // The CIPD server where the CIPD packages were fetched from. Must contain 3196 // "https://" or "http://" prefix. 3197 // 3198 // This field or its subfields are optional if default CIPD client is defined 3199 // in the server config. 3200 Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` 3201 // The pinned package + version of the CIPD client that was actually used. 3202 ClientPackage *CIPDPackage `protobuf:"bytes,2,opt,name=client_package,json=clientPackage,proto3" json:"client_package,omitempty"` 3203 // List of CIPD packages that were installed in the task with fully resolved 3204 // package names and versions. 3205 Packages []*CIPDPackage `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"` 3206 } 3207 3208 func (x *CIPDPins) Reset() { 3209 *x = CIPDPins{} 3210 if protoimpl.UnsafeEnabled { 3211 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[22] 3212 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3213 ms.StoreMessageInfo(mi) 3214 } 3215 } 3216 3217 func (x *CIPDPins) String() string { 3218 return protoimpl.X.MessageStringOf(x) 3219 } 3220 3221 func (*CIPDPins) ProtoMessage() {} 3222 3223 func (x *CIPDPins) ProtoReflect() protoreflect.Message { 3224 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[22] 3225 if protoimpl.UnsafeEnabled && x != nil { 3226 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3227 if ms.LoadMessageInfo() == nil { 3228 ms.StoreMessageInfo(mi) 3229 } 3230 return ms 3231 } 3232 return mi.MessageOf(x) 3233 } 3234 3235 // Deprecated: Use CIPDPins.ProtoReflect.Descriptor instead. 3236 func (*CIPDPins) Descriptor() ([]byte, []int) { 3237 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{22} 3238 } 3239 3240 func (x *CIPDPins) GetServer() string { 3241 if x != nil { 3242 return x.Server 3243 } 3244 return "" 3245 } 3246 3247 func (x *CIPDPins) GetClientPackage() *CIPDPackage { 3248 if x != nil { 3249 return x.ClientPackage 3250 } 3251 return nil 3252 } 3253 3254 func (x *CIPDPins) GetPackages() []*CIPDPackage { 3255 if x != nil { 3256 return x.Packages 3257 } 3258 return nil 3259 } 3260 3261 // Information about the task's performance. 3262 type TaskPerformance struct { 3263 state protoimpl.MessageState 3264 sizeCache protoimpl.SizeCache 3265 unknownFields protoimpl.UnknownFields 3266 3267 // Total cost of running this task in $USD. In the case of DEDUPED task, this 3268 // represents the amount saved. 3269 CostUsd float32 `protobuf:"fixed32,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"` 3270 // Total overhead caused by the bot. 3271 // This is calculated by subtracting the command duration measured in 3272 // run_isolated.py from the total duration in task_runner.run_command(). 3273 // https://source.chromium.org/chromium/infra/infra/+/master:luci/appengine/swarming/swarming_bot/bot_code/task_runner.py;l=811;drc=dfa14c6863d14a5969bb4fea08846985d89aed76 3274 TotalOverhead *durationpb.Duration `protobuf:"bytes,5,opt,name=total_overhead,json=totalOverhead,proto3" json:"total_overhead,omitempty"` 3275 // Overhead that is caused by the bot server that is not accounted for by the 3276 // other overheads. 3277 OtherOverhead *durationpb.Duration `protobuf:"bytes,2,opt,name=other_overhead,json=otherOverhead,proto3" json:"other_overhead,omitempty"` 3278 // Deprecated: use setup_overhead instead. 3279 // Task environment setup overhead. This is the task state 3280 // RUNNING_OVERHEAD_SETUP. 3281 Setup *TaskOverheadStats `protobuf:"bytes,3,opt,name=setup,proto3" json:"setup,omitempty"` 3282 // Deprecated: use teardown_overhead instead. 3283 // Task environment teardown overhead. This is the task state 3284 // RUNNING_OVERHEAD_TEARDOWN. 3285 Teardown *TaskOverheadStats `protobuf:"bytes,4,opt,name=teardown,proto3" json:"teardown,omitempty"` 3286 // Task environment setup overhead. This is the task state 3287 // RUNNING_OVERHEAD_SETUP. 3288 SetupOverhead *TaskSetupOverhead `protobuf:"bytes,6,opt,name=setup_overhead,json=setupOverhead,proto3" json:"setup_overhead,omitempty"` 3289 // Task environment teardown overhead. This is the task state 3290 // RUNNING_OVERHEAD_TEARDOWN. 3291 TeardownOverhead *TaskTeardownOverhead `protobuf:"bytes,7,opt,name=teardown_overhead,json=teardownOverhead,proto3" json:"teardown_overhead,omitempty"` 3292 } 3293 3294 func (x *TaskPerformance) Reset() { 3295 *x = TaskPerformance{} 3296 if protoimpl.UnsafeEnabled { 3297 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[23] 3298 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3299 ms.StoreMessageInfo(mi) 3300 } 3301 } 3302 3303 func (x *TaskPerformance) String() string { 3304 return protoimpl.X.MessageStringOf(x) 3305 } 3306 3307 func (*TaskPerformance) ProtoMessage() {} 3308 3309 func (x *TaskPerformance) ProtoReflect() protoreflect.Message { 3310 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[23] 3311 if protoimpl.UnsafeEnabled && x != nil { 3312 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3313 if ms.LoadMessageInfo() == nil { 3314 ms.StoreMessageInfo(mi) 3315 } 3316 return ms 3317 } 3318 return mi.MessageOf(x) 3319 } 3320 3321 // Deprecated: Use TaskPerformance.ProtoReflect.Descriptor instead. 3322 func (*TaskPerformance) Descriptor() ([]byte, []int) { 3323 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{23} 3324 } 3325 3326 func (x *TaskPerformance) GetCostUsd() float32 { 3327 if x != nil { 3328 return x.CostUsd 3329 } 3330 return 0 3331 } 3332 3333 func (x *TaskPerformance) GetTotalOverhead() *durationpb.Duration { 3334 if x != nil { 3335 return x.TotalOverhead 3336 } 3337 return nil 3338 } 3339 3340 func (x *TaskPerformance) GetOtherOverhead() *durationpb.Duration { 3341 if x != nil { 3342 return x.OtherOverhead 3343 } 3344 return nil 3345 } 3346 3347 func (x *TaskPerformance) GetSetup() *TaskOverheadStats { 3348 if x != nil { 3349 return x.Setup 3350 } 3351 return nil 3352 } 3353 3354 func (x *TaskPerformance) GetTeardown() *TaskOverheadStats { 3355 if x != nil { 3356 return x.Teardown 3357 } 3358 return nil 3359 } 3360 3361 func (x *TaskPerformance) GetSetupOverhead() *TaskSetupOverhead { 3362 if x != nil { 3363 return x.SetupOverhead 3364 } 3365 return nil 3366 } 3367 3368 func (x *TaskPerformance) GetTeardownOverhead() *TaskTeardownOverhead { 3369 if x != nil { 3370 return x.TeardownOverhead 3371 } 3372 return nil 3373 } 3374 3375 // Overhead information about setup. 3376 type TaskSetupOverhead struct { 3377 state protoimpl.MessageState 3378 sizeCache protoimpl.SizeCache 3379 unknownFields protoimpl.UnknownFields 3380 3381 // Duration of this overhead. 3382 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3383 // Cache trimming overhead. 3384 CacheTrim *CacheTrimOverhead `protobuf:"bytes,2,opt,name=cache_trim,json=cacheTrim,proto3" json:"cache_trim,omitempty"` 3385 // CIPD packge installation overhead. 3386 Cipd *CIPDOverhead `protobuf:"bytes,3,opt,name=cipd,proto3" json:"cipd,omitempty"` 3387 // Named cache install overhead. 3388 NamedCache *NamedCacheOverhead `protobuf:"bytes,4,opt,name=named_cache,json=namedCache,proto3" json:"named_cache,omitempty"` 3389 // CAS download overhead. 3390 Cas *CASOverhead `protobuf:"bytes,5,opt,name=cas,proto3" json:"cas,omitempty"` 3391 } 3392 3393 func (x *TaskSetupOverhead) Reset() { 3394 *x = TaskSetupOverhead{} 3395 if protoimpl.UnsafeEnabled { 3396 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[24] 3397 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3398 ms.StoreMessageInfo(mi) 3399 } 3400 } 3401 3402 func (x *TaskSetupOverhead) String() string { 3403 return protoimpl.X.MessageStringOf(x) 3404 } 3405 3406 func (*TaskSetupOverhead) ProtoMessage() {} 3407 3408 func (x *TaskSetupOverhead) ProtoReflect() protoreflect.Message { 3409 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[24] 3410 if protoimpl.UnsafeEnabled && x != nil { 3411 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3412 if ms.LoadMessageInfo() == nil { 3413 ms.StoreMessageInfo(mi) 3414 } 3415 return ms 3416 } 3417 return mi.MessageOf(x) 3418 } 3419 3420 // Deprecated: Use TaskSetupOverhead.ProtoReflect.Descriptor instead. 3421 func (*TaskSetupOverhead) Descriptor() ([]byte, []int) { 3422 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{24} 3423 } 3424 3425 func (x *TaskSetupOverhead) GetDuration() *durationpb.Duration { 3426 if x != nil { 3427 return x.Duration 3428 } 3429 return nil 3430 } 3431 3432 func (x *TaskSetupOverhead) GetCacheTrim() *CacheTrimOverhead { 3433 if x != nil { 3434 return x.CacheTrim 3435 } 3436 return nil 3437 } 3438 3439 func (x *TaskSetupOverhead) GetCipd() *CIPDOverhead { 3440 if x != nil { 3441 return x.Cipd 3442 } 3443 return nil 3444 } 3445 3446 func (x *TaskSetupOverhead) GetNamedCache() *NamedCacheOverhead { 3447 if x != nil { 3448 return x.NamedCache 3449 } 3450 return nil 3451 } 3452 3453 func (x *TaskSetupOverhead) GetCas() *CASOverhead { 3454 if x != nil { 3455 return x.Cas 3456 } 3457 return nil 3458 } 3459 3460 // Overhead information about teardown. 3461 type TaskTeardownOverhead struct { 3462 state protoimpl.MessageState 3463 sizeCache protoimpl.SizeCache 3464 unknownFields protoimpl.UnknownFields 3465 3466 // Duration of this overhead. 3467 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3468 // CAS upload overhead. 3469 Cas *CASOverhead `protobuf:"bytes,2,opt,name=cas,proto3" json:"cas,omitempty"` 3470 // Named cache uninstall overhead. 3471 NamedCache *NamedCacheOverhead `protobuf:"bytes,3,opt,name=named_cache,json=namedCache,proto3" json:"named_cache,omitempty"` 3472 // Directory cleanup overhead. 3473 Cleanup *CleanupOverhead `protobuf:"bytes,4,opt,name=cleanup,proto3" json:"cleanup,omitempty"` 3474 } 3475 3476 func (x *TaskTeardownOverhead) Reset() { 3477 *x = TaskTeardownOverhead{} 3478 if protoimpl.UnsafeEnabled { 3479 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[25] 3480 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3481 ms.StoreMessageInfo(mi) 3482 } 3483 } 3484 3485 func (x *TaskTeardownOverhead) String() string { 3486 return protoimpl.X.MessageStringOf(x) 3487 } 3488 3489 func (*TaskTeardownOverhead) ProtoMessage() {} 3490 3491 func (x *TaskTeardownOverhead) ProtoReflect() protoreflect.Message { 3492 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[25] 3493 if protoimpl.UnsafeEnabled && x != nil { 3494 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3495 if ms.LoadMessageInfo() == nil { 3496 ms.StoreMessageInfo(mi) 3497 } 3498 return ms 3499 } 3500 return mi.MessageOf(x) 3501 } 3502 3503 // Deprecated: Use TaskTeardownOverhead.ProtoReflect.Descriptor instead. 3504 func (*TaskTeardownOverhead) Descriptor() ([]byte, []int) { 3505 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{25} 3506 } 3507 3508 func (x *TaskTeardownOverhead) GetDuration() *durationpb.Duration { 3509 if x != nil { 3510 return x.Duration 3511 } 3512 return nil 3513 } 3514 3515 func (x *TaskTeardownOverhead) GetCas() *CASOverhead { 3516 if x != nil { 3517 return x.Cas 3518 } 3519 return nil 3520 } 3521 3522 func (x *TaskTeardownOverhead) GetNamedCache() *NamedCacheOverhead { 3523 if x != nil { 3524 return x.NamedCache 3525 } 3526 return nil 3527 } 3528 3529 func (x *TaskTeardownOverhead) GetCleanup() *CleanupOverhead { 3530 if x != nil { 3531 return x.Cleanup 3532 } 3533 return nil 3534 } 3535 3536 // Overhead information about cache trimming. 3537 type CacheTrimOverhead struct { 3538 state protoimpl.MessageState 3539 sizeCache protoimpl.SizeCache 3540 unknownFields protoimpl.UnknownFields 3541 3542 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3543 } 3544 3545 func (x *CacheTrimOverhead) Reset() { 3546 *x = CacheTrimOverhead{} 3547 if protoimpl.UnsafeEnabled { 3548 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[26] 3549 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3550 ms.StoreMessageInfo(mi) 3551 } 3552 } 3553 3554 func (x *CacheTrimOverhead) String() string { 3555 return protoimpl.X.MessageStringOf(x) 3556 } 3557 3558 func (*CacheTrimOverhead) ProtoMessage() {} 3559 3560 func (x *CacheTrimOverhead) ProtoReflect() protoreflect.Message { 3561 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[26] 3562 if protoimpl.UnsafeEnabled && x != nil { 3563 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3564 if ms.LoadMessageInfo() == nil { 3565 ms.StoreMessageInfo(mi) 3566 } 3567 return ms 3568 } 3569 return mi.MessageOf(x) 3570 } 3571 3572 // Deprecated: Use CacheTrimOverhead.ProtoReflect.Descriptor instead. 3573 func (*CacheTrimOverhead) Descriptor() ([]byte, []int) { 3574 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{26} 3575 } 3576 3577 func (x *CacheTrimOverhead) GetDuration() *durationpb.Duration { 3578 if x != nil { 3579 return x.Duration 3580 } 3581 return nil 3582 } 3583 3584 // Overhead information about CIPD packge installation. 3585 type CIPDOverhead struct { 3586 state protoimpl.MessageState 3587 sizeCache protoimpl.SizeCache 3588 unknownFields protoimpl.UnknownFields 3589 3590 // Duration of this overhead. 3591 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3592 } 3593 3594 func (x *CIPDOverhead) Reset() { 3595 *x = CIPDOverhead{} 3596 if protoimpl.UnsafeEnabled { 3597 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[27] 3598 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3599 ms.StoreMessageInfo(mi) 3600 } 3601 } 3602 3603 func (x *CIPDOverhead) String() string { 3604 return protoimpl.X.MessageStringOf(x) 3605 } 3606 3607 func (*CIPDOverhead) ProtoMessage() {} 3608 3609 func (x *CIPDOverhead) ProtoReflect() protoreflect.Message { 3610 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[27] 3611 if protoimpl.UnsafeEnabled && x != nil { 3612 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3613 if ms.LoadMessageInfo() == nil { 3614 ms.StoreMessageInfo(mi) 3615 } 3616 return ms 3617 } 3618 return mi.MessageOf(x) 3619 } 3620 3621 // Deprecated: Use CIPDOverhead.ProtoReflect.Descriptor instead. 3622 func (*CIPDOverhead) Descriptor() ([]byte, []int) { 3623 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{27} 3624 } 3625 3626 func (x *CIPDOverhead) GetDuration() *durationpb.Duration { 3627 if x != nil { 3628 return x.Duration 3629 } 3630 return nil 3631 } 3632 3633 // Overhead information about Named Caches install or uninstall. 3634 type NamedCacheOverhead struct { 3635 state protoimpl.MessageState 3636 sizeCache protoimpl.SizeCache 3637 unknownFields protoimpl.UnknownFields 3638 3639 // Duration of this overhead. 3640 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3641 } 3642 3643 func (x *NamedCacheOverhead) Reset() { 3644 *x = NamedCacheOverhead{} 3645 if protoimpl.UnsafeEnabled { 3646 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[28] 3647 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3648 ms.StoreMessageInfo(mi) 3649 } 3650 } 3651 3652 func (x *NamedCacheOverhead) String() string { 3653 return protoimpl.X.MessageStringOf(x) 3654 } 3655 3656 func (*NamedCacheOverhead) ProtoMessage() {} 3657 3658 func (x *NamedCacheOverhead) ProtoReflect() protoreflect.Message { 3659 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[28] 3660 if protoimpl.UnsafeEnabled && x != nil { 3661 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3662 if ms.LoadMessageInfo() == nil { 3663 ms.StoreMessageInfo(mi) 3664 } 3665 return ms 3666 } 3667 return mi.MessageOf(x) 3668 } 3669 3670 // Deprecated: Use NamedCacheOverhead.ProtoReflect.Descriptor instead. 3671 func (*NamedCacheOverhead) Descriptor() ([]byte, []int) { 3672 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{28} 3673 } 3674 3675 func (x *NamedCacheOverhead) GetDuration() *durationpb.Duration { 3676 if x != nil { 3677 return x.Duration 3678 } 3679 return nil 3680 } 3681 3682 // Overhead information about CAS download or upload. 3683 type CASOverhead struct { 3684 state protoimpl.MessageState 3685 sizeCache protoimpl.SizeCache 3686 unknownFields protoimpl.UnknownFields 3687 3688 // Duration of this overhead. 3689 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3690 // CAS entries that were not present in the local or remote cache and had to 3691 // be sent across the network. 3692 Cold *CASEntriesStats `protobuf:"bytes,2,opt,name=cold,proto3" json:"cold,omitempty"` 3693 // CAS entries that were in the cache and thus didn't have to be transferred. 3694 Hot *CASEntriesStats `protobuf:"bytes,3,opt,name=hot,proto3" json:"hot,omitempty"` 3695 } 3696 3697 func (x *CASOverhead) Reset() { 3698 *x = CASOverhead{} 3699 if protoimpl.UnsafeEnabled { 3700 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[29] 3701 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3702 ms.StoreMessageInfo(mi) 3703 } 3704 } 3705 3706 func (x *CASOverhead) String() string { 3707 return protoimpl.X.MessageStringOf(x) 3708 } 3709 3710 func (*CASOverhead) ProtoMessage() {} 3711 3712 func (x *CASOverhead) ProtoReflect() protoreflect.Message { 3713 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[29] 3714 if protoimpl.UnsafeEnabled && x != nil { 3715 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3716 if ms.LoadMessageInfo() == nil { 3717 ms.StoreMessageInfo(mi) 3718 } 3719 return ms 3720 } 3721 return mi.MessageOf(x) 3722 } 3723 3724 // Deprecated: Use CASOverhead.ProtoReflect.Descriptor instead. 3725 func (*CASOverhead) Descriptor() ([]byte, []int) { 3726 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{29} 3727 } 3728 3729 func (x *CASOverhead) GetDuration() *durationpb.Duration { 3730 if x != nil { 3731 return x.Duration 3732 } 3733 return nil 3734 } 3735 3736 func (x *CASOverhead) GetCold() *CASEntriesStats { 3737 if x != nil { 3738 return x.Cold 3739 } 3740 return nil 3741 } 3742 3743 func (x *CASOverhead) GetHot() *CASEntriesStats { 3744 if x != nil { 3745 return x.Hot 3746 } 3747 return nil 3748 } 3749 3750 // Overhead information about cleanup step. 3751 type CleanupOverhead struct { 3752 state protoimpl.MessageState 3753 sizeCache protoimpl.SizeCache 3754 unknownFields protoimpl.UnknownFields 3755 3756 // Duration of this overhead. 3757 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3758 } 3759 3760 func (x *CleanupOverhead) Reset() { 3761 *x = CleanupOverhead{} 3762 if protoimpl.UnsafeEnabled { 3763 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[30] 3764 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3765 ms.StoreMessageInfo(mi) 3766 } 3767 } 3768 3769 func (x *CleanupOverhead) String() string { 3770 return protoimpl.X.MessageStringOf(x) 3771 } 3772 3773 func (*CleanupOverhead) ProtoMessage() {} 3774 3775 func (x *CleanupOverhead) ProtoReflect() protoreflect.Message { 3776 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[30] 3777 if protoimpl.UnsafeEnabled && x != nil { 3778 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3779 if ms.LoadMessageInfo() == nil { 3780 ms.StoreMessageInfo(mi) 3781 } 3782 return ms 3783 } 3784 return mi.MessageOf(x) 3785 } 3786 3787 // Deprecated: Use CleanupOverhead.ProtoReflect.Descriptor instead. 3788 func (*CleanupOverhead) Descriptor() ([]byte, []int) { 3789 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{30} 3790 } 3791 3792 func (x *CleanupOverhead) GetDuration() *durationpb.Duration { 3793 if x != nil { 3794 return x.Duration 3795 } 3796 return nil 3797 } 3798 3799 // Deprecated: Use TaskSetupOverheadStats or TaskTeardownOverheadStats instead. 3800 // Information about setup or teardown. 3801 type TaskOverheadStats struct { 3802 state protoimpl.MessageState 3803 sizeCache protoimpl.SizeCache 3804 unknownFields protoimpl.UnknownFields 3805 3806 // Duration of this overhead. 3807 Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` 3808 // CAS entries that were not present in the local or remote cache and had to 3809 // be sent across the network. 3810 Cold *CASEntriesStats `protobuf:"bytes,2,opt,name=cold,proto3" json:"cold,omitempty"` 3811 // CAS entries that were in the cache and thus didn't have to be transferred. 3812 Hot *CASEntriesStats `protobuf:"bytes,3,opt,name=hot,proto3" json:"hot,omitempty"` 3813 } 3814 3815 func (x *TaskOverheadStats) Reset() { 3816 *x = TaskOverheadStats{} 3817 if protoimpl.UnsafeEnabled { 3818 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[31] 3819 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3820 ms.StoreMessageInfo(mi) 3821 } 3822 } 3823 3824 func (x *TaskOverheadStats) String() string { 3825 return protoimpl.X.MessageStringOf(x) 3826 } 3827 3828 func (*TaskOverheadStats) ProtoMessage() {} 3829 3830 func (x *TaskOverheadStats) ProtoReflect() protoreflect.Message { 3831 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[31] 3832 if protoimpl.UnsafeEnabled && x != nil { 3833 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3834 if ms.LoadMessageInfo() == nil { 3835 ms.StoreMessageInfo(mi) 3836 } 3837 return ms 3838 } 3839 return mi.MessageOf(x) 3840 } 3841 3842 // Deprecated: Use TaskOverheadStats.ProtoReflect.Descriptor instead. 3843 func (*TaskOverheadStats) Descriptor() ([]byte, []int) { 3844 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{31} 3845 } 3846 3847 func (x *TaskOverheadStats) GetDuration() *durationpb.Duration { 3848 if x != nil { 3849 return x.Duration 3850 } 3851 return nil 3852 } 3853 3854 func (x *TaskOverheadStats) GetCold() *CASEntriesStats { 3855 if x != nil { 3856 return x.Cold 3857 } 3858 return nil 3859 } 3860 3861 func (x *TaskOverheadStats) GetHot() *CASEntriesStats { 3862 if x != nil { 3863 return x.Hot 3864 } 3865 return nil 3866 } 3867 3868 // Statistics for differential CAS entries in the context of I/O for a task. 3869 type CASEntriesStats struct { 3870 state protoimpl.MessageState 3871 sizeCache protoimpl.SizeCache 3872 unknownFields protoimpl.UnknownFields 3873 3874 NumItems int64 `protobuf:"varint,1,opt,name=num_items,json=numItems,proto3" json:"num_items,omitempty"` 3875 TotalBytesItems int64 `protobuf:"varint,2,opt,name=total_bytes_items,json=totalBytesItems,proto3" json:"total_bytes_items,omitempty"` 3876 // This buffer is compressed as deflate'd delta-encoded varints. This is the 3877 // list of all the item size for an I/O operation, which can scale in the 100k 3878 // range. So this can be large! See //client/utils/large.py for the code to 3879 // handle these. 3880 Items []byte `protobuf:"bytes,6,opt,name=items,proto3" json:"items,omitempty"` 3881 } 3882 3883 func (x *CASEntriesStats) Reset() { 3884 *x = CASEntriesStats{} 3885 if protoimpl.UnsafeEnabled { 3886 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[32] 3887 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3888 ms.StoreMessageInfo(mi) 3889 } 3890 } 3891 3892 func (x *CASEntriesStats) String() string { 3893 return protoimpl.X.MessageStringOf(x) 3894 } 3895 3896 func (*CASEntriesStats) ProtoMessage() {} 3897 3898 func (x *CASEntriesStats) ProtoReflect() protoreflect.Message { 3899 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[32] 3900 if protoimpl.UnsafeEnabled && x != nil { 3901 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3902 if ms.LoadMessageInfo() == nil { 3903 ms.StoreMessageInfo(mi) 3904 } 3905 return ms 3906 } 3907 return mi.MessageOf(x) 3908 } 3909 3910 // Deprecated: Use CASEntriesStats.ProtoReflect.Descriptor instead. 3911 func (*CASEntriesStats) Descriptor() ([]byte, []int) { 3912 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{32} 3913 } 3914 3915 func (x *CASEntriesStats) GetNumItems() int64 { 3916 if x != nil { 3917 return x.NumItems 3918 } 3919 return 0 3920 } 3921 3922 func (x *CASEntriesStats) GetTotalBytesItems() int64 { 3923 if x != nil { 3924 return x.TotalBytesItems 3925 } 3926 return 0 3927 } 3928 3929 func (x *CASEntriesStats) GetItems() []byte { 3930 if x != nil { 3931 return x.Items 3932 } 3933 return nil 3934 } 3935 3936 // Swarming:ResultDB integration configuration for a task. 3937 // This is a copy of SwarmingRpcsResultDBCfg. 3938 type ResultDBCfg struct { 3939 state protoimpl.MessageState 3940 sizeCache protoimpl.SizeCache 3941 unknownFields protoimpl.UnknownFields 3942 3943 // Flag to indicates the integration is enabled. 3944 Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` 3945 } 3946 3947 func (x *ResultDBCfg) Reset() { 3948 *x = ResultDBCfg{} 3949 if protoimpl.UnsafeEnabled { 3950 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[33] 3951 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3952 ms.StoreMessageInfo(mi) 3953 } 3954 } 3955 3956 func (x *ResultDBCfg) String() string { 3957 return protoimpl.X.MessageStringOf(x) 3958 } 3959 3960 func (*ResultDBCfg) ProtoMessage() {} 3961 3962 func (x *ResultDBCfg) ProtoReflect() protoreflect.Message { 3963 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[33] 3964 if protoimpl.UnsafeEnabled && x != nil { 3965 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3966 if ms.LoadMessageInfo() == nil { 3967 ms.StoreMessageInfo(mi) 3968 } 3969 return ms 3970 } 3971 return mi.MessageOf(x) 3972 } 3973 3974 // Deprecated: Use ResultDBCfg.ProtoReflect.Descriptor instead. 3975 func (*ResultDBCfg) Descriptor() ([]byte, []int) { 3976 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{33} 3977 } 3978 3979 func (x *ResultDBCfg) GetEnable() bool { 3980 if x != nil { 3981 return x.Enable 3982 } 3983 return false 3984 } 3985 3986 // ResultDB Related properties. 3987 type ResultDBInfo struct { 3988 state protoimpl.MessageState 3989 sizeCache protoimpl.SizeCache 3990 unknownFields protoimpl.UnknownFields 3991 3992 // ResultDB hostname, e.g. "results.api.cr.dev" 3993 Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` 3994 // Name of the task's ResultDB invocation. 3995 // 3996 // e.g. "invocations/task-chromium-swarm.appspot.com-deadbeef1" 3997 // None if Swarming:ResultDB integration was not enabled for this task. 3998 // 3999 // If the task was deduplicated, this equals invocation name of the original 4000 // task. 4001 Invocation string `protobuf:"bytes,2,opt,name=invocation,proto3" json:"invocation,omitempty"` 4002 } 4003 4004 func (x *ResultDBInfo) Reset() { 4005 *x = ResultDBInfo{} 4006 if protoimpl.UnsafeEnabled { 4007 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[34] 4008 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 4009 ms.StoreMessageInfo(mi) 4010 } 4011 } 4012 4013 func (x *ResultDBInfo) String() string { 4014 return protoimpl.X.MessageStringOf(x) 4015 } 4016 4017 func (*ResultDBInfo) ProtoMessage() {} 4018 4019 func (x *ResultDBInfo) ProtoReflect() protoreflect.Message { 4020 mi := &file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[34] 4021 if protoimpl.UnsafeEnabled && x != nil { 4022 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 4023 if ms.LoadMessageInfo() == nil { 4024 ms.StoreMessageInfo(mi) 4025 } 4026 return ms 4027 } 4028 return mi.MessageOf(x) 4029 } 4030 4031 // Deprecated: Use ResultDBInfo.ProtoReflect.Descriptor instead. 4032 func (*ResultDBInfo) Descriptor() ([]byte, []int) { 4033 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP(), []int{34} 4034 } 4035 4036 func (x *ResultDBInfo) GetHostname() string { 4037 if x != nil { 4038 return x.Hostname 4039 } 4040 return "" 4041 } 4042 4043 func (x *ResultDBInfo) GetInvocation() string { 4044 if x != nil { 4045 return x.Invocation 4046 } 4047 return "" 4048 } 4049 4050 var File_go_chromium_org_luci_swarming_proto_api_swarming_proto protoreflect.FileDescriptor 4051 4052 var file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDesc = []byte{ 4053 0x0a, 0x36, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 4054 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 4055 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 4056 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 4057 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 4058 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 4059 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 4060 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 4061 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 4062 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 4063 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x01, 0x0a, 0x10, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 0x6e, 4064 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x6f, 0x74, 4065 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x6f, 0x74, 0x49, 0x64, 4066 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 4067 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 4068 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 4069 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 4070 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 4071 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 4072 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 4073 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 4074 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 4075 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 4076 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x6a, 4077 0x0a, 0x11, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 4078 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 4079 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 4080 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 4081 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 4082 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 4083 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x34, 0x0a, 0x0a, 0x53, 0x74, 4084 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 4085 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 4086 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 4087 0x22, 0x3a, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 4088 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 4089 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 4090 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xb3, 0x02, 0x0a, 4091 0x03, 0x42, 0x6f, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 4092 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 4093 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 4094 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 4095 0x6f, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 4096 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 4097 0x32, 0x1a, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 4098 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 4099 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 4100 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 4101 0x4d, 0x73, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 4102 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x75, 4103 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x0a, 0x64, 4104 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 4105 0x1b, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 4106 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x64, 0x69, 4107 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 4108 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 4109 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 4110 0x66, 0x6f, 0x22, 0xf1, 0x04, 0x0a, 0x07, 0x42, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 4111 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x01, 4112 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 4113 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0c, 0x73, 4114 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x76, 4115 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 4116 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 4117 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 4118 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 4119 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 4120 0x52, 0x0f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 4121 0x73, 0x12, 0x32, 0x0a, 0x09, 0x63, 0x61, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x05, 4122 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4123 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x63, 0x61, 0x73, 4124 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x12, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x63, 4125 0x61, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 4126 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 4127 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 4128 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 4129 0x73, 0x12, 0x5d, 0x0a, 0x19, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 4130 0x65, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 4131 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4132 0x76, 0x31, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x61, 4133 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x16, 0x63, 0x69, 0x70, 0x64, 0x50, 0x61, 4134 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 4135 0x12, 0x2f, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 4136 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x68, 0x79, 4137 0x73, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x04, 0x68, 0x6f, 0x73, 4138 0x74, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 4139 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 4140 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 4141 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 4142 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 4143 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 4144 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 4145 0x53, 0x65, 0x65, 0x6e, 0x54, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x73, 4146 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 4147 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 4148 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x53, 4149 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x22, 0x71, 0x0a, 0x0e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 4150 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 4151 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 4152 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 4153 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 4154 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0c, 0x73, 0x75, 0x70, 4155 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 4156 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x7e, 0x0a, 0x08, 0x43, 0x41, 0x53, 4157 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 4158 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 4159 0x62, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 4160 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 4161 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 4162 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 4163 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6f, 4164 0x6c, 0x64, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x79, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 4165 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 4166 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 4167 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 4168 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 4169 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 4170 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 4171 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 4172 0x54, 0x69, 0x6d, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x15, 0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 0x63, 4173 0x6b, 0x61, 0x67, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 4174 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 4175 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 4176 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 4177 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 4178 0x12, 0x3e, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 4179 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 4180 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 4181 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 4182 0x22, 0xb7, 0x01, 0x0a, 0x08, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 4183 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 4184 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 4185 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 4186 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x03, 0x62, 0x6f, 0x74, 0x18, 4187 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 4188 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x52, 0x03, 0x62, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x05, 4189 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x73, 0x77, 4190 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 4191 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 4192 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 4193 0x52, 0x08, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x22, 0x57, 0x0a, 0x07, 0x43, 0x41, 4194 0x53, 0x54, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 4195 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x16, 0x0a, 4196 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 4197 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 4198 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 4199 0x61, 0x63, 0x65, 0x22, 0x3b, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 4200 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 4201 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 4202 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 4203 0x22, 0x5e, 0x0a, 0x0c, 0x43, 0x41, 0x53, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 4204 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 4205 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 4206 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 4207 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 4208 0x31, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 4209 0x22, 0x67, 0x0a, 0x0b, 0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 4210 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 4211 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 4212 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 4213 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 4214 0x64, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 4215 0x08, 0x64, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x42, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 4216 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 4217 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 4218 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 4219 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbd, 0x02, 4220 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 4221 0x0e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 4222 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 4223 0x72, 0x69, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 4224 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 4225 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 4226 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 4227 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 4228 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6c, 0x69, 0x6d, 4229 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 4230 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 4231 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 4232 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 4233 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x54, 4234 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 4235 0x6f, 0x72, 0x79, 0x22, 0x48, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 4236 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 4237 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 4238 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 4239 0x0a, 0x4a, 0x4f, 0x42, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x22, 0xaa, 0x07, 4240 0x0a, 0x0e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 4241 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 4242 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4243 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x54, 0x72, 0x65, 0x65, 0x52, 0x09, 0x63, 0x61, 0x73, 0x49, 4244 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x70, 4245 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 4246 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x52, 4247 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x63, 0x61, 0x73, 0x49, 0x6e, 0x70, 4248 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x69, 4249 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 4250 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 4251 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 4252 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 4253 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 4254 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 4255 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 4256 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 4257 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x0c, 4258 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x77, 0x64, 0x18, 0x05, 0x20, 0x01, 4259 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x77, 0x64, 0x12, 4260 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x06, 0x20, 4261 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x41, 0x72, 0x67, 0x73, 0x12, 0x21, 4262 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 4263 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x79, 0x74, 0x65, 4264 0x73, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 4265 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 4266 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x64, 4267 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 4268 0x1b, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 4269 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x64, 0x69, 4270 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 4271 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 4272 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x03, 4273 0x65, 0x6e, 0x76, 0x12, 0x38, 0x0a, 0x09, 0x65, 0x6e, 0x76, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 4274 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 4275 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x50, 4276 0x61, 0x69, 0x72, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x3a, 0x0a, 4277 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 4278 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 4279 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6f, 4280 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x11, 0x65, 0x78, 0x65, 4281 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0d, 4282 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 4283 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 4284 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 4285 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 4286 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 4287 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 4288 0x52, 0x09, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 4289 0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 4290 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 4291 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x67, 0x72, 4292 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 4293 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 4294 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x75, 0x74, 4295 0x70, 0x75, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 4296 0x75, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 4297 0x0e, 0x32, 0x11, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 4298 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x09, 0x54, 4299 0x61, 0x73, 0x6b, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 4300 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 4301 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 4302 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 4303 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 4304 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 4305 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 4306 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 4307 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x70, 4308 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x61, 0x69, 4309 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 4310 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 4311 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 4312 0x73, 0x48, 0x61, 0x73, 0x68, 0x22, 0xaa, 0x05, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 4313 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x6c, 4314 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x77, 0x61, 4315 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x6c, 0x69, 4316 0x63, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1a, 4317 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 4318 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 4319 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 4320 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 4321 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 4322 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 4323 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 4324 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 4325 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 4326 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 4327 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 4328 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 4329 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 4330 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 4331 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 4332 0x09, 0x52, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x75, 4333 0x6c, 0x74, 0x64, 0x62, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 4334 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x44, 4335 0x42, 0x43, 0x66, 0x67, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x12, 0x17, 4336 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 4337 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 4338 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 4339 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x22, 0x0a, 4340 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 4341 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x49, 4342 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 4343 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x54, 0x61, 0x73, 4344 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 4345 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x75, 4346 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x13, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, 0x6e, 0x6f, 4347 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 4348 0x32, 0x13, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 4349 0x75, 0x62, 0x53, 0x75, 0x62, 0x52, 0x12, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x4e, 0x6f, 0x74, 4350 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x12, 0x62, 0x6f, 0x74, 4351 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 4352 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 4353 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 4354 0x52, 0x10, 0x62, 0x6f, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 4355 0x63, 0x65, 0x22, 0x59, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x12, 0x14, 0x0a, 0x05, 4356 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 4357 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 4358 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 4359 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 4360 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb7, 0x08, 4361 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x07, 4362 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 4363 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 4364 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 4365 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 4366 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 4367 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 4368 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 4369 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 4370 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 4371 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 4372 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x62, 0x61, 0x6e, 4373 0x64, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 4374 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 4375 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x62, 0x61, 0x6e, 4376 0x64, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 4377 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 4378 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 4379 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 4380 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 4381 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 4382 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 4383 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 4384 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4385 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 4386 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x74, 4387 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x73, 0x77, 4388 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 4389 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x61, 4390 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 4391 0x79, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 4392 0x74, 0x72, 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x72, 4393 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x18, 4394 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x61, 4395 0x73, 0x6b, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x03, 0x62, 0x6f, 0x74, 0x18, 0x0b, 4396 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4397 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x52, 0x03, 0x62, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 4398 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 4399 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 4400 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 4401 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 4402 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 4403 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 4404 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x64, 0x75, 0x70, 0x65, 0x64, 0x46, 4405 0x72, 0x6f, 0x6d, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x0f, 4406 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 4407 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 4408 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x70, 0x69, 0x6e, 0x73, 4409 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 4410 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x50, 0x69, 0x6e, 0x73, 0x52, 0x08, 0x63, 4411 0x69, 0x70, 0x64, 0x50, 0x69, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x66, 0x6f, 4412 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 4413 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 4414 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x66, 4415 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x5f, 4416 0x63, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x12, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 4417 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 4418 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 4419 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x54, 0x72, 0x65, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 4420 0x70, 0x75, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x61, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x70, 4421 0x75, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 4422 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x52, 4423 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x63, 0x61, 0x73, 0x4f, 0x75, 0x74, 4424 0x70, 0x75, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x75, 0x6c, 4425 0x74, 0x64, 0x62, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 4426 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 4427 0x75, 0x6c, 0x74, 0x44, 0x42, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 4428 0x74, 0x64, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x99, 0x01, 0x0a, 0x08, 0x43, 0x49, 0x50, 0x44, 4429 0x50, 0x69, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 4430 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 4431 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 4432 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4433 0x76, 0x31, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x0d, 4434 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 4435 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 4436 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x49, 4437 0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 4438 0x67, 0x65, 0x73, 0x22, 0xb9, 0x03, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x65, 0x72, 0x66, 4439 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x5f, 4440 0x75, 0x73, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x73, 0x74, 0x55, 4441 0x73, 0x64, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x76, 0x65, 0x72, 4442 0x68, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 4443 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 4444 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x76, 0x65, 0x72, 4445 0x68, 0x65, 0x61, 0x64, 0x12, 0x40, 0x0a, 0x0e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6f, 0x76, 4446 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 4447 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 4448 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4f, 0x76, 4449 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x34, 0x0a, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 4450 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 4451 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 4452 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, 0x12, 0x3a, 0x0a, 0x08, 4453 0x74, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 4454 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 4455 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 4456 0x74, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x45, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x75, 4457 0x70, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 4458 0x32, 0x1e, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 4459 0x61, 0x73, 0x6b, 0x53, 0x65, 0x74, 0x75, 0x70, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 4460 0x52, 0x0d, 0x73, 0x65, 0x74, 0x75, 0x70, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 4461 0x4e, 0x0a, 0x11, 0x74, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 4462 0x68, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x77, 0x61, 4463 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x61, 4464 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x52, 0x10, 0x74, 4465 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x22, 4466 0xa6, 0x02, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x74, 0x75, 0x70, 0x4f, 0x76, 0x65, 4467 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 4468 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 4469 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 4470 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 4471 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 4472 0x32, 0x1e, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 4473 0x61, 0x63, 0x68, 0x65, 0x54, 0x72, 0x69, 0x6d, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 4474 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x54, 0x72, 0x69, 0x6d, 0x12, 0x2d, 0x0a, 0x04, 0x63, 4475 0x69, 0x70, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x77, 0x61, 0x72, 4476 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x4f, 0x76, 0x65, 0x72, 4477 0x68, 0x65, 0x61, 0x64, 0x52, 0x04, 0x63, 0x69, 0x70, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x6e, 0x61, 4478 0x6d, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 4479 0x1f, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 4480 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 4481 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x2a, 0x0a, 0x03, 4482 0x63, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 4483 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x4f, 0x76, 0x65, 0x72, 0x68, 4484 0x65, 0x61, 0x64, 0x52, 0x03, 0x63, 0x61, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x14, 0x54, 0x61, 0x73, 4485 0x6b, 0x54, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 4486 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 4487 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 4488 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 4489 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x03, 0x63, 0x61, 0x73, 0x18, 4490 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 4491 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x52, 4492 0x03, 0x63, 0x61, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x63, 0x61, 4493 0x63, 0x68, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x77, 0x61, 0x72, 4494 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 4495 0x68, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 4496 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 4497 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 4498 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x4f, 0x76, 0x65, 4499 0x72, 0x68, 0x65, 0x61, 0x64, 0x52, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x22, 0x4a, 4500 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x72, 0x69, 0x6d, 0x4f, 0x76, 0x65, 0x72, 0x68, 4501 0x65, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 4502 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 4503 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 4504 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x0c, 0x43, 0x49, 4505 0x50, 0x44, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 4506 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 4507 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 4508 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 4509 0x6e, 0x22, 0x4b, 0x0a, 0x12, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4f, 4510 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 4511 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 4512 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 4513 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa6, 4514 0x01, 0x0a, 0x0b, 0x43, 0x41, 0x53, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x35, 4515 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 4516 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 4517 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 4518 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x04, 0x63, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 4519 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 4520 0x31, 0x2e, 0x43, 0x41, 0x53, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 4521 0x73, 0x52, 0x04, 0x63, 0x6f, 0x6c, 0x64, 0x12, 0x2e, 0x0a, 0x03, 0x68, 0x6f, 0x74, 0x18, 0x03, 4522 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 4523 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x74, 0x61, 4524 0x74, 0x73, 0x52, 0x03, 0x68, 0x6f, 0x74, 0x22, 0x48, 0x0a, 0x0f, 0x43, 0x6c, 0x65, 0x61, 0x6e, 4525 0x75, 0x70, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 4526 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 4527 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 4528 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 4529 0x6e, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 4530 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 4531 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 4532 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 4533 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 4534 0x0a, 0x04, 0x63, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 4535 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x45, 0x6e, 4536 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x04, 0x63, 0x6f, 0x6c, 0x64, 4537 0x12, 0x2e, 0x0a, 0x03, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 4538 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x41, 0x53, 0x45, 4539 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x03, 0x68, 0x6f, 0x74, 4540 0x22, 0x70, 0x0a, 0x0f, 0x43, 0x41, 0x53, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x53, 0x74, 4541 0x61, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 4542 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x73, 4543 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 4544 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x74, 0x6f, 0x74, 4545 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 4546 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x74, 0x65, 4547 0x6d, 0x73, 0x22, 0x25, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x44, 0x42, 0x43, 0x66, 4548 0x67, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 4549 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x65, 0x73, 4550 0x75, 0x6c, 0x74, 0x44, 0x42, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 4551 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 4552 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 4553 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 4554 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0xdf, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x74, 0x53, 0x74, 0x61, 4555 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4f, 0x54, 0x5f, 0x53, 4556 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 4557 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x01, 4558 0x12, 0x19, 0x0a, 0x15, 0x51, 0x55, 0x41, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x4e, 0x45, 0x44, 0x5f, 4559 0x42, 0x59, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x51, 4560 0x55, 0x41, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x42, 0x4f, 4561 0x54, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x4f, 0x56, 0x45, 0x52, 0x48, 0x45, 0x41, 0x44, 0x5f, 4562 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 4563 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x56, 0x45, 0x52, 0x48, 0x45, 4564 0x41, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 4565 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x48, 0x4f, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 4566 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x55, 0x53, 0x59, 0x10, 0x07, 0x12, 4567 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x08, 0x12, 0x08, 0x0a, 4568 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x09, 0x2a, 0x8f, 0x03, 0x0a, 0x0c, 0x42, 0x6f, 0x74, 0x45, 4569 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x42, 0x4f, 0x54, 0x5f, 4570 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 4571 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x4f, 0x54, 0x5f, 4572 0x4e, 0x45, 0x57, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x18, 0x0a, 4573 0x14, 0x42, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x46, 0x41, 4574 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x4f, 0x54, 0x5f, 0x48, 4575 0x4f, 0x4f, 0x4b, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x42, 4576 0x4f, 0x54, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x04, 0x12, 0x16, 0x0a, 4577 0x12, 0x42, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x48, 4578 0x4f, 0x53, 0x54, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x4f, 0x54, 0x5f, 0x53, 0x48, 0x55, 4579 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x54, 0x5f, 0x44, 4580 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x54, 0x5f, 4581 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x53, 4582 0x54, 0x52, 0x55, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 4583 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x54, 4584 0x41, 0x53, 0x4b, 0x10, 0x0b, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 4585 0x54, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x0c, 0x12, 4586 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 4587 0x54, 0x45, 0x5f, 0x42, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x0d, 0x12, 0x1a, 0x0a, 4588 0x16, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 4589 0x41, 0x54, 0x45, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x41, 0x53, 4590 0x4b, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x14, 0x12, 0x19, 0x0a, 4591 0x15, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x46, 4592 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x15, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x41, 0x53, 0x4b, 4593 0x5f, 0x4b, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x16, 0x2a, 0x43, 0x0a, 0x04, 0x55, 0x73, 0x65, 4594 0x72, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 4595 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x53, 0x45, 0x52, 0x5f, 4596 0x53, 0x57, 0x41, 0x52, 0x4d, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x53, 4597 0x45, 0x52, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x52, 0x59, 0x10, 0x02, 0x2a, 0xd0, 4598 0x01, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 4599 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 4600 0x54, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 4601 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x41, 0x53, 4602 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x0f, 0x12, 0x14, 4603 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 4604 0x4e, 0x47, 0x10, 0x10, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 4605 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x20, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x41, 4606 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x45, 0x4e, 0x54, 4607 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x30, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x41, 0x54, 0x45, 0x47, 4608 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 4609 0x4e, 0x45, 0x10, 0x40, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 4610 0x5f, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x41, 0x4e, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 4611 0x50, 0x2a, 0xe3, 0x03, 0x0a, 0x09, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 4612 0x16, 0x0a, 0x12, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 4613 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 4614 0x4e, 0x47, 0x10, 0x10, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 4615 0x44, 0x45, 0x44, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 4616 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x20, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x55, 0x4e, 0x4e, 0x49, 4617 0x4e, 0x47, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x53, 0x45, 0x54, 0x55, 4618 0x50, 0x10, 0x21, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 4619 0x56, 0x45, 0x52, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x52, 0x44, 0x4f, 0x57, 0x4e, 4620 0x10, 0x22, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4e, 4621 0x47, 0x10, 0x23, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x49, 0x4e, 4622 0x47, 0x10, 0x2f, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x41, 0x4e, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 4623 0x4e, 0x41, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x30, 0x12, 0x0f, 0x0a, 4624 0x0b, 0x44, 0x55, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x31, 0x12, 0x13, 4625 0x0a, 0x0f, 0x42, 0x4f, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x50, 0x50, 0x45, 0x41, 0x52, 0x45, 4626 0x44, 0x10, 0x32, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x45, 0x4d, 0x50, 0x54, 0x45, 0x44, 4627 0x10, 0x33, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 4628 0x40, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x41, 4629 0x12, 0x15, 0x0a, 0x11, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x53, 0x49, 4630 0x4c, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x42, 0x12, 0x0a, 0x0a, 0x06, 0x4b, 0x49, 0x4c, 0x4c, 0x45, 4631 0x44, 0x10, 0x43, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x49, 4632 0x4e, 0x50, 0x55, 0x54, 0x53, 0x10, 0x44, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x44, 0x55, 0x50, 4633 0x45, 0x44, 0x10, 0x50, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 4634 0x51, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x52, 0x12, 4635 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x53, 4636 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x48, 0x45, 0x44, 0x10, 0x54, 0x12, 4637 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x58, 0x48, 0x41, 4638 0x55, 0x53, 0x54, 0x45, 0x44, 0x10, 0x55, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4b, 0x49, 0x50, 0x50, 4639 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x46, 0x41, 0x49, 0x4c, 4640 0x55, 0x52, 0x45, 0x10, 0x56, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 4641 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x57, 0x32, 0x53, 0x0a, 0x06, 0x42, 0x6f, 0x74, 0x41, 0x50, 4642 0x49, 0x12, 0x49, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x77, 4643 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 4644 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x77, 0x61, 4645 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x74, 0x45, 0x76, 0x65, 0x6e, 4646 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 4647 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 4648 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x72, 4649 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 4650 0x72, 0x6f, 0x74, 0x6f, 0x33, 4651 } 4652 4653 var ( 4654 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescOnce sync.Once 4655 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescData = file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDesc 4656 ) 4657 4658 func file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescGZIP() []byte { 4659 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescOnce.Do(func() { 4660 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescData) 4661 }) 4662 return file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDescData 4663 } 4664 4665 var file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes = make([]protoimpl.EnumInfo, 6) 4666 var file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes = make([]protoimpl.MessageInfo, 35) 4667 var file_go_chromium_org_luci_swarming_proto_api_swarming_proto_goTypes = []interface{}{ 4668 (BotStatusType)(0), // 0: swarming.v1.BotStatusType 4669 (BotEventType)(0), // 1: swarming.v1.BotEventType 4670 (User)(0), // 2: swarming.v1.User 4671 (TaskStateCategory)(0), // 3: swarming.v1.TaskStateCategory 4672 (TaskState)(0), // 4: swarming.v1.TaskState 4673 (Containment_ContainmentType)(0), // 5: swarming.v1.Containment.ContainmentType 4674 (*BotEventsRequest)(nil), // 6: swarming.v1.BotEventsRequest 4675 (*BotEventsResponse)(nil), // 7: swarming.v1.BotEventsResponse 4676 (*StringPair)(nil), // 8: swarming.v1.StringPair 4677 (*StringListPair)(nil), // 9: swarming.v1.StringListPair 4678 (*Bot)(nil), // 10: swarming.v1.Bot 4679 (*BotInfo)(nil), // 11: swarming.v1.BotInfo 4680 (*PhysicalEntity)(nil), // 12: swarming.v1.PhysicalEntity 4681 (*CASStats)(nil), // 13: swarming.v1.CASStats 4682 (*NamedCacheStats)(nil), // 14: swarming.v1.NamedCacheStats 4683 (*CIPDPackageCacheStats)(nil), // 15: swarming.v1.CIPDPackageCacheStats 4684 (*BotEvent)(nil), // 16: swarming.v1.BotEvent 4685 (*CASTree)(nil), // 17: swarming.v1.CASTree 4686 (*Digest)(nil), // 18: swarming.v1.Digest 4687 (*CASReference)(nil), // 19: swarming.v1.CASReference 4688 (*CIPDPackage)(nil), // 20: swarming.v1.CIPDPackage 4689 (*NamedCacheEntry)(nil), // 21: swarming.v1.NamedCacheEntry 4690 (*Containment)(nil), // 22: swarming.v1.Containment 4691 (*TaskProperties)(nil), // 23: swarming.v1.TaskProperties 4692 (*TaskSlice)(nil), // 24: swarming.v1.TaskSlice 4693 (*TaskRequest)(nil), // 25: swarming.v1.TaskRequest 4694 (*PubSub)(nil), // 26: swarming.v1.PubSub 4695 (*TaskResult)(nil), // 27: swarming.v1.TaskResult 4696 (*CIPDPins)(nil), // 28: swarming.v1.CIPDPins 4697 (*TaskPerformance)(nil), // 29: swarming.v1.TaskPerformance 4698 (*TaskSetupOverhead)(nil), // 30: swarming.v1.TaskSetupOverhead 4699 (*TaskTeardownOverhead)(nil), // 31: swarming.v1.TaskTeardownOverhead 4700 (*CacheTrimOverhead)(nil), // 32: swarming.v1.CacheTrimOverhead 4701 (*CIPDOverhead)(nil), // 33: swarming.v1.CIPDOverhead 4702 (*NamedCacheOverhead)(nil), // 34: swarming.v1.NamedCacheOverhead 4703 (*CASOverhead)(nil), // 35: swarming.v1.CASOverhead 4704 (*CleanupOverhead)(nil), // 36: swarming.v1.CleanupOverhead 4705 (*TaskOverheadStats)(nil), // 37: swarming.v1.TaskOverheadStats 4706 (*CASEntriesStats)(nil), // 38: swarming.v1.CASEntriesStats 4707 (*ResultDBCfg)(nil), // 39: swarming.v1.ResultDBCfg 4708 (*ResultDBInfo)(nil), // 40: swarming.v1.ResultDBInfo 4709 (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp 4710 (*structpb.Struct)(nil), // 42: google.protobuf.Struct 4711 (*durationpb.Duration)(nil), // 43: google.protobuf.Duration 4712 } 4713 var file_go_chromium_org_luci_swarming_proto_api_swarming_proto_depIdxs = []int32{ 4714 41, // 0: swarming.v1.BotEventsRequest.start_time:type_name -> google.protobuf.Timestamp 4715 41, // 1: swarming.v1.BotEventsRequest.end_time:type_name -> google.protobuf.Timestamp 4716 16, // 2: swarming.v1.BotEventsResponse.events:type_name -> swarming.v1.BotEvent 4717 0, // 3: swarming.v1.Bot.status:type_name -> swarming.v1.BotStatusType 4718 9, // 4: swarming.v1.Bot.dimensions:type_name -> swarming.v1.StringListPair 4719 11, // 5: swarming.v1.Bot.info:type_name -> swarming.v1.BotInfo 4720 42, // 6: swarming.v1.BotInfo.supplemental:type_name -> google.protobuf.Struct 4721 13, // 7: swarming.v1.BotInfo.cas_stats:type_name -> swarming.v1.CASStats 4722 14, // 8: swarming.v1.BotInfo.named_caches_stats:type_name -> swarming.v1.NamedCacheStats 4723 15, // 9: swarming.v1.BotInfo.cipd_packages_cache_stats:type_name -> swarming.v1.CIPDPackageCacheStats 4724 12, // 10: swarming.v1.BotInfo.host:type_name -> swarming.v1.PhysicalEntity 4725 12, // 11: swarming.v1.BotInfo.devices:type_name -> swarming.v1.PhysicalEntity 4726 41, // 12: swarming.v1.BotInfo.last_seen_ts:type_name -> google.protobuf.Timestamp 4727 41, // 13: swarming.v1.BotInfo.idle_since_ts:type_name -> google.protobuf.Timestamp 4728 42, // 14: swarming.v1.PhysicalEntity.supplemental:type_name -> google.protobuf.Struct 4729 41, // 15: swarming.v1.CASStats.oldest_time:type_name -> google.protobuf.Timestamp 4730 41, // 16: swarming.v1.NamedCacheStats.last_use_time:type_name -> google.protobuf.Timestamp 4731 41, // 17: swarming.v1.CIPDPackageCacheStats.last_use_time:type_name -> google.protobuf.Timestamp 4732 41, // 18: swarming.v1.BotEvent.event_time:type_name -> google.protobuf.Timestamp 4733 10, // 19: swarming.v1.BotEvent.bot:type_name -> swarming.v1.Bot 4734 1, // 20: swarming.v1.BotEvent.event:type_name -> swarming.v1.BotEventType 4735 18, // 21: swarming.v1.CASReference.digest:type_name -> swarming.v1.Digest 4736 5, // 22: swarming.v1.Containment.containment_type:type_name -> swarming.v1.Containment.ContainmentType 4737 17, // 23: swarming.v1.TaskProperties.cas_inputs:type_name -> swarming.v1.CASTree 4738 19, // 24: swarming.v1.TaskProperties.cas_input_root:type_name -> swarming.v1.CASReference 4739 20, // 25: swarming.v1.TaskProperties.cipd_inputs:type_name -> swarming.v1.CIPDPackage 4740 21, // 26: swarming.v1.TaskProperties.named_caches:type_name -> swarming.v1.NamedCacheEntry 4741 9, // 27: swarming.v1.TaskProperties.dimensions:type_name -> swarming.v1.StringListPair 4742 8, // 28: swarming.v1.TaskProperties.env:type_name -> swarming.v1.StringPair 4743 9, // 29: swarming.v1.TaskProperties.env_paths:type_name -> swarming.v1.StringListPair 4744 22, // 30: swarming.v1.TaskProperties.containment:type_name -> swarming.v1.Containment 4745 43, // 31: swarming.v1.TaskProperties.execution_timeout:type_name -> google.protobuf.Duration 4746 43, // 32: swarming.v1.TaskProperties.io_timeout:type_name -> google.protobuf.Duration 4747 43, // 33: swarming.v1.TaskProperties.grace_period:type_name -> google.protobuf.Duration 4748 2, // 34: swarming.v1.TaskProperties.user:type_name -> swarming.v1.User 4749 23, // 35: swarming.v1.TaskSlice.properties:type_name -> swarming.v1.TaskProperties 4750 43, // 36: swarming.v1.TaskSlice.expiration:type_name -> google.protobuf.Duration 4751 24, // 37: swarming.v1.TaskRequest.task_slices:type_name -> swarming.v1.TaskSlice 4752 41, // 38: swarming.v1.TaskRequest.create_time:type_name -> google.protobuf.Timestamp 4753 39, // 39: swarming.v1.TaskRequest.resultdb:type_name -> swarming.v1.ResultDBCfg 4754 26, // 40: swarming.v1.TaskRequest.pubsub_notification:type_name -> swarming.v1.PubSub 4755 43, // 41: swarming.v1.TaskRequest.bot_ping_tolerance:type_name -> google.protobuf.Duration 4756 25, // 42: swarming.v1.TaskResult.request:type_name -> swarming.v1.TaskRequest 4757 41, // 43: swarming.v1.TaskResult.create_time:type_name -> google.protobuf.Timestamp 4758 41, // 44: swarming.v1.TaskResult.start_time:type_name -> google.protobuf.Timestamp 4759 41, // 45: swarming.v1.TaskResult.abandon_time:type_name -> google.protobuf.Timestamp 4760 41, // 46: swarming.v1.TaskResult.end_time:type_name -> google.protobuf.Timestamp 4761 43, // 47: swarming.v1.TaskResult.duration:type_name -> google.protobuf.Duration 4762 4, // 48: swarming.v1.TaskResult.state:type_name -> swarming.v1.TaskState 4763 3, // 49: swarming.v1.TaskResult.state_category:type_name -> swarming.v1.TaskStateCategory 4764 10, // 50: swarming.v1.TaskResult.bot:type_name -> swarming.v1.Bot 4765 28, // 51: swarming.v1.TaskResult.cipd_pins:type_name -> swarming.v1.CIPDPins 4766 29, // 52: swarming.v1.TaskResult.performance:type_name -> swarming.v1.TaskPerformance 4767 17, // 53: swarming.v1.TaskResult.outputs:type_name -> swarming.v1.CASTree 4768 19, // 54: swarming.v1.TaskResult.cas_output_root:type_name -> swarming.v1.CASReference 4769 40, // 55: swarming.v1.TaskResult.resultdb_info:type_name -> swarming.v1.ResultDBInfo 4770 20, // 56: swarming.v1.CIPDPins.client_package:type_name -> swarming.v1.CIPDPackage 4771 20, // 57: swarming.v1.CIPDPins.packages:type_name -> swarming.v1.CIPDPackage 4772 43, // 58: swarming.v1.TaskPerformance.total_overhead:type_name -> google.protobuf.Duration 4773 43, // 59: swarming.v1.TaskPerformance.other_overhead:type_name -> google.protobuf.Duration 4774 37, // 60: swarming.v1.TaskPerformance.setup:type_name -> swarming.v1.TaskOverheadStats 4775 37, // 61: swarming.v1.TaskPerformance.teardown:type_name -> swarming.v1.TaskOverheadStats 4776 30, // 62: swarming.v1.TaskPerformance.setup_overhead:type_name -> swarming.v1.TaskSetupOverhead 4777 31, // 63: swarming.v1.TaskPerformance.teardown_overhead:type_name -> swarming.v1.TaskTeardownOverhead 4778 43, // 64: swarming.v1.TaskSetupOverhead.duration:type_name -> google.protobuf.Duration 4779 32, // 65: swarming.v1.TaskSetupOverhead.cache_trim:type_name -> swarming.v1.CacheTrimOverhead 4780 33, // 66: swarming.v1.TaskSetupOverhead.cipd:type_name -> swarming.v1.CIPDOverhead 4781 34, // 67: swarming.v1.TaskSetupOverhead.named_cache:type_name -> swarming.v1.NamedCacheOverhead 4782 35, // 68: swarming.v1.TaskSetupOverhead.cas:type_name -> swarming.v1.CASOverhead 4783 43, // 69: swarming.v1.TaskTeardownOverhead.duration:type_name -> google.protobuf.Duration 4784 35, // 70: swarming.v1.TaskTeardownOverhead.cas:type_name -> swarming.v1.CASOverhead 4785 34, // 71: swarming.v1.TaskTeardownOverhead.named_cache:type_name -> swarming.v1.NamedCacheOverhead 4786 36, // 72: swarming.v1.TaskTeardownOverhead.cleanup:type_name -> swarming.v1.CleanupOverhead 4787 43, // 73: swarming.v1.CacheTrimOverhead.duration:type_name -> google.protobuf.Duration 4788 43, // 74: swarming.v1.CIPDOverhead.duration:type_name -> google.protobuf.Duration 4789 43, // 75: swarming.v1.NamedCacheOverhead.duration:type_name -> google.protobuf.Duration 4790 43, // 76: swarming.v1.CASOverhead.duration:type_name -> google.protobuf.Duration 4791 38, // 77: swarming.v1.CASOverhead.cold:type_name -> swarming.v1.CASEntriesStats 4792 38, // 78: swarming.v1.CASOverhead.hot:type_name -> swarming.v1.CASEntriesStats 4793 43, // 79: swarming.v1.CleanupOverhead.duration:type_name -> google.protobuf.Duration 4794 43, // 80: swarming.v1.TaskOverheadStats.duration:type_name -> google.protobuf.Duration 4795 38, // 81: swarming.v1.TaskOverheadStats.cold:type_name -> swarming.v1.CASEntriesStats 4796 38, // 82: swarming.v1.TaskOverheadStats.hot:type_name -> swarming.v1.CASEntriesStats 4797 6, // 83: swarming.v1.BotAPI.Events:input_type -> swarming.v1.BotEventsRequest 4798 7, // 84: swarming.v1.BotAPI.Events:output_type -> swarming.v1.BotEventsResponse 4799 84, // [84:85] is the sub-list for method output_type 4800 83, // [83:84] is the sub-list for method input_type 4801 83, // [83:83] is the sub-list for extension type_name 4802 83, // [83:83] is the sub-list for extension extendee 4803 0, // [0:83] is the sub-list for field type_name 4804 } 4805 4806 func init() { file_go_chromium_org_luci_swarming_proto_api_swarming_proto_init() } 4807 func file_go_chromium_org_luci_swarming_proto_api_swarming_proto_init() { 4808 if File_go_chromium_org_luci_swarming_proto_api_swarming_proto != nil { 4809 return 4810 } 4811 if !protoimpl.UnsafeEnabled { 4812 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 4813 switch v := v.(*BotEventsRequest); i { 4814 case 0: 4815 return &v.state 4816 case 1: 4817 return &v.sizeCache 4818 case 2: 4819 return &v.unknownFields 4820 default: 4821 return nil 4822 } 4823 } 4824 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 4825 switch v := v.(*BotEventsResponse); i { 4826 case 0: 4827 return &v.state 4828 case 1: 4829 return &v.sizeCache 4830 case 2: 4831 return &v.unknownFields 4832 default: 4833 return nil 4834 } 4835 } 4836 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 4837 switch v := v.(*StringPair); i { 4838 case 0: 4839 return &v.state 4840 case 1: 4841 return &v.sizeCache 4842 case 2: 4843 return &v.unknownFields 4844 default: 4845 return nil 4846 } 4847 } 4848 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 4849 switch v := v.(*StringListPair); i { 4850 case 0: 4851 return &v.state 4852 case 1: 4853 return &v.sizeCache 4854 case 2: 4855 return &v.unknownFields 4856 default: 4857 return nil 4858 } 4859 } 4860 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 4861 switch v := v.(*Bot); i { 4862 case 0: 4863 return &v.state 4864 case 1: 4865 return &v.sizeCache 4866 case 2: 4867 return &v.unknownFields 4868 default: 4869 return nil 4870 } 4871 } 4872 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 4873 switch v := v.(*BotInfo); i { 4874 case 0: 4875 return &v.state 4876 case 1: 4877 return &v.sizeCache 4878 case 2: 4879 return &v.unknownFields 4880 default: 4881 return nil 4882 } 4883 } 4884 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 4885 switch v := v.(*PhysicalEntity); i { 4886 case 0: 4887 return &v.state 4888 case 1: 4889 return &v.sizeCache 4890 case 2: 4891 return &v.unknownFields 4892 default: 4893 return nil 4894 } 4895 } 4896 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 4897 switch v := v.(*CASStats); i { 4898 case 0: 4899 return &v.state 4900 case 1: 4901 return &v.sizeCache 4902 case 2: 4903 return &v.unknownFields 4904 default: 4905 return nil 4906 } 4907 } 4908 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 4909 switch v := v.(*NamedCacheStats); i { 4910 case 0: 4911 return &v.state 4912 case 1: 4913 return &v.sizeCache 4914 case 2: 4915 return &v.unknownFields 4916 default: 4917 return nil 4918 } 4919 } 4920 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 4921 switch v := v.(*CIPDPackageCacheStats); i { 4922 case 0: 4923 return &v.state 4924 case 1: 4925 return &v.sizeCache 4926 case 2: 4927 return &v.unknownFields 4928 default: 4929 return nil 4930 } 4931 } 4932 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 4933 switch v := v.(*BotEvent); i { 4934 case 0: 4935 return &v.state 4936 case 1: 4937 return &v.sizeCache 4938 case 2: 4939 return &v.unknownFields 4940 default: 4941 return nil 4942 } 4943 } 4944 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 4945 switch v := v.(*CASTree); i { 4946 case 0: 4947 return &v.state 4948 case 1: 4949 return &v.sizeCache 4950 case 2: 4951 return &v.unknownFields 4952 default: 4953 return nil 4954 } 4955 } 4956 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { 4957 switch v := v.(*Digest); i { 4958 case 0: 4959 return &v.state 4960 case 1: 4961 return &v.sizeCache 4962 case 2: 4963 return &v.unknownFields 4964 default: 4965 return nil 4966 } 4967 } 4968 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { 4969 switch v := v.(*CASReference); i { 4970 case 0: 4971 return &v.state 4972 case 1: 4973 return &v.sizeCache 4974 case 2: 4975 return &v.unknownFields 4976 default: 4977 return nil 4978 } 4979 } 4980 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { 4981 switch v := v.(*CIPDPackage); i { 4982 case 0: 4983 return &v.state 4984 case 1: 4985 return &v.sizeCache 4986 case 2: 4987 return &v.unknownFields 4988 default: 4989 return nil 4990 } 4991 } 4992 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { 4993 switch v := v.(*NamedCacheEntry); i { 4994 case 0: 4995 return &v.state 4996 case 1: 4997 return &v.sizeCache 4998 case 2: 4999 return &v.unknownFields 5000 default: 5001 return nil 5002 } 5003 } 5004 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { 5005 switch v := v.(*Containment); i { 5006 case 0: 5007 return &v.state 5008 case 1: 5009 return &v.sizeCache 5010 case 2: 5011 return &v.unknownFields 5012 default: 5013 return nil 5014 } 5015 } 5016 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { 5017 switch v := v.(*TaskProperties); i { 5018 case 0: 5019 return &v.state 5020 case 1: 5021 return &v.sizeCache 5022 case 2: 5023 return &v.unknownFields 5024 default: 5025 return nil 5026 } 5027 } 5028 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { 5029 switch v := v.(*TaskSlice); i { 5030 case 0: 5031 return &v.state 5032 case 1: 5033 return &v.sizeCache 5034 case 2: 5035 return &v.unknownFields 5036 default: 5037 return nil 5038 } 5039 } 5040 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { 5041 switch v := v.(*TaskRequest); i { 5042 case 0: 5043 return &v.state 5044 case 1: 5045 return &v.sizeCache 5046 case 2: 5047 return &v.unknownFields 5048 default: 5049 return nil 5050 } 5051 } 5052 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { 5053 switch v := v.(*PubSub); i { 5054 case 0: 5055 return &v.state 5056 case 1: 5057 return &v.sizeCache 5058 case 2: 5059 return &v.unknownFields 5060 default: 5061 return nil 5062 } 5063 } 5064 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { 5065 switch v := v.(*TaskResult); i { 5066 case 0: 5067 return &v.state 5068 case 1: 5069 return &v.sizeCache 5070 case 2: 5071 return &v.unknownFields 5072 default: 5073 return nil 5074 } 5075 } 5076 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { 5077 switch v := v.(*CIPDPins); i { 5078 case 0: 5079 return &v.state 5080 case 1: 5081 return &v.sizeCache 5082 case 2: 5083 return &v.unknownFields 5084 default: 5085 return nil 5086 } 5087 } 5088 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { 5089 switch v := v.(*TaskPerformance); i { 5090 case 0: 5091 return &v.state 5092 case 1: 5093 return &v.sizeCache 5094 case 2: 5095 return &v.unknownFields 5096 default: 5097 return nil 5098 } 5099 } 5100 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { 5101 switch v := v.(*TaskSetupOverhead); i { 5102 case 0: 5103 return &v.state 5104 case 1: 5105 return &v.sizeCache 5106 case 2: 5107 return &v.unknownFields 5108 default: 5109 return nil 5110 } 5111 } 5112 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { 5113 switch v := v.(*TaskTeardownOverhead); i { 5114 case 0: 5115 return &v.state 5116 case 1: 5117 return &v.sizeCache 5118 case 2: 5119 return &v.unknownFields 5120 default: 5121 return nil 5122 } 5123 } 5124 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { 5125 switch v := v.(*CacheTrimOverhead); i { 5126 case 0: 5127 return &v.state 5128 case 1: 5129 return &v.sizeCache 5130 case 2: 5131 return &v.unknownFields 5132 default: 5133 return nil 5134 } 5135 } 5136 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { 5137 switch v := v.(*CIPDOverhead); i { 5138 case 0: 5139 return &v.state 5140 case 1: 5141 return &v.sizeCache 5142 case 2: 5143 return &v.unknownFields 5144 default: 5145 return nil 5146 } 5147 } 5148 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { 5149 switch v := v.(*NamedCacheOverhead); i { 5150 case 0: 5151 return &v.state 5152 case 1: 5153 return &v.sizeCache 5154 case 2: 5155 return &v.unknownFields 5156 default: 5157 return nil 5158 } 5159 } 5160 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { 5161 switch v := v.(*CASOverhead); i { 5162 case 0: 5163 return &v.state 5164 case 1: 5165 return &v.sizeCache 5166 case 2: 5167 return &v.unknownFields 5168 default: 5169 return nil 5170 } 5171 } 5172 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { 5173 switch v := v.(*CleanupOverhead); i { 5174 case 0: 5175 return &v.state 5176 case 1: 5177 return &v.sizeCache 5178 case 2: 5179 return &v.unknownFields 5180 default: 5181 return nil 5182 } 5183 } 5184 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { 5185 switch v := v.(*TaskOverheadStats); i { 5186 case 0: 5187 return &v.state 5188 case 1: 5189 return &v.sizeCache 5190 case 2: 5191 return &v.unknownFields 5192 default: 5193 return nil 5194 } 5195 } 5196 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { 5197 switch v := v.(*CASEntriesStats); i { 5198 case 0: 5199 return &v.state 5200 case 1: 5201 return &v.sizeCache 5202 case 2: 5203 return &v.unknownFields 5204 default: 5205 return nil 5206 } 5207 } 5208 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { 5209 switch v := v.(*ResultDBCfg); i { 5210 case 0: 5211 return &v.state 5212 case 1: 5213 return &v.sizeCache 5214 case 2: 5215 return &v.unknownFields 5216 default: 5217 return nil 5218 } 5219 } 5220 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { 5221 switch v := v.(*ResultDBInfo); i { 5222 case 0: 5223 return &v.state 5224 case 1: 5225 return &v.sizeCache 5226 case 2: 5227 return &v.unknownFields 5228 default: 5229 return nil 5230 } 5231 } 5232 } 5233 type x struct{} 5234 out := protoimpl.TypeBuilder{ 5235 File: protoimpl.DescBuilder{ 5236 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 5237 RawDescriptor: file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDesc, 5238 NumEnums: 6, 5239 NumMessages: 35, 5240 NumExtensions: 0, 5241 NumServices: 1, 5242 }, 5243 GoTypes: file_go_chromium_org_luci_swarming_proto_api_swarming_proto_goTypes, 5244 DependencyIndexes: file_go_chromium_org_luci_swarming_proto_api_swarming_proto_depIdxs, 5245 EnumInfos: file_go_chromium_org_luci_swarming_proto_api_swarming_proto_enumTypes, 5246 MessageInfos: file_go_chromium_org_luci_swarming_proto_api_swarming_proto_msgTypes, 5247 }.Build() 5248 File_go_chromium_org_luci_swarming_proto_api_swarming_proto = out.File 5249 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_rawDesc = nil 5250 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_goTypes = nil 5251 file_go_chromium_org_luci_swarming_proto_api_swarming_proto_depIdxs = nil 5252 } 5253 5254 // Reference imports to suppress errors if they are not otherwise used. 5255 var _ context.Context 5256 var _ grpc.ClientConnInterface 5257 5258 // This is a compile-time assertion to ensure that this generated file 5259 // is compatible with the grpc package it is being compiled against. 5260 const _ = grpc.SupportPackageIsVersion6 5261 5262 // BotAPIClient is the client API for BotAPI service. 5263 // 5264 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 5265 type BotAPIClient interface { 5266 // Events returns events relating to one bot. 5267 Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error) 5268 } 5269 type botAPIPRPCClient struct { 5270 client *prpc.Client 5271 } 5272 5273 func NewBotAPIPRPCClient(client *prpc.Client) BotAPIClient { 5274 return &botAPIPRPCClient{client} 5275 } 5276 5277 func (c *botAPIPRPCClient) Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error) { 5278 out := new(BotEventsResponse) 5279 err := c.client.Call(ctx, "swarming.v1.BotAPI", "Events", in, out, opts...) 5280 if err != nil { 5281 return nil, err 5282 } 5283 return out, nil 5284 } 5285 5286 type botAPIClient struct { 5287 cc grpc.ClientConnInterface 5288 } 5289 5290 func NewBotAPIClient(cc grpc.ClientConnInterface) BotAPIClient { 5291 return &botAPIClient{cc} 5292 } 5293 5294 func (c *botAPIClient) Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error) { 5295 out := new(BotEventsResponse) 5296 err := c.cc.Invoke(ctx, "/swarming.v1.BotAPI/Events", in, out, opts...) 5297 if err != nil { 5298 return nil, err 5299 } 5300 return out, nil 5301 } 5302 5303 // BotAPIServer is the server API for BotAPI service. 5304 type BotAPIServer interface { 5305 // Events returns events relating to one bot. 5306 Events(context.Context, *BotEventsRequest) (*BotEventsResponse, error) 5307 } 5308 5309 // UnimplementedBotAPIServer can be embedded to have forward compatible implementations. 5310 type UnimplementedBotAPIServer struct { 5311 } 5312 5313 func (*UnimplementedBotAPIServer) Events(context.Context, *BotEventsRequest) (*BotEventsResponse, error) { 5314 return nil, status.Errorf(codes.Unimplemented, "method Events not implemented") 5315 } 5316 5317 func RegisterBotAPIServer(s prpc.Registrar, srv BotAPIServer) { 5318 s.RegisterService(&_BotAPI_serviceDesc, srv) 5319 } 5320 5321 func _BotAPI_Events_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 5322 in := new(BotEventsRequest) 5323 if err := dec(in); err != nil { 5324 return nil, err 5325 } 5326 if interceptor == nil { 5327 return srv.(BotAPIServer).Events(ctx, in) 5328 } 5329 info := &grpc.UnaryServerInfo{ 5330 Server: srv, 5331 FullMethod: "/swarming.v1.BotAPI/Events", 5332 } 5333 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 5334 return srv.(BotAPIServer).Events(ctx, req.(*BotEventsRequest)) 5335 } 5336 return interceptor(ctx, in, info, handler) 5337 } 5338 5339 var _BotAPI_serviceDesc = grpc.ServiceDesc{ 5340 ServiceName: "swarming.v1.BotAPI", 5341 HandlerType: (*BotAPIServer)(nil), 5342 Methods: []grpc.MethodDesc{ 5343 { 5344 MethodName: "Events", 5345 Handler: _BotAPI_Events_Handler, 5346 }, 5347 }, 5348 Streams: []grpc.StreamDesc{}, 5349 Metadata: "go.chromium.org/luci/swarming/proto/api/swarming.proto", 5350 }