cli: sort peers by IPv4 and hostname (#1191)

* cli: sort entries by IPv4 and hostname

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
fanyang
2025-08-04 21:18:49 +08:00
committed by GitHub
parent d0a6c93c2c
commit e3e406dcde
3 changed files with 15 additions and 3 deletions

View File

@@ -342,7 +342,7 @@ impl PunchSymToConeHoleClient {
async fn get_rpc_stub(
&self,
dst_peer_id: PeerId,
) -> Box<(dyn UdpHolePunchRpc<Controller = BaseController> + std::marker::Send + 'static)> {
) -> Box<dyn UdpHolePunchRpc<Controller = BaseController> + std::marker::Send + 'static> {
self.peer_mgr
.get_peer_rpc_mgr()
.rpc_client()

View File

@@ -545,6 +545,18 @@ impl CommandHandler<'_> {
items.push(p.into());
}
// Sort items by ipv4 (using IpAddr for proper numeric comparison) first, then by hostname
items.sort_by(|a, b| {
use std::net::{IpAddr, Ipv4Addr};
use std::str::FromStr;
let a_ip = IpAddr::from_str(&a.ipv4).unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED));
let b_ip = IpAddr::from_str(&b.ipv4).unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED));
match a_ip.cmp(&b_ip) {
std::cmp::Ordering::Equal => a.hostname.cmp(&b.hostname),
other => other,
}
});
print_output(&items, self.output_format)?;
Ok(())

View File

@@ -96,13 +96,13 @@ impl PeerCenterBase {
>(
&self,
job_ctx: T,
job_fn: (impl Fn(
job_fn: impl Fn(
Box<dyn PeerCenterRpc<Controller = BaseController> + Send>,
Arc<PeridicJobCtx<T>>,
) -> Fut
+ Send
+ Sync
+ 'static),
+ 'static,
) -> () {
let my_peer_id = self.my_peer_id;
let peer_mgr = self.peer_mgr.clone();