termtap/internal/app/session.go
Hayden Hargreaves 24b00146bf feat: added lots of data to the models and collection process
Next step might actually be the TUI! Or maybe the raw proxy, it would be
nice to be able to just run the proxy.
2026-04-14 14:39:27 -07:00

82 lines
1.6 KiB
Go

package app
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"termtap.dev/internal/model"
)
func StartSession(cmd model.Command, addr string) error {
// Event type?
msgs := make(chan model.Message, 128)
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
defer signal.Stop(sigCh)
// Start process and proxy
go StartProxy(addr, msgs)
go StartProcess(cmd, addr, msgs, sigCh)
var events []model.Message
var requests []model.Request
for {
select {
case _ = <-sigCh:
fmt.Println("\n\nEVENTS")
printEvents(events)
fmt.Println("\n\nREQUESTS")
printRequests(requests)
return nil
case msg := <-msgs:
{
events = append(events, msg)
switch msg.Type {
case model.MessageTypeFatal:
return fmt.Errorf("%s", msg.Body)
case model.MessageTypeRequestStarted:
log.Printf("[%s] (%s) %s", msg.Type, msg.Request.ID.String(), msg.Body)
requests = append(requests, msg.Request)
case model.MessageTypeRequestFinished, model.MessageTypeRequestFailed:
log.Printf("[%s] (%s) %s", msg.Type, msg.Request.ID.String(), msg.Body)
for i := range requests {
if requests[i].ID == msg.Request.ID {
requests[i] = msg.Request
break
}
}
default:
log.Printf("[%s] %s", msg.Type, msg.Body)
}
}
}
}
}
// DEBUG
func printEvents(events []model.Message) {
for _, event := range events {
fmt.Printf("%+v\n", event)
}
}
func printRequests(reqs []model.Request) {
for _, req := range reqs {
fmt.Printf("%+v\n", req)
for k, v := range req.QueryMap {
fmt.Printf("key: %s, vals: %+v\n", k, v)
}
}
}