mirror of
https://github.com/mulgadc/spinifex.git
synced 2026-10-15 17:11:30 +00:00
ea4e7e3fb0
slog renders a bare time.Duration as an int64 nanosecond count and names the unit nowhere, so every duration field in the fleet read like "elapsed":135000000000. The repo idiom of .Round(time.Second) changed the value without changing the shape and truncated every sub-second measurement to zero. otelsetup.Millis converts a duration for logging under a snake_case key ending in _ms, and TestSlogDurationConvention type-checks ./spinifex/... and ./cmd/... to fail the build when a raw Duration reaches an slog call or a Millis value is logged under a key without the suffix. It found 55 sites across 34 files, well past the sites a grep for time.Since shows, because most durations come from a config field or a package constant. A handler-level ReplaceAttr would fix every site at once but can only emit d.String(), which Elasticsearch maps as a keyword and nothing can aggregate over.