From 1f4b26d269a92f5b43455ce3a3cf3d4f15f0d099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Fri, 5 Jan 2024 12:21:24 +0100 Subject: [PATCH] fix(syncing-server): add debug logs for checking traffic abuse --- .../syncing-server/src/Bootstrap/Container.ts | 1 + .../CheckForTrafficAbuse.spec.ts | 7 ++++++- .../CheckForTrafficAbuse/CheckForTrafficAbuse.ts | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/syncing-server/src/Bootstrap/Container.ts b/packages/syncing-server/src/Bootstrap/Container.ts index 1422834b5..600b8d2b9 100644 --- a/packages/syncing-server/src/Bootstrap/Container.ts +++ b/packages/syncing-server/src/Bootstrap/Container.ts @@ -967,6 +967,7 @@ export class ContainerConfigLoader { new CheckForTrafficAbuse( container.get(TYPES.Sync_MetricsStore), container.get(TYPES.Sync_Timer), + container.get(TYPES.Sync_Logger), ), ) diff --git a/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.spec.ts b/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.spec.ts index c5de78ced..44483b2d9 100644 --- a/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.spec.ts +++ b/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.spec.ts @@ -3,16 +3,21 @@ import { MetricsStoreInterface } from '../../../Metrics/MetricsStoreInterface' import { CheckForTrafficAbuse } from './CheckForTrafficAbuse' import { MetricsSummary } from '../../../Metrics/MetricsSummary' import { Metric } from '../../../Metrics/Metric' +import { Logger } from 'winston' describe('CheckForTrafficAbuse', () => { let metricsStore: MetricsStoreInterface let timer: TimerInterface let timeframeLengthInMinutes: number let threshold: number + let logger: Logger - const createUseCase = () => new CheckForTrafficAbuse(metricsStore, timer) + const createUseCase = () => new CheckForTrafficAbuse(metricsStore, timer, logger) beforeEach(() => { + logger = {} as jest.Mocked + logger.debug = jest.fn() + const metricsSummary: MetricsSummary = { sum: 101, max: 0, diff --git a/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.ts b/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.ts index 8a7948fde..400b68a2d 100644 --- a/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.ts +++ b/packages/syncing-server/src/Domain/UseCase/Syncing/CheckForTrafficAbuse/CheckForTrafficAbuse.ts @@ -5,14 +5,21 @@ import { CheckForTrafficAbuseDTO } from './CheckForTrafficAbuseDTO' import { MetricsStoreInterface } from '../../../Metrics/MetricsStoreInterface' import { Metric } from '../../../Metrics/Metric' import { MetricsSummary } from '../../../Metrics/MetricsSummary' +import { Logger } from 'winston' export class CheckForTrafficAbuse implements UseCaseInterface { constructor( private metricsStore: MetricsStoreInterface, private timer: TimerInterface, + private logger: Logger, ) {} async execute(dto: CheckForTrafficAbuseDTO): Promise> { + this.logger.debug(`Checking for traffic abuse for metric: ${dto.metricToCheck}.`, { + codeTag: 'CheckForTrafficAbuse', + userUuid: dto.userUuid, + }) + const userUuidOrError = Uuid.create(dto.userUuid) if (userUuidOrError.isFailed()) { return Result.fail(userUuidOrError.getError()) @@ -35,6 +42,14 @@ export class CheckForTrafficAbuse implements UseCaseInterface { to: this.timer.getUTCDate(), }) + this.logger.debug( + `Current traffic abuse metric ${dto.metricToCheck} value in timeframe of ${dto.timeframeLengthInMinutes} minutes is ${metricsSummary.sum}. The threshold is ${dto.threshold}`, + { + codeTag: 'CheckForTrafficAbuse', + userUuid: dto.userUuid, + }, + ) + if (metricsSummary.sum > dto.threshold) { return Result.fail( `Traffic abuse detected for metric: ${metricToCheck.props.name}. Usage ${metricsSummary.sum} is greater than threshold ${dto.threshold}`,