diff --git a/internal/cli/doctor.go b/internal/cli/doctor.go index 48563bc1e..12c7abf18 100644 --- a/internal/cli/doctor.go +++ b/internal/cli/doctor.go @@ -10,6 +10,7 @@ import ( "slices" "strconv" "strings" + "sync" "text/template" "time" @@ -220,18 +221,32 @@ func (d *Doctor) checkNetwork(ntw mtglib.Network) bool { dcs := slices.Collect(maps.Keys(essentials.TelegramCoreAddresses)) slices.Sort(dcs) + errs := make([]error, len(dcs)) + + var wg sync.WaitGroup + for i, dc := range dcs { + wg.Go(func() { + defer func() { + if r := recover(); r != nil { + errs[i] = fmt.Errorf("panic: %v", r) + } + }() + errs[i] = d.checkNetworkAddresses(ntw, essentials.TelegramCoreAddresses[dc]) + }) + } + wg.Wait() + ok := true - for _, dc := range dcs { - err := d.checkNetworkAddresses(ntw, essentials.TelegramCoreAddresses[dc]) - if err == nil { + for i, dc := range dcs { + if errs[i] == nil { tplODCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck "dc": dc, }) } else { tplEDCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck "dc": dc, - "error": err, + "error": errs[i], }) ok = false }