Skip to content

feat(control): reserve ControlService.PingTarget RPC (FJB-97 Phase A skeleton)#115

Open
hstern wants to merge 1 commit into
mainfrom
feat/fjb-97-wait-for-target
Open

feat(control): reserve ControlService.PingTarget RPC (FJB-97 Phase A skeleton)#115
hstern wants to merge 1 commit into
mainfrom
feat/fjb-97-wait-for-target

Conversation

@hstern

@hstern hstern commented May 29, 2026

Copy link
Copy Markdown
Owner

Summary

Proto-only skeleton for FJB-97. Reserves the ControlService.PingTarget RPC and ships the generated stubs. The handler embeds UnimplementedControlServiceHandler, so calls return CodeUnimplemented on the wire today.

Why split this from the implementation? The actual probe driver needs to inject wg.Tunnel into the orchestrator (multi-file plumbing: orchestrator.New signature, Backend interface, main.go wiring, mock backends, …). Landing the interface contract first gives Phase B's fjbctl ping CLI a stable shape to build against and keeps PRs focused.

What's in

  • ControlService.PingTarget(PingTargetRequest) returns (stream PingTargetEvent) — server-streaming.
  • PingTargetRequest: target name, count, interval, timeout.
  • PingTargetEvent oneof: Resolved (first frame), Echo (per-attempt, success or timeout), Summary (terminal).

Next steps

A follow-up PR adds: ICMP probe driver via wg.Tunnel.ListenPingAddr, Backend interface method, orchestrator wiring, handler implementation, tests. Then Phase B adds the gRPC probe layer + fjbctl ping CLI.

🤖 Generated with Claude Code

…skeleton)

Proto definition + generated stubs for the orchestrator-side ICMP
probe. The handler embeds UnimplementedControlServiceHandler so
PingTarget returns CodeUnimplemented on the wire today; the actual
implementation (orchestrator probe driver, wg.Tunnel.ListenPingAddr
integration, event stream wiring) lands in a follow-up commit so
this PR stays focused on the interface contract.

Wire shape (matches the FJB-97 design doc):
  - PingTargetRequest: target, count, interval, timeout
  - PingTargetEvent oneof Resolved | Echo | Summary
  - Resolved is the first event (target, remote_ip, source_ip)
  - Echo is one attempt's outcome (seq, rtt_ms, timeout bool)
  - Summary is the terminal event (transmitted, received, rtt stats)

Phase B will add the gRPC probe layer (agent.Health) and the
fjbctl ping CLI (with --wait / --probe modes per the design doc).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hstern hstern enabled auto-merge (squash) May 29, 2026 02:54
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