mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package nodes
|
|
|
|
import (
|
|
"errors"
|
|
"pandax/pkg/rule_engine/message"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type Node interface {
|
|
Name() string
|
|
Id() string
|
|
Metadata() Metadata
|
|
MustLabels() []string
|
|
Handle(message.Message) error
|
|
|
|
AddLinkedNode(label string, node Node)
|
|
GetLinkedNode(label string) Node
|
|
GetLinkedNodes() map[string]Node
|
|
}
|
|
|
|
type bareNode struct {
|
|
name string
|
|
id string
|
|
nodes map[string]Node
|
|
meta Metadata
|
|
labels []string
|
|
}
|
|
|
|
func newBareNode(name string, id string, meta Metadata, labels []string) bareNode {
|
|
return bareNode{
|
|
name: name,
|
|
id: id,
|
|
nodes: make(map[string]Node),
|
|
meta: meta,
|
|
labels: labels,
|
|
}
|
|
}
|
|
|
|
func (n *bareNode) Name() string { return n.name }
|
|
func (n *bareNode) WithId(id string) { n.id = id }
|
|
func (n *bareNode) Id() string { return n.id }
|
|
func (n *bareNode) MustLabels() []string { return n.labels }
|
|
func (n *bareNode) AddLinkedNode(label string, node Node) { n.nodes[label] = node }
|
|
|
|
func (n *bareNode) GetLinkedNode(label string) Node {
|
|
if node, found := n.nodes[label]; found {
|
|
return node
|
|
}
|
|
logrus.Errorf("no label '%s' in node '%s'", label, n.name)
|
|
return nil
|
|
}
|
|
|
|
func (n *bareNode) GetLinkedNodes() map[string]Node { return n.nodes }
|
|
|
|
func (n *bareNode) Metadata() Metadata { return n.meta }
|
|
|
|
func (n *bareNode) Handle(message.Message) error { return errors.New("not implemented") }
|
|
|
|
func decodePath(meta Metadata, n Node) (Node, error) {
|
|
if err := meta.DecodePath(n); err != nil {
|
|
return n, err
|
|
}
|
|
return n, nil
|
|
}
|