Files
jambonz-feature-server/lib/utils/sbc-pinger.js

47 lines
1.2 KiB
JavaScript

const assert = require('assert');
const noopLogger = {info: () => {}, error: () => {}};
const debug = require('debug')('jambonz:feature-server');
module.exports = (logger) => {
logger = logger || noopLogger;
let idxSbc = 0;
assert.ok(process.env.JAMBONES_SBCS, 'missing JAMBONES_SBCS env var');
const sbcs = process.env.JAMBONES_SBCS
.split(',')
.map((sbc) => sbc.trim());
assert.ok(sbcs.length, 'JAMBONES_SBCS env var is empty or misconfigured');
logger.info({sbcs}, 'SBC 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': ms ? 'open' : 'closed'
}
});
req.on('response', (res) => {
debug(`received ${res.status} from SBC`);
});
} catch (err) {
logger.error(err, `Error sending OPTIONS to ${sbc}`);
}
}
}
// OPTIONS ping the SBCs from each feature server every 60 seconds
setInterval(() => {
const {srf} = require('../..');
pingProxies(srf);
}, 60000);
return {
getSBC: () => sbcs[idxSbc++ % sbcs.length]
};
};