rollout more stats

This commit is contained in:
Jimmy Zelinskie 2014-07-21 20:24:51 -04:00
parent 24f3e6b80b
commit 2c8894fbda
4 changed files with 43 additions and 8 deletions

View file

@ -12,6 +12,7 @@ import (
"github.com/julienschmidt/httprouter" "github.com/julienschmidt/httprouter"
"github.com/chihaya/chihaya/stats"
"github.com/chihaya/chihaya/tracker" "github.com/chihaya/chihaya/tracker"
"github.com/chihaya/chihaya/tracker/models" "github.com/chihaya/chihaya/tracker/models"
) )
@ -42,6 +43,8 @@ func (s *Server) serveAnnounce(w http.ResponseWriter, r *http.Request, p httprou
return http.StatusInternalServerError, err return http.StatusInternalServerError, err
} }
stats.RecordEvent(stats.Announce)
return http.StatusOK, nil return http.StatusOK, nil
} }
@ -60,6 +63,8 @@ func (s *Server) serveScrape(w http.ResponseWriter, r *http.Request, p httproute
return http.StatusInternalServerError, err return http.StatusInternalServerError, err
} }
stats.RecordEvent(stats.Scrape)
return http.StatusOK, nil return http.StatusOK, nil
} }

View file

@ -56,6 +56,7 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error {
if err != nil { if err != nil {
return err return err
} }
stats.RecordEvent(stats.NewTorrent)
case tkr.cfg.Private && err == ErrTorrentDNE: case tkr.cfg.Private && err == ErrTorrentDNE:
w.WriteError(err) w.WriteError(err)
@ -87,10 +88,9 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error {
// Rather than deleting the torrent explicitly, let the tracker driver // Rather than deleting the torrent explicitly, let the tracker driver
// ensure there are no race conditions. // ensure there are no race conditions.
conn.PurgeInactiveTorrent(torrent.Infohash) conn.PurgeInactiveTorrent(torrent.Infohash)
stats.RecordEvent(stats.ReapedTorrent)
} }
stats.RecordEvent(stats.Announce)
return w.WriteAnnounce(newAnnounceResponse(ann, peer, torrent)) return w.WriteAnnounce(newAnnounceResponse(ann, peer, torrent))
} }
@ -120,6 +120,11 @@ func updateSwarm(c Conn, ann *models.Announce, p *models.Peer, t *models.Torrent
return return
} }
t.Seeders[p.ID] = *p t.Seeders[p.ID] = *p
if p.IPv4() {
stats.RecordEvent(stats.NewSeedIPv4)
} else if p.IPv6() {
stats.RecordEvent(stats.NewSeedIPv6)
}
} else { } else {
err = c.PutLeecher(t.Infohash, p) err = c.PutLeecher(t.Infohash, p)
@ -127,6 +132,11 @@ func updateSwarm(c Conn, ann *models.Announce, p *models.Peer, t *models.Torrent
return return
} }
t.Leechers[p.ID] = *p t.Leechers[p.ID] = *p
if p.IPv4() {
stats.RecordEvent(stats.NewLeechIPv4)
} else if p.IPv6() {
stats.RecordEvent(stats.NewLeechIPv6)
}
} }
created = true created = true
} }
@ -145,12 +155,23 @@ func handleEvent(c Conn, ann *models.Announce, p *models.Peer, u *models.User, t
return return
} }
delete(t.Seeders, p.ID) delete(t.Seeders, p.ID)
if p.IPv4() {
stats.RecordEvent(stats.DeletedSeedIPv4)
} else if p.IPv6() {
stats.RecordEvent(stats.DeletedSeedIPv6)
}
} else if t.InLeecherPool(p) { } else if t.InLeecherPool(p) {
err = c.DeleteLeecher(t.Infohash, p.ID) err = c.DeleteLeecher(t.Infohash, p.ID)
if err != nil { if err != nil {
return return
} }
delete(t.Leechers, p.ID) delete(t.Leechers, p.ID)
if p.IPv4() {
stats.RecordEvent(stats.DeletedLeechIPv4)
} else if p.IPv6() {
stats.RecordEvent(stats.DeletedLeechIPv6)
}
} }
case ann.Event == "completed": case ann.Event == "completed":
@ -175,6 +196,11 @@ func handleEvent(c Conn, ann *models.Announce, p *models.Peer, u *models.User, t
} }
} }
snatched = true snatched = true
if p.IPv4() {
stats.RecordEvent(stats.CompletedIPv4)
} else if p.IPv6() {
stats.RecordEvent(stats.CompletedIPv6)
}
case t.InLeecherPool(p) && ann.Left == 0: case t.InLeecherPool(p) && ann.Left == 0:
// A leecher completed but the event was never received. // A leecher completed but the event was never received.
@ -182,6 +208,7 @@ func handleEvent(c Conn, ann *models.Announce, p *models.Peer, u *models.User, t
if err != nil { if err != nil {
return return
} }
// TODO Should this return snatched=true and stats for completed?
} }
return return

View file

@ -70,6 +70,14 @@ func NewPeer(a *Announce, u *User, t *Torrent) *Peer {
} }
} }
func (p *Peer) IPv4() bool {
return len(p.IP.To4()) == 4
}
func (p *Peer) IPv6() bool {
return len(p.IP.To16()) == 16
}
// Torrent is a swarm for a given torrent file. // Torrent is a swarm for a given torrent file.
type Torrent struct { type Torrent struct {
ID uint64 `json:"id"` ID uint64 `json:"id"`

View file

@ -4,10 +4,7 @@
package tracker package tracker
import ( import "github.com/chihaya/chihaya/tracker/models"
"github.com/chihaya/chihaya/stats"
"github.com/chihaya/chihaya/tracker/models"
)
// HandleScrape encapsulates all the logic of handling a BitTorrent client's // HandleScrape encapsulates all the logic of handling a BitTorrent client's
// scrape without being coupled to any transport protocol. // scrape without being coupled to any transport protocol.
@ -41,7 +38,5 @@ func (tkr *Tracker) HandleScrape(scrape *models.Scrape, w Writer) (err error) {
torrents = append(torrents, torrent) torrents = append(torrents, torrent)
} }
stats.RecordEvent(stats.Scrape)
return w.WriteScrape(&models.ScrapeResponse{torrents}) return w.WriteScrape(&models.ScrapeResponse{torrents})
} }