pkg/skoop/model/netnode.go (64 lines of code) (raw):

package model import ( "github.com/samber/lo" ) type NetNodeType string const ( NetNodeTypePod = "pod" NetNodeTypeNode = "node" NetNodeTypeExternal = "external" NetNodeTypeGeneric = "generic" ) type NetNode struct { Type NetNodeType ID string Actions map[*Link]*Action Suspicions []Suspicion initiative *Action } type NetNodeAction interface { Send(dst Endpoint, protocol Protocol) ([]Transmission, error) Receive(upstream *Link) ([]Transmission, error) } func NewNetNode(id string, nodeType NetNodeType) *NetNode { return &NetNode{ ID: id, Type: nodeType, Actions: make(map[*Link]*Action), } } func (n *NetNode) DoAction(action *Action) { if action.Input == nil { n.initiative = action return } n.Actions[action.Input] = action } func (n *NetNode) ActionOf(input *Link) *Action { if input == nil { return n.initiative } return n.Actions[input] } func (n *NetNode) AddSuspicion(level SuspicionLevel, msg string) { n.Suspicions = append(n.Suspicions, Suspicion{ Level: level, Message: msg, }) } func (n *NetNode) GetID() string { return n.ID } func (n *NetNode) GetType() NetNodeType { return n.Type } func (n *NetNode) GetSuspicions() []Suspicion { return n.Suspicions } func (n *NetNode) MaxSuspicionLevel() SuspicionLevel { if len(n.Suspicions) == 0 { return SuspicionLevelInfo } levels := lo.Map(n.Suspicions, func(s Suspicion, _ int) SuspicionLevel { return s.Level }) return lo.Max(levels) }