From 46f80c77be5e36869087a403c33bdb98876e829c Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Tue, 14 Nov 2023 09:55:41 -0500 Subject: [PATCH] (techdebt): make table report errors (#21) and other small improvements Signed-off-by: Bryce Palmer --- pkg/charm/models/panels/table.go | 8 ++++++++ pkg/paneler/logs.go | 25 ++++++++----------------- pkg/paneler/table.go | 16 ++++++++-------- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/pkg/charm/models/panels/table.go b/pkg/charm/models/panels/table.go index cdec77e..157cdb6 100644 --- a/pkg/charm/models/panels/table.go +++ b/pkg/charm/models/panels/table.go @@ -17,6 +17,7 @@ type Table struct { mutex *sync.Mutex rows map[types.UID]tbl.Row columns []buoytypes.Column + err error } func NewTable(name string, table tbl.Model, columns []buoytypes.Column) *Table { @@ -42,6 +43,9 @@ func (m *Table) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m *Table) View() string { + if m.err != nil { + return m.err.Error() + } return m.table.View() } @@ -74,3 +78,7 @@ func (m *Table) Columns() []buoytypes.Column { func (m *Table) Name() string { return m.name } + +func (m *Table) SetError(err error) { + m.err = err +} diff --git a/pkg/paneler/logs.go b/pkg/paneler/logs.go index 1ed1a40..bfbb9f7 100644 --- a/pkg/paneler/logs.go +++ b/pkg/paneler/logs.go @@ -6,7 +6,6 @@ import ( "encoding/json" "fmt" "strings" - "sync" "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" @@ -39,7 +38,7 @@ func modelWrapperForLogPanel(kc *kubernetes.Clientset, logsPanel types.Logs) *pa return vpw } -func streamLogs(kc *kubernetes.Clientset, logsPanel types.Logs, logItem *panels.Logs) error { +func streamLogs(kc *kubernetes.Clientset, logsPanel types.Logs, logItem *panels.Logs) { //TODO: expand this beyond just a pod req := kc.CoreV1().Pods(logsPanel.Key.Namespace).GetLogs(logsPanel.Key.Name, &v1.PodLogOptions{ Container: logsPanel.Container, @@ -48,24 +47,16 @@ func streamLogs(kc *kubernetes.Clientset, logsPanel types.Logs, logItem *panels. rc, err := req.Stream(context.Background()) if err != nil { - return fmt.Errorf("fetching logs for %s/%s: %w", logsPanel.Key.Namespace, logsPanel.Key.Name, err) + logItem.AddContent(fmt.Errorf("fetching logs for %s/%s: %w", logsPanel.Key.Namespace, logsPanel.Key.Name, err).Error()) + return } defer rc.Close() - wg := sync.WaitGroup{} - wg.Add(1) - - go func() { - defer wg.Done() - scanner := bufio.NewScanner(rc) - for scanner.Scan() { - logs := wrapLogs(scanner.Bytes()) - logItem.AddContent(logs) - } - }() - - wg.Wait() - return nil + scanner := bufio.NewScanner(rc) + for scanner.Scan() { + logs := wrapLogs(scanner.Bytes()) + logItem.AddContent(logs) + } } func wrapLogs(logs []byte) string { diff --git a/pkg/paneler/table.go b/pkg/paneler/table.go index 42573ab..b1bc4ee 100644 --- a/pkg/paneler/table.go +++ b/pkg/paneler/table.go @@ -97,8 +97,8 @@ func (t *Table) runInformerForTable(tablePanel buoytypes.Table, tw *panels.Table for _, column := range tw.Columns() { val, err := getDotNotationValue(u.Object, column.Path) if err != nil { - //TODO: Log some kind of info here - continue + tw.SetError(err) + break } switch val := val.(type) { case string: @@ -106,8 +106,8 @@ func (t *Table) runInformerForTable(tablePanel buoytypes.Table, tw *panels.Table case map[string]interface{}: data, err := json.Marshal(val) if err != nil { - //TODO: log some kind of info here - continue + tw.SetError(err) + break } row = append(row, string(data)) default: @@ -123,8 +123,8 @@ func (t *Table) runInformerForTable(tablePanel buoytypes.Table, tw *panels.Table for _, column := range tw.Columns() { val, err := getDotNotationValue(u.Object, column.Path) if err != nil { - //TODO: Log some kind of info here - continue + tw.SetError(err) + break } switch val := val.(type) { case string: @@ -132,8 +132,8 @@ func (t *Table) runInformerForTable(tablePanel buoytypes.Table, tw *panels.Table case map[string]interface{}: data, err := json.Marshal(val) if err != nil { - //TODO: log some kind of info here - continue + tw.SetError(err) + break } row = append(row, string(data)) default: