Skip to content

feat: per-key usage history and token count tracking (Stories 3.1 + 3.2)#132

Merged
farovictor merged 1 commit intomainfrom
feat/usage-tracking
Apr 5, 2026
Merged

feat: per-key usage history and token count tracking (Stories 3.1 + 3.2)#132
farovictor merged 1 commit intomainfrom
feat/usage-tracking

Conversation

@farovictor
Copy link
Copy Markdown
Owner

Summary

  • GET /v1/keys/{id}/usage — paginated usage event history per virtual key, filterable by ?from= and ?to= (RFC3339)
  • Proxy records a usage.Event after every request (latency, status code, target service)
  • Token parsing from OpenAI-compatible response bodies when BIFROST_TRACK_TOKENS=true
  • New pkg/usage package: Event model, MemoryStore, SQLStore, Store interface
  • Migration 009_create_usage_events.sql + --migrate-only includes usage_events table

Test plan

  • TestListKeyUsage_Empty — 200 with empty events array
  • TestListKeyUsage_NotFound — 404 for unknown key
  • TestListKeyUsage_WithEvents — returns pre-seeded events with correct total
  • TestListKeyUsage_InvalidFrom — 400 on bad RFC3339 date
  • TestProxyRecordsUsageEvent — proxy call records one event in the usage store

🤖 Generated with Claude Code

- pkg/usage: Event model, MemoryStore, SQLStore with pagination
- routes: GET /v1/keys/{id}/usage endpoint (filterable by from/to, paginated)
- proxy: records a usage event after every proxied request (latency, status code, service)
- proxy: parses prompt/completion/total tokens from OpenAI-compatible responses when BIFROST_TRACK_TOKENS=true
- config: TrackTokens() and UsageRetentionDays() env vars
- migrations: 009_create_usage_events.sql
- tests: usage endpoint and proxy-records-event coverage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@farovictor farovictor self-assigned this Apr 5, 2026
@farovictor farovictor merged commit d64d472 into main Apr 5, 2026
8 checks passed
@farovictor farovictor deleted the feat/usage-tracking branch April 5, 2026 22:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant