feat:update fs server url to redis

This commit is contained in:
Quan HL
2023-06-23 17:35:43 +07:00
parent 0ea09769b7
commit 6eebe379a6
6 changed files with 56 additions and 24 deletions

View File

@@ -1,5 +1,6 @@
const debug = require('debug')('jambonz:sbc-options-handler');
const fsServers = new Map();
const fsServiceUrls = new Map();
const rtpServers = new Map();
module.exports = ({srf, logger}) => {
@@ -7,6 +8,7 @@ module.exports = ({srf, logger}) => {
const setNameFs = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-fs`;
const setNameRtp = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-rtp`;
const setNameFsSeriveUrl = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:fs-service-url`;
/* check for expired servers every so often */
setInterval(async() => {
@@ -22,6 +24,16 @@ module.exports = ({srf, logger}) => {
logger.info({members}, `expired member ${key} from ${setNameFs} we now have ${countOfMembers}`);
}
}
for (const [key, value] of fsServiceUrls) {
const duration = now - value;
if (duration > expires) {
fsServiceUrls.delete(key);
await removeFromSet(setNameFsSeriveUrl, key);
const members = await retrieveSet(setNameFsSeriveUrl);
const countOfMembers = members.length;
logger.info({members}, `expired member ${key} from ${setNameFsSeriveUrl} we now have ${countOfMembers}`);
}
}
for (const [key, value] of rtpServers) {
const duration = now - value;
if (duration > expires) {
@@ -40,12 +52,18 @@ module.exports = ({srf, logger}) => {
const now = Date.now();
const runningFs = await retrieveSet(setNameFs);
const runningRtp = await retrieveSet(setNameRtp);
const runningFsServiceUrls = await retrieveSet(setNameFsSeriveUrl);
if (runningFs.length) {
logger.info({runningFs}, 'start watching these FS servers');
for (const ip of runningFs) fsServers.set(ip, now);
}
if (runningFsServiceUrls.length) {
logger.info({runningFsServiceUrls}, 'start watching these FS Service Urls');
for (const url of runningFsServiceUrls) fsServiceUrls.set(url, now);
}
if (runningRtp.length) {
logger.info({runningRtp}, 'start watching these RTP servers');
for (const ip of runningRtp) rtpServers.set(ip, now);
@@ -56,6 +74,35 @@ module.exports = ({srf, logger}) => {
};
_init();
const _addToCache = async (map, status, setName, key) => {
let countOfMembers;
if (status === 'open') {
map.set(key, Date.now());
const exists = await isMemberOfSet(setName, key);
if (!exists) {
await addToSet(setName, key);
const members = await retrieveSet(setName);
countOfMembers = members.length;
logger.info({members}, `added new member ${key} to ${setName} we now have ${countOfMembers}`);
debug({members}, `added new member ${key} to ${setName}`);
}
else {
const members = await retrieveSet(setName);
countOfMembers = members.length;
debug(`checkin from existing member ${key} to ${setName}`);
}
}
else {
map.delete(key);
await removeFromSet(setName, key);
const members = await retrieveSet(setName);
countOfMembers = members.length;
logger.info({members}, `removed member ${key} from ${setName} we now have ${countOfMembers}`);
debug({members}, `removed member ${key} from ${setName}`);
}
return countOfMembers;
}
return async(req, res) => {
/* OPTIONS ping from internal FS or RTP server? */
@@ -76,32 +123,13 @@ module.exports = ({srf, logger}) => {
map = isRtpServer ? rtpServers : fsServers;
const setName = isRtpServer ? setNameRtp : setNameFs;
const gaugeName = isRtpServer ? 'rtpservers' : 'featureservers';
const fsServiceUrlKey = req.has('X-FS-ServiceUrl') ? req.get('X-FS-ServiceUrl') : null;
status = req.get(`${prefix}-Status`);
if (status === 'open') {
map.set(key, Date.now());
const exists = await isMemberOfSet(setName, key);
if (!exists) {
await addToSet(setName, key);
const members = await retrieveSet(setName);
countOfMembers = members.length;
logger.info({members}, `added new member ${key} to ${setName} we now have ${countOfMembers}`);
debug({members}, `added new member ${key} to ${setName}`);
}
else {
const members = await retrieveSet(setName);
countOfMembers = members.length;
debug(`checkin from existing member ${key} to ${setName}`);
}
}
else {
map.delete(key);
await removeFromSet(setName, key);
const members = await retrieveSet(setName);
countOfMembers = members.length;
logger.info({members}, `removed member ${key} from ${setName} we now have ${countOfMembers}`);
debug({members}, `removed member ${key} from ${setName}`);
countOfMembers = await _addToCache(map, status, setName, key);
if (fsServiceUrlKey) {
await _addToCache(fsServiceUrls, stats, setNameFsSeriveUrl, fsServiceUrlKey);
}
stats.gauge(gaugeName, map.size);
}

View File

@@ -1,6 +1,6 @@
require('./docker_start');
require('./create-test-db');
//require('./regbot-tests');
require('./sip-register-tests');
// require('./sip-register-tests');
require('./sip-options-tests');
require('./docker_stop');

View File

@@ -34,6 +34,7 @@
Max-Forwards: 70
Subject: Performance Test
X-FS-Status: open
X-FS-ServiceUrl: http://127.0.0.1:3000
X-FS-Calls: 0
Content-Length: 0

View File

@@ -34,6 +34,7 @@
Max-Forwards: 70
Subject: Performance Test
X-FS-Status: open
X-FS-ServiceUrl: http://127.0.0.1:3001
X-FS-Calls: 0
Content-Length: 0

View File

@@ -34,6 +34,7 @@
Max-Forwards: 70
Subject: Performance Test
X-FS-Status: closed
X-FS-ServiceUrl: http://127.0.0.1:3000
X-FS-Calls: 0
Content-Length: 0

View File

@@ -34,6 +34,7 @@
Max-Forwards: 70
Subject: Performance Test
X-FS-Status: closed
X-FS-ServiceUrl: http://127.0.0.1:3001
X-FS-Calls: 0
Content-Length: 0