-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathcalculatePDiskSeverity.ts
35 lines (28 loc) · 1.15 KB
/
calculatePDiskSeverity.ts
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
import {EFlag} from '../../types/api/enums';
import type {TPDiskState} from '../../types/api/pdisk';
import {generateEvaluator} from '../generateEvaluator';
import {
DISK_COLOR_STATE_TO_NUMERIC_SEVERITY,
NOT_AVAILABLE_SEVERITY,
PDISK_STATE_SEVERITY,
} from './constants';
const getUsageSeverityForPDisk = generateEvaluator(85, 95, [EFlag.Green, EFlag.Yellow, EFlag.Red]);
export function calculatePDiskSeverity<
T extends {
State?: TPDiskState;
AllocatedPercent?: number;
},
>(pDisk: T) {
const stateSeverity = getStateSeverity(pDisk.State);
const spaceSeverityFlag = getUsageSeverityForPDisk(pDisk.AllocatedPercent || 0);
if (stateSeverity === NOT_AVAILABLE_SEVERITY || !spaceSeverityFlag) {
return stateSeverity;
}
return Math.max(stateSeverity, DISK_COLOR_STATE_TO_NUMERIC_SEVERITY[spaceSeverityFlag]);
}
function getStateSeverity(pDiskState?: TPDiskState) {
return isSeverityKey(pDiskState) ? PDISK_STATE_SEVERITY[pDiskState] : NOT_AVAILABLE_SEVERITY;
}
function isSeverityKey(key?: TPDiskState): key is keyof typeof PDISK_STATE_SEVERITY {
return key !== undefined && key in PDISK_STATE_SEVERITY;
}