Skip to main content

FastAPI Metrics - Project Specification

Project Vision

Zero-config metrics and observability for FastAPI apps targeting indie devs, startups, and no-code platforms. No Prometheus/Grafana infrastructure required.

Core Value Proposition

  • 5-minute setup: One import, one line of code
  • No infrastructure: SQLite/memory storage, no containers
  • Business metrics: Track revenue, users, features - not just HTTP metrics
  • Query API: JSON endpoints for custom dashboards
  • Cost tracking: Auto-detect OpenAI/Anthropic API costs
  • No-code ready: Retool/Bubble can consume the API directly

Target Users

  1. Indie developers building MVPs
  2. Early-stage startups (pre-Series A)
  3. No-code platform backends (Bubble, Retool, Make.com)
  4. Developers prototyping without DevOps resources

Technical Architecture

Package Structure

fastapi-metrics/
├── fastapi_metrics/
│   ├── __init__.py
│   ├── core.py              # Main Metrics class
│   ├── middleware.py        # Request tracking middleware
│   ├── storage/
│   │   ├── base.py          # Storage interface
│   │   ├── memory.py        # In-memory storage
│   │   ├── sqlite.py        # SQLite storage
│   │   └── redis.py         # Redis storage (optional)
│   ├── collectors/
│   │   ├── http.py          # HTTP request metrics
│   │   ├── system.py        # CPU, memory, disk
│   │   ├── business.py      # Custom business metrics
│   │   └── cost.py          # LLM API cost tracking
│   ├── health/
│   │   ├── checks.py        # Health check implementations
│   │   └── endpoints.py     # Health endpoints
│   ├── query.py             # Metrics query engine
│   └── exporters/
│       ├── json.py          # JSON export
│       ├── prometheus.py    # Prometheus format
│       └── csv.py           # CSV export
├── tests/
├── examples/
├── docs/
└── pyproject.toml

Phase 1: Core Functionality ⏳

1.1 Basic Setup & Middleware

  • ✅ Main Metrics class initialization
  • ✅ FastAPI app integration
  • ✅ Request tracking middleware
  • ✅ Response time calculation
  • ✅ Status code tracking

1.2 Storage Backends

  • ✅ Abstract storage interface
  • ✅ In-memory storage (dict-based)
  • ✅ SQLite storage with tables:
    • http_requests (timestamp, endpoint, method, status, latency_ms)
    • custom_metrics (timestamp, metric_name, value, labels)
    • system_metrics (timestamp, cpu, memory, disk)

1.3 HTTP Metrics Collection

  • ✅ Requests per endpoint
  • ✅ Requests per status code
  • ✅ Requests per method
  • ✅ Latency percentiles (p50, p95, p99)
  • ✅ Error rate calculation
  • ✅ Active requests counter

1.4 Query API Endpoints

  • ✅ GET /metrics - Current snapshot (JSON)
  • ✅ GET /metrics/query - Time-series queries
    • Query params: from, to, metric, group_by, endpoint
  • ✅ GET /metrics/endpoints - Per-endpoint stats
  • ✅ GET /metrics/export?format=csv|prometheus

Phase 2: Health Checks & System Metrics ⏳

2.1 Health Check System

  • ✅ Health check base class
  • ✅ Built-in checks:
    • ✅ Database connectivity
    • ✅ Redis connectivity
    • ✅ Disk space
    • ✅ Memory usage
    • ✅ Custom check support
  • ✅ Health endpoints:
    • ✅ GET /health - Simple status
    • ✅ GET /health/live - Liveness probe
    • ✅ GET /health/ready - Readiness probe with checks

2.2 System Metrics

  • ✅ CPU usage tracking
  • ✅ Memory usage tracking
  • ✅ Disk usage tracking
  • ✅ Uptime tracking
  • ✅ System metrics endpoint

2.3 Additional

  • ✅Make Redis storage first-class (not optional)
  • ✅ Add proper K8s health checks (Phase 2 should be Phase 1)
  • ✅ Add deployment examples for multi-instance setups
  • ✅ Position as "lightweight alternative to Prometheus that scales"

Phase 3: Business Metrics & Cost Tracking ⏳

3.1 Custom Business Metrics

  • ✅ metrics.track(name, value, **labels) API
  • ✅ Counter metrics
  • ✅ Gauge metrics
  • ✅ Histogram metrics
  • ✅ Label/tag support for segmentation

3.2 LLM Cost Tracking

  • ✅ Auto-detect OpenAI API calls
  • ✅ Auto-detect Anthropic API calls
  • ✅ Token usage tracking
  • ✅ Cost calculation (using current pricing)
  • ✅ Cost by model/endpoint
  • ✅ GET /metrics/costs endpoint

Phase 4: Advanced Features ⏳

