Source code for gatenet.cli.commands.ping
"""
ping.py — Implements the 'ping' CLI command for connectivity tests.
"""
[docs]
def cmd_ping(args):
"""
Ping connectivity test CLI command.
Pings the specified host and displays latency statistics in the selected output format.
Args:
args (argparse.Namespace):
host (str): Host to ping.
output_format (str, optional): Output style. One of 'table', 'plain', or 'json'.
color (bool, optional): Enable colorized output. Default is True.
verbosity (str or int, optional): Verbosity level. One of 'debug', 'info', 0, or 1. Default is 'info'.
count (int, optional): Number of pings to send.
Example:
.. code-block:: bash
gatenet ping 8.8.8.8 --count 4 --output json --color false
Returns:
None
"""
from gatenet.diagnostics.ping import ping
from rich.console import Console
from rich.table import Table
import json
console = Console()
console.print(f"[bold blue][ping] Pinging {args.host}...[/bold blue]")
try:
result = ping(args.host)
if not result.get("success"):
console.print(f"[bold red][ping] Error: {result.get('error', 'Ping failed')}[/bold red]")
raise SystemExit(1)
output_format = getattr(args, "output_format", getattr(args, "output", "table"))
def fmt(val):
try:
return f"{float(val):.2f}"
except (ValueError, TypeError):
return str(val) if val is not None else "?"
if output_format == "json":
console.print_json(json.dumps(result))
elif output_format == "plain":
print(f"min={fmt(result.get('rtt_min'))} avg={fmt(result.get('rtt_avg'))} max={fmt(result.get('rtt_max'))} jitter={fmt(result.get('jitter'))} loss={result.get('packet_loss', '?')}%", flush=True)
else:
table = Table(title=f"Ping Results for {args.host}", show_lines=True)
table.add_column("Metric", style="cyan")
table.add_column("Value", style="green")
table.add_row("Min RTT", f"{fmt(result.get('rtt_min'))} ms")
table.add_row("Avg RTT", f"{fmt(result.get('rtt_avg'))} ms")
table.add_row("Max RTT", f"{fmt(result.get('rtt_max'))} ms")
table.add_row("Jitter", f"{fmt(result.get('jitter'))} ms")
table.add_row("Packet Loss", f"{result.get('packet_loss', '?')}%")
console.print(table)
except Exception as e:
console.print(f"[bold red][ping] Error: {e}[/bold red]")
raise SystemExit(1)