Skip to content

feat(resilience): expose live combo queue telemetry - #15092

Merged
diegosouzapw merged 6 commits into
diegosouzapw:release/v3.8.52from
xiaoyaner0201:feat/queue-observability-15085
Oct 8, 2026
Merged

diegosouzapw merged 6 commits into
diegosouzapw:release/v3.8.52from
xiaoyaner0201:feat/queue-observability-15085

Conversation

@xiaoyaner0201

Copy link
Copy Markdown
Contributor

Summary

Adds a live queue observability panel to the System Health dashboard so operators can see where concurrency is accumulating without changing routing behavior.

Closes #15085
Related to #7778, #3872, and #8884

Changes

  • Expose the existing round-robin combo semaphore snapshot through the authenticated GET /api/admin/concurrency endpoint as comboQueues.
  • Add optional namespace filtering to rateLimitSemaphore.getStats() so the API reports only actual combo: gates for the combo view.
  • Add a dashboard panel that refreshes every 15 seconds and keeps combo-target queues separate from account semaphore queues.
  • Show running, queued, configured limit, cooldown/blocked state, snapshot timestamp, and load errors.
  • Add focused tests covering namespace filtering, API scope/auth wiring, and dashboard scope/error/timestamp presentation.

Validation

  • ✅ node --import tsx/esm --test tests/unit/queue-observability.test.ts — 3/3 pass
  • ✅ npm run typecheck:core
  • ✅ npm run lint -- --pass-on-unpruned-suppressions
  • ✅ Targeted ESLint on all changed files
  • ✅ npm run build
  • ✅ git diff --check
  • ⚠️ npm run lint without the existing --pass-on-unpruned-suppressions override exits because the repository currently reports unused suppression entries; the same full lint passes with the repository-supported override.
  • ⚠️ npm run test:scoped timed out while rebuilding the repository-wide import-impact map; the focused changed-area test passes independently.

Scope / non-goals

This PR is observability-only. It does not change queue limits, routing, fallback, account selection, historical retention, per-request wait attribution, or cross-process aggregation. Queue depth is an in-memory point-in-time snapshot and resets with the process, consistent with the existing semaphore implementation.

@diegosouzapw
diegosouzapw marked this pull request as ready for review October 8, 2026 04:57
@diegosouzapw
diegosouzapw merged commit f849008 into diegosouzapw:release/v3.8.52 Oct 8, 2026
17 of 18 checks passed
diegosouzapw added a commit that referenced this pull request Oct 8, 2026
Drains 9 v3.8.52 tip unit reds: 3 production defects — MCP bundle startup deadlock (async ESM init cycle from #13739; lazy-load cleanModelName), client bundles pulling server-only DB via imageRegistry→featureFlags (#15423; dependency-free resolver bridge, DB override preserved, default OFF), zh-CN/zh-TW glossary violations (#15138/#15092) — plus regenerated route namespaces, env-isolated guide-settings test, auth-test alignments that keep (and tighten to count=2) the loopback/management guards, quota-card guard following #15138 redesign, and stryker listing of 2 tip covering tests. Combined-board validation with #15903: 327/329 on the previously red files, typechecks, lint, 22 gates.
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.

feat(resilience): expose live combo and account queue telemetry

2 participants