# Cost Service Per-vehicle cost estimation service for capacity planning and cloud vs on-prem comparison. ## Overview This service estimates the cost of running cloud services per VIN by: 1. Querying vehicle activity from ClickHouse (message counts) 2. Estimating resource usage based on activity level 3. Applying cost rates for cloud vs on-prem hosting 4. Storing aggregated cost data for reporting ## Cost Estimation Methodology ### Resource Estimates Per Active VIN | Activity Level | Messages/15min | CPU (cores) | Memory (GB) | |---------------|----------------|-------------|-------------| | Low | < 100 | 0.80 | 1.20 | | Medium | 100-1000 | 1.20 | 1.80 | | High | > 1000 | 1.60 | 2.40 | These estimates account for the full data pipeline per vehicle: - Data ingestion (MQTT/HTTP endpoints) - Kafka message processing - Stream processing and transformations - ClickHouse storage and queries - Redis caching - MongoDB document storage - API serving ### Base Infrastructure Costs Shared infrastructure costs are distributed across active vehicles each collection interval: | Component | Cloud ($/15min) | On-Prem ($/15min) | |-----------|-----------------|-------------------| | Storage, Event Hubs, Defender, monitoring | $10.00 | $0.90 | ### Cost Rates (per hour) | Resource | Cloud (Azure) | On-Prem | |----------|---------------|---------| | CPU/core | $0.30 | $0.02 | | Memory/GB| $0.08 | $0.005 | #### Cloud Rates (Fudged Higher) - Based on Azure D-series VM pricing + 50% managed services overhead - Includes: AKS compute, managed Kafka (Event Hubs), CosmosDB, Azure Storage, networking, monitoring - Intentionally conservative (higher) to show true cloud TCO #### On-Prem Rates (Fudged Lower) - Based on 3-year hardware amortization only - Assumes: owned hardware, minimal ops overhead - Intentionally optimistic (lower) to show on-prem savings - Does NOT include: datacenter costs, staff, power, cooling, network, maintenance ### Savings Calculation ``` Per-VIN Cost = (CPU_cores × rate + Memory_GB × rate) × hours + (base_infra / active_vins) Cloud Cost = Per-VIN costs summed across fleet On-Prem Cost = Same formula with on-prem rates Savings = Cloud Cost - On-Prem Cost Savings % = (Savings / Cloud Cost) × 100 ``` Expected savings: **~85-88%** with on-prem hosting (hardware costs only). ### Projected Annual Costs (5000 vehicles) Based on ~$100k/month cloud spend: | Metric | Cloud | On-Prem | |--------|-------|---------| | Monthly Cost | ~$100,000 | ~$9,500 | | Annual Cost | ~$1,200,000 | ~$114,000 | | Per Vehicle/Month | ~$20.00 | ~$1.90 | | Annual Savings | ~$1,086,000 (90%) | - | ## API Endpoints ### GET /cost/vin/{vin} Cost summary for a specific VIN. ### GET /cost/fleet Fleet-wide cost summary with top cost VINs. ### GET /cost/summary?period=day|week|month High-level cost summary for a time period. ### GET /cost/comparison Cloud vs on-prem cost comparison with projected annual savings. ### GET /cost/report Plain text report for terminal viewing. ## Accessing the Report The service is deployed internally on cec-prd-cluster-1 (no public ingress). To view the report: ```bash # Quick one-liner kubectl --context cec-prd-cluster-1 run curl-test --image=curlimages/curl --rm -it --restart=Never -- curl -s http://cost.default.svc.cluster.local:8077/cost/report # Or port-forward and curl locally kubectl --context cec-prd-cluster-1 port-forward svc/cost 8077:8077 & curl http://localhost:8077/cost/report ``` ## Example Report Output ``` ╔══════════════════════════════════════════════════════════════════╗ ║ COST SERVICE REPORT ║ ╠══════════════════════════════════════════════════════════════════╣ ║ Period: 2026-01-01 to 2026-02-01 ╠══════════════════════════════════════════════════════════════════╣ ║ FLEET OVERVIEW ║ ║ ─────────────────────────────────────────────────────────────── ║ ║ Active Vehicles: 383 ║ Cloud Cost: $51.66 ║ On-Prem Cost: $4.74 ║ Savings: $46.93 (90.8%) ╠══════════════════════════════════════════════════════════════════╣ ║ COST RATES ║ ║ ─────────────────────────────────────────────────────────────── ║ ║ Cloud: CPU $0.30/core-hr Memory $0.080/GB-hr ║ On-Prem: CPU $0.02/core-hr Memory $0.005/GB-hr ║ Base Infra: Cloud $10.00/15min On-Prem $0.90/15min ╠══════════════════════════════════════════════════════════════════╣ ║ ANNUAL PROJECTION (based on current usage) ║ ║ ─────────────────────────────────────────────────────────────── ║ ║ Cloud Annual: $619.97 ║ On-Prem Annual: $56.86 ║ Annual Savings: $563.11 ╚══════════════════════════════════════════════════════════════════╝ TOP COST VEHICLES: VIN Cloud $ On-Prem $ Savings % ─────────────────── ────────── ────────── ──────── VCF1ZBU26PG004962 0.24 0.02 90.6% VCF1EBU29PG008340 0.24 0.02 90.6% VCF1ZBU23PG005471 0.24 0.02 90.6% ... ``` *Note: Costs shown are from a short collection period. Numbers accumulate over time as the collector runs every 15 minutes.* ## Configuration | Env Var | Description | Default | |---------|-------------|---------| | CLICKHOUSE_HOST | Local CH for storing cost data | localhost | | REMOTE_CLICKHOUSE_HOST | Dev cluster CH for VIN activity | - | | COLLECTOR_INTERVAL_MINUTES | How often to collect metrics | 15 | ## Limitations - Resource estimates are approximations, not actual measurements - Cost rates are simplified and don't reflect all real-world factors - On-prem costs exclude significant operational overhead - Designed for business case illustration, not precise billing