consistent logging
This commit is contained in:
parent
8775764fb6
commit
caba155b5d
5 changed files with 51 additions and 30 deletions
|
@ -88,7 +88,7 @@ func New() *Config {
|
||||||
// New.
|
// New.
|
||||||
func Open(path string) (*Config, error) {
|
func Open(path string) (*Config, error) {
|
||||||
if path == "" {
|
if path == "" {
|
||||||
log.Info("chihaya: using default configuration")
|
log.V(1).Info("using default config")
|
||||||
return New(), nil
|
return New(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,6 +102,7 @@ func Open(path string) (*Config, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
log.V(1).Infof("loaded config file: %s", path)
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
19
main.go
19
main.go
|
@ -37,25 +37,24 @@ func main() {
|
||||||
if profile {
|
if profile {
|
||||||
f, err := os.Create("chihaya.cpu")
|
f, err := os.Create("chihaya.cpu")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("chihaya: failed to create profile file: %s\n", err)
|
log.Fatalf("failed to create profile file: %s\n", err)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
pprof.StartCPUProfile(f)
|
pprof.StartCPUProfile(f)
|
||||||
log.Info("chihaya: started profiling")
|
log.V(1).Info("started profiling")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the config file.
|
// Load the config file.
|
||||||
conf, err := config.Open(configPath)
|
conf, err := config.Open(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("chihaya: failed to parse configuration file: %s\n", err)
|
log.Fatalf("failed to parse configuration file: %s\n", err)
|
||||||
}
|
}
|
||||||
log.Infoln("chihaya: succesfully loaded config")
|
|
||||||
|
|
||||||
// Create a new server.
|
// Create a new server.
|
||||||
s, err := server.New(conf)
|
s, err := server.New(conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("chihaya: failed to create server: %s\n", err)
|
log.Fatalf("failed to create server: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spawn a goroutine to handle interrupts and safely shut down.
|
// Spawn a goroutine to handle interrupts and safely shut down.
|
||||||
|
@ -64,19 +63,19 @@ func main() {
|
||||||
signal.Notify(interrupts, os.Interrupt)
|
signal.Notify(interrupts, os.Interrupt)
|
||||||
|
|
||||||
<-interrupts
|
<-interrupts
|
||||||
log.Info("chihaya: caught interrupt, shutting down...")
|
log.V(1).Info("caught interrupt, shutting down...")
|
||||||
|
|
||||||
if profile {
|
if profile {
|
||||||
pprof.StopCPUProfile()
|
pprof.StopCPUProfile()
|
||||||
log.Info("chihaya: stopped profiling")
|
log.V(1).Info("stopped profiling")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := s.Stop()
|
err := s.Stop()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("chihaya: failed to shutdown cleanly: %s", err)
|
log.Fatalf("failed to shutdown cleanly: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("chihaya: shutdown cleanly")
|
log.V(1).Info("shutdown cleanly")
|
||||||
|
|
||||||
<-interrupts
|
<-interrupts
|
||||||
|
|
||||||
|
@ -87,6 +86,6 @@ func main() {
|
||||||
// Start the server listening and handling requests.
|
// Start the server listening and handling requests.
|
||||||
err = s.ListenAndServe()
|
err = s.ListenAndServe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("chihaya: failed to start server: %s\n", err)
|
log.Fatalf("failed to start server: %s\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,16 @@ func (s Server) serveAnnounce(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
writeAnnounceResponse(w, announce, user, torrent)
|
writeAnnounceResponse(w, announce, user, torrent)
|
||||||
|
|
||||||
log.Infof("chihaya: handled announce from %s", announce.IP)
|
w.(http.Flusher).Flush()
|
||||||
|
|
||||||
|
if log.V(5) {
|
||||||
|
log.Infof(
|
||||||
|
"announce: ip: %s, user: %s, torrent: %s",
|
||||||
|
announce.IP,
|
||||||
|
user.ID,
|
||||||
|
torrent.ID,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateTorrent(c tracker.Conn, a *models.Announce, p *models.Peer, t *models.Torrent) (created bool, err error) {
|
func updateTorrent(c tracker.Conn, a *models.Announce, p *models.Peer, t *models.Torrent) (created bool, err error) {
|
||||||
|
@ -174,12 +183,13 @@ func writeAnnounceResponse(w io.Writer, a *models.Announce, u *models.User, t *m
|
||||||
bencoder.Encode("peers")
|
bencoder.Encode("peers")
|
||||||
|
|
||||||
var peerCount int
|
var peerCount int
|
||||||
|
if a.Left == 0 {
|
||||||
|
peerCount = minInt(a.NumWant, leechCount)
|
||||||
|
} else {
|
||||||
|
peerCount = minInt(a.NumWant, leechCount+seedCount-1)
|
||||||
|
}
|
||||||
|
|
||||||
if a.Compact {
|
if a.Compact {
|
||||||
if a.Left == 0 {
|
|
||||||
peerCount = minInt(a.NumWant, leechCount)
|
|
||||||
} else {
|
|
||||||
peerCount = minInt(a.NumWant, leechCount+seedCount-1)
|
|
||||||
}
|
|
||||||
// 6 is the number of bytes 1 compact peer takes up.
|
// 6 is the number of bytes 1 compact peer takes up.
|
||||||
bencoder.Encode(strconv.Itoa(peerCount * 6))
|
bencoder.Encode(strconv.Itoa(peerCount * 6))
|
||||||
bencoder.Encode(":")
|
bencoder.Encode(":")
|
||||||
|
@ -187,17 +197,13 @@ func writeAnnounceResponse(w io.Writer, a *models.Announce, u *models.User, t *m
|
||||||
bencoder.Encode("l")
|
bencoder.Encode("l")
|
||||||
}
|
}
|
||||||
|
|
||||||
var count int
|
|
||||||
if a.Left == 0 {
|
if a.Left == 0 {
|
||||||
// If they're seeding, give them only leechers
|
// If they're seeding, give them only leechers
|
||||||
count = writePeers(w, u, t.Leechers, a.NumWant, a.Compact)
|
writePeers(w, u, t.Leechers, peerCount, a.Compact)
|
||||||
} else {
|
} else {
|
||||||
// If they're leeching, prioritize giving them seeders
|
// If they're leeching, prioritize giving them seeders
|
||||||
count += writePeers(w, u, t.Seeders, a.NumWant, a.Compact)
|
count := writePeers(w, u, t.Seeders, peerCount, a.Compact)
|
||||||
count += writePeers(w, u, t.Leechers, a.NumWant-count, a.Compact)
|
writePeers(w, u, t.Leechers, peerCount-count, a.Compact)
|
||||||
}
|
|
||||||
if a.Compact && peerCount != count {
|
|
||||||
log.Errorf("calculated peer count (%d) != real count (%d)", peerCount, count)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !a.Compact {
|
if !a.Compact {
|
||||||
|
|
|
@ -7,6 +7,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
log "github.com/golang/glog"
|
log "github.com/golang/glog"
|
||||||
|
|
||||||
|
@ -26,15 +27,19 @@ func (s *Server) serveScrape(w http.ResponseWriter, r *http.Request) {
|
||||||
fail(err, w, r)
|
fail(err, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var user *models.User
|
||||||
if s.conf.Private {
|
if s.conf.Private {
|
||||||
_, err = conn.FindUser(scrape.Passkey)
|
user, err = conn.FindUser(scrape.Passkey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fail(err, w, r)
|
fail(err, w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var torrents []*models.Torrent
|
var (
|
||||||
|
torrents []*models.Torrent
|
||||||
|
torrentIDs []string
|
||||||
|
)
|
||||||
for _, infohash := range scrape.Infohashes {
|
for _, infohash := range scrape.Infohashes {
|
||||||
torrent, err := conn.FindTorrent(infohash)
|
torrent, err := conn.FindTorrent(infohash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -42,6 +47,7 @@ func (s *Server) serveScrape(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
torrents = append(torrents, torrent)
|
torrents = append(torrents, torrent)
|
||||||
|
torrentIDs = append(torrentIDs, string(torrent.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
bencoder := bencode.NewEncoder(w)
|
bencoder := bencode.NewEncoder(w)
|
||||||
|
@ -52,9 +58,14 @@ func (s *Server) serveScrape(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
bencoder.Encode("e")
|
bencoder.Encode("e")
|
||||||
|
|
||||||
log.V(3).Infof("chihaya: handled scrape from %s", r.RemoteAddr)
|
|
||||||
|
|
||||||
w.(http.Flusher).Flush()
|
w.(http.Flusher).Flush()
|
||||||
|
|
||||||
|
log.V(5).Infof(
|
||||||
|
"scrape: ip: %s user: %s torrents: %s",
|
||||||
|
r.RemoteAddr,
|
||||||
|
user.ID,
|
||||||
|
strings.Join(torrentIDs, ", "),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeTorrentStatus(w io.Writer, t *models.Torrent) {
|
func writeTorrentStatus(w io.Writer, t *models.Torrent) {
|
||||||
|
|
|
@ -128,7 +128,11 @@ func fail(err error, w http.ResponseWriter, r *http.Request) {
|
||||||
length, _ := io.WriteString(w, msg)
|
length, _ := io.WriteString(w, msg)
|
||||||
w.Header().Add("Content-Length", string(length))
|
w.Header().Add("Content-Length", string(length))
|
||||||
|
|
||||||
log.V(2).Infof("chihaya: handled failure: %s from %s ", errmsg, r.RemoteAddr)
|
|
||||||
|
|
||||||
w.(http.Flusher).Flush()
|
w.(http.Flusher).Flush()
|
||||||
|
|
||||||
|
log.V(5).Infof(
|
||||||
|
"failed request: ip: %s failure: %s",
|
||||||
|
r.RemoteAddr,
|
||||||
|
errmsg,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue