github.com/anacrolix/torrent@v1.61.0/tracker_scraper.go (about) 1 package torrent 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/url" 7 "time" 8 ) 9 10 type torrentTrackerAnnouncer interface { 11 statusLine() string 12 URL() *url.URL 13 14 Stop() 15 } 16 17 func regularTrackerScraperStatusLine(state announceState) string { 18 lastAnnounce := state.lastOk 19 var w bytes.Buffer 20 fmt.Fprintf(&w, "next ann: %v, last ann: %v", 21 func() string { 22 na := time.Until(lastAnnounce.Completed.Add(lastAnnounce.Interval)) 23 if na > 0 { 24 na /= time.Second 25 na *= time.Second 26 return na.String() 27 } else { 28 return "anytime" 29 } 30 }(), 31 func() string { 32 if state.Err != nil { 33 return state.Err.Error() 34 } 35 if lastAnnounce.Completed.IsZero() { 36 return "never" 37 } 38 return fmt.Sprintf("%d peers", lastAnnounce.NumPeers) 39 }(), 40 ) 41 return w.String() 42 }