diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-05 22:18:08 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-05 22:18:08 +0200 |
| commit | 043bbbb884560a0f91f5e12d0b7851ad60121d5a (patch) | |
| tree | b3345068b594945c777991a03876e2826175c089 /internal/tui/dashboard | |
| parent | 98e46348ca59de2033451b844a4f592f1f9e5433 (diff) | |
task 350: add TabFlame tab infrastructure
Diffstat (limited to 'internal/tui/dashboard')
| -rw-r--r-- | internal/tui/dashboard/model.go | 4 | ||||
| -rw-r--r-- | internal/tui/dashboard/model_test.go | 4 | ||||
| -rw-r--r-- | internal/tui/dashboard/tabs.go | 7 | ||||
| -rw-r--r-- | internal/tui/dashboard/tabs_test.go | 15 |
4 files changed, 21 insertions, 9 deletions
diff --git a/internal/tui/dashboard/model.go b/internal/tui/dashboard/model.go index f097da7..0a9915b 100644 --- a/internal/tui/dashboard/model.go +++ b/internal/tui/dashboard/model.go @@ -166,7 +166,7 @@ func (m Model) handleKey(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) { m.activeTab = TabStream handled = true case key.Matches(msg, m.keys.Seven): - m.activeTab = TabStream + m.activeTab = TabFlame handled = true case key.Matches(msg, m.keys.Refresh): snap := m.snapshot() @@ -378,6 +378,8 @@ func renderActiveTab(tab Tab, snap *statsengine.Snapshot, streamModel *eventstre return renderProcessesWithOffset(snap, width, height, processesOffset, pidFilter) case TabLatency: return renderLatencyGapsTab(snap, width, height) + case TabFlame: + return common.PanelStyle.Render("Flame: waiting for model...") default: return common.PanelStyle.Render("Unknown tab") } diff --git a/internal/tui/dashboard/model_test.go b/internal/tui/dashboard/model_test.go index 642c702..c9a1cb9 100644 --- a/internal/tui/dashboard/model_test.go +++ b/internal/tui/dashboard/model_test.go @@ -48,8 +48,8 @@ func TestKeySwitchingChangesActiveTab(t *testing.T) { next, _ = model.Update(tea.KeyPressMsg{Code: []rune{'7'}[0], Text: string([]rune{'7'})}) model = next.(Model) - if model.activeTab != TabStream { - t.Fatalf("expected stream tab on key 7, got %v", model.activeTab) + if model.activeTab != TabFlame { + t.Fatalf("expected flame tab on key 7, got %v", model.activeTab) } next, _ = model.Update(tea.KeyPressMsg{Code: []rune{'6'}[0], Text: string([]rune{'6'})}) diff --git a/internal/tui/dashboard/tabs.go b/internal/tui/dashboard/tabs.go index 62c7762..731e21f 100644 --- a/internal/tui/dashboard/tabs.go +++ b/internal/tui/dashboard/tabs.go @@ -25,6 +25,8 @@ const ( TabLatency // TabStream is the live event stream tab. TabStream + // TabFlame is the live flamegraph tab. + TabFlame ) var allTabs = []Tab{ @@ -34,6 +36,7 @@ var allTabs = []Tab{ TabProcesses, TabLatency, TabStream, + TabFlame, } func (t Tab) String() string { @@ -50,6 +53,8 @@ func (t Tab) String() string { return "Latency+Gaps" case TabStream: return "Stream" + case TabFlame: + return "Flame" default: return "Unknown" } @@ -192,6 +197,8 @@ func tabLabel(tab Tab, short bool) string { return "Lat" case TabStream: return "Str" + case TabFlame: + return "Flm" default: return "Unk" } diff --git a/internal/tui/dashboard/tabs_test.go b/internal/tui/dashboard/tabs_test.go index 1148103..16f8b76 100644 --- a/internal/tui/dashboard/tabs_test.go +++ b/internal/tui/dashboard/tabs_test.go @@ -11,17 +11,20 @@ func TestTabNavigationWraps(t *testing.T) { if got := nextTab(TabLatency); got != TabStream { t.Fatalf("expected next after latency+gaps to be stream, got %v", got) } - if got := nextTab(TabStream); got != TabOverview { - t.Fatalf("expected wrap to overview from stream, got %v", got) + if got := nextTab(TabStream); got != TabFlame { + t.Fatalf("expected next after stream to be flame, got %v", got) } - if got := prevTab(TabOverview); got != TabStream { - t.Fatalf("expected wrap to stream, got %v", got) + if got := nextTab(TabFlame); got != TabOverview { + t.Fatalf("expected wrap to overview from flame, got %v", got) + } + if got := prevTab(TabOverview); got != TabFlame { + t.Fatalf("expected wrap to flame, got %v", got) } } func TestRenderTabBarContainsLabels(t *testing.T) { out := renderTabBar(TabOverview, 100) - for _, label := range []string{"Overview", "Syscalls", "Files", "Processes", "Latency+Gaps", "Stream"} { + for _, label := range []string{"Overview", "Syscalls", "Files", "Processes", "Latency+Gaps", "Stream", "Flame"} { if !strings.Contains(out, label) { t.Fatalf("expected tab label %q in tab bar", label) } @@ -34,7 +37,7 @@ func TestRenderTabBarSmallWidthUsesSingleLine(t *testing.T) { if len(lines) != 1 { t.Fatalf("expected single-line tab bar at width 70, got %d lines", len(lines)) } - if strings.Contains(out, "6:Strea") { + if strings.Contains(out, "7:Flam") { t.Fatalf("tab label should not be wrapped/split in small width output") } } |
