- commit
- 26cf7eb
- parent
- 56b4fc7
- author
- Antonio Mika
- date
- 2025-04-16 23:15:49 -0400 EDT
Update log viewing logic
2 files changed,
+37,
-2
+28,
-1
1@@ -61,6 +61,26 @@ func (c *Cmd) logs(ctx context.Context) error {
2 return err
3 }
4
5+ logChan := make(chan string)
6+ defer close(logChan)
7+
8+ go func() {
9+ for {
10+ select {
11+ case <-ctx.Done():
12+ return
13+ case log, ok := <-logChan:
14+ if log == "" {
15+ continue
16+ }
17+ if !ok {
18+ return
19+ }
20+ fmt.Fprintln(c.SshSession, log)
21+ }
22+ }
23+ }()
24+
25 scanner := bufio.NewScanner(stdoutPipe)
26 scanner.Buffer(make([]byte, 32*1024), 32*1024)
27 for scanner.Scan() {
28@@ -76,7 +96,14 @@ func (c *Cmd) logs(ctx context.Context) error {
29 user := utils.AnyToStr(parsedData, "user")
30 userId := utils.AnyToStr(parsedData, "userId")
31 if user == c.User.Name || userId == c.User.ID {
32- fmt.Fprintln(c.SshSession, line)
33+ select {
34+ case logChan <- line:
35+ case <-ctx.Done():
36+ return nil
37+ default:
38+ c.Log.Error("logChan is full, dropping log", "log", line)
39+ continue
40+ }
41 }
42 }
43 return scanner.Err()
+9,
-1
1@@ -124,10 +124,13 @@ func (m *LogsPage) getWidget(i uint, cursor uint) vxfw.Widget {
2
3 func (m *LogsPage) connectToLogs() error {
4 ctx, cancel := context.WithCancel(m.shared.Session.Context())
5+ defer cancel()
6+
7 m.ctx = ctx
8 m.done = cancel
9+
10 conn := shared.NewPicoPipeClient()
11- drain, err := pipeLogger.ReadLogs(m.ctx, m.shared.Logger, conn)
12+ drain, err := pipeLogger.ReadLogs(ctx, m.shared.Logger, conn)
13 if err != nil {
14 return err
15 }
16@@ -151,6 +154,11 @@ func (m *LogsPage) connectToLogs() error {
17 }
18 }
19
20+ if err := scanner.Err(); err != nil {
21+ m.shared.Logger.Error("scanner error", "err", err)
22+ return err
23+ }
24+
25 return nil
26 }
27