diff --git a/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts b/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts index 67546b9ef9..ac7c4f150b 100644 --- a/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts +++ b/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts @@ -53,4 +53,5 @@ export enum MetricsKeys { AiChatTurnLatencyMs = 'ai-chat/turn-latency-ms', AiChatStepLatencyMs = 'ai-chat/step-latency-ms', AiChatTtftMs = 'ai-chat/ttft-ms', + WorkspaceMetadataCacheLocalEviction = 'workspace-metadata-cache/local-eviction', } diff --git a/packages/twenty-server/src/engine/workspace-cache/services/__tests__/workspace-cache.service.spec.ts b/packages/twenty-server/src/engine/workspace-cache/services/__tests__/workspace-cache.service.spec.ts index 647accea52..51af77831b 100644 --- a/packages/twenty-server/src/engine/workspace-cache/services/__tests__/workspace-cache.service.spec.ts +++ b/packages/twenty-server/src/engine/workspace-cache/services/__tests__/workspace-cache.service.spec.ts @@ -5,6 +5,7 @@ import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/wo import { type CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; +import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; import { WORKSPACE_CACHE_KEY } from 'src/engine/workspace-cache/decorators/workspace-cache.decorator'; import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service'; @@ -61,6 +62,12 @@ describe('WorkspaceCacheService', () => { get: jest.fn(), }, }, + { + provide: MetricsService, + useValue: { + incrementCounterBy: jest.fn(), + }, + }, ], }).compile(); diff --git a/packages/twenty-server/src/engine/workspace-cache/services/workspace-cache.service.ts b/packages/twenty-server/src/engine/workspace-cache/services/workspace-cache.service.ts index d67246f4a7..5adc529a2f 100644 --- a/packages/twenty-server/src/engine/workspace-cache/services/workspace-cache.service.ts +++ b/packages/twenty-server/src/engine/workspace-cache/services/workspace-cache.service.ts @@ -10,6 +10,8 @@ import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/wo import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; +import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; +import { MetricsKeys } from 'src/engine/core-modules/metrics/types/metrics-keys.type'; import { PromiseMemoizer } from 'src/engine/twenty-orm/storage/promise-memoizer.storage'; import { WORKSPACE_CACHE_KEY, @@ -33,7 +35,7 @@ const LOCAL_ENTRY_TTL_MS = 30 * 60 * 1000; // 30 minutes const MEMOIZER_TTL_MS = 10_000; // 10 seconds const STALE_VERSION_TTL_MS = 5_000; // 5 seconds const MAX_LOCAL_STALE_VERSIONS = 5; // 5 stale versions -const MAX_LOCAL_CACHE_ENTRIES = 1_000; +const MAX_LOCAL_CACHE_ENTRIES = 7_500; const MIN_EVICT_KEYS = 100; type CacheDataType = WorkspaceCacheDataMap[WorkspaceCacheKeyName]; @@ -60,6 +62,7 @@ export class WorkspaceCacheService implements OnModuleInit { private readonly cacheStorage: CacheStorageService, private readonly discoveryService: DiscoveryService, private readonly reflector: Reflector, + private readonly metricsService: MetricsService, ) {} async onModuleInit() { @@ -444,6 +447,11 @@ export class WorkspaceCacheService implements OnModuleInit { for (const [key] of toEvict) { this.localCache.delete(key); } + + this.metricsService.incrementCounterBy({ + key: MetricsKeys.WorkspaceMetadataCacheLocalEviction, + amount: toEvict.length, + }); } private cleanupStaleVersions( diff --git a/packages/twenty-server/src/engine/workspace-cache/workspace-cache.module.ts b/packages/twenty-server/src/engine/workspace-cache/workspace-cache.module.ts index 38683acafd..a873207fc5 100644 --- a/packages/twenty-server/src/engine/workspace-cache/workspace-cache.module.ts +++ b/packages/twenty-server/src/engine/workspace-cache/workspace-cache.module.ts @@ -2,10 +2,11 @@ import { Module } from '@nestjs/common'; import { DiscoveryModule } from '@nestjs/core'; import { CacheStorageModule } from 'src/engine/core-modules/cache-storage/cache-storage.module'; +import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service'; @Module({ - imports: [CacheStorageModule, DiscoveryModule], + imports: [CacheStorageModule, DiscoveryModule, MetricsModule], providers: [WorkspaceCacheService], exports: [WorkspaceCacheService], })