Help us shape the future of Go! Take the 2026 Go Developer Survey

ping

package
v1.3.102 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2026 License: AGPL-3.0 Imports: 28 Imported by: 0

Documentation

Overview

Package clivisor cmd/skywire-cli/commands/visor/ping/bandwidth.go c4-vis-cli

Package ping cmd/skywire-cli/commands/visor/ping/mux_bandwidth.go c4-vis-cli CLI consumer for the StreamMuxBandwidth gRPC RPC.

Operator-visible: `cli visor ping mux-bw <pk>` runs the multiplexed-route bandwidth test against a single peer.

Default stdout: human-readable rows + a final summary with avg / peak throughput, RTT distribution stats (when --probe-rtt is set), and the termination reason — the queueing-delay measurement reads off the summary table directly, no jq needed.

--json: emit NDJSON instead. Same envelope shape as ping tree-stream, so treeprobe-style harnesses can consume either.

--output FILE: NDJSON tee independent of stdout mode.

Run shapes (the operator's hypothesis matrix):

# Baseline — single route, no min_hops (picks direct if available)
cli visor ping mux-bw <pk> --duration 30s

# Single non-direct path — forces at least one intermediate
cli visor ping mux-bw <pk> --duration 30s --min-hops 2

# N parallel routes excluding direct — the operator's hypothesis
# call: should sum to MORE bandwidth than direct
cli visor ping mux-bw <pk> --duration 30s --routes 4 --min-hops 2

# Queueing-delay measurement: bandwidth + concurrent RTT probe
cli visor ping mux-bw <pk> --duration 30s --probe-rtt

Package ping cmd/skywire-cli/commands/visor/ping/mux_bandwidth_tui.go c4-vis-cli Interactive TUI consumer of the StreamMuxBandwidth gRPC RPC.

Operator-visible: `cli visor ping mux-bw-tui <pk>` runs the same multiplexed-route bandwidth test as `mux-bw` but presents it as a live dashboard instead of NDJSON: per-route status row, throughput sparkline, RTT-probe sparkline (when --probe-rtt is set), and a scrollable events log.

Identical flags to `mux-bw`; the only difference is rendering. Both subcommands ride the same server-side RPC handler, so a change at the server lands in both.

Package clivisorping cmd/skywire-cli/commands/visor/ping/mux_bandwidth_tui_impl.go c5-cli-visor

The screen of `visor ping mux-bw-tui`; the command spec stays in mux_bandwidth_tui.go.

Package ping cmd/skywire-cli/commands/visor/ping/ping.go c4-vis-cli

Package ping cmd/skywire-cli/commands/visor/ping/root.go c4-vis-cli

Package ping cmd/skywire-cli/commands/visor/ping/streamview.go c4-vis-cli

The screen shared by `ping tree` and `mux-bw-tui`: fixed ANSI lines on top, a scrolling body fed by a gRPC stream, and a key hint. It is drawn with progkit, so in websh the body is also selectable HTML text.

Package ping cmd/skywire-cli/commands/visor/ping/tree.go c4-vis-cli interactive TUI for `cli visor ping tree`.

History: this command used to host a ~2300-line client-side BFS + concurrency-limited ping orchestrator + state machine. That code had several structural problems on visors with hundreds of transports: default concurrency=2 capped throughput at ~4 pings/ minute (so level 1 of a 500-transport visor took >2 hours and level 2 never started), the renderer hid pending entries (making progress invisible), and the TUI's /dev/tty requirement made the tool undriveable from CI or coding agents.

#2732 moved the BFS server-side as the StreamPingTree gRPC RPC. This file now consumes that stream and renders it with the same TUI shape — header, stats line, scrollable tree viewport, footer — that operators were already familiar with.

The NDJSON-driven sibling lives in tree_stream.go (`cli visor ping tree-stream`); it feeds the same events to stdout for treeprobe + CI consumers. Both subcommands ride the same server-side BFS implementation, so a fix at the server lands in both.

Package ping cmd/skywire-cli/commands/visor/ping/tree_stream.go c4-vis-cli thin gRPC client for the StreamPingTree RPC. The visor does the BFS server-side and pushes PingTreeEvents over the stream; this command renders each event either as a human-readable row (default) or as one NDJSON object per stdout line (--json).

Default output is built for direct human consumption — including a final aggregation table (avg/p50/p99/jitter grouped by hop count) so the latency-vs-hops measurement Synth asked about doesn't need a follow-up jq pipeline.

--json switches to the NDJSON wire format consumed by external harnesses + coding agents:

{"ts":"<RFC3339Nano>","type":"<event>","data":{...}}

`data` is the marshaled oneof payload with proto's snake_case field names preserved. NDJSON consumers can `jq -c .` to filter or stream-decode into the wire types via protojson.

Package clivisorping cmd/skywire-cli/commands/visor/ping/tree_tui.go c5-cli-visor

The screen of `visor ping tree`; the command spec stays in tree.go.

Index

Constants

This section is empty.

Variables

View Source
var RootCmd = &cobra.Command{
	Use:   "ping [pk]",
	Short: "Ping commands for testing visor connectivity",
	Long: `Ping commands for testing visor connectivity.

When called with a public key argument, pings that visor directly.

Available subcommands:
  ping <pk>       - Ping a specific visor (route or --dmsg)
  ping test       - Test connectivity to public visors
  ping bandwidth  - Sustained throughput test to a visor
  ping mux-bw     - Multiplexed-route bandwidth + queueing-delay probe
  ping mux-bw-tui - Interactive TUI for the mux bandwidth probe
  ping tree       - Ping-tree over the route graph (scrollable TUI)
  ping tree-stream- Ping-tree as streamed rows / NDJSON
  ping stop-all   - Stop all active ping connections`,
}

RootCmd is the ping command that subcommands attach to Subcommands register themselves in their own init() functions When called with a PK argument directly, it delegates to pingCmd

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL