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)
|
NetPubsubScores(context.Context) ([]PubsubScore, error)
|
||||||
NetAutoNatStatus(context.Context) (NatInfo, error)
|
NetAutoNatStatus(context.Context) (NatInfo, error)
|
||||||
NetAgentVersion(ctx context.Context, p peer.ID) (string, 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
|
// NetBandwidthStats returns statistics about the nodes total bandwidth
|
||||||
// usage and current rate across all peers and protocols.
|
// 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"`
|
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"`
|
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"`
|
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"`
|
NetBlockAdd func(ctx context.Context, acl api.NetBlockList) error `perm:"admin"`
|
||||||
NetBlockRemove 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"`
|
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)
|
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
|
// ID implements API.ID
|
||||||
func (c *CommonStruct) ID(ctx context.Context) (peer.ID, error) {
|
func (c *CommonStruct) ID(ctx context.Context) (peer.ID, error) {
|
||||||
return c.Internal.ID(ctx)
|
return c.Internal.ID(ctx)
|
||||||
|
@ -99,3 +99,10 @@ type NetBlockList struct {
|
|||||||
IPAddrs []string
|
IPAddrs []string
|
||||||
IPSubnets []string
|
IPSubnets []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ExtendedPeerInfo struct {
|
||||||
|
ID peer.ID
|
||||||
|
Agent string
|
||||||
|
Addrs []string
|
||||||
|
Protocols []string
|
||||||
|
}
|
||||||
|
41
cli/net.go
41
cli/net.go
@ -48,6 +48,11 @@ var NetPeers = &cli.Command{
|
|||||||
Aliases: []string{"a"},
|
Aliases: []string{"a"},
|
||||||
Usage: "Print agent name",
|
Usage: "Print agent name",
|
||||||
},
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "extended",
|
||||||
|
Aliases: []string{"x"},
|
||||||
|
Usage: "Print extended peer information in json",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Action: func(cctx *cli.Context) error {
|
Action: func(cctx *cli.Context) error {
|
||||||
api, closer, err := GetAPI(cctx)
|
api, closer, err := GetAPI(cctx)
|
||||||
@ -65,18 +70,33 @@ var NetPeers = &cli.Command{
|
|||||||
return strings.Compare(string(peers[i].ID), string(peers[j].ID)) > 0
|
return strings.Compare(string(peers[i].ID), string(peers[j].ID)) > 0
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, peer := range peers {
|
if cctx.Bool("extended") {
|
||||||
var agent string
|
for _, peer := range peers {
|
||||||
if cctx.Bool("agent") {
|
info, err := api.NetPeerInfo(ctx, peer.ID)
|
||||||
agent, err = api.NetAgentVersion(ctx, peer.ID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("getting agent version: %s", err)
|
log.Warnf("error getting extended peer info: %s", err)
|
||||||
} else {
|
} else {
|
||||||
agent = ", " + agent
|
bytes, err := json.Marshal(&info)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnf("error marshalling extended peer info: %s", err)
|
||||||
|
} else {
|
||||||
|
fmt.Println(string(bytes))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
fmt.Printf("%s, %s%s\n", peer.ID, peer.Addrs, agent)
|
for _, peer := range peers {
|
||||||
|
var agent string
|
||||||
|
if cctx.Bool("agent") {
|
||||||
|
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
|
return nil
|
||||||
@ -88,8 +108,9 @@ var netScores = &cli.Command{
|
|||||||
Usage: "Print peers' pubsub scores",
|
Usage: "Print peers' pubsub scores",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "extended",
|
Name: "extended",
|
||||||
Usage: "print extended peer scores in json",
|
Aliases: []string{"x"},
|
||||||
|
Usage: "print extended peer scores in json",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: func(cctx *cli.Context) error {
|
Action: func(cctx *cli.Context) error {
|
||||||
|
@ -99,6 +99,26 @@ func (a *CommonAPI) NetPeers(context.Context) ([]peer.AddrInfo, error) {
|
|||||||
return out, nil
|
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 {
|
func (a *CommonAPI) NetConnect(ctx context.Context, p peer.AddrInfo) error {
|
||||||
if swrm, ok := a.Host.Network().(*swarm.Swarm); ok {
|
if swrm, ok := a.Host.Network().(*swarm.Swarm); ok {
|
||||||
swrm.Backoff().Clear(p.ID)
|
swrm.Backoff().Clear(p.ID)
|
||||||
|
Loading…
Reference in New Issue
Block a user