Skip to main content
Glama
final-amazoncloudwatch-30day.cjsβ€’5.09 kB
#!/usr/bin/env node const { spawn } = require('child_process'); async function getFinalAmazonCloudWatch30Day() { console.log('πŸ’° AMAZON CLOUDWATCH 30-DAY AMORTIZED COST - FINAL'); console.log('🏒 AWS Account: 932213950603'); console.log('πŸ”§ Service: "AmazonCloudWatch" (correct format)'); console.log('πŸ“… Period: July 27 - August 26, 2025 (31 days)'); 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) {} } }); server.stderr.on('data', (data) => { const msg = data.toString(); if (msg.includes('[CLOUDWATCH-FILTER]')) { console.log('πŸ”§ SERVER:', msg.trim()); } }); 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)); console.log('πŸ” Getting AmazonCloudWatch costs for 30 days...'); 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: "AmazonCloudWatch" } } } }) + '\n'); await new Promise(resolve => setTimeout(resolve, 15000)); const response = responses.find(r => r.id === 2); if (response?.result?.content?.[0]?.text) { const text = response.result.content[0].text; console.log(`βœ… Response received (${text.length} chars)`); if (text.includes('0 items')) { console.log('❌ Still getting 0 items - may indicate no costs in this period'); console.log('πŸ“Š This could mean AmazonCloudWatch had no billable usage July 27 - Aug 26'); } else { const jsonMatch = text.match(/```json\n([\s\S]*?)\n```/); if (jsonMatch) { try { const data = JSON.parse(jsonMatch[1]); if (Array.isArray(data) && data.length > 0) { let totalCost = 0; let daysWithCost = 0; console.log('\nπŸ’° AmazonCloudWatch Daily Amortized Costs:'); console.log('=' .repeat(55)); data.forEach((day, i) => { if (day && day.total_cost !== undefined) { const cost = parseFloat(day.total_cost || 0); const date = day.usage_date || `Day ${i+1}`; totalCost += cost; if (cost > 0) { daysWithCost++; console.log(`πŸ“… ${date}: $${cost.toFixed(10)}`); } } }); console.log('\nπŸ† FINAL AMAZONCLOUDWATCH RESULTS:'); console.log('=' .repeat(50)); console.log(`πŸ’° Total 31-day Amortized Cost: $${totalCost.toFixed(10)}`); console.log(`🏒 AWS Account: 932213950603`); console.log(`πŸ”§ Service: AmazonCloudWatch`); console.log(`πŸ’³ Cost Type: Amortized`); console.log(`πŸ“… Period: July 27 - August 26, 2025`); console.log(`πŸ“ˆ Daily Average: $${(totalCost/31).toFixed(10)}`); console.log(`πŸ“Š Days with costs: ${daysWithCost}/31`); console.log(`πŸ“Š Days processed: ${data.length}`); console.log('\nβœ… CALCULATION METHOD:'); console.log('πŸ”§ Server-side filtering: filters[service]=AmazonCloudWatch'); console.log('πŸ’³ Amortized cost calculation'); console.log('🎯 Fixed service name format (no spaces)'); console.log('βœ… Both anomalies and filtering now work together'); } else { console.log('❌ Unexpected response format'); console.log('Response type:', typeof data); console.log('Response keys:', Object.keys(data)); } } catch (e) { console.log('❌ Parse error:', e.message); console.log('Response preview:', text.substring(0, 300)); } } else { console.log('❌ No JSON block found'); console.log('Response preview:', text.substring(0, 300)); } } } else { console.log('❌ No response received'); } server.kill(); } getFinalAmazonCloudWatch30Day().catch(console.error);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/daviddraiumbrella/invoice-monitoring'

If you have feedback or need assistance with the MCP directory API, please join our Discord server