From 6fe0d8d62f9b013516fbe66a3272c864eac07e77 Mon Sep 17 00:00:00 2001 From: e11sy <130844513+e11sy@users.noreply.github.com> Date: Fri, 13 Jun 2025 17:59:16 +0300 Subject: [PATCH 1/4] chore(limiter): logs for block workspace --- workers/limiter/src/dbHelper.ts | 4 +++- workers/limiter/src/index.ts | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/workers/limiter/src/dbHelper.ts b/workers/limiter/src/dbHelper.ts index a2ad3726..f0e169cc 100644 --- a/workers/limiter/src/dbHelper.ts +++ b/workers/limiter/src/dbHelper.ts @@ -116,7 +116,7 @@ export class DbHelper { * @param isBlocked - new isBlocked state of the workspace */ public async changeWorkspaceBlockedState(workspaceId: string, isBlocked: boolean): Promise { - await this.workspacesCollection.updateOne( + const result = await this.workspacesCollection.updateOne( { _id: new ObjectId(workspaceId) }, { $set: { @@ -124,6 +124,8 @@ export class DbHelper { }, } ); + + console.log('result of changeWorkspaceBlockedState', JSON.stringify(result)); } /** diff --git a/workers/limiter/src/index.ts b/workers/limiter/src/index.ts index b53061ef..f2392054 100644 --- a/workers/limiter/src/index.ts +++ b/workers/limiter/src/index.ts @@ -108,6 +108,8 @@ export default class LimiterWorker extends Worker { * @param event - event to handle */ private async handleBlockWorkspaceEvent(event: BlockWorkspaceEvent): Promise { + this.logger.info('handle block workspace event', event); + const workspace = await this.dbHelper.getWorkspacesWithTariffPlans(event.workspaceId); if (!workspace) { @@ -127,6 +129,9 @@ export default class LimiterWorker extends Worker { const projectIds = workspaceProjects.map(project => project._id.toString()); await this.dbHelper.changeWorkspaceBlockedState(event.workspaceId, true); + + this.logger.info('workspace blocked in db ', event.workspaceId) + await this.redis.appendBannedProjects(projectIds); this.sendSingleWorkspaceReport(workspaceProjects, workspace, 'blocked'); From 2ee0ecc75f4e255f83c6be478f6692b84bec3e01 Mon Sep 17 00:00:00 2001 From: e11sy <130844513+e11sy@users.noreply.github.com> Date: Fri, 13 Jun 2025 20:31:24 +0300 Subject: [PATCH 2/4] chore(limiter): add regular workspace check logs --- workers/limiter/src/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workers/limiter/src/index.ts b/workers/limiter/src/index.ts index f2392054..627d76e7 100644 --- a/workers/limiter/src/index.ts +++ b/workers/limiter/src/index.ts @@ -234,6 +234,8 @@ export default class LimiterWorker extends Worker { private async prepareWorkspaceUsageUpdate( workspace: WorkspaceWithTariffPlan, projects: ProjectDBScheme[] ): Promise { + this.logger.info('prepareWorkspaceUsageUpdate'); + /** * If last charge date is not specified, then we skip checking it * In the next time the Paymaster worker starts, it will set lastChargeDate for this workspace @@ -252,6 +254,9 @@ export default class LimiterWorker extends Worker { const since = Math.floor(new Date(workspace.lastChargeDate).getTime() / MS_IN_SEC); const workspaceEventsCount = await this.dbHelper.getEventsCountByProjects(projects, since); + + this.logger.info(`workspace ${workspace._id} events count since last charge date: ${workspaceEventsCount}`); + const usedQuota = workspaceEventsCount / workspace.tariffPlan.eventsLimit; const quotaNotification = NOTIFY_ABOUT_LIMIT.reverse().find(quota => quota < usedQuota); From 30d4b88f829db37416d363b581dd66b16f26f456 Mon Sep 17 00:00:00 2001 From: e11sy <130844513+e11sy@users.noreply.github.com> Date: Fri, 13 Jun 2025 20:35:47 +0300 Subject: [PATCH 3/4] imp(limiter): unblock updates workspace in db --- workers/limiter/src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workers/limiter/src/index.ts b/workers/limiter/src/index.ts index 627d76e7..cfa971d0 100644 --- a/workers/limiter/src/index.ts +++ b/workers/limiter/src/index.ts @@ -164,16 +164,17 @@ export default class LimiterWorker extends Worker { /** * If workspace should be blocked by quota - then do not unblock it */ - const { shouldBeBlockedByQuota } = await this.prepareWorkspaceUsageUpdate(workspace, workspaceProjects); + const { shouldBeBlockedByQuota, updatedWorkspace } = await this.prepareWorkspaceUsageUpdate(workspace, workspaceProjects); if (shouldBeBlockedByQuota) { return; } await this.dbHelper.changeWorkspaceBlockedState(event.workspaceId, false); + await this.dbHelper.updateWorkspacesEventsCountAndIsBlocked([updatedWorkspace]); await this.redis.removeBannedProjects(projectIds); - this.sendSingleWorkspaceReport(workspaceProjects, workspace, 'unblocked'); + this.sendSingleWorkspaceReport(workspaceProjects, updatedWorkspace, 'unblocked'); } /** From 4f0a94a0f9708982f5caeef75a9d326c3cda8938 Mon Sep 17 00:00:00 2001 From: e11sy <130844513+e11sy@users.noreply.github.com> Date: Fri, 13 Jun 2025 20:41:40 +0300 Subject: [PATCH 4/4] imp(limiter): use methods consistently --- workers/limiter/src/dbHelper.ts | 19 ----------------- workers/limiter/src/index.ts | 8 ++++++-- workers/limiter/tests/dbHelper.test.ts | 28 -------------------------- 3 files changed, 6 insertions(+), 49 deletions(-) diff --git a/workers/limiter/src/dbHelper.ts b/workers/limiter/src/dbHelper.ts index f0e169cc..7ad4c3e5 100644 --- a/workers/limiter/src/dbHelper.ts +++ b/workers/limiter/src/dbHelper.ts @@ -109,25 +109,6 @@ export class DbHelper { await this.workspacesCollection.bulkWrite(operations); } - /** - * Method to change workspace isBlocked state - * - * @param workspaceId - id of the workspace to be changed - * @param isBlocked - new isBlocked state of the workspace - */ - public async changeWorkspaceBlockedState(workspaceId: string, isBlocked: boolean): Promise { - const result = await this.workspacesCollection.updateOne( - { _id: new ObjectId(workspaceId) }, - { - $set: { - isBlocked, - }, - } - ); - - console.log('result of changeWorkspaceBlockedState', JSON.stringify(result)); - } - /** * Returns total event counts for last billing period * diff --git a/workers/limiter/src/index.ts b/workers/limiter/src/index.ts index cfa971d0..8bb2d2c3 100644 --- a/workers/limiter/src/index.ts +++ b/workers/limiter/src/index.ts @@ -128,7 +128,10 @@ export default class LimiterWorker extends Worker { const workspaceProjects = await this.dbHelper.getProjects(event.workspaceId); const projectIds = workspaceProjects.map(project => project._id.toString()); - await this.dbHelper.changeWorkspaceBlockedState(event.workspaceId, true); + const { updatedWorkspace } = await this.prepareWorkspaceUsageUpdate(workspace, workspaceProjects); + + updatedWorkspace.isBlocked = true; + await this.dbHelper.updateWorkspacesEventsCountAndIsBlocked([updatedWorkspace]); this.logger.info('workspace blocked in db ', event.workspaceId) @@ -170,7 +173,8 @@ export default class LimiterWorker extends Worker { return; } - await this.dbHelper.changeWorkspaceBlockedState(event.workspaceId, false); + updatedWorkspace.isBlocked = false; + await this.dbHelper.updateWorkspacesEventsCountAndIsBlocked([updatedWorkspace]); await this.redis.removeBannedProjects(projectIds); diff --git a/workers/limiter/tests/dbHelper.test.ts b/workers/limiter/tests/dbHelper.test.ts index 6c4c8f0f..bdff1cb5 100644 --- a/workers/limiter/tests/dbHelper.test.ts +++ b/workers/limiter/tests/dbHelper.test.ts @@ -272,34 +272,6 @@ describe('DbHelper', () => { }); }); - describe('changeWorkspaceBlockedState', () => { - test('Should change workspace blocked state', async () => { - /** - * Arrange - */ - const workspace = createWorkspaceMock({ - plan: mockedPlans.eventsLimit10, - billingPeriodEventsCount: 0, - lastChargeDate: new Date(), - isBlocked: false, - }); - - await workspaceCollection.insertOne(workspace); - - /** - * Act - */ - await dbHelper.changeWorkspaceBlockedState(workspace._id.toString(), true); - - /** - * Assert - */ - const updatedWorkspace = await workspaceCollection.findOne({ _id: workspace._id }); - - expect(updatedWorkspace.isBlocked).toBe(true); - }); - }); - describe('getEventsCountByProject', () => { test('Should count events and repetitions for a project', async () => { /**