repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

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
M pkg/apps/pico/cli.go
+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()
M pkg/tui/logs.go
+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