From 5968d3c14a478a29fcdf3542b1bdc456d022f930 Mon Sep 17 00:00:00 2001 From: Li Wei Date: Wed, 5 Jul 2023 21:12:55 +0800 Subject: [PATCH] feat: panic log (#137) --- go.mod | 1 + go.sum | 2 ++ pkg/download/downloader.go | 26 ++++++++++++++++++++++++++ pkg/download/model.go | 1 + pkg/rest/server.go | 1 + 5 files changed, 31 insertions(+) diff --git a/go.mod b/go.mod index d7cc841f..3ea67c06 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/virtuald/go-paniclog v0.0.0-20190812204905-43a7fa316459 go.etcd.io/bbolt v1.3.6 golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde ) diff --git a/go.sum b/go.sum index bc108d33..af459687 100644 --- a/go.sum +++ b/go.sum @@ -312,6 +312,8 @@ github.com/tidwall/btree v1.3.1/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYms github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/virtuald/go-paniclog v0.0.0-20190812204905-43a7fa316459 h1:x9pIfbdIjnw+Ylb2vE27Gtqb7BDmfR+nLcJwvbJh98U= +github.com/virtuald/go-paniclog v0.0.0-20190812204905-43a7fa316459/go.mod h1:nFvuG3SWu3VWqobG3cX8nt57wXU0OOFapeCs/8axIuM= github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/pkg/download/downloader.go b/pkg/download/downloader.go index e0a01791..0dc49994 100644 --- a/pkg/download/downloader.go +++ b/pkg/download/downloader.go @@ -7,9 +7,11 @@ import ( "github.com/GopeedLab/gopeed/pkg/base" "github.com/GopeedLab/gopeed/pkg/util" gonanoid "github.com/matoous/go-nanoid/v2" + "github.com/virtuald/go-paniclog" "math" "os" "path" + "path/filepath" "sort" "strings" "sync" @@ -69,6 +71,8 @@ func NewDownloader(cfg *DownloaderConfig) *Downloader { d.fetchBuilders[strings.ToUpper(p)] = f } } + + logPanic(cfg.StorageDir) return d } @@ -634,6 +638,28 @@ func (d *Downloader) doContinue(task *Task) (err error) { return } +// redirect stderr to log file, when panic happened log it +func logPanic(logDir string) { + fp := filepath.Join(logDir, "crash.log") + // if log file not exists, create it + var f *os.File + if _, err := os.Stat(fp); err != nil { + if !os.IsNotExist(err) { + return + } + f, err = os.Create(fp) + if err != nil { + return + } + } else { + f, err = os.OpenFile(fp, os.O_APPEND|os.O_WRONLY, 0644) + if err != nil { + return + } + } + paniclog.RedirectStderr(f) +} + func initTask(task *Task) { task.timer = util.NewTimer(task.Progress.Used) task.lock = &sync.Mutex{} diff --git a/pkg/download/model.go b/pkg/download/model.go index ca44d7cf..582d6075 100644 --- a/pkg/download/model.go +++ b/pkg/download/model.go @@ -73,6 +73,7 @@ type DownloaderConfig struct { RefreshInterval int `json:"refreshInterval"` // RefreshInterval time duration to refresh task progress(ms) Storage Storage + StorageDir string *DownloaderStoreConfig } diff --git a/pkg/rest/server.go b/pkg/rest/server.go index 2e83fa74..e1b92ab8 100644 --- a/pkg/rest/server.go +++ b/pkg/rest/server.go @@ -65,6 +65,7 @@ func BuildServer(startCfg *model.StartConfig) (*http.Server, net.Listener, error } else { downloadCfg.Storage = download.NewMemStorage() } + downloadCfg.StorageDir = startCfg.StorageDir downloadCfg.Init() Downloader = download.NewDownloader(downloadCfg) if err := Downloader.Setup(); err != nil {