1import * as _ from 'lodash-es' 4const fullSuffixCmd = ` ; echo finexit123 > /dev/null; exit` 6type LogsRetryProps = { kubeConfigPath: string, cmdA: string[], noOutCmd?: boolean } 8export const runLogsWithRetry = async ({ kubeConfigPath, cmdA, noOutCmd }: LogsRetryProps) => { 9 let prevstdouterr: string | undefined 10 let isRetrySilencedOutput = false 11 let shouldRetry = true 16 `KUBECONFIG=${kubeConfigPath}`, 18 prevstdouterr && '--tail=0', 19 ]).compact().join(' ').value() 22 const onDataFnc = (data: string) => { 24 _.includes(data, 'INTERNAL_ERROR; received from peer') || 25 _.includes(data, 'read: connection reset by peer') 28 isRetrySilencedOutput = true 30 if (isRetrySilencedOutput) { 32 const silenceEndI = silData.indexOf(fullSuffixCmd) 33 if (silenceEndI == -1) { 36 isRetrySilencedOutput = false 37 silData = silData.slice(silenceEndI + fullSuffixCmd.length) 41 return _.chain(data).split("\n").map((line) => { 42 const doesIncl = _.chain([ 44 `couldn't get resource list for custom.metrics.k8s.io/v1beta1`, 45 ]).find((str) => _.includes(line, str)).value() 46 if (doesIncl) return null 48 }).reject((line) => line === null).join("\n").value() 53 noOutCmd: noOutCmd || shouldRetry, 54 ...prevstdouterr ? {prevstdouterr} : {}, 56 prevstdouterr = rett.stdout + (rett.stderr || '') 58 isRetrySilencedOutput = true 61 return {stdout: prevstdouterr || ''}