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  }