Skip to content

feat: add session affinity and request logs panel#128

Open
zhuinfra wants to merge 2 commits into
Quorinex:mainfrom
zhuinfra:main
Open

feat: add session affinity and request logs panel#128
zhuinfra wants to merge 2 commits into
Quorinex:mainfrom
zhuinfra:main

Conversation

@zhuinfra

Copy link
Copy Markdown

Session Affinity

Same API key routes to the same backend account across requests, improving prompt cache hit rate.

  • API key → account binding stored in memory (sync.Map)
  • Falls back to weighted round-robin when bound account is unavailable
  • Binding auto-clears on account failure for automatic recovery
  • Works even when requireApiKey is false (identifies key without enforcing auth)

Request Logs Panel

New "日志" tab in admin panel for viewing request history.

  • In-memory ring buffer (1000 entries max, reset on restart)
  • Columns: time, path, model, status, input/output tokens, cache read/write, credits, latency, key name
  • Filter by API key name
  • Auto-refresh every 5 seconds
  • Stats summary (total/success/failed/tokens)
  • Admin API: GET /admin/api/logs, GET /admin/api/logs/stats, DELETE /admin/api/logs

祝文涛 added 2 commits June 15, 2026 00:03
Same API key routes to the same backend account across requests,
improving prompt cache hit rate. Falls back to round-robin when
the bound account is unavailable.

Changes:
- Add sessionAffinity sync.Map to Handler
- Add getAffinityAccount() with fallback to weighted round-robin
- Recognize API key even when requireApiKey is false
- Clear binding on account failure for automatic recovery
- New in-memory log store (ring buffer, 1000 entries max)
- Admin API: GET /admin/api/logs, GET /admin/api/logs/stats, DELETE /admin/api/logs
- Log each request: path, model, status, tokens, cache, credits, latency, key
- Frontend: new Logs tab with table, stats summary, search by key name
- Auto-refresh every 5s, status color coding, credits column
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