diff --git a/config.json b/config.json index 0fcbe46..3b46dba 100644 --- a/config.json +++ b/config.json @@ -15,10 +15,6 @@ "requiredRoles": [] }, "database": { - "etcd": { - "host": "localhost", - "port": 2379 - }, "mongo": { "url": "mongodb://127.0.0.1:27017/farmcontrol" }, @@ -42,10 +38,6 @@ "requiredRoles": [] }, "database": { - "etcd": { - "host": "localhost", - "port": 2379 - }, "mongo": { "url": "mongodb://farmcontrol.tombutcher.local:27017/farmcontrol" } diff --git a/package.json b/package.json index d30f25f..a0e248f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "dayjs": "^1.11.19", "dotenv": "^17.2.3", "ejs": "^3.1.10", - "etcd3": "^1.1.2", "express": "^5.1.0", "he": "^1.2.0", "jsonwebtoken": "^9.0.2", @@ -38,7 +37,7 @@ "object-hash": "^3.0.0", "posthtml": "^0.16.7", "puppeteer": "^24.31.0", - "redis": "^4.6.14", + "redis": "^5.10.0", "socket.io": "^4.8.1", "socket.io-adapter-mongo": "^2.0.5", "socketio-jwt": "^4.6.2" diff --git a/src/database/redis.js b/src/database/redis.js index 321c501..15e25f4 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -28,11 +28,20 @@ class RedisServer { async connect() { if (this.connected) return; + logger.info('Connecting to Redis...'); await this.client.connect(); this.connected = true; logger.info('Connected to Redis'); } + async disconnect() { + if (!this.connected) return; + logger.info('Disconnecting from Redis...'); + await this.client.quit(); + this.connected = false; + logger.info('Disconnected from Redis'); + } + async setKey(key, value, ttlSeconds) { await this.connect(); const payload = typeof value === 'string' ? value : JSON.stringify(value); @@ -58,6 +67,24 @@ class RedisServer { await this.connect(); await this.client.del(key); } + + async getKeysByPattern(pattern) { + await this.connect(); + const keys = []; + let cursor = '0'; + logger.trace('Getting keys by pattern:', pattern); + do { + logger.trace('Scanning keys:', cursor); + const result = await this.client.scan(cursor, { + MATCH: pattern, + COUNT: 100 + }); + cursor = result.cursor; + logger.trace('Result:', result); + keys.push(...result.keys); + } while (cursor !== '0'); + return keys; + } } const redisServer = new RedisServer(); diff --git a/src/index.js b/src/index.js index 0c41368..cd37923 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ import { loadConfig } from './config.js'; import { SocketManager } from './socket/socketmanager.js'; -import { etcdServer } from './database/etcd.js'; import { natsServer } from './database/nats.js'; +import { redisServer } from './database/redis.js'; import express from 'express'; import log4js from 'log4js'; import http from 'http'; @@ -21,19 +21,9 @@ import { mongoServer } from './database/mongo.js'; new SocketManager(server); - // Connect to Etcd (await) - try { - //await etcdServer.connect(); - // logger.info('Connected to Etcd'); - } catch (err) { - logger.error('Failed to connect to Etcd:', err); - throw err; - } - // Connect to NATS (await) try { await natsServer.connect(); - logger.info('Connected to NATS'); } catch (err) { logger.error('Failed to connect to NATS:', err); throw err; @@ -42,12 +32,19 @@ import { mongoServer } from './database/mongo.js'; // Connect to Mongo DB (await) try { await mongoServer.connect(); - logger.info('Connected to Mongo DB'); } catch (err) { logger.error('Failed to connect to Mongo DB:', err); throw err; } + // Connect to Redis (await) + try { + await redisServer.connect(); + } catch (err) { + logger.error('Failed to connect to Redis:', err); + throw err; + } + // Start HTTP server server.listen(config.server.port, () => { logger.info(`Server listening on port ${config.server.port}`); @@ -55,6 +52,11 @@ import { mongoServer } from './database/mongo.js'; process.on('SIGINT', async () => { logger.info('Shutting down...'); - await etcdServer.disconnect(); + await redisServer.disconnect(); + await mongoServer.disconnect(); + await natsServer.disconnect(); + await server.close(); + logger.info('Shutdown complete'); + process.exit(0); }); })();