Note
Currently processing new changes in this PR. This may take a few minutes, please wait...
βοΈ Run configuration
- Configuration used: Organization UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
6870bb46-4730-4d67-a62e-638375221124
π₯ Commits
Reviewing files that changed from the base of the PR and between ca80990e4a35ef16efc08206099deb2e8a78dfd8 and f14ad032c7b5957412e4de73aa608b551ebe85ee.
β Files ignored due to path filters (5)
core/crates/ployz-sdk/generated/capabilities.d.tsis excluded by!**/generated/**core/crates/ployz-sdk/generated/capabilities.jsis excluded by!**/generated/**core/crates/ployz-sdk/generated/capabilities.mjsis excluded by!**/generated/**core/crates/ployz-sdk/generated/config-wasm.mjsis excluded by!**/generated/**core/crates/ployz-sdk/generated/payloads.d.tsis excluded by!**/generated/**
π Files selected for processing (248)
.agents/skills/verify-dashboard/SKILL.md.agents/skills/verify-server/SKILL.md.gitignorecore/DESIGN.mdcore/crates/ployz-core/src/domain/machine.rscore/crates/ployz-core/src/lib.rscore/crates/ployz-core/src/machine_telemetry.rscore/crates/ployz-core/src/rpc.rscore/crates/ployz-core/src/rpc/build_grant.rscore/crates/ployz-core/src/rpc/docker.rscore/crates/ployz-core/src/rpc/inspect.rscore/crates/ployz-core/src/rpc/upgrade.rscore/crates/ployz-core/src/rpc_catalog.rscore/crates/ployz-core/src/storage_capacity.rscore/crates/ployz-core/src/volume_copy.rscore/crates/ployz-core/src/volume_switch.rscore/crates/ployz-core/tests/capabilities.rscore/crates/ployz-core/tests/contract.rscore/crates/ployz-core/tests/machine_admin.rscore/crates/ployz-sdk/index.d.tscore/crates/ployz-sdk/index.jscore/crates/ployz-sdk/src/agent.rscore/crates/ployz-sdk/src/config_store.rscore/crates/ployz-sdk/src/lib.rscore/crates/ployz-sdk/tests/config-contract.mjscore/crates/ployz-sdk/tests/node_register.jscore/crates/ployz-sdk/tests/node_smoke.jscore/crates/ployz-sdk/tests/node_volumes.jscore/crates/ployz-sdk/tests/payload-types.tscore/crates/ployz-testkit/src/fake_fleet.rscore/crates/ployz-testkit/src/lib.rscore/crates/ployz-testkit/src/machine_admin.rscore/crates/ployz-testkit/tests/cluster.rscore/crates/ployz-testkit/tests/fake_fleet.rscore/crates/ployz/src/cluster.rscore/crates/ployz/src/cluster/container_observations.rscore/crates/ployz/src/cluster_teardown.rscore/crates/ployz/src/cluster_tests.rscore/crates/ployz/src/connect.rscore/crates/ployz/src/deploy/exec/mod.rscore/crates/ployz/src/deploy/exec_cluster_tests.rscore/crates/ployz/src/deploy/exec_tests.rscore/crates/ployz/src/deploy/exec_tests/dispatch.rscore/crates/ployz/src/deploy/exec_tests/health.rscore/crates/ployz/src/deploy/exec_tests/hooks.rscore/crates/ployz/src/deploy/exec_tests/moving.rscore/crates/ployz/src/deploy/exec_tests/replacement.rscore/crates/ployz/src/deploy/exec_tests/restart.rscore/crates/ployz/src/deploy/pipeline.rscore/crates/ployz/src/failure.rscore/crates/ployz/src/global_catch_up.rscore/crates/ployz/src/global_catch_up_rpc_tests.rscore/crates/ployz/src/global_catch_up_tests.rscore/crates/ployz/src/global_slot.rscore/crates/ployz/src/handlers/cloud.rscore/crates/ployz/src/handlers/server.rscore/crates/ployz/src/handlers/server/add.rscore/crates/ployz/src/handlers/server/helpers.rscore/crates/ployz/src/handlers/server/init.rscore/crates/ployz/src/handlers/server/inspect.rscore/crates/ployz/src/handlers/server/remove.rscore/crates/ployz/src/handlers/server/setup_tests.rscore/crates/ployz/src/handlers/server/upgrade.rscore/crates/ployz/src/handlers/service/mod.rscore/crates/ployz/src/handlers/service/tests.rscore/crates/ployz/src/handlers/volume/run.rscore/crates/ployz/src/handlers/volume/run_tests.rscore/crates/ployz/src/image/cleanup.rscore/crates/ployz/src/ingress.rscore/crates/ployz/src/sdk.rscore/crates/ployz/src/sdk/agent.rscore/crates/ployz/src/sdk/agent_tests.rscore/crates/ployz/src/sdk/github_build.rscore/crates/ployz/src/sdk/payloads.rscore/crates/ployz/src/sdk/volume_switch_tests.rscore/crates/ployz/tests/build_layer3/grant.rscore/crates/ployz/tests/certificates_cluster.rscore/crates/ployz/tests/cloud_init/founder_resumption.rscore/crates/ployz/tests/cloud_init/harness.rscore/crates/ployz/tests/cloud_init/main.rscore/crates/ployz/tests/cloud_init/policy.rscore/crates/ployz/tests/connect/sdk.rscore/crates/ployz/tests/connect/sdk_register.rscore/crates/ployz/tests/connect/sdk_remove_machine.rscore/crates/ployz/tests/connect/sdk_upgrade_machine.rscore/crates/ployz/tests/connect/support.rscore/crates/ployz/tests/deploy_client.rscore/crates/ployz/tests/deploy_client/support.rscore/crates/ployz/tests/drain_cluster.rscore/crates/ployz/tests/ingress_cluster.rscore/crates/ployz/tests/internal_dns_cluster.rscore/crates/ployz/tests/operator_cluster.rscore/crates/ployz/tests/service_cluster.rscore/crates/ployz/tests/support/containers.rscore/crates/ployz/tests/volume_layer3.rscore/crates/ployzd/src/build/tests.rscore/crates/ployzd/src/corrosion/store_tests.rscore/crates/ployzd/src/daemon.rscore/crates/ployzd/src/docker/images.rscore/crates/ployzd/src/docker/integration_tests.rscore/crates/ployzd/src/docker/integration_tests/observe_volumes.rscore/crates/ployzd/src/docker/integration_tests/stream.rscore/crates/ployzd/src/docker/lifecycle.rscore/crates/ployzd/src/docker/mod.rscore/crates/ployzd/src/docker/stream.rscore/crates/ployzd/src/docker/test_support.rscore/crates/ployzd/src/docker/volume.rscore/crates/ployzd/src/faults.rscore/crates/ployzd/src/installer/upgrade.rscore/crates/ployzd/src/installer/upgrade/tests.rscore/crates/ployzd/src/lib.rscore/crates/ployzd/src/machine/local_machine.rscore/crates/ployzd/src/machine/local_machine/container.rscore/crates/ployzd/src/machine/local_machine/container_tests.rscore/crates/ployzd/src/machine/local_machine/departure_tests.rscore/crates/ployzd/src/machine/local_machine/management_client.rscore/crates/ployzd/src/machine/local_machine/upgrade.rscore/crates/ployzd/src/machine/mod.rscore/crates/ployzd/src/machine/record_owner.rscore/crates/ployzd/src/machine/register_tests/harness.rscore/crates/ployzd/src/machine/register_tests/mod.rscore/crates/ployzd/src/machine/register_tests/policy.rscore/crates/ployzd/src/machine/store.rscore/crates/ployzd/src/machine_api/local.rscore/crates/ployzd/src/machine_api/local_tests.rscore/crates/ployzd/src/machine_api/local_volume_copy.rscore/crates/ployzd/src/machine_api/mod.rscore/crates/ployzd/src/management/build_grant.rscore/crates/ployzd/src/network.rscore/crates/ployzd/src/network/linux.rscore/crates/ployzd/src/volume_copy.rscore/crates/ployzd/src/volume_plugin.rscore/crates/ployzd/src/volume_plugin/capacity.rscore/crates/ployzd/src/volume_plugin/container_step.rscore/crates/ployzd/src/volume_plugin/copy.rscore/crates/ployzd/src/volume_plugin/departure.rscore/crates/ployzd/src/volume_plugin/inspect.rscore/crates/ployzd/src/volume_plugin/lease.rscore/crates/ployzd/src/volume_plugin/mirror.rscore/crates/ployzd/src/volume_plugin/pool.rscore/crates/ployzd/src/volume_plugin/removal.rscore/crates/ployzd/src/volume_plugin/seed.rscore/crates/ployzd/src/volume_plugin/storage.rscore/crates/ployzd/src/volume_plugin/switch_source.rscore/crates/ployzd/src/volume_plugin/switch_target.rscore/crates/ployzd/src/volume_plugin/tests/copy_tests.rscore/crates/ployzd/src/volume_plugin/tests/departure_tests.rscore/crates/ployzd/src/volume_plugin/tests/fake_zfs.rscore/crates/ployzd/src/volume_plugin/tests/first_pool_tests.rscore/crates/ployzd/src/volume_plugin/tests/inspect_tests.rscore/crates/ployzd/src/volume_plugin/tests/lease_tests.rscore/crates/ployzd/src/volume_plugin/tests/mirror_tests.rscore/crates/ployzd/src/volume_plugin/tests/receive_tests.rscore/crates/ployzd/src/volume_plugin/tests/remove_tests.rscore/crates/ployzd/src/volume_plugin/tests/seed_tests.rscore/crates/ployzd/src/volume_plugin/tests/slot_tests.rscore/crates/ployzd/src/volume_plugin/tests/switch_source_tests.rscore/crates/ployzd/src/volume_plugin/tests/switch_target_tests.rscore/crates/ployzd/src/volume_plugin/transfer.rscore/crates/ployzd/src/volume_send.rscore/crates/ployzd/tests/machine_record.rscore/crates/ployzd/tests/management_connect.rscore/crates/ployzd/tests/process_smoke.rscore/scripts/test-verify-volume-fences.pycore/scripts/test-verify-volume-move.pycore/scripts/verify-clustercore/scripts/verify/incus.pycore/scripts/verify/test_volume_fences.pycore/scripts/verify/test_volume_move.pydashboard/DESIGN.mddashboard/drizzle/20261012122320_volume_run_epoch/migration.sqldashboard/drizzle/20261012122320_volume_run_epoch/snapshot.jsondashboard/drizzle/20261012170604_volume_run_drop_lease/migration.sqldashboard/drizzle/20261012170604_volume_run_drop_lease/snapshot.jsondashboard/evals/agent/fleet.eval.tsdashboard/evals/agent/graders.eval.tsdashboard/evals/agent/snapshot.tsdashboard/evals/agent/tasks.tsdashboard/evals/agent/today.eval.tsdashboard/scripts/verify/seed.tsdashboard/scripts/verify/up.shdashboard/src/collections/data-boundaries.static.test.tsdashboard/src/collections/data-sources.tsdashboard/src/modules/agent/call-cloud.server.tsdashboard/src/modules/config-store/config-store.server.postgres.test.tsdashboard/src/modules/config-store/config-store.server.tsdashboard/src/modules/config-store/store-deployment.inngest.postgres.test.tsdashboard/src/modules/config-store/store-deployment.inngest.tsdashboard/src/modules/config-store/store-deployment.server.tsdashboard/src/modules/config-store/store-github-builds.postgres.test.tsdashboard/src/modules/config-store/store-github-builds.server.tsdashboard/src/modules/config-store/store-lookup.server.tsdashboard/src/modules/machines/enrollment.server.postgres.test.tsdashboard/src/modules/machines/enrollment.server.tsdashboard/src/modules/machines/machine-removal.inngest.test.tsdashboard/src/modules/machines/machine-removal.inngest.tsdashboard/src/modules/machines/machine-removal.repository.tsdashboard/src/modules/machines/machine-removal.server.test.tsdashboard/src/modules/machines/machine-removal.server.tsdashboard/src/modules/machines/machine-removal.test.tsdashboard/src/modules/machines/machine-removal.tsdashboard/src/modules/machines/server-drain.inngest.postgres.test.tsdashboard/src/modules/machines/server-drain.server.tsdashboard/src/modules/machines/server-operations.server.tsdashboard/src/modules/machines/server-operations.test.tsdashboard/src/modules/machines/tables.tsdashboard/src/modules/metrics/metrics-model.test.tsdashboard/src/modules/metrics/metrics-model.tsdashboard/src/modules/metrics/metrics.functions.tsdashboard/src/modules/metrics/metrics.queries.tsdashboard/src/modules/metrics/metrics.server.tsdashboard/src/modules/metrics/metrics.tsdashboard/src/modules/metrics/metrics.verify-fixture.test.tsdashboard/src/modules/metrics/metrics.verify-fixture.tsdashboard/src/modules/runtime/daemon-compat.server.test.tsdashboard/src/modules/runtime/daemon-compat.server.tsdashboard/src/modules/runtime/daemon-compat.test.tsdashboard/src/modules/runtime/daemon-compat.tsdashboard/src/modules/runtime/ployz.server.tsdashboard/src/modules/server-upgrade/server-upgrade.inngest.postgres.test.tsdashboard/src/modules/server-upgrade/server-upgrade.inngest.tsdashboard/src/modules/server-upgrade/server-upgrade.server.tsdashboard/src/modules/service-act/service-act.inngest.postgres.test.tsdashboard/src/modules/service-act/service-act.server.tsdashboard/src/modules/volume-placement/daemon-release.test.tsdashboard/src/modules/volume-placement/daemon-release.tsdashboard/src/modules/volume-placement/volume-placement.blockers.test.tsdashboard/src/modules/volume-placement/volume-placement.deploy.postgres.test.tsdashboard/src/modules/volume-placement/volume-placement.deploy.server.tsdashboard/src/modules/volume-placement/volume-placement.test.tsdashboard/src/modules/volume-placement/volume-placement.tsdashboard/src/modules/volume-run/plan.test.tsdashboard/src/modules/volume-run/plan.tsdashboard/src/modules/volume-run/tables.tsdashboard/src/modules/volume-run/volume-run.inngest.tsdashboard/src/modules/volume-run/volume-run.postgres.test.tsdashboard/src/modules/volume-run/volume-run.server.tsdashboard/src/modules/volume-run/volume-run.test-fixture.tsdashboard/src/modules/volume-run/volume-run.tsdashboard/src/routes/_protected/cloud/$organizationSlug/_project/$projectSlug/$environmentSlug/resources/$resourceId/-components/StoreVolumePlacement.test.tsxdashboard/src/routes/_protected/cloud/$organizationSlug/_project/$projectSlug/$environmentSlug/resources/$resourceId/-components/StoreVolumePlacement.tsxdocs/user/account/agent-sidebar.mddocs/user/deploy/deployments.mddocs/user/servers/manage-servers.mddocs/user/services/move-a-volume.mddocs/user/services/restore-a-volume.mddocs/user/services/services.mddocs/user/troubleshooting/builds.md
| 1 | ___________________________________________________________ |
| 2 | < Did you mean to handle errors, or just *experience* them? > |
| 3 | ----------------------------------------------------------- |
| 4 | \ |
| 5 | \ \ |
| 6 | \ /\ |
| 7 | ( ) |
| 8 | .( o ). |
π Summary
Summary by CodeRabbit
- New Features
- The Monitoring tab now displays service resource metrics, including CPU, memory, network, and disk usage, alongside uptime and response-time history.
- View metrics by server, with indicators for missing readings, servers that need upgrades, resource limits, and managed volumes.
- Charts include deployment and event markers, and support selecting a time range.
- Documentation
- Updated monitoring guides to explain the charts, per-server data, missing metrics, and CLI access.
The Monitoring tab is always present and now combines uptime information with queried service metrics. Shared chart and formatting utilities render time series, gaps, limits, deployments, and event markers. Service runtime placement and deployed CPU limits feed monitoring views.
Changes: Service Monitoring Metrics
Layer / File(s) Summary Metric chart and time-series foundations
dashboard/src/components/metrics/*,dashboard/src/modules/metrics/*,dashboard/src/modules/uptime/uptime*,dashboard/src/routes/.../monitoring/MetricChart.tsxAdded a shared chart component and metric-grid and formatting helpers. Server references can have null names, and chart-window steps account for the source interval. Service monitoring context and tab wiring
dashboard/src/modules/config-store/store-services*,dashboard/src/routes/.../ServiceSummary.tsx,dashboard/src/routes/.../StoreServiceDrawer.tsx,dashboard/src/routes/.../monitoring-sections.ts,dashboard/src/routes/.../service-pages*Added deployed vCPU limit calculation and runtime placement context. The drawer renders the Monitoring tab without filtering pages by monitoring sections. Queried metrics and Monitoring tab presentation
dashboard/src/collections/data-boundaries.static.test.ts,dashboard/src/routes/.../monitoring/*,dashboard/src/modules/uptime/metrics-preview.ts,docs/user/observe/*The Monitoring tab queries service metrics and renders resource charts, availability states, and uptime views when uptime data exists. Removed synthetic preview metrics and the Edge latency tooltip row. Updated tests and monitoring documentation. Priority: β¬οΈ Low
Estimated code review effort: 4 (Complex) | ~45 minutes
Change: Feature
Sequence Diagram(s)
mermaid1 sequenceDiagram 2 participant StoreServiceDrawer 3 participant ServiceMonitoring 4 participant useServiceStatus 5 participant MonitoringTab 6 participant Charts 7 participant ServiceMetricsQuery 8 StoreServiceDrawer->>ServiceMonitoring: Pass service and monitoring context 9 ServiceMonitoring->>useServiceStatus: Read runtime status 10 ServiceMonitoring->>MonitoringTab: Pass placement count and monitoring props 11 MonitoringTab->>Charts: Render charts with metric context 12 Charts->>ServiceMetricsQuery: Query metrics for the selected range - New Features
Merge Risk: βͺ Minimal Β· up to ca809
The change replaces preview metrics with real service metrics on the Monitoring tab. No merge-blocking issue was found; only a small docs wording fix remains.
Security architecture risk: π΅ Low Β· up to ca809
The monitoring view uses existing authenticated, organization-scoped reads rather than granting new permissions or changing deployed services. No introduced authorization bypass was established. Some cache-isolation and cancellation guarantees remain unconfirmed, so the assessment is not minimal risk.
Retained concerns No architecture-level concerns identified.
Security review details
Security Blast Radius
- inferred β The inspected network path can read the selected service's metrics across an authorized organization's runtime connections. The client does not supply arbitrary server connections, credentials, namespaces, or runtime identities. Additional read traffic is introduced, but additional read authority was not established.
Trust Boundaries and Controls
- observed β Attacker-controlled request identifiers cross strict input validation and actor middleware, followed by requireAccess for the requested organization. Service lookup then constrains the environment and service name to that organization's configuration before reaching the runtime metric read.
Resilience and Maintainability Implications
- observed β The inherited runtime boundary registers session finalizers, bounds connection establishment, and closes sessions when pairing ownership changes or repeated pairing checks fail. These controls contain runtime-session lifecycle and revocation failures for the new monitoring consumer; browser-to-server transport cancellation remains unconfirmed.
Hardening Proposals
- proposed β Make monitoring cache ownership explicit by including organization and authentication scope plus stable service identity, or a documented equivalent lifecycle invariant. Invalidate affected entries when service identity is replaced. This would reduce reliance on implicit environment-ID uniqueness and name-reuse behavior; it is not a verified disclosure finding.
Pre-merge checks Β· Passed 4 Β· Failed 1
Failed Failed checks (1 warning)
Check name Status Explanation Resolution Docstring Coverage Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 32 functions across 16 files. (2 skipped:β¦ Write docstrings for the functions missing them to satisfy the coverage threshold. Passed Passed checks (4 passed)
Check name Status Explanation Description check Passed The description directly explains the replacement of preview metrics with real CPU, Memory, Network, and Disk metrics on the Monitoring tab, including the related UI behavior and testing. Title check Passed The title clearly and concisely identifies the main change: displaying a Service's metrics on its Monitoring tab. Linked Issues check Passed Check skipped because no linked issues were found for this pull request. Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage
Explanation
Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 32 functions across 16 files. (2 skipped: 2 unsupported.)
- Fix all pre-merge checks with AI
β¨ Finishing Touches
π Generate docstrings
- Commit to this branch
- Create a new PR
π§ͺ Generate unit tests (beta)
- Commit to this branch
- Create a new PR
- Autofix Β· Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Comment @coderabbitai help to get the list of available commands.