fix(websockets): add debug logs

This commit is contained in:
Karol Sójko
2023-09-04 09:47:20 +02:00
parent df20dd46db
commit c7b0c7dfa8
3 changed files with 30 additions and 4 deletions
@@ -1,14 +1,20 @@
import { DomainEventHandlerInterface, WebSocketMessageRequestedEvent } from '@standardnotes/domain-events'
import { inject, injectable } from 'inversify'
import { Logger } from 'winston'
import TYPES from '../../Bootstrap/Types'
import { ClientMessengerInterface } from '../../Client/ClientMessengerInterface'
@injectable()
export class WebSocketMessageRequestedEventHandler implements DomainEventHandlerInterface {
constructor(@inject(TYPES.WebSocketsClientMessenger) private webSocketsClientMessenger: ClientMessengerInterface) {}
constructor(
@inject(TYPES.WebSocketsClientMessenger) private webSocketsClientMessenger: ClientMessengerInterface,
@inject(TYPES.Logger) private logger: Logger,
) {}
async handle(event: WebSocketMessageRequestedEvent): Promise<void> {
this.logger.debug(`Sending message to user ${event.payload.userUuid}`)
await this.webSocketsClientMessenger.send(event.payload.userUuid, event.payload.message)
}
}
@@ -1,4 +1,5 @@
import { AxiosInstance } from 'axios'
import { Logger } from 'winston'
import { inject, injectable } from 'inversify'
import TYPES from '../../Bootstrap/Types'
@@ -12,13 +13,15 @@ export class WebSocketsClientMessenger implements ClientMessengerInterface {
private webSocketsConnectionRepository: WebSocketsConnectionRepositoryInterface,
@inject(TYPES.HTTPClient) private httpClient: AxiosInstance,
@inject(TYPES.WEBSOCKETS_API_URL) private webSocketsApiUrl: string,
@inject(TYPES.Logger) private logger: Logger,
) {}
async send(userUuid: string, message: string): Promise<void> {
const userConnections = await this.webSocketsConnectionRepository.findAllByUserUuid(userUuid)
for (const connectionUuid of userConnections) {
await this.httpClient.request({
this.logger.debug(`Sending message to connection ${connectionUuid} for user ${userUuid}`)
const response = await this.httpClient.request({
method: 'POST',
url: `${this.webSocketsApiUrl}/${connectionUuid}`,
headers: {
@@ -30,6 +33,9 @@ export class WebSocketsClientMessenger implements ClientMessengerInterface {
/* istanbul ignore next */
(status: number) => status >= 200 && status < 500,
})
if (response.status !== 200) {
this.logger.error(`Could not send message to connection ${connectionUuid} for user ${userUuid}`)
}
}
}
}
@@ -2,6 +2,7 @@ import 'reflect-metadata'
import { WebSocketsConnectionRepositoryInterface } from '../../Domain/WebSockets/WebSocketsConnectionRepositoryInterface'
import { AxiosInstance } from 'axios'
import { Logger } from 'winston'
import { WebSocketsClientMessenger } from './WebSocketsClientMessenger'
@@ -9,11 +10,12 @@ describe('WebSocketsClientMessenger', () => {
let connectionIds: string[]
let webSocketsConnectionRepository: WebSocketsConnectionRepositoryInterface
let httpClient: AxiosInstance
let logger: Logger
const webSocketsApiUrl = 'http://test-websockets'
const createService = () =>
new WebSocketsClientMessenger(webSocketsConnectionRepository, httpClient, webSocketsApiUrl)
new WebSocketsClientMessenger(webSocketsConnectionRepository, httpClient, webSocketsApiUrl, logger)
beforeEach(() => {
connectionIds = ['1', '2']
@@ -22,7 +24,11 @@ describe('WebSocketsClientMessenger', () => {
webSocketsConnectionRepository.findAllByUserUuid = jest.fn().mockReturnValue(connectionIds)
httpClient = {} as jest.Mocked<AxiosInstance>
httpClient.request = jest.fn()
httpClient.request = jest.fn().mockReturnValue({ status: 200 })
logger = {} as jest.Mocked<Logger>
logger.debug = jest.fn()
logger.error = jest.fn()
})
it('should send a message to all user connections', async () => {
@@ -40,4 +46,12 @@ describe('WebSocketsClientMessenger', () => {
)
})
})
it('should log an error if message could not be sent', async () => {
httpClient.request = jest.fn().mockReturnValue({ status: 400 })
await createService().send('1-2-3', 'message')
expect(logger.error).toHaveBeenCalledTimes(connectionIds.length)
})
})