Merge pull request #5497 from hashicorp/b-exec-cpu-stats

exec: report cpu usage summary stat
This commit is contained in:
Mahmood Ali
2019-04-01 12:37:01 -04:00
committed by GitHub
7 changed files with 514 additions and 328 deletions

View File

@@ -0,0 +1,85 @@
package allocstats
import (
"github.com/hashicorp/nomad/e2e/framework"
"github.com/stretchr/testify/require"
"fmt"
"time"
"github.com/hashicorp/nomad/api"
"github.com/hashicorp/nomad/e2e/e2eutil"
"github.com/hashicorp/nomad/helper/uuid"
"github.com/hashicorp/nomad/testutil"
)
type BasicAllocStatsTest struct {
framework.TC
jobIds []string
}
func init() {
framework.AddSuites(&framework.TestSuite{
Component: "AllocationStats",
CanRunLocal: true,
Cases: []framework.TestCase{
new(BasicAllocStatsTest),
},
})
}
func (tc *BasicAllocStatsTest) BeforeAll(f *framework.F) {
// Ensure cluster has leader before running tests
e2eutil.WaitForLeader(f.T(), tc.Nomad())
// Ensure that we have four client nodes in ready state
e2eutil.WaitForNodesReady(f.T(), tc.Nomad(), 1)
}
// TestResourceStats is an end to end test for resource utilization
// This runs a raw exec job.
// TODO(preetha) - add more test cases with more realistic resource utilization
func (tc *BasicAllocStatsTest) TestResourceStats(f *framework.F) {
nomadClient := tc.Nomad()
uuid := uuid.Generate()
jobId := "allocstats" + uuid[0:8]
tc.jobIds = append(tc.jobIds, jobId)
allocs := e2eutil.RegisterAndWaitForAllocs(f.T(), nomadClient, "allocstats/input/raw_exec.nomad", jobId)
require := require.New(f.T())
require.Len(allocs, 1)
// Wait till alloc is running
allocID := allocs[0].ID
e2eutil.WaitForAllocRunning(f.T(), nomadClient, allocID)
allocsClient := nomadClient.Allocations()
// Verify allocation resource stats
// This job file should result in non zero CPU and Memory stats
testutil.WaitForResultRetries(500, func() (bool, error) {
time.Sleep(time.Millisecond * 100)
allocStatsResp, err := allocsClient.Stats(&api.Allocation{ID: allocID}, nil)
if err != nil {
return false, fmt.Errorf("unexpected error getting alloc stats: %v", err)
}
resourceUsage := allocStatsResp.ResourceUsage
cpuStatsValid := resourceUsage.CpuStats.TotalTicks > 0 && resourceUsage.CpuStats.Percent > 0
memStatsValid := resourceUsage.MemoryStats.RSS > 0
return cpuStatsValid && memStatsValid, fmt.Errorf("expected non zero resource usage, but was: %v", resourceUsage)
}, func(err error) {
f.T().Fatalf("invalid resource usage : %v", err)
})
}
func (tc *BasicAllocStatsTest) AfterEach(f *framework.F) {
nomadClient := tc.Nomad()
jobs := nomadClient.Jobs()
// Stop all jobs in test
for _, id := range tc.jobIds {
jobs.Deregister(id, true, nil)
}
// Garbage collect
nomadClient.System().GarbageCollect()
}

View File

@@ -0,0 +1,17 @@
job "test_raw" {
datacenters = ["dc1"]
type = "service"
group "test" {
count = 1
task "test1" {
driver = "raw_exec"
config {
command = "bash"
args = ["-c", "var=10000;while true; do a=$(awk -v x=$var 'BEGIN{print sqrt(x)}'); ((var++)); done" ]
}
}
}
}

View File

