Removed etc and added better redis support.

This commit is contained in:
Tom Butcher 2025-12-13 21:03:11 +00:00
parent 4653430c0f
commit 950d47bcfa
4 changed files with 43 additions and 23 deletions

View File

@ -15,10 +15,6 @@
"requiredRoles": [] "requiredRoles": []
}, },
"database": { "database": {
"etcd": {
"host": "localhost",
"port": 2379
},
"mongo": { "mongo": {
"url": "mongodb://127.0.0.1:27017/farmcontrol" "url": "mongodb://127.0.0.1:27017/farmcontrol"
}, },
@ -42,10 +38,6 @@
"requiredRoles": [] "requiredRoles": []
}, },
"database": { "database": {
"etcd": {
"host": "localhost",
"port": 2379
},
"mongo": { "mongo": {
"url": "mongodb://farmcontrol.tombutcher.local:27017/farmcontrol" "url": "mongodb://farmcontrol.tombutcher.local:27017/farmcontrol"
} }

View File

@ -25,7 +25,6 @@
"dayjs": "^1.11.19", "dayjs": "^1.11.19",
"dotenv": "^17.2.3", "dotenv": "^17.2.3",
"ejs": "^3.1.10", "ejs": "^3.1.10",
"etcd3": "^1.1.2",
"express": "^5.1.0", "express": "^5.1.0",
"he": "^1.2.0", "he": "^1.2.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
@ -38,7 +37,7 @@
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"posthtml": "^0.16.7", "posthtml": "^0.16.7",
"puppeteer": "^24.31.0", "puppeteer": "^24.31.0",
"redis": "^4.6.14", "redis": "^5.10.0",
"socket.io": "^4.8.1", "socket.io": "^4.8.1",
"socket.io-adapter-mongo": "^2.0.5", "socket.io-adapter-mongo": "^2.0.5",
"socketio-jwt": "^4.6.2" "socketio-jwt": "^4.6.2"

View File

@ -28,11 +28,20 @@ class RedisServer {
async connect() { async connect() {
if (this.connected) return; if (this.connected) return;
logger.info('Connecting to Redis...');
await this.client.connect(); await this.client.connect();
this.connected = true; this.connected = true;
logger.info('Connected to Redis'); 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) { async setKey(key, value, ttlSeconds) {
await this.connect(); await this.connect();
const payload = typeof value === 'string' ? value : JSON.stringify(value); const payload = typeof value === 'string' ? value : JSON.stringify(value);
@ -58,6 +67,24 @@ class RedisServer {
await this.connect(); await this.connect();
await this.client.del(key); 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(); const redisServer = new RedisServer();

View File

@ -1,7 +1,7 @@
import { loadConfig } from './config.js'; import { loadConfig } from './config.js';
import { SocketManager } from './socket/socketmanager.js'; import { SocketManager } from './socket/socketmanager.js';
import { etcdServer } from './database/etcd.js';
import { natsServer } from './database/nats.js'; import { natsServer } from './database/nats.js';
import { redisServer } from './database/redis.js';
import express from 'express'; import express from 'express';
import log4js from 'log4js'; import log4js from 'log4js';
import http from 'http'; import http from 'http';
@ -21,19 +21,9 @@ import { mongoServer } from './database/mongo.js';
new SocketManager(server); 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) // Connect to NATS (await)
try { try {
await natsServer.connect(); await natsServer.connect();
logger.info('Connected to NATS');
} catch (err) { } catch (err) {
logger.error('Failed to connect to NATS:', err); logger.error('Failed to connect to NATS:', err);
throw err; throw err;
@ -42,12 +32,19 @@ import { mongoServer } from './database/mongo.js';
// Connect to Mongo DB (await) // Connect to Mongo DB (await)
try { try {
await mongoServer.connect(); await mongoServer.connect();
logger.info('Connected to Mongo DB');
} catch (err) { } catch (err) {
logger.error('Failed to connect to Mongo DB:', err); logger.error('Failed to connect to Mongo DB:', err);
throw 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 // Start HTTP server
server.listen(config.server.port, () => { server.listen(config.server.port, () => {
logger.info(`Server listening on port ${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 () => { process.on('SIGINT', async () => {
logger.info('Shutting down...'); 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);
}); });
})(); })();