|
| 1 | +package services |
| 2 | + |
| 3 | +import ( |
| 4 | + "bytes" |
| 5 | + "context" |
| 6 | + texttemplate "text/template" |
| 7 | + |
| 8 | + slackutil "github.com/argoproj/notifications-engine/pkg/util/slack" |
| 9 | +) |
| 10 | + |
| 11 | +type DatadogNotification struct { |
| 12 | + Attachments string `json:"attachments,omitempty"` |
| 13 | + Blocks string `json:"blocks,omitempty"` |
| 14 | + GroupingKey string `json:"groupingKey"` |
| 15 | + NotifyBroadcast bool `json:"notifyBroadcast"` |
| 16 | + DeliveryPolicy slackutil.DeliveryPolicy `json:"deliveryPolicy"` |
| 17 | +} |
| 18 | + |
| 19 | +func (n *DatadogNotification) GetTemplater(name string, f texttemplate.FuncMap) (Templater, error) { |
| 20 | + slackAttachments, err := texttemplate.New(name).Funcs(f).Parse(n.Attachments) |
| 21 | + if err != nil { |
| 22 | + return nil, err |
| 23 | + } |
| 24 | + slackBlocks, err := texttemplate.New(name).Funcs(f).Parse(n.Blocks) |
| 25 | + if err != nil { |
| 26 | + return nil, err |
| 27 | + } |
| 28 | + groupingKey, err := texttemplate.New(name).Funcs(f).Parse(n.GroupingKey) |
| 29 | + if err != nil { |
| 30 | + return nil, err |
| 31 | + } |
| 32 | + |
| 33 | + return func(notification *Notification, vars map[string]interface{}) error { |
| 34 | + if notification.Slack == nil { |
| 35 | + notification.Slack = &SlackNotification{} |
| 36 | + } |
| 37 | + var slackAttachmentsData bytes.Buffer |
| 38 | + if err := slackAttachments.Execute(&slackAttachmentsData, vars); err != nil { |
| 39 | + return err |
| 40 | + } |
| 41 | + notification.Slack.Attachments = slackAttachmentsData.String() |
| 42 | + |
| 43 | + var slackBlocksData bytes.Buffer |
| 44 | + if err := slackBlocks.Execute(&slackBlocksData, vars); err != nil { |
| 45 | + return err |
| 46 | + } |
| 47 | + notification.Slack.Blocks = slackBlocksData.String() |
| 48 | + |
| 49 | + var groupingKeyData bytes.Buffer |
| 50 | + if err := groupingKey.Execute(&groupingKeyData, vars); err != nil { |
| 51 | + return err |
| 52 | + } |
| 53 | + notification.Slack.GroupingKey = groupingKeyData.String() |
| 54 | + |
| 55 | + notification.Slack.NotifyBroadcast = n.NotifyBroadcast |
| 56 | + notification.Slack.DeliveryPolicy = n.DeliveryPolicy |
| 57 | + return nil |
| 58 | + }, nil |
| 59 | +} |
| 60 | + |
| 61 | +type DatadogOptions struct { |
| 62 | + Username string `json:"username"` |
| 63 | + Icon string `json:"icon"` |
| 64 | + Token string `json:"token"` |
| 65 | + SigningSecret string `json:"signingSecret"` |
| 66 | + Channels []string `json:"channels"` |
| 67 | + InsecureSkipVerify bool `json:"insecureSkipVerify"` |
| 68 | + ApiURL string `json:"apiURL"` |
| 69 | + DisableUnfurl bool `json:"disableUnfurl"` |
| 70 | +} |
| 71 | + |
| 72 | +type datadogService struct { |
| 73 | + opts DatadogOptions |
| 74 | +} |
| 75 | + |
| 76 | +func NewDatadogService(opts DatadogOptions) NotificationService { |
| 77 | + return &datadogService{opts: opts} |
| 78 | +} |
| 79 | + |
| 80 | +func (s *datadogService) Send(notification Notification, dest Destination) error { |
| 81 | + slackNotification, msgOptions, err := buildMessageOptions(notification, dest, s.opts) |
| 82 | + if err != nil { |
| 83 | + return err |
| 84 | + } |
| 85 | + return slackutil.NewThreadedClient( |
| 86 | + newSlackClient(s.opts), |
| 87 | + slackState, |
| 88 | + ).SendMessage( |
| 89 | + context.TODO(), |
| 90 | + dest.Recipient, |
| 91 | + slackNotification.GroupingKey, |
| 92 | + slackNotification.NotifyBroadcast, |
| 93 | + slackNotification.DeliveryPolicy, |
| 94 | + msgOptions, |
| 95 | + ) |
| 96 | +} |
0 commit comments