route createCall api requests among active freeswitch servers

This commit is contained in:
Dave Horton
2020-04-20 10:12:00 -04:00
parent 61a5ce2672
commit 993833212f
2 changed files with 16 additions and 6 deletions
+3 -1
View File
@@ -21,7 +21,8 @@ const {
retrieveCall,
deleteCall,
listCalls,
purgeCalls
purgeCalls,
retrieveSet
} = require('jambonz-realtimedb-helpers')({
host: process.env.JAMBONES_REDIS_HOST || 'localhost',
port: process.env.JAMBONES_REDIS_PORT || 6379
@@ -47,6 +48,7 @@ Object.assign(app.locals, {
deleteCall,
listCalls,
purgeCalls,
retrieveSet,
lookupAppBySid,
lookupAccountBySid
});
+13 -5
View File
@@ -12,6 +12,7 @@ const preconditions = {
'update': validateUpdate,
'delete': validateDelete
};
let idx = 0;
function coerceNumbers(callInfo) {
if (Array.isArray(callInfo)) {
@@ -260,13 +261,20 @@ router.put('/:sid', async(req, res) => {
*/
router.post('/:sid/Calls', async(req, res) => {
const sid = req.params.sid;
const logger = req.app.locals.logger;
const setName = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-fs`;
const {retrieveSet, logger} = req.app.locals;
try {
const serviceUrl = process.env.JAMBONES_CREATE_CALL_URL;
const fs = await retrieveSet(setName);
if (0 === fs.length) {
logger.info('No available feature servers to handle createCall API request');
return res.json({msg: 'no available feature servers at this time'}).status(500);
}
const ip = fs[fs.length % idx++];
const serviceUrl = `http://${ip}:3000/v1/createCall`;
await validateCreateCall(logger, sid, req);
logger.debug({payload: req.body}, `sending POST to ${serviceUrl}`);
logger.debug({payload: req.body}, `sending createCall API request to to ${ip}`);
request({
url: serviceUrl,
method: 'POST',
@@ -274,11 +282,11 @@ router.post('/:sid/Calls', async(req, res) => {
body: req.body
}, (err, response, body) => {
if (err) {
logger.error(err, `Error sending createCall POST to ${serviceUrl}`);
logger.error(err, `Error sending createCall POST to ${ip}`);
return res.sendStatus(500);
}
if (response.statusCode !== 201) {
logger.error({statusCode: response.statusCode}, `Non-success response returned by createCall ${serviceUrl}`);
logger.error({statusCode: response.statusCode}, `Non-success response returned by createCall ${ip}`);
return res.sendStatus(500);
}
res.status(201).json(body);