Superhappyfuntimelogging.
This commit is contained in:
parent
20040a6444
commit
e2ba6efad2
24
btc-crawl.go
24
btc-crawl.go
|
@ -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)
|
||||
}
|
||||
|
|
17
crawler.go
17
crawler.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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?
|
7
peer.go
7
peer.go
|
@ -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.
|
||||
|
|
7
seed.go
7
seed.go
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue