Console Usage view with utilisation and waiting charts
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 52/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- playwright, typescript
- 领域
- documentation, frontend, testing
调研方向
Start with ui/src/views/index.tsx, ui/src/views/usage.tsx, and ui/src/views/usage-model.ts, then read the referenced architecture and design rules. Run the model, resource, chart, and Playwright tests named in the issue. Done means the Usage view matches the specified figures and charts, refreshes on the stated schedule, works at 360 px in both colour schemes, passes the axe check, and is documented in docs/CONSOLE.md.
由索引模型根据 Issue 内容生成。
描述
Part of #329.
Scope
After this PR, the console has a Usage view: a window picker (last hour, day, week), the figures as stat cards and tables, and two charts, utilisation and waiting over time, that update without a reload as the window moves. It follows the design guide, works at 360 px and in both colour schemes.
Technical spec
Modules touched
ui/src/views/index.tsx— aUsageentry inVIEWS, path/usage.ui/src/views/usage.tsxandui/src/views/usage-model.ts(pure, unit-tested) — the view and its model. The model turns oneusage.getanswer into the stat-card rows, the table rows and the two chart series; the view renders them withStatCards,Panel, the shared table fromui/src/table.tsx, and a chart built onui/src/charts.tsx.ui/src/charts.tsx— the chart takes a bucketed series with any width and formats the axis bybucketMs, whichMinuteChartassumes to be a minute today; the accessible table beside it does the same.- Data: a variant of
useLiveResourceinui/src/live/live-context.tsxthat refetches/v1/stats?since=<window>every 15 seconds while on screen and never more often; an event marks the resource stale for the next tick, not a fetch of its own; the window is in the URL's search (?window=1h|24h|7d) throughuseSearch, default24h. partialrenders as a note above the figures withcoversFrom.- On a worker the per-worker table has one row, itself; on a gateway one per worker. The per-requester table shows the label beside the id.
e2e/console/usage.spec.ts— Playwright, on the fake driver.docs/CONSOLE.md— the view.docs/internal/DESIGN.mdif a token or rule is added.
Contract and event changes
- None. The view reads
GET /v1/statsand the existing event stream.
Rules in play
architecture.mdrule 1: the model is pure and the view reads one route.testing.mdrule 1: each Playwright test title is a claim about what is on screen.docs/internal/DESIGN.md: charts have their numbers in an accessible table, animation off, colour by class; tables stack under 768 px; no horizontal scroll at 360 px; contrast AA in both schemes.
Tests
- the usage model turns an answer into stat cards for requests, grants by source, wait p95, held p50, peak utilisation and rejections
- the usage model turns the series into a utilisation chart series of slots used over max and a waiting chart series of requests waiting per bucket
- the usage model formats the window and the partial note from
coversFrom - the Usage resource refetches on the 15-second tick and not on the one-second tick, and an event does not start a fetch before the next tick
- the chart formats the axis by bucket width for one-minute, fifteen-minute and one-hour buckets
- (console) the Usage tab shows the figures for the last 24 hours by default and the picker switches to the last hour and the last week
- (console) after a lease is granted while the view is open, the request count rises within 15 seconds without a reload
- (console) the utilisation and waiting charts render with their accessible tables, and every number in a chart appears as text
- (console) at 360 px the view has no horizontal scroll and the tables stack
- (console) the view passes the axe check in light and dark schemes
- (console) on a gateway with two workers, the per-worker table has two rows; on a single host it has one
Done when
- On the fake driver, after a scripted run, the Usage view shows the figures and both charts for the chosen window, matching
simlock stats --jsonfor that window. - Taking a lease while the view is open raises the counts within 15 seconds without a reload.
- The view works at 360 px with no horizontal scroll, in light and dark schemes, and passes the console lane's axe check.
- On a gateway the per-worker table has one row per worker; on a worker it has one row.
docs/CONSOLE.mddescribes the view and its window picker.
Out of scope
- Explicit start and end dates in the console; the three fixed windows only. The CLI and the route cover arbitrary windows.
- Any chart beyond utilisation and waiting.
Depends on
- #348
Approval
- Approved for delivery
Written by an agent.
- 主要语言
- TypeScript
- 星标
- 15
- 派生
- 1
- 平均合并
- 8 小时 23 分钟
- 30 天内合并 PR
- 136
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
callstackincubator/simlock 的其他 Issue
-
bug:new
难度 2/5 1-3 小时 新手友好度 78/100
callstackincubator/simlock#424 ·
维护者通常 1 天内回复
-
bug:new
难度 2/5 1-3 小时 新手友好度 84/100
callstackincubator/simlock#422 ·
维护者通常 1 天内回复
-
bug:new
难度 1/5 1 小时以内 新手友好度 88/100
callstackincubator/simlock#420 ·
维护者通常 1 天内回复
-
bug:new
难度 2/5 1-3 小时 新手友好度 76/100
callstackincubator/simlock#350 · 1 条评论 ·
维护者通常 1 天内回复
-
Flaky e2e: gateway-fleet reads a worker's capacity before the worker has left starting可能已有人在做 @V3RON 于 2 天前认领。 未关闭bug:ready flaky-test
难度 4/5 1-2 天 新手友好度 48/100
callstackincubator/simlock#414 · 1 条评论 ·
维护者通常 1 天内回复
查看 callstackincubator/simlock 的全部 Issue
相似的 Issue
-
[bug] diagnostics.dumpBody:Buffer 形态请求(透传 lane)跳过 dumps/ 落盘,仅留 raw/-unknown-可能已有人在做 @ranxianglei 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 62/100
ranxianglei/billion-context#2421 · 2 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
platformatic/mcp#216 ·
维护者通常 1 天内回复
-
pending triage
难度 2/5 1-3 小时 新手友好度 76/100
nuxt/test-utils#1842 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 85/100
MoonshotAI/kimi-code#4146 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 85/100
farbenmeer/tapi#531 ·