Fix v2 stats conversion NPD & add test
This commit is contained in:
parent
5e3f23764e
commit
04f3743a09
@ -110,7 +110,10 @@ func ContainerStatsFromV1(spec *v1.ContainerSpec, stats []*v1.ContainerStats) []
|
|||||||
stat.Memory = &val.Memory
|
stat.Memory = &val.Memory
|
||||||
}
|
}
|
||||||
if spec.HasNetwork {
|
if spec.HasNetwork {
|
||||||
stat.Network.Interfaces = val.Network.Interfaces
|
// TODO: Handle TcpStats
|
||||||
|
stat.Network = &NetworkStats{
|
||||||
|
Interfaces: val.Network.Interfaces,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if spec.HasFilesystem {
|
if spec.HasFilesystem {
|
||||||
if len(val.Filesystem) == 1 {
|
if len(val.Filesystem) == 1 {
|
||||||
@ -118,7 +121,7 @@ func ContainerStatsFromV1(spec *v1.ContainerSpec, stats []*v1.ContainerStats) []
|
|||||||
TotalUsageBytes: &val.Filesystem[0].Usage,
|
TotalUsageBytes: &val.Filesystem[0].Usage,
|
||||||
BaseUsageBytes: &val.Filesystem[0].BaseUsage,
|
BaseUsageBytes: &val.Filesystem[0].BaseUsage,
|
||||||
}
|
}
|
||||||
} else {
|
} else if len(val.Filesystem) > 1 {
|
||||||
// Cannot handle multiple devices per container.
|
// Cannot handle multiple devices per container.
|
||||||
glog.Errorf("failed to handle multiple devices for container. Skipping Filesystem stats")
|
glog.Errorf("failed to handle multiple devices for container. Skipping Filesystem stats")
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ var (
|
|||||||
labels = map[string]string{"foo": "bar"}
|
labels = map[string]string{"foo": "bar"}
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConvertSpec(t *testing.T) {
|
func TestContanierSpecFromV1(t *testing.T) {
|
||||||
v1Spec := v1.ContainerSpec{
|
v1Spec := v1.ContainerSpec{
|
||||||
CreationTime: timestamp,
|
CreationTime: timestamp,
|
||||||
Labels: labels,
|
Labels: labels,
|
||||||
@ -96,6 +96,105 @@ func TestConvertSpec(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContainerStatsFromV1(t *testing.T) {
|
||||||
|
v1Spec := v1.ContainerSpec{
|
||||||
|
CreationTime: timestamp,
|
||||||
|
Labels: labels,
|
||||||
|
HasCpu: true,
|
||||||
|
Cpu: v1.CpuSpec{
|
||||||
|
Limit: 2048,
|
||||||
|
MaxLimit: 4096,
|
||||||
|
Mask: "cpu_mask",
|
||||||
|
},
|
||||||
|
HasMemory: true,
|
||||||
|
Memory: v1.MemorySpec{
|
||||||
|
Limit: 2048,
|
||||||
|
Reservation: 1024,
|
||||||
|
SwapLimit: 8192,
|
||||||
|
},
|
||||||
|
HasNetwork: true,
|
||||||
|
HasFilesystem: true,
|
||||||
|
HasDiskIo: true,
|
||||||
|
HasCustomMetrics: true,
|
||||||
|
CustomMetrics: []v1.MetricSpec{{
|
||||||
|
Name: "foo",
|
||||||
|
Type: v1.MetricGauge,
|
||||||
|
Format: v1.IntType,
|
||||||
|
Units: "bars",
|
||||||
|
}},
|
||||||
|
Image: "gcr.io/kubernetes/kubernetes:v1",
|
||||||
|
}
|
||||||
|
v1Stats := v1.ContainerStats{
|
||||||
|
Timestamp: timestamp,
|
||||||
|
Memory: v1.MemoryStats{
|
||||||
|
Usage: 1,
|
||||||
|
Cache: 2,
|
||||||
|
RSS: 3,
|
||||||
|
WorkingSet: 4,
|
||||||
|
Failcnt: 5,
|
||||||
|
ContainerData: v1.MemoryStatsMemoryData{
|
||||||
|
Pgfault: 1,
|
||||||
|
Pgmajfault: 2,
|
||||||
|
},
|
||||||
|
HierarchicalData: v1.MemoryStatsMemoryData{
|
||||||
|
Pgfault: 10,
|
||||||
|
Pgmajfault: 20,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Network: v1.NetworkStats{
|
||||||
|
InterfaceStats: v1.InterfaceStats{
|
||||||
|
Name: "",
|
||||||
|
RxBytes: 1,
|
||||||
|
RxPackets: 2,
|
||||||
|
RxErrors: 3,
|
||||||
|
RxDropped: 4,
|
||||||
|
TxBytes: 5,
|
||||||
|
TxPackets: 6,
|
||||||
|
TxErrors: 7,
|
||||||
|
TxDropped: 8,
|
||||||
|
},
|
||||||
|
Interfaces: []v1.InterfaceStats{{
|
||||||
|
Name: "eth0",
|
||||||
|
RxBytes: 10,
|
||||||
|
RxPackets: 20,
|
||||||
|
RxErrors: 30,
|
||||||
|
RxDropped: 40,
|
||||||
|
TxBytes: 50,
|
||||||
|
TxPackets: 60,
|
||||||
|
TxErrors: 70,
|
||||||
|
TxDropped: 80,
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
Filesystem: []v1.FsStats{{
|
||||||
|
Device: "dev0",
|
||||||
|
Limit: 500,
|
||||||
|
Usage: 100,
|
||||||
|
BaseUsage: 50,
|
||||||
|
Available: 300,
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
expectedV2Stats := ContainerStats{
|
||||||
|
Timestamp: timestamp,
|
||||||
|
Cpu: &v1Stats.Cpu,
|
||||||
|
DiskIo: &v1Stats.DiskIo,
|
||||||
|
Memory: &v1Stats.Memory,
|
||||||
|
Network: &NetworkStats{
|
||||||
|
Interfaces: v1Stats.Network.Interfaces,
|
||||||
|
},
|
||||||
|
Filesystem: &FilesystemStats{
|
||||||
|
TotalUsageBytes: &v1Stats.Filesystem[0].Usage,
|
||||||
|
BaseUsageBytes: &v1Stats.Filesystem[0].BaseUsage,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
v2Stats := ContainerStatsFromV1(&v1Spec, []*v1.ContainerStats{&v1Stats})
|
||||||
|
actualV2Stats := *v2Stats[0]
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(expectedV2Stats, actualV2Stats) {
|
||||||
|
t.Errorf("Converted stats differs from expectation!\nExpected: %+v\n Got: %+v\n", expectedV2Stats, actualV2Stats)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestInstCpuStats(t *testing.T) {
|
func TestInstCpuStats(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
last *v1.ContainerStats
|
last *v1.ContainerStats
|
||||||
|
Loading…
Reference in New Issue
Block a user