aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2018-01-09 13:06:17 +0000
committerFelix Hanley <felix@userspace.com.au>2018-01-09 13:06:17 +0000
commit25ec6208dd2617989f11d093092d47a00d6de25d (patch)
tree72f214ae9b90c3a9853dc5ecf4842bae77e3ee4b
parentff55e6b4b031a592e51c0c628cc0d0742c16922b (diff)
downloaddhtsearch-25ec6208dd2617989f11d093092d47a00d6de25d.tar.gz
dhtsearch-25ec6208dd2617989f11d093092d47a00d6de25d.tar.bz2
Configure main executable flags
-rw-r--r--cmd/main.go147
1 files changed, 74 insertions, 73 deletions
diff --git a/cmd/main.go b/cmd/main.go
index bad0804..a08c7f5 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -3,113 +3,114 @@ package main
import (
"flag"
"fmt"
+ "os"
+ "path/filepath"
+ "time"
- "github.com/BurntSushi/toml"
"github.com/felix/dhtsearch"
+ "github.com/felix/dhtsearch/crawler"
"github.com/felix/logger"
"github.com/jawher/mow.cli"
- "os"
- "path/filepath"
- "time"
)
var (
- cfg dhtsearch.Config
- log logger.Logger
version string
- debug *bool
)
func main() {
-
app := cli.App("dhtsearch", "Crawl the DHT network")
- cfg = dhtsearch.DefaultConfig()
-
- debug = app.Bool(cli.BoolOpt{Name: "d debug", Value: cfg.Debug, Desc: "show debug output"})
- cfgFile := app.String(cli.StringOpt{Name: "c config", Value: "./config.toml", Desc: "path to configuration file", EnvVar: "CONFIG"})
-
- flag.IntVar(&Config.BasePort, "base-port", Config.BasePort, "listen port (and first of multiple ports)")
- flag.IntVar(&Config.NumNodes, "num-nodes", Config.NumNodes, "number of nodes to start")
- flag.BoolVar(&Config.Debug, "debug", Config.Debug, "provide debug output")
- flag.BoolVar(&Config.Quiet, "quiet", Config.Quiet, "log only errors")
- flag.StringVar(&Config.Dsn, "dsn", Config.Dsn, "Database DSN")
- flag.BoolVar(&Config.NoHttp, "no-http", Config.NoHttp, "no HTTP service")
- flag.StringVar(&Config.HttpAddress, "http-address", Config.HttpAddress, "HTTP listen address:port")
-
- // Advanced
- flag.IntVar(&Config.Advanced.RoutingTableSize, "routing-table-size", Config.Advanced.RoutingTableSize, "number of remote nodes in routing table")
- flag.IntVar(&Config.Advanced.MaxBtWorkers, "max-bt-workers", Config.Advanced.MaxBtWorkers, "max number of BT workers")
- flag.IntVar(&Config.Advanced.MaxDhtWorkers, "max-dht-workers", Config.Advanced.MaxDhtWorkers, "max number of DHT workers")
- flag.IntVar(&Config.Advanced.PeerCacheSize, "peer-cache-size", Config.Advanced.PeerCacheSize, "memory cache of seen peers")
- flag.IntVar(&Config.Advanced.UdpTimeout, "udp-timeout", Config.Advanced.UdpTimeout, "UDP timeout in seconds")
- flag.IntVar(&Config.Advanced.TcpTimeout, "tcp-timeout", Config.Advanced.TcpTimeout, "TCP timeout in seconds")
- flag.IntVar(&Config.Advanced.ResultsPageSize, "results-page-size", Config.Advanced.ResultsPageSize, "number of items per page")
-
app.Version("version", version)
- app.Before = func() {
- cfgPath, _ := filepath.Abs(*cfgFile)
- if _, err := os.Stat(cfgPath); !os.IsNotExist(err) {
- if _, err := toml.DecodeFile(cfgPath, &cfg); err != nil {
- fmt.Printf("failed to read configuration file: %s", err)
- cli.Exit(1)
- }
- }
+ var (
+ port = app.Int(cli.IntOpt{
+ Name: "p port",
+ Value: 6881,
+ EnvVar: "PORT",
+ Desc: "listen port (and first of multiple ports)",
+ })
+ nodes = app.Int(cli.IntOpt{
+ Name: "n nodes",
+ Vale: 1,
+ EnvVar: "NODES",
+ Desc: "number of nodes to start",
+ })
+ debug = app.Bool(cli.BoolOpt{
+ Name: "d debug",
+ Value: false,
+ EnvVar: "DEBUG",
+ Desc: "show debug output",
+ })
+ dsn = app.String(cli.StringOpt{
+ Name: "dsn",
+ Value: "postgres://dht:dht@localhost/dht?sslmode=disable",
+ EnvVar: "DSN",
+ Desc: "postgres DSN",
+ })
+ httpHost = app.String(cli.StringOpt{
+ Name: "http-host",
+ Value: "localhost:6880",
+ EnvVar: "HTTP_HOST",
+ Desc: "HTTP listen address",
+ })
+ httpPort = app.Int(cli.IntOpt{
+ Name: "http-port",
+ Value: 6880,
+ EnvVar: "HTTP_PORT",
+ Desc: "HTTP listen port",
+ })
+ httpOff = app.Bool(cli.BoolOpt{
+ Name: "disable-http",
+ Value: false,
+ EnvVar: "DISABLE_HTTP",
+ Desc: "disable HTTP",
+ })
+ filterOff = app.Bool(cli.BoolOpt{
+ Name: "disable-filter",
+ Value: false,
+ EnvVar: "DISABLE_FILTER",
+ Desc: "disable HTTP",
+ })
+ tagFile = app.String(cli.StringOpt{
+ Name: "tag-file",
+ Value: "",
+ EnvVar: "TAG_FILE",
+ Desc: "file containingn custom tags",
+ })
+ skipTags = app.String(cli.StringOpt{
+ Name: "skip-tags",
+ Value: "adult",
+ EnvVar: "SKIP_TAGS",
+ Desc: "comma separated list of tags to skip",
+ })
+ )
+ app.Action = func() {
logOpts := &logger.Options{
Name: "dhtsearch",
Level: logger.Info,
}
- err := envconfig.Process("", &cfg)
- if err != nil {
- fmt.Printf("failed to parse environment: %s", err)
- cli.Exit(1)
- }
-
- if *debug {
- cfg.Debug = true
+ if debug {
logOpts.Level = logger.Debug
}
log = logger.New(logOpts)
log.Info("version", version)
- }
- app.Action = func() {
- // Leave it to the user to get around this
- if len(cfg.SkipTags) == 0 {
- fmt.Println("Using default skip tags")
- cfg.SkipTags = []string{"adult"}
- }
-
- server, err := dhtsearch.NewServer(
- cfg,
+ crawler, err := crawler.New(
+ dsn,
dhtsearch.SetLogger(log),
+ dhtsearch.SetPort(port),
+ dhtsearch.SetNodes(nodes),
)
if err != nil {
+ log.Error("failed to create crawler", "error", err)
cli.Exit(1)
}
- if cfg.StatFreq > 0 {
- statLog := log.Named("stats")
- go func() {
- // Grab the initial stats
- prev := loader.Stats()
-
- for {
- time.Sleep(time.Duration(cfg.StatFreq) * time.Second)
- stats := loader.Stats()
- diff := stats.Sub(&prev)
- statLog.Info(fmt.Sprintf("%ds diff", cfg.StatFreq), "messages_in", diff.MessagesIn, "bytes_in", diff.BytesIn, "messages_out", diff.MessagesOut, "bytes_out", diff.BytesOut)
- prev = stats
- }
- }()
- }
-
err = server.Run()
if err != nil {
- log.Error("failed to run loader", "error", err)
+ log.Error("failed to run c", "error", err)
cli.Exit(1)
}
cli.Exit(0)