-
Notifications
You must be signed in to change notification settings - Fork 176
Expand file tree
/
Copy pathcompute-optimizer-ebs-client.ts
More file actions
93 lines (79 loc) · 2.45 KB
/
compute-optimizer-ebs-client.ts
File metadata and controls
93 lines (79 loc) · 2.45 KB
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
import { EBSFinding } from '@aws-sdk/client-compute-optimizer';
import { groupARNsByRegion, isAwsPermissionError } from '@openops/common';
import { logger } from '@openops/server-shared';
import { EbsRecommendationsBuilder } from './ebs-recommendations-builder';
import { ComputeOptimizerRecommendation } from './get-recommendations';
export async function getEbsRecommendationsForRegions(
credentials: any,
findingType: EBSFinding,
regions: string[],
): Promise<ComputeOptimizerRecommendation[]> {
const result: ComputeOptimizerRecommendation[] = [];
const recommendationType = getRecommendationType(findingType);
const recommendationsBuilder = new EbsRecommendationsBuilder(
credentials,
findingType,
recommendationType,
);
for (const region of regions) {
try {
const recommendations = await recommendationsBuilder.getRecommendations(
credentials,
region,
);
result.push(...recommendations);
} catch (error) {
if (isAwsPermissionError(error)) {
logger.debug('Skipping AWS region due to permission error', {
region,
error,
});
continue;
}
throw error;
}
}
return result;
}
export async function getEbsRecommendationsForARNs(
credentials: any,
findingType: EBSFinding,
arns: string[],
): Promise<ComputeOptimizerRecommendation[]> {
const result: ComputeOptimizerRecommendation[] = [];
const arnsPerRegion = groupARNsByRegion(arns);
const recommendationType = getRecommendationType(findingType);
const recommendationsBuilder = new EbsRecommendationsBuilder(
credentials,
findingType,
recommendationType,
);
for (const region in arnsPerRegion) {
try {
const recommendations = await recommendationsBuilder.getRecommendations(
credentials,
region,
arnsPerRegion[region],
);
result.push(...recommendations);
} catch (error) {
if (isAwsPermissionError(error)) {
logger.debug('Skipping AWS region due to permission error', {
region,
error,
});
continue;
}
throw error;
}
}
return result;
}
function getRecommendationType(findingType: EBSFinding): string {
if (findingType === EBSFinding.OPTIMIZED) {
return 'UpgradeEbsVolumeGeneration';
}
// All others AWS findings are related to volumes rightsizing
// TODO: Differentiate between over and under provisioned volumes ?
return 'RightSizeEbsVolume';
}