@@ -2,7 +2,12 @@ import { v1 } from '@datadog/datadog-api-client';
22import * as Sentry from '@sentry/node' ;
33import { FastifyReply , FastifyRequest } from 'fastify' ;
44
5- import { DatadogEvent , GenericEvent , SlackMessage } from '@types' ;
5+ import {
6+ DatadogEvent ,
7+ GenericEvent ,
8+ ServiceSlackMessage ,
9+ SlackMessage ,
10+ } from '@types' ;
611
712import { bolt } from '@/api/slack' ;
813import { DATADOG_API_INSTANCE } from '@/config' ;
@@ -37,7 +42,9 @@ export async function genericEventNotifier(
3742 }
3843 for ( const message of body . data ) {
3944 if ( message . type === 'slack' ) {
40- await messageSlack ( message , body . service_name ) ;
45+ await messageSlack ( message ) ;
46+ } else if ( message . type === 'service_notification' ) {
47+ await handleServiceSlackMessage ( message ) ;
4148 } else if ( message . type === 'datadog' ) {
4249 await sendEventToDatadog ( message , body . timestamp ) ;
4350 }
@@ -71,26 +78,46 @@ export async function sendEventToDatadog(
7178 }
7279}
7380
74- export async function messageSlack (
75- message : SlackMessage ,
76- service_name ?: string
77- ) {
78- let channels = message . channels ?? [ ] ;
79- if ( service_name !== undefined ) {
80- const service = getService ( service_name ) ;
81- channels = service . alert_slack_channels ;
81+ export async function messageSlack ( message : SlackMessage ) {
82+ const channels = message . channels ?? [ ] ;
83+ for ( const channel of channels ) {
84+ try {
85+ const args = {
86+ channel : channel ,
87+ blocks : message . blocks ,
88+ text : message . text ,
89+ unfurl_links : false ,
90+ } ;
91+ if ( message . blocks ) {
92+ args . blocks = message . blocks ;
93+ }
94+ await bolt . client . chat . postMessage ( args ) ;
95+ } catch ( err ) {
96+ Sentry . setContext ( 'slack msg:' , { text : message . text } ) ;
97+ Sentry . captureException ( err ) ;
98+ }
8299 }
100+ }
101+
102+ export async function handleServiceSlackMessage ( message : ServiceSlackMessage ) {
103+ const service = getService ( message . service_name ) ;
104+ const channels = service . alert_slack_channels ?? [ ] ;
83105 for ( const channel of channels ) {
84106 try {
85- await bolt . client . chat . postMessage ( {
107+ const args = {
86108 channel : channel ,
87109 blocks : message . blocks ,
88110 text : message . text ,
89111 unfurl_links : false ,
90- } ) ;
112+ } ;
113+ if ( message . blocks ) {
114+ args . blocks = message . blocks ;
115+ }
116+ await bolt . client . chat . postMessage ( args ) ;
91117 } catch ( err ) {
92118 Sentry . setContext ( 'slack msg:' , { text : message . text } ) ;
93119 Sentry . captureException ( err ) ;
94120 }
95121 }
122+ // TODO: Add other types of notifications (Jira, DD, etc.)
96123}
0 commit comments