oci-pricing-mcp 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +24 -0
- package/README.md +299 -0
- package/dist/data/cache.d.ts +50 -0
- package/dist/data/cache.d.ts.map +1 -0
- package/dist/data/cache.js +90 -0
- package/dist/data/cache.js.map +1 -0
- package/dist/data/fetcher.d.ts +96 -0
- package/dist/data/fetcher.d.ts.map +1 -0
- package/dist/data/fetcher.js +232 -0
- package/dist/data/fetcher.js.map +1 -0
- package/dist/data/pricing-data.json +6162 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +582 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/calculator.d.ts +17 -0
- package/dist/tools/calculator.d.ts.map +1 -0
- package/dist/tools/calculator.js +318 -0
- package/dist/tools/calculator.js.map +1 -0
- package/dist/tools/compute.d.ts +58 -0
- package/dist/tools/compute.d.ts.map +1 -0
- package/dist/tools/compute.js +172 -0
- package/dist/tools/compute.js.map +1 -0
- package/dist/tools/core.d.ts +70 -0
- package/dist/tools/core.d.ts.map +1 -0
- package/dist/tools/core.js +113 -0
- package/dist/tools/core.js.map +1 -0
- package/dist/tools/database.d.ts +66 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +212 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/kubernetes.d.ts +65 -0
- package/dist/tools/kubernetes.d.ts.map +1 -0
- package/dist/tools/kubernetes.js +226 -0
- package/dist/tools/kubernetes.js.map +1 -0
- package/dist/tools/networking.d.ts +63 -0
- package/dist/tools/networking.d.ts.map +1 -0
- package/dist/tools/networking.js +248 -0
- package/dist/tools/networking.js.map +1 -0
- package/dist/tools/storage.d.ts +64 -0
- package/dist/tools/storage.d.ts.map +1 -0
- package/dist/tools/storage.js +175 -0
- package/dist/tools/storage.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCI Monthly Cost Calculator
|
|
3
|
+
*/
|
|
4
|
+
import { getComputePricing, getStoragePricing, getDatabasePricing, getNetworkingPricing, getFreeTier, } from '../data/fetcher.js';
|
|
5
|
+
const HOURS_PER_MONTH = 730; // Average hours in a month
|
|
6
|
+
/**
|
|
7
|
+
* Calculate monthly cost for a given configuration
|
|
8
|
+
*/
|
|
9
|
+
export function calculateMonthlyCost(input) {
|
|
10
|
+
const breakdown = [];
|
|
11
|
+
const notes = [];
|
|
12
|
+
let totalMonthly = 0;
|
|
13
|
+
// Calculate compute costs
|
|
14
|
+
if (input.compute) {
|
|
15
|
+
const computePricing = getComputePricing();
|
|
16
|
+
const shape = computePricing.find((c) => c.shapeFamily?.toLowerCase() === input.compute?.shape.toLowerCase());
|
|
17
|
+
if (shape) {
|
|
18
|
+
const hoursPerMonth = input.compute.hoursPerMonth || HOURS_PER_MONTH;
|
|
19
|
+
// OCPU cost
|
|
20
|
+
const ocpuCost = shape.ocpuPrice * input.compute.ocpus * hoursPerMonth;
|
|
21
|
+
breakdown.push({
|
|
22
|
+
category: 'Compute',
|
|
23
|
+
item: `${shape.shapeFamily} - OCPUs`,
|
|
24
|
+
quantity: input.compute.ocpus,
|
|
25
|
+
unit: 'OCPU',
|
|
26
|
+
unitPrice: shape.ocpuPrice,
|
|
27
|
+
monthlyTotal: ocpuCost,
|
|
28
|
+
});
|
|
29
|
+
totalMonthly += ocpuCost;
|
|
30
|
+
// Memory cost
|
|
31
|
+
const memoryCost = shape.memoryPricePerGB * input.compute.memoryGB * hoursPerMonth;
|
|
32
|
+
breakdown.push({
|
|
33
|
+
category: 'Compute',
|
|
34
|
+
item: `${shape.shapeFamily} - Memory`,
|
|
35
|
+
quantity: input.compute.memoryGB,
|
|
36
|
+
unit: 'GB',
|
|
37
|
+
unitPrice: shape.memoryPricePerGB,
|
|
38
|
+
monthlyTotal: memoryCost,
|
|
39
|
+
});
|
|
40
|
+
totalMonthly += memoryCost;
|
|
41
|
+
// Check memory-to-OCPU ratio
|
|
42
|
+
const ratio = input.compute.memoryGB / input.compute.ocpus;
|
|
43
|
+
if (shape.memoryPerOCPURatio && ratio > shape.memoryPerOCPURatio) {
|
|
44
|
+
notes.push(`Warning: Memory-to-OCPU ratio (${ratio}) exceeds maximum (${shape.memoryPerOCPURatio}). Configuration may not be valid.`);
|
|
45
|
+
}
|
|
46
|
+
if (hoursPerMonth < HOURS_PER_MONTH) {
|
|
47
|
+
notes.push(`Compute calculated for ${hoursPerMonth} hours/month (not 24/7).`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
notes.push(`Warning: Compute shape "${input.compute.shape}" not found. Compute costs not calculated.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Calculate storage costs
|
|
55
|
+
if (input.storage) {
|
|
56
|
+
const storagePricing = getStoragePricing();
|
|
57
|
+
// Block Volume
|
|
58
|
+
if (input.storage.blockVolumeGB) {
|
|
59
|
+
const blockPrice = storagePricing.find((s) => s.type === 'block-storage-balanced');
|
|
60
|
+
if (blockPrice) {
|
|
61
|
+
const cost = blockPrice.pricePerUnit * input.storage.blockVolumeGB;
|
|
62
|
+
breakdown.push({
|
|
63
|
+
category: 'Storage',
|
|
64
|
+
item: 'Block Volume (Balanced)',
|
|
65
|
+
quantity: input.storage.blockVolumeGB,
|
|
66
|
+
unit: 'GB',
|
|
67
|
+
unitPrice: blockPrice.pricePerUnit,
|
|
68
|
+
monthlyTotal: cost,
|
|
69
|
+
});
|
|
70
|
+
totalMonthly += cost;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Object Storage
|
|
74
|
+
if (input.storage.objectStorageGB) {
|
|
75
|
+
const objectPrice = storagePricing.find((s) => s.type === 'object-storage');
|
|
76
|
+
if (objectPrice) {
|
|
77
|
+
const cost = objectPrice.pricePerUnit * input.storage.objectStorageGB;
|
|
78
|
+
breakdown.push({
|
|
79
|
+
category: 'Storage',
|
|
80
|
+
item: 'Object Storage (Standard)',
|
|
81
|
+
quantity: input.storage.objectStorageGB,
|
|
82
|
+
unit: 'GB',
|
|
83
|
+
unitPrice: objectPrice.pricePerUnit,
|
|
84
|
+
monthlyTotal: cost,
|
|
85
|
+
});
|
|
86
|
+
totalMonthly += cost;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Archive Storage
|
|
90
|
+
if (input.storage.archiveStorageGB) {
|
|
91
|
+
const archivePrice = storagePricing.find((s) => s.type === 'object-storage-archive');
|
|
92
|
+
if (archivePrice) {
|
|
93
|
+
const cost = archivePrice.pricePerUnit * input.storage.archiveStorageGB;
|
|
94
|
+
breakdown.push({
|
|
95
|
+
category: 'Storage',
|
|
96
|
+
item: 'Object Storage (Archive)',
|
|
97
|
+
quantity: input.storage.archiveStorageGB,
|
|
98
|
+
unit: 'GB',
|
|
99
|
+
unitPrice: archivePrice.pricePerUnit,
|
|
100
|
+
monthlyTotal: cost,
|
|
101
|
+
});
|
|
102
|
+
totalMonthly += cost;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// File Storage
|
|
106
|
+
if (input.storage.fileStorageGB) {
|
|
107
|
+
const filePrice = storagePricing.find((s) => s.type === 'file-storage');
|
|
108
|
+
if (filePrice) {
|
|
109
|
+
const cost = filePrice.pricePerUnit * input.storage.fileStorageGB;
|
|
110
|
+
breakdown.push({
|
|
111
|
+
category: 'Storage',
|
|
112
|
+
item: 'File Storage',
|
|
113
|
+
quantity: input.storage.fileStorageGB,
|
|
114
|
+
unit: 'GB',
|
|
115
|
+
unitPrice: filePrice.pricePerUnit,
|
|
116
|
+
monthlyTotal: cost,
|
|
117
|
+
});
|
|
118
|
+
totalMonthly += cost;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Calculate database costs
|
|
123
|
+
if (input.database) {
|
|
124
|
+
const dbPricing = getDatabasePricing();
|
|
125
|
+
const licenseType = input.database.licenseIncluded !== false ? '' : '-byol';
|
|
126
|
+
const dbTypeKey = `autonomous-db-${input.database.type.split('-').pop()}${licenseType}`;
|
|
127
|
+
const dbPrice = dbPricing.find((d) => d.type.toLowerCase().includes(input.database?.type.toLowerCase() || '') ||
|
|
128
|
+
d.databaseType === input.database?.type);
|
|
129
|
+
if (dbPrice && input.database.ecpus) {
|
|
130
|
+
// ECPU cost
|
|
131
|
+
const ecpuPrice = dbPrice.ecpuPrice || dbPrice.pricePerUnit;
|
|
132
|
+
const ecpuCost = ecpuPrice * input.database.ecpus * HOURS_PER_MONTH;
|
|
133
|
+
breakdown.push({
|
|
134
|
+
category: 'Database',
|
|
135
|
+
item: `${dbPrice.description} - Compute`,
|
|
136
|
+
quantity: input.database.ecpus,
|
|
137
|
+
unit: 'ECPU',
|
|
138
|
+
unitPrice: ecpuPrice,
|
|
139
|
+
monthlyTotal: ecpuCost,
|
|
140
|
+
});
|
|
141
|
+
totalMonthly += ecpuCost;
|
|
142
|
+
// Storage cost
|
|
143
|
+
if (input.database.storageGB) {
|
|
144
|
+
const storagePrice = dbPrice.storagePrice || 0.0255;
|
|
145
|
+
const storageCost = storagePrice * input.database.storageGB;
|
|
146
|
+
breakdown.push({
|
|
147
|
+
category: 'Database',
|
|
148
|
+
item: `${dbPrice.description} - Storage`,
|
|
149
|
+
quantity: input.database.storageGB,
|
|
150
|
+
unit: 'GB',
|
|
151
|
+
unitPrice: storagePrice,
|
|
152
|
+
monthlyTotal: storageCost,
|
|
153
|
+
});
|
|
154
|
+
totalMonthly += storageCost;
|
|
155
|
+
}
|
|
156
|
+
if (input.database.licenseIncluded === false) {
|
|
157
|
+
notes.push('Database costs calculated with BYOL (Bring Your Own License).');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
notes.push(`Warning: Database type "${input.database.type}" not found or ECPUs not specified.`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Calculate networking costs
|
|
165
|
+
if (input.networking) {
|
|
166
|
+
const netPricing = getNetworkingPricing();
|
|
167
|
+
// Load Balancer
|
|
168
|
+
if (input.networking.loadBalancerBandwidthMbps) {
|
|
169
|
+
const lbPrice = netPricing.find((n) => n.type === 'flexible-load-balancer');
|
|
170
|
+
const bwPrice = netPricing.find((n) => n.type === 'flexible-load-balancer-bandwidth');
|
|
171
|
+
if (lbPrice && bwPrice) {
|
|
172
|
+
// Base LB cost
|
|
173
|
+
const lbCost = lbPrice.pricePerUnit * HOURS_PER_MONTH;
|
|
174
|
+
breakdown.push({
|
|
175
|
+
category: 'Networking',
|
|
176
|
+
item: 'Flexible Load Balancer',
|
|
177
|
+
quantity: 1,
|
|
178
|
+
unit: 'instance',
|
|
179
|
+
unitPrice: lbPrice.pricePerUnit,
|
|
180
|
+
monthlyTotal: lbCost,
|
|
181
|
+
});
|
|
182
|
+
totalMonthly += lbCost;
|
|
183
|
+
// Bandwidth cost
|
|
184
|
+
const bwCost = bwPrice.pricePerUnit * input.networking.loadBalancerBandwidthMbps * HOURS_PER_MONTH;
|
|
185
|
+
breakdown.push({
|
|
186
|
+
category: 'Networking',
|
|
187
|
+
item: 'Load Balancer Bandwidth',
|
|
188
|
+
quantity: input.networking.loadBalancerBandwidthMbps,
|
|
189
|
+
unit: 'Mbps',
|
|
190
|
+
unitPrice: bwPrice.pricePerUnit,
|
|
191
|
+
monthlyTotal: bwCost,
|
|
192
|
+
});
|
|
193
|
+
totalMonthly += bwCost;
|
|
194
|
+
notes.push('First LB and 10 Mbps free for paid accounts (not reflected in estimate).');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Outbound Data Transfer
|
|
198
|
+
if (input.networking.outboundDataGB) {
|
|
199
|
+
const egressPrice = netPricing.find((n) => n.type === 'data-egress');
|
|
200
|
+
if (egressPrice) {
|
|
201
|
+
// First 10 TB (10,240 GB) is free
|
|
202
|
+
const freeGB = egressPrice.includedDataGB || 10240;
|
|
203
|
+
const billableGB = Math.max(0, input.networking.outboundDataGB - freeGB);
|
|
204
|
+
if (billableGB > 0) {
|
|
205
|
+
const egressCost = egressPrice.pricePerUnit * billableGB;
|
|
206
|
+
breakdown.push({
|
|
207
|
+
category: 'Networking',
|
|
208
|
+
item: 'Outbound Data Transfer',
|
|
209
|
+
quantity: billableGB,
|
|
210
|
+
unit: 'GB',
|
|
211
|
+
unitPrice: egressPrice.pricePerUnit,
|
|
212
|
+
monthlyTotal: egressCost,
|
|
213
|
+
});
|
|
214
|
+
totalMonthly += egressCost;
|
|
215
|
+
}
|
|
216
|
+
notes.push(`First ${freeGB / 1024} TB of outbound data is free per month. You specified ${input.networking.outboundDataGB} GB.`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Add free tier notes
|
|
221
|
+
const freeTier = getFreeTier();
|
|
222
|
+
if (freeTier) {
|
|
223
|
+
notes.push('OCI Always Free tier may reduce costs further (4 A1 OCPUs + 24GB RAM, 200GB block storage, etc.).');
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
breakdown,
|
|
227
|
+
totalMonthly: Math.round(totalMonthly * 100) / 100, // Round to 2 decimal places
|
|
228
|
+
currency: 'USD',
|
|
229
|
+
region: input.region || 'us-ashburn-1',
|
|
230
|
+
notes,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
export function quickEstimate(params) {
|
|
234
|
+
const presets = {
|
|
235
|
+
'small-web-app': {
|
|
236
|
+
compute: {
|
|
237
|
+
shape: 'VM.Standard.E4.Flex',
|
|
238
|
+
ocpus: 1,
|
|
239
|
+
memoryGB: 8,
|
|
240
|
+
},
|
|
241
|
+
storage: {
|
|
242
|
+
blockVolumeGB: 100,
|
|
243
|
+
objectStorageGB: 50,
|
|
244
|
+
},
|
|
245
|
+
networking: {
|
|
246
|
+
loadBalancerBandwidthMbps: 10,
|
|
247
|
+
outboundDataGB: 500,
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
'medium-api-server': {
|
|
251
|
+
compute: {
|
|
252
|
+
shape: 'VM.Standard.E5.Flex',
|
|
253
|
+
ocpus: 4,
|
|
254
|
+
memoryGB: 32,
|
|
255
|
+
},
|
|
256
|
+
storage: {
|
|
257
|
+
blockVolumeGB: 500,
|
|
258
|
+
objectStorageGB: 200,
|
|
259
|
+
},
|
|
260
|
+
networking: {
|
|
261
|
+
loadBalancerBandwidthMbps: 100,
|
|
262
|
+
outboundDataGB: 2000,
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
'large-database': {
|
|
266
|
+
compute: {
|
|
267
|
+
shape: 'VM.Standard.E5.Flex',
|
|
268
|
+
ocpus: 8,
|
|
269
|
+
memoryGB: 128,
|
|
270
|
+
},
|
|
271
|
+
storage: {
|
|
272
|
+
blockVolumeGB: 2000,
|
|
273
|
+
},
|
|
274
|
+
database: {
|
|
275
|
+
type: 'autonomous-transaction-processing',
|
|
276
|
+
ecpus: 4,
|
|
277
|
+
storageGB: 1000,
|
|
278
|
+
licenseIncluded: true,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
'ml-training': {
|
|
282
|
+
compute: {
|
|
283
|
+
shape: 'BM.GPU.A100-v2.8',
|
|
284
|
+
ocpus: 128,
|
|
285
|
+
memoryGB: 2048,
|
|
286
|
+
hoursPerMonth: 160, // Part-time usage
|
|
287
|
+
},
|
|
288
|
+
storage: {
|
|
289
|
+
blockVolumeGB: 5000,
|
|
290
|
+
objectStorageGB: 10000,
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
'kubernetes-cluster': {
|
|
294
|
+
compute: {
|
|
295
|
+
shape: 'VM.Standard.E5.Flex',
|
|
296
|
+
ocpus: 12, // 3 nodes x 4 OCPUs
|
|
297
|
+
memoryGB: 96, // 3 nodes x 32 GB
|
|
298
|
+
},
|
|
299
|
+
storage: {
|
|
300
|
+
blockVolumeGB: 300, // 3 nodes x 100 GB
|
|
301
|
+
objectStorageGB: 500,
|
|
302
|
+
},
|
|
303
|
+
networking: {
|
|
304
|
+
loadBalancerBandwidthMbps: 100,
|
|
305
|
+
outboundDataGB: 5000,
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
const config = presets[params.preset];
|
|
310
|
+
if (!config) {
|
|
311
|
+
throw new Error(`Unknown preset: ${params.preset}. Valid presets: ${Object.keys(presets).join(', ')}`);
|
|
312
|
+
}
|
|
313
|
+
config.region = params.region;
|
|
314
|
+
const result = calculateMonthlyCost(config);
|
|
315
|
+
result.notes.unshift(`Preset: ${params.preset}`);
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../src/tools/calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCI Compute Pricing Tools
|
|
3
|
+
*/
|
|
4
|
+
export interface ListComputeShapesParams {
|
|
5
|
+
family?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
maxOcpuPrice?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ComputeShapeInfo {
|
|
10
|
+
shapeFamily: string;
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
ocpuPrice: number;
|
|
14
|
+
memoryPricePerGB: number;
|
|
15
|
+
instancePricePerHour?: number;
|
|
16
|
+
totalPriceExample: string;
|
|
17
|
+
ocpuRange: string;
|
|
18
|
+
memoryRange: string;
|
|
19
|
+
gpuCount?: number;
|
|
20
|
+
localStorageGB?: number;
|
|
21
|
+
notes?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* List available OCI compute shapes with pricing
|
|
25
|
+
*/
|
|
26
|
+
export declare function listComputeShapes(params?: ListComputeShapesParams): {
|
|
27
|
+
shapes: ComputeShapeInfo[];
|
|
28
|
+
totalCount: number;
|
|
29
|
+
lastUpdated: string;
|
|
30
|
+
freeTierNote: string;
|
|
31
|
+
tips: string[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Get details for a specific compute shape
|
|
35
|
+
*/
|
|
36
|
+
export declare function getComputeShapeDetails(shapeFamily: string): {
|
|
37
|
+
shape: ComputeShapeInfo | null;
|
|
38
|
+
monthlyEstimates: Array<{
|
|
39
|
+
config: string;
|
|
40
|
+
monthlyUSD: number;
|
|
41
|
+
}>;
|
|
42
|
+
recommendations: string[];
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Compare compute shapes
|
|
46
|
+
*/
|
|
47
|
+
export declare function compareComputeShapes(shapes: string[]): {
|
|
48
|
+
comparison: Array<{
|
|
49
|
+
shapeFamily: string;
|
|
50
|
+
ocpuPrice: number;
|
|
51
|
+
memoryPricePerGB: number;
|
|
52
|
+
monthly4ocpu32gb: number;
|
|
53
|
+
maxOCPU: number | null;
|
|
54
|
+
maxMemoryGB: number | null;
|
|
55
|
+
}>;
|
|
56
|
+
recommendation: string;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=compute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../src/tools/compute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,uBAA4B,GAAG;IACvE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAkFA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC3D,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CA0EA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IACtD,UAAU,EAAE,KAAK,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAyCA"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCI Compute Pricing Tools
|
|
3
|
+
*/
|
|
4
|
+
import { getComputePricing, getLastUpdated, getFreeTier } from '../data/fetcher.js';
|
|
5
|
+
/**
|
|
6
|
+
* List available OCI compute shapes with pricing
|
|
7
|
+
*/
|
|
8
|
+
export function listComputeShapes(params = {}) {
|
|
9
|
+
let shapes = getComputePricing();
|
|
10
|
+
// Filter by family
|
|
11
|
+
if (params.family) {
|
|
12
|
+
const familyFilter = params.family.toLowerCase();
|
|
13
|
+
shapes = shapes.filter((s) => s.shapeFamily?.toLowerCase().includes(familyFilter) ||
|
|
14
|
+
s.type?.toLowerCase().includes(familyFilter));
|
|
15
|
+
}
|
|
16
|
+
// Filter by type
|
|
17
|
+
if (params.type) {
|
|
18
|
+
const typeFilter = params.type.toLowerCase();
|
|
19
|
+
shapes = shapes.filter((s) => s.type?.toLowerCase().includes(typeFilter));
|
|
20
|
+
}
|
|
21
|
+
// Filter by max price
|
|
22
|
+
if (params.maxOcpuPrice !== undefined) {
|
|
23
|
+
shapes = shapes.filter((s) => s.ocpuPrice <= params.maxOcpuPrice);
|
|
24
|
+
}
|
|
25
|
+
// Transform to user-friendly format
|
|
26
|
+
const shapeInfos = shapes.map((s) => {
|
|
27
|
+
// Check if this is a fixed-instance shape (bare metal, GPU) vs flexible
|
|
28
|
+
const isFixedInstance = s.unit === 'instance per hour' || (s.ocpuPrice === 0 && s.pricePerUnit > 0);
|
|
29
|
+
let totalPriceExample;
|
|
30
|
+
let instancePricePerHour;
|
|
31
|
+
if (isFixedInstance) {
|
|
32
|
+
// Fixed instance pricing (bare metal, GPU)
|
|
33
|
+
instancePricePerHour = s.pricePerUnit;
|
|
34
|
+
const monthlyPrice = s.pricePerUnit * 730;
|
|
35
|
+
totalPriceExample = `$${s.pricePerUnit.toFixed(2)}/hr = ~$${monthlyPrice.toFixed(2)}/month (fixed instance)`;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Flexible pricing (OCPU + memory)
|
|
39
|
+
const exampleOcpus = Math.min(4, s.maxOCPU || 4);
|
|
40
|
+
const exampleMemory = Math.min(32, s.maxMemoryGB || 32);
|
|
41
|
+
const exampleMonthly = (s.ocpuPrice * exampleOcpus + s.memoryPricePerGB * exampleMemory) * 730;
|
|
42
|
+
totalPriceExample = `~$${exampleMonthly.toFixed(2)}/month for ${exampleOcpus} OCPU, ${exampleMemory} GB RAM`;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
shapeFamily: s.shapeFamily || s.type,
|
|
46
|
+
type: s.type,
|
|
47
|
+
description: s.description,
|
|
48
|
+
ocpuPrice: s.ocpuPrice,
|
|
49
|
+
memoryPricePerGB: s.memoryPricePerGB,
|
|
50
|
+
instancePricePerHour,
|
|
51
|
+
totalPriceExample,
|
|
52
|
+
ocpuRange: s.minOCPU && s.maxOCPU ? `${s.minOCPU}-${s.maxOCPU} OCPUs` : 'N/A',
|
|
53
|
+
memoryRange: s.minMemoryGB && s.maxMemoryGB ? `${s.minMemoryGB}-${s.maxMemoryGB} GB` : 'N/A',
|
|
54
|
+
gpuCount: s.gpuCount,
|
|
55
|
+
localStorageGB: s.localStorageGB,
|
|
56
|
+
notes: s.notes,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
// Get free tier info
|
|
60
|
+
const freeTier = getFreeTier();
|
|
61
|
+
const freeTierNote = freeTier?.compute
|
|
62
|
+
? `Always Free: ${freeTier.compute.arm}, ${freeTier.compute.amd}`
|
|
63
|
+
: 'Always Free tier available';
|
|
64
|
+
return {
|
|
65
|
+
shapes: shapeInfos,
|
|
66
|
+
totalCount: shapeInfos.length,
|
|
67
|
+
lastUpdated: getLastUpdated(),
|
|
68
|
+
freeTierNote,
|
|
69
|
+
tips: [
|
|
70
|
+
'VM.Standard.A1.Flex (Arm) offers best value at $0.01/OCPU/hr',
|
|
71
|
+
'VM.Standard.E5.Flex is recommended for new x86 deployments (21% better perf vs E4)',
|
|
72
|
+
'1 OCPU = 2 vCPUs for x86 architectures',
|
|
73
|
+
'Preemptible instances are 50% cheaper for fault-tolerant workloads',
|
|
74
|
+
'Memory pricing is separate from OCPU pricing for Flex shapes',
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get details for a specific compute shape
|
|
80
|
+
*/
|
|
81
|
+
export function getComputeShapeDetails(shapeFamily) {
|
|
82
|
+
const shapes = getComputePricing();
|
|
83
|
+
const shape = shapes.find((s) => s.shapeFamily?.toLowerCase() === shapeFamily.toLowerCase());
|
|
84
|
+
if (!shape) {
|
|
85
|
+
return {
|
|
86
|
+
shape: null,
|
|
87
|
+
monthlyEstimates: [],
|
|
88
|
+
recommendations: [`Shape "${shapeFamily}" not found. Use list_compute_shapes to see available shapes.`],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const shapeInfo = {
|
|
92
|
+
shapeFamily: shape.shapeFamily || shape.type,
|
|
93
|
+
type: shape.type,
|
|
94
|
+
description: shape.description,
|
|
95
|
+
ocpuPrice: shape.ocpuPrice,
|
|
96
|
+
memoryPricePerGB: shape.memoryPricePerGB,
|
|
97
|
+
totalPriceExample: '',
|
|
98
|
+
ocpuRange: shape.minOCPU && shape.maxOCPU ? `${shape.minOCPU}-${shape.maxOCPU} OCPUs` : 'N/A',
|
|
99
|
+
memoryRange: shape.minMemoryGB && shape.maxMemoryGB ? `${shape.minMemoryGB}-${shape.maxMemoryGB} GB` : 'N/A',
|
|
100
|
+
gpuCount: shape.gpuCount,
|
|
101
|
+
localStorageGB: shape.localStorageGB,
|
|
102
|
+
notes: shape.notes,
|
|
103
|
+
};
|
|
104
|
+
// Calculate various monthly estimates
|
|
105
|
+
const configs = [
|
|
106
|
+
{ ocpus: 1, memory: 8, name: '1 OCPU, 8 GB' },
|
|
107
|
+
{ ocpus: 2, memory: 16, name: '2 OCPU, 16 GB' },
|
|
108
|
+
{ ocpus: 4, memory: 32, name: '4 OCPU, 32 GB' },
|
|
109
|
+
{ ocpus: 8, memory: 64, name: '8 OCPU, 64 GB' },
|
|
110
|
+
{ ocpus: 16, memory: 128, name: '16 OCPU, 128 GB' },
|
|
111
|
+
];
|
|
112
|
+
const monthlyEstimates = configs
|
|
113
|
+
.filter((c) => (!shape.maxOCPU || c.ocpus <= shape.maxOCPU) &&
|
|
114
|
+
(!shape.maxMemoryGB || c.memory <= shape.maxMemoryGB))
|
|
115
|
+
.map((c) => ({
|
|
116
|
+
config: c.name,
|
|
117
|
+
monthlyUSD: Math.round((shape.ocpuPrice * c.ocpus + shape.memoryPricePerGB * c.memory) * 730 * 100) / 100,
|
|
118
|
+
}));
|
|
119
|
+
// Generate recommendations
|
|
120
|
+
const recommendations = [];
|
|
121
|
+
if (shape.shapeFamily?.includes('A1')) {
|
|
122
|
+
recommendations.push('Best value for Arm-compatible workloads (Linux, containers, etc.)');
|
|
123
|
+
recommendations.push('Includes in Always Free tier (4 OCPUs + 24 GB)');
|
|
124
|
+
}
|
|
125
|
+
else if (shape.shapeFamily?.includes('E5')) {
|
|
126
|
+
recommendations.push('Recommended for new x86 deployments');
|
|
127
|
+
recommendations.push('21%+ better price-performance vs E4');
|
|
128
|
+
}
|
|
129
|
+
else if (shape.shapeFamily?.includes('E4')) {
|
|
130
|
+
recommendations.push('Previous generation - consider E5 for new workloads');
|
|
131
|
+
recommendations.push('Still widely supported and stable');
|
|
132
|
+
}
|
|
133
|
+
else if (shape.type?.includes('gpu')) {
|
|
134
|
+
recommendations.push('For ML/AI training and inference workloads');
|
|
135
|
+
recommendations.push('Consider preemptible instances for training (50% savings)');
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
shape: shapeInfo,
|
|
139
|
+
monthlyEstimates,
|
|
140
|
+
recommendations,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Compare compute shapes
|
|
145
|
+
*/
|
|
146
|
+
export function compareComputeShapes(shapes) {
|
|
147
|
+
const allShapes = getComputePricing();
|
|
148
|
+
const comparison = shapes
|
|
149
|
+
.map((shapeFamily) => {
|
|
150
|
+
const shape = allShapes.find((s) => s.shapeFamily?.toLowerCase() === shapeFamily.toLowerCase());
|
|
151
|
+
if (!shape)
|
|
152
|
+
return null;
|
|
153
|
+
return {
|
|
154
|
+
shapeFamily: shape.shapeFamily || shape.type,
|
|
155
|
+
ocpuPrice: shape.ocpuPrice,
|
|
156
|
+
memoryPricePerGB: shape.memoryPricePerGB,
|
|
157
|
+
monthly4ocpu32gb: Math.round((shape.ocpuPrice * 4 + shape.memoryPricePerGB * 32) * 730 * 100) / 100,
|
|
158
|
+
maxOCPU: shape.maxOCPU || null,
|
|
159
|
+
maxMemoryGB: shape.maxMemoryGB || null,
|
|
160
|
+
};
|
|
161
|
+
})
|
|
162
|
+
.filter(Boolean);
|
|
163
|
+
// Find cheapest
|
|
164
|
+
const cheapest = comparison.reduce((min, c) => (c.monthly4ocpu32gb < min.monthly4ocpu32gb ? c : min), comparison[0]);
|
|
165
|
+
return {
|
|
166
|
+
comparison,
|
|
167
|
+
recommendation: cheapest
|
|
168
|
+
? `${cheapest.shapeFamily} is most cost-effective at $${cheapest.monthly4ocpu32gb}/month for 4 OCPU, 32 GB`
|
|
169
|
+
: 'No shapes found for comparison',
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=compute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../src/tools/compute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBpF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkC,EAAE;IAOpE,IAAI,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAEjC,mBAAmB;IACnB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnD,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,YAAa,CAAC,CAAC;IACrE,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAuB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,wEAAwE;QACxE,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAEpG,IAAI,iBAAyB,CAAC;QAC9B,IAAI,oBAAwC,CAAC;QAE7C,IAAI,eAAe,EAAE,CAAC;YACpB,2CAA2C;YAC3C,oBAAoB,GAAG,CAAC,CAAC,YAAY,CAAC;YACtC,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC;YAC1C,iBAAiB,GAAG,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAC/G,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,cAAc,GAClB,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,gBAAgB,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC;YAC1E,iBAAiB,GAAG,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,YAAY,UAAU,aAAa,SAAS,CAAC;QAC/G,CAAC;QAED,OAAO;YACL,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,oBAAoB;YACpB,iBAAiB;YACjB,SAAS,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK;YAC7E,WAAW,EACT,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK;YACjF,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,QAAQ,GAAG,WAAW,EAAyD,CAAC;IACtF,MAAM,YAAY,GAAG,QAAQ,EAAE,OAAO;QACpC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;QACjE,CAAC,CAAC,4BAA4B,CAAC;IAEjC,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,WAAW,EAAE,cAAc,EAAE;QAC7B,YAAY;QACZ,IAAI,EAAE;YACJ,8DAA8D;YAC9D,oFAAoF;YACpF,wCAAwC;YACxC,oEAAoE;YACpE,8DAA8D;SAC/D;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IAKxD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAClE,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,IAAI;YACX,gBAAgB,EAAE,EAAE;YACpB,eAAe,EAAE,CAAC,UAAU,WAAW,+DAA+D,CAAC;SACxG,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAqB;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;QAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB,EAAE,EAAE;QACrB,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK;QAC7F,WAAW,EACT,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK;QACjG,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;IAEF,sCAAsC;IACtC,MAAM,OAAO,GAAG;QACd,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QAC7C,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QAC/C,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QAC/C,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QAC/C,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE;KACpD,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO;SAC7B,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CACxD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,MAAM,EAAE,CAAC,CAAC,IAAI;QACd,UAAU,EACR,IAAI,CAAC,KAAK,CACR,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAC5E,GAAG,GAAG;KACV,CAAC,CAAC,CAAC;IAEN,2BAA2B;IAC3B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,eAAe,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAC1F,eAAe,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACzE,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,eAAe,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAC5D,eAAe,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,eAAe,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAC5E,eAAe,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,eAAe,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACnE,eAAe,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAgB;IAWnD,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAEtC,MAAM,UAAU,GAAG,MAAM;SACtB,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAClE,CAAC;QACF,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,gBAAgB,EACd,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;YACnF,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;SACvC,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAOb,CAAC;IAEL,gBAAgB;IAChB,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACjE,UAAU,CAAC,CAAC,CAAC,CACd,CAAC;IAEF,OAAO;QACL,UAAU;QACV,cAAc,EAAE,QAAQ;YACtB,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,+BAA+B,QAAQ,CAAC,gBAAgB,0BAA0B;YAC3G,CAAC,CAAC,gCAAgC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core OCI Pricing Tools
|
|
3
|
+
* get_pricing, list_services, compare_regions
|
|
4
|
+
*/
|
|
5
|
+
import type { OCIServiceCategory, PricingItem, RegionComparisonResult } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get pricing for a specific OCI resource
|
|
8
|
+
*/
|
|
9
|
+
export interface GetPricingParams {
|
|
10
|
+
service: 'compute' | 'storage' | 'database' | 'networking' | 'kubernetes';
|
|
11
|
+
type?: string;
|
|
12
|
+
region?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function getPricing(params: GetPricingParams): {
|
|
15
|
+
items: PricingItem[];
|
|
16
|
+
service: string;
|
|
17
|
+
type?: string;
|
|
18
|
+
region?: string;
|
|
19
|
+
lastUpdated: string;
|
|
20
|
+
note: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* List all OCI services with pricing categories
|
|
24
|
+
*/
|
|
25
|
+
export interface ListServicesParams {
|
|
26
|
+
category?: OCIServiceCategory;
|
|
27
|
+
}
|
|
28
|
+
export declare function listServices(params?: ListServicesParams): {
|
|
29
|
+
services: Array<{
|
|
30
|
+
name: string;
|
|
31
|
+
category: string;
|
|
32
|
+
description: string;
|
|
33
|
+
pricingTypes: string[];
|
|
34
|
+
documentationUrl: string;
|
|
35
|
+
}>;
|
|
36
|
+
categories: string[];
|
|
37
|
+
totalCount: number;
|
|
38
|
+
lastUpdated: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Compare pricing for a resource across regions
|
|
42
|
+
* Note: OCI has consistent pricing across commercial regions
|
|
43
|
+
*/
|
|
44
|
+
export interface CompareRegionsParams {
|
|
45
|
+
service: 'compute' | 'storage' | 'database' | 'networking' | 'kubernetes';
|
|
46
|
+
type: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function compareRegions(params: CompareRegionsParams): {
|
|
49
|
+
result: RegionComparisonResult | null;
|
|
50
|
+
regions: Array<{
|
|
51
|
+
name: string;
|
|
52
|
+
location: string;
|
|
53
|
+
type: string;
|
|
54
|
+
}>;
|
|
55
|
+
note: string;
|
|
56
|
+
lastUpdated: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* List all available OCI regions
|
|
60
|
+
*/
|
|
61
|
+
export declare function listRegions(): {
|
|
62
|
+
regions: Array<{
|
|
63
|
+
name: string;
|
|
64
|
+
location: string;
|
|
65
|
+
type: string;
|
|
66
|
+
}>;
|
|
67
|
+
commercialCount: number;
|
|
68
|
+
totalCount: number;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/tools/core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG;IACpD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CA+CA;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG;IAC7D,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAmBA;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG;IAC5D,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CA0CA;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CASA"}
|