mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-19 04:17:44 +00:00
send closed status on OPTIONS ping if media server is down
This commit is contained in:
@@ -24,7 +24,7 @@ function initMS(logger, wrapper, ms) {
|
||||
|
||||
function installSrfLocals(srf, logger) {
|
||||
assert(!srf.locals.dbHelpers);
|
||||
const {getSBC, getSrf} = require('./sbc-pinger')(logger);
|
||||
const {getSBC} = require('./sbc-pinger')(logger);
|
||||
const StatsCollector = require('jambonz-stats-collector');
|
||||
const stats = srf.locals.stats = new StatsCollector(logger);
|
||||
|
||||
@@ -134,7 +134,6 @@ function installSrfLocals(srf, logger) {
|
||||
ipv4: localIp,
|
||||
serviceUrl: `http://${localIp}:${PORT}`,
|
||||
getSBC,
|
||||
getSrf,
|
||||
getFreeswitch,
|
||||
stats: stats
|
||||
});
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
const assert = require('assert');
|
||||
const noopLogger = {info: () => {}, error: () => {}};
|
||||
const Srf = require('drachtio-srf');
|
||||
const debug = require('debug')('jambonz:sbc-inbound');
|
||||
const srfs = [];
|
||||
const debug = require('debug')('jambonz:feature-server');
|
||||
|
||||
module.exports = (logger) => {
|
||||
logger = logger || noopLogger;
|
||||
let idxSbc = 0, idxSrfs = 0;
|
||||
let idxSbc = 0;
|
||||
|
||||
assert.ok(process.env.JAMBONES_SBCS, 'missing JAMBONES_SBCS env var');
|
||||
const sbcs = process.env.JAMBONES_SBCS
|
||||
@@ -15,38 +13,15 @@ module.exports = (logger) => {
|
||||
assert.ok(sbcs.length, 'JAMBONES_SBCS env var is empty or misconfigured');
|
||||
logger.info({sbcs}, 'SBC inventory');
|
||||
|
||||
assert.ok(process.env.JAMBONES_FEATURE_SERVERS, 'missing JAMBONES_FEATURE_SERVERS env var');
|
||||
const drachtio = process.env.JAMBONES_FEATURE_SERVERS
|
||||
.split(',')
|
||||
.map((fs) => {
|
||||
const arr = /^(.*):(.*):(.*)/.exec(fs);
|
||||
if (!arr) throw new Error('JAMBONES_FEATURE_SERVERS env var is misconfigured');
|
||||
const srf = new Srf();
|
||||
srf.connect({host: arr[1], port: arr[2], secret: arr[3]})
|
||||
.on('connect', (err, hp) => {
|
||||
if (err) return logger.info(err, `Error connecting to drachtio server at ${arr[1]}:${arr[2]}`);
|
||||
srfs.push(srf);
|
||||
logger.info(err, `Success connecting to drachtio at ${arr[1]}:${arr[2]}, ${srfs.length} online`);
|
||||
pingProxies(srf);
|
||||
})
|
||||
.on('error', (err) => {
|
||||
const place = srfs.indexOf(srf);
|
||||
if (-1 !== place) srfs.splice(place, 1);
|
||||
logger.info(err, `Error connecting to FS at ${arr[1]}:${arr[2]}, ${srfs.length} remain online`);
|
||||
});
|
||||
return {host: arr[1], port: arr[2], secret: arr[3]};
|
||||
});
|
||||
assert.ok(drachtio.length, 'JAMBONES_FEATURE_SERVERS env var is empty');
|
||||
logger.info({drachtio}, 'drachtio feature server inventory');
|
||||
|
||||
async function pingProxies(srf) {
|
||||
for (const sbc of sbcs) {
|
||||
try {
|
||||
const ms = srf.locals.getFreeswitch();
|
||||
const req = await srf.request({
|
||||
uri: `sip:${sbc}`,
|
||||
method: 'OPTIONS',
|
||||
headers: {
|
||||
'X-FS-Status': 'open'
|
||||
'X-FS-Status': ms ? 'open' : 'closed'
|
||||
}
|
||||
});
|
||||
req.on('response', (res) => {
|
||||
@@ -60,12 +35,12 @@ module.exports = (logger) => {
|
||||
|
||||
// OPTIONS ping the SBCs from each feature server every 60 seconds
|
||||
setInterval(() => {
|
||||
srfs.forEach((srf) => pingProxies(srf));
|
||||
const {srf} = require('../..');
|
||||
pingProxies(srf);
|
||||
}, 60000);
|
||||
|
||||
return {
|
||||
getSBC: () => sbcs[idxSbc++ % sbcs.length],
|
||||
getSrf: () => srfs[idxSrfs++ % srfs.length]
|
||||
getSBC: () => sbcs[idxSbc++ % sbcs.length]
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user