1 // Downloads torrents from the command-line.
9 "github.com/anacrolix/bargle"
10 "github.com/anacrolix/envpprof"
11 xprometheus "github.com/anacrolix/missinggo/v2/prometheus"
12 "github.com/anacrolix/torrent/version"
13 "github.com/prometheus/client_golang/prometheus"
14 "github.com/prometheus/client_golang/prometheus/promhttp"
18 prometheus.MustRegister(xprometheus.NewExpvarCollector())
19 http.Handle("/metrics", promhttp.Handler())
23 defer stdLog.SetFlags(stdLog.Flags() | stdLog.Lshortfile)
25 main.Defer(envpprof.Stop)
27 debugFlag := bargle.NewFlag(&debug)
28 debugFlag.AddLong("debug")
29 main.Options = append(main.Options, debugFlag.Make())
30 main.Positionals = append(main.Positionals,
31 bargle.Subcommand{Name: "metainfo", Command: metainfoCmd()},
32 //bargle.Subcommand{Name: "announce", Command: func() bargle.Command {
33 // var cmd AnnounceCmd
34 // err := p.NewParser().AddParams(
35 // args.Pos("tracker", &cmd.Tracker),
36 // args.Pos("infohash", &cmd.InfoHash)).Parse()
40 // return announceErr(cmd)
42 bargle.Subcommand{Name: "scrape", Command: func() bargle.Command {
43 var scrapeCfg scrapeCfg
44 cmd := bargle.FromStruct(&scrapeCfg)
45 cmd.Desc = "fetch swarm metrics for info-hashes from tracker"
46 cmd.DefaultAction = func() error {
47 return scrape(scrapeCfg)
51 bargle.Subcommand{Name: "download", Command: func() bargle.Command {
53 cmd := bargle.FromStruct(&dlc)
54 cmd.DefaultAction = func() error {
55 return downloadErr(downloadFlags{
62 //bargle.Subcommand{Name:
63 // "bencode", Command: func() bargle.Command {
64 // var print func(interface{}) error
66 // args.Subcommand("json", func(ctx args.SubCmdCtx) (err error) {
68 // je := json.NewEncoder(os.Stdout)
69 // je.SetIndent("", " ")
73 // args.Subcommand("spew", func(ctx args.SubCmdCtx) (err error) {
75 // config := spew.NewDefaultConfig()
76 // config.DisableCapacities = true
77 // config.Indent = " "
78 // print = func(v interface{}) error {
85 // return errors.New("an output type is required")
87 // d := bencode.NewDecoder(os.Stdin)
88 // p.Defer(func() error {
89 // for i := 0; ; i++ {
91 // err := d.Decode(&v)
96 // return fmt.Errorf("decoding message index %d: %w", i, err)
104 // Desc: "reads bencoding from stdin into Go native types and spews the result",
106 bargle.Subcommand{Name: "version", Command: bargle.Command{
107 DefaultAction: func() error {
108 fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent)
109 fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion)
110 fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix)
113 Desc: "prints various protocol default version strings",
115 bargle.Subcommand{Name: "serve", Command: serve()},
116 bargle.Subcommand{Name: "create", Command: create()},