2018-11-15 12:47:52 +00:00
|
|
|
// Copyright (C) 2018 Storj Labs, Inc.
|
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
2018-11-09 18:40:15 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
|
|
|
|
"storj.io/storj/pkg/node"
|
|
|
|
"storj.io/storj/pkg/overlay"
|
|
|
|
"storj.io/storj/pkg/process"
|
|
|
|
"storj.io/storj/pkg/provider"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
rootCmd = &cobra.Command{
|
|
|
|
Use: "inspector",
|
|
|
|
Short: "CLI for interacting with Storj Kademlia network",
|
|
|
|
}
|
|
|
|
getNodeCmd = &cobra.Command{
|
|
|
|
Use: "get",
|
|
|
|
Short: "get node with `id`",
|
|
|
|
RunE: GetNode,
|
|
|
|
}
|
|
|
|
listNodeCmd = &cobra.Command{
|
|
|
|
Use: "list-nodes",
|
|
|
|
Short: "get all nodes in cache",
|
|
|
|
RunE: ListNodes,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
// Inspector gives access to kademlia and overlay cache
|
|
|
|
type Inspector struct {
|
|
|
|
overlay overlay.Client
|
|
|
|
identity *provider.FullIdentity
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewInspector returns an Inspector client
|
|
|
|
func NewInspector(address string) (*Inspector, error) {
|
|
|
|
id, err := node.NewFullIdentity(context.Background(), 12, 4)
|
|
|
|
if err != nil {
|
|
|
|
return &Inspector{}, nil
|
|
|
|
}
|
|
|
|
overlay, err := overlay.NewOverlayClient(id, address)
|
|
|
|
if err != nil {
|
|
|
|
return &Inspector{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return &Inspector{
|
|
|
|
overlay: overlay,
|
|
|
|
identity: id,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetNode returns a node with the requested ID or nothing at all
|
|
|
|
func GetNode(cmd *cobra.Command, args []string) (err error) {
|
|
|
|
i, err := NewInspector("127.0.0.1:7778")
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("error dialing inspector: %+v\n", err)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
n := node.IDFromString("testnode")
|
|
|
|
found, err := i.overlay.Lookup(context.Background(), n)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("### FOUND: %+v\n", found)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListNodes returns the nodes in the cache
|
|
|
|
func ListNodes(cmd *cobra.Command, args []string) (err error) {
|
|
|
|
i, err := NewInspector("127.0.0.1:7778")
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("error dialing inspector: %+v\n", err)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("Inspector: %+v\n", i)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
rootCmd.AddCommand(getNodeCmd)
|
|
|
|
rootCmd.AddCommand(listNodeCmd)
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
process.Exec(rootCmd)
|
|
|
|
}
|