From d4ac0695033d7a3292d76f59939064eb4bdcffbc Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 10 Aug 2023 15:07:00 +0800 Subject: [PATCH] fix webhook logs --- packages/api/src/routers/svc/webhooks.ts | 73 +++++++++++++----------- packages/api/src/utils/logger.ts | 2 +- 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/packages/api/src/routers/svc/webhooks.ts b/packages/api/src/routers/svc/webhooks.ts index c2f9d6762..dd596e74e 100644 --- a/packages/api/src/routers/svc/webhooks.ts +++ b/packages/api/src/routers/svc/webhooks.ts @@ -28,7 +28,7 @@ export function webhooksServiceRouter() { try { const data = JSON.parse(msgStr) - const { userId, type } = data + const { userId, type } = data as { userId: string; type: string } if (!userId || !type) { logger.info('No userId or type found in message') res.status(400).send('Bad Request') @@ -36,7 +36,7 @@ export function webhooksServiceRouter() { } // example: PAGE_CREATED - const eventType = `${type as string}_${req.params.action}`.toUpperCase() + const eventType = `${type}_${req.params.action}`.toUpperCase() const webhooks = await getRepository(Webhook) .createQueryBuilder() .where('user_id = :userId', { userId }) @@ -46,47 +46,54 @@ export function webhooksServiceRouter() { if (webhooks.length <= 0) { logger.info( - 'No active webhook found for user', - userId, - 'and eventType', - eventType + 'No active webhook found for user ' + + userId + + ' and eventType ' + + eventType ) res.status(200).send('No webhook found') return } // trigger webhooks - for (const webhook of webhooks) { - const url = webhook.url - const method = webhook.method as Method - const body = JSON.stringify({ - action: req.params.action, - userId, - [type]: data, - }) - - logger.info('triggering webhook', url) - try { - await axios.request({ - url, - method, - headers: { - 'Content-Type': webhook.contentType, - }, - data: body, - }) - } catch (error) { - if (axios.isAxiosError(error)) { - logger.error(error.response) - } else { - logger.error(error) + await Promise.all( + webhooks.map((webhook) => { + const url = webhook.url + const method = webhook.method as Method + const body = { + action: req.params.action, + userId, + [type]: data, } - } - } + + logger.info('triggering webhook', { url, method }) + + return axios + .request({ + url, + method, + headers: { + 'Content-Type': webhook.contentType, + }, + data: body, + timeout: 10000, // 10s + }) + .then((response) => { + logger.info('webhook triggered', response.data) + }) + .catch((error) => { + if (axios.isAxiosError(error)) { + logger.info('webhook failed', error.response) + } else { + logger.info('webhook failed', error) + } + }) + }) + ) res.status(200).send('OK') } catch (err) { - logger.info('trigger webhook failed', err) + logger.error('trigger webhook failed', err) res.status(500).send(err) } }) diff --git a/packages/api/src/utils/logger.ts b/packages/api/src/utils/logger.ts index fdfa12832..4e198cb21 100644 --- a/packages/api/src/utils/logger.ts +++ b/packages/api/src/utils/logger.ts @@ -99,7 +99,7 @@ const truncateObjectDeep = (object: any, length: number): any => { const truncateDeep = (obj: any, level: number): any => { // reach maximum call stack size - if (level >= 6) { + if (level >= 5) { return obj }