diff --git a/packages/autopeering/discover/manager.go b/packages/autopeering/discover/manager.go index 33e41c788dd12b441a07df06e26dcfe627e02442..d7697aede72667e4244128a406e548f93bd57094 100644 --- a/packages/autopeering/discover/manager.go +++ b/packages/autopeering/discover/manager.go @@ -202,8 +202,8 @@ func (m *manager) peerToReverify() *mpeer { } // updatePeer moves the peer with the given ID to the front of the list of managed peers. -// It returns true if a peer was bumped or false if there was no peer with that id -func (m *manager) updatePeer(update *peer.Peer) bool { +// It returns 0 if there was no peer with that id, otherwise the verifiedCount of the updated peer is returned. +func (m *manager) updatePeer(update *peer.Peer) uint { id := update.ID() for i, p := range m.active { if p.ID() == id { @@ -217,11 +217,10 @@ func (m *manager) updatePeer(update *peer.Peer) bool { verifiedCount: p.verifiedCount + 1, lastNewPeers: p.lastNewPeers, } - - return true + return p.verifiedCount + 1 } } - return false + return 0 } func (m *manager) addReplacement(p *mpeer) bool { @@ -289,7 +288,11 @@ func (m *manager) addVerifiedPeer(p *peer.Peer) bool { defer m.mutex.Unlock() // if already in the list, move it to the front - if m.updatePeer(p) { + if v := m.updatePeer(p); v > 0 { + // trigger the event only for the first time the peer is updated + if v == 1 { + Events.PeerDiscovered.Trigger(&DiscoveredEvent{Peer: p}) + } return false } diff --git a/packages/autopeering/peer/peer.go b/packages/autopeering/peer/peer.go index c7200dd1bb14f8fa518efa8afb7829c1e7ab71e6..30a1882f2fdc9da398af2a28754f9df627a72093 100644 --- a/packages/autopeering/peer/peer.go +++ b/packages/autopeering/peer/peer.go @@ -2,6 +2,7 @@ package peer import ( "crypto/ed25519" + "encoding/base64" "errors" "fmt" "net/url" @@ -50,7 +51,7 @@ func (p *Peer) Services() service.Service { func (p *Peer) String() string { u := url.URL{ Scheme: "peer", - User: url.User(fmt.Sprintf("%x", p.publicKey)), + User: url.User(base64.StdEncoding.EncodeToString(p.PublicKey())), Host: p.Address(), } return u.String() diff --git a/plugins/analysis/client/plugin.go b/plugins/analysis/client/plugin.go index da700fadeab250016a45421f3344e888141d9d77..506982347c0b066946b2b0360c6cf034b2c6a7a4 100644 --- a/plugins/analysis/client/plugin.go +++ b/plugins/analysis/client/plugin.go @@ -1,7 +1,6 @@ package client import ( - "encoding/hex" "net" "time" @@ -57,15 +56,19 @@ func Run(plugin *node.Plugin) { func getEventDispatchers(conn *network.ManagedConnection) *EventDispatchers { return &EventDispatchers{ AddNode: func(nodeId []byte) { + log.Debugw("AddNode", "nodeId", nodeId) _, _ = conn.Write((&addnode.Packet{NodeId: nodeId}).Marshal()) }, RemoveNode: func(nodeId []byte) { + log.Debugw("RemoveNode", "nodeId", nodeId) _, _ = conn.Write((&removenode.Packet{NodeId: nodeId}).Marshal()) }, ConnectNodes: func(sourceId []byte, targetId []byte) { + log.Debugw("ConnectNodes", "sourceId", sourceId, "targetId", targetId) _, _ = conn.Write((&connectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) }, DisconnectNodes: func(sourceId []byte, targetId []byte) { + log.Debugw("DisconnectNodes", "sourceId", sourceId, "targetId", targetId) _, _ = conn.Write((&disconnectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) }, } @@ -83,27 +86,22 @@ func setupHooks(plugin *node.Plugin, conn *network.ManagedConnection, eventDispa // define hooks //////////////////////////////////////////////////////////////////////////////////////////////////// onDiscoverPeer := events.NewClosure(func(ev *discover.DiscoveredEvent) { - log.Info("onDiscoverPeer: " + hex.EncodeToString(ev.Peer.ID().Bytes())) eventDispatchers.AddNode(ev.Peer.ID().Bytes()) }) onDeletePeer := events.NewClosure(func(ev *discover.DeletedEvent) { - log.Info("onDeletePeer: " + hex.EncodeToString(ev.Peer.ID().Bytes())) eventDispatchers.RemoveNode(ev.Peer.ID().Bytes()) }) onAddAcceptedNeighbor := events.NewClosure(func(ev *selection.PeeringEvent) { - log.Info("onAddAcceptedNeighbor: " + hex.EncodeToString(ev.Peer.ID().Bytes()) + " - " + hex.EncodeToString(local.GetInstance().ID().Bytes())) eventDispatchers.ConnectNodes(ev.Peer.ID().Bytes(), local.GetInstance().ID().Bytes()) }) onRemoveNeighbor := events.NewClosure(func(ev *selection.DroppedEvent) { - log.Info("onRemoveNeighbor: " + hex.EncodeToString(ev.DroppedID.Bytes()) + " - " + hex.EncodeToString(local.GetInstance().ID().Bytes())) eventDispatchers.DisconnectNodes(ev.DroppedID.Bytes(), local.GetInstance().ID().Bytes()) }) onAddChosenNeighbor := events.NewClosure(func(ev *selection.PeeringEvent) { - log.Info("onAddChosenNeighbor: " + hex.EncodeToString(local.GetInstance().ID().Bytes()) + " - " + hex.EncodeToString(ev.Peer.ID().Bytes())) eventDispatchers.ConnectNodes(local.GetInstance().ID().Bytes(), ev.Peer.ID().Bytes()) }) diff --git a/plugins/analysis/plugin.go b/plugins/analysis/plugin.go index 8be4a8422f10dff034cc7d90d793361115cf1243..1dc75fff1e3613bdd05dbced7c3bc4e832109a9a 100644 --- a/plugins/analysis/plugin.go +++ b/plugins/analysis/plugin.go @@ -25,12 +25,12 @@ func run(plugin *node.Plugin) { webinterface.Run(plugin) server.Run(plugin) } else { - log.Info("Starting Plugin: Analysis ... server is disabled (server-port is 0)") + log.Info("Server is disabled (server-port is 0)") } if parameter.NodeConfig.GetString(client.CFG_SERVER_ADDRESS) != "" { client.Run(plugin) } else { - log.Info("Starting Plugin: Analysis ... client is disabled (server-address is empty)") + log.Info("Client is disabled (server-address is empty)") } } diff --git a/plugins/autopeering/autopeering.go b/plugins/autopeering/autopeering.go index 9f019a64dd5a7db5caf84c21d5b0c408a8d87504..474fe2bd3f82d140b4ac9eecab4e09faeaffc966 100644 --- a/plugins/autopeering/autopeering.go +++ b/plugins/autopeering/autopeering.go @@ -99,7 +99,7 @@ func start(shutdownSignal <-chan struct{}) { defer Selection.Close() } - log.Infof("Auto Peering server started: ID=%x, address=%s", local.GetInstance().ID(), srv.LocalAddr()) + log.Infof("Auto Peering started: address=%s", srv.LocalAddr()) <-shutdownSignal log.Info("Stopping Auto Peering server ...") diff --git a/plugins/autopeering/local/local.go b/plugins/autopeering/local/local.go index cfafcb89f974cbafad8b308399a8f630d3145d5e..71e358c0f9d0d9faf6fbaaf4cedc704d551cad01 100644 --- a/plugins/autopeering/local/local.go +++ b/plugins/autopeering/local/local.go @@ -3,7 +3,6 @@ package local import ( "fmt" "io/ioutil" - "log" "net" "net/http" "strconv" @@ -20,33 +19,47 @@ var ( ) func configureLocal() *peer.Local { + log := logger.NewLogger("Local") + ip := net.ParseIP(parameter.NodeConfig.GetString(CFG_ADDRESS)) if ip == nil { log.Fatalf("Invalid IP address: %s", parameter.NodeConfig.GetString(CFG_ADDRESS)) } if ip.IsUnspecified() { - myIp, err := getMyIP() + log.Info("Querying public IP ...") + myIp, err := getPublicIP(isIPv4(ip)) if err != nil { - log.Fatalf("Could not query public IP: %v", err) + log.Fatalf("Error querying public IP: %s", err) } ip = myIp + log.Infof("Public IP queried: address=%s", ip.String()) } port := strconv.Itoa(parameter.NodeConfig.GetInt(CFG_PORT)) // create a new local node - db := peer.NewPersistentDB(logger.NewLogger("local")) + db := peer.NewPersistentDB(log) local, err := peer.NewLocal("udp", net.JoinHostPort(ip.String(), port), db) if err != nil { - log.Fatalf("NewLocal: %v", err) + log.Fatalf("Error creating local: %s", err) } + log.Infof("Initialized local: %v", local) return local } -func getMyIP() (net.IP, error) { - url := "https://api.ipify.org?format=text" +func isIPv4(ip net.IP) bool { + return ip.To4() != nil +} + +func getPublicIP(ipv4 bool) (net.IP, error) { + var url string + if ipv4 { + url = "https://api.ipify.org" + } else { + url = "https://api6.ipify.org" + } resp, err := http.Get(url) if err != nil { return nil, err diff --git a/plugins/autopeering/plugin.go b/plugins/autopeering/plugin.go index dd93e3984347c2764dc58572be10c2e1fe33b036..04321f98b21b2383b5b2c57d55c25ca9db1326dd 100644 --- a/plugins/autopeering/plugin.go +++ b/plugins/autopeering/plugin.go @@ -3,6 +3,7 @@ package autopeering import ( "github.com/iotaledger/goshimmer/packages/autopeering/discover" "github.com/iotaledger/goshimmer/packages/autopeering/peer" + "github.com/iotaledger/goshimmer/packages/autopeering/selection" "github.com/iotaledger/goshimmer/packages/gossip" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/events" @@ -37,6 +38,19 @@ func configureEvents() { })) discover.Events.PeerDiscovered.Attach(events.NewClosure(func(ev *discover.DiscoveredEvent) { - log.Info("new peer discovered: " + ev.Peer.Address() + " / " + ev.Peer.ID().String()) + log.Infof("Discovered: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + })) + discover.Events.PeerDeleted.Attach(events.NewClosure(func(ev *discover.DeletedEvent) { + log.Infof("Removed offline: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + })) + + selection.Events.OutgoingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { + log.Infof("Peering chosen: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + })) + selection.Events.IncomingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { + log.Infof("Peering accepted: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + })) + selection.Events.Dropped.Attach(events.NewClosure(func(ev *selection.DroppedEvent) { + log.Infof("Peering dropped: %s", ev.DroppedID) })) } diff --git a/plugins/cli/plugin.go b/plugins/cli/plugin.go index 39791c7c52a7e8f0f9506d4729f83e9414125c61..b18b78b37eb50ef5529f9822b63170b6de255ff8 100644 --- a/plugins/cli/plugin.go +++ b/plugins/cli/plugin.go @@ -45,7 +45,7 @@ func parseParameters() { } func LoadConfig() { - if err := parameter.FetchConfig(true); err != nil { + if err := parameter.FetchConfig(false); err != nil { panic(err) } parseParameters() @@ -56,7 +56,6 @@ func LoadConfig() { } func configure(ctx *node.Plugin) { - fmt.Println(" _____ _ _ ________ ______ ___ ___________ ") fmt.Println(" / ___| | | |_ _| \\/ || \\/ || ___| ___ \\") fmt.Println(" \\ `--.| |_| | | | | . . || . . || |__ | |_/ /") @@ -64,6 +63,7 @@ func configure(ctx *node.Plugin) { fmt.Println(" /\\__/ / | | |_| |_| | | || | | || |___| |\\ \\ ") fmt.Printf(" \\____/\\_| |_/\\___/\\_| |_/\\_| |_/\\____/\\_| \\_| fullnode %s", AppVersion) fmt.Println() + fmt.Println() ctx.Node.Logger.Info("Loading plugins ...") }