Eq() for ContainerInfo
This commit is contained in:
parent
b13ed41a09
commit
d7b1b9c849
@ -110,6 +110,52 @@ type ContainerInfo struct {
|
|||||||
StatsPercentiles *ContainerStatsPercentiles `json:"stats_summary,omitempty"`
|
StatsPercentiles *ContainerStatsPercentiles `json:"stats_summary,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContainerInfo may be (un)marshaled by json or other en/decoder. In that
|
||||||
|
// case, the Timestamp field in each stats/sample may not be precisely
|
||||||
|
// en/decoded. This will lead to small but acceptable differences between a
|
||||||
|
// ContainerInfo and its encode-then-decode version. Eq() is used to compare
|
||||||
|
// two ContainerInfo accepting small difference (<10ms) of Time fields.
|
||||||
|
func (self *ContainerInfo) Eq(b *ContainerInfo) bool {
|
||||||
|
|
||||||
|
// If both self and b are nil, then Eq() returns true
|
||||||
|
if self == nil {
|
||||||
|
return b == nil
|
||||||
|
}
|
||||||
|
if b == nil {
|
||||||
|
return self == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// For fields other than time.Time, we will compare them precisely.
|
||||||
|
// This would require that any slice should have same order.
|
||||||
|
if !reflect.DeepEqual(self.ContainerReference, b.ContainerReference) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(self.Subcontainers, b.Subcontainers) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(self.Spec, b.Spec) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(self.StatsPercentiles, b.StatsPercentiles) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, expectedStats := range b.Stats {
|
||||||
|
selfStats := self.Stats[i]
|
||||||
|
if !expectedStats.Eq(selfStats) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, expectedSample := range b.Samples {
|
||||||
|
selfSample := self.Samples[i]
|
||||||
|
if !expectedSample.Eq(selfSample) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (self *ContainerInfo) StatsAfter(ref time.Time) []*ContainerStats {
|
func (self *ContainerInfo) StatsAfter(ref time.Time) []*ContainerStats {
|
||||||
n := len(self.Stats) + 1
|
n := len(self.Stats) + 1
|
||||||
for i, s := range self.Stats {
|
for i, s := range self.Stats {
|
||||||
|
Loading…
Reference in New Issue
Block a user