github.com/kubeshop/testkube@v1.17.23/cmd/sidecar/main.go (about) 1 package main 2 3 import ( 4 "context" 5 6 "github.com/kubeshop/testkube/pkg/event/bus" 7 "github.com/kubeshop/testkube/pkg/k8sclient" 8 "github.com/kubeshop/testkube/pkg/log" 9 "github.com/kubeshop/testkube/pkg/logs/client" 10 "github.com/kubeshop/testkube/pkg/logs/config" 11 "github.com/kubeshop/testkube/pkg/logs/sidecar" 12 "github.com/kubeshop/testkube/pkg/ui" 13 14 "github.com/nats-io/nats.go/jetstream" 15 ) 16 17 func main() { 18 log := log.DefaultLogger.With("service", "logs-sidecar") 19 20 ctx, cancel := context.WithCancel(context.Background()) 21 defer cancel() 22 23 cfg := Must(config.Get()) 24 25 // Event bus 26 nc := Must(bus.NewNATSConnection(bus.ConnectionConfig{ 27 NatsURI: cfg.NatsURI, 28 NatsSecure: cfg.NatsSecure, 29 NatsSkipVerify: cfg.NatsSkipVerify, 30 NatsCertFile: cfg.NatsCertFile, 31 NatsKeyFile: cfg.NatsKeyFile, 32 NatsCAFile: cfg.NatsCAFile, 33 NatsConnectTimeout: cfg.NatsConnectTimeout, 34 })) 35 defer func() { 36 log.Infof("closing nats connection") 37 nc.Close() 38 }() 39 40 js := Must(jetstream.New(nc)) 41 42 clientset, err := k8sclient.ConnectToK8s() 43 if err != nil { 44 ui.ExitOnError("Creating k8s clientset", err) 45 return 46 } 47 48 podsClient := clientset.CoreV1().Pods(cfg.Namespace) 49 50 logsStream, err := client.NewNatsLogStream(nc) 51 if err != nil { 52 ui.ExitOnError("error creating logs stream", err) 53 return 54 } 55 56 // run Sidecar Logs Proxy - it will proxy logs from pod to nats 57 proxy := sidecar.NewProxy(clientset, podsClient, logsStream, js, log, cfg.Namespace, cfg.ExecutionId, cfg.Source) 58 if err := proxy.Run(ctx); err != nil { 59 log.Errorw("error proxying logs", "error", err) 60 } 61 } 62 63 // Must helper function to panic on error 64 func Must[T any](val T, err error) T { 65 if err != nil { 66 panic(err) 67 } 68 return val 69 }