openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
67 lines (53 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setupAgenda = setupAgenda;
exports.cullBodies = cullBodies;
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _config = require('./config');
var _model = require('./model');
var _winston = require('winston');
var _winston2 = _interopRequireDefault(_winston);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_config.config.bodyCull = _config.config.get('bodyCull');
function setupAgenda(agenda) {
if (_config.config.bodyCull == null) {
return;
}
agenda.define('transaction body culling', async (job, done) => {
try {
await cullBodies();
done();
} catch (err) {
done(err);
}
});
agenda.every(`${_config.config.bodyCull.pollPeriodMins} minutes`, `transaction body culling`);
}
async function cullBodies() {
const channels = await _model.ChannelModel.find({ maxBodyAgeDays: { $exists: true } });
await Promise.all(channels.map(channel => clearTransactions(channel)));
}
async function clearTransactions(channel) {
const { maxBodyAgeDays, lastBodyCleared } = channel;
const maxAge = (0, _moment2.default)().subtract(maxBodyAgeDays, 'd').toDate();
const query = {
channelID: channel._id,
'request.timestamp': {
$lte: maxAge
}
};
if (lastBodyCleared != null) {
query['request.timestamp'].$gte = lastBodyCleared;
}
channel.lastBodyCleared = Date.now();
channel.updatedBy = 'Cron';
await channel.save();
const updateResp = await _model.TransactionModel.updateMany(query, { $unset: { 'request.body': '', 'response.body': '' } });
if (updateResp.nModified > 0) {
_winston2.default.info(`Culled ${updateResp.nModified} transactions for channel ${channel.name}`);
}
}
//# sourceMappingURL=bodyCull.js.map