summaryrefslogtreecommitdiff
path: root/internal/tui
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 11:27:26 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 11:27:26 +0200
commitcc3b3cdc764edc5e5261f920384a098ea6968b77 (patch)
tree647a1ce1ba3691d9fb418c1c9d790261c64e1316 /internal/tui
parentf903279e8a872cd7c417f2f57bf306bfb3f3cb87 (diff)
eventstream: surface close errors during CSV export
Diffstat (limited to 'internal/tui')
-rw-r--r--internal/tui/eventstream/export.go24
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)