mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
47 lines
1.2 KiB
JavaScript
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]
|
|
};
|
|
};
|
|
|