All files / modules/85-cv/components/TimeseriesRow TimeSeriesRowUtils.ts

85% Statements 17/20
72.73% Branches 16/22
100% Functions 2/2
84.21% Lines 16/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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              12x 12x       12x     2x 44x 2x 2x   2x 46x 46x 46x 44x       44x           2x 2x       2x    
/*
 * Copyright 2021 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import { isNumber } from 'lodash-es'
import { getRiskColorValue } from '@cv/utils/CommonUtils'
import type { TimeSeriesMetricDataDTO } from 'services/cv'
import type { SeriesConfig } from './TimeseriesRow'
 
export function transformAnalysisDataToChartSeries(
  analysisData: TimeSeriesMetricDataDTO['metricDataList'] = []
): SeriesConfig[] {
  const highchartsLineData = []
  analysisData.sort((a, b) => (a.timestamp ?? 0) - (b.timestamp ?? 0))
  let currentRiskColor: string | null = getRiskColorValue(analysisData?.[0].risk)
  const zones: Highcharts.SeriesZonesOptionsObject[] = [{ value: undefined, color: currentRiskColor }]
 
  for (const dataPoint of analysisData) {
    const { timestamp: x, risk, value: y } = dataPoint || {}
    const riskColor = getRiskColorValue(risk)
    if (isNumber(x) && isNumber(y) && risk) {
      highchartsLineData.push({
        x,
        y
      })
      Iif (riskColor !== currentRiskColor) {
        zones[zones.length - 1].value = x
        zones.push({ value: undefined, color: riskColor })
        currentRiskColor = riskColor
      }
    } else {
      currentRiskColor = null
      highchartsLineData.push({ x, y: null, color: 'transparent' })
    }
  }
 
  return [{ series: [{ type: 'line', data: highchartsLineData, zones, zoneAxis: 'x', clip: false, lineWidth: 1 }] }]
}