#!/usr/bin/env node
const { spawn } = require('child_process');
async function extractCloudWatchCosts() {
console.log('π° CLOUDWATCH 30-DAY AMORTIZED COST - FINAL EXTRACTION');
console.log('π’ AWS Account: 932213950603');
const server = spawn('node', ['dist/index.js'], {
stdio: ['pipe', 'pipe', 'pipe'],
env: {
...process.env,
UMBRELLA_API_BASE_URL: 'https://api-front.umbrellacost.io/api/v1'
}
});
const responses = [];
server.stdout.on('data', (data) => {
const lines = data.toString().split('\n').filter(line => line.trim());
for (const line of lines) {
try {
responses.push(JSON.parse(line));
} catch (e) {}
}
});
await new Promise(resolve => setTimeout(resolve, 2000));
server.stdin.write(JSON.stringify({
jsonrpc: "2.0", id: 1, method: "tools/call",
params: {
name: 'authenticate_user',
arguments: { username: 'david+saola@umbrellacost.com', password: 'Dsamsung1!' }
}
}) + '\n');
console.log('π Authenticating...');
await new Promise(resolve => setTimeout(resolve, 6000));
server.stdin.write(JSON.stringify({
jsonrpc: "2.0", id: 2, method: "tools/call",
params: {
name: 'api___invoices_caui',
arguments: {
startDate: "2025-07-27",
endDate: "2025-08-26",
groupBy: "none",
periodGranLevel: "day",
costType: ["cost"],
isAmortized: true,
cloud_context: "aws",
accountId: "932213950603",
filters: {
service: "Amazon CloudWatch"
}
}
}
}) + '\n');
console.log('π Getting CloudWatch costs...');
for (let i = 0; i < 15; i++) {
await new Promise(resolve => setTimeout(resolve, 1000));
const response = responses.find(r => r.id === 2);
if (response?.result?.content?.[0]?.text) {
const text = response.result.content[0].text;
const jsonMatch = text.match(/```json\n([\s\S]*?)\n```/);
if (jsonMatch) {
try {
const data = JSON.parse(jsonMatch[1]);
let totalCost = 0;
let dayCount = 0;
console.log('\nπ° CloudWatch Daily Amortized Costs:');
console.log('=' .repeat(55));
// Process each daily entry
Object.keys(data).forEach(key => {
const entry = data[key];
if (entry && entry.total_cost !== undefined) {
const dailyCost = parseFloat(entry.total_cost || 0);
const date = entry.usage_date || `Day ${key}`;
totalCost += dailyCost;
dayCount++;
console.log(`π
${date}: $${dailyCost.toFixed(10)}`);
}
});
console.log('\nπ FINAL CLOUDWATCH RESULTS:');
console.log('=' .repeat(40));
console.log(`π° Total CloudWatch Amortized Cost (30 days): $${totalCost.toFixed(10)}`);
console.log(`π’ AWS Account: 932213950603`);
console.log(`π§ Service: Amazon CloudWatch`);
console.log(`π³ Cost Type: Amortized`);
console.log(`π
Period: July 27 - August 26, 2025`);
console.log(`π Daily Average: $${(totalCost / dayCount).toFixed(10)}`);
console.log(`π Days processed: ${dayCount}`);
console.log('\nπ Calculation Method:');
console.log('β
Server-side filtering (matches UI behavior)');
console.log('β
Same approach that resolved Aug 4th UI discrepancy');
console.log('β
Amortized cost with proper account-specific filtering');
console.log(`β
Extracted from ${dayCount} daily cost entries`);
} catch (e) {
console.log('β Parse error:', e.message);
}
}
break;
}
if (i % 5 === 0 && i > 0) console.log(`β³ ${i}s...`);
}
server.kill();
}
extractCloudWatchCosts().catch(console.error);