) error {
testPeers := resolveTestPeers(flags.TestPeer)
for _, arg := range flags.Torrent {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
t, err := func() (*torrent.Torrent, error) {
if strings.HasPrefix(arg, "magnet:") {
t, err := client.AddMagnet(arg)
} else if strings.HasPrefix(arg, "http://") || strings.HasPrefix(arg, "https://") {
response, err := http.Get(arg)
if err != nil {
- return nil, fmt.Errorf("Error downloading torrent file: %s", err)
+ return nil, fmt.Errorf("error downloading torrent file: %w", err)
}
metaInfo, err := metainfo.Load(response.Body)
case <-t.GotInfo():
}
if flags.SaveMetainfos {
- path := fmt.Sprintf("%v.torrent", t.InfoHash().HexString())
+ path := fmt.Sprintf("%s.torrent", t.InfoHash().HexString())
err := writeMetainfoToFile(t.Metainfo(), path)
if err == nil {
log.Printf("wrote %q", path)
return flags.Stats
}
-func downloadErr(flags downloadFlags) error {
+func downloadErr(ctx context.Context, flags downloadFlags) error {
clientConfig := torrent.NewDefaultClientConfig()
clientConfig.DisableWebseeds = flags.DisableWebseeds
clientConfig.DisableTCP = !flags.TcpPeers
clientConfig.MaxUnverifiedBytes = flags.MaxUnverifiedBytes.Int64()
}
- ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
+ ctx, cancel := signal.NotifyContext(ctx, os.Interrupt, syscall.SIGTERM)
defer cancel()
client, err := torrent.NewClient(clientConfig)
started := time.Now()
err := tp.Shutdown(ctx)
elapsed := time.Since(started)
- log.Levelf(log.Error, "shutting down tracer provider (took %v): %v", elapsed, err)
+ logger := log.Default.Slogger()
+ logger.Debug("shutting down tracer provider", "took", elapsed)
+ if err != nil && ctx.Err() == nil {
+ log.Default.Slogger().Error("error shutting down tracer provider", "err", err)
+ }
}
func main() {
return fmt.Errorf("creating tracing exporter: %w", err)
}
tracerProvider := trace.NewTracerProvider(trace.WithBatcher(tracingExporter))
- defer shutdownTracerProvider(ctx, tracerProvider)
otel.SetTracerProvider(tracerProvider)
main := bargle.Main{}
var dlc DownloadCmd
cmd := bargle.FromStruct(&dlc)
cmd.DefaultAction = func() error {
- return downloadErr(downloadFlags{
+ return downloadErr(ctx, downloadFlags{
Debug: debug,
DownloadCmd: dlc,
})