refactor: harden diagnostics and consolidate runtime code
This commit is contained in:
@@ -3,6 +3,7 @@ package webui
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -274,13 +275,17 @@ func (q *taskQueue) persistLocked() {
|
||||
}
|
||||
data, err := json.MarshalIndent(state, "", " ")
|
||||
if err != nil {
|
||||
slog.Error("task queue: marshal persistent state", "path", q.statePath, "error", err)
|
||||
return
|
||||
}
|
||||
tmp := q.statePath + ".tmp"
|
||||
if err := os.WriteFile(tmp, data, 0644); err != nil {
|
||||
slog.Error("task queue: write persistent state", "path", tmp, "error", err)
|
||||
return
|
||||
}
|
||||
_ = os.Rename(tmp, q.statePath)
|
||||
if err := os.Rename(tmp, q.statePath); err != nil {
|
||||
slog.Error("task queue: publish persistent state", "source", tmp, "path", q.statePath, "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func taskElapsedSec(t *Task, now time.Time) int {
|
||||
@@ -388,7 +393,9 @@ func (q *taskQueue) ensureTaskArtifactPathsLocked(t *Task) {
|
||||
t.ArtifactsDir = taskArtifactsDir(q.logsDir, t, t.Status)
|
||||
}
|
||||
if t.ArtifactsDir != "" {
|
||||
_ = os.MkdirAll(t.ArtifactsDir, 0755)
|
||||
if err := os.MkdirAll(t.ArtifactsDir, 0755); err != nil {
|
||||
slog.Error("task queue: create artifacts directory", "path", t.ArtifactsDir, "task_id", t.ID, "error", err)
|
||||
}
|
||||
}
|
||||
ensureTaskReportPaths(t)
|
||||
}
|
||||
@@ -403,10 +410,15 @@ func (q *taskQueue) finalizeTaskArtifactPathsLocked(t *Task) {
|
||||
return
|
||||
}
|
||||
if t.ArtifactsDir != "" && t.ArtifactsDir != dstDir {
|
||||
if _, err := os.Stat(dstDir); err != nil {
|
||||
_ = os.Rename(t.ArtifactsDir, dstDir)
|
||||
if _, err := os.Stat(dstDir); err == nil {
|
||||
slog.Error("task queue: destination artifacts directory already exists", "source", t.ArtifactsDir, "destination", dstDir, "task_id", t.ID)
|
||||
} else if !os.IsNotExist(err) {
|
||||
slog.Error("task queue: inspect destination artifacts directory", "destination", dstDir, "task_id", t.ID, "error", err)
|
||||
} else if err := os.Rename(t.ArtifactsDir, dstDir); err != nil {
|
||||
slog.Error("task queue: move artifacts directory", "source", t.ArtifactsDir, "destination", dstDir, "task_id", t.ID, "error", err)
|
||||
} else {
|
||||
t.ArtifactsDir = dstDir
|
||||
}
|
||||
t.ArtifactsDir = dstDir
|
||||
}
|
||||
ensureTaskReportPaths(t)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user