in pkg/skoop/ui/json.go [70:143]
func (f *JSONFormatter) toSummary() (*DiagnoseSummary, error) {
summary := &DiagnoseSummary{
Cluster: DiagnoseSummaryCluster{Suspicions: []DiagnoseSummarySuspicion{}},
}
for _, sus := range f.globalSuspicions {
summary.Cluster.Suspicions = append(summary.Cluster.Suspicions, DiagnoseSummarySuspicion{
Level: sus.Level,
Message: sus.Message,
})
}
for _, node := range f.p.Nodes() {
n := DiagnoseSummaryNode{
ID: node.GetID(),
Type: node.GetType(),
Suspicions: nil,
Actions: map[string]DiagnoseSummaryNodeAction{},
}
for _, suspicion := range node.GetSuspicions() {
n.Suspicions = append(n.Suspicions, DiagnoseSummarySuspicion{
Level: suspicion.Level,
Message: suspicion.Message,
})
}
for link, action := range node.Actions {
n.Actions[link.GetID()] = DiagnoseSummaryNodeAction{
Type: action.Type,
}
}
initiative := node.ActionOf(nil)
if initiative != nil {
n.Actions[""] = DiagnoseSummaryNodeAction{
Type: initiative.Type,
}
}
summary.Nodes = append(summary.Nodes, n)
}
for _, link := range f.p.Links() {
l := DiagnoseSummaryLink{
ID: link.GetID(),
Type: link.Type,
Destination: link.Destination.GetID(),
Packet: DiagnoseSummaryPacket{
Src: link.Packet.Src.String(),
Dst: link.Packet.Dst.String(),
Dport: link.Packet.Dport,
Protocol: link.Packet.Protocol,
// todo: encapped packet
},
}
if link.Source != nil {
l.Source = link.Source.GetID()
}
if link.SourceAttribute != nil {
l.SourceAttribute = link.SourceAttribute.GetAttrs()
}
if link.DestinationAttribute != nil {
l.DestinationAttribute = link.DestinationAttribute.GetAttrs()
}
summary.Links = append(summary.Links, l)
}
return summary, nil
}