implement extended peer info in net peers cli
This commit is contained in:
parent
b4ca7928f1
commit
4a74f752c0
@ -33,6 +33,7 @@ type Common interface {
|
||||
NetPubsubScores(context.Context) ([]PubsubScore, error)
|
||||
NetAutoNatStatus(context.Context) (NatInfo, error)
|
||||
NetAgentVersion(ctx context.Context, p peer.ID) (string, error)
|
||||
NetPeerInfo(context.Context, peer.ID) (*ExtendedPeerInfo, error)
|
||||
|
||||
// NetBandwidthStats returns statistics about the nodes total bandwidth
|
||||
// usage and current rate across all peers and protocols.
|
||||
|
@ -60,6 +60,7 @@ type CommonStruct struct {
|
||||
NetBandwidthStatsByPeer func(ctx context.Context) (map[string]metrics.Stats, error) `perm:"read"`
|
||||
NetBandwidthStatsByProtocol func(ctx context.Context) (map[protocol.ID]metrics.Stats, error) `perm:"read"`
|
||||
NetAgentVersion func(ctx context.Context, p peer.ID) (string, error) `perm:"read"`
|
||||
NetPeerInfo func(context.Context, peer.ID) (*api.ExtendedPeerInfo, error) `perm:"read"`
|
||||
NetBlockAdd func(ctx context.Context, acl api.NetBlockList) error `perm:"admin"`
|
||||
NetBlockRemove func(ctx context.Context, acl api.NetBlockList) error `perm:"admin"`
|
||||
NetBlockList func(ctx context.Context) (api.NetBlockList, error) `perm:"read"`
|
||||
@ -540,6 +541,10 @@ func (c *CommonStruct) NetAgentVersion(ctx context.Context, p peer.ID) (string,
|
||||
return c.Internal.NetAgentVersion(ctx, p)
|
||||
}
|
||||
|
||||
func (c *CommonStruct) NetPeerInfo(ctx context.Context, p peer.ID) (*api.ExtendedPeerInfo, error) {
|
||||
return c.Internal.NetPeerInfo(ctx, p)
|
||||
}
|
||||
|
||||
// ID implements API.ID
|
||||
func (c *CommonStruct) ID(ctx context.Context) (peer.ID, error) {
|
||||
return c.Internal.ID(ctx)
|
||||
|
@ -99,3 +99,10 @@ type NetBlockList struct {
|
||||
IPAddrs []string
|
||||
IPSubnets []string
|
||||
}
|
||||
|
||||
type ExtendedPeerInfo struct {
|
||||
ID peer.ID
|
||||
Agent string
|
||||
Addrs []string
|
||||
Protocols []string
|
||||
}
|
||||
|
25
cli/net.go
25
cli/net.go
@ -48,6 +48,11 @@ var NetPeers = &cli.Command{
|
||||
Aliases: []string{"a"},
|
||||
Usage: "Print agent name",
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "extended",
|
||||
Aliases: []string{"x"},
|
||||
Usage: "Print extended peer information in json",
|
||||
},
|
||||
},
|
||||
Action: func(cctx *cli.Context) error {
|
||||
api, closer, err := GetAPI(cctx)
|
||||
@ -65,19 +70,34 @@ var NetPeers = &cli.Command{
|
||||
return strings.Compare(string(peers[i].ID), string(peers[j].ID)) > 0
|
||||
})
|
||||
|
||||
if cctx.Bool("extended") {
|
||||
for _, peer := range peers {
|
||||
info, err := api.NetPeerInfo(ctx, peer.ID)
|
||||
if err != nil {
|
||||
log.Warnf("error getting extended peer info: %s", err)
|
||||
} else {
|
||||
bytes, err := json.Marshal(&info)
|
||||
if err != nil {
|
||||
log.Warnf("error marshalling extended peer info: %s", err)
|
||||
} else {
|
||||
fmt.Println(string(bytes))
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for _, peer := range peers {
|
||||
var agent string
|
||||
if cctx.Bool("agent") {
|
||||
agent, err = api.NetAgentVersion(ctx, peer.ID)
|
||||
agent, err := api.NetAgentVersion(ctx, peer.ID)
|
||||
if err != nil {
|
||||
log.Warnf("getting agent version: %s", err)
|
||||
} else {
|
||||
agent = ", " + agent
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("%s, %s%s\n", peer.ID, peer.Addrs, agent)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
@ -89,6 +109,7 @@ var netScores = &cli.Command{
|
||||
Flags: []cli.Flag{
|
||||
&cli.BoolFlag{
|
||||
Name: "extended",
|
||||
Aliases: []string{"x"},
|
||||
Usage: "print extended peer scores in json",
|
||||
},
|
||||
},
|
||||
|
@ -99,6 +99,26 @@ func (a *CommonAPI) NetPeers(context.Context) ([]peer.AddrInfo, error) {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (a *CommonAPI) NetPeerInfo(_ context.Context, p peer.ID) (*api.ExtendedPeerInfo, error) {
|
||||
info := &api.ExtendedPeerInfo{ID: p}
|
||||
|
||||
agent, err := a.Host.Peerstore().Get(p, "AgentVersion")
|
||||
if err == nil {
|
||||
info.Agent = agent.(string)
|
||||
}
|
||||
|
||||
for _, a := range a.Host.Peerstore().Addrs(p) {
|
||||
info.Addrs = append(info.Addrs, a.String())
|
||||
}
|
||||
|
||||
protocols, err := a.Host.Peerstore().GetProtocols(p)
|
||||
if err == nil {
|
||||
info.Protocols = protocols
|
||||
}
|
||||
|
||||
return info, nil
|
||||
}
|
||||
|
||||
func (a *CommonAPI) NetConnect(ctx context.Context, p peer.AddrInfo) error {
|
||||
if swrm, ok := a.Host.Network().(*swarm.Swarm); ok {
|
||||
swrm.Backoff().Clear(p.ID)
|
||||
|
Loading…
Reference in New Issue
Block a user