]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Order peer conn status by peer priority and show webseeds separately
authorMatt Joiner <anacrolix@gmail.com>
Tue, 25 Apr 2023 12:30:45 +0000 (22:30 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 1 May 2023 00:19:26 +0000 (10:19 +1000)
client.go
pexconn.go
torrent.go

index 9306624b96a0ff9b44b335415bb70fefe33f941a..1ba3787117c9652af2e9e08cfe424cd9c4612365 100644 (file)
--- a/client.go
+++ b/client.go
@@ -23,8 +23,8 @@ import (
        "github.com/anacrolix/chansync/events"
        "github.com/anacrolix/dht/v2"
        "github.com/anacrolix/dht/v2/krpc"
-       g "github.com/anacrolix/generics"
        . "github.com/anacrolix/generics"
+       g "github.com/anacrolix/generics"
        "github.com/anacrolix/log"
        "github.com/anacrolix/missinggo/perf"
        "github.com/anacrolix/missinggo/v2"
index b01edbb487a0207a67088b8f26f81e93638eb485..cc6c3fc679dbbd50cc4dd7c2c57448c7f06dd59d 100644 (file)
@@ -6,7 +6,6 @@ import (
        "time"
 
        g "github.com/anacrolix/generics"
-
        "github.com/anacrolix/log"
 
        pp "github.com/anacrolix/torrent/peer_protocol"
index 2f6832e9703d943f15b7525b4052e81805007713..b0820e5b3b0e97f142ba71d1b7d7ac1fde10356c 100644 (file)
@@ -22,6 +22,7 @@ import (
        "github.com/anacrolix/chansync/events"
        "github.com/anacrolix/dht/v2"
        . "github.com/anacrolix/generics"
+       g "github.com/anacrolix/generics"
        "github.com/anacrolix/log"
        "github.com/anacrolix/missinggo/perf"
        "github.com/anacrolix/missinggo/slices"
@@ -32,6 +33,7 @@ import (
        "github.com/anacrolix/sync"
        "github.com/davecgh/go-spew/spew"
        "github.com/pion/datachannel"
+       "golang.org/x/exp/maps"
 
        "github.com/anacrolix/torrent/bencode"
        "github.com/anacrolix/torrent/common"
@@ -759,24 +761,37 @@ func (t *Torrent) writeStatus(w io.Writer) {
        spew.NewDefaultConfig()
        spew.Fdump(w, t.statsLocked())
 
-       peers := t.peersAsSlice()
-       sort.Slice(peers, func(_i, _j int) bool {
-               i := peers[_i]
-               j := peers[_j]
-               if less, ok := multiless.New().EagerSameLess(
-                       i.downloadRate() == j.downloadRate(), i.downloadRate() < j.downloadRate(),
-               ).LessOk(); ok {
-                       return less
-               }
-               return worseConn(i, j)
+       fmt.Fprintf(w, "webseeds:\n")
+       t.writePeerStatuses(w, maps.Values(t.webSeeds))
+
+       peerConns := maps.Keys(t.conns)
+       // Peers without priorities first, then those with. I'm undecided about how to order peers
+       // without priorities.
+       sort.Slice(peerConns, func(li, ri int) bool {
+               l := peerConns[li]
+               r := peerConns[ri]
+               ml := multiless.New()
+               lpp := g.ResultFromTuple(l.peerPriority()).ToOption()
+               rpp := g.ResultFromTuple(r.peerPriority()).ToOption()
+               ml = ml.Bool(lpp.Ok, rpp.Ok)
+               ml = ml.Uint32(rpp.Value, lpp.Value)
+               return ml.Less()
        })
+
+       fmt.Fprintf(w, "peer conns:\n")
+       t.writePeerStatuses(w, g.SliceMap(peerConns, func(pc *PeerConn) *Peer {
+               return &pc.Peer
+       }))
+}
+
+func (t *Torrent) writePeerStatuses(w io.Writer, peers []*Peer) {
        var buf bytes.Buffer
-       for i, c := range peers {
-               fmt.Fprintf(w, "%2d. ", i+1)
+       for _, c := range peers {
+               fmt.Fprintf(w, "- ")
                buf.Reset()
                c.writeStatus(&buf)
                w.Write(bytes.TrimRight(
-                       bytes.ReplaceAll(buf.Bytes(), []byte("\n"), []byte("\n    ")),
+                       bytes.ReplaceAll(buf.Bytes(), []byte("\n"), []byte("\n  ")),
                        " "))
        }
 }