规则引擎

This commit is contained in:
PandaGoAdmin
2023-02-28 14:56:21 +08:00
parent e048fa53a5
commit 8e854ce527
13 changed files with 667 additions and 215 deletions

View 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
}