refactor: harden diagnostics and consolidate runtime code

This commit is contained in:
Mikhail Chusavitin
2026-09-01 13:01:28 +03:00
parent ac4bc0b2b7
commit 0a6ca8ba0f
49 changed files with 1441 additions and 837 deletions
+17 -5
View File
@@ -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)
}