From 51306ccbb29c16bd7f706b977e09c94e041215d7 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sat, 6 Dec 2014 21:19:02 -0600 Subject: [PATCH] Expose various DHT state --- client.go | 4 +++- dht/dht.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) 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() } -- 2.48.1