diff options
| author | Felix Hanley <felix@userspace.com.au> | 2018-01-09 13:06:17 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2018-01-09 13:06:17 +0000 |
| commit | 25ec6208dd2617989f11d093092d47a00d6de25d (patch) | |
| tree | 72f214ae9b90c3a9853dc5ecf4842bae77e3ee4b | |
| parent | ff55e6b4b031a592e51c0c628cc0d0742c16922b (diff) | |
| download | dhtsearch-25ec6208dd2617989f11d093092d47a00d6de25d.tar.gz dhtsearch-25ec6208dd2617989f11d093092d47a00d6de25d.tar.bz2 | |
Configure main executable flags
| -rw-r--r-- | cmd/main.go | 147 |
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) |
