Compare commits
No commits in common. "v20220926.172853" and "main" have entirely different histories.
v20220926.
...
main
30
main.go
30
main.go
@ -21,6 +21,7 @@ func main() {
|
|||||||
var countryFlag = flag.String("c", "ch", "Server country code, e.g. ch for Switzerland")
|
var countryFlag = flag.String("c", "ch", "Server country code, e.g. ch for Switzerland")
|
||||||
var typeFlag = flag.String("t", "wireguard", "Server type, e.g. wireguard")
|
var typeFlag = flag.String("t", "wireguard", "Server type, e.g. wireguard")
|
||||||
var logLevel = flag.String("l", "info", "Log level. Allowed values: trace, debug, info, warn, error, fatal, panic")
|
var logLevel = flag.String("l", "info", "Log level. Allowed values: trace, debug, info, warn, error, fatal, panic")
|
||||||
|
var ownedFlag = flag.String("m", "true", "Server owned by Mullvad")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
level, err := zerolog.ParseLevel(*logLevel)
|
level, err := zerolog.ParseLevel(*logLevel)
|
||||||
@ -29,7 +30,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
zerolog.SetGlobalLevel(level)
|
zerolog.SetGlobalLevel(level)
|
||||||
servers := getServers(*typeFlag)
|
servers := getServers(*typeFlag)
|
||||||
bestIndex := selectBestServerIndex(servers, *countryFlag)
|
bestIndex := selectBestServerIndex(servers, *countryFlag, *ownedFlag)
|
||||||
if bestIndex == -1 {
|
if bestIndex == -1 {
|
||||||
log.Fatal().Str("country", *countryFlag).Msg("No servers for country found.")
|
log.Fatal().Str("country", *countryFlag).Msg("No servers for country found.")
|
||||||
}
|
}
|
||||||
@ -47,10 +48,31 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func selectBestServerIndex(servers []server, country string) int {
|
func getOwned(ownedInput string) bool {
|
||||||
|
if ownedInput == "true" {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func selectBestServerIndex(servers []server, country string, ownedInput string) int {
|
||||||
bestIndex := -1
|
bestIndex := -1
|
||||||
var bestPing time.Duration
|
var bestPing time.Duration
|
||||||
for i, server := range servers {
|
for i, server := range servers {
|
||||||
|
if getOwned(ownedInput) == true {
|
||||||
|
if server.Active && server.CountryCode == country && server.Owned == true {
|
||||||
|
duration, err := serverLatency(server)
|
||||||
|
if err == nil {
|
||||||
|
if bestIndex == -1 || bestPing > duration {
|
||||||
|
bestIndex = i
|
||||||
|
bestPing = duration
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Err(err).Msg("Error determining the server latency via ping.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if server.Active && server.CountryCode == country {
|
if server.Active && server.CountryCode == country {
|
||||||
duration, err := serverLatency(server)
|
duration, err := serverLatency(server)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -63,6 +85,8 @@ func selectBestServerIndex(servers []server, country string) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return bestIndex
|
return bestIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +119,7 @@ func serverLatency(s server) (time.Duration, error) {
|
|||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
pinger.SetPrivileged(true)
|
pinger.SetPrivileged(true)
|
||||||
}
|
}
|
||||||
pinger.Count = 1
|
pinger.Count = 3
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user