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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 7x 2x 2x 7x 105x 7x 29x 7x 5x 5x 5x 5x 5x 7x 2x 2x 2x 2x 1x 2x 7x 18x 7x | /*
* 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 type { IconName } from '@harness/uicore'
import type { IState } from '@ce/components/NodeRecommendation/constants'
import type { RecommendClusterRequest } from 'services/ce/recommenderService'
export const getProviderIcon = (provider: string): IconName => {
const iconMapping: Record<string, IconName> = {
google: 'gcp',
azure: 'service-azure',
amazon: 'service-aws'
}
return iconMapping[provider] || 'app-kubernetes'
}
export const addBufferToValue = (value: number, bufferPercentage: number): number =>
+(((100 + bufferPercentage) / 100) * value).toFixed(2)
export const calculateSavingsPercentage = (savings: number, totalCost: number): string =>
`(${Math.floor((savings / totalCost) * 100)}%)`
export const isResourceConsistent = (
sumCpu: number,
sumMemory: number,
maxCpu: number,
maxMemory: number,
buffer: number
): boolean => {
const sumCpuWithBuffer = addBufferToValue(sumCpu, buffer)
const sumMemWithBuffer = addBufferToValue(sumMemory, buffer)
const isInconsistent =
Math.round(sumCpuWithBuffer) < Math.round(maxCpu) || Math.round(sumMemWithBuffer) < Math.round(maxMemory)
const anyZero =
Math.round(sumCpuWithBuffer) === 0 ||
Math.round(sumMemWithBuffer) === 0 ||
Math.round(maxCpu) === 0 ||
Math.round(maxMemory) === 0
return !isInconsistent && !anyZero
}
export const calculateNodes = (
sumCpu: number,
sumMemory: number,
maxCpu: number,
maxMemory: number,
minNodes: number
): { maximumNodes: number; minimumNodes: number } => {
let minimumNodes = minNodes || 3
let maximumNodes = Math.min(Math.floor(sumCpu / maxCpu), Math.floor(sumMemory / maxMemory))
maximumNodes = Math.max(maximumNodes, 1)
if (maximumNodes < minNodes) {
minimumNodes = maximumNodes
}
return { maximumNodes, minimumNodes }
}
export const convertStateToRecommendClusterPayload = (
state: IState,
resourceRequirement: RecommendClusterRequest,
buffer: number
): RecommendClusterRequest => {
const sumCpuWithBuffer = addBufferToValue(state.sumCpu, buffer)
const sumMemWithBuffer = addBufferToValue(state.sumMem, buffer)
const { maximumNodes, minimumNodes } = calculateNodes(
sumCpuWithBuffer,
sumMemWithBuffer,
state.maxCpu,
+state.maxMemory,
+state.minNodes
)
return {
...resourceRequirement,
sumCpu: +sumCpuWithBuffer,
sumMem: +sumMemWithBuffer,
minCpu: +state.maxCpu,
minMem: +state.maxMemory,
maxNodes: maximumNodes,
minNodes: minimumNodes,
includeSeries: state.includeSeries,
includeTypes: state.includeTypes,
excludeSeries: state.excludeSeries,
excludeTypes: state.excludeTypes
}
}
export const addBufferToState = (state: IState, buffer: number): IState => ({
...state,
sumCpu: addBufferToValue(state.sumCpu, buffer),
sumMem: addBufferToValue(state.sumMem, buffer)
})
interface InstanceFamilies {
includeSeries: string[]
includeTypes: string[]
excludeSeries: string[]
excludeTypes: string[]
}
export const getInstanceFamiliesFromState = (state: IState): InstanceFamilies => ({
includeSeries: state.includeSeries,
includeTypes: state.includeTypes,
excludeSeries: state.excludeSeries,
excludeTypes: state.excludeTypes
})
|