diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-08 11:27:26 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-08 11:27:26 +0200 |
| commit | cc3b3cdc764edc5e5261f920384a098ea6968b77 (patch) | |
| tree | 647a1ce1ba3691d9fb418c1c9d790261c64e1316 /internal/tui | |
| parent | f903279e8a872cd7c417f2f57bf306bfb3f3cb87 (diff) | |
eventstream: surface close errors during CSV export
Diffstat (limited to 'internal/tui')
| -rw-r--r-- | internal/tui/eventstream/export.go | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/internal/tui/eventstream/export.go b/internal/tui/eventstream/export.go index 679fddb..3924935 100644 --- a/internal/tui/eventstream/export.go +++ b/internal/tui/eventstream/export.go @@ -40,14 +40,26 @@ func (m *Model) exportFilteredToCSV(filename string) (string, error) { if err != nil { return "", err } - defer f.Close() + closed := false + closeFile := func() error { + if closed { + return nil + } + closed = true + return f.Close() + } + fail := func(baseErr error) (string, error) { + if closeErr := closeFile(); closeErr != nil { + return "", errors.Join(baseErr, closeErr) + } + return "", baseErr + } w := csv.NewWriter(f) - defer w.Flush() header := []string{"seq", "time_ns", "gap_ns", "latency_ns", "comm", "pid", "tid", "syscall", "fd", "ret", "bytes", "file", "error"} if err := w.Write(header); err != nil { - return "", err + return fail(err) } for i := range m.filtered { ev := m.filtered[i] @@ -67,10 +79,14 @@ func (m *Model) exportFilteredToCSV(filename string) (string, error) { fmt.Sprintf("%t", ev.IsError), } if err := w.Write(record); err != nil { - return "", err + return fail(err) } } + w.Flush() if err := w.Error(); err != nil { + return fail(err) + } + if err := closeFile(); err != nil { return "", err } absPath, err := filepath.Abs(path) |
