log_node.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package nodes
  2. import (
  3. "context"
  4. "encoding/json"
  5. "github.com/gogf/gf/v2/os/glog"
  6. "sparrow/pkg/protocol"
  7. "sparrow/pkg/ruleEngine"
  8. )
  9. type LogNodeConfig struct {
  10. Stdout bool `json:"stdout"` // 标准控制台输出
  11. }
  12. // LogNode 日志打印节点
  13. type LogNode struct {
  14. config *LogNodeConfig
  15. }
  16. func (l *LogNode) Init(ctx ruleEngine.Context, config string) error {
  17. if config == "" {
  18. l.config = &LogNodeConfig{
  19. Stdout: false,
  20. }
  21. } else {
  22. c := new(LogNodeConfig)
  23. err := json.Unmarshal([]byte(config), c)
  24. if err != nil {
  25. return err
  26. }
  27. l.config = c
  28. }
  29. glog.SetPath("./log_nodes/")
  30. glog.SetStdoutPrint(false)
  31. return nil
  32. }
  33. func (l *LogNode) OnMessage(ctx ruleEngine.Context, message *protocol.Message) error {
  34. if l.config.Stdout {
  35. //l.mLog.Infof("日志节点:[设备ID:%s][消息类型:%s][消息内容:%s]", message.MetaData["device_id"], message.Type, message.Data)
  36. if did, ok := message.MetaData["device_id"]; ok {
  37. glog.File(did.(string)).Infof(context.Background(), "[消息类型:%s][消息内容:%s]", message.Type, message.Data)
  38. }
  39. }
  40. ctx.TellNext(message, protocol.Success)
  41. return nil
  42. }