@@ -4,6 +4,7 @@ import (
"testing"
_ "github.com/hashicorp/nomad/e2e/affinities"
_ "github.com/hashicorp/nomad/e2e/allocstats"
_ "github.com/hashicorp/nomad/e2e/clientstate"
_ "github.com/hashicorp/nomad/e2e/consul"
_ "github.com/hashicorp/nomad/e2e/consultemplate"

View File

@@ -50,7 +50,7 @@ func (x TaskState) String() string {
return proto.EnumName(TaskState_name, int32(x))
}
func (TaskState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{0}
}
type FingerprintResponse_HealthState int32
@@ -76,7 +76,7 @@ func (x FingerprintResponse_HealthState) String() string {
return proto.EnumName(FingerprintResponse_HealthState_name, int32(x))
}
func (FingerprintResponse_HealthState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{5, 0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{5, 0}
}
type StartTaskResponse_Result int32
@@ -102,7 +102,7 @@ func (x StartTaskResponse_Result) String() string {
return proto.EnumName(StartTaskResponse_Result_name, int32(x))
}
func (StartTaskResponse_Result) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{9, 0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{9, 0}
}
type DriverCapabilities_FSIsolation int32
@@ -128,7 +128,7 @@ func (x DriverCapabilities_FSIsolation) String() string {
return proto.EnumName(DriverCapabilities_FSIsolation_name, int32(x))
}
func (DriverCapabilities_FSIsolation) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{25, 0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{25, 0}
}
type CPUUsage_Fields int32
@@ -163,7 +163,7 @@ func (x CPUUsage_Fields) String() string {
return proto.EnumName(CPUUsage_Fields_name, int32(x))
}
func (CPUUsage_Fields) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{43, 0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{43, 0}
}
type MemoryUsage_Fields int32
@@ -175,6 +175,7 @@ const (
MemoryUsage_KERNEL_USAGE MemoryUsage_Fields = 3
MemoryUsage_KERNEL_MAX_USAGE MemoryUsage_Fields = 4
MemoryUsage_USAGE MemoryUsage_Fields = 5
MemoryUsage_SWAP MemoryUsage_Fields = 6
)
var MemoryUsage_Fields_name = map[int32]string{
@@ -184,6 +185,7 @@ var MemoryUsage_Fields_name = map[int32]string{
3: "KERNEL_USAGE",
4: "KERNEL_MAX_USAGE",
5: "USAGE",
6: "SWAP",
}
var MemoryUsage_Fields_value = map[string]int32{
"RSS": 0,
@@ -192,13 +194,14 @@ var MemoryUsage_Fields_value = map[string]int32{
"KERNEL_USAGE": 3,
"KERNEL_MAX_USAGE": 4,
"USAGE": 5,
"SWAP": 6,
}
func (x MemoryUsage_Fields) String() string {
return proto.EnumName(MemoryUsage_Fields_name, int32(x))
}
func (MemoryUsage_Fields) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{44, 0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{44, 0}
}
type TaskConfigSchemaRequest struct {
@@ -211,7 +214,7 @@ func (m *TaskConfigSchemaRequest) Reset() { *m = TaskConfigSchemaRequest
func (m *TaskConfigSchemaRequest) String() string { return proto.CompactTextString(m) }
func (*TaskConfigSchemaRequest) ProtoMessage() {}
func (*TaskConfigSchemaRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{0}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{0}
}
func (m *TaskConfigSchemaRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfigSchemaRequest.Unmarshal(m, b)
@@ -243,7 +246,7 @@ func (m *TaskConfigSchemaResponse) Reset() { *m = TaskConfigSchemaRespon
func (m *TaskConfigSchemaResponse) String() string { return proto.CompactTextString(m) }
func (*TaskConfigSchemaResponse) ProtoMessage() {}
func (*TaskConfigSchemaResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{1}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{1}
}
func (m *TaskConfigSchemaResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfigSchemaResponse.Unmarshal(m, b)
@@ -280,7 +283,7 @@ func (m *CapabilitiesRequest) Reset() { *m = CapabilitiesRequest{} }
func (m *CapabilitiesRequest) String() string { return proto.CompactTextString(m) }
func (*CapabilitiesRequest) ProtoMessage() {}
func (*CapabilitiesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{2}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{2}
}
func (m *CapabilitiesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CapabilitiesRequest.Unmarshal(m, b)
@@ -315,7 +318,7 @@ func (m *CapabilitiesResponse) Reset() { *m = CapabilitiesResponse{} }
func (m *CapabilitiesResponse) String() string { return proto.CompactTextString(m) }
func (*CapabilitiesResponse) ProtoMessage() {}
func (*CapabilitiesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{3}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{3}
}
func (m *CapabilitiesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CapabilitiesResponse.Unmarshal(m, b)
@@ -352,7 +355,7 @@ func (m *FingerprintRequest) Reset() { *m = FingerprintRequest{} }
func (m *FingerprintRequest) String() string { return proto.CompactTextString(m) }
func (*FingerprintRequest) ProtoMessage() {}
func (*FingerprintRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{4}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{4}
}
func (m *FingerprintRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FingerprintRequest.Unmarshal(m, b)
@@ -395,7 +398,7 @@ func (m *FingerprintResponse) Reset() { *m = FingerprintResponse{} }
func (m *FingerprintResponse) String() string { return proto.CompactTextString(m) }
func (*FingerprintResponse) ProtoMessage() {}
func (*FingerprintResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{5}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{5}
}
func (m *FingerprintResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FingerprintResponse.Unmarshal(m, b)
@@ -450,7 +453,7 @@ func (m *RecoverTaskRequest) Reset() { *m = RecoverTaskRequest{} }
func (m *RecoverTaskRequest) String() string { return proto.CompactTextString(m) }
func (*RecoverTaskRequest) ProtoMessage() {}
func (*RecoverTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{6}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{6}
}
func (m *RecoverTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RecoverTaskRequest.Unmarshal(m, b)
@@ -494,7 +497,7 @@ func (m *RecoverTaskResponse) Reset() { *m = RecoverTaskResponse{} }
func (m *RecoverTaskResponse) String() string { return proto.CompactTextString(m) }
func (*RecoverTaskResponse) ProtoMessage() {}
func (*RecoverTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{7}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{7}
}
func (m *RecoverTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RecoverTaskResponse.Unmarshal(m, b)
@@ -526,7 +529,7 @@ func (m *StartTaskRequest) Reset() { *m = StartTaskRequest{} }
func (m *StartTaskRequest) String() string { return proto.CompactTextString(m) }
func (*StartTaskRequest) ProtoMessage() {}
func (*StartTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{8}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{8}
}
func (m *StartTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StartTaskRequest.Unmarshal(m, b)
@@ -580,7 +583,7 @@ func (m *StartTaskResponse) Reset() { *m = StartTaskResponse{} }
func (m *StartTaskResponse) String() string { return proto.CompactTextString(m) }
func (*StartTaskResponse) ProtoMessage() {}
func (*StartTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{9}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{9}
}
func (m *StartTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StartTaskResponse.Unmarshal(m, b)
@@ -640,7 +643,7 @@ func (m *WaitTaskRequest) Reset() { *m = WaitTaskRequest{} }
func (m *WaitTaskRequest) String() string { return proto.CompactTextString(m) }
func (*WaitTaskRequest) ProtoMessage() {}
func (*WaitTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{10}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{10}
}
func (m *WaitTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WaitTaskRequest.Unmarshal(m, b)
@@ -681,7 +684,7 @@ func (m *WaitTaskResponse) Reset() { *m = WaitTaskResponse{} }
func (m *WaitTaskResponse) String() string { return proto.CompactTextString(m) }
func (*WaitTaskResponse) ProtoMessage() {}
func (*WaitTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{11}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{11}
}
func (m *WaitTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WaitTaskResponse.Unmarshal(m, b)
@@ -733,7 +736,7 @@ func (m *StopTaskRequest) Reset() { *m = StopTaskRequest{} }
func (m *StopTaskRequest) String() string { return proto.CompactTextString(m) }
func (*StopTaskRequest) ProtoMessage() {}
func (*StopTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{12}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{12}
}
func (m *StopTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopTaskRequest.Unmarshal(m, b)
@@ -784,7 +787,7 @@ func (m *StopTaskResponse) Reset() { *m = StopTaskResponse{} }
func (m *StopTaskResponse) String() string { return proto.CompactTextString(m) }
func (*StopTaskResponse) ProtoMessage() {}
func (*StopTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{13}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{13}
}
func (m *StopTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopTaskResponse.Unmarshal(m, b)
@@ -818,7 +821,7 @@ func (m *DestroyTaskRequest) Reset() { *m = DestroyTaskRequest{} }
func (m *DestroyTaskRequest) String() string { return proto.CompactTextString(m) }
func (*DestroyTaskRequest) ProtoMessage() {}
func (*DestroyTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{14}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{14}
}
func (m *DestroyTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DestroyTaskRequest.Unmarshal(m, b)
@@ -862,7 +865,7 @@ func (m *DestroyTaskResponse) Reset() { *m = DestroyTaskResponse{} }
func (m *DestroyTaskResponse) String() string { return proto.CompactTextString(m) }
func (*DestroyTaskResponse) ProtoMessage() {}
func (*DestroyTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{15}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{15}
}
func (m *DestroyTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DestroyTaskResponse.Unmarshal(m, b)
@@ -894,7 +897,7 @@ func (m *InspectTaskRequest) Reset() { *m = InspectTaskRequest{} }
func (m *InspectTaskRequest) String() string { return proto.CompactTextString(m) }
func (*InspectTaskRequest) ProtoMessage() {}
func (*InspectTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{16}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{16}
}
func (m *InspectTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InspectTaskRequest.Unmarshal(m, b)
@@ -937,7 +940,7 @@ func (m *InspectTaskResponse) Reset() { *m = InspectTaskResponse{} }
func (m *InspectTaskResponse) String() string { return proto.CompactTextString(m) }
func (*InspectTaskResponse) ProtoMessage() {}
func (*InspectTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{17}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{17}
}
func (m *InspectTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InspectTaskResponse.Unmarshal(m, b)
@@ -992,7 +995,7 @@ func (m *TaskStatsRequest) Reset() { *m = TaskStatsRequest{} }
func (m *TaskStatsRequest) String() string { return proto.CompactTextString(m) }
func (*TaskStatsRequest) ProtoMessage() {}
func (*TaskStatsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{18}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{18}
}
func (m *TaskStatsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatsRequest.Unmarshal(m, b)
@@ -1038,7 +1041,7 @@ func (m *TaskStatsResponse) Reset() { *m = TaskStatsResponse{} }
func (m *TaskStatsResponse) String() string { return proto.CompactTextString(m) }
func (*TaskStatsResponse) ProtoMessage() {}
func (*TaskStatsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{19}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{19}
}
func (m *TaskStatsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatsResponse.Unmarshal(m, b)
@@ -1075,7 +1078,7 @@ func (m *TaskEventsRequest) Reset() { *m = TaskEventsRequest{} }
func (m *TaskEventsRequest) String() string { return proto.CompactTextString(m) }
func (*TaskEventsRequest) ProtoMessage() {}
func (*TaskEventsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{20}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{20}
}
func (m *TaskEventsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskEventsRequest.Unmarshal(m, b)
@@ -1109,7 +1112,7 @@ func (m *SignalTaskRequest) Reset() { *m = SignalTaskRequest{} }
func (m *SignalTaskRequest) String() string { return proto.CompactTextString(m) }
func (*SignalTaskRequest) ProtoMessage() {}
func (*SignalTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{21}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{21}
}
func (m *SignalTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignalTaskRequest.Unmarshal(m, b)
@@ -1153,7 +1156,7 @@ func (m *SignalTaskResponse) Reset() { *m = SignalTaskResponse{} }
func (m *SignalTaskResponse) String() string { return proto.CompactTextString(m) }
func (*SignalTaskResponse) ProtoMessage() {}
func (*SignalTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{22}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{22}
}
func (m *SignalTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignalTaskResponse.Unmarshal(m, b)
@@ -1190,7 +1193,7 @@ func (m *ExecTaskRequest) Reset() { *m = ExecTaskRequest{} }
func (m *ExecTaskRequest) String() string { return proto.CompactTextString(m) }
func (*ExecTaskRequest) ProtoMessage() {}
func (*ExecTaskRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{23}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{23}
}
func (m *ExecTaskRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecTaskRequest.Unmarshal(m, b)
@@ -1247,7 +1250,7 @@ func (m *ExecTaskResponse) Reset() { *m = ExecTaskResponse{} }
func (m *ExecTaskResponse) String() string { return proto.CompactTextString(m) }
func (*ExecTaskResponse) ProtoMessage() {}
func (*ExecTaskResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{24}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{24}
}
func (m *ExecTaskResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecTaskResponse.Unmarshal(m, b)
@@ -1306,7 +1309,7 @@ func (m *DriverCapabilities) Reset() { *m = DriverCapabilities{} }
func (m *DriverCapabilities) String() string { return proto.CompactTextString(m) }
func (*DriverCapabilities) ProtoMessage() {}
func (*DriverCapabilities) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{25}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{25}
}
func (m *DriverCapabilities) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DriverCapabilities.Unmarshal(m, b)
@@ -1392,7 +1395,7 @@ func (m *TaskConfig) Reset() { *m = TaskConfig{} }
func (m *TaskConfig) String() string { return proto.CompactTextString(m) }
func (*TaskConfig) ProtoMessage() {}
func (*TaskConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{26}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{26}
}
func (m *TaskConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskConfig.Unmarshal(m, b)
@@ -1531,7 +1534,7 @@ func (m *Resources) Reset() { *m = Resources{} }
func (m *Resources) String() string { return proto.CompactTextString(m) }
func (*Resources) ProtoMessage() {}
func (*Resources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{27}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{27}
}
func (m *Resources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Resources.Unmarshal(m, b)
@@ -1578,7 +1581,7 @@ func (m *AllocatedTaskResources) Reset() { *m = AllocatedTaskResources{}
func (m *AllocatedTaskResources) String() string { return proto.CompactTextString(m) }
func (*AllocatedTaskResources) ProtoMessage() {}
func (*AllocatedTaskResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{28}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{28}
}
func (m *AllocatedTaskResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AllocatedTaskResources.Unmarshal(m, b)
@@ -1630,7 +1633,7 @@ func (m *AllocatedCpuResources) Reset() { *m = AllocatedCpuResources{} }
func (m *AllocatedCpuResources) String() string { return proto.CompactTextString(m) }
func (*AllocatedCpuResources) ProtoMessage() {}
func (*AllocatedCpuResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{29}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{29}
}
func (m *AllocatedCpuResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AllocatedCpuResources.Unmarshal(m, b)
@@ -1668,7 +1671,7 @@ func (m *AllocatedMemoryResources) Reset() { *m = AllocatedMemoryResourc
func (m *AllocatedMemoryResources) String() string { return proto.CompactTextString(m) }
func (*AllocatedMemoryResources) ProtoMessage() {}
func (*AllocatedMemoryResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{30}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{30}
}
func (m *AllocatedMemoryResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AllocatedMemoryResources.Unmarshal(m, b)
@@ -1711,7 +1714,7 @@ func (m *NetworkResource) Reset() { *m = NetworkResource{} }
func (m *NetworkResource) String() string { return proto.CompactTextString(m) }
func (*NetworkResource) ProtoMessage() {}
func (*NetworkResource) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{31}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{31}
}
func (m *NetworkResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkResource.Unmarshal(m, b)
@@ -1785,7 +1788,7 @@ func (m *NetworkPort) Reset() { *m = NetworkPort{} }
func (m *NetworkPort) String() string { return proto.CompactTextString(m) }
func (*NetworkPort) ProtoMessage() {}
func (*NetworkPort) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{32}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{32}
}
func (m *NetworkPort) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkPort.Unmarshal(m, b)
@@ -1845,7 +1848,7 @@ func (m *LinuxResources) Reset() { *m = LinuxResources{} }
func (m *LinuxResources) String() string { return proto.CompactTextString(m) }
func (*LinuxResources) ProtoMessage() {}
func (*LinuxResources) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{33}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{33}
}
func (m *LinuxResources) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LinuxResources.Unmarshal(m, b)
@@ -1937,7 +1940,7 @@ func (m *Mount) Reset() { *m = Mount{} }
func (m *Mount) String() string { return proto.CompactTextString(m) }
func (*Mount) ProtoMessage() {}
func (*Mount) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{34}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{34}
}
func (m *Mount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Mount.Unmarshal(m, b)
@@ -2000,7 +2003,7 @@ func (m *Device) Reset() { *m = Device{} }
func (m *Device) String() string { return proto.CompactTextString(m) }
func (*Device) ProtoMessage() {}
func (*Device) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{35}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{35}
}
func (m *Device) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Device.Unmarshal(m, b)
@@ -2061,7 +2064,7 @@ func (m *TaskHandle) Reset() { *m = TaskHandle{} }
func (m *TaskHandle) String() string { return proto.CompactTextString(m) }
func (*TaskHandle) ProtoMessage() {}
func (*TaskHandle) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{36}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{36}
}
func (m *TaskHandle) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskHandle.Unmarshal(m, b)
@@ -2128,7 +2131,7 @@ func (m *NetworkOverride) Reset() { *m = NetworkOverride{} }
func (m *NetworkOverride) String() string { return proto.CompactTextString(m) }
func (*NetworkOverride) ProtoMessage() {}
func (*NetworkOverride) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{37}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{37}
}
func (m *NetworkOverride) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkOverride.Unmarshal(m, b)
@@ -2186,7 +2189,7 @@ func (m *ExitResult) Reset() { *m = ExitResult{} }
func (m *ExitResult) String() string { return proto.CompactTextString(m) }
func (*ExitResult) ProtoMessage() {}
func (*ExitResult) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{38}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{38}
}
func (m *ExitResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExitResult.Unmarshal(m, b)
@@ -2249,7 +2252,7 @@ func (m *TaskStatus) Reset() { *m = TaskStatus{} }
func (m *TaskStatus) String() string { return proto.CompactTextString(m) }
func (*TaskStatus) ProtoMessage() {}
func (*TaskStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{39}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{39}
}
func (m *TaskStatus) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStatus.Unmarshal(m, b)
@@ -2324,7 +2327,7 @@ func (m *TaskDriverStatus) Reset() { *m = TaskDriverStatus{} }
func (m *TaskDriverStatus) String() string { return proto.CompactTextString(m) }
func (*TaskDriverStatus) ProtoMessage() {}
func (*TaskDriverStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{40}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{40}
}
func (m *TaskDriverStatus) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskDriverStatus.Unmarshal(m, b)
@@ -2369,7 +2372,7 @@ func (m *TaskStats) Reset() { *m = TaskStats{} }
func (m *TaskStats) String() string { return proto.CompactTextString(m) }
func (*TaskStats) ProtoMessage() {}
func (*TaskStats) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{41}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{41}
}
func (m *TaskStats) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskStats.Unmarshal(m, b)
@@ -2431,7 +2434,7 @@ func (m *TaskResourceUsage) Reset() { *m = TaskResourceUsage{} }
func (m *TaskResourceUsage) String() string { return proto.CompactTextString(m) }
func (*TaskResourceUsage) ProtoMessage() {}
func (*TaskResourceUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{42}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{42}
}
func (m *TaskResourceUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TaskResourceUsage.Unmarshal(m, b)
@@ -2483,7 +2486,7 @@ func (m *CPUUsage) Reset() { *m = CPUUsage{} }
func (m *CPUUsage) String() string { return proto.CompactTextString(m) }
func (*CPUUsage) ProtoMessage() {}
func (*CPUUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{43}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{43}
}
func (m *CPUUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CPUUsage.Unmarshal(m, b)
@@ -2559,6 +2562,7 @@ type MemoryUsage struct {
KernelUsage uint64 `protobuf:"varint,4,opt,name=kernel_usage,json=kernelUsage,proto3" json:"kernel_usage,omitempty"`
KernelMaxUsage uint64 `protobuf:"varint,5,opt,name=kernel_max_usage,json=kernelMaxUsage,proto3" json:"kernel_max_usage,omitempty"`
Usage uint64 `protobuf:"varint,7,opt,name=usage,proto3" json:"usage,omitempty"`
Swap uint64 `protobuf:"varint,8,opt,name=swap,proto3" json:"swap,omitempty"`
// MeasuredFields indicates which fields were actually sampled
MeasuredFields []MemoryUsage_Fields `protobuf:"varint,6,rep,packed,name=measured_fields,json=measuredFields,proto3,enum=hashicorp.nomad.plugins.drivers.proto.MemoryUsage_Fields" json:"measured_fields,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -2570,7 +2574,7 @@ func (m *MemoryUsage) Reset() { *m = MemoryUsage{} }
func (m *MemoryUsage) String() string { return proto.CompactTextString(m) }
func (*MemoryUsage) ProtoMessage() {}
func (*MemoryUsage) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{44}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{44}
}
func (m *MemoryUsage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MemoryUsage.Unmarshal(m, b)
@@ -2632,6 +2636,13 @@ func (m *MemoryUsage) GetUsage() uint64 {
return 0
}
func (m *MemoryUsage) GetSwap() uint64 {
if m != nil {
return m.Swap
}
return 0
}
func (m *MemoryUsage) GetMeasuredFields() []MemoryUsage_Fields {
if m != nil {
return m.MeasuredFields
@@ -2661,7 +2672,7 @@ func (m *DriverTaskEvent) Reset() { *m = DriverTaskEvent{} }
func (m *DriverTaskEvent) String() string { return proto.CompactTextString(m) }
func (*DriverTaskEvent) ProtoMessage() {}
func (*DriverTaskEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_driver_7505ca5155ee1b5b, []int{45}
return fileDescriptor_driver_8c4ef0bcc46739f6, []int{45}
}
func (m *DriverTaskEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DriverTaskEvent.Unmarshal(m, b)
@@ -3396,196 +3407,198 @@ var _Driver_serviceDesc = grpc.ServiceDesc{
}
func init() {
proto.RegisterFile("plugins/drivers/proto/driver.proto", fileDescriptor_driver_7505ca5155ee1b5b)
proto.RegisterFile("plugins/drivers/proto/driver.proto", fileDescriptor_driver_8c4ef0bcc46739f6)
}
var fileDescriptor_driver_7505ca5155ee1b5b = []byte{
// 2990 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcb, 0x6f, 0x23, 0xc7,
0xd1, 0x17, 0x9f, 0x22, 0x8b, 0x12, 0x35, 0xdb, 0xbb, 0x6b, 0xd3, 0x34, 0xbe, 0xcf, 0xeb, 0x01,
0xfc, 0x41, 0xb0, 0xbd, 0x94, 0x2d, 0xe3, 0xdb, 0x57, 0xfc, 0xa2, 0xc9, 0x59, 0x49, 0x5e, 0x89,
0x52, 0x9a, 0x14, 0xd6, 0x9b, 0xc4, 0x3b, 0x19, 0xcd, 0xf4, 0x92, 0xb3, 0x9a, 0x97, 0x67, 0x7a,
0x64, 0x09, 0x41, 0x90, 0xc0, 0x01, 0x82, 0xe4, 0x10, 0x20, 0x17, 0x23, 0xf7, 0xe4, 0x98, 0xbf,
0x20, 0x09, 0xfc, 0x97, 0x24, 0x97, 0x04, 0x08, 0x90, 0x6b, 0x8e, 0xb9, 0x05, 0xfd, 0x98, 0xe1,
0x50, 0xd2, 0x7a, 0x87, 0x5c, 0x9f, 0x66, 0xba, 0xba, 0xeb, 0xd7, 0xd5, 0x5d, 0xd5, 0x55, 0xd5,
0x5d, 0xa0, 0x06, 0x4e, 0x3c, 0xb6, 0xbd, 0x68, 0xc3, 0x0a, 0xed, 0x13, 0x12, 0x46, 0x1b, 0x41,
0xe8, 0x53, 0x5f, 0xb6, 0x3a, 0xbc, 0x81, 0xde, 0x98, 0x18, 0xd1, 0xc4, 0x36, 0xfd, 0x30, 0xe8,
0x78, 0xbe, 0x6b, 0x58, 0x1d, 0xc9, 0xd3, 0x91, 0x3c, 0x62, 0x58, 0xfb, 0x7f, 0xc7, 0xbe, 0x3f,
0x76, 0x88, 0x40, 0x38, 0x8a, 0x9f, 0x6c, 0x58, 0x71, 0x68, 0x50, 0xdb, 0xf7, 0x64, 0xff, 0x6b,
0xe7, 0xfb, 0xa9, 0xed, 0x92, 0x88, 0x1a, 0x6e, 0x20, 0x07, 0x7c, 0x3c, 0xb6, 0xe9, 0x24, 0x3e,
0xea, 0x98, 0xbe, 0xbb, 0x91, 0x4e, 0xb9, 0xc1, 0xa7, 0xdc, 0x48, 0xc4, 0x8c, 0x26, 0x46, 0x48,
0xac, 0x8d, 0x89, 0xe9, 0x44, 0x01, 0x31, 0xd9, 0x57, 0x67, 0x3f, 0x12, 0x61, 0x2b, 0x3f, 0x42,
0x44, 0xc3, 0xd8, 0xa4, 0xc9, 0x7a, 0x0d, 0x4a, 0x43, 0xfb, 0x28, 0xa6, 0x44, 0x00, 0xa9, 0xaf,
0xc0, 0xcb, 0x23, 0x23, 0x3a, 0xee, 0xf9, 0xde, 0x13, 0x7b, 0x3c, 0x34, 0x27, 0xc4, 0x35, 0x30,
0xf9, 0x22, 0x26, 0x11, 0x55, 0x7f, 0x04, 0xad, 0x8b, 0x5d, 0x51, 0xe0, 0x7b, 0x11, 0x41, 0x1f,
0x43, 0x99, 0x49, 0xd3, 0x2a, 0xdc, 0x28, 0xac, 0x37, 0x36, 0xdf, 0xee, 0x3c, 0x6b, 0xe3, 0x84,
0x0c, 0x1d, 0xb9, 0x8a, 0xce, 0x30, 0x20, 0x26, 0xe6, 0x9c, 0xea, 0x75, 0xb8, 0xda, 0x33, 0x02,
0xe3, 0xc8, 0x76, 0x6c, 0x6a, 0x93, 0x28, 0x99, 0x34, 0x86, 0x6b, 0xb3, 0x64, 0x39, 0xe1, 0xe7,
0xb0, 0x62, 0x66, 0xe8, 0x72, 0xe2, 0xbb, 0x9d, 0x5c, 0x1a, 0xeb, 0xf4, 0x79, 0x6b, 0x06, 0x78,
0x06, 0x4e, 0xbd, 0x06, 0xe8, 0xbe, 0xed, 0x8d, 0x49, 0x18, 0x84, 0xb6, 0x47, 0x13, 0x61, 0xbe,
0x29, 0xc1, 0xd5, 0x19, 0xb2, 0x14, 0xe6, 0x29, 0x40, 0xba, 0x8f, 0x4c, 0x94, 0xd2, 0x7a, 0x63,
0xf3, 0xd3, 0x9c, 0xa2, 0x5c, 0x82, 0xd7, 0xe9, 0xa6, 0x60, 0x9a, 0x47, 0xc3, 0x33, 0x9c, 0x41,
0x47, 0x8f, 0xa1, 0x3a, 0x21, 0x86, 0x43, 0x27, 0xad, 0xe2, 0x8d, 0xc2, 0x7a, 0x73, 0xf3, 0xfe,
0x0b, 0xcc, 0xb3, 0xcd, 0x81, 0x86, 0xd4, 0xa0, 0x04, 0x4b, 0x54, 0x74, 0x13, 0x90, 0xf8, 0xd3,
0x2d, 0x12, 0x99, 0xa1, 0x1d, 0x30, 0x43, 0x6e, 0x95, 0x6e, 0x14, 0xd6, 0xeb, 0xf8, 0x8a, 0xe8,
0xe9, 0x4f, 0x3b, 0xda, 0x01, 0xac, 0x9d, 0x93, 0x16, 0x29, 0x50, 0x3a, 0x26, 0x67, 0x5c, 0x23,
0x75, 0xcc, 0x7e, 0xd1, 0x16, 0x54, 0x4e, 0x0c, 0x27, 0x26, 0x5c, 0xe4, 0xc6, 0xe6, 0xbb, 0xcf,
0x33, 0x0f, 0x69, 0xa2, 0xd3, 0x7d, 0xc0, 0x82, 0xff, 0x5e, 0xf1, 0x4e, 0x41, 0xbd, 0x0b, 0x8d,
0x8c, 0xdc, 0xa8, 0x09, 0x70, 0x38, 0xe8, 0x6b, 0x23, 0xad, 0x37, 0xd2, 0xfa, 0xca, 0x12, 0x5a,
0x85, 0xfa, 0xe1, 0x60, 0x5b, 0xeb, 0xee, 0x8e, 0xb6, 0x1f, 0x29, 0x05, 0xd4, 0x80, 0xe5, 0xa4,
0x51, 0x54, 0x4f, 0x01, 0x61, 0x62, 0xfa, 0x27, 0x24, 0x64, 0x86, 0x2c, 0xb5, 0x8a, 0x5e, 0x86,
0x65, 0x6a, 0x44, 0xc7, 0xba, 0x6d, 0x49, 0x99, 0xab, 0xac, 0xb9, 0x63, 0xa1, 0x1d, 0xa8, 0x4e,
0x0c, 0xcf, 0x72, 0x9e, 0x2f, 0xf7, 0xec, 0x56, 0x33, 0xf0, 0x6d, 0xce, 0x88, 0x25, 0x00, 0xb3,
0xee, 0x99, 0x99, 0x85, 0x02, 0xd4, 0x47, 0xa0, 0x0c, 0xa9, 0x11, 0xd2, 0xac, 0x38, 0x1a, 0x94,
0xd9, 0xfc, 0xd2, 0xa2, 0xe7, 0x99, 0x53, 0x9c, 0x4c, 0xcc, 0xd9, 0xd5, 0x7f, 0x17, 0xe1, 0x4a,
0x06, 0x5b, 0x5a, 0xea, 0x43, 0xa8, 0x86, 0x24, 0x8a, 0x1d, 0xca, 0xe1, 0x9b, 0x9b, 0x1f, 0xe5,
0x84, 0xbf, 0x80, 0xd4, 0xc1, 0x1c, 0x06, 0x4b, 0x38, 0xb4, 0x0e, 0x8a, 0xe0, 0xd0, 0x49, 0x18,
0xfa, 0xa1, 0xee, 0x46, 0x63, 0xbe, 0x6b, 0x75, 0xdc, 0x14, 0x74, 0x8d, 0x91, 0xf7, 0xa2, 0x71,
0x66, 0x57, 0x4b, 0x2f, 0xb8, 0xab, 0xc8, 0x00, 0xc5, 0x23, 0xf4, 0x4b, 0x3f, 0x3c, 0xd6, 0xd9,
0xd6, 0x86, 0xb6, 0x45, 0x5a, 0x65, 0x0e, 0x7a, 0x2b, 0x27, 0xe8, 0x40, 0xb0, 0xef, 0x4b, 0x6e,
0xbc, 0xe6, 0xcd, 0x12, 0xd4, 0xb7, 0xa0, 0x2a, 0x56, 0xca, 0x2c, 0x69, 0x78, 0xd8, 0xeb, 0x69,
0xc3, 0xa1, 0xb2, 0x84, 0xea, 0x50, 0xc1, 0xda, 0x08, 0x33, 0x0b, 0xab, 0x43, 0xe5, 0x7e, 0x77,
0xd4, 0xdd, 0x55, 0x8a, 0xea, 0x9b, 0xb0, 0xf6, 0xd0, 0xb0, 0x69, 0x1e, 0xe3, 0x52, 0x7d, 0x50,
0xa6, 0x63, 0xa5, 0x76, 0x76, 0x66, 0xb4, 0x93, 0x7f, 0x6b, 0xb4, 0x53, 0x9b, 0x9e, 0xd3, 0x87,
0x02, 0x25, 0x12, 0x86, 0x52, 0x05, 0xec, 0x57, 0xfd, 0x12, 0xd6, 0x86, 0xd4, 0x0f, 0x72, 0x59,
0xfe, 0x7b, 0xb0, 0xcc, 0x62, 0x94, 0x1f, 0x53, 0x69, 0xfa, 0xaf, 0x74, 0x44, 0x0c, 0xeb, 0x24,
0x31, 0xac, 0xd3, 0x97, 0x31, 0x0e, 0x27, 0x23, 0xd1, 0x4b, 0x50, 0x8d, 0xec, 0xb1, 0x67, 0x38,
0xd2, 0x5b, 0xc8, 0x96, 0x8a, 0x98, 0x91, 0x27, 0x13, 0x4b, 0xc3, 0xef, 0x01, 0xea, 0x93, 0x88,
0x86, 0xfe, 0x59, 0x2e, 0x79, 0xae, 0x41, 0xe5, 0x89, 0x1f, 0x9a, 0xe2, 0x20, 0xd6, 0xb0, 0x68,
0xb0, 0x43, 0x35, 0x03, 0x22, 0xb1, 0x6f, 0x02, 0xda, 0xf1, 0x58, 0x4c, 0xc9, 0xa7, 0x88, 0xdf,
0x16, 0xe1, 0xea, 0xcc, 0x78, 0xa9, 0x8c, 0xc5, 0xcf, 0x21, 0x73, 0x4c, 0x71, 0x24, 0xce, 0x21,
0xda, 0x87, 0xaa, 0x18, 0x21, 0x77, 0xf2, 0xf6, 0x1c, 0x40, 0x22, 0x4c, 0x49, 0x38, 0x09, 0x73,
0xa9, 0xd1, 0x97, 0xbe, 0x5b, 0xa3, 0xff, 0x12, 0x94, 0x64, 0x1d, 0xd1, 0x73, 0x75, 0xf3, 0x29,
0x5c, 0x35, 0x7d, 0xc7, 0x21, 0x26, 0xb3, 0x06, 0xdd, 0xf6, 0x28, 0x09, 0x4f, 0x0c, 0xe7, 0xf9,
0x76, 0x83, 0xa6, 0x5c, 0x3b, 0x92, 0x49, 0xfd, 0x21, 0x5c, 0xc9, 0x4c, 0x2c, 0x15, 0x71, 0x1f,
0x2a, 0x11, 0x23, 0x48, 0x4d, 0xbc, 0x33, 0xa7, 0x26, 0x22, 0x2c, 0xd8, 0xd5, 0xab, 0x02, 0x5c,
0x3b, 0x21, 0x5e, 0xba, 0x2c, 0xb5, 0x0f, 0x57, 0x86, 0xdc, 0x4c, 0x73, 0xd9, 0xe1, 0xd4, 0xc4,
0x8b, 0x33, 0x26, 0x7e, 0x0d, 0x50, 0x16, 0x45, 0x1a, 0xe2, 0x19, 0xac, 0x69, 0xa7, 0xc4, 0xcc,
0x85, 0xdc, 0x82, 0x65, 0xd3, 0x77, 0x5d, 0xc3, 0xb3, 0x5a, 0xc5, 0x1b, 0xa5, 0xf5, 0x3a, 0x4e,
0x9a, 0xd9, 0xb3, 0x58, 0xca, 0x7b, 0x16, 0xd5, 0xdf, 0x14, 0x40, 0x99, 0xce, 0x2d, 0x37, 0x92,
0x49, 0x4f, 0x2d, 0x06, 0xc4, 0xe6, 0x5e, 0xc1, 0xb2, 0x25, 0xe9, 0x89, 0xbb, 0x10, 0x74, 0x12,
0x86, 0x19, 0x77, 0x54, 0x7a, 0x41, 0x77, 0xa4, 0xfe, 0xb3, 0x00, 0xe8, 0x62, 0xd2, 0x85, 0x5e,
0x87, 0x95, 0x88, 0x78, 0x96, 0x2e, 0xb6, 0x51, 0x68, 0xb8, 0x86, 0x1b, 0x8c, 0x26, 0xf6, 0x33,
0x42, 0x08, 0xca, 0xe4, 0x94, 0x98, 0xf2, 0xe4, 0xf3, 0x7f, 0x34, 0x81, 0x95, 0x27, 0x91, 0x6e,
0x47, 0xbe, 0x63, 0xa4, 0xd9, 0x49, 0x73, 0x53, 0x5b, 0x38, 0xf9, 0xeb, 0xdc, 0x1f, 0xee, 0x24,
0x60, 0xb8, 0xf1, 0x24, 0x4a, 0x1b, 0x6a, 0x07, 0x1a, 0x99, 0x3e, 0x54, 0x83, 0xf2, 0x60, 0x7f,
0xa0, 0x29, 0x4b, 0x08, 0xa0, 0xda, 0xdb, 0xc6, 0xfb, 0xfb, 0x23, 0x11, 0x01, 0x76, 0xf6, 0xba,
0x5b, 0x9a, 0x52, 0x54, 0xff, 0x54, 0x05, 0x98, 0x86, 0x62, 0xd4, 0x84, 0x62, 0xaa, 0xe9, 0xa2,
0x6d, 0xb1, 0xc5, 0x78, 0x86, 0x4b, 0xa4, 0xf5, 0xf0, 0x7f, 0xb4, 0x09, 0xd7, 0xdd, 0x68, 0x1c,
0x18, 0xe6, 0xb1, 0x2e, 0x23, 0xa8, 0xc9, 0x99, 0xf9, 0xaa, 0x56, 0xf0, 0x55, 0xd9, 0x29, 0xa5,
0x16, 0xb8, 0xbb, 0x50, 0x22, 0xde, 0x49, 0xab, 0xcc, 0x33, 0xcd, 0x7b, 0x73, 0xa7, 0x08, 0x1d,
0xcd, 0x3b, 0x11, 0x99, 0x25, 0x83, 0x41, 0x3a, 0x80, 0x45, 0x4e, 0x6c, 0x93, 0xe8, 0x0c, 0xb4,
0xc2, 0x41, 0x3f, 0x9e, 0x1f, 0xb4, 0xcf, 0x31, 0x52, 0xe8, 0xba, 0x95, 0xb4, 0xd1, 0x00, 0xea,
0x21, 0x89, 0xfc, 0x38, 0x34, 0x49, 0xd4, 0xaa, 0xce, 0x75, 0x8a, 0x71, 0xc2, 0x87, 0xa7, 0x10,
0xa8, 0x0f, 0x55, 0xd7, 0x8f, 0x3d, 0x1a, 0xb5, 0x96, 0xb9, 0xb0, 0x6f, 0xe7, 0x04, 0xdb, 0x63,
0x4c, 0x58, 0xf2, 0xa2, 0x2d, 0x58, 0x16, 0x22, 0x46, 0xad, 0x1a, 0x87, 0xb9, 0x99, 0xd7, 0x80,
0x38, 0x17, 0x4e, 0xb8, 0x99, 0x56, 0xe3, 0x88, 0x84, 0xad, 0xba, 0xd0, 0x2a, 0xfb, 0x47, 0xaf,
0x42, 0xdd, 0x70, 0x1c, 0xdf, 0xd4, 0x2d, 0x3b, 0x6c, 0x01, 0xef, 0xa8, 0x71, 0x42, 0xdf, 0x0e,
0xd1, 0x6b, 0xd0, 0x10, 0x47, 0x4f, 0x0f, 0x0c, 0x3a, 0x69, 0x35, 0x78, 0x37, 0x08, 0xd2, 0x81,
0x41, 0x27, 0x72, 0x00, 0x09, 0x43, 0x31, 0x60, 0x25, 0x1d, 0x40, 0xc2, 0x90, 0x0f, 0xf8, 0x3f,
0x58, 0xe3, 0x7e, 0x64, 0x1c, 0xfa, 0x71, 0xa0, 0x73, 0x9b, 0x5a, 0xe5, 0x83, 0x56, 0x19, 0x79,
0x8b, 0x51, 0x07, 0xcc, 0xb8, 0x5e, 0x81, 0xda, 0x53, 0xff, 0x48, 0x0c, 0x68, 0xf2, 0x01, 0xcb,
0x4f, 0xfd, 0xa3, 0xa4, 0x4b, 0x48, 0x68, 0x5b, 0xad, 0x35, 0xd1, 0xc5, 0xdb, 0x3b, 0x56, 0xfb,
0x16, 0xd4, 0x12, 0x35, 0x5e, 0x92, 0xcd, 0x5f, 0xcb, 0x66, 0xf3, 0xf5, 0x4c, 0x6a, 0xde, 0x7e,
0x1f, 0x9a, 0xb3, 0x46, 0x30, 0x0f, 0xb7, 0xfa, 0xd7, 0x02, 0xd4, 0x53, 0x75, 0x23, 0x0f, 0xae,
0x72, 0x71, 0x0c, 0x4a, 0x2c, 0x7d, 0x6a, 0x3d, 0x22, 0x06, 0x7c, 0x90, 0x53, 0x53, 0xdd, 0x04,
0x41, 0xfa, 0x41, 0x69, 0x4a, 0x28, 0x45, 0x9e, 0xce, 0xf7, 0x18, 0xd6, 0x1c, 0xdb, 0x8b, 0x4f,
0x33, 0x73, 0x89, 0x10, 0xf6, 0xff, 0x39, 0xe7, 0xda, 0x65, 0xdc, 0xd3, 0x39, 0x9a, 0xce, 0x4c,
0x5b, 0xfd, 0xba, 0x08, 0x2f, 0x5d, 0x2e, 0x0e, 0x1a, 0x40, 0xc9, 0x0c, 0x62, 0xb9, 0xb4, 0xf7,
0xe7, 0x5d, 0x5a, 0x2f, 0x88, 0xa7, 0xb3, 0x32, 0x20, 0x96, 0xe4, 0xbb, 0xc4, 0xf5, 0xc3, 0x33,
0xb9, 0x82, 0x8f, 0xe6, 0x85, 0xdc, 0xe3, 0xdc, 0x53, 0x54, 0x09, 0x87, 0x30, 0xd4, 0x64, 0xaa,
0x10, 0x49, 0x37, 0x31, 0x67, 0xca, 0x91, 0x40, 0xe2, 0x14, 0x47, 0xbd, 0x05, 0xd7, 0x2f, 0x5d,
0x0a, 0xfa, 0x1f, 0x00, 0x33, 0x88, 0x75, 0x7e, 0x25, 0x14, 0x7a, 0x2f, 0xe1, 0xba, 0x19, 0xc4,
0x43, 0x4e, 0x50, 0x6f, 0x43, 0xeb, 0x59, 0xf2, 0xb2, 0xc3, 0x27, 0x24, 0xd6, 0xdd, 0x23, 0xbe,
0x07, 0x25, 0x5c, 0x13, 0x84, 0xbd, 0x23, 0xf5, 0x77, 0x45, 0x58, 0x3b, 0x27, 0x0e, 0x8b, 0x80,
0xe2, 0x30, 0x27, 0x51, 0x59, 0xb4, 0xd8, 0xc9, 0x36, 0x6d, 0x2b, 0x49, 0xa3, 0xf9, 0x3f, 0xf7,
0xe9, 0x81, 0x4c, 0x71, 0x8b, 0x76, 0xc0, 0x0c, 0xda, 0x3d, 0xb2, 0x69, 0xc4, 0x6f, 0x1e, 0x15,
0x2c, 0x1a, 0xe8, 0x11, 0x34, 0x43, 0x12, 0x91, 0xf0, 0x84, 0x58, 0x7a, 0xe0, 0x87, 0x34, 0xd9,
0xb0, 0xcd, 0xf9, 0x36, 0xec, 0xc0, 0x0f, 0x29, 0x5e, 0x4d, 0x90, 0x58, 0x2b, 0x42, 0x0f, 0x61,
0xd5, 0x3a, 0xf3, 0x0c, 0xd7, 0x36, 0x25, 0x72, 0x75, 0x61, 0xe4, 0x15, 0x09, 0xc4, 0x81, 0xd9,
0xcd, 0x3a, 0xd3, 0xc9, 0x16, 0xe6, 0x18, 0x47, 0xc4, 0x91, 0x7b, 0x22, 0x1a, 0xb3, 0xe7, 0xb7,
0x22, 0xcf, 0xaf, 0xfa, 0x87, 0x22, 0x34, 0x67, 0x0f, 0x40, 0xa2, 0xbf, 0x80, 0x84, 0xb6, 0x6f,
0x65, 0xf4, 0x77, 0xc0, 0x09, 0x4c, 0x47, 0xac, 0xfb, 0x8b, 0xd8, 0xa7, 0x46, 0xa2, 0x23, 0x33,
0x88, 0xbf, 0xcf, 0xda, 0xe7, 0x74, 0x5f, 0x3a, 0xa7, 0x7b, 0xf4, 0x36, 0x20, 0xa9, 0x5f, 0xc7,
0x76, 0x6d, 0xaa, 0x1f, 0x9d, 0x51, 0x22, 0xf6, 0xbf, 0x84, 0x15, 0xd1, 0xb3, 0xcb, 0x3a, 0x3e,
0x61, 0x74, 0xa4, 0xc2, 0xaa, 0xef, 0xbb, 0x7a, 0x64, 0xfa, 0x21, 0xd1, 0x0d, 0xeb, 0x69, 0xab,
0xc2, 0x07, 0x36, 0x7c, 0xdf, 0x1d, 0x32, 0x5a, 0xd7, 0x7a, 0xca, 0x1c, 0xae, 0x19, 0xc4, 0x11,
0xa1, 0x3a, 0xfb, 0xf0, 0x18, 0x55, 0xc7, 0x20, 0x48, 0xbd, 0x20, 0x8e, 0x32, 0x03, 0x5c, 0xe2,
0xb2, 0xb8, 0x93, 0x19, 0xb0, 0x47, 0x5c, 0x36, 0xcb, 0xca, 0x01, 0x09, 0x4d, 0xe2, 0xd1, 0x91,
0x6d, 0x1e, 0xb3, 0x90, 0x52, 0x58, 0x2f, 0xe0, 0x19, 0x9a, 0xfa, 0x39, 0x54, 0x78, 0x08, 0x62,
0x8b, 0xe7, 0xee, 0x9b, 0x7b, 0x77, 0xb1, 0xbd, 0x35, 0x46, 0xe0, 0xbe, 0xfd, 0x55, 0xa8, 0x4f,
0xfc, 0x48, 0xc6, 0x06, 0x61, 0x79, 0x35, 0x46, 0xe0, 0x9d, 0x6d, 0xa8, 0x85, 0xc4, 0xb0, 0x7c,
0xcf, 0x39, 0xe3, 0xfb, 0x52, 0xc3, 0x69, 0x5b, 0xfd, 0x02, 0xaa, 0xc2, 0xfd, 0xbe, 0x00, 0xfe,
0x4d, 0x40, 0xa6, 0x08, 0x2a, 0x01, 0x09, 0x5d, 0x3b, 0x8a, 0x6c, 0xdf, 0x8b, 0x92, 0xe7, 0x1f,
0xd1, 0x73, 0x30, 0xed, 0x50, 0xff, 0x56, 0x10, 0xf9, 0x8e, 0xb8, 0x98, 0xb3, 0x2c, 0x96, 0x59,
0x1a, 0xcb, 0xc9, 0x0a, 0xdc, 0x3c, 0x92, 0x26, 0xcb, 0x25, 0x65, 0x5a, 0x53, 0x5c, 0xf4, 0x5d,
0x43, 0x02, 0x24, 0xf7, 0x01, 0x22, 0xd3, 0xbe, 0x79, 0xef, 0x03, 0x44, 0xdc, 0x07, 0x08, 0x4b,
0x3e, 0x65, 0xc2, 0x25, 0xe0, 0xca, 0x3c, 0xdf, 0x6a, 0x58, 0xe9, 0xa5, 0x8b, 0xa8, 0xff, 0x2a,
0xa4, 0xbe, 0x22, 0xb9, 0x1c, 0xa1, 0xc7, 0x50, 0x63, 0xc7, 0x4e, 0x77, 0x8d, 0x40, 0x3e, 0xf5,
0xf5, 0x16, 0xbb, 0x77, 0x75, 0xd8, 0x29, 0xdb, 0x33, 0x02, 0x91, 0x2e, 0x2d, 0x07, 0xa2, 0xc5,
0x7c, 0x8e, 0x61, 0x4d, 0x7d, 0x0e, 0xfb, 0x47, 0x6f, 0x40, 0xd3, 0x88, 0xa9, 0xaf, 0x1b, 0xd6,
0x09, 0x09, 0xa9, 0x1d, 0x11, 0xa9, 0xfb, 0x55, 0x46, 0xed, 0x26, 0xc4, 0xf6, 0x3d, 0x58, 0xc9,
0x62, 0x3e, 0x2f, 0xfa, 0x56, 0xb2, 0xd1, 0xf7, 0xc7, 0x00, 0xd3, 0xbc, 0x9d, 0xd9, 0x08, 0x39,
0xb5, 0xa9, 0x6e, 0xfa, 0x16, 0x91, 0xaa, 0xac, 0x31, 0x42, 0xcf, 0xb7, 0xc8, 0xb9, 0x5b, 0x50,
0x25, 0xb9, 0x05, 0xb1, 0x53, 0xcb, 0x0e, 0xda, 0xb1, 0xed, 0x38, 0xc4, 0x92, 0x12, 0xd6, 0x7d,
0xdf, 0x7d, 0xc0, 0x09, 0xea, 0x37, 0x45, 0x61, 0x2b, 0xe2, 0x3e, 0x9b, 0x2b, 0x37, 0xfe, 0xae,
0x54, 0x7d, 0x17, 0x20, 0xa2, 0x46, 0xc8, 0x52, 0x09, 0x83, 0xca, 0x27, 0xa2, 0xf6, 0x85, 0x6b,
0xd4, 0x28, 0x79, 0x96, 0xc7, 0x75, 0x39, 0xba, 0x4b, 0xd1, 0x07, 0xb0, 0x62, 0xfa, 0x6e, 0xe0,
0x10, 0xc9, 0x5c, 0x79, 0x2e, 0x73, 0x23, 0x1d, 0xdf, 0xa5, 0x99, 0x3b, 0x54, 0xf5, 0x45, 0xef,
0x50, 0x7f, 0x2e, 0x88, 0x6b, 0x79, 0xf6, 0x55, 0x00, 0x8d, 0x2f, 0x79, 0x7a, 0xde, 0x5a, 0xf0,
0x89, 0xe1, 0xdb, 0xde, 0x9d, 0xdb, 0x1f, 0xe4, 0x79, 0xe8, 0x7d, 0x76, 0x72, 0xf7, 0x97, 0x12,
0xd4, 0xd3, 0x1b, 0xf9, 0x05, 0xdd, 0xdf, 0x81, 0x7a, 0x5a, 0x13, 0x91, 0x0e, 0xe2, 0x5b, 0xd5,
0x93, 0x0e, 0x46, 0x4f, 0x00, 0x19, 0xe3, 0x71, 0x9a, 0xb4, 0xe9, 0x71, 0x64, 0x8c, 0x93, 0xf7,
0x90, 0x3b, 0x73, 0xec, 0x43, 0x12, 0xb7, 0x0e, 0x19, 0x3f, 0x56, 0x8c, 0xf1, 0x78, 0x86, 0x82,
0x7e, 0x02, 0xd7, 0x67, 0xe7, 0xd0, 0x8f, 0xce, 0xf4, 0xc0, 0xb6, 0xe4, 0x1d, 0x6c, 0x7b, 0xde,
0x47, 0x89, 0xce, 0x0c, 0xfc, 0x27, 0x67, 0x07, 0xb6, 0x25, 0xf6, 0x1c, 0x85, 0x17, 0x3a, 0xda,
0x3f, 0x83, 0x97, 0x9f, 0x31, 0xfc, 0x12, 0x1d, 0x0c, 0x66, 0x1f, 0xdb, 0x17, 0xdf, 0x84, 0x8c,
0xf6, 0x7e, 0x5f, 0x10, 0x6f, 0x27, 0xb3, 0x7b, 0xd2, 0xcd, 0xe6, 0xad, 0x1b, 0x39, 0xe7, 0xe9,
0x1d, 0x1c, 0x0a, 0x78, 0x9e, 0xaa, 0x7e, 0x7a, 0x2e, 0x55, 0xcd, 0x9b, 0xc4, 0x88, 0x8c, 0x4f,
0x00, 0x49, 0x04, 0xf5, 0x8f, 0x25, 0xa8, 0x25, 0xe8, 0xfc, 0x06, 0x75, 0x16, 0x51, 0xe2, 0xea,
0x6e, 0xe2, 0xc2, 0x0a, 0x18, 0x04, 0x69, 0x8f, 0x39, 0xb1, 0x57, 0xa1, 0xce, 0x2e, 0x6a, 0xa2,
0xbb, 0xc8, 0xbb, 0x6b, 0x8c, 0xc0, 0x3b, 0x5f, 0x83, 0x06, 0xf5, 0xa9, 0xe1, 0xe8, 0x94, 0xc7,
0xf2, 0x92, 0xe0, 0xe6, 0x24, 0x1e, 0xc9, 0xd1, 0x5b, 0x70, 0x85, 0x4e, 0x42, 0x9f, 0x52, 0x87,
0xe5, 0x77, 0x3c, 0xa3, 0x11, 0x09, 0x48, 0x19, 0x2b, 0x69, 0x87, 0xc8, 0x74, 0x22, 0xe6, 0xbd,
0xa7, 0x83, 0x99, 0xe9, 0x72, 0x27, 0x52, 0xc6, 0xab, 0x29, 0x95, 0x99, 0x36, 0x0b, 0x9e, 0x81,
0xc8, 0x16, 0xb8, 0xaf, 0x28, 0xe0, 0xa4, 0x89, 0x74, 0x58, 0x73, 0x89, 0x11, 0xc5, 0x21, 0xb1,
0xf4, 0x27, 0x36, 0x71, 0x2c, 0x71, 0xf1, 0x6d, 0xe6, 0x4e, 0xbf, 0x93, 0x6d, 0xe9, 0xdc, 0xe7,
0xdc, 0xb8, 0x99, 0xc0, 0x89, 0x36, 0xcb, 0x1c, 0xc4, 0x1f, 0x5a, 0x83, 0xc6, 0xf0, 0xd1, 0x70,
0xa4, 0xed, 0xe9, 0x7b, 0xfb, 0x7d, 0x4d, 0xd6, 0x53, 0x86, 0x1a, 0x16, 0xcd, 0x02, 0xeb, 0x1f,
0xed, 0x8f, 0xba, 0xbb, 0xfa, 0x68, 0xa7, 0xf7, 0x60, 0xa8, 0x14, 0xd1, 0x75, 0xb8, 0x32, 0xda,
0xc6, 0xfb, 0xa3, 0xd1, 0xae, 0xd6, 0xd7, 0x0f, 0x34, 0xbc, 0xb3, 0xdf, 0x1f, 0x2a, 0x25, 0x84,
0xa0, 0x39, 0x25, 0x8f, 0x76, 0xf6, 0x34, 0xa5, 0x8c, 0x1a, 0xb0, 0x7c, 0xa0, 0xe1, 0x9e, 0x36,
0x18, 0x29, 0x15, 0xf5, 0x3f, 0x45, 0x68, 0x64, 0xb4, 0xc8, 0x0c, 0x39, 0x8c, 0x44, 0x9e, 0x5f,
0xc6, 0xec, 0x97, 0x39, 0x13, 0xd3, 0x30, 0x27, 0x42, 0x3b, 0x65, 0x2c, 0x1a, 0x3c, 0xb7, 0x37,
0x4e, 0x33, 0xe7, 0xbc, 0x8c, 0x6b, 0xae, 0x71, 0x2a, 0x40, 0x5e, 0x87, 0x95, 0x63, 0x12, 0x7a,
0xc4, 0x91, 0xfd, 0x42, 0x23, 0x0d, 0x41, 0x13, 0x43, 0xd6, 0x41, 0x91, 0x43, 0xa6, 0x30, 0x42,
0x1d, 0x4d, 0x41, 0xdf, 0x4b, 0xc0, 0xae, 0x41, 0x45, 0x74, 0x2f, 0x8b, 0xf9, 0x79, 0x03, 0x1d,
0x5d, 0xd4, 0x45, 0x95, 0xeb, 0xe2, 0xee, 0xfc, 0xa6, 0xfb, 0x2c, 0x75, 0x3c, 0x4e, 0xd5, 0xb1,
0x0c, 0x25, 0x9c, 0x14, 0x1c, 0x7a, 0xdd, 0xde, 0x36, 0x53, 0xc1, 0x2a, 0xd4, 0xf7, 0xba, 0x9f,
0xe9, 0x87, 0x43, 0xfe, 0xe4, 0x84, 0x14, 0x58, 0x79, 0xa0, 0xe1, 0x81, 0xb6, 0x2b, 0x29, 0x25,
0x74, 0x0d, 0x14, 0x49, 0x99, 0x8e, 0x2b, 0x33, 0x04, 0xf1, 0x5b, 0x51, 0xff, 0x5e, 0x84, 0x35,
0xe1, 0xf8, 0xd3, 0x07, 0xd1, 0x67, 0xbf, 0x4c, 0x66, 0xdf, 0x09, 0x8a, 0x33, 0xef, 0x04, 0x69,
0x9a, 0xc9, 0xe3, 0x76, 0x69, 0x9a, 0x66, 0xf2, 0xf7, 0x85, 0x19, 0x9f, 0x5e, 0x9e, 0xc7, 0xa7,
0xb7, 0x60, 0xd9, 0x25, 0x51, 0xaa, 0x99, 0x3a, 0x4e, 0x9a, 0xc8, 0x86, 0x86, 0xe1, 0x79, 0x3e,
0xe5, 0xaf, 0x71, 0xc9, 0xc5, 0x67, 0x6b, 0xae, 0x77, 0xbf, 0x74, 0xc5, 0x9d, 0xee, 0x14, 0x49,
0xb8, 0xde, 0x2c, 0x76, 0xfb, 0x43, 0x50, 0xce, 0x0f, 0x98, 0x27, 0xe0, 0xbd, 0xf9, 0xee, 0x34,
0xde, 0x11, 0x66, 0xf9, 0x87, 0x83, 0x07, 0x83, 0xfd, 0x87, 0x03, 0x65, 0x89, 0x35, 0xf0, 0xe1,
0x60, 0xb0, 0x33, 0xd8, 0x52, 0x0a, 0x08, 0xa0, 0xaa, 0x7d, 0xb6, 0x33, 0xd2, 0xfa, 0x4a, 0x71,
0xf3, 0x1f, 0xab, 0x50, 0x15, 0x42, 0xa2, 0xaf, 0x65, 0xac, 0xcf, 0x16, 0xdb, 0xd1, 0x87, 0x73,
0xe7, 0xcc, 0x33, 0x05, 0xfc, 0xf6, 0x47, 0x0b, 0xf3, 0xcb, 0x07, 0xed, 0x25, 0xf4, 0xeb, 0x02,
0xac, 0xcc, 0xbc, 0xe0, 0xe6, 0x7d, 0x7c, 0xbc, 0xa4, 0xb6, 0xdf, 0xfe, 0xde, 0x42, 0xbc, 0xa9,
0x2c, 0xbf, 0x2a, 0x40, 0x23, 0x53, 0xd5, 0x46, 0x77, 0x17, 0xa9, 0x84, 0x0b, 0x49, 0xee, 0x2d,
0x5e, 0x44, 0x57, 0x97, 0xde, 0x29, 0xa0, 0x5f, 0x16, 0xa0, 0x91, 0xa9, 0xef, 0xe6, 0x16, 0xe5,
0x62, 0x35, 0x3a, 0xb7, 0x28, 0x97, 0x95, 0x93, 0x97, 0xd0, 0xcf, 0x0b, 0x50, 0x4f, 0x6b, 0xb5,
0xe8, 0xf6, 0xfc, 0xd5, 0x5d, 0x21, 0xc4, 0x9d, 0x45, 0xcb, 0xc2, 0xea, 0x12, 0xfa, 0x29, 0xd4,
0x92, 0xc2, 0x26, 0xca, 0x1b, 0x9f, 0xce, 0x55, 0x4d, 0xdb, 0xb7, 0xe7, 0xe6, 0xcb, 0x4e, 0x9f,
0x54, 0x1b, 0x73, 0x4f, 0x7f, 0xae, 0x2e, 0xda, 0xbe, 0x3d, 0x37, 0x5f, 0x3a, 0x3d, 0xb3, 0x84,
0x4c, 0x51, 0x32, 0xb7, 0x25, 0x5c, 0xac, 0x86, 0xe6, 0xb6, 0x84, 0xcb, 0x6a, 0xa0, 0x42, 0x90,
0x4c, 0x59, 0x33, 0xb7, 0x20, 0x17, 0x4b, 0xa7, 0xb9, 0x05, 0xb9, 0xa4, 0x8a, 0xaa, 0x2e, 0xa1,
0xaf, 0x0a, 0xd9, 0xcc, 0xff, 0xf6, 0xdc, 0xd5, 0xbb, 0x39, 0x4d, 0xf2, 0x42, 0xfd, 0x90, 0x1f,
0xd0, 0xaf, 0xe4, 0x3b, 0x85, 0x28, 0xfe, 0xa1, 0x79, 0xc0, 0x66, 0xea, 0x85, 0xed, 0x5b, 0x8b,
0x05, 0x1b, 0x2e, 0xc4, 0x2f, 0x0a, 0x00, 0xd3, 0x32, 0x61, 0x6e, 0x21, 0x2e, 0xd4, 0x27, 0xdb,
0x77, 0x17, 0xe0, 0xcc, 0x1e, 0x90, 0xa4, 0x32, 0x98, 0xfb, 0x80, 0x9c, 0x2b, 0x63, 0xe6, 0x3e,
0x20, 0xe7, 0x4b, 0x90, 0xea, 0xd2, 0x27, 0xcb, 0x3f, 0xa8, 0x88, 0xe8, 0x5f, 0xe5, 0x9f, 0xf7,
0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x5b, 0xdc, 0xf6, 0x89, 0x27, 0x00, 0x00,
var fileDescriptor_driver_8c4ef0bcc46739f6 = []byte{
// 3009 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xdb, 0x6f, 0xe3, 0xc6,
0xd5, 0xb7, 0xae, 0x96, 0x8e, 0x6c, 0x99, 0x3b, 0xbb, 0x9b, 0x28, 0x0a, 0xbe, 0x2f, 0x1b, 0x02,
0xf9, 0x60, 0x24, 0x59, 0x39, 0x71, 0xf0, 0xed, 0xad, 0xb9, 0x29, 0x12, 0xd7, 0x76, 0xd6, 0x96,
0xdd, 0x91, 0x8c, 0xcd, 0xb6, 0x4d, 0x58, 0x9a, 0x9c, 0x95, 0xb8, 0xe6, 0x2d, 0xe4, 0xd0, 0x6b,
0xa3, 0x28, 0x5a, 0xa4, 0x40, 0xd1, 0x3e, 0x14, 0xe8, 0x4b, 0x90, 0xf7, 0xf6, 0xb1, 0x7f, 0x41,
0x5b, 0xe4, 0x2f, 0x69, 0x5f, 0x5a, 0xa0, 0x40, 0x5f, 0xfb, 0x1f, 0x14, 0x73, 0x21, 0x45, 0xd9,
0xde, 0x2c, 0xa5, 0xcd, 0x13, 0x79, 0xce, 0xcc, 0xf9, 0xcd, 0x99, 0x39, 0x67, 0xe6, 0x9c, 0x99,
0x03, 0x6a, 0xe0, 0xc4, 0x63, 0xdb, 0x8b, 0x36, 0xac, 0xd0, 0x3e, 0x21, 0x61, 0xb4, 0x11, 0x84,
0x3e, 0xf5, 0x25, 0xd5, 0xe1, 0x04, 0x7a, 0x63, 0x62, 0x44, 0x13, 0xdb, 0xf4, 0xc3, 0xa0, 0xe3,
0xf9, 0xae, 0x61, 0x75, 0xa4, 0x4c, 0x47, 0xca, 0x88, 0x6e, 0xed, 0xff, 0x1d, 0xfb, 0xfe, 0xd8,
0x21, 0x02, 0xe1, 0x28, 0x7e, 0xbc, 0x61, 0xc5, 0xa1, 0x41, 0x6d, 0xdf, 0x93, 0xed, 0xaf, 0x9d,
0x6f, 0xa7, 0xb6, 0x4b, 0x22, 0x6a, 0xb8, 0x81, 0xec, 0xf0, 0xf1, 0xd8, 0xa6, 0x93, 0xf8, 0xa8,
0x63, 0xfa, 0xee, 0x46, 0x3a, 0xe4, 0x06, 0x1f, 0x72, 0x23, 0x51, 0x33, 0x9a, 0x18, 0x21, 0xb1,
0x36, 0x26, 0xa6, 0x13, 0x05, 0xc4, 0x64, 0x5f, 0x9d, 0xfd, 0x48, 0x84, 0xad, 0xfc, 0x08, 0x11,
0x0d, 0x63, 0x93, 0x26, 0xf3, 0x35, 0x28, 0x0d, 0xed, 0xa3, 0x98, 0x12, 0x01, 0xa4, 0xbe, 0x02,
0x2f, 0x8f, 0x8c, 0xe8, 0xb8, 0xe7, 0x7b, 0x8f, 0xed, 0xf1, 0xd0, 0x9c, 0x10, 0xd7, 0xc0, 0xe4,
0xcb, 0x98, 0x44, 0x54, 0xfd, 0x09, 0xb4, 0x2e, 0x36, 0x45, 0x81, 0xef, 0x45, 0x04, 0x7d, 0x0c,
0x65, 0xa6, 0x4d, 0xab, 0x70, 0xa3, 0xb0, 0xde, 0xd8, 0x7c, 0xbb, 0xf3, 0xac, 0x85, 0x13, 0x3a,
0x74, 0xe4, 0x2c, 0x3a, 0xc3, 0x80, 0x98, 0x98, 0x4b, 0xaa, 0xd7, 0xe1, 0x6a, 0xcf, 0x08, 0x8c,
0x23, 0xdb, 0xb1, 0xa9, 0x4d, 0xa2, 0x64, 0xd0, 0x18, 0xae, 0xcd, 0xb2, 0xe5, 0x80, 0x9f, 0xc3,
0x8a, 0x99, 0xe1, 0xcb, 0x81, 0xef, 0x76, 0x72, 0x59, 0xac, 0xd3, 0xe7, 0xd4, 0x0c, 0xf0, 0x0c,
0x9c, 0x7a, 0x0d, 0xd0, 0x7d, 0xdb, 0x1b, 0x93, 0x30, 0x08, 0x6d, 0x8f, 0x26, 0xca, 0x7c, 0x5b,
0x82, 0xab, 0x33, 0x6c, 0xa9, 0xcc, 0x13, 0x80, 0x74, 0x1d, 0x99, 0x2a, 0xa5, 0xf5, 0xc6, 0xe6,
0xa7, 0x39, 0x55, 0xb9, 0x04, 0xaf, 0xd3, 0x4d, 0xc1, 0x34, 0x8f, 0x86, 0x67, 0x38, 0x83, 0x8e,
0xbe, 0x80, 0xea, 0x84, 0x18, 0x0e, 0x9d, 0xb4, 0x8a, 0x37, 0x0a, 0xeb, 0xcd, 0xcd, 0xfb, 0x2f,
0x30, 0xce, 0x36, 0x07, 0x1a, 0x52, 0x83, 0x12, 0x2c, 0x51, 0xd1, 0x4d, 0x40, 0xe2, 0x4f, 0xb7,
0x48, 0x64, 0x86, 0x76, 0xc0, 0x1c, 0xb9, 0x55, 0xba, 0x51, 0x58, 0xaf, 0xe3, 0x2b, 0xa2, 0xa5,
0x3f, 0x6d, 0x68, 0x07, 0xb0, 0x76, 0x4e, 0x5b, 0xa4, 0x40, 0xe9, 0x98, 0x9c, 0x71, 0x8b, 0xd4,
0x31, 0xfb, 0x45, 0x5b, 0x50, 0x39, 0x31, 0x9c, 0x98, 0x70, 0x95, 0x1b, 0x9b, 0xef, 0x3e, 0xcf,
0x3d, 0xa4, 0x8b, 0x4e, 0xd7, 0x01, 0x0b, 0xf9, 0x7b, 0xc5, 0x3b, 0x05, 0xf5, 0x2e, 0x34, 0x32,
0x7a, 0xa3, 0x26, 0xc0, 0xe1, 0xa0, 0xaf, 0x8d, 0xb4, 0xde, 0x48, 0xeb, 0x2b, 0x4b, 0x68, 0x15,
0xea, 0x87, 0x83, 0x6d, 0xad, 0xbb, 0x3b, 0xda, 0x7e, 0xa4, 0x14, 0x50, 0x03, 0x96, 0x13, 0xa2,
0xa8, 0x9e, 0x02, 0xc2, 0xc4, 0xf4, 0x4f, 0x48, 0xc8, 0x1c, 0x59, 0x5a, 0x15, 0xbd, 0x0c, 0xcb,
0xd4, 0x88, 0x8e, 0x75, 0xdb, 0x92, 0x3a, 0x57, 0x19, 0xb9, 0x63, 0xa1, 0x1d, 0xa8, 0x4e, 0x0c,
0xcf, 0x72, 0x9e, 0xaf, 0xf7, 0xec, 0x52, 0x33, 0xf0, 0x6d, 0x2e, 0x88, 0x25, 0x00, 0xf3, 0xee,
0x99, 0x91, 0x85, 0x01, 0xd4, 0x47, 0xa0, 0x0c, 0xa9, 0x11, 0xd2, 0xac, 0x3a, 0x1a, 0x94, 0xd9,
0xf8, 0xd2, 0xa3, 0xe7, 0x19, 0x53, 0xec, 0x4c, 0xcc, 0xc5, 0xd5, 0xff, 0x14, 0xe1, 0x4a, 0x06,
0x5b, 0x7a, 0xea, 0x43, 0xa8, 0x86, 0x24, 0x8a, 0x1d, 0xca, 0xe1, 0x9b, 0x9b, 0x1f, 0xe5, 0x84,
0xbf, 0x80, 0xd4, 0xc1, 0x1c, 0x06, 0x4b, 0x38, 0xb4, 0x0e, 0x8a, 0x90, 0xd0, 0x49, 0x18, 0xfa,
0xa1, 0xee, 0x46, 0x63, 0xbe, 0x6a, 0x75, 0xdc, 0x14, 0x7c, 0x8d, 0xb1, 0xf7, 0xa2, 0x71, 0x66,
0x55, 0x4b, 0x2f, 0xb8, 0xaa, 0xc8, 0x00, 0xc5, 0x23, 0xf4, 0xa9, 0x1f, 0x1e, 0xeb, 0x6c, 0x69,
0x43, 0xdb, 0x22, 0xad, 0x32, 0x07, 0xbd, 0x95, 0x13, 0x74, 0x20, 0xc4, 0xf7, 0xa5, 0x34, 0x5e,
0xf3, 0x66, 0x19, 0xea, 0x5b, 0x50, 0x15, 0x33, 0x65, 0x9e, 0x34, 0x3c, 0xec, 0xf5, 0xb4, 0xe1,
0x50, 0x59, 0x42, 0x75, 0xa8, 0x60, 0x6d, 0x84, 0x99, 0x87, 0xd5, 0xa1, 0x72, 0xbf, 0x3b, 0xea,
0xee, 0x2a, 0x45, 0xf5, 0x4d, 0x58, 0x7b, 0x68, 0xd8, 0x34, 0x8f, 0x73, 0xa9, 0x3e, 0x28, 0xd3,
0xbe, 0xd2, 0x3a, 0x3b, 0x33, 0xd6, 0xc9, 0xbf, 0x34, 0xda, 0xa9, 0x4d, 0xcf, 0xd9, 0x43, 0x81,
0x12, 0x09, 0x43, 0x69, 0x02, 0xf6, 0xab, 0x3e, 0x85, 0xb5, 0x21, 0xf5, 0x83, 0x5c, 0x9e, 0xff,
0x1e, 0x2c, 0xb3, 0x18, 0xe5, 0xc7, 0x54, 0xba, 0xfe, 0x2b, 0x1d, 0x11, 0xc3, 0x3a, 0x49, 0x0c,
0xeb, 0xf4, 0x65, 0x8c, 0xc3, 0x49, 0x4f, 0xf4, 0x12, 0x54, 0x23, 0x7b, 0xec, 0x19, 0x8e, 0x3c,
0x2d, 0x24, 0xa5, 0x22, 0xe6, 0xe4, 0xc9, 0xc0, 0xd2, 0xf1, 0x7b, 0x80, 0xfa, 0x24, 0xa2, 0xa1,
0x7f, 0x96, 0x4b, 0x9f, 0x6b, 0x50, 0x79, 0xec, 0x87, 0xa6, 0xd8, 0x88, 0x35, 0x2c, 0x08, 0xb6,
0xa9, 0x66, 0x40, 0x24, 0xf6, 0x4d, 0x40, 0x3b, 0x1e, 0x8b, 0x29, 0xf9, 0x0c, 0xf1, 0xfb, 0x22,
0x5c, 0x9d, 0xe9, 0x2f, 0x8d, 0xb1, 0xf8, 0x3e, 0x64, 0x07, 0x53, 0x1c, 0x89, 0x7d, 0x88, 0xf6,
0xa1, 0x2a, 0x7a, 0xc8, 0x95, 0xbc, 0x3d, 0x07, 0x90, 0x08, 0x53, 0x12, 0x4e, 0xc2, 0x5c, 0xea,
0xf4, 0xa5, 0xef, 0xd7, 0xe9, 0x9f, 0x82, 0x92, 0xcc, 0x23, 0x7a, 0xae, 0x6d, 0x3e, 0x85, 0xab,
0xa6, 0xef, 0x38, 0xc4, 0x64, 0xde, 0xa0, 0xdb, 0x1e, 0x25, 0xe1, 0x89, 0xe1, 0x3c, 0xdf, 0x6f,
0xd0, 0x54, 0x6a, 0x47, 0x0a, 0xa9, 0x3f, 0x86, 0x2b, 0x99, 0x81, 0xa5, 0x21, 0xee, 0x43, 0x25,
0x62, 0x0c, 0x69, 0x89, 0x77, 0xe6, 0xb4, 0x44, 0x84, 0x85, 0xb8, 0x7a, 0x55, 0x80, 0x6b, 0x27,
0xc4, 0x4b, 0xa7, 0xa5, 0xf6, 0xe1, 0xca, 0x90, 0xbb, 0x69, 0x2e, 0x3f, 0x9c, 0xba, 0x78, 0x71,
0xc6, 0xc5, 0xaf, 0x01, 0xca, 0xa2, 0x48, 0x47, 0x3c, 0x83, 0x35, 0xed, 0x94, 0x98, 0xb9, 0x90,
0x5b, 0xb0, 0x6c, 0xfa, 0xae, 0x6b, 0x78, 0x56, 0xab, 0x78, 0xa3, 0xb4, 0x5e, 0xc7, 0x09, 0x99,
0xdd, 0x8b, 0xa5, 0xbc, 0x7b, 0x51, 0xfd, 0x5d, 0x01, 0x94, 0xe9, 0xd8, 0x72, 0x21, 0x99, 0xf6,
0xd4, 0x62, 0x40, 0x6c, 0xec, 0x15, 0x2c, 0x29, 0xc9, 0x4f, 0x8e, 0x0b, 0xc1, 0x27, 0x61, 0x98,
0x39, 0x8e, 0x4a, 0x2f, 0x78, 0x1c, 0xa9, 0xff, 0x2a, 0x00, 0xba, 0x98, 0x74, 0xa1, 0xd7, 0x61,
0x25, 0x22, 0x9e, 0xa5, 0x8b, 0x65, 0x14, 0x16, 0xae, 0xe1, 0x06, 0xe3, 0x89, 0xf5, 0x8c, 0x10,
0x82, 0x32, 0x39, 0x25, 0xa6, 0xdc, 0xf9, 0xfc, 0x1f, 0x4d, 0x60, 0xe5, 0x71, 0xa4, 0xdb, 0x91,
0xef, 0x18, 0x69, 0x76, 0xd2, 0xdc, 0xd4, 0x16, 0x4e, 0xfe, 0x3a, 0xf7, 0x87, 0x3b, 0x09, 0x18,
0x6e, 0x3c, 0x8e, 0x52, 0x42, 0xed, 0x40, 0x23, 0xd3, 0x86, 0x6a, 0x50, 0x1e, 0xec, 0x0f, 0x34,
0x65, 0x09, 0x01, 0x54, 0x7b, 0xdb, 0x78, 0x7f, 0x7f, 0x24, 0x22, 0xc0, 0xce, 0x5e, 0x77, 0x4b,
0x53, 0x8a, 0xea, 0x9f, 0xab, 0x00, 0xd3, 0x50, 0x8c, 0x9a, 0x50, 0x4c, 0x2d, 0x5d, 0xb4, 0x2d,
0x36, 0x19, 0xcf, 0x70, 0x89, 0xf4, 0x1e, 0xfe, 0x8f, 0x36, 0xe1, 0xba, 0x1b, 0x8d, 0x03, 0xc3,
0x3c, 0xd6, 0x65, 0x04, 0x35, 0xb9, 0x30, 0x9f, 0xd5, 0x0a, 0xbe, 0x2a, 0x1b, 0xa5, 0xd6, 0x02,
0x77, 0x17, 0x4a, 0xc4, 0x3b, 0x69, 0x95, 0x79, 0xa6, 0x79, 0x6f, 0xee, 0x14, 0xa1, 0xa3, 0x79,
0x27, 0x22, 0xb3, 0x64, 0x30, 0x48, 0x07, 0xb0, 0xc8, 0x89, 0x6d, 0x12, 0x9d, 0x81, 0x56, 0x38,
0xe8, 0xc7, 0xf3, 0x83, 0xf6, 0x39, 0x46, 0x0a, 0x5d, 0xb7, 0x12, 0x1a, 0x0d, 0xa0, 0x1e, 0x92,
0xc8, 0x8f, 0x43, 0x93, 0x44, 0xad, 0xea, 0x5c, 0xbb, 0x18, 0x27, 0x72, 0x78, 0x0a, 0x81, 0xfa,
0x50, 0x75, 0xfd, 0xd8, 0xa3, 0x51, 0x6b, 0x99, 0x2b, 0xfb, 0x76, 0x4e, 0xb0, 0x3d, 0x26, 0x84,
0xa5, 0x2c, 0xda, 0x82, 0x65, 0xa1, 0x62, 0xd4, 0xaa, 0x71, 0x98, 0x9b, 0x79, 0x1d, 0x88, 0x4b,
0xe1, 0x44, 0x9a, 0x59, 0x35, 0x8e, 0x48, 0xd8, 0xaa, 0x0b, 0xab, 0xb2, 0x7f, 0xf4, 0x2a, 0xd4,
0x0d, 0xc7, 0xf1, 0x4d, 0xdd, 0xb2, 0xc3, 0x16, 0xf0, 0x86, 0x1a, 0x67, 0xf4, 0xed, 0x10, 0xbd,
0x06, 0x0d, 0xb1, 0xf5, 0xf4, 0xc0, 0xa0, 0x93, 0x56, 0x83, 0x37, 0x83, 0x60, 0x1d, 0x18, 0x74,
0x22, 0x3b, 0x90, 0x30, 0x14, 0x1d, 0x56, 0xd2, 0x0e, 0x24, 0x0c, 0x79, 0x87, 0xff, 0x83, 0x35,
0x7e, 0x8e, 0x8c, 0x43, 0x3f, 0x0e, 0x74, 0xee, 0x53, 0xab, 0xbc, 0xd3, 0x2a, 0x63, 0x6f, 0x31,
0xee, 0x80, 0x39, 0xd7, 0x2b, 0x50, 0x7b, 0xe2, 0x1f, 0x89, 0x0e, 0x4d, 0xde, 0x61, 0xf9, 0x89,
0x7f, 0x94, 0x34, 0x09, 0x0d, 0x6d, 0xab, 0xb5, 0x26, 0x9a, 0x38, 0xbd, 0x63, 0xb5, 0x6f, 0x41,
0x2d, 0x31, 0xe3, 0x25, 0xd9, 0xfc, 0xb5, 0x6c, 0x36, 0x5f, 0xcf, 0xa4, 0xe6, 0xed, 0xf7, 0xa1,
0x39, 0xeb, 0x04, 0xf3, 0x48, 0xab, 0x7f, 0x2b, 0x40, 0x3d, 0x35, 0x37, 0xf2, 0xe0, 0x2a, 0x57,
0xc7, 0xa0, 0xc4, 0xd2, 0xa7, 0xde, 0x23, 0x62, 0xc0, 0x07, 0x39, 0x2d, 0xd5, 0x4d, 0x10, 0xe4,
0x39, 0x28, 0x5d, 0x09, 0xa5, 0xc8, 0xd3, 0xf1, 0xbe, 0x80, 0x35, 0xc7, 0xf6, 0xe2, 0xd3, 0xcc,
0x58, 0x22, 0x84, 0xfd, 0x7f, 0xce, 0xb1, 0x76, 0x99, 0xf4, 0x74, 0x8c, 0xa6, 0x33, 0x43, 0xab,
0x5f, 0x17, 0xe1, 0xa5, 0xcb, 0xd5, 0x41, 0x03, 0x28, 0x99, 0x41, 0x2c, 0xa7, 0xf6, 0xfe, 0xbc,
0x53, 0xeb, 0x05, 0xf1, 0x74, 0x54, 0x06, 0xc4, 0x92, 0x7c, 0x97, 0xb8, 0x7e, 0x78, 0x26, 0x67,
0xf0, 0xd1, 0xbc, 0x90, 0x7b, 0x5c, 0x7a, 0x8a, 0x2a, 0xe1, 0x10, 0x86, 0x9a, 0x4c, 0x15, 0x22,
0x79, 0x4c, 0xcc, 0x99, 0x72, 0x24, 0x90, 0x38, 0xc5, 0x51, 0x6f, 0xc1, 0xf5, 0x4b, 0xa7, 0x82,
0xfe, 0x07, 0xc0, 0x0c, 0x62, 0x9d, 0x5f, 0x09, 0x85, 0xdd, 0x4b, 0xb8, 0x6e, 0x06, 0xf1, 0x90,
0x33, 0xd4, 0xdb, 0xd0, 0x7a, 0x96, 0xbe, 0x6c, 0xf3, 0x09, 0x8d, 0x75, 0xf7, 0x88, 0xaf, 0x41,
0x09, 0xd7, 0x04, 0x63, 0xef, 0x48, 0xfd, 0xa6, 0x08, 0x6b, 0xe7, 0xd4, 0x61, 0x11, 0x50, 0x6c,
0xe6, 0x24, 0x2a, 0x0b, 0x8a, 0xed, 0x6c, 0xd3, 0xb6, 0x92, 0x34, 0x9a, 0xff, 0xf3, 0x33, 0x3d,
0x90, 0x29, 0x6e, 0xd1, 0x0e, 0x98, 0x43, 0xbb, 0x47, 0x36, 0x8d, 0xf8, 0xcd, 0xa3, 0x82, 0x05,
0x81, 0x1e, 0x41, 0x33, 0x24, 0x11, 0x09, 0x4f, 0x88, 0xa5, 0x07, 0x7e, 0x48, 0x93, 0x05, 0xdb,
0x9c, 0x6f, 0xc1, 0x0e, 0xfc, 0x90, 0xe2, 0xd5, 0x04, 0x89, 0x51, 0x11, 0x7a, 0x08, 0xab, 0xd6,
0x99, 0x67, 0xb8, 0xb6, 0x29, 0x91, 0xab, 0x0b, 0x23, 0xaf, 0x48, 0x20, 0x0e, 0xcc, 0x6e, 0xd6,
0x99, 0x46, 0x36, 0x31, 0xc7, 0x38, 0x22, 0x8e, 0x5c, 0x13, 0x41, 0xcc, 0xee, 0xdf, 0x8a, 0xdc,
0xbf, 0xea, 0x1f, 0x8b, 0xd0, 0x9c, 0xdd, 0x00, 0x89, 0xfd, 0x02, 0x12, 0xda, 0xbe, 0x95, 0xb1,
0xdf, 0x01, 0x67, 0x30, 0x1b, 0xb1, 0xe6, 0x2f, 0x63, 0x9f, 0x1a, 0x89, 0x8d, 0xcc, 0x20, 0xfe,
0x21, 0xa3, 0xcf, 0xd9, 0xbe, 0x74, 0xce, 0xf6, 0xe8, 0x6d, 0x40, 0xd2, 0xbe, 0x8e, 0xed, 0xda,
0x54, 0x3f, 0x3a, 0xa3, 0x44, 0xac, 0x7f, 0x09, 0x2b, 0xa2, 0x65, 0x97, 0x35, 0x7c, 0xc2, 0xf8,
0x48, 0x85, 0x55, 0xdf, 0x77, 0xf5, 0xc8, 0xf4, 0x43, 0xa2, 0x1b, 0xd6, 0x93, 0x56, 0x85, 0x77,
0x6c, 0xf8, 0xbe, 0x3b, 0x64, 0xbc, 0xae, 0xf5, 0x84, 0x1d, 0xb8, 0x66, 0x10, 0x47, 0x84, 0xea,
0xec, 0xc3, 0x63, 0x54, 0x1d, 0x83, 0x60, 0xf5, 0x82, 0x38, 0xca, 0x74, 0x70, 0x89, 0xcb, 0xe2,
0x4e, 0xa6, 0xc3, 0x1e, 0x71, 0xd9, 0x28, 0x2b, 0x07, 0x24, 0x34, 0x89, 0x47, 0x47, 0xb6, 0x79,
0xcc, 0x42, 0x4a, 0x61, 0xbd, 0x80, 0x67, 0x78, 0xea, 0xe7, 0x50, 0xe1, 0x21, 0x88, 0x4d, 0x9e,
0x1f, 0xdf, 0xfc, 0x74, 0x17, 0xcb, 0x5b, 0x63, 0x0c, 0x7e, 0xb6, 0xbf, 0x0a, 0xf5, 0x89, 0x1f,
0xc9, 0xd8, 0x20, 0x3c, 0xaf, 0xc6, 0x18, 0xbc, 0xb1, 0x0d, 0xb5, 0x90, 0x18, 0x96, 0xef, 0x39,
0x67, 0x7c, 0x5d, 0x6a, 0x38, 0xa5, 0xd5, 0x2f, 0xa1, 0x2a, 0x8e, 0xdf, 0x17, 0xc0, 0xbf, 0x09,
0xc8, 0x14, 0x41, 0x25, 0x20, 0xa1, 0x6b, 0x47, 0x91, 0xed, 0x7b, 0x51, 0xf2, 0xfc, 0x23, 0x5a,
0x0e, 0xa6, 0x0d, 0xea, 0xdf, 0x0b, 0x22, 0xdf, 0x11, 0x17, 0x73, 0x96, 0xc5, 0x32, 0x4f, 0x63,
0x39, 0x59, 0x81, 0xbb, 0x47, 0x42, 0xb2, 0x5c, 0x52, 0xa6, 0x35, 0xc5, 0x45, 0xdf, 0x35, 0x24,
0x40, 0x72, 0x1f, 0x20, 0x32, 0xed, 0x9b, 0xf7, 0x3e, 0x40, 0xc4, 0x7d, 0x80, 0xb0, 0xe4, 0x53,
0x26, 0x5c, 0x02, 0xae, 0xcc, 0xf3, 0xad, 0x86, 0x95, 0x5e, 0xba, 0x88, 0xfa, 0xef, 0x42, 0x7a,
0x56, 0x24, 0x97, 0x23, 0xf4, 0x05, 0xd4, 0xd8, 0xb6, 0xd3, 0x5d, 0x23, 0x90, 0x4f, 0x7d, 0xbd,
0xc5, 0xee, 0x5d, 0x1d, 0xb6, 0xcb, 0xf6, 0x8c, 0x40, 0xa4, 0x4b, 0xcb, 0x81, 0xa0, 0xd8, 0x99,
0x63, 0x58, 0xd3, 0x33, 0x87, 0xfd, 0xa3, 0x37, 0xa0, 0x69, 0xc4, 0xd4, 0xd7, 0x0d, 0xeb, 0x84,
0x84, 0xd4, 0x8e, 0x88, 0xb4, 0xfd, 0x2a, 0xe3, 0x76, 0x13, 0x66, 0xfb, 0x1e, 0xac, 0x64, 0x31,
0x9f, 0x17, 0x7d, 0x2b, 0xd9, 0xe8, 0xfb, 0x53, 0x80, 0x69, 0xde, 0xce, 0x7c, 0x84, 0x9c, 0xda,
0x54, 0x37, 0x7d, 0x8b, 0x48, 0x53, 0xd6, 0x18, 0xa3, 0xe7, 0x5b, 0xe4, 0xdc, 0x2d, 0xa8, 0x92,
0xdc, 0x82, 0xd8, 0xae, 0x65, 0x1b, 0xed, 0xd8, 0x76, 0x1c, 0x62, 0x49, 0x0d, 0xeb, 0xbe, 0xef,
0x3e, 0xe0, 0x0c, 0xf5, 0xdb, 0xa2, 0xf0, 0x15, 0x71, 0x9f, 0xcd, 0x95, 0x1b, 0x7f, 0x5f, 0xa6,
0xbe, 0x0b, 0x10, 0x51, 0x23, 0x64, 0xa9, 0x84, 0x41, 0xe5, 0x13, 0x51, 0xfb, 0xc2, 0x35, 0x6a,
0x94, 0x3c, 0xcb, 0xe3, 0xba, 0xec, 0xdd, 0xa5, 0xe8, 0x03, 0x58, 0x31, 0x7d, 0x37, 0x70, 0x88,
0x14, 0xae, 0x3c, 0x57, 0xb8, 0x91, 0xf6, 0xef, 0xd2, 0xcc, 0x1d, 0xaa, 0xfa, 0xa2, 0x77, 0xa8,
0xbf, 0x14, 0xc4, 0xb5, 0x3c, 0xfb, 0x2a, 0x80, 0xc6, 0x97, 0x3c, 0x3d, 0x6f, 0x2d, 0xf8, 0xc4,
0xf0, 0x5d, 0xef, 0xce, 0xed, 0x0f, 0xf2, 0x3c, 0xf4, 0x3e, 0x3b, 0xb9, 0xfb, 0x6b, 0x09, 0xea,
0xe9, 0x8d, 0xfc, 0x82, 0xed, 0xef, 0x40, 0x3d, 0xad, 0x89, 0xc8, 0x03, 0xe2, 0x3b, 0xcd, 0x93,
0x76, 0x46, 0x8f, 0x01, 0x19, 0xe3, 0x71, 0x9a, 0xb4, 0xe9, 0x71, 0x64, 0x8c, 0x93, 0xf7, 0x90,
0x3b, 0x73, 0xac, 0x43, 0x12, 0xb7, 0x0e, 0x99, 0x3c, 0x56, 0x8c, 0xf1, 0x78, 0x86, 0x83, 0x7e,
0x06, 0xd7, 0x67, 0xc7, 0xd0, 0x8f, 0xce, 0xf4, 0xc0, 0xb6, 0xe4, 0x1d, 0x6c, 0x7b, 0xde, 0x47,
0x89, 0xce, 0x0c, 0xfc, 0x27, 0x67, 0x07, 0xb6, 0x25, 0xd6, 0x1c, 0x85, 0x17, 0x1a, 0xda, 0xbf,
0x80, 0x97, 0x9f, 0xd1, 0xfd, 0x12, 0x1b, 0x0c, 0x66, 0x1f, 0xdb, 0x17, 0x5f, 0x84, 0x8c, 0xf5,
0xfe, 0x50, 0x10, 0x6f, 0x27, 0xb3, 0x6b, 0xd2, 0xcd, 0xe6, 0xad, 0x1b, 0x39, 0xc7, 0xe9, 0x1d,
0x1c, 0x0a, 0x78, 0x9e, 0xaa, 0x7e, 0x7a, 0x2e, 0x55, 0xcd, 0x9b, 0xc4, 0x88, 0x8c, 0x4f, 0x00,
0x49, 0x04, 0xf5, 0x4f, 0x25, 0xa8, 0x25, 0xe8, 0xfc, 0x06, 0x75, 0x16, 0x51, 0xe2, 0xea, 0x6e,
0x72, 0x84, 0x15, 0x30, 0x08, 0xd6, 0x1e, 0x3b, 0xc4, 0x5e, 0x85, 0x3a, 0xbb, 0xa8, 0x89, 0xe6,
0x22, 0x6f, 0xae, 0x31, 0x06, 0x6f, 0x7c, 0x0d, 0x1a, 0xd4, 0xa7, 0x86, 0xa3, 0x53, 0x1e, 0xcb,
0x4b, 0x42, 0x9a, 0xb3, 0x78, 0x24, 0x47, 0x6f, 0xc1, 0x15, 0x3a, 0x09, 0x7d, 0x4a, 0x1d, 0x96,
0xdf, 0xf1, 0x8c, 0x46, 0x24, 0x20, 0x65, 0xac, 0xa4, 0x0d, 0x22, 0xd3, 0x89, 0xd8, 0xe9, 0x3d,
0xed, 0xcc, 0x5c, 0x97, 0x1f, 0x22, 0x65, 0xbc, 0x9a, 0x72, 0x99, 0x6b, 0xb3, 0xe0, 0x19, 0x88,
0x6c, 0x81, 0x9f, 0x15, 0x05, 0x9c, 0x90, 0x48, 0x87, 0x35, 0x97, 0x18, 0x51, 0x1c, 0x12, 0x4b,
0x7f, 0x6c, 0x13, 0xc7, 0x12, 0x17, 0xdf, 0x66, 0xee, 0xf4, 0x3b, 0x59, 0x96, 0xce, 0x7d, 0x2e,
0x8d, 0x9b, 0x09, 0x9c, 0xa0, 0x59, 0xe6, 0x20, 0xfe, 0xd0, 0x1a, 0x34, 0x86, 0x8f, 0x86, 0x23,
0x6d, 0x4f, 0xdf, 0xdb, 0xef, 0x6b, 0xb2, 0x9e, 0x32, 0xd4, 0xb0, 0x20, 0x0b, 0xac, 0x7d, 0xb4,
0x3f, 0xea, 0xee, 0xea, 0xa3, 0x9d, 0xde, 0x83, 0xa1, 0x52, 0x44, 0xd7, 0xe1, 0xca, 0x68, 0x1b,
0xef, 0x8f, 0x46, 0xbb, 0x5a, 0x5f, 0x3f, 0xd0, 0xf0, 0xce, 0x7e, 0x7f, 0xa8, 0x94, 0x10, 0x82,
0xe6, 0x94, 0x3d, 0xda, 0xd9, 0xd3, 0x94, 0x32, 0x6a, 0xc0, 0xf2, 0x81, 0x86, 0x7b, 0xda, 0x60,
0xa4, 0x54, 0xd4, 0x6f, 0x4a, 0xd0, 0xc8, 0x58, 0x91, 0x39, 0x72, 0x18, 0x89, 0x3c, 0xbf, 0x8c,
0xd9, 0x2f, 0x3b, 0x4c, 0x4c, 0xc3, 0x9c, 0x08, 0xeb, 0x94, 0xb1, 0x20, 0x78, 0x6e, 0x6f, 0x9c,
0x66, 0xf6, 0x79, 0x19, 0xd7, 0x5c, 0xe3, 0x54, 0x80, 0xbc, 0x0e, 0x2b, 0xc7, 0x24, 0xf4, 0x88,
0x23, 0xdb, 0x85, 0x45, 0x1a, 0x82, 0x27, 0xba, 0xac, 0x83, 0x22, 0xbb, 0x4c, 0x61, 0x84, 0x39,
0x9a, 0x82, 0xbf, 0x97, 0x80, 0x5d, 0x83, 0x8a, 0x68, 0x5e, 0x16, 0xe3, 0x73, 0x82, 0x85, 0xa9,
0xe8, 0xa9, 0x11, 0xf0, 0xfc, 0xae, 0x8c, 0xf9, 0x3f, 0x3a, 0xba, 0x68, 0x9f, 0x2a, 0xb7, 0xcf,
0xdd, 0xf9, 0xdd, 0xf9, 0x59, 0x26, 0x9a, 0xa4, 0x26, 0x5a, 0x86, 0x12, 0x4e, 0x8a, 0x10, 0xbd,
0x6e, 0x6f, 0x9b, 0x99, 0x65, 0x15, 0xea, 0x7b, 0xdd, 0xcf, 0xf4, 0xc3, 0x21, 0x7f, 0x86, 0x42,
0x0a, 0xac, 0x3c, 0xd0, 0xf0, 0x40, 0xdb, 0x95, 0x9c, 0x12, 0xba, 0x06, 0x8a, 0xe4, 0x4c, 0xfb,
0x95, 0x19, 0x82, 0xf8, 0xad, 0xa0, 0x1a, 0x94, 0x87, 0x0f, 0xbb, 0x07, 0x4a, 0x55, 0xfd, 0x47,
0x11, 0xd6, 0x44, 0x58, 0x48, 0x9f, 0x4b, 0x9f, 0xfd, 0x6e, 0x99, 0x7d, 0x45, 0x28, 0xce, 0xbc,
0x22, 0xa4, 0x49, 0x28, 0x8f, 0xea, 0xa5, 0x69, 0x12, 0xca, 0x5f, 0x1f, 0x66, 0x4e, 0xfc, 0xf2,
0x3c, 0x27, 0x7e, 0x0b, 0x96, 0x5d, 0x12, 0xa5, 0x76, 0xab, 0xe3, 0x84, 0x44, 0x36, 0x34, 0x0c,
0xcf, 0xf3, 0x29, 0x7f, 0xab, 0x4b, 0xae, 0x45, 0x5b, 0x73, 0xbd, 0x0a, 0xa6, 0x33, 0xee, 0x74,
0xa7, 0x48, 0xe2, 0x60, 0xce, 0x62, 0xb7, 0x3f, 0x04, 0xe5, 0x7c, 0x87, 0x79, 0xc2, 0xe1, 0x9b,
0xef, 0x4e, 0xa3, 0x21, 0x61, 0xfb, 0xe2, 0x70, 0xf0, 0x60, 0xb0, 0xff, 0x70, 0xa0, 0x2c, 0x31,
0x02, 0x1f, 0x0e, 0x06, 0x3b, 0x83, 0x2d, 0xa5, 0x80, 0x00, 0xaa, 0xda, 0x67, 0x3b, 0x23, 0xad,
0xaf, 0x14, 0x37, 0xff, 0xb9, 0x0a, 0x55, 0xa1, 0x24, 0xfa, 0x5a, 0x66, 0x02, 0xd9, 0x52, 0x3c,
0xfa, 0x70, 0xee, 0x8c, 0x7a, 0xa6, 0xbc, 0xdf, 0xfe, 0x68, 0x61, 0x79, 0xf9, 0xdc, 0xbd, 0x84,
0x7e, 0x5b, 0x80, 0x95, 0x99, 0xf7, 0xdd, 0xbc, 0x4f, 0x93, 0x97, 0x54, 0xfe, 0xdb, 0x3f, 0x58,
0x48, 0x36, 0xd5, 0xe5, 0x37, 0x05, 0x68, 0x64, 0x6a, 0xde, 0xe8, 0xee, 0x22, 0x75, 0x72, 0xa1,
0xc9, 0xbd, 0xc5, 0x4b, 0xec, 0xea, 0xd2, 0x3b, 0x05, 0xf4, 0xeb, 0x02, 0x34, 0x32, 0xd5, 0xdf,
0xdc, 0xaa, 0x5c, 0xac, 0x55, 0xe7, 0x56, 0xe5, 0xb2, 0x62, 0xf3, 0x12, 0xfa, 0x65, 0x01, 0xea,
0x69, 0x25, 0x17, 0xdd, 0x9e, 0xbf, 0xf6, 0x2b, 0x94, 0xb8, 0xb3, 0x68, 0xd1, 0x58, 0x5d, 0x42,
0x3f, 0x87, 0x5a, 0x52, 0xf6, 0x44, 0x79, 0xa3, 0xd7, 0xb9, 0x9a, 0x6a, 0xfb, 0xf6, 0xdc, 0x72,
0xd9, 0xe1, 0x93, 0x5a, 0x64, 0xee, 0xe1, 0xcf, 0x55, 0x4d, 0xdb, 0xb7, 0xe7, 0x96, 0x4b, 0x87,
0x67, 0x9e, 0x90, 0x29, 0x59, 0xe6, 0xf6, 0x84, 0x8b, 0xb5, 0xd2, 0xdc, 0x9e, 0x70, 0x59, 0x85,
0x54, 0x28, 0x92, 0x29, 0x7a, 0xe6, 0x56, 0xe4, 0x62, 0x61, 0x35, 0xb7, 0x22, 0x97, 0xd4, 0x58,
0xd5, 0x25, 0xf4, 0x55, 0x21, 0x7b, 0x2f, 0xb8, 0x3d, 0x77, 0x6d, 0x6f, 0x4e, 0x97, 0xbc, 0x50,
0x5d, 0xe4, 0x1b, 0xf4, 0x2b, 0xf9, 0x8a, 0x21, 0x4a, 0x83, 0x68, 0x1e, 0xb0, 0x99, 0x6a, 0x62,
0xfb, 0xd6, 0x62, 0xc1, 0x86, 0x2b, 0xf1, 0xab, 0x02, 0xc0, 0xb4, 0x88, 0x98, 0x5b, 0x89, 0x0b,
0xd5, 0xcb, 0xf6, 0xdd, 0x05, 0x24, 0xb3, 0x1b, 0x24, 0xa9, 0x1b, 0xe6, 0xde, 0x20, 0xe7, 0x8a,
0x9c, 0xb9, 0x37, 0xc8, 0xf9, 0x02, 0xa5, 0xba, 0xf4, 0xc9, 0xf2, 0x8f, 0x2a, 0x22, 0xfa, 0x57,
0xf9, 0xe7, 0xbd, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xde, 0xd5, 0xff, 0xa7, 0x27, 0x00,
0x00,
}

View File

@@ -569,6 +569,7 @@ message MemoryUsage {
uint64 kernel_usage = 4;
uint64 kernel_max_usage = 5;
uint64 usage = 7;
uint64 swap = 8;
enum Fields {
RSS = 0;
@@ -577,6 +578,7 @@ message MemoryUsage {
KERNEL_USAGE = 3;
KERNEL_MAX_USAGE = 4;
USAGE = 5;
SWAP = 6;
}
// MeasuredFields indicates which fields were actually sampled
repeated Fields measured_fields = 6;

View File

@@ -421,52 +421,25 @@ func TaskStatsFromProto(pb *proto.TaskStats) (*TaskResourceUsage, error) {
}
func resourceUsageToProto(ru *ResourceUsage) *proto.TaskResourceUsage {
cpu := &proto.CPUUsage{}
for _, field := range ru.CpuStats.Measured {
switch field {
case "System Mode":
cpu.SystemMode = ru.CpuStats.SystemMode
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_SYSTEM_MODE)
case "User Mode":
cpu.UserMode = ru.CpuStats.UserMode
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_USER_MODE)
case "Total Ticks":
cpu.TotalTicks = ru.CpuStats.TotalTicks
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_TOTAL_TICKS)
case "Throttled Periods":
cpu.ThrottledPeriods = ru.CpuStats.ThrottledPeriods
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_THROTTLED_PERIODS)
case "Throttled Time":
cpu.ThrottledTime = ru.CpuStats.ThrottledTime
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_THROTTLED_TIME)
case "Percent":
cpu.Percent = ru.CpuStats.Percent
cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_PERCENT)
}
cpu := &proto.CPUUsage{
MeasuredFields: cpuUsageMeasuredFieldsToProto(ru.CpuStats.Measured),
SystemMode: ru.CpuStats.SystemMode,
UserMode: ru.CpuStats.UserMode,
TotalTicks: ru.CpuStats.TotalTicks,
ThrottledPeriods: ru.CpuStats.ThrottledPeriods,
ThrottledTime: ru.CpuStats.ThrottledTime,
Percent: ru.CpuStats.Percent,
}
memory := &proto.MemoryUsage{}
for _, field := range ru.MemoryStats.Measured {
switch field {
case "RSS":
memory.Rss = ru.MemoryStats.RSS
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_RSS)
case "Cache":
memory.Cache = ru.MemoryStats.Cache
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_CACHE)
case "Usage":
memory.Usage = ru.MemoryStats.Usage
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_USAGE)
case "Max Usage":
memory.MaxUsage = ru.MemoryStats.MaxUsage
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_MAX_USAGE)
case "Kernel Usage":
memory.KernelUsage = ru.MemoryStats.KernelUsage
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_KERNEL_USAGE)
case "Kernel Max Usage":
memory.KernelMaxUsage = ru.MemoryStats.KernelMaxUsage
memory.MeasuredFields = append(memory.MeasuredFields, proto.MemoryUsage_KERNEL_MAX_USAGE)
}
memory := &proto.MemoryUsage{
MeasuredFields: memoryUsageMeasuredFieldsToProto(ru.MemoryStats.Measured),
Rss: ru.MemoryStats.RSS,
Cache: ru.MemoryStats.Cache,
Swap: ru.MemoryStats.Swap,
Usage: ru.MemoryStats.Usage,
MaxUsage: ru.MemoryStats.MaxUsage,
KernelUsage: ru.MemoryStats.KernelUsage,
KernelMaxUsage: ru.MemoryStats.KernelMaxUsage,
}
return &proto.TaskResourceUsage{
@@ -478,53 +451,28 @@ func resourceUsageToProto(ru *ResourceUsage) *proto.TaskResourceUsage {
func resourceUsageFromProto(pb *proto.TaskResourceUsage) *ResourceUsage {
cpu := CpuStats{}
if pb.Cpu != nil {
for _, field := range pb.Cpu.MeasuredFields {
switch field {
case proto.CPUUsage_SYSTEM_MODE:
cpu.SystemMode = pb.Cpu.SystemMode
cpu.Measured = append(cpu.Measured, "System Mode")
case proto.CPUUsage_USER_MODE:
cpu.UserMode = pb.Cpu.UserMode
cpu.Measured = append(cpu.Measured, "User Mode")
case proto.CPUUsage_TOTAL_TICKS:
cpu.TotalTicks = pb.Cpu.TotalTicks
cpu.Measured = append(cpu.Measured, "Total Ticks")
case proto.CPUUsage_THROTTLED_PERIODS:
cpu.ThrottledPeriods = pb.Cpu.ThrottledPeriods
cpu.Measured = append(cpu.Measured, "Throttled Periods")
case proto.CPUUsage_THROTTLED_TIME:
cpu.ThrottledTime = pb.Cpu.ThrottledTime
cpu.Measured = append(cpu.Measured, "Throttled Time")
case proto.CPUUsage_PERCENT:
cpu.Percent = pb.Cpu.Percent
cpu.Measured = append(cpu.Measured, "Percent")
}
cpu = CpuStats{
Measured: cpuUsageMeasuredFieldsFromProto(pb.Cpu.MeasuredFields),
SystemMode: pb.Cpu.SystemMode,
UserMode: pb.Cpu.UserMode,
TotalTicks: pb.Cpu.TotalTicks,
ThrottledPeriods: pb.Cpu.ThrottledPeriods,
ThrottledTime: pb.Cpu.ThrottledTime,
Percent: pb.Cpu.Percent,
}
}
memory := MemoryStats{}
if pb.Memory != nil {
for _, field := range pb.Memory.MeasuredFields {
switch field {
case proto.MemoryUsage_RSS:
memory.RSS = pb.Memory.Rss
memory.Measured = append(memory.Measured, "RSS")
case proto.MemoryUsage_CACHE:
memory.Cache = pb.Memory.Cache
memory.Measured = append(memory.Measured, "Cache")
case proto.MemoryUsage_USAGE:
memory.Usage = pb.Memory.Usage
memory.Measured = append(memory.Measured, "Usage")
case proto.MemoryUsage_MAX_USAGE:
memory.MaxUsage = pb.Memory.MaxUsage
memory.Measured = append(memory.Measured, "Max Usage")
case proto.MemoryUsage_KERNEL_USAGE:
memory.KernelUsage = pb.Memory.KernelUsage
memory.Measured = append(memory.Measured, "Kernel Usage")
case proto.MemoryUsage_KERNEL_MAX_USAGE:
memory.KernelMaxUsage = pb.Memory.KernelMaxUsage
memory.Measured = append(memory.Measured, "Kernel Max Usage")
}
memory = MemoryStats{
Measured: memoryUsageMeasuredFieldsFromProto(pb.Memory.MeasuredFields),
RSS: pb.Memory.Rss,
Cache: pb.Memory.Cache,
Swap: pb.Memory.Swap,
Usage: pb.Memory.Usage,
MaxUsage: pb.Memory.MaxUsage,
KernelUsage: pb.Memory.KernelUsage,
KernelMaxUsage: pb.Memory.KernelMaxUsage,
}
}
@@ -537,3 +485,89 @@ func resourceUsageFromProto(pb *proto.TaskResourceUsage) *ResourceUsage {
func BytesToMB(bytes int64) int64 {
return bytes / (1024 * 1024)
}
var cpuUsageMeasuredFieldToProtoMap = map[string]proto.CPUUsage_Fields{
"System Mode": proto.CPUUsage_SYSTEM_MODE,
"User Mode": proto.CPUUsage_USER_MODE,
"Total Ticks": proto.CPUUsage_TOTAL_TICKS,
"Throttled Periods": proto.CPUUsage_THROTTLED_PERIODS,
"Throttled Time": proto.CPUUsage_THROTTLED_TIME,
"Percent": proto.CPUUsage_PERCENT,
}
var cpuUsageMeasuredFieldFromProtoMap = map[proto.CPUUsage_Fields]string{
proto.CPUUsage_SYSTEM_MODE: "System Mode",
proto.CPUUsage_USER_MODE: "User Mode",
proto.CPUUsage_TOTAL_TICKS: "Total Ticks",
proto.CPUUsage_THROTTLED_PERIODS: "Throttled Periods",
proto.CPUUsage_THROTTLED_TIME: "Throttled Time",
proto.CPUUsage_PERCENT: "Percent",
}
func cpuUsageMeasuredFieldsToProto(fields []string) []proto.CPUUsage_Fields {
r := make([]proto.CPUUsage_Fields, 0, len(fields))
for _, f := range fields {
if v, ok := cpuUsageMeasuredFieldToProtoMap[f]; ok {
r = append(r, v)
}
}
return r
}
func cpuUsageMeasuredFieldsFromProto(fields []proto.CPUUsage_Fields) []string {
r := make([]string, 0, len(fields))
for _, f := range fields {
if v, ok := cpuUsageMeasuredFieldFromProtoMap[f]; ok {
r = append(r, v)
}
}
return r
}
var memoryUsageMeasuredFieldToProtoMap = map[string]proto.MemoryUsage_Fields{
"RSS": proto.MemoryUsage_RSS,
"Cache": proto.MemoryUsage_CACHE,
"Swap": proto.MemoryUsage_SWAP,
"Usage": proto.MemoryUsage_USAGE,
"Max Usage": proto.MemoryUsage_MAX_USAGE,
"Kernel Usage": proto.MemoryUsage_KERNEL_USAGE,
"Kernel Max Usage": proto.MemoryUsage_KERNEL_MAX_USAGE,
}
var memoryUsageMeasuredFieldFromProtoMap = map[proto.MemoryUsage_Fields]string{
proto.MemoryUsage_RSS: "RSS",
proto.MemoryUsage_CACHE: "Cache",
proto.MemoryUsage_SWAP: "Swap",
proto.MemoryUsage_USAGE: "Usage",
proto.MemoryUsage_MAX_USAGE: "Max Usage",
proto.MemoryUsage_KERNEL_USAGE: "Kernel Usage",
proto.MemoryUsage_KERNEL_MAX_USAGE: "Kernel Max Usage",
}
func memoryUsageMeasuredFieldsToProto(fields []string) []proto.MemoryUsage_Fields {
r := make([]proto.MemoryUsage_Fields, 0, len(fields))
for _, f := range fields {
if v, ok := memoryUsageMeasuredFieldToProtoMap[f]; ok {
r = append(r, v)
}
}
return r
}
func memoryUsageMeasuredFieldsFromProto(fields []proto.MemoryUsage_Fields) []string {
r := make([]string, 0, len(fields))
for _, f := range fields {
if v, ok := memoryUsageMeasuredFieldFromProtoMap[f]; ok {
r = append(r, v)
}
}
return r
}

View File

@@ -0,0 +1,34 @@
package drivers
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestResourceUsageRoundTrip(t *testing.T) {
input := &ResourceUsage{
CpuStats: &CpuStats{
SystemMode: 0,
UserMode: 0.9963907032120152,
TotalTicks: 21.920595295932515,
ThrottledPeriods: 2321,
ThrottledTime: 123,
Percent: 0.9963906952696598,
Measured: []string{"System Mode", "User Mode", "Percent"},
},
MemoryStats: &MemoryStats{
RSS: 25681920,
Swap: 15681920,
Usage: 12,
MaxUsage: 23,
KernelUsage: 34,
KernelMaxUsage: 45,
Measured: []string{"RSS", "Swap"},
},
}
parsed := resourceUsageFromProto(resourceUsageToProto(input))
require.EqualValues(t, parsed, input)
}