UNPKG

openhim-core

Version:

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

435 lines (434 loc) 14.5 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/metrics.coffee</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../index.html">All files</a> / <a href="index.html">src</a> metrics.coffee </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">21.43% </span> <span class="quiet">Statements</span> <span class='fraction'>3/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/7</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">21.43% </span> <span class="quiet">Lines</span> <span class='fraction'>3/14</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">Transaction = require('./model/transactions').Transaction logger = require 'winston' &nbsp; # Calculates transaction metrics # # @startDate {Date} a timestamp representing the start of the range to calculate # metrics from (required) # @startDate {Date} a timestamp representing the end of the range to calculate # metrics to (required) # @transactionFilter {Object} a mongodb filter object to further restrict the # transactions collection (nullable) # @channelIDs {Array} an array of channel IDs as `ObjectID`s to filter by, if # not set all channels will be considered (nullable) # @timeSeries {String} one of 'minute', 'hour', 'day', 'week', 'month', 'year'. # If set the metrics will be grouped into a periods of the # stated duration, otherwise, metrics for the entire period # will be returned (nullable) # @groupByChannel {Boolean} if true the metrics will be grouped by each # particular channel that returns results (nullable) # @returns {Promise} that resolves to an array of metric objects for each # grouping (timeseries and/or channel) depending on the # parameters that are set # e.g. metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), # new Date("2014-07-19T00:00:00.000Z"), null, null, 'day', true # [ # { # _id: { # channelID: 111111111111111111111111, # day: 18, # week: 28, # month: 7, # year: 2014 # }, # total: 1, # avgResp: 100, # minResp: 100, # maxResp: 100, # failed: 0, # successful: 0, # processing: 1, # completed: 0, # completedWErrors: 0 # }, { # _id: # { # channelID: 222222222222222222222222, # day: 18, # week: 28, # month: 7, # year: 2014 }, # total: 1, # avgResp: 200, # minResp: 200, # maxResp: 200, # failed: 0, # successful: 0, # processing: 0, # completed: 1, # completedWErrors: 0 # } # ] exports.calculateMetrics = <span class="fstat-no" title="function not covered" >(</span>startDate, endDate, transactionFilter, channelIDs, timeSeries, groupByChannels) -&gt; if not (startDate instanceof Date) or not (endDate instanceof Date) <span class="cstat-no" title="statement not covered" > return new Promise <span class="fstat-no" title="function not covered" >(</span>resolve, reject) -&gt;</span> reject new Error 'startDate and endDate must be provided and be of type Date' &nbsp; match = "request.timestamp": $lt: endDate $gt: startDate if transactionFilter <span class="cstat-no" title="statement not covered" > Object.assign match, transactionFilter</span> &nbsp; if channelIDs <span class="cstat-no" title="statement not covered" > match.channelID =</span> $in: channelIDs &nbsp; 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 <span class="cstat-no" title="statement not covered" > group._id.channelID = '$channelID'</span> &nbsp; if timeSeries <span class="cstat-no" title="statement not covered" > switch timeSeries</span> when <span class="cstat-no" title="statement not covered" >"minute"</span> 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" when <span class="cstat-no" title="statement not covered" >"hour"</span> 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" when <span class="cstat-no" title="statement not covered" >"day"</span> group._id.day = $dayOfMonth: "$request.timestamp" group._id.week = $week: "$request.timestamp" group._id.month = $month: "$request.timestamp" group._id.year = $year: "$request.timestamp" when <span class="cstat-no" title="statement not covered" >"week"</span> group._id.week = $week: "$request.timestamp" group._id.month = $month: "$request.timestamp" group._id.year = $year: "$request.timestamp" when <span class="cstat-no" title="statement not covered" >"month"</span> group._id.month = $month: "$request.timestamp" group._id.year = $year: "$request.timestamp" when "year" group._id.year = $year: "$request.timestamp" &nbsp; pipeline = [ { $match: match }, { $group: group } ] <span class="cstat-no" title="statement not covered" > return T</span>ransaction.aggregate(pipeline).exec() &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Oct 10 2016 13:39:22 GMT+0200 (SAST) </div> </div> <script src="../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../sorter.js"></script> </body> </html>