openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
79 lines (65 loc) • 1.89 kB
JavaScript
;
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