diff --git a/apps/meteor/app/integrations/server/api/api.ts b/apps/meteor/app/integrations/server/api/api.ts index 00bf1d911f565..8e1a37c8e76fa 100644 --- a/apps/meteor/app/integrations/server/api/api.ts +++ b/apps/meteor/app/integrations/server/api/api.ts @@ -14,11 +14,15 @@ import { APIClass } from '../../../api/server/ApiClass'; import type { RateLimiterOptions } from '../../../api/server/api'; import { API, defaultRateLimiterOptions } from '../../../api/server/api'; import type { FailureResult, GenericRouteExecutionContext, SuccessResult, UnavailableResult } from '../../../api/server/definition'; +import { loggerMiddleware } from '../../../api/server/middlewares/logger'; +import { metricsMiddleware } from '../../../api/server/middlewares/metrics'; +import { tracerSpanMiddleware } from '../../../api/server/middlewares/tracer'; import type { WebhookResponseItem } from '../../../lib/server/functions/processWebhookMessage'; import { processWebhookMessage } from '../../../lib/server/functions/processWebhookMessage'; +import { metrics } from '../../../metrics/server'; import { settings } from '../../../settings/server'; import { IsolatedVMScriptEngine } from '../lib/isolated-vm/isolated-vm'; -import { incomingLogger } from '../logger'; +import { incomingLogger, integrationLogger } from '../logger'; import { addOutgoingIntegration } from '../methods/outgoing/addOutgoingIntegration'; import { deleteOutgoingIntegration } from '../methods/outgoing/deleteOutgoingIntegration'; @@ -247,8 +251,9 @@ async function executeIntegrationRest( return API.v1.success({ responses: messageResponse }); } return API.v1.success(); - } catch ({ error, message }: any) { - return API.v1.failure(error || message); + } catch (err: any) { + incomingLogger.error({ msg: 'Error processing webhook message', err }); + return API.v1.failure(err?.error || err?.message || 'Unknown error'); } } @@ -378,6 +383,11 @@ const Api = new WebHookAPI({ prettyJson: process.env.NODE_ENV === 'development', }); +Api.router + .use(loggerMiddleware(integrationLogger)) + .use(metricsMiddleware({ basePathRegex: new RegExp(/^\/hooks\//), api: Api, settings, summary: metrics.rocketchatRestApi })) + .use(tracerSpanMiddleware); + const middleware = async (c: Context, next: Next): Promise => { const { req } = c; if (req.raw.headers.get('content-type') !== 'application/x-www-form-urlencoded') { diff --git a/apps/meteor/app/integrations/server/logger.ts b/apps/meteor/app/integrations/server/logger.ts index 47da6bcf22c51..73c77ccebac2d 100644 --- a/apps/meteor/app/integrations/server/logger.ts +++ b/apps/meteor/app/integrations/server/logger.ts @@ -1,6 +1,6 @@ import { Logger } from '@rocket.chat/logger'; -const logger = new Logger('Integrations'); +export const integrationLogger = new Logger('Integrations'); -export const incomingLogger = logger.section('Incoming WebHook'); -export const outgoingLogger = logger.section('Outgoing WebHook'); +export const incomingLogger = integrationLogger.section('Incoming WebHook'); +export const outgoingLogger = integrationLogger.section('Outgoing WebHook');