client.go | 4 +++- dht/dht.go | 19 +++++++++++++++++++ diff --git a/client.go b/client.go index b69ea07f8df7670e8312c7a4506792b726373d45..ffaad616caafa02960d6f5224345cd100567976a 100644 --- a/client.go +++ b/client.go @@ -215,10 +215,12 @@ fmt.Fprintf(w, "Listening on %s\n", cl.ListenAddr()) fmt.Fprintf(w, "Peer ID: %q\n", cl.peerID) fmt.Fprintf(w, "Handshaking: %d\n", cl.handshaking) if cl.dHT != nil { - fmt.Fprintf(w, "DHT nodes: %d\n", cl.dHT.NumNodes()) + dhtStats := cl.dHT.Stats() + fmt.Fprintf(w, "DHT nodes: %d (%d good)\n", dhtStats.NumNodes, dhtStats.NumGoodNodes) fmt.Fprintf(w, "DHT Server ID: %x\n", cl.dHT.IDString()) fmt.Fprintf(w, "DHT port: %d\n", addrPort(cl.dHT.LocalAddr())) fmt.Fprintf(w, "DHT announces: %d\n", cl.dHT.NumConfirmedAnnounces) + fmt.Fprintf(w, "Outstanding transactions: %d\n", dhtStats.NumOutstandingTransactions) } cl.downloadStrategy.WriteStatus(w) fmt.Fprintln(w) diff --git a/dht/dht.go b/dht/dht.go index afc10d8cd65188ec5aabef60d6040b5813c106ae..827a6046994452eb26674b96c1cdda316c2228b0 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -50,6 +50,25 @@ Conn net.PacketConn Passive bool // Don't respond to queries. } +type serverStats struct { + NumGoodNodes int + NumNodes int + NumOutstandingTransactions int +} + +func (s *Server) Stats() (ss serverStats) { + s.mu.Lock() + defer s.mu.Unlock() + for _, n := range s.nodes { + if n.Good() { + ss.NumGoodNodes++ + } + } + ss.NumNodes = len(s.nodes) + ss.NumOutstandingTransactions = len(s.transactions) + return +} + func (s *Server) LocalAddr() net.Addr { return s.socket.LocalAddr() }