in internal/kubelib/logs.go [243:277]
func FollowLogs(
ctx context.Context,
client kubernetes.Interface,
params *FollowLogsParams,
) error {
if err := params.defaults(); err != nil {
return err
}
pr, pw := io.Pipe()
follower := &logsFollower{
client: client,
namespace: params.Namespace,
selector: params.Selector,
container: params.Container,
maxConcurrency: params.MaxConcurrency,
addPrefix: params.AddPrefix,
out: pw,
wg: new(sync.WaitGroup),
podLogsChan: make(chan podLog),
handledTargets: map[k8scorev1.ObjectReference]struct{}{},
handledTargetsMu: new(sync.Mutex),
}
go func() {
follower.Start(ctx)
follower.Wait()
_ = pw.Close()
}()
_, err := io.Copy(params.Output, pr)
return err
}