From ad6b289c41a76e92e3785b02144ed88aea085f07 Mon Sep 17 00:00:00 2001 From: devthejo Date: Wed, 5 Mar 2025 14:21:46 +0100 Subject: [PATCH] fix: redis sentinels --- .kontinuous/env/preprod/values.yaml | 7 ++++++- .kontinuous/env/prod/values.yaml | 7 ++++++- .../api/core-domain/infra/companies-store.ts | 17 +++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/.kontinuous/env/preprod/values.yaml b/.kontinuous/env/preprod/values.yaml index f50e7526f..133b5959f 100644 --- a/.kontinuous/env/preprod/values.yaml +++ b/.kontinuous/env/preprod/values.yaml @@ -22,7 +22,12 @@ app: MAILER_SMTP_SSL: "False" NODE_ENV: production # EMAIL_LOGIN: "True" - REDIS_HOST: "redis" + REDIS_SENTINEL_HOSTS: | + [ + { host: "redis-node-0.redis-headless", port: 26379 }, + { host: "redis-node-1.redis-headless", port: 26379 }, + { host: "redis-node-2.redis-headless", port: 26379 } + ] resources: requests: cpu: 20m diff --git a/.kontinuous/env/prod/values.yaml b/.kontinuous/env/prod/values.yaml index b7a7737db..e3da78abc 100644 --- a/.kontinuous/env/prod/values.yaml +++ b/.kontinuous/env/prod/values.yaml @@ -30,7 +30,12 @@ api: app: vars: MAILER_ENABLE: "True" - REDIS_HOST: "redis" + REDIS_SENTINEL_HOSTS: | + [ + { host: "redis-node-0.redis-headless", port: 26379 }, + { host: "redis-node-1.redis-headless", port: 26379 }, + { host: "redis-node-2.redis-headless", port: 26379 } + ] redirectFrom: - "egapro.fabrique.social.gouv.fr" - "index-egapro.travail.gouv.fr" diff --git a/packages/app/src/api/core-domain/infra/companies-store.ts b/packages/app/src/api/core-domain/infra/companies-store.ts index cbc012933..20c922c7c 100644 --- a/packages/app/src/api/core-domain/infra/companies-store.ts +++ b/packages/app/src/api/core-domain/infra/companies-store.ts @@ -1,16 +1,25 @@ import { logger } from "@api/utils/pino"; import * as crypto from "crypto"; -import Redis from "ioredis"; +import Redis, { type RedisOptions } from "ioredis"; export type Company = { label: string | null; siren: string }; // Configure Redis connection based on environment variables or defaults -const redisOptions = { - host: process.env.REDIS_HOST || "localhost", - port: parseInt(process.env.REDIS_PORT || "6379", 10), +const redisOptions: RedisOptions = { password: process.env.REDIS_PASSWORD, }; +if (process.env.REDIS_SENTINEL_HOSTS) { + try { + redisOptions.sentinels = JSON.parse(process.env.REDIS_SENTINEL_HOSTS); + } catch (error) { + logger.error({ error }, "Failed to parse REDIS_SENTINEL_HOSTS, falling back to direct connection"); + } +} else { + redisOptions.host = process.env.REDIS_HOST || "localhost"; + redisOptions.port = parseInt(process.env.REDIS_PORT || "6379", 10); +} + const maxTtl = 60 * 60 * 48; // Create Redis client