67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package data
|
|
|
|
import (
|
|
"context"
|
|
"datart/data/mongo"
|
|
"datart/data/rabbit"
|
|
"datart/log"
|
|
"fmt"
|
|
|
|
rmq "github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp"
|
|
)
|
|
|
|
var eventXQK = rabbit.XQK{
|
|
Exchange: "event_produce_exchange",
|
|
// Key: "event_produce_key",
|
|
}
|
|
|
|
var eventPublisher *rmq.Publisher
|
|
|
|
func init() {
|
|
publisher, err := rabbit.NewPublisher(context.Background(), "default", &eventXQK)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
eventPublisher = publisher
|
|
}
|
|
|
|
func PublishEvent(ctx context.Context, event *mongo.Event) error {
|
|
data, err := event.Marshall()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
result, err := eventPublisher.Publish(ctx, rmq.NewMessage(data))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
switch result.Outcome.(type) {
|
|
case *rmq.StateAccepted:
|
|
// TODO: "Message accepted"
|
|
case *rmq.StateReleased:
|
|
return fmt.Errorf("message not routed: %v", event)
|
|
case *rmq.StateRejected:
|
|
return fmt.Errorf("message rejected: %v", event)
|
|
default:
|
|
return fmt.Errorf("invalid message %v state: %v", event, result.Outcome)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GenEvent(data []byte, ip string) (*mongo.Event, error) {
|
|
alarm, err := mongo.UnmarshallToAlarm(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return alarm.ConvertToEvent(ip), nil
|
|
}
|
|
|
|
func CloseEventPublisher(ctx context.Context) {
|
|
if err := eventPublisher.Close(ctx); err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|