mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 10:58:35 +08:00
规则链
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package nodes
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/XM-GO/PandaKit/httpclient"
|
||||
"github.com/sirupsen/logrus"
|
||||
"pandax/pkg/rule_engine/message"
|
||||
)
|
||||
@@ -9,7 +12,7 @@ type externalRestapiNode struct {
|
||||
bareNode
|
||||
RestEndpointUrlPattern string `json:"restEndpointUrlPattern" yaml:"restEndpointUrlPattern"`
|
||||
RequestMethod string `json:"requestMethod" yaml:"requestMethod"`
|
||||
headers map[string]string `json:"headers" yaml:"headers"`
|
||||
Headers map[string]string `json:"headers" yaml:"headers"`
|
||||
}
|
||||
|
||||
type externalRestapiNodeFactory struct{}
|
||||
@@ -26,6 +29,73 @@ func (f externalRestapiNodeFactory) Create(id string, meta Metadata) (Node, erro
|
||||
|
||||
func (n *externalRestapiNode) Handle(msg message.Message) error {
|
||||
logrus.Infof("%s handle message '%s'", n.Name(), msg.GetType())
|
||||
|
||||
successLableNode := n.GetLinkedNode("Success")
|
||||
failureLableNode := n.GetLinkedNode("Failure")
|
||||
if n.RequestMethod == "GET" {
|
||||
resp := httpclient.NewRequest(n.RestEndpointUrlPattern).Get()
|
||||
if resp.StatusCode != 200 {
|
||||
return errors.New("网络请求失败")
|
||||
}
|
||||
var response map[string]interface{}
|
||||
err := json.Unmarshal(resp.Body, &response)
|
||||
if err != nil && failureLableNode != nil {
|
||||
return failureLableNode.Handle(msg)
|
||||
} else {
|
||||
if successLableNode != nil {
|
||||
metadata := msg.GetMetadata()
|
||||
for key, value := range response {
|
||||
metadata.SetKeyValue(key, value)
|
||||
}
|
||||
msg.SetMetadata(metadata)
|
||||
return successLableNode.Handle(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
if n.RequestMethod == "POST" {
|
||||
binary, _ := msg.MarshalBinary()
|
||||
req := httpclient.NewRequest(n.RestEndpointUrlPattern)
|
||||
for key, value := range n.Headers {
|
||||
req.Header(key, value)
|
||||
}
|
||||
resp := req.PostJson(string(binary))
|
||||
if resp.StatusCode != 200 {
|
||||
if failureLableNode != nil {
|
||||
return failureLableNode.Handle(msg)
|
||||
}
|
||||
} else {
|
||||
if successLableNode != nil {
|
||||
return successLableNode.Handle(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
/*if n.RequestMethod == "PUT" {
|
||||
binary, _ := msg.MarshalBinary()
|
||||
req := httpclient.NewRequest(n.RestEndpointUrlPattern)
|
||||
for key,value := range n.Headers {
|
||||
req.Header(key,value)
|
||||
}
|
||||
_, err := http.HttpPut(n.RestEndpointUrlPattern, n.Headers, nil, binary)
|
||||
if err != nil {
|
||||
if failureLableNode != nil {
|
||||
return failureLableNode.Handle(msg)
|
||||
}
|
||||
} else {
|
||||
if successLableNode != nil {
|
||||
return successLableNode.Handle(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
if n.RequestMethod == "DELETE" {
|
||||
_, err := http.HttpDelete(n.RestEndpointUrlPattern)
|
||||
if err != nil {
|
||||
if failureLableNode != nil {
|
||||
return failureLableNode.Handle(msg)
|
||||
}
|
||||
} else {
|
||||
if successLableNode != nil {
|
||||
return successLableNode.Handle(msg)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user