blob: a099c110de3e04afb55aeb28e92bcb28f91a9987 [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/swarming/proto/api/swarming.proto
package apipb
import prpc "go.chromium.org/luci/grpc/prpc"
import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
duration "github.com/golang/protobuf/ptypes/duration"
_struct "github.com/golang/protobuf/ptypes/struct"
timestamp "github.com/golang/protobuf/ptypes/timestamp"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// BotStatusType is one of the states the bot can be in.
//
// A bot status implies being in this status for a certain amount of time, for
// example a hook running for N seconds, contrary to BotEventType which is about
// an event that doesn't have an inherent duration.
//
// Some values are more important than others. For example if a bot is now
// MISSING but used to be QUARANTINED, the value is still MISSING.
type BotStatusType int32
const (
// Invalid bot status, do not use.
BotStatusType_BOT_STATUS_UNSPECIFIED BotStatusType = 0
// The server detected that the bot is not pinging the server anymore. Unlike
// other statuses, this value is set after a timeout.
//
// Bot.status_msg shall not be set.
BotStatusType_MISSING BotStatusType = 1
// Bot was quarantined by the server.
//
// Bot.status_msg shall include the server provided rationale.
BotStatusType_QUARANTINED_BY_SERVER BotStatusType = 2
// Bot self-reported as unhealthy.
//
// What is currently called as 'quarantined' in the old API.
//
// Bot.status_msg shall include the bot provided rationale.
BotStatusType_QUARANTINED_BY_BOT BotStatusType = 3
// Bot self-reported as unable to run tasks due to externally induced
// overhead.
//
// Examples include:
// - The temperature of the DUT (Device Under Test) is too high, and the bot
// is waiting for cool down
// - host is doing self-cleaning work out of the bot's control (puppet is
// running), etc.
//
// Bot.status_msg shall include the bot provided rationale.
BotStatusType_OVERHEAD_MAINTENANCE_EXTERNAL BotStatusType = 4
// Bot self-reported as unable to run tasks due to doing internal overhead.
//
// Examples include:
// - Running hooks
// - Cleaning up or verifying its local cache
// - Bot is starting for a version upgrade
//
// Bot.status_msg shall disambiguate the type of work item done.
BotStatusType_OVERHEAD_BOT_INTERNAL BotStatusType = 5
// Bot is down as its host is rebooting and contact was lost.
//
// If the bot doesn't contact back soon enough, it will be considered MISSING.
//
// Bot.status_msg shall not be set.
BotStatusType_HOST_REBOOTING BotStatusType = 6
// Running a task.
//
// Bot.status_msg shall not be set.
BotStatusType_BUSY BotStatusType = 7
// Bot is 'reserved' for operations outside of normal operations. This can be
// relevant for SUT (System Under Test).
//
// Bot.status_msg shall not be set.
BotStatusType_RESERVED BotStatusType = 8
// Bot is healthy and waiting for tasks.
//
// Bot.status_msg shall not be set.
BotStatusType_IDLE BotStatusType = 9
)
var BotStatusType_name = map[int32]string{
0: "BOT_STATUS_UNSPECIFIED",
1: "MISSING",
2: "QUARANTINED_BY_SERVER",
3: "QUARANTINED_BY_BOT",
4: "OVERHEAD_MAINTENANCE_EXTERNAL",
5: "OVERHEAD_BOT_INTERNAL",
6: "HOST_REBOOTING",
7: "BUSY",
8: "RESERVED",
9: "IDLE",
}
var BotStatusType_value = map[string]int32{
"BOT_STATUS_UNSPECIFIED": 0,
"MISSING": 1,
"QUARANTINED_BY_SERVER": 2,
"QUARANTINED_BY_BOT": 3,
"OVERHEAD_MAINTENANCE_EXTERNAL": 4,
"OVERHEAD_BOT_INTERNAL": 5,
"HOST_REBOOTING": 6,
"BUSY": 7,
"RESERVED": 8,
"IDLE": 9,
}
func (x BotStatusType) String() string {
return proto.EnumName(BotStatusType_name, int32(x))
}
func (BotStatusType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{0}
}
// BotEventType defines the reason why BotEvent was created.
type BotEventType int32
const (
// Invalid bot event type, do not use.
BotEventType_BOT_EVENT_TYPE_UNSPECIFIED BotEventType = 0
// Bot connected and started a new session.
//
// BotEvent.event_msg shall not be set.
BotEventType_BOT_NEW_SESSION BotEventType = 1
// Bot had an internal failure to report to the server outside of a task
// context. This shall send a report to the administrator of the instance and
// service author.
//
// BotEvent.event_msg shall contain the error message.
BotEventType_BOT_INTERNAL_FAILURE BotEventType = 2
// Bot had an hook error to report to the server. This shall send a report to
// the administrator of the instance.
//
// BotEvent.event_msg shall contain the error message.
BotEventType_BOT_HOOK_ERROR BotEventType = 3
// Bot hook logged information. The bot hooks can log locally to the local log
// file, which itself can be streamed out of band. For special notifications
// that are worth notifying the administrator, this event can be used to raise
// these. Due to the cost of doing an RPC just for this, this should be used
// sparingly; vs local logging.
//
// BotEvent.event_msg shall contain the log entry.
BotEventType_BOT_HOOK_LOG BotEventType = 4
// Bot initiated a host reboot. An example is a bot hook requesting to reboot
// the host after a task failure.
//
// BotEvent.event_msg shall contain the reason for rebooting the host, if any.
BotEventType_BOT_REBOOTING_HOST BotEventType = 5
// Bot is shutting down. It may be restarting for an update.
//
// BotEvent.event_msg shall contain the reason.
BotEventType_BOT_SHUTDOWN BotEventType = 6
// Knowledge of the bot by the server was deleted.
//
// In this case, the bot's historical data is still kept in the Swarming
// server's DB for a year, but the bot is not shown anywhere.
BotEventType_BOT_DELETED BotEventType = 7
// The server instructs the bot to stay idle. This is when there is no task
// pending for this bot. Will only be stored when there are other state
// changes.
//
// BotEvent.event_msg shall not be set.
BotEventType_INSTRUCT_IDLE BotEventType = 10
// The server instructs the bot to start a task.
//
// BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall
// contain the task ID.
BotEventType_INSTRUCT_START_TASK BotEventType = 11
// The server instructs the bot to restart without self-updating. This is to
// initiate a new bot session.
//
// BotEvent.event_msg can be set to the rationale, if any.
BotEventType_INSTRUCT_RESTART_BOT BotEventType = 12
// The server instructs the bot to self-update.
//
// BotEvent.event_msg shall be set to the version to update to.
// BotEvent.bot.info.version contains the bot's previous version.
BotEventType_INSTRUCT_UPDATE_BOT_CODE BotEventType = 13
// The server instructs the bot to stop its process.
//
// BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall
// contain the task ID.
BotEventType_INSTRUCT_TERMINATE_BOT BotEventType = 14
// Bot completed a task.
//
// BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall
// contain the task ID.
BotEventType_TASK_COMPLETED BotEventType = 20
// Bot had an internal failure (RAN_INTERNAL_FAILURE) to report to the server
// while processing a task. This shall send a report to the administrator of
// the instance and service author.
//
// This event shall not be filed in case of a MISSING_INPUTS.
//
// BotEvent.event_msg shall contain the error message.
// BotEvent.bot.current_task_id shall contain the task ID.
BotEventType_TASK_INTERNAL_FAILURE BotEventType = 21
// Bot is forcibly killing the task.
//
// This can be induced by a server side request (KILLED, PREEMPTED) or by a
// bot side decision (TIMED_OUT, TIMED_OUT_SILENCE).
//
// BotEvent.event_msg shall not be set. BotEvent.bot.current_task_id shall
// contain the task ID.
BotEventType_TASK_KILLED BotEventType = 22
)
var BotEventType_name = map[int32]string{
0: "BOT_EVENT_TYPE_UNSPECIFIED",
1: "BOT_NEW_SESSION",
2: "BOT_INTERNAL_FAILURE",
3: "BOT_HOOK_ERROR",
4: "BOT_HOOK_LOG",
5: "BOT_REBOOTING_HOST",
6: "BOT_SHUTDOWN",
7: "BOT_DELETED",
10: "INSTRUCT_IDLE",
11: "INSTRUCT_START_TASK",
12: "INSTRUCT_RESTART_BOT",
13: "INSTRUCT_UPDATE_BOT_CODE",
14: "INSTRUCT_TERMINATE_BOT",
20: "TASK_COMPLETED",
21: "TASK_INTERNAL_FAILURE",
22: "TASK_KILLED",
}
var BotEventType_value = map[string]int32{
"BOT_EVENT_TYPE_UNSPECIFIED": 0,
"BOT_NEW_SESSION": 1,
"BOT_INTERNAL_FAILURE": 2,
"BOT_HOOK_ERROR": 3,
"BOT_HOOK_LOG": 4,
"BOT_REBOOTING_HOST": 5,
"BOT_SHUTDOWN": 6,
"BOT_DELETED": 7,
"INSTRUCT_IDLE": 10,
"INSTRUCT_START_TASK": 11,
"INSTRUCT_RESTART_BOT": 12,
"INSTRUCT_UPDATE_BOT_CODE": 13,
"INSTRUCT_TERMINATE_BOT": 14,
"TASK_COMPLETED": 20,
"TASK_INTERNAL_FAILURE": 21,
"TASK_KILLED": 22,
}
func (x BotEventType) String() string {
return proto.EnumName(BotEventType_name, int32(x))
}
func (BotEventType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{1}
}
// TaskStateCategory represents the 5 different categories of task state.
//
// For active state categories (RUNNING_MASK and TRANSIENT_DONE_MASK), it is
// possible to go 'back' to PENDING_MASK category; for example, a task has an
// internal error, and the server reenqueues the task for a second try.
type TaskStateCategory int32
const (
// Invalid value.
TaskStateCategory_TASK_STATE_CATEGORY_UNSPECIFIED TaskStateCategory = 0
// Bit mask for the TaskState inside each category.
TaskStateCategory_TASK_STATE_MASK TaskStateCategory = 15
// The task is enqueued and pending bot availability.
TaskStateCategory_CATEGORY_PENDING TaskStateCategory = 16
// The task is running.
TaskStateCategory_CATEGORY_RUNNING TaskStateCategory = 32
// Transient done states are uncertain states; something ran but the result
// was inconclusive.
//
// They can trigger the Swarming internal retry mechanism. In this case, the
// "task try" will have this state, but the task summary will become PENDING.
// In case the task cannot be retried, when idempotent is false, then this
// becomes a final state.
TaskStateCategory_CATEGORY_TRANSIENT_DONE TaskStateCategory = 48
// The task ran, and it is done.
TaskStateCategory_CATEGORY_EXECUTION_DONE TaskStateCategory = 64
// The task did not run, and won't.
TaskStateCategory_CATEGORY_NEVER_RAN_DONE TaskStateCategory = 80
)
var TaskStateCategory_name = map[int32]string{
0: "TASK_STATE_CATEGORY_UNSPECIFIED",
15: "TASK_STATE_MASK",
16: "CATEGORY_PENDING",
32: "CATEGORY_RUNNING",
48: "CATEGORY_TRANSIENT_DONE",
64: "CATEGORY_EXECUTION_DONE",
80: "CATEGORY_NEVER_RAN_DONE",
}
var TaskStateCategory_value = map[string]int32{
"TASK_STATE_CATEGORY_UNSPECIFIED": 0,
"TASK_STATE_MASK": 15,
"CATEGORY_PENDING": 16,
"CATEGORY_RUNNING": 32,
"CATEGORY_TRANSIENT_DONE": 48,
"CATEGORY_EXECUTION_DONE": 64,
"CATEGORY_NEVER_RAN_DONE": 80,
}
func (x TaskStateCategory) String() string {
return proto.EnumName(TaskStateCategory_name, int32(x))
}
func (TaskStateCategory) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{2}
}
// TaskState represents the different possible states for a Task.
//
// Each state is in one of the bitmask in TaskStateCategory.
type TaskState int32
const (
// Invalid task state.
TaskState_TASK_STATE_INVALID TaskState = 0
// The task is currently pending.
//
// This means that no bot reaped the task yet. It will stay in this state
// until either a bot reaps the task, or the expiration elapsed or all bots
// become MISSING, leading to a NO_RESOURCE. The task pending expiration is
// specified as TaskSlice.expiration, one per task slice.
//
// The task may go through multiple pending TaskSlice as they expire or are
// skipped due to NO_RESOURCE (see definition below). In this situation the
// task state still stays in PENDING state as long as there's a chance for a
// bot to reap the task.
TaskState_PENDING TaskState = 16
// The task is currently pending, but another previously scheduled task was
// identified to be deduped against, but the previously scheduled task hasn't
// completed yet.
//
// In this case, the task may go back into PENDING if the previous identical
// task failed, or immediately into DEDUPED if it succeeded.
TaskState_PENDING_DEDUPING TaskState = 17
// The task is currently running.
//
// For new tasks, this is only the actual tasks runtime. For old tasks, this
// includes RUNNING_OVERHEAD_START and RUNNING_OVERHEAD_END.
TaskState_RUNNING TaskState = 32
// The task is assigned to a bot. The bot is fetching input files and setting
// up the runtime environment.
TaskState_RUNNING_OVERHEAD_SETUP TaskState = 33
// Task completed and result metadata is available. Outputs and other
// associated logs are still being uploaded and the environment is being
// teared down.
//
// A client that only needs the exit code may chose to stop waiting for the
// task, as the task will end with COMPLETED, unless there's a failure during
// outputs upload, which would result in INTERNAL_FAILURE.
TaskState_RUNNING_OVERHEAD_TEARDOWN TaskState = 34
// The task is being forcibly terminated. This can be due to either a kill
// request, preemption or time out.
//
// See
// https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Bot.md#graceful-termination_aka-the-sigterm-and-sigkill-dance
TaskState_TERMINATING TaskState = 35
// Task completed, result metadata and task outputs are available. There's
// still some overhead being finished like attaching relevant bot logs to the
// task.
//
// The client can return right away unless infrastructure issue debugging is
// needed.
TaskState_COMPLETING TaskState = 47
// The task ran but the bot had an internal failure, unrelated to the task
// itself. It can be due to disk or network I/O issues.
TaskState_RAN_INTERNAL_FAILURE TaskState = 48
// The task ran and completed normally, but returned an exit code that was
// provided in the TaskProperties as signaling an hardware failure of the DUT
// (Device Under Test).
//
// As such, the task may need to be retried.
TaskState_DUT_FAILURE TaskState = 49
// The task started but the bot failed to keep the connection to the server
// alive. This can be due to the bot's host crashing, or network connectivity
// issues.
TaskState_BOT_DISAPPEARED TaskState = 50
// The task ran but was killed by the client or an external scheduler in a way
// that it should still be retried as another task try.
//
// This can happen via the external scheduler or an API yet to be defined. The
// rationale is to kill slow running low priority task, without disrupting the
// client and simply postponing the task for later.
TaskState_PREEMPTED TaskState = 51
// The task ran and completed normally. The task process exit code may be 0 or
// another value.
//
// This value is also used when the task is deduped against a previous task.
TaskState_COMPLETED TaskState = 64
// The task ran for longer than the allowed time in
// TaskProperties.execution_timeout.
//
// This means the bot forcefully killed the task process as described in the
// graceful termination dance in the documentation.
TaskState_TIMED_OUT TaskState = 65
// The task timed out due to not sending updates to stdout or stderr within
// the period specified in TaskProperties.io_timeout.
//
// This means the bot forcefully killed the task process as described in the
// graceful termination dance in the documentation.
TaskState_TIMED_OUT_SILENCE TaskState = 66
// The task ran but was manually killed via the 'cancel' API.
//
// This means the bot forcefully killed the task process as described in the
// graceful termination dance in the documentation.
TaskState_KILLED TaskState = 67
// The task had specified invalid inputs. This is found out by the bot while
// RUNNING_OVERHEAD_SETUP.
//
// For example, the cas_inputs or cipd_inputs refers to missing items,
// or the requested containment cannot be achieved.
TaskState_MISSING_INPUTS TaskState = 68
// The task didn't have to run, because a previous task had results. It is
// functionally equivalent to COMPLETED, except that previous results were
// returned as-is.
TaskState_DEDUPED TaskState = 80
// The task is not pending anymore; it never ran due to lack of capacity.
//
// This means that other higher priority tasks ran instead and that not enough
// bots were available to run this task for TaskSlice.expiration.
TaskState_EXPIRED TaskState = 81
// The task never ran, and was manually cancelled via the 'cancel' API before
// it was reaped.
TaskState_CANCELED TaskState = 82
// The task was never set to PENDING and was immediately refused, as the
// server determined that there is no bot capacity to run this task. This
// happens because no bot exposes a superset of the requested task dimensions.
//
// There can be a situation where a task goes from PENDING to NO_RESOURCE if
// capacity (bots) is removed.
//
// Set TaskSlice.wait_for_capacity to True to force the server to keep the
// task slice pending even in this case. Generally speaking, the task will
// eventually switch to EXPIRED, as there's no bot to run it. That said, there
// are situations where it is known that in some not-too-distant future a wild
// bot will appear that will be able to run this task.
TaskState_NO_RESOURCE TaskState = 83
// The task was valid but was denied due to a temporary capacity surcharge.
// The user should try again after a delay, or surface the lack of capacity to
// the user.
TaskState_LOAD_SHED TaskState = 84
// The task is valid but was denied due to insufficient quota.
TaskState_RESOURCE_EXHAUSTED TaskState = 85
// The task never ran, the server had an internal failure, unrelated to the
// task itself. It can be due to a server bug or network I/O issues.
TaskState_SKIPPED_INTERNAL_FAILURE TaskState = 86
)
var TaskState_name = map[int32]string{
0: "TASK_STATE_INVALID",
16: "PENDING",
17: "PENDING_DEDUPING",
32: "RUNNING",
33: "RUNNING_OVERHEAD_SETUP",
34: "RUNNING_OVERHEAD_TEARDOWN",
35: "TERMINATING",
47: "COMPLETING",
48: "RAN_INTERNAL_FAILURE",
49: "DUT_FAILURE",
50: "BOT_DISAPPEARED",
51: "PREEMPTED",
64: "COMPLETED",
65: "TIMED_OUT",
66: "TIMED_OUT_SILENCE",
67: "KILLED",
68: "MISSING_INPUTS",
80: "DEDUPED",
81: "EXPIRED",
82: "CANCELED",
83: "NO_RESOURCE",
84: "LOAD_SHED",
85: "RESOURCE_EXHAUSTED",
86: "SKIPPED_INTERNAL_FAILURE",
}
var TaskState_value = map[string]int32{
"TASK_STATE_INVALID": 0,
"PENDING": 16,
"PENDING_DEDUPING": 17,
"RUNNING": 32,
"RUNNING_OVERHEAD_SETUP": 33,
"RUNNING_OVERHEAD_TEARDOWN": 34,
"TERMINATING": 35,
"COMPLETING": 47,
"RAN_INTERNAL_FAILURE": 48,
"DUT_FAILURE": 49,
"BOT_DISAPPEARED": 50,
"PREEMPTED": 51,
"COMPLETED": 64,
"TIMED_OUT": 65,
"TIMED_OUT_SILENCE": 66,
"KILLED": 67,
"MISSING_INPUTS": 68,
"DEDUPED": 80,
"EXPIRED": 81,
"CANCELED": 82,
"NO_RESOURCE": 83,
"LOAD_SHED": 84,
"RESOURCE_EXHAUSTED": 85,
"SKIPPED_INTERNAL_FAILURE": 86,
}
func (x TaskState) String() string {
return proto.EnumName(TaskState_name, int32(x))
}
func (TaskState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{3}
}
type Containment_ContainmentType int32
const (
// Historical value, not specified. Containment may or may not be used.
Containment_NOT_SPECIFIED Containment_ContainmentType = 0
// No containment, the default for now.
Containment_NONE Containment_ContainmentType = 1
// Use the containment appropriate on the platform.
Containment_AUTO Containment_ContainmentType = 2
// Use Job Object on Windows. Will fail if used on other platforms.
Containment_JOB_OBJECT Containment_ContainmentType = 3
)
var Containment_ContainmentType_name = map[int32]string{
0: "NOT_SPECIFIED",
1: "NONE",
2: "AUTO",
3: "JOB_OBJECT",
}
var Containment_ContainmentType_value = map[string]int32{
"NOT_SPECIFIED": 0,
"NONE": 1,
"AUTO": 2,
"JOB_OBJECT": 3,
}
func (x Containment_ContainmentType) String() string {
return proto.EnumName(Containment_ContainmentType_name, int32(x))
}
func (Containment_ContainmentType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{14, 0}
}
// Request for BotAPI.Events.
type BotEventsRequest struct {
// Required. Bot ID to retrieve results from.
BotId string `protobuf:"bytes,1,opt,name=bot_id,json=botId,proto3" json:"bot_id,omitempty"`
// Optional. Use this field to specify the maximum number of results to be
// returned by the server.
//
// The server may further constrain the maximum number of results returned in
// a single page. If the page_size is 0, the server will decide the number of
// results to be returned.
PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
// Optional. Use this field to request a specific page of the list results,
// following a previous call.
//
// When specified, page_size, start_time and end_time must match exactly the
// previous call's argument.
PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
// Optional. Earliest time to return bot event. Inclusive.
//
// If not specified, pagination is done until all events are returned.
StartTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
// Optional. Most recent time to return bot event. Exclusive.
//
// If not specified, defaults to the current time.
EndTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BotEventsRequest) Reset() { *m = BotEventsRequest{} }
func (m *BotEventsRequest) String() string { return proto.CompactTextString(m) }
func (*BotEventsRequest) ProtoMessage() {}
func (*BotEventsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{0}
}
func (m *BotEventsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BotEventsRequest.Unmarshal(m, b)
}
func (m *BotEventsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BotEventsRequest.Marshal(b, m, deterministic)
}
func (m *BotEventsRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BotEventsRequest.Merge(m, src)
}
func (m *BotEventsRequest) XXX_Size() int {
return xxx_messageInfo_BotEventsRequest.Size(m)
}
func (m *BotEventsRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BotEventsRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BotEventsRequest proto.InternalMessageInfo
func (m *BotEventsRequest) GetBotId() string {
if m != nil {
return m.BotId
}
return ""
}
func (m *BotEventsRequest) GetPageSize() int32 {
if m != nil {
return m.PageSize
}
return 0
}
func (m *BotEventsRequest) GetPageToken() string {
if m != nil {
return m.PageToken
}
return ""
}
func (m *BotEventsRequest) GetStartTime() *timestamp.Timestamp {
if m != nil {
return m.StartTime
}
return nil
}
func (m *BotEventsRequest) GetEndTime() *timestamp.Timestamp {
if m != nil {
return m.EndTime
}
return nil
}
// Response of BotAPI.Events.
type BotEventsResponse struct {
// Events are in reverse chronological order, most recents first and going
// down to older events.
Events []*BotEvent `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"`
// This field represents the pagination token to retrieve the next page of
// results. If the value is "", it means no further results for the request.
NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BotEventsResponse) Reset() { *m = BotEventsResponse{} }
func (m *BotEventsResponse) String() string { return proto.CompactTextString(m) }
func (*BotEventsResponse) ProtoMessage() {}
func (*BotEventsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{1}
}
func (m *BotEventsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BotEventsResponse.Unmarshal(m, b)
}
func (m *BotEventsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BotEventsResponse.Marshal(b, m, deterministic)
}
func (m *BotEventsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_BotEventsResponse.Merge(m, src)
}
func (m *BotEventsResponse) XXX_Size() int {
return xxx_messageInfo_BotEventsResponse.Size(m)
}
func (m *BotEventsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_BotEventsResponse.DiscardUnknown(m)
}
var xxx_messageInfo_BotEventsResponse proto.InternalMessageInfo
func (m *BotEventsResponse) GetEvents() []*BotEvent {
if m != nil {
return m.Events
}
return nil
}
func (m *BotEventsResponse) GetNextPageToken() string {
if m != nil {
return m.NextPageToken
}
return ""
}
// Represents a mapping of string to a string.
//
// The same as a map<key, value>, except that the encoding is deterministic.
//
// If the StringPair is itself repeated inside another message, the list
// must be sorted by key and the keys must be unique.
type StringPair struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StringPair) Reset() { *m = StringPair{} }
func (m *StringPair) String() string { return proto.CompactTextString(m) }
func (*StringPair) ProtoMessage() {}
func (*StringPair) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{2}
}
func (m *StringPair) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StringPair.Unmarshal(m, b)
}
func (m *StringPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StringPair.Marshal(b, m, deterministic)
}
func (m *StringPair) XXX_Merge(src proto.Message) {
xxx_messageInfo_StringPair.Merge(m, src)
}
func (m *StringPair) XXX_Size() int {
return xxx_messageInfo_StringPair.Size(m)
}
func (m *StringPair) XXX_DiscardUnknown() {
xxx_messageInfo_StringPair.DiscardUnknown(m)
}
var xxx_messageInfo_StringPair proto.InternalMessageInfo
func (m *StringPair) GetKey() string {
if m != nil {
return m.Key
}
return ""
}
func (m *StringPair) GetValue() string {
if m != nil {
return m.Value
}
return ""
}
// Represents a mapping of string to a list of strings.
//
// The same as a map<key, repeated values>, except that the encoding is
// deterministic.
//
// If the StringListPair is itself repeated inside another message, the list
// must be sorted by key and the keys must be unique.
type StringListPair struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// All the values for this key. values must be sorted. Human readable.
//
// This string should make sense to a user in the context of 'key'.
Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StringListPair) Reset() { *m = StringListPair{} }
func (m *StringListPair) String() string { return proto.CompactTextString(m) }
func (*StringListPair) ProtoMessage() {}
func (*StringListPair) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{3}
}
func (m *StringListPair) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StringListPair.Unmarshal(m, b)
}
func (m *StringListPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StringListPair.Marshal(b, m, deterministic)
}
func (m *StringListPair) XXX_Merge(src proto.Message) {
xxx_messageInfo_StringListPair.Merge(m, src)
}
func (m *StringListPair) XXX_Size() int {
return xxx_messageInfo_StringListPair.Size(m)
}
func (m *StringListPair) XXX_DiscardUnknown() {
xxx_messageInfo_StringListPair.DiscardUnknown(m)
}
var xxx_messageInfo_StringListPair proto.InternalMessageInfo
func (m *StringListPair) GetKey() string {
if m != nil {
return m.Key
}
return ""
}
func (m *StringListPair) GetValues() []string {
if m != nil {
return m.Values
}
return nil
}
// Bot describes a Swarming bot.
//
// Because a Swarming bot is a single execution unit unlike RBE, it doesn't have
// a concept of owned device at the moment. This may change later.
type Bot struct {
// Bot ID. It must be unique across the Swarming fleet. Generally based on the
// hostname where the bot runs, but that's not a requirement. Must be
// predefined in bots.cfg.
//
// This value is also included in dimensions for the key 'id'.
BotId string `protobuf:"bytes,1,opt,name=bot_id,json=botId,proto3" json:"bot_id,omitempty"`
// Bot session ID. An opaque value.
//
// There is one bot session ID per bot process ID on the host. When the bot
// self-upgrades, it creates a new bot session ID.
SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
// Pools that this bot belongs to. Normally assigned via bots.cfg. The
// pools must be defined in pools.cfg.
//
// Normally a bot shall belong to a single pool, but belonging to multiple
// pool is allowed. This is generally helpful for transitioning bots.
//
// This value is also included in dimensions for the key 'pool'.
Pools []string `protobuf:"bytes,3,rep,name=pools,proto3" json:"pools,omitempty"`
// Current bot status. A bot status is a state in which the bot is for a
// certain amount of time.
Status BotStatusType `protobuf:"varint,4,opt,name=status,proto3,enum=swarming.v1.BotStatusType" json:"status,omitempty"`
// Supplemental information to describe the bot status. Human readable.
//
// See BotStatusType for the meaning of this string for each status.
StatusMsg string `protobuf:"bytes,5,opt,name=status_msg,json=statusMsg,proto3" json:"status_msg,omitempty"`
// Current task being handled by the bot, if there is one.
//
// In Swarming, only a single task can be assigned to a bot at any given time.
CurrentTaskId string `protobuf:"bytes,6,opt,name=current_task_id,json=currentTaskId,proto3" json:"current_task_id,omitempty"`
// Bot reported dimensions. dimensions is a {key: [values]} dictionary. This
// can be used to declare the properties of the host or for the DUT (Device
// Under Test) under control. This is used for task selection.
//
// In RBE, this is called Property. The difference is that RBE's Property is a
// string:string flat dictionary, it doesn't allow repeated values.
//
// https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Detailed-Design.md#bot-dimensions
//
// dimensions MUST be sorted by keys, and each values list must be sorted.
// Each dimension key must be unique.
//
// The values are effectively an OR, a task may match any of the value.
//
// Human readable.
Dimensions []*StringListPair `protobuf:"bytes,7,rep,name=dimensions,proto3" json:"dimensions,omitempty"`
// Bot reported informational state. This can be used to describe the host,
// the bot itself and the DUT (Device Under Test) under control as applicable.
//
// This is NOT used for task selection.
Info *BotInfo `protobuf:"bytes,8,opt,name=info,proto3" json:"info,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Bot) Reset() { *m = Bot{} }
func (m *Bot) String() string { return proto.CompactTextString(m) }
func (*Bot) ProtoMessage() {}
func (*Bot) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{4}
}
func (m *Bot) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Bot.Unmarshal(m, b)
}
func (m *Bot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Bot.Marshal(b, m, deterministic)
}
func (m *Bot) XXX_Merge(src proto.Message) {
xxx_messageInfo_Bot.Merge(m, src)
}
func (m *Bot) XXX_Size() int {
return xxx_messageInfo_Bot.Size(m)
}
func (m *Bot) XXX_DiscardUnknown() {
xxx_messageInfo_Bot.DiscardUnknown(m)
}
var xxx_messageInfo_Bot proto.InternalMessageInfo
func (m *Bot) GetBotId() string {
if m != nil {
return m.BotId
}
return ""
}
func (m *Bot) GetSessionId() string {
if m != nil {
return m.SessionId
}
return ""
}
func (m *Bot) GetPools() []string {
if m != nil {
return m.Pools
}
return nil
}
func (m *Bot) GetStatus() BotStatusType {
if m != nil {
return m.Status
}
return BotStatusType_BOT_STATUS_UNSPECIFIED
}
func (m *Bot) GetStatusMsg() string {
if m != nil {
return m.StatusMsg
}
return ""
}
func (m *Bot) GetCurrentTaskId() string {
if m != nil {
return m.CurrentTaskId
}
return ""
}
func (m *Bot) GetDimensions() []*StringListPair {
if m != nil {
return m.Dimensions
}
return nil
}
func (m *Bot) GetInfo() *BotInfo {
if m != nil {
return m.Info
}
return nil
}
// Bot reported informational state. This can be used to describe the host,
// the bot itself and the DUT (Device Under Test) under control as applicable.
//
// This is NOT used for task selection.
type BotInfo struct {
// supplemental contains the free form JSON data that includes interesting
// information about the bot that doesn't fit in any of the fields below.
//
// Anything that is usable by multiple customers should eventually be moved to
// a new field below.
Supplemental *_struct.Struct `protobuf:"bytes,1,opt,name=supplemental,proto3" json:"supplemental,omitempty"`
// Bot's version. An opaque value.
//
// This value is Swarming instance and configuration dependent. Bot are
// updated through the process described at
// https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Bot.md#update
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
// External IP address as visible by the server.
//
// This could be a NAT'ing router external IP.
//
// Can be either IPv4 or IPv6.
ExternalIp string `protobuf:"bytes,3,opt,name=external_ip,json=externalIp,proto3" json:"external_ip,omitempty"`
// Authentication identity that the bot identified as. An opaque value.
AuthenticatedAs string `protobuf:"bytes,4,opt,name=authenticated_as,json=authenticatedAs,proto3" json:"authenticated_as,omitempty"`
// State of the content addressed cache on the bot. This is used for inputs
// files.
CasStats *CASStats `protobuf:"bytes,5,opt,name=cas_stats,json=casStats,proto3" json:"cas_stats,omitempty"`
// State of the named caches (used by incremental tasks) on the bot. This is
// used for task that benefits from incrementality, like builds.
//
// Should be sorted by name.
NamedCachesStats []*NamedCacheStats `protobuf:"bytes,6,rep,name=named_caches_stats,json=namedCachesStats,proto3" json:"named_caches_stats,omitempty"`
// State of the CIPD packages cache on the bot. This is use for installable,
// versioned packages.
//
// Should be sorted by package name, then version.
CipdPackagesCacheStats []*CIPDPackageCacheStats `protobuf:"bytes,7,rep,name=cipd_packages_cache_stats,json=cipdPackagesCacheStats,proto3" json:"cipd_packages_cache_stats,omitempty"`
// Information about the host.
Host *PhysicalEntity `protobuf:"bytes,8,opt,name=host,proto3" json:"host,omitempty"`
// Information about the devices connected to the host.
//
// This can be the DUT (Device Under Test) or other peripherals.
Devices []*PhysicalEntity `protobuf:"bytes,9,rep,name=devices,proto3" json:"devices,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BotInfo) Reset() { *m = BotInfo{} }
func (m *BotInfo) String() string { return proto.CompactTextString(m) }
func (*BotInfo) ProtoMessage() {}
func (*BotInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{5}
}
func (m *BotInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BotInfo.Unmarshal(m, b)
}
func (m *BotInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BotInfo.Marshal(b, m, deterministic)
}
func (m *BotInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_BotInfo.Merge(m, src)
}
func (m *BotInfo) XXX_Size() int {
return xxx_messageInfo_BotInfo.Size(m)
}
func (m *BotInfo) XXX_DiscardUnknown() {
xxx_messageInfo_BotInfo.DiscardUnknown(m)
}
var xxx_messageInfo_BotInfo proto.InternalMessageInfo
func (m *BotInfo) GetSupplemental() *_struct.Struct {
if m != nil {
return m.Supplemental
}
return nil
}
func (m *BotInfo) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
func (m *BotInfo) GetExternalIp() string {
if m != nil {
return m.ExternalIp
}
return ""
}
func (m *BotInfo) GetAuthenticatedAs() string {
if m != nil {
return m.AuthenticatedAs
}
return ""
}
func (m *BotInfo) GetCasStats() *CASStats {
if m != nil {
return m.CasStats
}
return nil
}
func (m *BotInfo) GetNamedCachesStats() []*NamedCacheStats {
if m != nil {
return m.NamedCachesStats
}
return nil
}
func (m *BotInfo) GetCipdPackagesCacheStats() []*CIPDPackageCacheStats {
if m != nil {
return m.CipdPackagesCacheStats
}
return nil
}
func (m *BotInfo) GetHost() *PhysicalEntity {
if m != nil {
return m.Host
}
return nil
}
func (m *BotInfo) GetDevices() []*PhysicalEntity {
if m != nil {
return m.Devices
}
return nil
}
// PhysicalEntity includes information about an host or device.
//
// This can be the host where the bot runs, or a device under control of the
// bot.
//
// If the bot runs inside a docker container, this information is about the
// container, or whatever the bot can observe from its vantage point.
type PhysicalEntity struct {
// Name that represents this physical entity.
//
// For a host, it shall be the hostname. For a device, it should be the device
// hostname, if any. Failing that, something that makes sense to the users.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// supplemental contains the free form JSON data that includes interesting
// information about the device that doesn't fit in any of the fields below.
//
// Anything that is usable by multiple customers should eventually be moved to
// a new field below.
Supplemental *_struct.Struct `protobuf:"bytes,2,opt,name=supplemental,proto3" json:"supplemental,omitempty"`
// IP address as visible by the bot process (bot_main) itself.
//
// In the case of the host, it will be one of the IP addresses assigned to it.
// In the case of the host where the bot is running inside docker, it will be
// the IP address assigned to the docker container.
// In the case of a device, it is the IP address of the device, if any.
//
// Can be either IPv4 or IPv6.
Ip string `protobuf:"bytes,3,opt,name=ip,proto3" json:"ip,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *PhysicalEntity) Reset() { *m = PhysicalEntity{} }
func (m *PhysicalEntity) String() string { return proto.CompactTextString(m) }
func (*PhysicalEntity) ProtoMessage() {}
func (*PhysicalEntity) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{6}
}
func (m *PhysicalEntity) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PhysicalEntity.Unmarshal(m, b)
}
func (m *PhysicalEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_PhysicalEntity.Marshal(b, m, deterministic)
}
func (m *PhysicalEntity) XXX_Merge(src proto.Message) {
xxx_messageInfo_PhysicalEntity.Merge(m, src)
}
func (m *PhysicalEntity) XXX_Size() int {
return xxx_messageInfo_PhysicalEntity.Size(m)
}
func (m *PhysicalEntity) XXX_DiscardUnknown() {
xxx_messageInfo_PhysicalEntity.DiscardUnknown(m)
}
var xxx_messageInfo_PhysicalEntity proto.InternalMessageInfo
func (m *PhysicalEntity) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *PhysicalEntity) GetSupplemental() *_struct.Struct {
if m != nil {
return m.Supplemental
}
return nil
}
func (m *PhysicalEntity) GetIp() string {
if m != nil {
return m.Ip
}
return ""
}
// Bot local content addressed cache information.
type CASStats struct {
NumberItems int64 `protobuf:"varint,1,opt,name=number_items,json=numberItems,proto3" json:"number_items,omitempty"`
Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"`
OldestTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=oldest_time,json=oldestTime,proto3" json:"oldest_time,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CASStats) Reset() { *m = CASStats{} }
func (m *CASStats) String() string { return proto.CompactTextString(m) }
func (*CASStats) ProtoMessage() {}
func (*CASStats) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{7}
}
func (m *CASStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CASStats.Unmarshal(m, b)
}
func (m *CASStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CASStats.Marshal(b, m, deterministic)
}
func (m *CASStats) XXX_Merge(src proto.Message) {
xxx_messageInfo_CASStats.Merge(m, src)
}
func (m *CASStats) XXX_Size() int {
return xxx_messageInfo_CASStats.Size(m)
}
func (m *CASStats) XXX_DiscardUnknown() {
xxx_messageInfo_CASStats.DiscardUnknown(m)
}
var xxx_messageInfo_CASStats proto.InternalMessageInfo
func (m *CASStats) GetNumberItems() int64 {
if m != nil {
return m.NumberItems
}
return 0
}
func (m *CASStats) GetSize() int64 {
if m != nil {
return m.Size
}
return 0
}
func (m *CASStats) GetOldestTime() *timestamp.Timestamp {
if m != nil {
return m.OldestTime
}
return nil
}
// Bot local named cache information.
type NamedCacheStats struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"`
LastUseTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_use_time,json=lastUseTime,proto3" json:"last_use_time,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NamedCacheStats) Reset() { *m = NamedCacheStats{} }
func (m *NamedCacheStats) String() string { return proto.CompactTextString(m) }
func (*NamedCacheStats) ProtoMessage() {}
func (*NamedCacheStats) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{8}
}
func (m *NamedCacheStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NamedCacheStats.Unmarshal(m, b)
}
func (m *NamedCacheStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NamedCacheStats.Marshal(b, m, deterministic)
}
func (m *NamedCacheStats) XXX_Merge(src proto.Message) {
xxx_messageInfo_NamedCacheStats.Merge(m, src)
}
func (m *NamedCacheStats) XXX_Size() int {
return xxx_messageInfo_NamedCacheStats.Size(m)
}
func (m *NamedCacheStats) XXX_DiscardUnknown() {
xxx_messageInfo_NamedCacheStats.DiscardUnknown(m)
}
var xxx_messageInfo_NamedCacheStats proto.InternalMessageInfo
func (m *NamedCacheStats) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *NamedCacheStats) GetSize() int64 {
if m != nil {
return m.Size
}
return 0
}
func (m *NamedCacheStats) GetLastUseTime() *timestamp.Timestamp {
if m != nil {
return m.LastUseTime
}
return nil
}
// Bot local CIPD package cache information.
type CIPDPackageCacheStats struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
LastUseTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=last_use_time,json=lastUseTime,proto3" json:"last_use_time,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CIPDPackageCacheStats) Reset() { *m = CIPDPackageCacheStats{} }
func (m *CIPDPackageCacheStats) String() string { return proto.CompactTextString(m) }
func (*CIPDPackageCacheStats) ProtoMessage() {}
func (*CIPDPackageCacheStats) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{9}
}
func (m *CIPDPackageCacheStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CIPDPackageCacheStats.Unmarshal(m, b)
}
func (m *CIPDPackageCacheStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CIPDPackageCacheStats.Marshal(b, m, deterministic)
}
func (m *CIPDPackageCacheStats) XXX_Merge(src proto.Message) {
xxx_messageInfo_CIPDPackageCacheStats.Merge(m, src)
}
func (m *CIPDPackageCacheStats) XXX_Size() int {
return xxx_messageInfo_CIPDPackageCacheStats.Size(m)
}
func (m *CIPDPackageCacheStats) XXX_DiscardUnknown() {
xxx_messageInfo_CIPDPackageCacheStats.DiscardUnknown(m)
}
var xxx_messageInfo_CIPDPackageCacheStats proto.InternalMessageInfo
func (m *CIPDPackageCacheStats) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *CIPDPackageCacheStats) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
func (m *CIPDPackageCacheStats) GetSize() int64 {
if m != nil {
return m.Size
}
return 0
}
func (m *CIPDPackageCacheStats) GetLastUseTime() *timestamp.Timestamp {
if m != nil {
return m.LastUseTime
}
return nil
}
// BotEvent represents an event on the bot.
//
// This message is used both in the API and as a BigQuery table description for
// the table 'bot_events' in dataset 'swarming'.
type BotEvent struct {
EventTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=event_time,json=eventTime,proto3" json:"event_time,omitempty"`
// Snapshot of the Bot that had this event.
//
// Eventually we'd want to only snapshot the difference from the previous
// event, but this would make the SQL queries much more complicated.
Bot *Bot `protobuf:"bytes,2,opt,name=bot,proto3" json:"bot,omitempty"`
// Type of state change (event) that trigger this message.
Event BotEventType `protobuf:"varint,3,opt,name=event,proto3,enum=swarming.v1.BotEventType" json:"event,omitempty"`
// Supplementation information to describe the bot event. Human readable.
//
// See BotEventType for the meaning of this string for each status.
EventMsg string `protobuf:"bytes,4,opt,name=event_msg,json=eventMsg,proto3" json:"event_msg,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BotEvent) Reset() { *m = BotEvent{} }
func (m *BotEvent) String() string { return proto.CompactTextString(m) }
func (*BotEvent) ProtoMessage() {}
func (*BotEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{10}
}
func (m *BotEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BotEvent.Unmarshal(m, b)
}
func (m *BotEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BotEvent.Marshal(b, m, deterministic)
}
func (m *BotEvent) XXX_Merge(src proto.Message) {
xxx_messageInfo_BotEvent.Merge(m, src)
}
func (m *BotEvent) XXX_Size() int {
return xxx_messageInfo_BotEvent.Size(m)
}
func (m *BotEvent) XXX_DiscardUnknown() {
xxx_messageInfo_BotEvent.DiscardUnknown(m)
}
var xxx_messageInfo_BotEvent proto.InternalMessageInfo
func (m *BotEvent) GetEventTime() *timestamp.Timestamp {
if m != nil {
return m.EventTime
}
return nil
}
func (m *BotEvent) GetBot() *Bot {
if m != nil {
return m.Bot
}
return nil
}
func (m *BotEvent) GetEvent() BotEventType {
if m != nil {
return m.Event
}
return BotEventType_BOT_EVENT_TYPE_UNSPECIFIED
}
func (m *BotEvent) GetEventMsg() string {
if m != nil {
return m.EventMsg
}
return ""
}
// Defines a Content Addressed Storage (a cache in practice) data tree
// reference, normally a reference to a .isolated file.
//
// This can be used to refer to either a task's inputs or a task's outputs.
//
// The .isolated file format is defined at
// https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/isolate/doc/Design.md#file-format
// It is a JSON file listing all the inputs.
//
// It is very different RBE's CAS format, which uses a merkel tree of protobuf
// files.
type CASTree struct {
// server is one of:
// - The isolated server to fetch (or push) content from. Must contain
// "https://" or "http://" prefix.
// - The Google Cloud Project name hosting the RBE CAS.
Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
// The hex encoded hash of an isolated archive. It is expected to be a SHA-1
// (40 characters) or SHA-256 (64 characters), based on the namespace value
// below.
Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"`
// Namespace on the isolate server. This currently defines the hashing
// algorithm and compression algorithm but is currently loosely defined.
//
// A prefix "sha256-" defines a SHA-256 hashing. Defaults to SHA-1.
// A suffix "-deflate" or "-gzip" defines a deflate algorithm.
//
// When referring to a RBE CAS instance, the namespace must be set to
// "sha256-GCP". The GCP RBE CAS requires SHA-256 and doesn't support
// precompressed data.
Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CASTree) Reset() { *m = CASTree{} }
func (m *CASTree) String() string { return proto.CompactTextString(m) }
func (*CASTree) ProtoMessage() {}
func (*CASTree) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{11}
}
func (m *CASTree) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CASTree.Unmarshal(m, b)
}
func (m *CASTree) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CASTree.Marshal(b, m, deterministic)
}
func (m *CASTree) XXX_Merge(src proto.Message) {
xxx_messageInfo_CASTree.Merge(m, src)
}
func (m *CASTree) XXX_Size() int {
return xxx_messageInfo_CASTree.Size(m)
}
func (m *CASTree) XXX_DiscardUnknown() {
xxx_messageInfo_CASTree.DiscardUnknown(m)
}
var xxx_messageInfo_CASTree proto.InternalMessageInfo
func (m *CASTree) GetServer() string {
if m != nil {
return m.Server
}
return ""
}
func (m *CASTree) GetDigest() string {
if m != nil {
return m.Digest
}
return ""
}
func (m *CASTree) GetNamespace() string {
if m != nil {
return m.Namespace
}
return ""
}
// Defines one CIPD package to install prior to running the task.
//
// CIPD packages are versioned and ACL'ed packages that are meant for tools that
// are kept for a long time.
type CIPDPackage struct {
// The template for the CIPD package name that will have its variables
// evaluated, e.g. "infra/tools/authutil/${platform}".
//
// TODO(vadimsh): Link to documentation of the variable usable.
PackageName string `protobuf:"bytes,1,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"`
// Valid package version for the requested package.
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
// Path to directory relative to the task's root dir, where the package is to
// be installed.
//
// If empty, the package will be installed at the root of the mapped
// directory. If file names in the package and in the isolate clash, it will
// cause a failure.
DestPath string `protobuf:"bytes,3,opt,name=dest_path,json=destPath,proto3" json:"dest_path,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CIPDPackage) Reset() { *m = CIPDPackage{} }
func (m *CIPDPackage) String() string { return proto.CompactTextString(m) }
func (*CIPDPackage) ProtoMessage() {}
func (*CIPDPackage) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{12}
}
func (m *CIPDPackage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CIPDPackage.Unmarshal(m, b)
}
func (m *CIPDPackage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CIPDPackage.Marshal(b, m, deterministic)
}
func (m *CIPDPackage) XXX_Merge(src proto.Message) {
xxx_messageInfo_CIPDPackage.Merge(m, src)
}
func (m *CIPDPackage) XXX_Size() int {
return xxx_messageInfo_CIPDPackage.Size(m)
}
func (m *CIPDPackage) XXX_DiscardUnknown() {
xxx_messageInfo_CIPDPackage.DiscardUnknown(m)
}
var xxx_messageInfo_CIPDPackage proto.InternalMessageInfo
func (m *CIPDPackage) GetPackageName() string {
if m != nil {
return m.PackageName
}
return ""
}
func (m *CIPDPackage) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
func (m *CIPDPackage) GetDestPath() string {
if m != nil {
return m.DestPath
}
return ""
}
// Describes a named cache that should be reused on the bot.
//
// A NamedCacheEntry in a task specifies that the task wants a directory to be
// persisted on the bot across tasks.
//
// The cache directory is created at <run_dir>/|path|. If the cache was not
// present on the bot prior the task's execution, the directory is empty when
// the task starts. Any change done in the directory by the task is persisted on
// the bot after the task completes.
//
// If another task runs on the same bot and requests the same named cache, even
// if mapped to a different path, it will get the updated content.
type NamedCacheEntry struct {
// Unique name of the cache. Required. Length is limited to 4096.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Path to directory relative to the task's root dir, where the named cache is
// to be installed.
//
// A path cannot be shared among multiple caches or CIPD installations.
// A task will fail if a file/dir with the same name already exists.
DestPath string `protobuf:"bytes,2,opt,name=dest_path,json=destPath,proto3" json:"dest_path,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NamedCacheEntry) Reset() { *m = NamedCacheEntry{} }
func (m *NamedCacheEntry) String() string { return proto.CompactTextString(m) }
func (*NamedCacheEntry) ProtoMessage() {}
func (*NamedCacheEntry) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{13}
}
func (m *NamedCacheEntry) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NamedCacheEntry.Unmarshal(m, b)
}
func (m *NamedCacheEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NamedCacheEntry.Marshal(b, m, deterministic)
}
func (m *NamedCacheEntry) XXX_Merge(src proto.Message) {
xxx_messageInfo_NamedCacheEntry.Merge(m, src)
}
func (m *NamedCacheEntry) XXX_Size() int {
return xxx_messageInfo_NamedCacheEntry.Size(m)
}
func (m *NamedCacheEntry) XXX_DiscardUnknown() {
xxx_messageInfo_NamedCacheEntry.DiscardUnknown(m)
}
var xxx_messageInfo_NamedCacheEntry proto.InternalMessageInfo
func (m *NamedCacheEntry) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *NamedCacheEntry) GetDestPath() string {
if m != nil {
return m.DestPath
}
return ""
}
// Defines the type of containment to use to put the task primary process
// inside.
//
// TODO(maruel): https://crbug.com/808836
//
// This is highly OS specific:
// - Lower the integrity level on Windows. https://crbug.com/916586
// - Job Object on Windows. https://crbug.com/732818
// - Docker on Linux or Windows. https://crbug.com/916584
// - cgroup on Linux. https://crbug.com/764493
// - Creating a temporary user on Windows and macOS. https://crbug.com/916585
// - Lightweight home directory override on Windows, Linux and macOS.
// https://crbug.com/811411
type Containment struct {
// Lowers the priority of the task process when started. Doesn't require
// containment. This gives the bot a chance to survive when the task starts an
// overwhelming number of children processes.
LowerPriority bool `protobuf:"varint,1,opt,name=lower_priority,json=lowerPriority,proto3" json:"lower_priority,omitempty"`
// Defines the type of containment used.
ContainmentType Containment_ContainmentType `protobuf:"varint,2,opt,name=containment_type,json=containmentType,proto3,enum=swarming.v1.Containment_ContainmentType" json:"containment_type,omitempty"`
// Limits the number of concurrent active processes.
LimitProcesses int64 `protobuf:"varint,3,opt,name=limit_processes,json=limitProcesses,proto3" json:"limit_processes,omitempty"`
// Limits the total amount of memory allocated by processes.
LimitTotalCommittedMemory int64 `protobuf:"varint,4,opt,name=limit_total_committed_memory,json=limitTotalCommittedMemory,proto3" json:"limit_total_committed_memory,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Containment) Reset() { *m = Containment{} }
func (m *Containment) String() string { return proto.CompactTextString(m) }
func (*Containment) ProtoMessage() {}
func (*Containment) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{14}
}
func (m *Containment) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Containment.Unmarshal(m, b)
}
func (m *Containment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Containment.Marshal(b, m, deterministic)
}
func (m *Containment) XXX_Merge(src proto.Message) {
xxx_messageInfo_Containment.Merge(m, src)
}
func (m *Containment) XXX_Size() int {
return xxx_messageInfo_Containment.Size(m)
}
func (m *Containment) XXX_DiscardUnknown() {
xxx_messageInfo_Containment.DiscardUnknown(m)
}
var xxx_messageInfo_Containment proto.InternalMessageInfo
func (m *Containment) GetLowerPriority() bool {
if m != nil {
return m.LowerPriority
}
return false
}
func (m *Containment) GetContainmentType() Containment_ContainmentType {
if m != nil {
return m.ContainmentType
}
return Containment_NOT_SPECIFIED
}
func (m *Containment) GetLimitProcesses() int64 {
if m != nil {
return m.LimitProcesses
}
return 0
}
func (m *Containment) GetLimitTotalCommittedMemory() int64 {
if m != nil {
return m.LimitTotalCommittedMemory
}
return 0
}
// Defines the 'what' to run.
//
// A serialization of this message is hashed and this hash is what is used for
// task deduping.
type TaskProperties struct {
// Isolated inputs to map in the working directory.
//
// Deprecated: the isolated file may optionally specify a command to run.
// Otherwise, 'command' must be specified.
CasInputs *CASTree `protobuf:"bytes,1,opt,name=cas_inputs,json=casInputs,proto3" json:"cas_inputs,omitempty"`
// Defines the set of CIPD packages to install prior to running the task.
//
// These packages are meant to be software that is needed (a dependency) by
// the task being run. Unlike isolated files from cas_inputs, the CIPD
// packages do not expire from the server.
//
// Items must be sorted per the CIPD package name.
CipdInputs []*CIPDPackage `protobuf:"bytes,2,rep,name=cipd_inputs,json=cipdInputs,proto3" json:"cipd_inputs,omitempty"`
// Specifies named caches to map into the working directory. These caches
// outlive the task, which can then be reused by tasks later used on this bot
// that request the same named cache.
//
// Items must be sorted per the named cache name.
NamedCaches []*NamedCacheEntry `protobuf:"bytes,3,rep,name=named_caches,json=namedCaches,proto3" json:"named_caches,omitempty"`
// Command to run. This has priority over a command specified in the isolated
// files. Only one of 'command' or 'extra_args' can be specified.
Command []string `protobuf:"bytes,4,rep,name=command,proto3" json:"command,omitempty"`
// Relative working directory to start the 'command' in, defaults to the root
// mapped directory or what is provided in the isolated file, if any.
RelativeCwd string `protobuf:"bytes,5,opt,name=relative_cwd,json=relativeCwd,proto3" json:"relative_cwd,omitempty"`
// Extraneous arguments to append to the command specified in the isolated
// file. Can only be used when an isolated file specifies a command. Only one
// of 'command' or 'extra_args' can be specified.
//
// Deprecated.
ExtraArgs []string `protobuf:"bytes,6,rep,name=extra_args,json=extraArgs,proto3" json:"extra_args,omitempty"`
// Secret bytes to provide to the task. Write only, cannot be retrieved back.
SecretBytes []byte `protobuf:"bytes,7,opt,name=secret_bytes,json=secretBytes,proto3" json:"secret_bytes,omitempty"`
// When retrieved back, has_secret_bytes is set to true.
HasSecretBytes bool `protobuf:"varint,8,opt,name=has_secret_bytes,json=hasSecretBytes,proto3" json:"has_secret_bytes,omitempty"`
// Dimensions are what is used to determine which bot can run the task.
//
// The values are effectively an AND, a bot must match all dimensions to be
// selected to run the task.
//
// Items must be sorted.
Dimensions []*StringListPair `protobuf:"bytes,9,rep,name=dimensions,proto3" json:"dimensions,omitempty"`
// Environment variables to set when running the task.
//
// Items must be sorted.
Env []*StringPair `protobuf:"bytes,10,rep,name=env,proto3" json:"env,omitempty"`
// Task root relative paths to prepend to a given environment variable.
//
// This allows one to safely modify variables like PATH, PYTHONPATH, or other
// PATH-like environment variables. The order of operations is:
// * Turn slashes into native-platform slashes
// * Make the path absolute
// * Prepend it to the current value of the envvar using the os-native list
// separator (`;` on Windows, `:` on POSIX)
//
// Each key can have multiple paths to prepend. They will be prepended in
// the order seen here.
//
// For example, if env_paths is:
// [ (key="PATH", values=["foo", "bar"]),
// (key="CUSTOMPATH", values=["custom"]), ]
//
// The task would see:
// PATH=/path/to/swarming/rundir/foo:/path/to/swarming/rundir/bar:$PATH
// CUSTOMPATH=/path/to/swarming/rundir/custom
//
// Paths must always be specified here with forward-slashes, and must not
// attempt to escape the task's root (i.e. must not contain `..`).
//
// This is applied AFTER evaluating `env`.
//
// Items must be sorted by key, but exceptionally not by values.
EnvPaths []*StringListPair `protobuf:"bytes,11,rep,name=env_paths,json=envPaths,proto3" json:"env_paths,omitempty"`
// Declare what kind of containment shall be used to run the task process
// in.
Containment *Containment `protobuf:"bytes,12,opt,name=containment,proto3" json:"containment,omitempty"`
// Maximum number of seconds the task can run before its process is forcibly
// terminated and the task results in TIMED_OUT.
ExecutionTimeout *duration.Duration `protobuf:"bytes,13,opt,name=execution_timeout,json=executionTimeout,proto3" json:"execution_timeout,omitempty"`
// Maximum number of seconds the task may be silent (no output to stdout nor
// stderr) before it is considered hung and it forcibly terminated early and
// the task results in TIMED_OUT_SILENCE.
IoTimeout *duration.Duration `protobuf:"bytes,14,opt,name=io_timeout,json=ioTimeout,proto3" json:"io_timeout,omitempty"`
// Number of second to give the child process after a SIGTERM before sending a
// SIGKILL. See ../../doc/Bot.md#timeout-handling
GracePeriod *duration.Duration `protobuf:"bytes,15,opt,name=grace_period,json=gracePeriod,proto3" json:"grace_period,omitempty"`
// True if the task does not access any service through the network and is
// believed to be certain to produce the same output given the same input. In
// the case of a successful task, previous results will be reused if possible,
// leading to DEDUPED task result for the tasks that could reuse previous
// task's outcome.
Idempotent bool `protobuf:"varint,16,opt,name=idempotent,proto3" json:"idempotent,omitempty"`
// Paths in the working directory to archive back and store as
// TaskResult.outputs.
//
// Items must be sorted.
Outputs []string `protobuf:"bytes,17,rep,name=outputs,proto3" json:"outputs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskProperties) Reset() { *m = TaskProperties{} }
func (m *TaskProperties) String() string { return proto.CompactTextString(m) }
func (*TaskProperties) ProtoMessage() {}
func (*TaskProperties) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{15}
}
func (m *TaskProperties) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskProperties.Unmarshal(m, b)
}
func (m *TaskProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskProperties.Marshal(b, m, deterministic)
}
func (m *TaskProperties) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskProperties.Merge(m, src)
}
func (m *TaskProperties) XXX_Size() int {
return xxx_messageInfo_TaskProperties.Size(m)
}
func (m *TaskProperties) XXX_DiscardUnknown() {
xxx_messageInfo_TaskProperties.DiscardUnknown(m)
}
var xxx_messageInfo_TaskProperties proto.InternalMessageInfo
func (m *TaskProperties) GetCasInputs() *CASTree {
if m != nil {
return m.CasInputs
}
return nil
}
func (m *TaskProperties) GetCipdInputs() []*CIPDPackage {
if m != nil {
return m.CipdInputs
}
return nil
}
func (m *TaskProperties) GetNamedCaches() []*NamedCacheEntry {
if m != nil {
return m.NamedCaches
}
return nil
}
func (m *TaskProperties) GetCommand() []string {
if m != nil {
return m.Command
}
return nil
}
func (m *TaskProperties) GetRelativeCwd() string {
if m != nil {
return m.RelativeCwd
}
return ""
}
func (m *TaskProperties) GetExtraArgs() []string {
if m != nil {
return m.ExtraArgs
}
return nil
}
func (m *TaskProperties) GetSecretBytes() []byte {
if m != nil {
return m.SecretBytes
}
return nil
}
func (m *TaskProperties) GetHasSecretBytes() bool {
if m != nil {
return m.HasSecretBytes
}
return false
}
func (m *TaskProperties) GetDimensions() []*StringListPair {
if m != nil {
return m.Dimensions
}
return nil
}
func (m *TaskProperties) GetEnv() []*StringPair {
if m != nil {
return m.Env
}
return nil
}
func (m *TaskProperties) GetEnvPaths() []*StringListPair {
if m != nil {
return m.EnvPaths
}
return nil
}
func (m *TaskProperties) GetContainment() *Containment {
if m != nil {
return m.Containment
}
return nil
}
func (m *TaskProperties) GetExecutionTimeout() *duration.Duration {
if m != nil {
return m.ExecutionTimeout
}
return nil
}
func (m *TaskProperties) GetIoTimeout() *duration.Duration {
if m != nil {
return m.IoTimeout
}
return nil
}
func (m *TaskProperties) GetGracePeriod() *duration.Duration {
if m != nil {
return m.GracePeriod
}
return nil
}
func (m *TaskProperties) GetIdempotent() bool {
if m != nil {
return m.Idempotent
}
return false
}
func (m *TaskProperties) GetOutputs() []string {
if m != nil {
return m.Outputs
}
return nil
}
// Defines a possible task execution for a task request to be run on the
// Swarming infrastructure.
//
// When there is more than TaskSlice specified in TaskRequest, the second
// TaskSlice onwards represent possible fallbacks.
type TaskSlice struct {
// The property of the task to try to run.
//
// If there is no bot that can serve this properties.dimensions when this task
// slice is enqueued, it is immediately denied. This can trigger if:
// - There is no bot with these dimensions currently known (NO_RESOURCE).
// - Bots that could run this task are either all missing or quarantined.
Properties *TaskProperties `protobuf:"bytes,1,opt,name=properties,proto3" json:"properties,omitempty"`
// If this task slice is not scheduled after waiting this long, the next one
// will be processed.
Expiration *duration.Duration `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"`
// When a task is scheduled and there are currently no bots available to run
// the task, the TaskSlice can either be PENDING, or be denied immediately.
// When denied, the next TaskSlice is enqueued, and if there's no following
// TaskSlice, the task state is set to NO_RESOURCE. This should normally be
// set to False to avoid unnecessary waiting.
WaitForCapacity bool `protobuf:"varint,3,opt,name=wait_for_capacity,json=waitForCapacity,proto3" json:"wait_for_capacity,omitempty"`
// Digest of a serialized form of TaskProperties.
//
// This is used for DEDUPED and PENDING_DEDUPING when idempotent is true.
// Consider this value as opaque string, only use to check equality.
//
// It is set even if idempotent is false.
PropertiesHash string `protobuf:"bytes,4,opt,name=properties_hash,json=propertiesHash,proto3" json:"properties_hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskSlice) Reset() { *m = TaskSlice{} }
func (m *TaskSlice) String() string { return proto.CompactTextString(m) }
func (*TaskSlice) ProtoMessage() {}
func (*TaskSlice) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{16}
}
func (m *TaskSlice) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskSlice.Unmarshal(m, b)
}
func (m *TaskSlice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskSlice.Marshal(b, m, deterministic)
}
func (m *TaskSlice) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskSlice.Merge(m, src)
}
func (m *TaskSlice) XXX_Size() int {
return xxx_messageInfo_TaskSlice.Size(m)
}
func (m *TaskSlice) XXX_DiscardUnknown() {
xxx_messageInfo_TaskSlice.DiscardUnknown(m)
}
var xxx_messageInfo_TaskSlice proto.InternalMessageInfo
func (m *TaskSlice) GetProperties() *TaskProperties {
if m != nil {
return m.Properties
}
return nil
}
func (m *TaskSlice) GetExpiration() *duration.Duration {
if m != nil {
return m.Expiration
}
return nil
}
func (m *TaskSlice) GetWaitForCapacity() bool {
if m != nil {
return m.WaitForCapacity
}
return false
}
func (m *TaskSlice) GetPropertiesHash() string {
if m != nil {
return m.PropertiesHash
}
return ""
}
// This message is used to create a new task and can be retrieved back, except
// for a few write-only fields.
//
// A TaskRequest is immutable, it cannot be updated once created.
type TaskRequest struct {
// List of TaskSlice, along with their scheduling parameters.
//
// This defines all the various possible task execution for a task request to
// be run on the Swarming infrastructure. They are processed in order, and it
// is guaranteed that at most one of these will be processed.
//
// At least one must be specified, and a maximum number of 8 can be included.
TaskSlices []*TaskSlice `protobuf:"bytes,1,rep,name=task_slices,json=taskSlices,proto3" json:"task_slices,omitempty"`
// Task priority, the lower the more important.
//
// Valid values are between 1 and 255.
Priority int32 `protobuf:"varint,2,opt,name=priority,proto3" json:"priority,omitempty"`
// Defines what OAuth2 credentials the task uses when calling other services.
//
// Possible values are:
// - 'none': do not use task service accounts at all, this is default.
// - 'bot': use bot's own account, works only if bots authenticate with
// OAuth2.
// - 'email': use this account (if token server's service_accounts.cfg rules
// allow it). Not implemented yet.
//
// Note that the service account name is specified outside of task properties,
// and thus it is possible to have two tasks with different service accounts,
// but identical properties hash (so one can be deduped). If this is
// unsuitable use 'idempotent=False' or include a service account name in
// properties separately.
//
// TODO(vadimsh): Link to a doc that describes Swarming Service Accounts, when
// it exists.
ServiceAccount string `protobuf:"bytes,3,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"`
// When the task was created.
CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
// Task name for display purpose.
//
// Note: this value is not indexed. If you want to be able to query for tasks
// based on names, use tags below.
Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
// Tags are 'key:value' strings that describes what the task is about (it's
// semantic meaning).
//
// It is fine to reuse the same 'key' multiple times. It is not fine to use a
// key that is also used as a dimension.
//
// The tags are indexed, thus can be used for search with exact matches.
//
// Items must be sorted.
Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"`
// User for this task is run, if relevant. Not validated.
User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"`
// The task request ID.
//
// The request wasn't "run" so it is the same ID as the summary (ending with
// '0').
TaskId string `protobuf:"bytes,8,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`
// Parent Swarming task summary ID of the process requesting this task.
//
// This points to the TaskResult.task_id (ending with '0'). Note that an
// idempotent task can be automatically retried by Swarming, which may result
// in two TaskResult with the same task_id but different run_id.
//
// This field is read-only and derived from parent_run_id. It cannot be
// specified at task creation.
ParentTaskId string `protobuf:"bytes,9,opt,name=parent_task_id,json=parentTaskId,proto3" json:"parent_task_id,omitempty"`
// Parent Swarming task run ID of the process requesting this task.
//
// This field is set on the children tasks when a Swarming task creates
// children Swarming tasks.
//
// This points to the TaskResult.run_id (ending with '1', '2' or more).
ParentRunId string `protobuf:"bytes,11,opt,name=parent_run_id,json=parentRunId,proto3" json:"parent_run_id,omitempty"`
// Send notification to this pubsub topic for updates of this task.
PubsubNotification *PubSub `protobuf:"bytes,10,opt,name=pubsub_notification,json=pubsubNotification,proto3" json:"pubsub_notification,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskRequest) Reset() { *m = TaskRequest{} }
func (m *TaskRequest) String() string { return proto.CompactTextString(m) }
func (*TaskRequest) ProtoMessage() {}
func (*TaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{17}
}
func (m *TaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskRequest.Unmarshal(m, b)
}
func (m *TaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskRequest.Marshal(b, m, deterministic)
}
func (m *TaskRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskRequest.Merge(m, src)
}
func (m *TaskRequest) XXX_Size() int {
return xxx_messageInfo_TaskRequest.Size(m)
}
func (m *TaskRequest) XXX_DiscardUnknown() {
xxx_messageInfo_TaskRequest.DiscardUnknown(m)
}
var xxx_messageInfo_TaskRequest proto.InternalMessageInfo
func (m *TaskRequest) GetTaskSlices() []*TaskSlice {
if m != nil {
return m.TaskSlices
}
return nil
}
func (m *TaskRequest) GetPriority() int32 {
if m != nil {
return m.Priority
}
return 0
}
func (m *TaskRequest) GetServiceAccount() string {
if m != nil {
return m.ServiceAccount
}
return ""
}
func (m *TaskRequest) GetCreateTime() *timestamp.Timestamp {
if m != nil {
return m.CreateTime
}
return nil
}
func (m *TaskRequest) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *TaskRequest) GetTags() []string {
if m != nil {
return m.Tags
}
return nil
}
func (m *TaskRequest) GetUser() string {
if m != nil {
return m.User
}
return ""
}
func (m *TaskRequest) GetTaskId() string {
if m != nil {
return m.TaskId
}
return ""
}
func (m *TaskRequest) GetParentTaskId() string {
if m != nil {
return m.ParentTaskId
}
return ""
}
func (m *TaskRequest) GetParentRunId() string {
if m != nil {
return m.ParentRunId
}
return ""
}
func (m *TaskRequest) GetPubsubNotification() *PubSub {
if m != nil {
return m.PubsubNotification
}
return nil
}
// PubSub is a Cloud Pub/Sub topic to send task updates to.
//
// For this to work, the Swarming's AppEngine service account must have
// roles/pubsub.publisher role on the Cloud Pub/Sub topic.
//
// For a Swarming instance "FOOBAR.appspot.com", the service account to grant
// publisher right is "FOOBAR@@appspot.gserviceaccount.com".
//
// This is described at https://cloud.google.com/pubsub/docs/access-control.
//
// To grant Swarming instance FOOBAR.appspot.com publisher rights to topic
// projects/PROJ/topics/TOP, use:
//
// gcloud beta pubsub topics add-iam-policy-binding \
// TOP \
// --project PROJ \
// --member serviceAccount:FOOBAR@appspot.gserviceaccount.com \
// --role roles/pubsub.publisher
//
// See https://cloud.google.com/pubsub/docs/authentication for more
// information.
type PubSub struct {
// Full topic name to post task state updates to, e.g.
// "projects/<id>/topics/<id>".
Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
// Secret string to put into "auth_token" attribute of PubSub messages.
//
// This value is write only, it cannot be retrieved back.
AuthToken string `protobuf:"bytes,2,opt,name=auth_token,json=authToken,proto3" json:"auth_token,omitempty"`
// String to put into "userdata" attribute of PubSub messages.
Userdata string `protobuf:"bytes,3,opt,name=userdata,proto3" json:"userdata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *PubSub) Reset() { *m = PubSub{} }
func (m *PubSub) String() string { return proto.CompactTextString(m) }
func (*PubSub) ProtoMessage() {}
func (*PubSub) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{18}
}
func (m *PubSub) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PubSub.Unmarshal(m, b)
}
func (m *PubSub) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_PubSub.Marshal(b, m, deterministic)
}
func (m *PubSub) XXX_Merge(src proto.Message) {
xxx_messageInfo_PubSub.Merge(m, src)
}
func (m *PubSub) XXX_Size() int {
return xxx_messageInfo_PubSub.Size(m)
}
func (m *PubSub) XXX_DiscardUnknown() {
xxx_messageInfo_PubSub.DiscardUnknown(m)
}
var xxx_messageInfo_PubSub proto.InternalMessageInfo
func (m *PubSub) GetTopic() string {
if m != nil {
return m.Topic
}
return ""
}
func (m *PubSub) GetAuthToken() string {
if m != nil {
return m.AuthToken
}
return ""
}
func (m *PubSub) GetUserdata() string {
if m != nil {
return m.Userdata
}
return ""
}
// TaskResult is the result of a TaskRequest as it is processed by Swarming.
//
// The TaskResult represents one attempt (run on a bot) and/or the final result
// (summary). When the task never ran (for example EXPIRED), there's one summary
// but no run.
//
// An idempotent task can be automatically retried by Swarming, which may result
// in two TaskResult with the same task_id but different run_id; two runs, one
// summary.
//
// A retry is done when a task fails with a retriable error (for example with
// RAN_INTERNAL_FAILURE). For the client's perspective when looking at the
// summary (ID ending with '0'), the task went from PENDING to RUNNING and then
// back to PENDING.
//
// When stored in BigQuery in table task_result_run and task_results_summary,
// on-going tasks are in the __NULL__ partition since end_time is unset.
//
// There's a risk of duplicate rows because BigQuery is eventually consistent
// with regards to duplicate rows. Set your filter to ignore the __NULL__
// partition to enforce strong consistency and ignore on-going tasks. See
// https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency
// for more information.
type TaskResult struct {
Request *TaskRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
// Time the task was requested.
CreateTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
// Time the task started being run by a bot, before RUNNING_OVERHEAD_SETUP.
//
// Doing "start_time - create_time" gives the task pending time.
StartTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
// Time when the task was abandoned instead of normal completion.
//
// This happens for example when a task was KILLED, this then represents the
// time a client requested the task to be killed, which is before end_time.
// Same for TIMED_OUT state, this then represents the time when the bot
// decided to abort the task.
AbandonTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=abandon_time,json=abandonTime,proto3" json:"abandon_time,omitempty"`
// Time the task completed and teared down, after RUNNING_OVERHEAD_TEARDOWN.
//
// Doing "end_time - start_time" will not lead to the exact task duration,
// since this time frame includes overheads.
EndTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
// Duration of the task. This excludes overheads.
Duration *duration.Duration `protobuf:"bytes,6,opt,name=duration,proto3" json:"duration,omitempty"`
// Current state of the task (e.g. PENDING, RUNNING, COMPLETED, EXPIRED, etc).
State TaskState `protobuf:"varint,7,opt,name=state,proto3,enum=swarming.v1.TaskState" json:"state,omitempty"`
// The category of the current task state. This is primarily useful to
// simplify BigQuery queries. This can be used to determine if a task is done
// or if still considered for execution.
StateCategory TaskStateCategory `protobuf:"varint,8,opt,name=state_category,json=stateCategory,proto3,enum=swarming.v1.TaskStateCategory" json:"state_category,omitempty"`
// The task try number.
//
// It is 0 for a deduped task, since nothing ran. It is 0 if the task is still
// PENDING.
//
// It is normally 1 for a task that started running and runs a normal flow.
//
// A number above 1 means that the the task was tried multiple times. It can
// be due to a previous try resulting in a task state in the category
// CATEGORY_TRANSIENT_DONE.
TryNumber int32 `protobuf:"varint,9,opt,name=try_number,json=tryNumber,proto3" json:"try_number,omitempty"`
// Index in the TaskRequest.task_slices (TaskSlice instance) that this result
// represents. This is updated when a TaskSlice is enqueued to run. It can be
// updated until the task state is in either category CATEGORY_EXECUTION_DONE
// or CATEGORY_NEVER_RAN_DONE.
//
// The TaskSlice contains a TaskProperties, which defines what is run.
CurrentTaskSlice int32 `protobuf:"varint,10,opt,name=current_task_slice,json=currentTaskSlice,proto3" json:"current_task_slice,omitempty"`
// Snapshot of the bot that was assigned to this task at the start of the
// task. This includes bot local cache information.
Bot *Bot `protobuf:"bytes,11,opt,name=bot,proto3" json:"bot,omitempty"`
// Server versions that touched this task.
//
// A different version of the server may get the request and hand it to the
// bot. This is primarily useful to detect if a new server version introduced
// a bug and for canarying purpose.
ServerVersions []string `protobuf:"bytes,12,rep,name=server_versions,json=serverVersions,proto3" json:"server_versions,omitempty"`
// List of children task IDs that this task triggered, if any.
//
// This happens only in the case of reentrant tasks, a Swarming task that
// itself triggers more Swarming task. Each of these task will have 'run_id'
// set as their 'TaskRequest.parent_task_id'.
ChildrenTaskIds []string `protobuf:"bytes,13,rep,name=children_task_ids,json=childrenTaskIds,proto3" json:"children_task_ids,omitempty"`
// Task ID which results was reused for state DEDUPED.
//
// This is the run_id (ending with '1', '2' or more).
DedupedFrom string `protobuf:"bytes,14,opt,name=deduped_from,json=dedupedFrom,proto3" json:"deduped_from,omitempty"`
// Summary task ID (ending with '0') when creating a new task.
TaskId string `protobuf:"bytes,15,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`
// Actual executed task id that this task represents.
//
// This value is only set if it ran, that is, the task went through one of the
// state in CATEGORY_RUNNING.
//
// A task_id can have multiple run_id associated to it, they will have the
// corresponding try_number incremented starting at 1.
RunId string `protobuf:"bytes,16,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
// Listing of the actual pinned CIPDPackages that the task used.
//
// These can vary from the input packages if the inputs included non-identity
// versions (e.g. a ref like "latest"). This can be available once task setup
// is completed.
CipdPins *CIPDPins `protobuf:"bytes,17,opt,name=cipd_pins,json=cipdPins,proto3" json:"cipd_pins,omitempty"`
// Statistics about overhead for an isolated task. This is populated as the
// task goes through setup, execution and teardown.
Performance *TaskPerformance `protobuf:"bytes,18,opt,name=performance,proto3" json:"performance,omitempty"`
// Process exit code if relevant. May be forcibly set to -1 in exceptional
// cases.
ExitCode int32 `protobuf:"zigzag32,19,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"`
// Isolated outputs, if any.
Outputs *CASTree `protobuf:"bytes,20,opt,name=outputs,proto3" json:"outputs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskResult) Reset() { *m = TaskResult{} }
func (m *TaskResult) String() string { return proto.CompactTextString(m) }
func (*TaskResult) ProtoMessage() {}
func (*TaskResult) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{19}
}
func (m *TaskResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskResult.Unmarshal(m, b)
}
func (m *TaskResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskResult.Marshal(b, m, deterministic)
}
func (m *TaskResult) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskResult.Merge(m, src)
}
func (m *TaskResult) XXX_Size() int {
return xxx_messageInfo_TaskResult.Size(m)
}
func (m *TaskResult) XXX_DiscardUnknown() {
xxx_messageInfo_TaskResult.DiscardUnknown(m)
}
var xxx_messageInfo_TaskResult proto.InternalMessageInfo
func (m *TaskResult) GetRequest() *TaskRequest {
if m != nil {
return m.Request
}
return nil
}
func (m *TaskResult) GetCreateTime() *timestamp.Timestamp {
if m != nil {
return m.CreateTime
}
return nil
}
func (m *TaskResult) GetStartTime() *timestamp.Timestamp {
if m != nil {
return m.StartTime
}
return nil
}
func (m *TaskResult) GetAbandonTime() *timestamp.Timestamp {
if m != nil {
return m.AbandonTime
}
return nil
}
func (m *TaskResult) GetEndTime() *timestamp.Timestamp {
if m != nil {
return m.EndTime
}
return nil
}
func (m *TaskResult) GetDuration() *duration.Duration {
if m != nil {
return m.Duration
}
return nil
}
func (m *TaskResult) GetState() TaskState {
if m != nil {
return m.State
}
return TaskState_TASK_STATE_INVALID
}
func (m *TaskResult) GetStateCategory() TaskStateCategory {
if m != nil {
return m.StateCategory
}
return TaskStateCategory_TASK_STATE_CATEGORY_UNSPECIFIED
}
func (m *TaskResult) GetTryNumber() int32 {
if m != nil {
return m.TryNumber
}
return 0
}
func (m *TaskResult) GetCurrentTaskSlice() int32 {
if m != nil {
return m.CurrentTaskSlice
}
return 0
}
func (m *TaskResult) GetBot() *Bot {
if m != nil {
return m.Bot
}
return nil
}
func (m *TaskResult) GetServerVersions() []string {
if m != nil {
return m.ServerVersions
}
return nil
}
func (m *TaskResult) GetChildrenTaskIds() []string {
if m != nil {
return m.ChildrenTaskIds
}
return nil
}
func (m *TaskResult) GetDedupedFrom() string {
if m != nil {
return m.DedupedFrom
}
return ""
}
func (m *TaskResult) GetTaskId() string {
if m != nil {
return m.TaskId
}
return ""
}
func (m *TaskResult) GetRunId() string {
if m != nil {
return m.RunId
}
return ""
}
func (m *TaskResult) GetCipdPins() *CIPDPins {
if m != nil {
return m.CipdPins
}
return nil
}
func (m *TaskResult) GetPerformance() *TaskPerformance {
if m != nil {
return m.Performance
}
return nil
}
func (m *TaskResult) GetExitCode() int32 {
if m != nil {
return m.ExitCode
}
return 0
}
func (m *TaskResult) GetOutputs() *CASTree {
if m != nil {
return m.Outputs
}
return nil
}
// Defines pinned CIPD packages that were installed during the task.
type CIPDPins struct {
// The CIPD server where the CIPD packages were fetched from. Must contain
// "https://" or "http://" prefix.
//
// This field or its subfields are optional if default CIPD client is defined
// in the server config.
Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
// The pinned package + version of the CIPD client that was actually used.
ClientPackage *CIPDPackage `protobuf:"bytes,2,opt,name=client_package,json=clientPackage,proto3" json:"client_package,omitempty"`
// List of CIPD packages that were installed in the task with fully resolved
// package names and versions.
Packages []*CIPDPackage `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CIPDPins) Reset() { *m = CIPDPins{} }
func (m *CIPDPins) String() string { return proto.CompactTextString(m) }
func (*CIPDPins) ProtoMessage() {}
func (*CIPDPins) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{20}
}
func (m *CIPDPins) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CIPDPins.Unmarshal(m, b)
}
func (m *CIPDPins) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CIPDPins.Marshal(b, m, deterministic)
}
func (m *CIPDPins) XXX_Merge(src proto.Message) {
xxx_messageInfo_CIPDPins.Merge(m, src)
}
func (m *CIPDPins) XXX_Size() int {
return xxx_messageInfo_CIPDPins.Size(m)
}
func (m *CIPDPins) XXX_DiscardUnknown() {
xxx_messageInfo_CIPDPins.DiscardUnknown(m)
}
var xxx_messageInfo_CIPDPins proto.InternalMessageInfo
func (m *CIPDPins) GetServer() string {
if m != nil {
return m.Server
}
return ""
}
func (m *CIPDPins) GetClientPackage() *CIPDPackage {
if m != nil {
return m.ClientPackage
}
return nil
}
func (m *CIPDPins) GetPackages() []*CIPDPackage {
if m != nil {
return m.Packages
}
return nil
}
// Information about the task's performance.
type TaskPerformance struct {
// Total cost of running this task in $USD. In the case of DEDUPED task, this
// represents the amount saved.
CostUsd float32 `protobuf:"fixed32,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"`
// Overhead that is caused by the bot server that is not accounted for by the
// other overheads.
OtherOverhead *duration.Duration `protobuf:"bytes,2,opt,name=other_overhead,json=otherOverhead,proto3" json:"other_overhead,omitempty"`
// Task environment setup overhead. This is the task state
// RUNNING_OVERHEAD_SETUP.
Setup *TaskOverheadStats `protobuf:"bytes,3,opt,name=setup,proto3" json:"setup,omitempty"`
// Task environment teardown overhead. This is the task state
// RUNNING_OVERHEAD_TEARDOWN.
Teardown *TaskOverheadStats `protobuf:"bytes,4,opt,name=teardown,proto3" json:"teardown,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskPerformance) Reset() { *m = TaskPerformance{} }
func (m *TaskPerformance) String() string { return proto.CompactTextString(m) }
func (*TaskPerformance) ProtoMessage() {}
func (*TaskPerformance) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{21}
}
func (m *TaskPerformance) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskPerformance.Unmarshal(m, b)
}
func (m *TaskPerformance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskPerformance.Marshal(b, m, deterministic)
}
func (m *TaskPerformance) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskPerformance.Merge(m, src)
}
func (m *TaskPerformance) XXX_Size() int {
return xxx_messageInfo_TaskPerformance.Size(m)
}
func (m *TaskPerformance) XXX_DiscardUnknown() {
xxx_messageInfo_TaskPerformance.DiscardUnknown(m)
}
var xxx_messageInfo_TaskPerformance proto.InternalMessageInfo
func (m *TaskPerformance) GetCostUsd() float32 {
if m != nil {
return m.CostUsd
}
return 0
}
func (m *TaskPerformance) GetOtherOverhead() *duration.Duration {
if m != nil {
return m.OtherOverhead
}
return nil
}
func (m *TaskPerformance) GetSetup() *TaskOverheadStats {
if m != nil {
return m.Setup
}
return nil
}
func (m *TaskPerformance) GetTeardown() *TaskOverheadStats {
if m != nil {
return m.Teardown
}
return nil
}
// Information about setup or teardown.
type TaskOverheadStats struct {
// Duration of this overhead.
Duration *duration.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"`
// CAS entries that were not present in the local or remote cache and had to
// be sent across the network.
Cold *CASEntriesStats `protobuf:"bytes,2,opt,name=cold,proto3" json:"cold,omitempty"`
// CAS entries that were in the cache and thus didn't have to be transferred.
Hot *CASEntriesStats `protobuf:"bytes,3,opt,name=hot,proto3" json:"hot,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TaskOverheadStats) Reset() { *m = TaskOverheadStats{} }
func (m *TaskOverheadStats) String() string { return proto.CompactTextString(m) }
func (*TaskOverheadStats) ProtoMessage() {}
func (*TaskOverheadStats) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{22}
}
func (m *TaskOverheadStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskOverheadStats.Unmarshal(m, b)
}
func (m *TaskOverheadStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TaskOverheadStats.Marshal(b, m, deterministic)
}
func (m *TaskOverheadStats) XXX_Merge(src proto.Message) {
xxx_messageInfo_TaskOverheadStats.Merge(m, src)
}
func (m *TaskOverheadStats) XXX_Size() int {
return xxx_messageInfo_TaskOverheadStats.Size(m)
}
func (m *TaskOverheadStats) XXX_DiscardUnknown() {
xxx_messageInfo_TaskOverheadStats.DiscardUnknown(m)
}
var xxx_messageInfo_TaskOverheadStats proto.InternalMessageInfo
func (m *TaskOverheadStats) GetDuration() *duration.Duration {
if m != nil {
return m.Duration
}
return nil
}
func (m *TaskOverheadStats) GetCold() *CASEntriesStats {
if m != nil {
return m.Cold
}
return nil
}
func (m *TaskOverheadStats) GetHot() *CASEntriesStats {
if m != nil {
return m.Hot
}
return nil
}
// Statistics for differential CAS entries in the context of I/O for a task.
type CASEntriesStats struct {
NumItems int64 `protobuf:"varint,1,opt,name=num_items,json=numItems,proto3" json:"num_items,omitempty"`
TotalBytesItems int64 `protobuf:"varint,2,opt,name=total_bytes_items,json=totalBytesItems,proto3" json:"total_bytes_items,omitempty"`
// This buffer is compressed as deflate'd delta-encoded varints. This is the
// list of all the item size for an I/O operation, which can scale in the 100k
// range. So this can be large! See //client/utils/large.py for the code to
// handle these.
Items []byte `protobuf:"bytes,6,opt,name=items,proto3" json:"items,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CASEntriesStats) Reset() { *m = CASEntriesStats{} }
func (m *CASEntriesStats) String() string { return proto.CompactTextString(m) }
func (*CASEntriesStats) ProtoMessage() {}
func (*CASEntriesStats) Descriptor() ([]byte, []int) {
return fileDescriptor_d3887eaa0fa60818, []int{23}
}
func (m *CASEntriesStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CASEntriesStats.Unmarshal(m, b)
}
func (m *CASEntriesStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CASEntriesStats.Marshal(b, m, deterministic)
}
func (m *CASEntriesStats) XXX_Merge(src proto.Message) {
xxx_messageInfo_CASEntriesStats.Merge(m, src)
}
func (m *CASEntriesStats) XXX_Size() int {
return xxx_messageInfo_CASEntriesStats.Size(m)
}
func (m *CASEntriesStats) XXX_DiscardUnknown() {
xxx_messageInfo_CASEntriesStats.DiscardUnknown(m)
}
var xxx_messageInfo_CASEntriesStats proto.InternalMessageInfo
func (m *CASEntriesStats) GetNumItems() int64 {
if m != nil {
return m.NumItems
}
return 0
}
func (m *CASEntriesStats) GetTotalBytesItems() int64 {
if m != nil {
return m.TotalBytesItems
}
return 0
}
func (m *CASEntriesStats) GetItems() []byte {
if m != nil {
return m.Items
}
return nil
}
func init() {
proto.RegisterEnum("swarming.v1.BotStatusType", BotStatusType_name, BotStatusType_value)
proto.RegisterEnum("swarming.v1.BotEventType", BotEventType_name, BotEventType_value)
proto.RegisterEnum("swarming.v1.TaskStateCategory", TaskStateCategory_name, TaskStateCategory_value)
proto.RegisterEnum("swarming.v1.TaskState", TaskState_name, TaskState_value)
proto.RegisterEnum("swarming.v1.Containment_ContainmentType", Containment_ContainmentType_name, Containment_ContainmentType_value)
proto.RegisterType((*BotEventsRequest)(nil), "swarming.v1.BotEventsRequest")
proto.RegisterType((*BotEventsResponse)(nil), "swarming.v1.BotEventsResponse")
proto.RegisterType((*StringPair)(nil), "swarming.v1.StringPair")
proto.RegisterType((*StringListPair)(nil), "swarming.v1.StringListPair")
proto.RegisterType((*Bot)(nil), "swarming.v1.Bot")
proto.RegisterType((*BotInfo)(nil), "swarming.v1.BotInfo")
proto.RegisterType((*PhysicalEntity)(nil), "swarming.v1.PhysicalEntity")
proto.RegisterType((*CASStats)(nil), "swarming.v1.CASStats")
proto.RegisterType((*NamedCacheStats)(nil), "swarming.v1.NamedCacheStats")
proto.RegisterType((*CIPDPackageCacheStats)(nil), "swarming.v1.CIPDPackageCacheStats")
proto.RegisterType((*BotEvent)(nil), "swarming.v1.BotEvent")
proto.RegisterType((*CASTree)(nil), "swarming.v1.CASTree")
proto.RegisterType((*CIPDPackage)(nil), "swarming.v1.CIPDPackage")
proto.RegisterType((*NamedCacheEntry)(nil), "swarming.v1.NamedCacheEntry")
proto.RegisterType((*Containment)(nil), "swarming.v1.Containment")
proto.RegisterType((*TaskProperties)(nil), "swarming.v1.TaskProperties")
proto.RegisterType((*TaskSlice)(nil), "swarming.v1.TaskSlice")
proto.RegisterType((*TaskRequest)(nil), "swarming.v1.TaskRequest")
proto.RegisterType((*PubSub)(nil), "swarming.v1.PubSub")
proto.RegisterType((*TaskResult)(nil), "swarming.v1.TaskResult")
proto.RegisterType((*CIPDPins)(nil), "swarming.v1.CIPDPins")
proto.RegisterType((*TaskPerformance)(nil), "swarming.v1.TaskPerformance")
proto.RegisterType((*TaskOverheadStats)(nil), "swarming.v1.TaskOverheadStats")
proto.RegisterType((*CASEntriesStats)(nil), "swarming.v1.CASEntriesStats")
}
func init() {
proto.RegisterFile("go.chromium.org/luci/swarming/proto/api/swarming.proto", fileDescriptor_d3887eaa0fa60818)
}
var fileDescriptor_d3887eaa0fa60818 = []byte{
// 3008 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0x5f, 0x73, 0xdb, 0xc6,
0xb5, 0x0f, 0x49, 0x89, 0x22, 0x0f, 0x25, 0x12, 0x5a, 0xcb, 0x32, 0x2d, 0xff, 0x89, 0xc3, 0xdc,
0x7b, 0xa3, 0x78, 0x12, 0x29, 0x51, 0x92, 0x7b, 0x93, 0xf8, 0xde, 0x24, 0x14, 0x09, 0x47, 0x88,
0x25, 0x92, 0x59, 0x80, 0x8e, 0x7d, 0x67, 0x3a, 0x18, 0x08, 0x5c, 0x93, 0xa8, 0x49, 0x00, 0xc1,
0x2e, 0x64, 0x2b, 0x0f, 0xfd, 0x1e, 0xf9, 0x0e, 0xed, 0x53, 0x3b, 0xd3, 0xa7, 0xbe, 0xf4, 0x13,
0xb4, 0x4f, 0xed, 0x5b, 0xfb, 0x1d, 0xfa, 0xde, 0xe9, 0x9c, 0xdd, 0x05, 0x45, 0x52, 0x92, 0x65,
0x4f, 0xdf, 0xb0, 0xe7, 0xfc, 0xce, 0xe2, 0xec, 0x9e, 0xff, 0x00, 0xfc, 0xf7, 0x30, 0xda, 0xf1,
0x47, 0x49, 0x34, 0x09, 0xd2, 0xc9, 0x4e, 0x94, 0x0c, 0x77, 0xc7, 0xa9, 0x1f, 0xec, 0xf2, 0x17,
0x5e, 0x32, 0x09, 0xc2, 0xe1, 0x6e, 0x9c, 0x44, 0x22, 0xda, 0xf5, 0xe2, 0x33, 0xd2, 0x8e, 0x24,
0x91, 0xca, 0x74, 0x7d, 0xf2, 0xf1, 0xd6, 0xdd, 0x61, 0x14, 0x0d, 0xc7, 0x4c, 0xa1, 0x8f, 0xd3,
0x67, 0xbb, 0x83, 0x34, 0xf1, 0x44, 0x10, 0x85, 0x0a, 0xbc, 0x75, 0x7b, 0x91, 0xcf, 0x45, 0x92,
0xfa, 0x42, 0x73, 0xdf, 0x5e, 0xe4, 0x8a, 0x60, 0xc2, 0xb8, 0xf0, 0x26, 0xb1, 0x02, 0x34, 0xfe,
0x92, 0x03, 0x63, 0x3f, 0x12, 0xe6, 0x09, 0x0b, 0x05, 0xa7, 0xec, 0xc7, 0x94, 0x71, 0x41, 0xae,
0x43, 0xf1, 0x38, 0x12, 0x6e, 0x30, 0xa8, 0xe7, 0xee, 0xe5, 0xb6, 0xcb, 0x74, 0xf9, 0x38, 0x12,
0xd6, 0x80, 0xdc, 0x82, 0x72, 0xec, 0x0d, 0x99, 0xcb, 0x83, 0x9f, 0x58, 0x3d, 0x7f, 0x2f, 0xb7,
0xbd, 0x4c, 0x4b, 0x48, 0xb0, 0x83, 0x9f, 0x18, 0xb9, 0x03, 0x20, 0x99, 0x22, 0x7a, 0xce, 0xc2,
0x7a, 0x41, 0xca, 0x49, 0xb8, 0x83, 0x04, 0xf2, 0x05, 0x00, 0x17, 0x5e, 0x22, 0x5c, 0x54, 0xa0,
0xbe, 0x74, 0x2f, 0xb7, 0x5d, 0xd9, 0xdb, 0xda, 0x51, 0xda, 0xed, 0x64, 0xda, 0xed, 0x38, 0x99,
0x76, 0xb4, 0x2c, 0xd1, 0xb8, 0x26, 0x9f, 0x41, 0x89, 0x85, 0x03, 0x25, 0xb8, 0x7c, 0xa5, 0xe0,
0x0a, 0x0b, 0x07, 0xb8, 0x6a, 0xfc, 0x12, 0xd6, 0x67, 0x0e, 0xc6, 0xe3, 0x28, 0xe4, 0x8c, 0x7c,
0x08, 0x45, 0x26, 0x29, 0xf5, 0xdc, 0xbd, 0xc2, 0x76, 0x65, 0xef, 0xfa, 0xce, 0xcc, 0x5d, 0xef,
0x64, 0x78, 0xaa, 0x41, 0xe4, 0xbf, 0xa0, 0x16, 0xb2, 0x97, 0xc2, 0x9d, 0x39, 0x59, 0x5e, 0x9e,
0x6c, 0x0d, 0xc9, 0xbd, 0xec, 0x74, 0x8d, 0x4f, 0x01, 0x6c, 0x91, 0x04, 0xe1, 0xb0, 0xe7, 0x05,
0x09, 0x31, 0xa0, 0xf0, 0x9c, 0x9d, 0xea, 0xbb, 0xc3, 0x47, 0xb2, 0x01, 0xcb, 0x27, 0xde, 0x38,
0x65, 0x5a, 0x5a, 0x2d, 0x1a, 0x5f, 0x42, 0x55, 0x49, 0x1d, 0x06, 0x5c, 0x5c, 0x22, 0xb9, 0x09,
0x45, 0x09, 0xe6, 0xf5, 0xfc, 0xbd, 0xc2, 0x76, 0x99, 0xea, 0x55, 0xe3, 0xb7, 0x79, 0x28, 0xec,
0x47, 0x97, 0x9a, 0xea, 0x0e, 0x00, 0x67, 0x9c, 0x07, 0x51, 0x88, 0x2c, 0xf5, 0xd6, 0xb2, 0xa6,
0x58, 0x03, 0xd4, 0x27, 0x8e, 0xa2, 0x31, 0xaf, 0x17, 0xe4, 0xa6, 0x6a, 0x41, 0xf6, 0xa0, 0xc8,
0x85, 0x27, 0x52, 0x2e, 0xed, 0x53, 0xdd, 0xdb, 0x5a, 0xbc, 0x1c, 0x5b, 0x72, 0x9d, 0xd3, 0x98,
0x51, 0x8d, 0x94, 0x2f, 0x92, 0x4f, 0xee, 0x84, 0x0f, 0xa5, 0x79, 0xca, 0xd2, 0x76, 0x22, 0xe5,
0x47, 0x7c, 0x88, 0x17, 0xe8, 0xa7, 0x49, 0xc2, 0x42, 0xe1, 0x0a, 0x8f, 0x3f, 0x47, 0x65, 0x8a,
0xea, 0x02, 0x35, 0xd9, 0xf1, 0xf8, 0x73, 0x6b, 0x40, 0x1e, 0x00, 0x0c, 0x82, 0x09, 0x0b, 0x51,
0x3f, 0x5e, 0x5f, 0x91, 0xb6, 0xb9, 0x35, 0xf7, 0xfa, 0xf9, 0x9b, 0xa2, 0x33, 0x70, 0xb2, 0x0d,
0x4b, 0x41, 0xf8, 0x2c, 0xaa, 0x97, 0xa4, 0x73, 0x6c, 0x2c, 0x6a, 0x6d, 0x85, 0xcf, 0x22, 0x2a,
0x11, 0x8d, 0x7f, 0x14, 0x60, 0x45, 0x53, 0xc8, 0x03, 0x58, 0xe5, 0x69, 0x1c, 0x8f, 0xd9, 0x84,
0x85, 0xc2, 0x1b, 0xcb, 0xfb, 0xab, 0xec, 0xdd, 0x38, 0xe7, 0x5a, 0xb6, 0x8c, 0x27, 0x3a, 0x07,
0x26, 0x75, 0x58, 0x39, 0x61, 0x09, 0xbe, 0x5e, 0x5f, 0x6e, 0xb6, 0x24, 0x6f, 0x43, 0x85, 0xbd,
0x14, 0x2c, 0x09, 0xbd, 0xb1, 0x1b, 0xc4, 0x3a, 0x10, 0x20, 0x23, 0x59, 0x31, 0x79, 0x1f, 0x0c,
0x2f, 0x15, 0x23, 0x16, 0x8a, 0xc0, 0xf7, 0x04, 0x1b, 0xb8, 0x9e, 0xba, 0xef, 0x32, 0xad, 0xcd,
0xd1, 0x9b, 0x68, 0x90, 0xb2, 0xef, 0x71, 0x17, 0xaf, 0x93, 0x6b, 0xd7, 0x9f, 0x77, 0xd8, 0x56,
0xd3, 0x46, 0x9b, 0x70, 0x5a, 0xf2, 0x3d, 0x2e, 0x9f, 0xc8, 0x77, 0x40, 0x42, 0x6f, 0xc2, 0x06,
0xae, 0xef, 0xf9, 0x23, 0x96, 0x09, 0x17, 0xe5, 0x8d, 0xde, 0x9e, 0x13, 0xee, 0x20, 0xac, 0x85,
0x28, 0xb5, 0x87, 0x11, 0x4e, 0x09, 0x7a, 0xaf, 0x5f, 0xc0, 0x4d, 0x3f, 0x88, 0x07, 0x6e, 0xec,
0xf9, 0xcf, 0xbd, 0x21, 0xe3, 0x6a, 0x4f, 0xbd, 0xa5, 0x32, 0x52, 0x63, 0x5e, 0x1f, 0xab, 0xd7,
0xee, 0x29, 0xf0, 0xcc, 0xc6, 0x9b, 0xb8, 0x89, 0x26, 0xf3, 0x33, 0x3a, 0xd9, 0x85, 0xa5, 0x51,
0xc4, 0x85, 0xb6, 0xdb, 0xbc, 0xb9, 0x7b, 0xa3, 0x53, 0x1e, 0xf8, 0xde, 0xd8, 0x0c, 0x45, 0x20,
0x4e, 0xa9, 0x04, 0x92, 0xcf, 0x60, 0x65, 0xc0, 0x4e, 0x02, 0x9f, 0xf1, 0x7a, 0xf9, 0x02, 0x17,
0x59, 0x90, 0xc9, 0xb0, 0x8d, 0x1f, 0xa1, 0x3a, 0xcf, 0x22, 0x04, 0x96, 0xf0, 0xb0, 0x3a, 0x66,
0xe4, 0xf3, 0x39, 0x7f, 0xc8, 0xbf, 0x89, 0x3f, 0x54, 0x21, 0x3f, 0x35, 0x76, 0x3e, 0x88, 0x1b,
0xbf, 0x82, 0x52, 0x66, 0x1b, 0xf2, 0x0e, 0xac, 0x86, 0xe9, 0xe4, 0x98, 0x25, 0x6e, 0x20, 0xd8,
0x84, 0xcb, 0x97, 0x16, 0x68, 0x45, 0xd1, 0x2c, 0x24, 0xa1, 0x3e, 0xd3, 0xa4, 0x5a, 0xa0, 0xf2,
0x99, 0x3c, 0x80, 0x4a, 0x34, 0x1e, 0x30, 0xae, 0x53, 0x66, 0xe1, 0xca, 0xcc, 0x07, 0x0a, 0x2e,
0x93, 0xdf, 0x29, 0xd4, 0x16, 0xcc, 0x7b, 0xe1, 0x99, 0x2f, 0x7a, 0xef, 0x57, 0xb0, 0x36, 0xf6,
0xb8, 0x70, 0x53, 0xce, 0x5e, 0xf7, 0xcd, 0x15, 0x14, 0xe8, 0x73, 0x26, 0x5f, 0xfd, 0x73, 0x0e,
0xae, 0x5f, 0xe8, 0x07, 0x17, 0x6a, 0x70, 0x79, 0x20, 0x65, 0xba, 0x15, 0x5e, 0xa5, 0xdb, 0xd2,
0x9b, 0xe9, 0xf6, 0xfb, 0x1c, 0x94, 0xb2, 0x24, 0x8f, 0x25, 0x49, 0xa6, 0x79, 0xb5, 0x53, 0xee,
0xea, 0x92, 0x24, 0xd1, 0xb2, 0x24, 0x35, 0xa0, 0x70, 0x1c, 0x09, 0xed, 0x22, 0xc6, 0x62, 0xc2,
0xa1, 0xc8, 0x24, 0xbb, 0xb0, 0x2c, 0x05, 0xe4, 0x01, 0xaa, 0x7b, 0x37, 0x2f, 0xac, 0x34, 0x32,
0x97, 0x2a, 0x1c, 0x96, 0x57, 0xa5, 0x0f, 0x66, 0x52, 0x95, 0x11, 0x4a, 0x92, 0x70, 0xc4, 0x87,
0x8d, 0x1f, 0x60, 0xa5, 0xd5, 0xb4, 0x9d, 0x84, 0x31, 0x2c, 0x09, 0x9c, 0x25, 0x27, 0x2c, 0xd1,
0x17, 0xa9, 0x57, 0x48, 0x1f, 0x04, 0x43, 0xc6, 0x85, 0xbe, 0x49, 0xbd, 0x22, 0xb7, 0xa1, 0x8c,
0x57, 0xcd, 0x63, 0xcf, 0x67, 0x59, 0x61, 0x9e, 0x12, 0x1a, 0x43, 0xa8, 0xcc, 0x58, 0x0b, 0x9d,
0x55, 0x47, 0xbb, 0x3b, 0x63, 0xab, 0x8a, 0xa6, 0x75, 0x5e, 0x6d, 0xb2, 0x5b, 0x50, 0x96, 0x0e,
0x1b, 0x7b, 0x62, 0xa4, 0xdf, 0x54, 0x42, 0x42, 0xcf, 0x13, 0xa3, 0xc6, 0xfe, 0xac, 0x4b, 0x9a,
0xa1, 0x48, 0x2e, 0x0e, 0xc3, 0xb9, 0x3d, 0xf2, 0x0b, 0x7b, 0xfc, 0x21, 0x0f, 0x95, 0x56, 0x14,
0x0a, 0x2f, 0x08, 0x31, 0xf0, 0xc8, 0x7f, 0x42, 0x75, 0x1c, 0xbd, 0x60, 0x89, 0x1b, 0x27, 0x41,
0x94, 0x04, 0x42, 0x95, 0xce, 0x12, 0x5d, 0x93, 0xd4, 0x9e, 0x26, 0x12, 0x1b, 0x0c, 0xff, 0x4c,
0xca, 0x15, 0xa7, 0xb1, 0x72, 0xf9, 0xea, 0xde, 0xf6, 0x7c, 0xfa, 0x3a, 0x03, 0xcd, 0x3e, 0x4b,
0x23, 0xd5, 0xfc, 0x79, 0x02, 0x79, 0x0f, 0x6a, 0xe3, 0x60, 0x12, 0x08, 0x37, 0x4e, 0x22, 0x9f,
0x71, 0xce, 0xb8, 0x76, 0xd5, 0xaa, 0x24, 0xf7, 0x32, 0x2a, 0xf9, 0x1a, 0x6e, 0x2b, 0xa0, 0x88,
0x84, 0x37, 0x76, 0xfd, 0x68, 0x32, 0x09, 0x04, 0x26, 0xfe, 0x09, 0x9b, 0x44, 0xc9, 0xa9, 0x34,
0x75, 0x81, 0xde, 0x94, 0x18, 0x07, 0x21, 0xad, 0x0c, 0x71, 0x24, 0x01, 0x8d, 0x03, 0xa8, 0x2d,
0x68, 0x43, 0xd6, 0x61, 0xad, 0xd3, 0x75, 0x5c, 0xbb, 0x67, 0xb6, 0xac, 0x87, 0x96, 0xd9, 0x36,
0xde, 0x22, 0x25, 0x58, 0xea, 0x74, 0x3b, 0xa6, 0x91, 0xc3, 0xa7, 0x66, 0xdf, 0xe9, 0x1a, 0x79,
0x52, 0x05, 0xf8, 0xae, 0xbb, 0xef, 0x76, 0xf7, 0xbf, 0x33, 0x5b, 0x8e, 0x51, 0x68, 0xfc, 0xb1,
0x08, 0x55, 0xac, 0xb8, 0xbd, 0x24, 0x8a, 0x59, 0x22, 0x02, 0xc6, 0xc9, 0x27, 0x00, 0x58, 0x63,
0x82, 0x30, 0x4e, 0x05, 0xd7, 0x51, 0xb0, 0xb1, 0x58, 0x64, 0xd0, 0xef, 0x28, 0xd6, 0x22, 0x4b,
0xc2, 0xc8, 0x17, 0x50, 0x91, 0x85, 0x41, 0x4b, 0xe5, 0x65, 0x32, 0xae, 0x5f, 0x56, 0x0a, 0x28,
0x20, 0x58, 0x8b, 0x7e, 0x0d, 0xab, 0xb3, 0xf5, 0x49, 0x76, 0x20, 0x97, 0x57, 0x26, 0xe9, 0x27,
0xb4, 0x32, 0x53, 0x99, 0xd0, 0xfd, 0xf0, 0x0a, 0xbd, 0x70, 0x50, 0x5f, 0x92, 0xdd, 0x4b, 0xb6,
0x44, 0xdf, 0x4d, 0xd8, 0xd8, 0x13, 0xc1, 0x09, 0x73, 0xfd, 0x17, 0x03, 0xdd, 0x8d, 0x54, 0x32,
0x5a, 0xeb, 0x85, 0xec, 0x8b, 0xd8, 0x4b, 0x91, 0x78, 0xae, 0x97, 0x0c, 0x55, 0x55, 0x2c, 0xd3,
0xb2, 0xa4, 0x34, 0x93, 0xa1, 0x4c, 0xd5, 0x9c, 0xf9, 0x09, 0x13, 0xee, 0xf1, 0xa9, 0x60, 0x58,
0xe3, 0x72, 0xdb, 0xab, 0xb4, 0xa2, 0x68, 0xfb, 0x48, 0x22, 0xdb, 0x60, 0x8c, 0xb0, 0x26, 0xcf,
0xc2, 0x4a, 0xd2, 0xe9, 0xaa, 0x23, 0x8f, 0xdb, 0x33, 0xc8, 0xf9, 0x9e, 0xa6, 0xfc, 0x66, 0x3d,
0xcd, 0xfb, 0x50, 0x60, 0xe1, 0x49, 0x1d, 0xa4, 0xd4, 0x8d, 0x0b, 0xa4, 0xa4, 0x04, 0x62, 0xc8,
0xe7, 0x50, 0x66, 0xe1, 0x89, 0x0c, 0x18, 0x5e, 0xaf, 0x5c, 0xfd, 0x9a, 0x12, 0x0b, 0x4f, 0x30,
0x9a, 0x38, 0xf9, 0x12, 0x2a, 0x33, 0x5e, 0x5d, 0x5f, 0x95, 0xc6, 0xaf, 0x5f, 0x16, 0x12, 0x74,
0x16, 0x4c, 0x1e, 0xc2, 0x3a, 0x7b, 0xc9, 0xfc, 0x14, 0x47, 0x11, 0x99, 0x41, 0xa3, 0x54, 0xd4,
0xd7, 0xe4, 0x0e, 0x37, 0xcf, 0x25, 0xd1, 0xb6, 0x9e, 0x59, 0xa8, 0x31, 0x95, 0x71, 0x94, 0x08,
0xf9, 0x1c, 0x20, 0x88, 0xa6, 0x1b, 0x54, 0xaf, 0xda, 0xa0, 0x1c, 0x44, 0x99, 0xe4, 0xff, 0xc2,
0xea, 0x30, 0xf1, 0x7c, 0xe6, 0xc6, 0x2c, 0x09, 0xa2, 0x41, 0xbd, 0x76, 0x95, 0x6c, 0x45, 0xc2,
0x7b, 0x12, 0x4d, 0xee, 0x02, 0x04, 0x03, 0x36, 0x89, 0x23, 0x81, 0x47, 0x37, 0xa4, 0x05, 0x67,
0x28, 0xe8, 0x66, 0x51, 0x2a, 0xa4, 0x7b, 0xaf, 0x2b, 0x37, 0xd3, 0xcb, 0xc6, 0x5f, 0x73, 0x50,
0xc6, 0x20, 0xb2, 0xc7, 0x81, 0x8f, 0x65, 0x1a, 0xe2, 0x69, 0x34, 0xe9, 0xf8, 0x99, 0xbf, 0xfe,
0xf9, 0x80, 0xa3, 0x33, 0x70, 0x59, 0x82, 0x5e, 0xc6, 0x81, 0xd2, 0x4f, 0x97, 0x93, 0x57, 0x1c,
0x60, 0x06, 0x4c, 0xee, 0xc3, 0xfa, 0x0b, 0x2f, 0x10, 0xee, 0xb3, 0x28, 0x71, 0x7d, 0x2f, 0xf6,
0x7c, 0xcc, 0x7e, 0x05, 0x79, 0x8c, 0x1a, 0x32, 0x1e, 0x46, 0x49, 0x4b, 0x93, 0x31, 0x55, 0x9d,
0xbd, 0xd4, 0x1d, 0x79, 0x7c, 0xa4, 0xeb, 0x4b, 0xf5, 0x8c, 0x7c, 0xe0, 0xf1, 0x51, 0xe3, 0x37,
0x05, 0xa8, 0xa0, 0xba, 0xd9, 0x20, 0xf8, 0x3f, 0x50, 0x91, 0x6d, 0x3b, 0x1f, 0xcb, 0xa6, 0x4b,
0xcd, 0x4c, 0x9b, 0xe7, 0x4e, 0x27, 0x6f, 0x82, 0x82, 0xc8, 0x1e, 0x39, 0xd9, 0x82, 0xd2, 0x34,
0x25, 0x67, 0x93, 0x62, 0x96, 0x8d, 0xdf, 0x83, 0x1a, 0x56, 0xac, 0xc0, 0x67, 0xae, 0xe7, 0xfb,
0x51, 0xaa, 0x4b, 0x64, 0x99, 0x56, 0x35, 0xb9, 0xa9, 0xa8, 0xd8, 0x01, 0xf9, 0x09, 0xf3, 0xc4,
0x6b, 0xd7, 0x7a, 0x50, 0x70, 0x59, 0xa2, 0xb3, 0xda, 0xb2, 0x3c, 0xdf, 0xee, 0x08, 0x6f, 0x1a,
0xf7, 0xf2, 0x19, 0x69, 0x29, 0x67, 0x89, 0x0c, 0xf5, 0x32, 0x95, 0xcf, 0xe4, 0x06, 0xac, 0x64,
0xd3, 0x4a, 0x49, 0x95, 0x52, 0xa1, 0xc6, 0x94, 0xff, 0x80, 0x6a, 0xec, 0xcd, 0x4d, 0x33, 0x65,
0xc9, 0x5f, 0x55, 0x54, 0x3d, 0xcc, 0x34, 0x60, 0x4d, 0xa3, 0x92, 0x54, 0xce, 0x5f, 0x95, 0xac,
0x88, 0x22, 0x91, 0xa6, 0x38, 0x81, 0xb5, 0xe1, 0x5a, 0x9c, 0x1e, 0xf3, 0xf4, 0xd8, 0x0d, 0x23,
0x11, 0x3c, 0xc3, 0x96, 0x1f, 0x5d, 0x00, 0xe4, 0x19, 0xaf, 0xcd, 0xb7, 0xb5, 0xe9, 0xb1, 0x9d,
0x1e, 0x53, 0xa2, 0xf0, 0x9d, 0x19, 0x78, 0xe3, 0x29, 0x14, 0x15, 0x17, 0x27, 0x3a, 0x11, 0xc5,
0x81, 0x9f, 0x8d, 0x81, 0x72, 0x81, 0xe9, 0x0e, 0x67, 0x8a, 0xb9, 0xd1, 0xb5, 0x8c, 0x14, 0x35,
0x94, 0x6f, 0x41, 0x09, 0xcf, 0x3b, 0xf0, 0x84, 0x97, 0x95, 0xeb, 0x6c, 0xdd, 0xf8, 0xdd, 0x0a,
0x80, 0x72, 0x05, 0x9e, 0x8e, 0x05, 0xd9, 0x83, 0x95, 0x44, 0x39, 0x85, 0xf6, 0xf1, 0xfa, 0x39,
0x2f, 0xd0, 0x4e, 0x43, 0x33, 0xe0, 0xa2, 0xfd, 0xf2, 0x6f, 0x64, 0xbf, 0xf9, 0x0f, 0x06, 0x85,
0x37, 0xf9, 0x60, 0xf0, 0x7f, 0xb0, 0xea, 0x1d, 0x7b, 0xe1, 0x40, 0x27, 0xa6, 0xd7, 0x69, 0x12,
0x35, 0xfe, 0xdf, 0xf8, 0xde, 0x80, 0x62, 0xd9, 0xa7, 0x19, 0x39, 0xe3, 0xbe, 0x32, 0x92, 0xa7,
0x50, 0xf2, 0x01, 0x2c, 0xe3, 0x3c, 0xc5, 0xa4, 0x03, 0x56, 0x2f, 0x0a, 0x2e, 0xe4, 0x52, 0x05,
0x22, 0x26, 0x54, 0xe5, 0x83, 0x8b, 0x23, 0xe2, 0x10, 0xbb, 0x87, 0x92, 0x14, 0xbb, 0x7b, 0xb1,
0x58, 0x4b, 0xa3, 0xe8, 0x1a, 0x9f, 0x5d, 0xa2, 0x5f, 0x88, 0xe4, 0xd4, 0x55, 0x23, 0x88, 0xf4,
0xe1, 0x65, 0x5a, 0x16, 0xc9, 0x69, 0x47, 0x12, 0xc8, 0x07, 0x40, 0xe6, 0xa6, 0x76, 0x19, 0xfe,
0xd2, 0x37, 0x97, 0xa9, 0x31, 0x33, 0xb8, 0xab, 0x0c, 0xa8, 0x9b, 0xe1, 0xca, 0xab, 0x9a, 0x61,
0x1d, 0xf3, 0x2c, 0x71, 0x75, 0xaf, 0xc8, 0xeb, 0xab, 0x32, 0x08, 0xab, 0x8a, 0xfc, 0x58, 0x53,
0x31, 0xad, 0xf9, 0xa3, 0x60, 0x3c, 0x48, 0x58, 0x98, 0xc5, 0x18, 0xaf, 0xaf, 0x49, 0x68, 0x2d,
0x63, 0xa8, 0x30, 0x93, 0xd5, 0x7a, 0xc0, 0x06, 0x69, 0xcc, 0x06, 0xee, 0xb3, 0x24, 0x9a, 0xc8,
0xe2, 0x51, 0xa6, 0x15, 0x4d, 0x7b, 0x98, 0x44, 0x93, 0xd9, 0x48, 0xae, 0xcd, 0x45, 0xf2, 0x75,
0x28, 0xea, 0xe0, 0x34, 0x54, 0xc0, 0x24, 0x32, 0x2c, 0x71, 0xe2, 0x96, 0x13, 0x6f, 0x10, 0x62,
0xde, 0xbf, 0x60, 0xe2, 0xc6, 0xb6, 0x26, 0x08, 0x71, 0xe2, 0xc6, 0xa1, 0x36, 0x08, 0x39, 0xf9,
0x0a, 0x2a, 0x31, 0x4b, 0x9e, 0x45, 0xc9, 0xc4, 0x0b, 0x7d, 0x56, 0x27, 0x52, 0xea, 0xf6, 0xf9,
0x12, 0x70, 0x86, 0xa1, 0xb3, 0x02, 0xb2, 0xef, 0x7f, 0x19, 0x08, 0xd7, 0x8f, 0x06, 0xac, 0x7e,
0xed, 0x5e, 0x6e, 0x7b, 0x9d, 0x96, 0x90, 0xd0, 0x8a, 0x06, 0x8c, 0xec, 0x9c, 0x95, 0xa1, 0x8d,
0x57, 0xf4, 0x66, 0xd3, 0xe2, 0xf4, 0x73, 0x0e, 0x4a, 0x99, 0x8e, 0x97, 0x4e, 0x0a, 0x5f, 0x43,
0xd5, 0x1f, 0x07, 0x68, 0x5e, 0xdd, 0xd7, 0xeb, 0xd8, 0xbc, 0xbc, 0x83, 0x5b, 0x53, 0xf8, 0x6c,
0x4a, 0xf8, 0x14, 0x4a, 0xd9, 0x37, 0x01, 0xdd, 0xc0, 0x5d, 0x2e, 0x3a, 0x45, 0x36, 0xfe, 0x9e,
0x83, 0xda, 0xc2, 0x4d, 0x90, 0x9b, 0x50, 0xf2, 0x23, 0x39, 0xd1, 0xa9, 0x2f, 0x58, 0x79, 0x6c,
0xe7, 0x70, 0x60, 0x1b, 0x90, 0x6f, 0xa0, 0x1a, 0x89, 0x11, 0x4b, 0xdc, 0xe8, 0x84, 0x25, 0x23,
0xe6, 0x0d, 0xae, 0x2e, 0x90, 0x6b, 0x52, 0xa0, 0xab, 0xf1, 0xe4, 0x53, 0x58, 0xe6, 0x4c, 0xa4,
0xb1, 0x4e, 0x1f, 0xe7, 0x83, 0x24, 0x43, 0xaa, 0xef, 0x14, 0x0a, 0x4c, 0xbe, 0x84, 0x92, 0x60,
0x5e, 0x32, 0x88, 0x5e, 0x84, 0x3a, 0x75, 0x5c, 0x25, 0x38, 0xc5, 0x37, 0x7e, 0x9d, 0x83, 0xf5,
0x73, 0xfc, 0xb9, 0xd4, 0x90, 0x7b, 0xfd, 0xd4, 0xf0, 0x11, 0x2c, 0xf9, 0xd1, 0x38, 0x3b, 0xf6,
0xed, 0x45, 0xc3, 0x63, 0x6f, 0x1c, 0xe8, 0x4f, 0x35, 0x54, 0x22, 0xc9, 0x0e, 0x14, 0x46, 0x91,
0xd0, 0xc7, 0x7d, 0xb5, 0x00, 0x02, 0x1b, 0x31, 0xd4, 0x16, 0xe8, 0xe8, 0x8d, 0x61, 0x3a, 0x99,
0xfb, 0x54, 0x51, 0x0a, 0xd3, 0x89, 0xfa, 0x4e, 0x71, 0x1f, 0xd6, 0xd5, 0x10, 0x23, 0xfb, 0x5e,
0x0d, 0x52, 0x1f, 0x0f, 0x6a, 0x92, 0x21, 0x3b, 0x5f, 0x85, 0xdd, 0x80, 0x65, 0xc5, 0x2f, 0xca,
0x26, 0x5a, 0x2d, 0xee, 0xff, 0x2d, 0x07, 0x6b, 0x73, 0x5f, 0x12, 0xc9, 0x16, 0x6c, 0xee, 0xe3,
0x28, 0xe3, 0x34, 0x9d, 0xbe, 0xed, 0xf6, 0x3b, 0xb3, 0x33, 0x4d, 0x05, 0x56, 0x8e, 0x2c, 0xdb,
0xb6, 0x3a, 0xdf, 0x1a, 0x39, 0x72, 0x13, 0xae, 0x7f, 0xdf, 0x6f, 0xd2, 0x66, 0xc7, 0xb1, 0x3a,
0x66, 0xdb, 0xdd, 0x7f, 0xea, 0xda, 0x26, 0x7d, 0x6c, 0x52, 0x23, 0x4f, 0x36, 0x81, 0x2c, 0xb0,
0xf6, 0xbb, 0x8e, 0x51, 0x20, 0xef, 0xc0, 0x9d, 0xee, 0x63, 0x93, 0x1e, 0x98, 0xcd, 0xb6, 0x7b,
0xd4, 0xb4, 0x3a, 0x8e, 0xd9, 0x69, 0x76, 0x5a, 0xa6, 0x6b, 0x3e, 0x71, 0x4c, 0xda, 0x69, 0x1e,
0x1a, 0x4b, 0xb8, 0xeb, 0x14, 0x82, 0x7a, 0x20, 0x48, 0xb2, 0x96, 0x09, 0x81, 0xea, 0x41, 0xd7,
0x76, 0x5c, 0x6a, 0xee, 0x77, 0xbb, 0x0e, 0x2a, 0x51, 0xc4, 0xd9, 0x6a, 0xbf, 0x6f, 0x3f, 0x35,
0x56, 0xc8, 0x2a, 0x94, 0xa8, 0x29, 0x35, 0x68, 0x1b, 0x25, 0xa4, 0x5b, 0xed, 0x43, 0xd3, 0x28,
0xdf, 0xff, 0x67, 0x1e, 0x56, 0x67, 0xc7, 0x7b, 0x72, 0x17, 0xb6, 0x70, 0x63, 0xf3, 0xb1, 0xd9,
0x71, 0x5c, 0xe7, 0x69, 0xcf, 0x5c, 0x38, 0xe4, 0x35, 0xa8, 0x21, 0xbf, 0x63, 0xfe, 0xe0, 0xda,
0xa6, 0x6d, 0x5b, 0xdd, 0x8e, 0x91, 0x23, 0x75, 0xd8, 0x98, 0xd5, 0xc6, 0x7d, 0xd8, 0xb4, 0x0e,
0xfb, 0xd4, 0x34, 0xf2, 0xa8, 0x15, 0x72, 0x0e, 0xba, 0xdd, 0x47, 0xae, 0x49, 0x69, 0x97, 0x1a,
0x05, 0x62, 0xc0, 0xea, 0x94, 0x76, 0xd8, 0xfd, 0xd6, 0x58, 0xc2, 0x1b, 0x41, 0xca, 0x54, 0x75,
0x17, 0x4f, 0x62, 0x2c, 0x67, 0x48, 0xfb, 0xa0, 0xef, 0xb4, 0xbb, 0x3f, 0x74, 0x8c, 0x22, 0xa9,
0x41, 0x05, 0x29, 0x6d, 0xf3, 0xd0, 0x74, 0xcc, 0xb6, 0xb1, 0x82, 0xb3, 0xa5, 0xd5, 0xb1, 0x1d,
0xda, 0x6f, 0x39, 0xae, 0x3c, 0x13, 0x90, 0x1b, 0x70, 0x6d, 0x4a, 0xb2, 0x9d, 0x26, 0x75, 0x5c,
0xa7, 0x69, 0x3f, 0x32, 0x2a, 0xa8, 0xe6, 0x94, 0x41, 0x4d, 0xc5, 0xc2, 0xab, 0x5f, 0x25, 0xb7,
0xa1, 0x3e, 0xe5, 0xf4, 0x7b, 0xed, 0xa6, 0x63, 0xca, 0xeb, 0x6d, 0x75, 0xdb, 0xa6, 0xb1, 0x86,
0x46, 0x9f, 0x72, 0x1d, 0x93, 0x1e, 0x59, 0x1d, 0x0d, 0x30, 0xaa, 0x78, 0x40, 0xdc, 0xdd, 0x6d,
0x75, 0x8f, 0x7a, 0x4a, 0xa7, 0x0d, 0xb4, 0x92, 0xa4, 0x9d, 0xbb, 0x8f, 0xeb, 0xa8, 0xbf, 0x64,
0x3d, 0xb2, 0x0e, 0x0f, 0xcd, 0xb6, 0xb1, 0x79, 0xff, 0x4f, 0x3a, 0x06, 0xe7, 0x2a, 0x20, 0x79,
0x17, 0xde, 0x96, 0x30, 0xf4, 0x33, 0xd3, 0x6d, 0x35, 0x1d, 0xf3, 0xdb, 0x2e, 0x7d, 0x7a, 0xde,
0x14, 0x33, 0xa0, 0x23, 0x3c, 0x63, 0x8d, 0x6c, 0x80, 0x31, 0x85, 0xf7, 0xcc, 0x4e, 0x1b, 0x1d,
0xc1, 0x98, 0xa3, 0xd2, 0x7e, 0xa7, 0x83, 0xd4, 0x7b, 0xe4, 0x16, 0xdc, 0x98, 0x52, 0x1d, 0xda,
0xec, 0xd8, 0x16, 0x1a, 0xbd, 0x8d, 0x73, 0xf9, 0x47, 0x73, 0x4c, 0xf3, 0x89, 0xd9, 0xea, 0x3b,
0x56, 0xb7, 0xa3, 0x98, 0xdf, 0xcc, 0x31, 0x3b, 0xe6, 0x63, 0x93, 0xba, 0xb4, 0xa9, 0x99, 0xbd,
0xfb, 0x7f, 0x2e, 0xe8, 0x91, 0x43, 0x36, 0x01, 0x9b, 0x40, 0x66, 0xb4, 0xb4, 0x3a, 0x8f, 0x9b,
0x87, 0x96, 0x8e, 0x96, 0x39, 0xfd, 0xf4, 0xc2, 0x6d, 0x9b, 0xed, 0x7e, 0x0f, 0xa9, 0xeb, 0x08,
0x39, 0x53, 0x76, 0x0b, 0x36, 0xf5, 0xc2, 0x9d, 0x86, 0x80, 0x6d, 0x3a, 0xfd, 0x9e, 0xf1, 0x0e,
0xb9, 0x03, 0x37, 0xcf, 0xf1, 0x1c, 0xb3, 0x49, 0xa5, 0xd3, 0x34, 0xe4, 0xa5, 0x6b, 0xb3, 0xe1,
0x5e, 0xef, 0x92, 0x2a, 0x80, 0xb6, 0x17, 0xae, 0x77, 0xd1, 0x31, 0x50, 0xff, 0x73, 0xf6, 0xfa,
0x08, 0x45, 0xdb, 0x7d, 0x67, 0x4a, 0xf8, 0x38, 0xf3, 0xff, 0xb6, 0x65, 0x37, 0x7b, 0x3d, 0xb3,
0x49, 0xcd, 0xb6, 0xb1, 0x47, 0xd6, 0xa0, 0xdc, 0xa3, 0xa6, 0x79, 0xd4, 0x43, 0xfb, 0x7f, 0x82,
0xcb, 0x33, 0x77, 0xf8, 0x06, 0x97, 0x8e, 0x75, 0x64, 0xb6, 0xdd, 0x6e, 0xdf, 0x31, 0x9a, 0xe4,
0x3a, 0xac, 0x4f, 0x97, 0xae, 0x6d, 0x1d, 0x9a, 0x9d, 0x96, 0x69, 0xec, 0x13, 0x80, 0xa2, 0x76,
0x8a, 0x16, 0x3a, 0x95, 0xce, 0x24, 0xae, 0xd5, 0xe9, 0xf5, 0x1d, 0xdb, 0x68, 0xe3, 0x65, 0xc8,
0xab, 0x31, 0xdb, 0x46, 0x0f, 0x17, 0xe6, 0x93, 0x9e, 0x85, 0x6f, 0xff, 0x1e, 0x63, 0xbb, 0x85,
0x89, 0x02, 0x65, 0x29, 0x6a, 0xdc, 0xe9, 0xa2, 0x7b, 0x77, 0xfb, 0xb4, 0x65, 0x1a, 0x36, 0xbe,
0xfe, 0xb0, 0x8b, 0x97, 0x75, 0x60, 0xb6, 0x0d, 0x07, 0xed, 0x91, 0x31, 0x5d, 0xf3, 0xc9, 0x41,
0xb3, 0x6f, 0xa3, 0x96, 0x7d, 0x0c, 0x01, 0xfb, 0x91, 0xd5, 0xeb, 0x99, 0xed, 0xf3, 0xf7, 0xf0,
0x78, 0xcf, 0x86, 0xe2, 0x7e, 0x24, 0x9a, 0x3d, 0x8b, 0x58, 0x50, 0x54, 0xbf, 0xa9, 0xc8, 0x9d,
0x0b, 0x3f, 0x12, 0x66, 0xff, 0xe5, 0xb6, 0xee, 0x5e, 0xc6, 0x56, 0x7f, 0xb7, 0x1a, 0x6f, 0xed,
0xef, 0xfe, 0xff, 0x87, 0xaf, 0xf9, 0xd3, 0xf1, 0x81, 0x17, 0x07, 0xf1, 0xf1, 0x71, 0x51, 0x12,
0x3e, 0xf9, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x12, 0xd4, 0xf0, 0xac, 0x1c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
// BotAPIClient is the client API for BotAPI service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type BotAPIClient interface {
// Events returns events relating to one bot.
Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error)
}
type botAPIPRPCClient struct {
client *prpc.Client
}
func NewBotAPIPRPCClient(client *prpc.Client) BotAPIClient {
return &botAPIPRPCClient{client}
}
func (c *botAPIPRPCClient) Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error) {
out := new(BotEventsResponse)
err := c.client.Call(ctx, "swarming.v1.BotAPI", "Events", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
type botAPIClient struct {
cc *grpc.ClientConn
}
func NewBotAPIClient(cc *grpc.ClientConn) BotAPIClient {
return &botAPIClient{cc}
}
func (c *botAPIClient) Events(ctx context.Context, in *BotEventsRequest, opts ...grpc.CallOption) (*BotEventsResponse, error) {
out := new(BotEventsResponse)
err := c.cc.Invoke(ctx, "/swarming.v1.BotAPI/Events", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// BotAPIServer is the server API for BotAPI service.
type BotAPIServer interface {
// Events returns events relating to one bot.
Events(context.Context, *BotEventsRequest) (*BotEventsResponse, error)
}
// UnimplementedBotAPIServer can be embedded to have forward compatible implementations.
type UnimplementedBotAPIServer struct {
}
func (*UnimplementedBotAPIServer) Events(ctx context.Context, req *BotEventsRequest) (*BotEventsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Events not implemented")
}
func RegisterBotAPIServer(s prpc.Registrar, srv BotAPIServer) {
s.RegisterService(&_BotAPI_serviceDesc, srv)
}
func _BotAPI_Events_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BotEventsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(BotAPIServer).Events(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/swarming.v1.BotAPI/Events",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(BotAPIServer).Events(ctx, req.(*BotEventsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _BotAPI_serviceDesc = grpc.ServiceDesc{
ServiceName: "swarming.v1.BotAPI",
HandlerType: (*BotAPIServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Events",
Handler: _BotAPI_Events_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "go.chromium.org/luci/swarming/proto/api/swarming.proto",
}