UNPKG

openhim-core

Version:

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

186 lines (181 loc) 3.98 kB
var Transaction, logger; Transaction = require('./model/transactions').Transaction; logger = require('winston'); exports.calculateMetrics = function(startDate, endDate, transactionFilter, channelIDs, timeSeries, groupByChannels) { var group, match, pipeline; if (!(startDate instanceof Date) || !(endDate instanceof Date)) { return new Promise(function(resolve, reject) { return reject(new Error('startDate and endDate must be provided and be of type Date')); }); } match = { "request.timestamp": { $lt: endDate, $gt: startDate } }; if (transactionFilter) { Object.assign(match, transactionFilter); } if (channelIDs) { match.channelID = { $in: channelIDs }; } group = { _id: {}, total: { $sum: 1 }, avgResp: { $avg: { $subtract: ["$response.timestamp", "$request.timestamp"] } }, minResp: { $min: { $subtract: ["$response.timestamp", "$request.timestamp"] } }, maxResp: { $max: { $subtract: ["$response.timestamp", "$request.timestamp"] } }, failed: { $sum: { $cond: [ { $eq: ["$status", "Failed"] }, 1, 0 ] } }, successful: { $sum: { $cond: [ { $eq: ["$status", "Successful"] }, 1, 0 ] } }, processing: { $sum: { $cond: [ { $eq: ["$status", "Processing"] }, 1, 0 ] } }, completed: { $sum: { $cond: [ { $eq: ["$status", "Completed"] }, 1, 0 ] } }, completedWErrors: { $sum: { $cond: [ { $eq: ["$status", "Completed with error(s)"] }, 1, 0 ] } } }; if (groupByChannels) { group._id.channelID = '$channelID'; } if (timeSeries) { switch (timeSeries) { case "minute": group._id.minute = { $minute: "$request.timestamp" }; group._id.hour = { $hour: "$request.timestamp" }; group._id.day = { $dayOfMonth: "$request.timestamp" }; group._id.week = { $week: "$request.timestamp" }; group._id.month = { $month: "$request.timestamp" }; group._id.year = { $year: "$request.timestamp" }; break; case "hour": group._id.hour = { $hour: "$request.timestamp" }; group._id.week = { $week: "$request.timestamp" }; group._id.day = { $dayOfMonth: "$request.timestamp" }; group._id.month = { $month: "$request.timestamp" }; group._id.year = { $year: "$request.timestamp" }; break; case "day": group._id.day = { $dayOfMonth: "$request.timestamp" }; group._id.week = { $week: "$request.timestamp" }; group._id.month = { $month: "$request.timestamp" }; group._id.year = { $year: "$request.timestamp" }; break; case "week": group._id.week = { $week: "$request.timestamp" }; group._id.month = { $month: "$request.timestamp" }; group._id.year = { $year: "$request.timestamp" }; break; case "month": group._id.month = { $month: "$request.timestamp" }; group._id.year = { $year: "$request.timestamp" }; break; case "year": group._id.year = { $year: "$request.timestamp" }; } } pipeline = [ { $match: match }, { $group: group } ]; return Transaction.aggregate(pipeline).exec(); }; //# sourceMappingURL=metrics.js.map