Files
popertotsandSisyphus f78489ae00 feat: add logutil and jobs internal packages
Add centralized jobs scheduler and logutil package with ANSI colors and duration formatting.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-07 00:09:34 +01:00

71 lines
1.6 KiB
Go

// Package logutil provides ANSI-coloured logging helpers shared between the
// job scheduler and the HTTP request logger. Both use the same colour scheme
// and duration formatting so log output is consistent across components.
package logutil
import (
"fmt"
"os"
"time"
)
// noColor controls whether ANSI escape codes are emitted.
// Set via the standard NO_COLOR environment variable (https://no-color.org).
var noColor bool
func init() {
_, noColor = os.LookupEnv("NO_COLOR")
}
// color returns the escape sequence when NO_COLOR is unset, empty otherwise.
func color(seq string) string {
if noColor {
return ""
}
return seq
}
// Reset, Bold, Dim — ANSI escape codes for log formatting.
// They are empty strings when NO_COLOR is set.
var (
Reset = color("\033[0m")
Bold = color("\033[1m")
Dim = color("\033[2m")
Cyan = color("\033[36m")
Green = color("\033[32m")
Red = color("\033[31m")
Yellow = color("\033[33m")
Magenta = color("\033[35m")
BoldGreen = color("\033[32;1m")
BoldYellow = color("\033[33;1m")
BoldRed = color("\033[31;1m")
BoldBlue = color("\033[34;1m")
BoldMagenta = color("\033[35;1m")
)
var (
DebugLvl = Cyan + "[DEBUG]" + Reset
WarnLvl = Yellow + "[WARN] " + Reset
ErrorLvl = Red + "[ERROR]" + Reset
)
func ColoredDuration(d time.Duration) string {
switch {
case d < 500*time.Millisecond:
return Green + d.String() + Reset
case d < 5*time.Second:
return Yellow + d.String() + Reset
default:
return Red + d.String() + Reset
}
}
func ColoredRows(n int) string {
text := fmt.Sprintf("%d row", n)
if n != 1 {
text += "s"
}
return BoldBlue + text + Reset
}