4.1 Retention & Cleanup

  • Configurable retention period
  • Automatic data cleanup job
  • Aggregation for old data (hourly → daily)

4.2 Alerting (Simple)

  • Threshold-based alerts
  • Webhook notifications
  • Email notifications (optional)

4.3 Export Formats

  • Prometheus format
  • CSV export
  • JSON export with timestamps

Phase 5: Documentation & Examples ⏳

5.1 Documentation

  • README with quick start
  • Full API documentation
  • Configuration guide
  • Storage backend comparison
  • Kubernetes deployment guide

5.2 Examples

  • Basic FastAPI app
  • With database health checks
  • Custom business metrics
  • LLM cost tracking
  • Retool integration example
  • No-code tool integration guide

5.3 Testing

  • Unit tests (80%+ coverage)
  • Integration tests
  • Performance benchmarks

API Design (MVP)

Basic Usage

from fastapi import FastAPI
from fastapi_metrics import Metrics

app = FastAPI()

# Minimal setup
metrics = Metrics(
    app,
    storage="sqlite://metrics.db",  # or "memory://"
    retention_hours=24,
)

# Track custom metrics anywhere
@app.post("/payment")
def payment(amount: float, user_id: int):
    metrics.track("revenue", amount, user_id=user_id)
    metrics.track("payment_count", 1)
    return {"status": "ok"}

Query Examples

GET /metrics
GET /metrics/query?metric=revenue&from=24h&group_by=hour
GET /metrics/endpoints
GET /metrics/costs
GET /health/ready

Key Decisions

Storage Strategy

  • Default: SQLite (single file, no setup)
  • Optional: Redis (for distributed systems)
  • Fallback: In-memory (testing/development)

Data Model

  • Store raw events initially
  • Aggregate on query (Phase 1)
  • Pre-aggregate for performance (Phase 4)

Performance

  • Async middleware (non-blocking)
  • Background workers for aggregation
  • Configurable batch writes
  • Query result caching

Success Metrics

  • < 5 lines of code to set up
  • < 1ms overhead per request
  • Works with SQLite (no external deps)
  • Query API returns in < 100ms
  • Retool/Bubble integration works out-of-box

Non-Goals (v1)

  • ❌ Replace Prometheus/Grafana for large scale
  • ❌ Distributed tracing
  • ❌ Log aggregation
  • ❌ APM-level profiling
  • ❌ Built-in UI (JSON API only)

Dependencies (Keep Minimal)

[dependencies]
fastapi = ">=0.100.0"
pydantic = ">=2.0.0"
aiosqlite = ">=0.19.0"  # Async SQLite
psutil = ">=5.9.0"      # System metrics
httpx = ">=0.24.0"      # For health checks (optional)

Progress Tracker

✅ Completed

  • Phase 1: Core functionality
  • Phase 2: Health checks
  • Phase 3: Business metrics
  • Phase 4: Advanced features

🚧 In Progress

  • Phase 5: Documentation

⏳ Todo

  • Phase 6: Additional Features

Quick Start Command (Future)

pip install fastapi-metrics

Development Setup (Future)

git clone https://github.com/yourusername/fastapi-metrics
cd fastapi-metrics
poetry install
poetry run pytest

Notes & Decisions Log

  • 2025-12-10: Initial spec created
  • Target: Indie devs who want metrics without infrastructure
  • Focus: Simplicity over enterprise features
  • SQLite as default storage for zero-config experience

Check errors in terminal

Check status of app

Metadata

Release files for fastapi-metrics 0.3.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-metrics 0.3.13
File Size Uploaded
fastapi_metrics-0.3.13.tar.gz 43.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-metrics 0.3.13
File Interpreter ABI Platform
fastapi_metrics-0.3.13-py3-none-any.whl Python 3 none any Details

Total release size: 86.0 kB

Release files / fastapi_metrics-0.3.13.tar.gz

Download URL fastapi_metrics-0.3.13.tar.gz
Size 43.9 kB
Tags Source
SHA-256 checksum
How to use checksums
efb55e5926fc9e826f5fc9de07333f47fe647f063909229b50b3b9bd2410199d
BLAKE2b-256 checksum
How to use checksums
dd42f7aaa985cc928a5fd472c5eefec0557953b241a48b6025c6363d2cfb8d31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / fastapi_metrics-0.3.13-py3-none-any.whl

Download URL fastapi_metrics-0.3.13-py3-none-any.whl
Size 42.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3aa6a58288729119ff1d91f7ec59274aef4dc768b2c0d54ed57e455c70b4613
BLAKE2b-256 checksum
How to use checksums
e2effeee6dbaac32ba1c3755894745bdf0bc3ec3b78d8d197dbbb084f0291a2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.3.13 This release

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.2

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page