diff --git a/stats/stats.go b/stats/stats.go index 03a7c80..44a788e 100644 --- a/stats/stats.go +++ b/stats/stats.go @@ -81,6 +81,7 @@ type Stats struct { Announces uint64 `json:"Tracker.Announces"` Scrapes uint64 `json:"Tracker.Scrapes"` + TorrentsSize uint64 `json:"Torrents.Size"` TorrentsAdded uint64 `json:"Torrents.Added"` TorrentsRemoved uint64 `json:"Torrents.Removed"` TorrentsReaped uint64 `json:"Torrents.Reaped"` @@ -192,12 +193,15 @@ func (s *Stats) handleEvent(event int) { case NewTorrent: s.TorrentsAdded++ + s.TorrentsSize++ case DeletedTorrent: s.TorrentsRemoved++ + s.TorrentsSize-- case ReapedTorrent: s.TorrentsReaped++ + s.TorrentsSize-- case AcceptedConnection: s.ConnectionsAccepted++ diff --git a/tracker/storage.go b/tracker/storage.go index 9afeb18..90611d2 100644 --- a/tracker/storage.go +++ b/tracker/storage.go @@ -44,6 +44,10 @@ func NewStorage(cfg *config.Config) *Storage { return s } +func (s *Storage) Len() int { + return int(atomic.LoadInt32(&s.size)) +} + func (s *Storage) GetShardIndex(infohash string) uint32 { idx := fnv.New32() idx.Write([]byte(infohash)) @@ -198,7 +202,7 @@ func (s *Storage) PurgeInactivePeers(purgeEmptyTorrents bool, before time.Time) // Build a list of keys to process. index := 0 - maxkeys := int(atomic.LoadInt32(&s.size)) + maxkeys := s.Len() keys := make([]string, maxkeys) for i := range s.shards { shard := &s.shards[i]