|
|
|
|
@ -125,20 +125,38 @@ func printReport(dm *tailcfg.DERPMap, report *netcheck.Report) error { |
|
|
|
|
if len(report.RegionLatency) == 0 { |
|
|
|
|
fmt.Printf("\t* Nearest DERP: unknown (no response to latency probes)\n") |
|
|
|
|
} else { |
|
|
|
|
fmt.Printf("\t* Nearest DERP: %v (%v)\n", report.PreferredDERP, dm.Regions[report.PreferredDERP].RegionCode) |
|
|
|
|
fmt.Printf("\t* Nearest DERP: %v\n", dm.Regions[report.PreferredDERP].RegionName) |
|
|
|
|
fmt.Printf("\t* DERP latency:\n") |
|
|
|
|
var rids []int |
|
|
|
|
for rid := range dm.Regions { |
|
|
|
|
rids = append(rids, rid) |
|
|
|
|
} |
|
|
|
|
sort.Ints(rids) |
|
|
|
|
sort.Slice(rids, func(i, j int) bool { |
|
|
|
|
l1, ok1 := report.RegionLatency[rids[i]] |
|
|
|
|
l2, ok2 := report.RegionLatency[rids[j]] |
|
|
|
|
if ok1 != ok2 { |
|
|
|
|
if !ok1 { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
if !ok1 { |
|
|
|
|
return rids[i] < rids[j] |
|
|
|
|
} |
|
|
|
|
return l1 < l2 |
|
|
|
|
}) |
|
|
|
|
for _, rid := range rids { |
|
|
|
|
d, ok := report.RegionLatency[rid] |
|
|
|
|
var latency string |
|
|
|
|
if ok { |
|
|
|
|
latency = d.Round(time.Millisecond / 10).String() |
|
|
|
|
} |
|
|
|
|
fmt.Printf("\t\t- %v, %3s = %s\n", rid, dm.Regions[rid].RegionCode, latency) |
|
|
|
|
r := dm.Regions[rid] |
|
|
|
|
var derpNum string |
|
|
|
|
if netcheckArgs.verbose { |
|
|
|
|
derpNum = fmt.Sprintf("derp%d, ", rid) |
|
|
|
|
} |
|
|
|
|
fmt.Printf("\t\t- %3s: %-7s (%s%s)\n", r.RegionCode, latency, derpNum, r.RegionName) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
|