From a79ab2af3842c0e1577ba3ceb8724ea2b986f5ad Mon Sep 17 00:00:00 2001 From: Giuseppe Raffa <77052701+sesee3@users.noreply.github.com> Date: Tue, 14 Apr 2026 17:11:24 +0200 Subject: [PATCH] feat: add Redis integration, enhanced health checks and fixed an error in the database core --- realtime/src/index.js | 10 +++++-- realtime/src/store/db.js | 1 - realtime/src/store/redis.js | 55 +++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 realtime/src/store/redis.js diff --git a/realtime/src/index.js b/realtime/src/index.js index cef5cf7..cd81e2a 100644 --- a/realtime/src/index.js +++ b/realtime/src/index.js @@ -3,6 +3,7 @@ const crypto = require('crypto'); const app = express(); const db = require('./store/db') +const redis = require('./store/redis'); app.use(express.json()); @@ -19,8 +20,13 @@ app.get('/health', (req, res) => { res.json({ status: 'ok', - sensorsDB: sensorsDB, - dataDB: dataDB + databases: { + sensors: sensorsDB ? 'connected' : 'disconnected', + data: dataDB ? 'connected' : 'disconnected' + }, + redis: redis.checkRedis() ? 'connected' : 'disconnected', + version: process.env.VERSION, + build_number: process.env.VERSION_BUILD }); }); diff --git a/realtime/src/store/db.js b/realtime/src/store/db.js index cfc4c4e..abf9640 100644 --- a/realtime/src/store/db.js +++ b/realtime/src/store/db.js @@ -1,5 +1,4 @@ const { Pool } = require('pg'); -const { get } = require('../../../api/src/routes/params.sensor'); const pool = new Pool({ user: process.env.DB_USER, diff --git a/realtime/src/store/redis.js b/realtime/src/store/redis.js new file mode 100644 index 0000000..d8a8142 --- /dev/null +++ b/realtime/src/store/redis.js @@ -0,0 +1,55 @@ +const redis = require('ioredis'); + +const redisClient = new redis({ + host: process.env.REDIS_HOST, + port: parseInt(process.env.REDIS_PORT), + password: process.env.REDIS_PASSWORD, + maxRetriesPerRequest: 3, + lazyConnect: true, + retryStrategy(times) { + const delay = Math.min(times * 50, 2000); + return delay; + } +}); + +redisClient.on('error', (error) => { + console.error('Redis error', error); +}); + +redisClient.on('connect', () => { + console.log('Connected to Redis'); +}); + +redisClient.on('reconnecting', () => { + console.log('Reconnecting to Redis'); +}); + +async function configure() { + try { + await redisClient.connect(); + await redisClient.ping(); + console.log('Redis connection established'); + } catch (err) { + console.error('Failed to connect to Redis', err); + } +} + +function connected() { + return redisClient.status === 'ready'; +} + +async function checkRedis() { + try { + if (redisClient.status !== 'ready') { + await redisClient.connect().catch(() => {}); + } + await redisClient.ping(); + return true; + } catch (err) { + return false; + } +} + +configure(); + +module.exports = { redisClient, connected, checkRedis }; \ No newline at end of file