diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-18 09:19:03 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-18 09:19:03 +0200 |
| commit | d845cf3208c3bbdb7e3dd3041d1ae491b88d4d21 (patch) | |
| tree | 5fa93b7787a1f1c9598aecfc772ede6dbac17f8d /internal/display/tooltip.go | |
| parent | 88f4e239a7521112a4db8c7842e3a05db4446cd4 (diff) | |
feat: add load average bar visualization (4/l hotkey)0.12.0
Adds a new teal bar type showing /proc/loadavg data per host.
The 1-min average fills from the top downward; yellow and white
1px reference lines mark the 5-min and 15-min averages. A global
loadPeak tracker (floor 2.0, slow per-frame decay) keeps the scale
meaningful across hosts and after spikes. Toggle with 4 or l;
persisted to ~/.loadbarsrc as showload=1.
Bump version to 0.12.0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/display/tooltip.go')
| -rw-r--r-- | internal/display/tooltip.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/display/tooltip.go b/internal/display/tooltip.go index 42075e0..e5cf951 100644 --- a/internal/display/tooltip.go +++ b/internal/display/tooltip.go @@ -2,6 +2,8 @@ package display import ( "fmt" + "strconv" + "strings" "time" "codeberg.org/snonux/loadbars/internal/config" @@ -34,6 +36,8 @@ func tooltipLines(bar *barDescriptor, snap map[string]*stats.HostStats, cfg *con return memTooltipLines(bar, h, state) case barNet: return netTooltipLines(bar, cfg, state) + case barLoad: + return loadTooltipLines(bar, h, state) } return nil } @@ -96,6 +100,26 @@ func netTooltipLines(bar *barDescriptor, cfg *config.Config, state *runState) [] return lines } +// loadTooltipLines returns tooltip text for a load-average bar showing +// the smoothed 1/5/15-min averages and the current global peak scale. +func loadTooltipLines(bar *barDescriptor, h *stats.HostStats, state *runState) []string { + lines := []string{fmt.Sprintf("%s [load]", bar.host)} + l1, err1 := strconv.ParseFloat(strings.TrimSpace(h.LoadAvg1), 64) + l5, err5 := strconv.ParseFloat(strings.TrimSpace(h.LoadAvg5), 64) + l15, err15 := strconv.ParseFloat(strings.TrimSpace(h.LoadAvg15), 64) + if err1 != nil || err5 != nil || err15 != nil { + lines = append(lines, "No data yet") + return lines + } + lines = append(lines, + fmt.Sprintf("1min: %.2f", l1), + fmt.Sprintf("5min: %.2f", l5), + fmt.Sprintf("15min: %.2f", l15), + fmt.Sprintf("Peak: %.2f", state.loadPeak), + ) + return lines +} + // formatKB formats a value in KB as a human-readable string (KB, MB, or GB). func formatKB(kb int64) string { switch { |
