mirror of
https://github.com/weaveworks/scope.git
synced 2026-08-19 04:16:21 +00:00
Split PacketCount to Egress and Ingress
Also, 1 packet may be counted in N topologies, so you can't rely on the sum of all packet counts across topologies having any relation to the sampling data.
This commit is contained in:
+21
-10
@@ -119,8 +119,11 @@ func interpolateCounts(r report.Report) {
|
||||
factor := 1.0 / rate
|
||||
for _, topology := range r.Topologies() {
|
||||
for _, emd := range topology.EdgeMetadatas {
|
||||
if emd.PacketCount != nil {
|
||||
*emd.PacketCount = uint64(float64(*emd.PacketCount) * factor)
|
||||
if emd.EgressPacketCount != nil {
|
||||
*emd.EgressPacketCount = uint64(float64(*emd.EgressPacketCount) * factor)
|
||||
}
|
||||
if emd.IngressPacketCount != nil {
|
||||
*emd.IngressPacketCount = uint64(float64(*emd.IngressPacketCount) * factor)
|
||||
}
|
||||
if emd.EgressByteCount != nil {
|
||||
*emd.EgressByteCount = uint64(float64(*emd.EgressByteCount) * factor)
|
||||
@@ -261,17 +264,21 @@ func (s *Sniffer) Merge(p Packet, rpt report.Report) {
|
||||
}
|
||||
|
||||
emd := rpt.Address.EdgeMetadatas[edgeID]
|
||||
if emd.PacketCount == nil {
|
||||
emd.PacketCount = new(uint64)
|
||||
}
|
||||
*emd.PacketCount++
|
||||
|
||||
if egress {
|
||||
if emd.EgressPacketCount == nil {
|
||||
emd.EgressPacketCount = new(uint64)
|
||||
}
|
||||
*emd.EgressPacketCount++
|
||||
if emd.EgressByteCount == nil {
|
||||
emd.EgressByteCount = new(uint64)
|
||||
}
|
||||
*emd.EgressByteCount += uint64(p.Network)
|
||||
} else {
|
||||
if emd.IngressPacketCount == nil {
|
||||
emd.IngressPacketCount = new(uint64)
|
||||
}
|
||||
*emd.IngressPacketCount++
|
||||
if emd.IngressByteCount == nil {
|
||||
emd.IngressByteCount = new(uint64)
|
||||
}
|
||||
@@ -296,17 +303,21 @@ func (s *Sniffer) Merge(p Packet, rpt report.Report) {
|
||||
}
|
||||
|
||||
emd := rpt.Endpoint.EdgeMetadatas[edgeID]
|
||||
if emd.PacketCount == nil {
|
||||
emd.PacketCount = new(uint64)
|
||||
}
|
||||
*emd.PacketCount++
|
||||
|
||||
if egress {
|
||||
if emd.EgressPacketCount == nil {
|
||||
emd.EgressPacketCount = new(uint64)
|
||||
}
|
||||
*emd.EgressPacketCount++
|
||||
if emd.EgressByteCount == nil {
|
||||
emd.EgressByteCount = new(uint64)
|
||||
}
|
||||
*emd.EgressByteCount += uint64(p.Transport)
|
||||
} else {
|
||||
if emd.IngressPacketCount == nil {
|
||||
emd.IngressPacketCount = new(uint64)
|
||||
}
|
||||
*emd.IngressPacketCount++
|
||||
if emd.IngressByteCount == nil {
|
||||
emd.IngressByteCount = new(uint64)
|
||||
}
|
||||
|
||||
@@ -22,9 +22,10 @@ func TestInterpolateCounts(t *testing.T) {
|
||||
r.Sampling.Count = samplingCount
|
||||
r.Sampling.Total = samplingTotal
|
||||
r.Endpoint.EdgeMetadatas[edgeID] = report.EdgeMetadata{
|
||||
PacketCount: newu64(packetCount),
|
||||
IngressByteCount: newu64(byteCount),
|
||||
EgressByteCount: newu64(byteCount),
|
||||
EgressPacketCount: newu64(packetCount),
|
||||
IngressPacketCount: newu64(packetCount),
|
||||
EgressByteCount: newu64(byteCount),
|
||||
IngressByteCount: newu64(byteCount),
|
||||
}
|
||||
|
||||
interpolateCounts(r)
|
||||
@@ -35,7 +36,10 @@ func TestInterpolateCounts(t *testing.T) {
|
||||
apply = func(v uint64) uint64 { return uint64(factor * float64(v)) }
|
||||
emd = r.Endpoint.EdgeMetadatas[edgeID]
|
||||
)
|
||||
if want, have := apply(packetCount), (*emd.PacketCount); want != have {
|
||||
if want, have := apply(packetCount), (*emd.EgressPacketCount); want != have {
|
||||
t.Errorf("want %d packets, have %d", want, have)
|
||||
}
|
||||
if want, have := apply(packetCount), (*emd.IngressPacketCount); want != have {
|
||||
t.Errorf("want %d packets, have %d", want, have)
|
||||
}
|
||||
if want, have := apply(byteCount), (*emd.EgressByteCount); want != have {
|
||||
|
||||
@@ -72,8 +72,8 @@ func TestMerge(t *testing.T) {
|
||||
},
|
||||
EdgeMetadatas: report.EdgeMetadatas{
|
||||
report.MakeEdgeID(srcEndpointNodeID, dstEndpointNodeID): report.EdgeMetadata{
|
||||
PacketCount: newu64(1),
|
||||
EgressByteCount: newu64(256),
|
||||
EgressPacketCount: newu64(1),
|
||||
EgressByteCount: newu64(256),
|
||||
},
|
||||
},
|
||||
NodeMetadatas: report.NodeMetadatas{
|
||||
@@ -95,8 +95,8 @@ func TestMerge(t *testing.T) {
|
||||
},
|
||||
EdgeMetadatas: report.EdgeMetadatas{
|
||||
report.MakeEdgeID(srcAddressNodeID, dstAddressNodeID): report.EdgeMetadata{
|
||||
PacketCount: newu64(1),
|
||||
EgressByteCount: newu64(512),
|
||||
EgressPacketCount: newu64(1),
|
||||
EgressByteCount: newu64(512),
|
||||
},
|
||||
},
|
||||
NodeMetadatas: report.NodeMetadatas{
|
||||
|
||||
Reference in New Issue
Block a user