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  }