Files
greeneclipse 8580c996c3 Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
2026-08-09 22:47:43 +02:00

55 lines
1.4 KiB
Go

package processing
import (
"fmt"
"strconv"
"strings"
)
// Stable job.error message keys. UI translates via i18n (processing.job.error.*).
// Wire format: "key|count=N" so older clients still show a readable string.
const (
JobErrAllFailedKey = "processing.job.error.all_failed"
JobErrPartialFailedKey = "processing.job.error.partial_failed"
)
// IsProcessableJobStatus reports whether ProcessJob may run work for this status.
// Terminal statuses (completed/cancelled/failed) are no-ops — use RetryJob to requeue.
func IsProcessableJobStatus(status string) bool {
switch strings.ToLower(strings.TrimSpace(status)) {
case "pending", "running":
return true
default:
return false
}
}
// FormatJobUserError builds a translatable job.error payload with a count param.
func FormatJobUserError(key string, count int) string {
if count < 0 {
count = 0
}
return fmt.Sprintf("%s|count=%d", key, count)
}
// ParseJobUserError extracts key + count from FormatJobUserError (or returns raw, 0, false).
func ParseJobUserError(raw string) (key string, count int, ok bool) {
raw = strings.TrimSpace(raw)
if raw == "" {
return "", 0, false
}
key, rest, found := strings.Cut(raw, "|count=")
if !found {
return "", 0, false
}
key = strings.TrimSpace(key)
if key == "" {
return "", 0, false
}
n, err := strconv.Atoi(strings.TrimSpace(rest))
if err != nil {
return "", 0, false
}
return key, n, true
}