mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
规则引擎
This commit is contained in:
65
pkg/rule_engine/nodes/node.go
Normal file
65
pkg/rule_engine/nodes/node.go
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user