diff --git a/packages/twenty-server/src/engine/core-modules/cache-storage/cache-storage.module-factory.ts b/packages/twenty-server/src/engine/core-modules/cache-storage/cache-storage.module-factory.ts index 303cf9cd21..164d6a2362 100644 --- a/packages/twenty-server/src/engine/core-modules/cache-storage/cache-storage.module-factory.ts +++ b/packages/twenty-server/src/engine/core-modules/cache-storage/cache-storage.module-factory.ts @@ -1,10 +1,17 @@ +import { Logger } from '@nestjs/common'; + import { type CacheModuleOptions } from '@nestjs/cache-manager'; -import { redisStore } from 'cache-manager-redis-yet'; +import { redisInsStore } from 'cache-manager-redis-yet'; +import { createClient } from 'redis'; import { CacheStorageType } from 'src/engine/core-modules/cache-storage/types/cache-storage-type.enum'; import { type TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; +const cacheStorageLogger = new Logger('CacheStorage'); + +const REDIS_PING_INTERVAL_MS = 60_000; + export const cacheStorageModuleFactory = ( twentyConfigService: TwentyConfigService, ): CacheModuleOptions => { @@ -30,8 +37,23 @@ export const cacheStorageModuleFactory = ( return { ...cacheModuleOptions, - store: redisStore, - url: redisUrl, + store: async () => { + const redisClient = createClient({ + url: redisUrl, + pingInterval: REDIS_PING_INTERVAL_MS, + }); + + redisClient.on('error', (err) => { + cacheStorageLogger.error('Redis cache-storage client error', err); + }); + + await redisClient.connect(); + + return redisInsStore( + redisClient as Parameters[0], + { ttl: cacheStorageTtl * 1000 }, + ); + }, }; } default: diff --git a/packages/twenty-server/src/engine/core-modules/session-storage/session-storage.module-factory.ts b/packages/twenty-server/src/engine/core-modules/session-storage/session-storage.module-factory.ts index c8aab18e95..457f20769c 100644 --- a/packages/twenty-server/src/engine/core-modules/session-storage/session-storage.module-factory.ts +++ b/packages/twenty-server/src/engine/core-modules/session-storage/session-storage.module-factory.ts @@ -1,5 +1,7 @@ import { createHash } from 'crypto'; +import { Logger } from '@nestjs/common'; + import RedisStore from 'connect-redis'; import { createClient } from 'redis'; @@ -8,6 +10,10 @@ import type session from 'express-session'; import { CacheStorageType } from 'src/engine/core-modules/cache-storage/types/cache-storage-type.enum'; import { type TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; +const sessionStorageLogger = new Logger('SessionStorage'); + +const REDIS_PING_INTERVAL_MS = 60_000; + export const getSessionStorageOptions = ( twentyConfigService: TwentyConfigService, ): session.SessionOptions => { @@ -57,6 +63,11 @@ export const getSessionStorageOptions = ( const redisClient = createClient({ url: connectionString, + pingInterval: REDIS_PING_INTERVAL_MS, + }); + + redisClient.on('error', (err) => { + sessionStorageLogger.error('Redis session-store client error', err); }); redisClient.connect().catch((err) => {