diff --git a/lib/Interactor/TransactionAggregator.js b/lib/Interactor/TransactionAggregator.js index 5bdc074c..b166cd6c 100644 --- a/lib/Interactor/TransactionAggregator.js +++ b/lib/Interactor/TransactionAggregator.js @@ -177,15 +177,6 @@ var TransactionAggregator = module.exports = function (pushInteractor) { this.mergeTrace = function (aggregated, trace) { if (!aggregated || !trace) return ; - if (!aggregated.variances) - aggregated.variances = []; - - if (!aggregated.meta) - aggregated.meta = { - count: 0, - min: 100000, - max: 0 - } // remove spans with startTime == endTime trace.spans = trace.spans.filter(function(span) { @@ -195,6 +186,16 @@ var TransactionAggregator = module.exports = function (pushInteractor) { if (trace.spans.length == 0) return ; + // create data structure if needed + if (!aggregated.variances) + aggregated.variances = []; + if (!aggregated.meta) + aggregated.meta = { + count: 0, + min: 100000, + max: 0 + } + // compute duration of child spans trace.spans.forEach(function(span) { span.min = span.max = span.mean = Math.round(new Date(span.endTime) - new Date(span.startTime)); @@ -409,6 +410,10 @@ var TransactionAggregator = module.exports = function (pushInteractor) { Object.keys(routes).forEach(function(route_path) { var data = routes[route_path]; + // hard check for invalid data + if (!data.variances || data.variances.length == 0) + return ; + // get top 5 variances of the same route var variances = data.variances.sort(function(a, b) { return b.count - a.count; @@ -422,6 +427,10 @@ var TransactionAggregator = module.exports = function (pushInteractor) { } variances.forEach(function (variance) { + // hard check for invalid data + if (!variance.spans || variance.spans.length == 0) + return ; + // deep copy of variances data var tmp = fclone({ spans: variance.spans,