diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-13 23:03:14 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-13 23:03:14 +0200 |
| commit | 39fcaa7a69947ee45d445e3aab7b49ce868b9d9c (patch) | |
| tree | 51d821e33f5a7bc55d40c6cdd04083a7b3d48fe7 | |
| parent | ea22afd3e7336492433412d1ac771f4a1145b05f (diff) | |
Fix hotkeys 1/2/3 and per-core display
- Collector: always send all CPU lines so key 1 can toggle per-core view
- Display: use float division in drawCPUBar to avoid divide-by-zero panic
- Display: count actual CPU bars for bar width so all cores fit on screen
- Display: use local showMem/showNet for layout, add stdout feedback for 1/2/3
Co-authored-by: Cursor <cursoragent@cursor.com>
| -rw-r--r-- | internal/collector/collector.go | 4 | ||||
| -rw-r--r-- | internal/display/display.go | 45 |
2 files changed, 29 insertions, 20 deletions
diff --git a/internal/collector/collector.go b/internal/collector/collector.go index bdd5ada..42ab689 100644 --- a/internal/collector/collector.go +++ b/internal/collector/collector.go @@ -64,10 +64,8 @@ func Run(ctx context.Context, host string, cfg *config.Config, store StatsStore, } mode := "" + // Always collect all CPU lines (cpu, cpu0, cpu1, ...) so display can toggle per-core view with key 1 cpustring := "cpu" - if !cfg.ShowCores { - cpustring = "cpu " - } for scanner.Scan() { select { case <-ctx.Done(): diff --git a/internal/display/display.go b/internal/display/display.go index 7627c63..fede729 100644 --- a/internal/display/display.go +++ b/internal/display/display.go @@ -87,10 +87,15 @@ func Run(ctx context.Context, cfg *config.Config, src stats.Source) error { case sdl.K_1: showCores = !showCores redrawBg = true + fmt.Println("==> Toggled show cores:", showCores) case sdl.K_2: showMem = !showMem + redrawBg = true + fmt.Println("==> Toggled show mem:", showMem) case sdl.K_3: showNet = !showNet + redrawBg = true + fmt.Println("==> Toggled show net:", showNet) case sdl.K_e: extended = !extended redrawBg = true @@ -141,18 +146,24 @@ func Run(ctx context.Context, cfg *config.Config, src stats.Source) error { } snap := src.Snapshot() - numStats := len(snap) - if cfg.ShowMem { - numStats += len(snap) + // Count total CPU bars we will draw (so width is shared across all bars) + numBars := 0 + for _, host := range sortedHosts(snap) { + if h := snap[host]; h != nil { + numBars += len(sortedCPUNames(h.CPU, showCores)) + } + } + if showMem { + numBars += len(snap) } - if cfg.ShowNet { - numStats += len(snap) + if showNet { + numBars += len(snap) } - if numStats == 0 { - numStats = 1 + if numBars == 0 { + numBars = 1 } - barWidth := (winW / int32(numStats)) - 1 + barWidth := (winW / int32(numBars)) - 1 if barWidth < 1 { barWidth = 1 } @@ -229,15 +240,15 @@ func drawCPUBar(renderer *sdl.Renderer, cur, prev collector.CPULine, barW int32, if scale <= 0 { return } - userPct := int((cur.User - prev.User) / int64(scale)) - nicePct := int((cur.Nice - prev.Nice) / int64(scale)) - sysPct := int((cur.System - prev.System) / int64(scale)) - idlePct := int((cur.Idle - prev.Idle) / int64(scale)) - iowaitPct := int((cur.Iowait - prev.Iowait) / int64(scale)) - irqPct := int((cur.IRQ - prev.IRQ) / int64(scale)) - softirqPct := int((cur.SoftIRQ - prev.SoftIRQ) / int64(scale)) - guestPct := int((cur.Guest - prev.Guest) / int64(scale)) - stealPct := int((cur.Steal - prev.Steal) / int64(scale)) + userPct := int(float64(cur.User-prev.User) / scale) + nicePct := int(float64(cur.Nice-prev.Nice) / scale) + sysPct := int(float64(cur.System-prev.System) / scale) + idlePct := int(float64(cur.Idle-prev.Idle) / scale) + iowaitPct := int(float64(cur.Iowait-prev.Iowait) / scale) + irqPct := int(float64(cur.IRQ-prev.IRQ) / scale) + softirqPct := int(float64(cur.SoftIRQ-prev.SoftIRQ) / scale) + guestPct := int(float64(cur.Guest-prev.Guest) / scale) + stealPct := int(float64(cur.Steal-prev.Steal) / scale) norm := func(v int) int { if v < 0 { |
