From: Matt Joiner Date: Sun, 7 Dec 2014 03:19:02 +0000 (-0600) Subject: Expose various DHT state X-Git-Tag: v1.0.0~1410 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=51306ccbb29c16bd7f706b977e09c94e041215d7;p=btrtrc.git Expose various DHT state --- diff --git a/client.go b/client.go index b69ea07f..ffaad616 100644 --- a/client.go +++ b/client.go @@ -215,10 +215,12 @@ func (cl *Client) WriteStatus(_w io.Writer) { 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 afc10d8c..827a6046 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -50,6 +50,25 @@ type ServerConfig struct { 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() }