From 762aded60e7b003bc54c121f13876e34c0842bba Mon Sep 17 00:00:00 2001 From: Christopher Sasarak Date: Sun, 15 May 2016 13:11:30 -0400 Subject: [PATCH 1/2] Added a verbose option for swarm peers. This is used like 'ipfs swarm peers -v'. It prints out the normal peers information, but also the latency of each peer License: MIT Signed-off-by: Chris Sasarak --- core/commands/swarm.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/core/commands/swarm.go b/core/commands/swarm.go index c9473a9cb05..75d8b9a74e0 100644 --- a/core/commands/swarm.go +++ b/core/commands/swarm.go @@ -7,6 +7,7 @@ import ( "io" "path" "sort" + "time" cmds "github.com/ipfs/go-ipfs/commands" iaddr "github.com/ipfs/go-ipfs/thirdparty/ipfsaddr" @@ -15,6 +16,7 @@ import ( mafilter "gx/ipfs/QmUaRHbB7pUwj5mS9BS4CMvBiW48MpaH2wbGxeWfFhhHxK/multiaddr-filter" ma "gx/ipfs/QmYzDkkgAEmrcNzFCiYo6L1dTX4EAG1gZkbtdbd9trL4vd/go-multiaddr" + context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ) type stringList struct { @@ -49,8 +51,15 @@ var swarmPeersCmd = &cmds.Command{ ShortDescription: ` 'ipfs swarm peers' lists the set of peers this node is connected to. `, + }, + Options: []cmds.Option{ + cmds.BoolOption("verbose", "v", + `Also display latency along with peer information in the following form: + + `), }, Run: func(req cmds.Request, res cmds.Response) { + timeout := time.Duration(5) * time.Second log.Debug("ipfs swarm peers") n, err := req.InvocContext().GetNode() @@ -64,12 +73,32 @@ var swarmPeersCmd = &cmds.Command{ return } + verbose, _, _ := req.Option("verbose").Bool() conns := n.PeerHost.Network().Conns() addrs := make([]string, len(conns)) + pingService := n.Ping + for i, c := range conns { pid := c.RemotePeer() addr := c.RemoteMultiaddr() - addrs[i] = fmt.Sprintf("%s/ipfs/%s", addr, pid.Pretty()) + + if verbose { + pContext, cancelFn := context.WithTimeout(req.Context(), timeout) + defer cancelFn() + + ch, _ := pingService.Ping(pContext, pid) + duration := <-ch + var durStr string + + if pContext.Err() != nil { + durStr = pContext.Err().Error() + } else { + durStr = duration.String() + } + addrs[i] = fmt.Sprintf("%s/ipfs/%s %s", addr, pid.Pretty(), durStr) + } else { + addrs[i] = fmt.Sprintf("%s/ipfs/%s", addr, pid.Pretty()) + } } sort.Sort(sort.StringSlice(addrs)) From 584d49694e05960207c07547e03e89131622ae62 Mon Sep 17 00:00:00 2001 From: Chris Sasarak Date: Tue, 17 May 2016 22:28:57 -0400 Subject: [PATCH 2/2] Updated verbose swarm to not ping peers. License: MIT Signed-off-by: Chris Sasarak --- core/commands/swarm.go | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/core/commands/swarm.go b/core/commands/swarm.go index 75d8b9a74e0..4fd10968065 100644 --- a/core/commands/swarm.go +++ b/core/commands/swarm.go @@ -7,7 +7,6 @@ import ( "io" "path" "sort" - "time" cmds "github.com/ipfs/go-ipfs/commands" iaddr "github.com/ipfs/go-ipfs/thirdparty/ipfsaddr" @@ -16,7 +15,6 @@ import ( mafilter "gx/ipfs/QmUaRHbB7pUwj5mS9BS4CMvBiW48MpaH2wbGxeWfFhhHxK/multiaddr-filter" ma "gx/ipfs/QmYzDkkgAEmrcNzFCiYo6L1dTX4EAG1gZkbtdbd9trL4vd/go-multiaddr" - context "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context" ) type stringList struct { @@ -54,12 +52,10 @@ var swarmPeersCmd = &cmds.Command{ }, Options: []cmds.Option{ cmds.BoolOption("verbose", "v", - `Also display latency along with peer information in the following form: - - `), + "Also display latency along with peer information in the following form: "+ + " "), }, Run: func(req cmds.Request, res cmds.Response) { - timeout := time.Duration(5) * time.Second log.Debug("ipfs swarm peers") n, err := req.InvocContext().GetNode() @@ -76,26 +72,13 @@ var swarmPeersCmd = &cmds.Command{ verbose, _, _ := req.Option("verbose").Bool() conns := n.PeerHost.Network().Conns() addrs := make([]string, len(conns)) - pingService := n.Ping for i, c := range conns { pid := c.RemotePeer() addr := c.RemoteMultiaddr() if verbose { - pContext, cancelFn := context.WithTimeout(req.Context(), timeout) - defer cancelFn() - - ch, _ := pingService.Ping(pContext, pid) - duration := <-ch - var durStr string - - if pContext.Err() != nil { - durStr = pContext.Err().Error() - } else { - durStr = duration.String() - } - addrs[i] = fmt.Sprintf("%s/ipfs/%s %s", addr, pid.Pretty(), durStr) + addrs[i] = fmt.Sprintf("%s/ipfs/%s %s", addr, pid.Pretty(), n.Peerstore.LatencyEWMA(pid)) } else { addrs[i] = fmt.Sprintf("%s/ipfs/%s", addr, pid.Pretty()) }