All files / modules/70-pipeline/components/LogsContent/LogsState updateSectionData.ts

100% Statements 20/20
62.5% Branches 5/8
100% Functions 4/4
100% Lines 20/20

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 43 44 45 46 47 48 49 50 51 52 53 54              35x 35x 35x 35x     35x 6x     36x 36x 36x   26x                       36x       35x 1x   1x 1x 1x     1x 1x     1x 1x      
/*
 * 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 produce from 'immer'
import { set } from 'lodash-es'
import { formatDatetoLocale } from '@common/utils/dateUtils'
import { sanitizeHTML } from '@common/utils/StringUtils'
import type { Action, ActionType, State, LogSectionData, LogLineData } from './types'
 
export function processLogsData(data: string): LogLineData[] {
  return String(data)
    .split('\n')
    .reduce<LogSectionData['data']>((accumulator, line) => {
      Eif (line.length > 0) {
        try {
          const { level, time, out } = JSON.parse(line) as Record<string, string>
 
          accumulator.push({
            text: {
              level: sanitizeHTML(level),
              time: formatDatetoLocale(time),
              out: sanitizeHTML(out)
            }
          })
        } catch (e) {
          //
        }
      }
 
      return accumulator
    }, [])
}
 
export function updateSectionData(state: State, action: Action<ActionType.UpdateSectionData>): State {
  const { payload } = action
 
  return produce(state, draft => {
    const unit = state.dataMap[payload.id]
    const data = processLogsData(payload.data)
 
    // update status only for blob data
    Eif (unit?.dataSource === 'blob') {
      set(draft.dataMap[payload.id], 'status', unit.unitStatus)
    }
 
    set(draft.dataMap[payload.id], 'isOpen', true)
    set(draft.dataMap[payload.id], 'data', data)
  })
}