mirror of
https://github.com/standardnotes/server
synced 2026-07-14 00:01:54 -04:00
fix(websockets): add debug logs
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user