package daemon import ( "context" "fmt" "os" "strconv" "strings" "time" ) func envOrDefault(key, fallback string) string { value := strings.TrimSpace(os.Getenv(key)) if value == "" { return fallback } return value } func durationFromEnv(key string, fallback time.Duration) (time.Duration, error) { value := strings.TrimSpace(os.Getenv(key)) if value == "" { return fallback, nil } d, err := time.ParseDuration(value) if err != nil { return 0, fmt.Errorf("%s: invalid duration %q: %w", key, value, err) } return d, nil } func intFromEnv(key string, fallback int) (int, error) { value := strings.TrimSpace(os.Getenv(key)) if value == "" { return fallback, nil } n, err := strconv.Atoi(value) if err != nil { return 0, fmt.Errorf("%s: invalid integer %q: %w", key, value, err) } return n, nil } func sleepWithContext(ctx context.Context, d time.Duration) error { timer := time.NewTimer(d) defer timer.Stop() select { case <-ctx.Done(): return ctx.Err() case <-timer.C: return nil } }