Skip to content

Commit cb9999b

Browse files
committed
Update API types
1 parent 24c53d0 commit cb9999b

File tree

10 files changed

+94
-27
lines changed

10 files changed

+94
-27
lines changed

.pnp.cjs

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/deploy.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ GOCD_WEBHOOK_SECRET
2727
KAFKA_CONTROL_PLANE_WEBHOOK_SECRET
2828
SENTRY_OPTIONS_WEBHOOK_SECRET
2929
"
30+
# TODO: Revamp this and make it easier to add secrets & deploy to GCP
3031

3132
secrets=""
3233
for secret_name in $secret_names; do

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
"module-alias": "^2.2.2",
7070
"moment-timezone": "^0.5.39",
7171
"pg": "^8.5.1",
72-
"service-registry": "git+ssh://[email protected]:getsentry/service-registry#main",
72+
"service-registry": "git+ssh://[email protected]/getsentry/service-registry/#main",
7373
"source-map-support": "^0.5.21",
7474
"tar": "^6.2.1",
7575
"typescript": "^4.7.0"

service-registry

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/types/index.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ export interface JiraEvent {
5353
export type GenericEvent = {
5454
source: string;
5555
timestamp: number;
56-
service_name?: string; // Official service registry name if applicable
57-
data: (DatadogEvent | JiraEvent | SlackMessage)[];
56+
data: (DatadogEvent | JiraEvent | SlackMessage | ServiceSlackMessage)[];
5857
};
58+
59+
// Currently only used for Slack notifications since
60+
// service registry only contains Slack channels (and not DD or Jira or others)
61+
export interface ServiceSlackMessage {
62+
type: 'service_notification';
63+
service_name: string; // Official service registry service id
64+
text: string;
65+
blocks?: KnownBlock[] | Block[];
66+
}

src/webhooks/generic-notifier/generic-notifier.test.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import testInvalidPayload from '@test/payloads/generic-notifier/testInvalidPayload.json';
22
import testPayload from '@test/payloads/generic-notifier/testPayload.json';
3+
import testServicePayload from '@test/payloads/generic-notifier/testServicePayload.json';
34
import { createNotifierRequest } from '@test/utils/createGenericMessageRequest';
45

56
import { buildServer } from '@/buildServer';
67
import { DATADOG_API_INSTANCE } from '@/config';
7-
import { GenericEvent, SlackMessage } from '@/types';
8+
import { GenericEvent, ServiceSlackMessage, SlackMessage } from '@/types';
89
import { bolt } from '@api/slack';
910

10-
import { messageSlack } from './generic-notifier';
11+
import { handleServiceSlackMessage, messageSlack } from './generic-notifier';
1112

1213
describe('generic messages webhook', function () {
1314
let fastify;
@@ -79,6 +80,25 @@ describe('generic messages webhook', function () {
7980
});
8081
});
8182
});
83+
describe('handleServiceSlackMessage tests', function () {
84+
afterEach(function () {
85+
jest.clearAllMocks();
86+
});
87+
88+
it('writes to slack', async function () {
89+
const postMessageSpy = jest.spyOn(bolt.client.chat, 'postMessage');
90+
await handleServiceSlackMessage(
91+
testServicePayload.data[0] as ServiceSlackMessage
92+
);
93+
expect(postMessageSpy).toHaveBeenCalledTimes(1);
94+
const message = postMessageSpy.mock.calls[0][0];
95+
expect(message).toEqual({
96+
channel: 'feed-datdog',
97+
text: 'Random text here',
98+
unfurl_links: false,
99+
});
100+
});
101+
});
82102

83103
it('checks that slack msg is sent', async function () {
84104
const postMessageSpy = jest.spyOn(bolt.client.chat, 'postMessage');

src/webhooks/generic-notifier/generic-notifier.ts

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { v1 } from '@datadog/datadog-api-client';
22
import * as Sentry from '@sentry/node';
33
import { 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

712
import { bolt } from '@/api/slack';
813
import { 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
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"source": "example-service",
3+
"timestamp": 0,
4+
"data": [
5+
{
6+
"type": "service_notification",
7+
"service_name": "eng_pipes_gh_notifications",
8+
"text": "Random text here",
9+
"channels": ["#aaaaaa"]
10+
}
11+
]
12+
}

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8237,7 +8237,7 @@ fsevents@~2.1.2:
82378237
pg: ^8.5.1
82388238
pino-pretty: ^4.5.0
82398239
prettier: ^2.4.1
8240-
service-registry: "git+ssh://[email protected]:getsentry/service-registry#main"
8240+
service-registry: "git+ssh://[email protected]/getsentry/service-registry/#main"
82418241
source-map-support: ^0.5.21
82428242
tar: ^6.2.1
82438243
ts-jest: ^29.1.5
@@ -8258,10 +8258,10 @@ fsevents@~2.1.2:
82588258
languageName: node
82598259
linkType: hard
82608260

8261-
"service-registry@git+ssh://[email protected]:getsentry/service-registry#main":
8261+
"service-registry@git+ssh://[email protected]/getsentry/service-registry/#main":
82628262
version: 1.0.3
8263-
resolution: "service-registry@git+ssh://[email protected]:getsentry/service-registry#commit=90c2ec6c0448c131a65d035d183baa5338769ad2"
8264-
checksum: 3a8ac0cbef1f680526c68d1d1a3a8fb82801097c2644ea4d7ca0f73cf3dce8c118a6ca69dad1ef39e346ce1611e9df1db3f57a2e9e9f0da37eec9811f6237110
8263+
resolution: "service-registry@git+ssh://[email protected]/getsentry/service-registry/#commit=547cedf90415cf59e1fa074591e3d962762dbbda"
8264+
checksum: fd335a638d5715857575ec64acc663eed2ca6589ab1c5f104de65b8af933c697799aab4a45102565e33c97b2899b2703f0d0e589a4747e7cf5bb87ce5d2695d7
82658265
languageName: node
82668266
linkType: hard
82678267

0 commit comments

Comments
 (0)