]> git.lizzy.rs Git - go-anidb.git/commitdiff
anidb: Allow setting the Logger to use for logging traffic
authorDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Fri, 26 Jul 2013 13:59:48 +0000 (10:59 -0300)
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Fri, 26 Jul 2013 13:59:48 +0000 (10:59 -0300)
By default, log to ioutil.Discard (logging to nil would result in a crash).

The udpWrap now needs to keep a reference to *AniDB in order to use the
Logger. UpdateTitles also had to be changed to be an *AniDB* method because
of the Logger.

anidb.go
animecache.go
auth.go
filecache.go
titlecache.go
udp.go

index bb0d65846ba51572601b8c0959afa3bab7a37179..7029a46f04d6b470407a5f170552297cd8eabfee 100644 (file)
--- a/anidb.go
+++ b/anidb.go
@@ -2,6 +2,8 @@
 package anidb
 
 import (
+       "io/ioutil"
+       "log"
        "time"
 )
 
@@ -19,16 +21,19 @@ import (
 // by a previous Auth() call.
 type AniDB struct {
        Timeout time.Duration // Timeout for the various calls (default: 45s)
+       Logger  *log.Logger   // Logger where HTTP/UDP traffic is logged
 
        udp *udpWrap
 }
 
 // Initialises a new AniDB.
 func NewAniDB() *AniDB {
-       return &AniDB{
+       ret := &AniDB{
                Timeout: 45 * time.Second,
-               udp:     newUDPWrap(),
+               Logger:  log.New(ioutil.Discard, "", log.LstdFlags),
        }
+       ret.udp = newUDPWrap(ret)
+       return ret
 }
 
 func (adb *AniDB) User() *User {
index 4ec6e0e2ec94ea67ed67c55d0dbd9431dc9a21d0..eff4df677e73928339bfee4caccd81bdafda0bcb 100644 (file)
@@ -6,7 +6,6 @@ import (
        "github.com/Kovensky/go-anidb/misc"
        "github.com/Kovensky/go-anidb/udp"
        "github.com/Kovensky/go-fscache"
-       "log"
        "sort"
        "strconv"
        "strings"
@@ -84,7 +83,7 @@ func (adb *AniDB) AnimeByID(aid AID) <-chan *Anime {
        go func() {
                httpChan := make(chan httpAnimeResponse, 1)
                go func() {
-                       log.Printf("HTTP>>> Anime %d", aid)
+                       adb.Logger.Printf("HTTP>>> Anime %d", aid)
                        a, err := httpapi.GetAnime(int(aid))
                        httpChan <- httpAnimeResponse{anime: a, err: err}
                }()
@@ -109,22 +108,22 @@ func (adb *AniDB) AnimeByID(aid AID) <-chan *Anime {
                        case <-timeout:
                                // HTTP API timeout
                                if httpChan != nil {
-                                       log.Printf("HTTP<<< Timeout")
+                                       adb.Logger.Printf("HTTP<<< Timeout")
                                        close(httpChan)
                                }
                        case resp := <-httpChan:
                                if resp.err != nil {
-                                       log.Printf("HTTP<<< %v", resp.err)
+                                       adb.Logger.Printf("HTTP<<< %v", resp.err)
                                        ok = false
                                        break Loop
                                }
 
                                if resp.anime.Error != "" {
-                                       log.Printf("HTTP<<< Error %q", resp.anime.Error)
+                                       adb.Logger.Printf("HTTP<<< Error %q", resp.anime.Error)
                                }
 
                                if anime.populateFromHTTP(resp.anime) {
-                                       log.Printf("HTTP<<< Anime %q", anime.PrimaryTitle)
+                                       adb.Logger.Printf("HTTP<<< Anime %q", anime.PrimaryTitle)
                                } else {
                                        // HTTP ok but parsing not ok
                                        if anime.PrimaryTitle == "" {
diff --git a/auth.go b/auth.go
index 069a095fdca4865aed3a7f4e8599045a296ce83f..c63d49bec0dfce6ff1996d83657accdcff0a7d10 100644 (file)
--- a/auth.go
+++ b/auth.go
@@ -92,12 +92,12 @@ func (udp *udpWrap) ReAuth() udpapi.APIReply {
        defer udp.credLock.Unlock()
 
        if c := udp.credentials; c != nil {
-               logRequest(paramSet{cmd: "AUTH", params: paramMap{"user": decrypt(c.username)}})
+               udp.logRequest(paramSet{cmd: "AUTH", params: paramMap{"user": decrypt(c.username)}})
                r := udp.AniDBUDP.Auth(
                        decrypt(c.username),
                        decrypt(c.password),
                        decrypt(c.udpKey))
-               logReply(r)
+               udp.logReply(r)
 
                err := r.Error()
 
@@ -185,7 +185,7 @@ func (adb *AniDB) Logout() error {
 
        if adb.udp.connected {
                adb.udp.connected = false
-               logRequest(paramSet{cmd: "LOGOUT"})
+               adb.udp.logRequest(paramSet{cmd: "LOGOUT"})
                return adb.udp.Logout()
        }
        return nil
index e590a73d7bc529ba07272a2afeb1f2c7c74ac872..cb8d528281a9f47f20f07de47d2ba9a1fb396b87 100644 (file)
@@ -6,7 +6,6 @@ import (
        "github.com/Kovensky/go-anidb/udp"
        "github.com/Kovensky/go-fscache"
        "image"
-       "log"
        "regexp"
        "sort"
        "strconv"
@@ -300,7 +299,7 @@ func (adb *AniDB) parseFileResponse(f **File, reply udpapi.APIReply, calledFromF
                        if partial {
                                if calledFromFIDsByGID {
                                        epno = test
-                                       log.Printf("UDP!!! FID %d is only part of episode %s with no complementary files", fid, epno)
+                                       adb.Logger.Printf("UDP!!! FID %d is only part of episode %s with no complementary files", fid, epno)
                                } else if len(test) == 1 && test[0].Start.Number == test[0].End.Number {
                                        fids := []int{}
 
index a69a5e458ea92fc135b93b770f616ac8e641fd11..d5356d87c5a925b5ed2edd3b89935fa2d1849e21 100644 (file)
@@ -4,7 +4,6 @@ import (
        "bytes"
        "github.com/Kovensky/go-anidb/titles"
        "io"
-       "log"
        "net/http"
        "os"
        "time"
@@ -38,7 +37,9 @@ func TitlesUpToDate() (ok bool) {
 // Downloads a new anime-titles database if the database is outdated.
 //
 // Saves the database as anime-titles.dat.gz in the cache dir.
-func UpdateTitles() error {
+func (adb *AniDB) UpdateTitles() error {
+       // needs the AniDB for the Logger
+
        // too new, no need to update
        if TitlesUpToDate() {
                return nil
@@ -55,21 +56,21 @@ func UpdateTitles() error {
 
        c := &http.Client{Transport: &http.Transport{DisableCompression: true}}
 
-       log.Printf("HTTP>>> %s", titles.DataDumpURL)
+       adb.Logger.Printf("HTTP>>> %s", titles.DataDumpURL)
 
        resp, err := c.Get(titles.DataDumpURL)
        if err != nil {
-               log.Printf("HTTP<<< %s", resp.Status)
+               adb.Logger.Printf("HTTP<<< %s", resp.Status)
                return err
        }
        defer resp.Body.Close()
 
        buf := bytes.Buffer{}
-       log.Printf("HTTP--- %s", resp.Status)
+       adb.Logger.Printf("HTTP--- %s", resp.Status)
 
        _, err = io.Copy(&buf, resp.Body)
        if err != nil {
-               log.Printf("HTTP--- %v", err)
+               adb.Logger.Printf("HTTP--- %v", err)
                return err
        }
 
@@ -84,7 +85,7 @@ func UpdateTitles() error {
        }
 
        defer func() {
-               log.Printf("HTTP<<< Titles version %s", titlesDB.UpdateTime)
+               adb.Logger.Printf("HTTP<<< Titles version %s", titlesDB.UpdateTime)
        }()
        return RefreshTitles()
 }
diff --git a/udp.go b/udp.go
index b43d0f65c309ffdcd02884f71afa69ef74088970..e3ca0fa0e028bf22560fd6a5569b00906b44914a 100644 (file)
--- a/udp.go
+++ b/udp.go
@@ -2,7 +2,6 @@ package anidb
 
 import (
        "github.com/Kovensky/go-anidb/udp"
-       "log"
        "sync"
        "time"
 )
@@ -39,6 +38,8 @@ type paramSet struct {
 type udpWrap struct {
        *udpapi.AniDBUDP
 
+       adb *AniDB
+
        sendLock    sync.Mutex
        sendQueueCh chan paramSet
 
@@ -49,9 +50,10 @@ type udpWrap struct {
        user *User
 }
 
-func newUDPWrap() *udpWrap {
+func newUDPWrap(adb *AniDB) *udpWrap {
        u := &udpWrap{
                AniDBUDP:    udpapi.NewAniDBUDP(),
+               adb:         adb,
                sendQueueCh: make(chan paramSet, 10),
        }
        go u.sendQueue()
@@ -92,17 +94,17 @@ func (r *bannedAPIReply) Error() error {
 
 var bannedReply udpapi.APIReply = &bannedAPIReply{}
 
-func logRequest(set paramSet) {
+func (udp *udpWrap) logRequest(set paramSet) {
        switch set.cmd {
        case "AUTH":
-               log.Printf("UDP>>> AUTH user=%s\n", set.params["user"])
+               udp.adb.Logger.Printf("UDP>>> AUTH user=%s\n", set.params["user"])
        default:
-               log.Printf("UDP>>> %s %s\n", set.cmd, udpapi.ParamMap(set.params).String())
+               udp.adb.Logger.Printf("UDP>>> %s %s\n", set.cmd, udpapi.ParamMap(set.params).String())
        }
 }
 
-func logReply(reply udpapi.APIReply) {
-       log.Printf("UDP<<< %d %s\n", reply.Code(), reply.Text())
+func (udp *udpWrap) logReply(reply udpapi.APIReply) {
+       udp.adb.Logger.Printf("UDP<<< %d %s\n", reply.Code(), reply.Text())
 }
 
 func (udp *udpWrap) sendQueue() {
@@ -116,7 +118,7 @@ func (udp *udpWrap) sendQueue() {
                        continue
                }
 
-               logRequest(set)
+               udp.logRequest(set)
                reply := <-udp.AniDBUDP.SendRecv(set.cmd, udpapi.ParamMap(set.params))
 
                if reply.Error() == udpapi.TimeoutError {
@@ -125,7 +127,7 @@ func (udp *udpWrap) sendQueue() {
                        if wait > time.Minute {
                                wait = time.Minute
                        }
-                       log.Printf("UDP--- Timeout; waiting %s before retry", wait)
+                       udp.adb.Logger.Printf("UDP--- Timeout; waiting %s before retry", wait)
 
                        delete(set.params, "s")
                        delete(set.params, "tag")
@@ -133,7 +135,7 @@ func (udp *udpWrap) sendQueue() {
                        time.Sleep(wait)
                        goto Retry
                }
-               logReply(reply)
+               udp.logReply(reply)
 
                wait = initialWait