in cmd/lb_list.go [55:99]
func (o lbListOperation) find() (elbv2.LoadBalancers, error) {
var wg sync.WaitGroup
o.output.Debug("Describing Load Balancers [API=elbv2 Action=DescribeLoadBalancers]")
loadBalancers, err := o.elbv2.DescribeLoadBalancers()
if err != nil {
return elbv2.LoadBalancers{}, err
}
errs := make(chan error)
done := make(chan bool)
limiter := rate.NewLimiter(describeRequestLimitRate, 1)
for i := 0; i < len(loadBalancers); i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
if err := limiter.Wait(context.Background()); err == nil {
o.output.Debug("Describing Listeners [API=elbv2 Action=DescribeListeners LoadBalancerArn=%s]", loadBalancers[index].ARN)
listeners, err := o.elbv2.DescribeListeners(loadBalancers[index].ARN)
if err != nil {
errs <- err
}
loadBalancers[index].Listeners = listeners
}
}(i)
}
go func() {
wg.Wait()
done <- true
}()
select {
case err := <-errs:
return elbv2.LoadBalancers{}, err
case <-done:
return loadBalancers, nil
}
}