// interpolateCounts compensates for sampling by artifically inflating counts // throughout the report. It should be run once for each report, within the // probe, before it gets emitted into the rest of the system. func interpolateCounts(r report.Report) { rate := r.Sampling.Rate() if rate >= 1.0 { return } factor := 1.0 / rate for _, topology := range r.Topologies() { for _, nmd := range topology.Nodes { for _, emd := range nmd.Edges { 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) } if emd.IngressByteCount != nil { *emd.IngressByteCount = uint64(float64(*emd.IngressByteCount) * factor) } } } } }
// Tag implements Tagger. func (t Tagger) Tag(r report.Report) (report.Report, error) { other := report.MakeNodeMetadataWith(map[string]string{report.HostNodeID: t.hostNodeID}) for _, topology := range r.Topologies() { for id, md := range topology.NodeMetadatas { topology.NodeMetadatas[id] = md.Merge(other) } } return r, nil }
func (t originHostTagger) Tag(r report.Report) (report.Report, error) { for _, topology := range r.Topologies() { md := report.NodeMetadata{report.HostNodeID: t.hostNodeID} for nodeID := range topology.NodeMetadatas { topology.NodeMetadatas[nodeID].Merge(md) } } return r, nil }
// Tag implements Tagger. func (t Tagger) Tag(r report.Report) (report.Report, error) { md := report.NewNodeMetadata(map[string]string{report.HostNodeID: t.hostNodeID}) for _, topology := range r.Topologies() { for nodeID := range topology.NodeMetadatas { topology.NodeMetadatas[nodeID].Merge(md) } } return r, nil }
func getRenderingContext(r report.Report, n RenderableNode) (multiContainer, multiHost bool) { var ( originHosts = map[string]struct{}{} originContainers = map[string]struct{}{} ) for _, id := range n.Origins { for _, topology := range r.Topologies() { if nmd, ok := topology.Nodes[id]; ok { originHosts[report.ExtractHostID(nmd)] = struct{}{} if id, ok := nmd.Metadata[docker.ContainerID]; ok { originContainers[id] = struct{}{} } } // Return early if possible multiHost = len(originHosts) > 1 multiContainer = len(originContainers) > 1 if multiHost && multiContainer { return } } } return }