Superhappyfuntimelogging.

This commit is contained in:
Andrey Petrov 2014-04-24 19:13:33 -07:00
parent 20040a6444
commit e2ba6efad2
5 changed files with 44 additions and 20 deletions

View File

@ -1,10 +1,14 @@
// TODO: Export to a reasonable format.
// TODO: Use proper logger for logging.
// TODO: Namespace packages properly (outside of `main`)
package main
import (
"github.com/jessevdk/go-flags"
"os"
"time"
"github.com/alexcesaro/log"
"github.com/alexcesaro/log/golog"
"github.com/jessevdk/go-flags"
)
// Taken from: https://github.com/bitcoin/bitcoin/blob/89d72f3d9b6e7ef051ad1439f266b809f348229b/src/chainparams.cpp#L143
@ -25,6 +29,12 @@ type Options struct {
PeerAge time.Duration `long:"peer-age" description:"Ignore discovered peers older than this." default:"24h"`
}
var logLevels = []log.Level{
log.Warning,
log.Info,
log.Debug,
}
func main() {
options := Options{}
parser := flags.NewParser(&options, flags.Default)
@ -35,8 +45,16 @@ func main() {
return
}
seedNodes := options.Seed
// Figure out the log level
numVerbose := len(options.Verbose)
if numVerbose > len(logLevels) { // lol math.Min, you floaty bugger.
numVerbose = len(logLevels)
}
logLevel := logLevels[numVerbose]
logger = golog.New(os.Stderr, logLevel)
seedNodes := options.Seed
if len(seedNodes) == 0 {
seedNodes = GetSeedsFromDNS(defaultDnsSeeds)
}

View File

@ -2,7 +2,6 @@ package main
import (
"github.com/conformal/btcwire"
"log"
"time"
)
@ -44,20 +43,20 @@ func (c *Crawler) handleAddress(address string) *[]string {
err := peer.Connect()
if err != nil {
log.Printf("[%s] Connection failed: %v", address, err)
logger.Debugf("[%s] Connection failed: %v", address, err)
return &r
}
defer peer.Disconnect()
err = peer.Handshake()
if err != nil {
log.Printf("[%s] Handsake failed: %v", address, err)
logger.Debugf("[%s] Handsake failed: %v", address, err)
return &r
}
// Send getaddr.
if err := btcwire.WriteMessage(peer.conn, btcwire.NewMsgGetAddr(), client.pver, client.btcnet); err != nil {
log.Printf("[%s] GetAddr failed: %v", address, err)
logger.Warningf("[%s] GetAddr failed: %v", address, err)
return &r
}
@ -73,7 +72,7 @@ func (c *Crawler) handleAddress(address string) *[]string {
// many unrelated messages.
msg, _, err := btcwire.ReadMessage(peer.conn, client.pver, client.btcnet)
if err != nil {
log.Printf("[%s] Failed to read message: %v", address, err)
logger.Warningf("[%s] Failed to read message: %v", address, err)
continue
}
@ -95,7 +94,7 @@ func (c *Crawler) handleAddress(address string) *[]string {
default:
otherMessages = append(otherMessages, tmsg.Command())
if len(otherMessages) > tolerateMessages {
log.Printf("[%s] Giving up with %d results after tolerating messages: %v.", address, len(r), otherMessages)
logger.Debugf("[%s] Giving up with %d results after tolerating messages: %v.", address, len(r), otherMessages)
return &r
}
}
@ -137,7 +136,7 @@ func (c *Crawler) Start() {
numWorkers += 1
go func() {
log.Printf("[%s] Worker started.", address)
logger.Debugf("[%s] Worker started.", address)
results := *c.handleAddress(address)
c.results <- results
}()
@ -156,11 +155,11 @@ func (c *Crawler) Start() {
numWorkers -= 1
if len(r) > 0 {
log.Printf("Added %d new peers of %d returned. Total %d known peers via %d connected.", newAdded, len(r), c.count, numGood)
logger.Infof("Added %d new peers of %d returned. Total %d known peers via %d connected.", newAdded, len(r), c.count, numGood)
}
if len(c.queue) == 0 && numWorkers == 0 {
log.Printf("Done.")
logger.Infof("Done.")
return
}

9
log.go Normal file
View File

@ -0,0 +1,9 @@
package main
import (
"github.com/alexcesaro/log/golog"
)
var logger *golog.Logger
// TODO: Init a default logger in case it's used as a lib?

View File

@ -3,7 +3,6 @@ package main
import (
"fmt"
"github.com/conformal/btcwire"
"log"
"net"
)
@ -37,7 +36,7 @@ func (p *Peer) Connect() error {
func (p *Peer) Disconnect() {
p.conn.Close()
log.Printf("[%s] Closed.", p.address)
logger.Debugf("[%s] Closed.", p.address)
}
func (p *Peer) Handshake() error {
@ -45,7 +44,7 @@ func (p *Peer) Handshake() error {
return fmt.Errorf("Peer is not connected, can't handshake.")
}
log.Printf("[%s] Starting handshake.", p.address)
logger.Debugf("[%s] Starting handshake.", p.address)
nonce, err := btcwire.RandomUint64()
if err != nil {
@ -74,7 +73,7 @@ func (p *Peer) Handshake() error {
if uint32(vmsg.ProtocolVersion) < pver {
pver = uint32(vmsg.ProtocolVersion)
}
log.Printf("[%s] -> Version: %s", p.address, vmsg.UserAgent)
logger.Debugf("[%s] -> Version: %s", p.address, vmsg.UserAgent)
// Normally we'd check if vmsg.Nonce == p.nonce but the crawler does not
// accept external connections so we skip it.

View File

@ -2,7 +2,6 @@ package main
import (
"github.com/conformal/btcwire"
"log"
"net"
"sync"
)
@ -17,10 +16,10 @@ func GetSeedsFromDNS(dnsSeeds []string) []string {
defer wait.Done()
ips, err := net.LookupIP(address)
if err != nil {
log.Printf("Failed to resolve %s: %v", address, err)
logger.Warningf("Failed to resolve %s: %v", address, err)
return
}
log.Printf("Resolved %d seeds from %s.", len(ips), address)
logger.Debugf("Resolved %d seeds from %s.", len(ips), address)
results <- ips
}(address)
}
@ -37,7 +36,7 @@ func GetSeedsFromDNS(dnsSeeds []string) []string {
}
}
log.Printf("Resolved %d seed nodes from %d DNS seeds.", len(seeds), len(dnsSeeds))
logger.Infof("Resolved %d seed nodes from %d DNS seeds.", len(seeds), len(dnsSeeds))
// Note that this will likely include duplicate seeds. The crawler deduplicates them.
return seeds