Skip to content
Snippets Groups Projects
Select Git revision
  • 249bc066e91d68592cc326c08d952f5186b812ce
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

plugin.go

Blame
  • plugin.go 1.96 KiB
    package portcheck
    
    import (
    	"net"
    
    	"github.com/iotaledger/goshimmer/plugins/autopeering"
    	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
    	"github.com/iotaledger/goshimmer/plugins/banner"
    	"github.com/iotaledger/hive.go/autopeering/discover"
    	"github.com/iotaledger/hive.go/autopeering/peer/service"
    	"github.com/iotaledger/hive.go/autopeering/server"
    	"github.com/iotaledger/hive.go/logger"
    	"github.com/iotaledger/hive.go/node"
    )
    
    const (
    	PLUGIN_NAME = "PortCheck"
    )
    
    var (
    	PLUGIN = node.NewPlugin(PLUGIN_NAME, node.Enabled, configure, run)
    	log    *logger.Logger
    )
    
    func configure(*node.Plugin) {
    	log = logger.NewLogger(PLUGIN_NAME)
    }
    
    func run(*node.Plugin) {
    	log.Info("Testing autopeering service ...")
    	checkAutopeeringConnection()
    	log.Info("Testing autopeering service ... done")
    }
    
    // check that discovery is working and the port is open
    func checkAutopeeringConnection() {
    	peering := local.GetInstance().Services().Get(service.PeeringKey)
    
    	// resolve the bind address
    	localAddr, err := net.ResolveUDPAddr(peering.Network(), autopeering.GetBindAddress())
    	if err != nil {
    		log.Fatalf("Error resolving %s: %v", local.CFG_BIND, err)
    	}
    	// open a connection
    	conn, err := net.ListenUDP(peering.Network(), localAddr)
    	if err != nil {
    		log.Fatalf("Error listening: %v", err)
    	}
    	defer conn.Close()
    
    	// create a new discovery server for the port check
    	disc := discover.New(local.GetInstance(), autopeering.ProtocolVersion, autopeering.NetworkID, discover.Logger(log))
    	srv := server.Serve(local.GetInstance(), conn, log, disc)
    	defer srv.Close()
    
    	disc.Start(srv)
    	defer disc.Close()
    
    	for _, master := range autopeering.Discovery.GetMasterPeers() {
    		err = disc.Ping(master)
    		if err == nil {
    			log.Infof("Pong received from %s", master.IP())
    			break
    		}
    		log.Warnf("Error pinging entry node %s: %s", master.IP(), err)
    	}
    
    	if err != nil {
    		log.Fatalf("Please check that %s is publicly reachable at port %d/%s",
    			banner.AppName, peering.Port(), peering.Network())
    	}
    }