export function groupSmallContinuouslySimilarSpans()

in packages/rum-core/src/performance-monitoring/performance-monitoring.js [66:110]


export function groupSmallContinuouslySimilarSpans(
  originalSpans,
  transDuration,
  threshold
) {
  /**
   * sort the original spans
   */
  originalSpans.sort((spanA, spanB) => spanA._start - spanB._start)

  var spans = []
  let lastCount = 1
  originalSpans.forEach(function (span, index) {
    if (spans.length === 0) {
      spans.push(span)
    } else {
      var lastSpan = spans[spans.length - 1]

      var isContinuouslySimilar =
        lastSpan.type === span.type &&
        lastSpan.subtype === span.subtype &&
        lastSpan.action === span.action &&
        lastSpan.name === span.name &&
        span.duration() / transDuration < threshold &&
        (span._start - lastSpan._end) / transDuration < threshold

      var isLastSpan = originalSpans.length === index + 1

      if (isContinuouslySimilar) {
        lastCount++
        lastSpan._end = span._end
      }

      if (lastCount > 1 && (!isContinuouslySimilar || isLastSpan)) {
        lastSpan.name = lastCount + 'x ' + lastSpan.name
        lastCount = 1
      }

      if (!isContinuouslySimilar) {
        spans.push(span)
      }
    }
  })
  return spans
}