Removed etc and added better redis support.
This commit is contained in:
parent
4653430c0f
commit
950d47bcfa
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
28
src/index.js
28
src/index.js
@ -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);
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user