1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package nodes
- import (
- "encoding/json"
- "github.com/gogf/gf/encoding/gjson"
- "github.com/gogf/gf/os/grpool"
- "net/http"
- "sparrow/pkg/protocol"
- "sparrow/pkg/ruleEngine"
- "sparrow/pkg/server"
- "sparrow/pkg/utils"
- "sync"
- )
- type DingTalkRobotNode struct {
- pool *grpool.Pool
- config *DingTalkRobotNodeConfig
- client *utils.HttpClient
- bufPool sync.Pool
- }
- type DingTalkRobotNodeConfig struct {
- WebHook string `json:"webhook"` // webhook
- }
- func (d *DingTalkRobotNode) Init(ctx ruleEngine.Context, config string) error {
- d.pool = grpool.New(10)
- if config == "" {
- d.config = &DingTalkRobotNodeConfig{
- WebHook: "http://localhost:8899/test",
- }
- } else {
- c := new(DingTalkRobotNodeConfig)
- err := json.Unmarshal([]byte(config), c)
- if err != nil {
- return err
- }
- d.config = c
- }
- client := utils.NewHttpClient()
- client.SetLogger(server.Log)
- d.client = client
- return nil
- }
- func (d *DingTalkRobotNode) OnMessage(ctx ruleEngine.Context, message *protocol.Message) error {
- body, err := d.newBody(message)
- if body == nil {
- return nil
- } else if err != nil {
- return err
- }
- req, err := utils.NewRequest("POST", d.config.WebHook, gjson.New(body))
- if err != nil {
- server.Log.Error(err)
- return err
- }
- req.Header.Add("Content-Type", "application/json")
- return d.pool.Add(func() {
- res, err := d.client.Do(req)
- if err != nil {
- server.Log.Errorf("请求出错%s", err.Error())
- return
- }
- if res != nil && res.Response() != nil {
- defer res.Close()
- if res.Response().StatusCode == http.StatusOK {
- ctx.TellSuccess(message)
- }
- }
- })
- }
- func (d *DingTalkRobotNode) newBody(message *protocol.Message) (body map[string]interface{}, err error) {
- msg := map[string]interface{}{
- "content": message.AlarmMessage,
- }
- body = map[string]interface{}{
- "msgtype": "text",
- "text": msg,
- }
- return body, nil
- }
|