// AggregateMetadata gives the metadata of an edge from the perspective of the // srcRenderableID. Since an edgeID can have multiple edges on the address // level, it uses the supplied mapping function to translate address IDs to // renderable node (mapped) IDs. func (m LeafMap) AggregateMetadata(rpt report.Report, srcRenderableID, dstRenderableID string) AggregateMetadata { t := m.Selector(rpt) metadata := report.EdgeMetadata{} for edgeID, edgeMeta := range t.EdgeMetadatas { src, dst, ok := report.ParseEdgeID(edgeID) if !ok { log.Printf("bad edge ID %q", edgeID) continue } if src != report.TheInternet { mapped, _ := m.Mapper(t.NodeMetadatas[src]) src = mapped.ID } if dst != report.TheInternet { mapped, _ := m.Mapper(t.NodeMetadatas[dst]) dst = mapped.ID } if src == srcRenderableID && dst == dstRenderableID { metadata.Flatten(edgeMeta) } } return AggregateMetadataOf(metadata) }
// EdgeMetadata gives the metadata of an edge from the perspective of the // srcRenderableID. Since an edgeID can have multiple edges on the address // level, it uses the supplied mapping function to translate address IDs to // renderable node (mapped) IDs. func (m LeafMap) EdgeMetadata(rpt report.Report, srcRenderableID, dstRenderableID string) report.EdgeMetadata { t := m.Selector(rpt) metadata := report.EdgeMetadata{} for edgeID, edgeMeta := range t.EdgeMetadatas { src, dst, ok := report.ParseEdgeID(edgeID) if !ok { log.Printf("bad edge ID %q", edgeID) continue } srcs, dsts := report.MakeIDList(src), report.MakeIDList(dst) if src != report.TheInternet { mapped := m.Mapper(t.NodeMetadatas[src]) srcs = ids(mapped) } if dst != report.TheInternet { mapped := m.Mapper(t.NodeMetadatas[dst]) dsts = ids(mapped) } if srcs.Contains(srcRenderableID) && dsts.Contains(dstRenderableID) { metadata = metadata.Flatten(edgeMeta) } } return metadata }