mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 08:40:38 +00:00
support drain/undrain feature server from cluster
This commit is contained in:
24
lib/http-routes/api/cluster.js
Normal file
24
lib/http-routes/api/cluster.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
const router = require('express').Router();
|
||||||
|
const {srf} = require('../../..');
|
||||||
|
|
||||||
|
router.post('/drain', async(req, res) => {
|
||||||
|
const {logger} = req.app.locals;
|
||||||
|
const {setDryUpCalls} = srf.locals;
|
||||||
|
|
||||||
|
logger.info('Received drain request via HTTP API');
|
||||||
|
setDryUpCalls();
|
||||||
|
|
||||||
|
res.sendStatus(201);
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post('/undrain', async(req, res) => {
|
||||||
|
const {logger} = req.app.locals;
|
||||||
|
const {clearDryUpCalls} = srf.locals;
|
||||||
|
|
||||||
|
logger.info('Received undrain request via HTTP API');
|
||||||
|
clearDryUpCalls();
|
||||||
|
|
||||||
|
res.sendStatus(201);
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
@@ -8,5 +8,6 @@ api.use('/enqueue', require('./enqueue'));
|
|||||||
|
|
||||||
api.use('/messaging', require('./messaging')); // inbound SMS
|
api.use('/messaging', require('./messaging')); // inbound SMS
|
||||||
api.use('/createMessage', require('./create-message')); // outbound SMS (REST)
|
api.use('/createMessage', require('./create-message')); // outbound SMS (REST)
|
||||||
|
api.use('/cluster', require('./cluster'));
|
||||||
|
|
||||||
module.exports = api;
|
module.exports = api;
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ function installSrfLocals(srf, logger, {
|
|||||||
logger.debug('installing srf locals');
|
logger.debug('installing srf locals');
|
||||||
assert(!srf.locals.dbHelpers);
|
assert(!srf.locals.dbHelpers);
|
||||||
const {tracer} = srf.locals.otel;
|
const {tracer} = srf.locals.otel;
|
||||||
const {getSBC, lifecycleEmitter} = require('./sbc-pinger')(logger);
|
const {getSBC, lifecycleEmitter, setDryUpCalls, clearDryUpCalls} = require('./sbc-pinger')(logger);
|
||||||
const StatsCollector = require('@jambonz/stats-collector');
|
const StatsCollector = require('@jambonz/stats-collector');
|
||||||
const stats = srf.locals.stats = new StatsCollector(logger);
|
const stats = srf.locals.stats = new StatsCollector(logger);
|
||||||
|
|
||||||
@@ -285,6 +285,8 @@ function installSrfLocals(srf, logger, {
|
|||||||
},
|
},
|
||||||
parentLogger: logger,
|
parentLogger: logger,
|
||||||
getSBC,
|
getSBC,
|
||||||
|
setDryUpCalls,
|
||||||
|
clearDryUpCalls,
|
||||||
getSmpp: () => {
|
getSmpp: () => {
|
||||||
return SMPP_URL;
|
return SMPP_URL;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -166,9 +166,23 @@ module.exports = (logger) => {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const setDryUpCalls = () => {
|
||||||
|
logger.info('setting dryUpCalls flag');
|
||||||
|
dryUpCalls = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const clearDryUpCalls = () => {
|
||||||
|
if (lifecycleEmitter.operationalState !== LifeCycleEvents.ScaleIn) {
|
||||||
|
logger.info('clearing dryUpCalls flag');
|
||||||
|
dryUpCalls = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
lifecycleEmitter,
|
lifecycleEmitter,
|
||||||
getSBC: () => sbcs[idxSbc++ % sbcs.length]
|
getSBC: () => sbcs[idxSbc++ % sbcs.length],
|
||||||
|
setDryUpCalls,
|
||||||
|
clearDryUpCalls,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user