Add structured logging and better error handling
This commit is contained in:
1 parent
db4e3c9611
commit
68c7dd76f2
31 files changed
+640
-109
No files matched your search
@@ -0,0 +1,42 @@
|
||||
package jobs
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
const shortIDLength = 8
|
||||
|
||||
func (job *Job) logger() *slog.Logger {
|
||||
return slog.With("download", job.id[:min(len(job.id), shortIDLength)])
|
||||
}
|
||||
|
||||
func (job *Job) isDownloaded() bool {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
return job.downloaded
|
||||
}
|
||||
|
||||
func (manager *Manager) runInBackground(job *Job, task string, work func()) {
|
||||
go func() {
|
||||
defer job.workers.Done()
|
||||
defer func() {
|
||||
recovered := recover()
|
||||
if recovered == nil {
|
||||
return
|
||||
}
|
||||
job.logger().Error("background task crashed",
|
||||
"task", task,
|
||||
"panic", recovered,
|
||||
"stack", string(debug.Stack()),
|
||||
)
|
||||
status := StatusFailed
|
||||
if job.isDownloaded() {
|
||||
status = StatusReady
|
||||
}
|
||||
job.setStatus(status, "Internal error during "+task+". The server log has the details.")
|
||||
job.saveRecord()
|
||||
}()
|
||||
work()
|
||||
}()
|
||||
}
|
||||
Reference in new issue
Block a user