2023-10-18 07:18:32 -07:00
|
|
|
package producer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/common/client/alert"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/common/client/sns"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/fly/internal/metrics"
|
|
|
|
"github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
|
|
|
|
|
|
|
// SNSProducer is a producer for SNS.
|
|
|
|
type SNSProducer struct {
|
|
|
|
producer *sns.Producer
|
|
|
|
alertClient alert.AlertClient
|
|
|
|
metrics metrics.Metrics
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewSNSProducer creates a new SNSProducer.
|
|
|
|
func NewSNSProducer(producer *sns.Producer, alertClient alert.AlertClient, metrics metrics.Metrics, logger *zap.Logger) *SNSProducer {
|
|
|
|
return &SNSProducer{
|
|
|
|
producer: producer,
|
|
|
|
alertClient: alertClient,
|
|
|
|
metrics: metrics,
|
|
|
|
logger: logger,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Push pushes a VAAEvent to SNS.
|
2023-11-27 07:31:35 -08:00
|
|
|
func (p *SNSProducer) Push(ctx context.Context, n *Notification) error {
|
|
|
|
body, err := json.Marshal(n.Event)
|
2023-10-18 07:18:32 -07:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2023-11-27 07:31:35 -08:00
|
|
|
deduplicationID := fmt.Sprintf("gossip-event-%s", n.ID)
|
|
|
|
p.logger.Debug("Publishing signedVaa event", zap.String("groupID", n.ID))
|
|
|
|
err = p.producer.SendMessage(ctx, n.ID, deduplicationID, string(body))
|
2023-10-18 07:18:32 -07:00
|
|
|
if err == nil {
|
2023-11-27 07:31:35 -08:00
|
|
|
p.metrics.IncVaaSendNotification(vaa.ChainID(n.EmitterChain))
|
2023-10-18 07:18:32 -07:00
|
|
|
}
|
|
|
|
return err
|
|
|
|
}
|