chore(backend): Caching envvars

This commit is contained in:
Tibo De Peuter 2025-05-08 23:34:33 +02:00
parent a59417b8f5
commit 207df530b9
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
5 changed files with 66 additions and 1 deletions

42
backend/src/caching.ts Normal file
View file

@ -0,0 +1,42 @@
import { createClient, RedisClientType } from 'redis';
import { getLogger } from './logging/initalize.js';
import { envVars, getEnvVar } from './util/envVars.js';
export type CacheClient = RedisClientType;
let redisClient: CacheClient;
async function initializeClient(): Promise<CacheClient> {
if (redisClient !== undefined) {
return redisClient;
}
const redisHost = getEnvVar(envVars.CacheHost);
const redisPort = getEnvVar(envVars.CachePort);
const redisUrl = `redis://${redisHost}:${redisPort}`;
redisClient = createClient({
url: redisUrl
});
redisClient.on('error', (err) => getLogger().error('Redis error:', err));
await redisClient.connect();
return redisClient;
}
export async function getCacheClient(): Promise<CacheClient> {
redisClient ||= await initializeClient();
return redisClient;
}
export async function checkRedisHealth(): Promise<boolean> {
try {
await redisClient.set('health', 'ok');
const reply = await redisClient.get('health');
return reply === 'ok';
} catch (error) {
getLogger().error('Redis Health Check Failed:', error);
return false;
}
}

View file

@ -5,6 +5,7 @@ const STUDENT_IDP_PREFIX = IDP_PREFIX + 'STUDENT_';
const TEACHER_IDP_PREFIX = IDP_PREFIX + 'TEACHER_';
const CORS_PREFIX = PREFIX + 'CORS_';
const LOGGING_PREFIX = PREFIX + 'LOGGING_';
const CACHE_PREFIX = PREFIX + 'CACHE_';
interface EnvVar {
key: string;
@ -39,6 +40,11 @@ export const envVars: Record<string, EnvVar> = {
LogLevel: { key: LOGGING_PREFIX + 'LEVEL', defaultValue: 'info' },
LokiHost: { key: LOGGING_PREFIX + 'LOKI_HOST', defaultValue: 'http://localhost:3102' },
CacheHost: { key: CACHE_PREFIX + 'HOST', defaultValue: 'localhost' },
CachePort: { key: CACHE_PREFIX + 'PORT', defaultValue: 6379 },
CacheTTL: { key: CACHE_PREFIX + 'TTL', defaultValue: 60 * 60 * 24 }, // 24 hours
CacheKeyPrefix: { key: CACHE_PREFIX + 'KEY_PREFIX', defaultValue: 'dwengo' },
} as const;
/**