You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Drives the sweep. Manages onchain user records on the live devnet ledger (alternate serviceability program), records timestamps end-to-end, and runs the agent on the DUT via SSH so its log goes to a known location.
Reconcile-to-target loop: on each batch iteration, query the alternate-program user list, create or delete to reach the next target. Use smartcontract/sdk/go/serviceability directly — do not shell out to the doublezero CLI.
Hold: pause --hold-seconds between batches for observer samples.
Agent runner: ssh to DUT, run doublezero-agent ... -verbose, stream stdout/stderr into <working-dir>/orchestrator.agent.log. Parse "Committing config session due to diffs detected: <diff>" to extract + interface Tunnel<ID> and record t_pre_commit_log; parse the commit-success line (from config agent: log config size in bytes #3741 scope extension) to record t_agent_applied.
Why
Drives the sweep. Manages onchain user records on the live devnet ledger (alternate serviceability program), records timestamps end-to-end, and runs the agent on the DUT via SSH so its log goes to a known location.
See Notion design for full context.
Depends on
Scope (single Go binary; PR may split — flag at review)
Create
tools/stress/device-orchestrator/(new Go module under the existingtools/tree alongsidegnmi-tunnel,twamp, etc.).--target-user-count,--users-per-batch,--hold-seconds(default 180),--dut-pubkey,--dut-ssh-host,--dut-ssh-key,--rpc-url,--program-id,--keypair,--controller(IP:PORT, passed to agent),--abort-file,--working-dir.smartcontract/sdk/go/serviceabilitydirectly — do not shell out to thedoublezeroCLI.--hold-secondsbetween batches for observer samples.sshto DUT, rundoublezero-agent ... -verbose, stream stdout/stderr into<working-dir>/orchestrator.agent.log. Parse"Committing config session due to diffs detected: <diff>"to extract+ interface Tunnel<ID>and recordt_pre_commit_log; parse the commit-success line (from config agent: log config size in bytes #3741 scope extension) to recordt_agent_applied.--working-dir:orchestrator-config.json— all CLI options.orchestrator-runlog.json— one row per event:{run_id, user_index, user_pubkey, tunnel_id, event, t_ns, n_after_event}. Events:submit | confirm | activate | pre_commit_log | applied | deprovision_*.orchestrator.agent.log— tailed agent output.--abort-file; on appearance, finish the current user, stop, dump partial outputs, exit non-zero.Acceptance
--abort-filewithin one batch iteration.doublezeroCLI shellouts in the code.Notes
If PR exceeds ~500 LOC, split into: (a) SDK-based user CRUD + reconcile-to-target; (b) sweep loop + JSON outputs + abort polling; (c) SSH + agent log parser. Mention this in the PR description per
CLAUDE.md.Tracker: #3744.