Browse Source

fix(websockets): add debug logs

Karol Sójko 1 year ago
parent
commit
c7b0c7dfa8

+ 7 - 1
packages/websockets/src/Domain/Handler/WebSocketMessageRequestedEventHandler.ts

@@ -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)
   }
 }

+ 7 - 1
packages/websockets/src/Infra/WebSockets/WebSocketsClientMessenger.ts

@@ -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}`)
+      }
     }
   }
 }

+ 16 - 2
packages/websockets/src/Infra/WebSockets/WebSocketsClientService.spec.ts

@@ -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)
+  })
 })