From 0989f37c2132b10799c6e633f97892b3b77767c5 Mon Sep 17 00:00:00 2001 From: panda <18610165312@163.com> Date: Sat, 15 Apr 2023 19:42:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3input=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/rule_engine/instance.go | 18 +-- pkg/rule_engine/manifest/manifest_sample.json | 138 +++++++++--------- pkg/rule_engine/nodes/action_my_node.go | 29 ++++ pkg/rule_engine/nodes/init.go | 2 + pkg/rule_engine/nodes/input_node.go | 2 +- 5 files changed, 107 insertions(+), 82 deletions(-) create mode 100644 pkg/rule_engine/nodes/action_my_node.go diff --git a/pkg/rule_engine/instance.go b/pkg/rule_engine/instance.go index 81ca10b..c67716e 100644 --- a/pkg/rule_engine/instance.go +++ b/pkg/rule_engine/instance.go @@ -64,23 +64,13 @@ func newInstanceWithManifest(m *manifest.Manifest) (*ruleChainInstance, []error) continue } //可以有多个类型 - split := strings.Split(edge.Properties["type"].(string), "/") - for _, ty := range split { - originalNode.AddLinkedNode(ty, targetNode) - } - } - for name, node := range r.nodes { - targetNodes := node.GetLinkedNodes() - mustLabels := node.MustLabels() - for _, label := range mustLabels { - if _, found := targetNodes[label]; !found { - err := fmt.Errorf("the label '%s' in node '%s' no exist'", label, name) - errs = append(errs, err) - continue + if ty, ok := edge.Properties["lineType"]; ok { + split := strings.Split(ty.(string), "/") + for _, ty := range split { + originalNode.AddLinkedNode(ty, targetNode) } } } - return r, errs } diff --git a/pkg/rule_engine/manifest/manifest_sample.json b/pkg/rule_engine/manifest/manifest_sample.json index b80e944..2cd9164 100644 --- a/pkg/rule_engine/manifest/manifest_sample.json +++ b/pkg/rule_engine/manifest/manifest_sample.json @@ -1,125 +1,129 @@ { "nodes": [ { - "id": "3b6b8df4-445f-4e70-9674-f7aa486b3d81", + "id": "d2cc123c-d0d7-4830-8547-21d5e52b4011", "type": "InputNode", - "x": 280, - "y": 280, + "x": 120, + "y": 340, "properties": { - "icon": "/src/assets/icon_module/svg/start.svg", - "debugMode": false + "debugMode": false, + "status": false }, - "zIndex": 1002, + "zIndex": 1013, "text": { - "x": 290, - "y": 280, + "x": 130, + "y": 340, "value": "输入" } }, { - "id": "45afb241-1977-4cbf-8af3-c12844d5666b", - "type": "DelayNode", - "x": 600, - "y": 160, + "id": "6c497a23-ece2-41fa-927d-9e2e9a1c7316", + "type": "MyNode", + "x": 400, + "y": 340, "properties": { - "icon": "/src/assets/icon_module/svg/function.svg", - "debugMode": false + "debugMode": false, + "status": false }, - "zIndex": 1004, + "zIndex": 1002, "text": { - "x": 610, - "y": 160, - "value": "延迟" + "x": 410, + "y": 340, + "value": "测试节点" } }, { - "id": "95047b03-e966-4685-b625-3cea27415706", - "type": "SwitchNode", - "x": 600, - "y": 460, + "id": "7235c088-73e0-4683-982a-77b0fd31313d", + "type": "MyNode", + "x": 660, + "y": 340, "properties": { - "icon": "/src/assets/icon_module/svg/switch.svg", "debugMode": false, - "scripts": "return {\n msg: msg,\n metadata: metadata,\n msgType: msgType\n};" + "status": false }, - "zIndex": 1006, + "zIndex": 1005, "text": { - "x": 610, - "y": 460, - "value": "分流" + "x": 670, + "y": 340, + "value": "测试节点" } } ], "edges": [ { - "id": "fde7f2de-cc0f-467d-a614-4505f058dc2a", + "id": "b6c8b0c4-1481-40d3-b345-780f96efa909", "type": "bezier-link", - "sourceNodeId": "3b6b8df4-445f-4e70-9674-f7aa486b3d81", - "targetNodeId": "45afb241-1977-4cbf-8af3-c12844d5666b", + "sourceNodeId": "d2cc123c-d0d7-4830-8547-21d5e52b4011", + "targetNodeId": "6c497a23-ece2-41fa-927d-9e2e9a1c7316", "startPoint": { - "x": 340, - "y": 280 + "x": 180, + "y": 340 }, "endPoint": { - "x": 540, - "y": 160 + "x": 340, + "y": 340 }, "properties": { - "type": "Success" + "lineType": "True" }, - "zIndex": 1007, + "zIndex": 1003, "pointsList": [ + { + "x": 180, + "y": 340 + }, + { + "x": 280, + "y": 340 + }, + { + "x": 240, + "y": 340 + }, { "x": 340, - "y": 280 - }, - { - "x": 440, - "y": 280 - }, - { - "x": 440, - "y": 160 - }, - { - "x": 540, - "y": 160 + "y": 340 } ] }, { - "id": "986878cc-a9be-42b5-afc0-6c0a169c4e4d", + "id": "1e38236e-716b-44e7-8d96-6424f63fdacc", "type": "bezier-link", - "sourceNodeId": "3b6b8df4-445f-4e70-9674-f7aa486b3d81", - "targetNodeId": "95047b03-e966-4685-b625-3cea27415706", + "sourceNodeId": "6c497a23-ece2-41fa-927d-9e2e9a1c7316", + "targetNodeId": "7235c088-73e0-4683-982a-77b0fd31313d", "startPoint": { - "x": 340, - "y": 280 + "x": 460, + "y": 340 }, "endPoint": { - "x": 540, - "y": 460 + "x": 600, + "y": 340 }, "properties": { - "type": "Failure" + "lineType": "Next" }, - "zIndex": 1008, + "text": { + "x": 530, + "y": 340, + "value": "Next" + }, + "zIndex": 1006, "pointsList": [ { - "x": 340, - "y": 280 + "x": 460, + "y": 340 }, { - "x": 440, - "y": 280 + "x": 560, + "y": 340 }, { - "x": 440, - "y": 460 + "x": 500, + "y": 340 }, { - "x": 540, - "y": 460 + "x": 600, + "y": 340 } ] } diff --git a/pkg/rule_engine/nodes/action_my_node.go b/pkg/rule_engine/nodes/action_my_node.go new file mode 100644 index 0000000..a62dfcb --- /dev/null +++ b/pkg/rule_engine/nodes/action_my_node.go @@ -0,0 +1,29 @@ +package nodes + +import ( + "log" + "pandax/pkg/rule_engine/message" +) + +type MyNode struct { + bareNode +} + +type myNodeFactory struct{} + +func (f myNodeFactory) Name() string { return "MyNode" } +func (f myNodeFactory) Category() string { return NODE_CATEGORY_ACTION } +func (f myNodeFactory) Labels() []string { return []string{"Next", "Next2"} } +func (f myNodeFactory) Create(id string, meta Metadata) (Node, error) { + node := &MyNode{ + bareNode: newBareNode(f.Name(), id, meta, f.Labels()), + } + return decodePath(meta, node) +} + +func (n *MyNode) Handle(msg message.Message) error { + nextLableNode := n.GetLinkedNode("Next") + + log.Println(nextLableNode.Name()) + return nil +} diff --git a/pkg/rule_engine/nodes/init.go b/pkg/rule_engine/nodes/init.go index f7d8eed..043a619 100644 --- a/pkg/rule_engine/nodes/init.go +++ b/pkg/rule_engine/nodes/init.go @@ -31,4 +31,6 @@ func init() { RegisterFactory(externalSendSmsNodeFactory{}) RegisterFactory(externalRuleChainNodeFactory{}) + RegisterFactory(myNodeFactory{}) + } diff --git a/pkg/rule_engine/nodes/input_node.go b/pkg/rule_engine/nodes/input_node.go index 9fa3c1c..89f794e 100644 --- a/pkg/rule_engine/nodes/input_node.go +++ b/pkg/rule_engine/nodes/input_node.go @@ -15,7 +15,7 @@ type inputNodeFactory struct{} func (f inputNodeFactory) Name() string { return "InputNode" } func (f inputNodeFactory) Category() string { return NODE_CATEGORY_OTHERS } -func (f inputNodeFactory) Labels() []string { return []string{} } +func (f inputNodeFactory) Labels() []string { return []string{"True"} } func (f inputNodeFactory) Create(id string, meta Metadata) (Node, error) { node := &inputNode{ bareNode: newBareNode(InputNodeName, id, meta, f.Labels()), From 04751d52c9ebaf430e047e54ff9aaec458cb5d62 Mon Sep 17 00:00:00 2001 From: panda <18610165312@163.com> Date: Sat, 15 Apr 2023 20:00:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3input=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/rule_engine/instance.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/rule_engine/instance.go b/pkg/rule_engine/instance.go index c67716e..7228aac 100644 --- a/pkg/rule_engine/instance.go +++ b/pkg/rule_engine/instance.go @@ -63,12 +63,14 @@ func newInstanceWithManifest(m *manifest.Manifest) (*ruleChainInstance, []error) errs = append(errs, err) continue } - //可以有多个类型 - if ty, ok := edge.Properties["lineType"]; ok { - split := strings.Split(ty.(string), "/") - for _, ty := range split { - originalNode.AddLinkedNode(ty, targetNode) - } + types := make([]string, 0) + if _, ok := edge.Properties["lineType"]; !ok { + types = append(types, "True") + } else { + types = strings.Split(edge.Properties["lineType"].(string), "/") + } + for _, ty := range types { + originalNode.AddLinkedNode(ty, targetNode) } } return r, errs