func()

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
}