74 lines
2.1 KiB
Go
74 lines
2.1 KiB
Go
|
package torrent
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
|
||
|
"git.kmsign.ru/royalcat/tstor/pkg/rlog"
|
||
|
"github.com/anacrolix/torrent/types/infohash"
|
||
|
)
|
||
|
|
||
|
func (s *Daemon) allStats(ctx context.Context) (map[infohash.T]TorrentStats, TorrentStats) {
|
||
|
totalPeers := 0
|
||
|
activePeers := 0
|
||
|
connectedSeeders := 0
|
||
|
|
||
|
perTorrentStats := map[infohash.T]TorrentStats{}
|
||
|
|
||
|
for _, v := range s.client.Torrents() {
|
||
|
stats := v.Stats()
|
||
|
perTorrentStats[v.InfoHash()] = TorrentStats{
|
||
|
Timestamp: time.Now(),
|
||
|
DownloadedBytes: uint64(stats.BytesRead.Int64()),
|
||
|
UploadedBytes: uint64(stats.BytesWritten.Int64()),
|
||
|
TotalPeers: uint16(stats.TotalPeers),
|
||
|
ActivePeers: uint16(stats.ActivePeers),
|
||
|
ConnectedSeeders: uint16(stats.ConnectedSeeders),
|
||
|
}
|
||
|
|
||
|
totalPeers += stats.TotalPeers
|
||
|
activePeers += stats.ActivePeers
|
||
|
connectedSeeders += stats.ConnectedSeeders
|
||
|
}
|
||
|
|
||
|
totalStats := s.client.Stats()
|
||
|
|
||
|
return perTorrentStats, TorrentStats{
|
||
|
Timestamp: time.Now(),
|
||
|
DownloadedBytes: uint64(totalStats.BytesRead.Int64()),
|
||
|
UploadedBytes: uint64(totalStats.BytesWritten.Int64()),
|
||
|
TotalPeers: uint16(totalPeers),
|
||
|
ActivePeers: uint16(activePeers),
|
||
|
ConnectedSeeders: uint16(connectedSeeders),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Daemon) updateStats(ctx context.Context) {
|
||
|
log := s.log
|
||
|
|
||
|
perTorrentStats, totalStats := s.allStats(ctx)
|
||
|
for ih, v := range perTorrentStats {
|
||
|
err := s.statsStore.AddTorrentStats(ih, v)
|
||
|
if err != nil {
|
||
|
log.Error(ctx, "error saving torrent stats", rlog.Error(err))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
err := s.statsStore.AddTotalStats(totalStats)
|
||
|
if err != nil {
|
||
|
log.Error(ctx, "error saving total stats", rlog.Error(err))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Daemon) TotalStatsHistory(ctx context.Context, since time.Time) ([]TorrentStats, error) {
|
||
|
return s.statsStore.ReadTotalStatsHistory(ctx, since)
|
||
|
}
|
||
|
|
||
|
func (s *Daemon) TorrentStatsHistory(ctx context.Context, since time.Time, ih infohash.T) ([]TorrentStats, error) {
|
||
|
return s.statsStore.ReadTorrentStatsHistory(ctx, since, ih)
|
||
|
}
|
||
|
|
||
|
func (s *Daemon) StatsHistory(ctx context.Context, since time.Time) ([]TorrentStats, error) {
|
||
|
return s.statsStore.ReadStatsHistory(ctx, since)
|
||
|
}
|