2018-06-19 15:06:42 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"github.com/divan/graph-experiments/graph"
|
2018-06-19 17:40:46 +02:00
|
|
|
"github.com/ethereum/go-ethereum/p2p"
|
2018-06-19 15:06:42 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2018-06-19 17:40:46 +02:00
|
|
|
var (
|
|
|
|
consulAddr = flag.String("consul", "localhost:8500", "Host:port for consul address to query")
|
|
|
|
testMode = flag.Bool("test", false, "Test mode (use local test data)")
|
|
|
|
)
|
2018-06-19 15:06:42 +02:00
|
|
|
flag.Parse()
|
|
|
|
|
2018-06-19 17:40:46 +02:00
|
|
|
var rpc RPCClient
|
|
|
|
rpc = NewHTTPRPCClient()
|
|
|
|
if *testMode {
|
|
|
|
rpc = NewMockRPCClient()
|
|
|
|
}
|
|
|
|
var cluster ClusterSource
|
|
|
|
cluster = NewConsul(*consulAddr)
|
|
|
|
if *testMode {
|
|
|
|
cluster = NewMockConsulSource()
|
|
|
|
}
|
|
|
|
|
|
|
|
fetcher := NewFetcher(cluster, rpc)
|
|
|
|
nodes, err := fetcher.Nodes("", "eth.beta")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("Getting list of ips: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
peers, links, err := fetcher.NodePeers(nodes)
|
2018-06-19 15:06:42 +02:00
|
|
|
if err != nil {
|
2018-06-19 17:40:46 +02:00
|
|
|
log.Fatalf("Getting list of ips: %s", err)
|
2018-06-19 15:06:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
g := graph.NewGraph()
|
2018-06-19 17:40:46 +02:00
|
|
|
for _, peer := range peers {
|
|
|
|
_ = peer
|
|
|
|
//AddPeer(g, "", node.PI)
|
|
|
|
}
|
|
|
|
for _, link := range links {
|
|
|
|
_ = link
|
|
|
|
//AddPeer(g, "", node.PI)
|
2018-06-19 15:06:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("Graph has %d nodes and %d links\n", len(g.Nodes()), len(g.Links()))
|
|
|
|
}
|
2018-06-19 17:40:46 +02:00
|
|
|
|
|
|
|
func AddPeer(g *graph.Graph, fromID string, to *p2p.PeerInfo) {
|
|
|
|
toID := to.ID
|
|
|
|
addNode(g, fromID, false)
|
|
|
|
//addNode(g, toID, isClient(to.Name))
|
|
|
|
addNode(g, toID, false)
|
|
|
|
|
|
|
|
if g.LinkExistsByID(fromID, toID) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if to.Network.Inbound == false {
|
|
|
|
g.AddLinkByIDs(fromID, toID)
|
|
|
|
} else {
|
|
|
|
g.AddLinkByIDs(toID, fromID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func addNode(g *graph.Graph, id string, client bool) {
|
|
|
|
if _, err := g.NodeByID(id); err == nil {
|
|
|
|
// already exists
|
|
|
|
return
|
|
|
|
}
|
|
|
|
//node := NewNode(id)
|
|
|
|
//g.AddNode(node)
|
|
|
|
}
|