Files
cloud-services/services/cost/README.md
Chris Rai 3dccf80a72 Add cost service for per-VIN cost estimation
- Estimates cloud vs on-prem costs per active vehicle
- Queries feature_table_last_shard from ClickHouse (lightweight)
- 85% savings estimate with on-prem (hardware only)
- Deployed to cec-prd-cluster-1 (internal only)
- Text report endpoint at /cost/report
2026-01-31 21:29:59 -05:00

143 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.15 | 0.25 |
| Medium | 100-1000 | 0.225 | 0.375 |
| High | > 1000 | 0.30 | 0.50 |
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
### Cost Rates (per hour)
| Resource | Cloud (Azure) | On-Prem |
|----------|---------------|---------|
| CPU/core | $0.12 | $0.015 |
| Memory/GB| $0.025 | $0.003 |
#### 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
```
Cloud Cost = (CPU_cores × $0.12 + Memory_GB × $0.025) × hours
On-Prem Cost = (CPU_cores × $0.015 + Memory_GB × $0.003) × hours
Savings = Cloud Cost - On-Prem Cost
Savings % = (Savings / Cloud Cost) × 100
```
Expected savings: **~85-88%** with on-prem hosting (hardware costs only).
## 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: 81
║ Cloud Cost: $0.58
║ On-Prem Cost: $0.09
║ Savings: $0.50 (85.2%)
╠══════════════════════════════════════════════════════════════════╣
║ COST RATES ║
║ ─────────────────────────────────────────────────────────────── ║
║ Cloud: CPU $0.120/core-hr Memory $0.0250/GB-hr
║ On-Prem: CPU $0.015/core-hr Memory $0.0030/GB-hr
╠══════════════════════════════════════════════════════════════════╣
║ ANNUAL PROJECTION (based on current usage) ║
║ ─────────────────────────────────────────────────────────────── ║
║ Cloud Annual: $6.99
║ On-Prem Annual: $1.04
║ Annual Savings: $5.96
╚══════════════════════════════════════════════════════════════════╝
TOP COST VEHICLES:
VIN Cloud $ On-Prem $ Savings %
─────────────────── ────────── ────────── ────────
VCF1EBU20PG009666 0.01 0.00 85.2%
VCF1EBU29PG011061 0.01 0.00 85.2%
VCF1UBU20PG006530 0.01 0.00 85.2%
...
```
*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