summaryrefslogtreecommitdiff
path: root/internal/display/tooltip.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-18 09:19:03 +0200
committerPaul Buetow <paul@buetow.org>2026-02-18 09:19:03 +0200
commitd845cf3208c3bbdb7e3dd3041d1ae491b88d4d21 (patch)
tree5fa93b7787a1f1c9598aecfc772ede6dbac17f8d /internal/display/tooltip.go
parent88f4e239a7521112a4db8c7842e3a05db4446cd4 (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.go24
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 {