UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

79 lines (65 loc) 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupAgenda = setupAgenda; exports.cullBodies = cullBodies; var _moment = _interopRequireDefault(require("moment")); var _config = require("./config"); var _model = require("./model"); var _winston = _interopRequireDefault(require("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, _moment.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 = { name: 'Cron' }; await channel.save(); const updateResp = await _model.TransactionModel.updateMany(query, { $unset: { 'request.body': '', 'response.body': '' } }); if (updateResp.nModified > 0) { _winston.default.info(`Culled ${updateResp.nModified} transactions for channel ${channel.name}`); } } //# sourceMappingURL=bodyCull.js.map