package waf import ( "context" "encoding/json" "fmt" adminApi "github.com/go-nunu/nunu-layout-advanced/api/v1/admin" "github.com/go-nunu/nunu-layout-advanced/internal/service" "github.com/go-nunu/nunu-layout-advanced/pkg/rabbitmq" amqp "github.com/rabbitmq/amqp091-go" "go.uber.org/zap" ) type WaflogService interface { PublishIpWafLogTask(ctx context.Context, req adminApi.WafLog) } func NewWaflogService( service *service.Service, mq *rabbitmq.RabbitMQ, ) WaflogService { return &waflogService{ Service: service, mq : mq, } } type waflogService struct { *service.Service mq *rabbitmq.RabbitMQ } func (s *waflogService) PublishIpWafLogTask(ctx context.Context, req adminApi.WafLog) { payload := &req msgBody, err := json.Marshal(payload) if err != nil { s.Logger.Error("序列化 WafLog 任务消息失败", zap.Error(err), zap.Int("hostId", payload.HostId), zap.Int("uid", payload.Uid), zap.Any("req", req)) return } taskCfg, ok := s.mq.GetTaskConfig("waf_log") if !ok { s.Logger.Error("无法获取“waf_Log”任务配置") return } routingKey := fmt.Sprintf("wafLog.%s", "add") publishingMsg := amqp.Publishing{ ContentType: "application/json", Body: msgBody, DeliveryMode: amqp.Persistent, } err = s.mq.PublishWithCh(taskCfg.Exchange, routingKey, publishingMsg) if err != nil { s.Logger.Error("发布 WafLog 任务消息失败", zap.Error(err), zap.Int("hostId", payload.HostId), zap.Int("uid", payload.Uid), zap.Any("req", req)) } else { s.Logger.Info("已成功发布 WafLog 任务消息", zap.Int("hostId", payload.HostId), zap.Int("uid", payload.Uid), zap.Any("req", req)) } }