From a880f93a61ff85e64ee5e3c6b98423798ab07011 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Fri, 29 Mar 2019 22:29:56 -0400 Subject: [PATCH 1/5] Always report TotalTicks when percent is measured Fix a case where TotalTicks doesn't get serialized across executor grpc calls. Here, I opted to implicit add field, rather than explicitly mark it as a measured field, because it's a derived field and to preserve 0.8 behavior where total ticks aren't explicitly marked as a measured field. --- plugins/drivers/utils.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/drivers/utils.go b/plugins/drivers/utils.go index f84b75461..96bd3e7e8 100644 --- a/plugins/drivers/utils.go +++ b/plugins/drivers/utils.go @@ -441,6 +441,11 @@ func resourceUsageToProto(ru *ResourceUsage) *proto.TaskResourceUsage { cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_THROTTLED_TIME) case "Percent": cpu.Percent = ru.CpuStats.Percent + + // total ticks is derived from percent, and should always be set together + // even if "Total Ticks" is not marked as an explicit measured field + cpu.TotalTicks = ru.CpuStats.TotalTicks + cpu.MeasuredFields = append(cpu.MeasuredFields, proto.CPUUsage_PERCENT) } } From 484ccfafab9cdbf5cc766a87797ab6ca1c7b8f0a Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Sat, 30 Mar 2019 07:14:57 -0400 Subject: [PATCH 2/5] deserialize total ticks --- plugins/drivers/utils.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/drivers/utils.go b/plugins/drivers/utils.go index 96bd3e7e8..15a326553 100644 --- a/plugins/drivers/utils.go +++ b/plugins/drivers/utils.go @@ -502,6 +502,12 @@ func resourceUsageFromProto(pb *proto.TaskResourceUsage) *ResourceUsage { cpu.Measured = append(cpu.Measured, "Throttled Time") case proto.CPUUsage_PERCENT: cpu.Percent = pb.Cpu.Percent + + // total ticks is derived from percent, and should always be set together + // even if "Total Ticks" is not marked as an explicit measured field + + cpu.TotalTicks = pb.Cpu.TotalTicks + cpu.Measured = append(cpu.Measured, "Percent") } } From b8f80e5124389990518a72c0bdad66d90de1c878 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Sat, 30 Mar 2019 15:18:28 -0400 Subject: [PATCH 3/5] Simplify proto conversion and handle swap Convert all cpu and memory usage fields regardless of stated measured fields, and handle swap fields --- plugins/drivers/proto/driver.pb.go | 497 +++++++++++++++-------------- plugins/drivers/proto/driver.proto | 2 + plugins/drivers/utils.go | 217 +++++++------ plugins/drivers/utils_test.go | 34 ++ 4 files changed, 411 insertions(+), 339 deletions(-) create mode 100644 plugins/drivers/utils_test.go diff --git a/plugins/drivers/proto/driver.pb.go b/plugins/drivers/proto/driver.pb.go index b04f5ddeb..c972e4d67 100644 --- a/plugins/drivers/proto/driver.pb.go +++ b/plugins/drivers/proto/driver.pb.go @@ -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, } diff --git a/plugins/drivers/proto/driver.proto b/plugins/drivers/proto/driver.proto index 99aef86d0..ed380aafe 100644 --- a/plugins/drivers/proto/driver.proto +++ b/plugins/drivers/proto/driver.proto @@ -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; diff --git a/plugins/drivers/utils.go b/plugins/drivers/utils.go index 15a326553..f7b7a5108 100644 --- a/plugins/drivers/utils.go +++ b/plugins/drivers/utils.go @@ -421,57 +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 - - // total ticks is derived from percent, and should always be set together - // even if "Total Ticks" is not marked as an explicit measured field - cpu.TotalTicks = ru.CpuStats.TotalTicks - - 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{ @@ -483,59 +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 - - // total ticks is derived from percent, and should always be set together - // even if "Total Ticks" is not marked as an explicit measured field - - cpu.TotalTicks = pb.Cpu.TotalTicks - - 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, } } @@ -548,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 +} diff --git a/plugins/drivers/utils_test.go b/plugins/drivers/utils_test.go new file mode 100644 index 000000000..f595aa25d --- /dev/null +++ b/plugins/drivers/utils_test.go @@ -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) +} From 46b012fd3bf892d91238fd98bc7c562d9756102e Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Sun, 31 Mar 2019 09:46:23 -0500 Subject: [PATCH 4/5] Add e2e test with raw exec job for verifying allocation resource stats --- e2e/allocstats/allocstats.go | 88 +++++++++++++++++++++++++++++ e2e/allocstats/input/raw_exec.nomad | 17 ++++++ e2e/e2e_test.go | 1 + 3 files changed, 106 insertions(+) create mode 100644 e2e/allocstats/allocstats.go create mode 100644 e2e/allocstats/input/raw_exec.nomad diff --git a/e2e/allocstats/allocstats.go b/e2e/allocstats/allocstats.go new file mode 100644 index 000000000..d6186d5b1 --- /dev/null +++ b/e2e/allocstats/allocstats.go @@ -0,0 +1,88 @@ +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) + + // Get client for node the alloc is running on + nodeClient, err := nomadClient.GetNodeClient(allocs[0].NodeID, nil) + require.Nil(err) + allocsClient := nodeClient.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() +} diff --git a/e2e/allocstats/input/raw_exec.nomad b/e2e/allocstats/input/raw_exec.nomad new file mode 100644 index 000000000..7c158c4d0 --- /dev/null +++ b/e2e/allocstats/input/raw_exec.nomad @@ -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" ] + } + } +} +} diff --git a/e2e/e2e_test.go b/e2e/e2e_test.go index 5a3580955..8e1b58ee5 100644 --- a/e2e/e2e_test.go +++ b/e2e/e2e_test.go @@ -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" From 05637ae076d8153869c5134dcfc1b9a68705cbe2 Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Mon, 1 Apr 2019 10:45:41 -0500 Subject: [PATCH 5/5] Remove unnecessary step in getting node client All allocation stats are routable from the server --- e2e/allocstats/allocstats.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/e2e/allocstats/allocstats.go b/e2e/allocstats/allocstats.go index d6186d5b1..354cc19ee 100644 --- a/e2e/allocstats/allocstats.go +++ b/e2e/allocstats/allocstats.go @@ -53,10 +53,7 @@ func (tc *BasicAllocStatsTest) TestResourceStats(f *framework.F) { allocID := allocs[0].ID e2eutil.WaitForAllocRunning(f.T(), nomadClient, allocID) - // Get client for node the alloc is running on - nodeClient, err := nomadClient.GetNodeClient(allocs[0].NodeID, nil) - require.Nil(err) - allocsClient := nodeClient.Allocations() + allocsClient := nomadClient.Allocations() // Verify allocation resource stats // This job file should result in non zero CPU and Memory stats