]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Expose various DHT state
authorMatt Joiner <anacrolix@gmail.com>
Sun, 7 Dec 2014 03:19:02 +0000 (21:19 -0600)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 7 Dec 2014 03:19:02 +0000 (21:19 -0600)
client.go
dht/dht.go

index b69ea07f8df7670e8312c7a4506792b726373d45..ffaad616caafa02960d6f5224345cd100567976a 100644 (file)
--- 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)
index afc10d8cd65188ec5aabef60d6040b5813c106ae..827a6046994452eb26674b96c1cdda316c2228b0 100644 (file)
@@ -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()
 }