Compare commits

...

3 Commits

Author SHA1 Message Date
Bastian Doetsch
2b05df2b75 Fix some error logging - Msg() needs to be called for exiting with exit 1 2022-03-19 17:00:48 +01:00
Bastian Doetsch
415cfa8ee7 recover gracefully if no server found 2022-03-12 11:45:41 +01:00
Bastian Doetsch
0bf9fc463a Update README.md 2022-03-12 11:28:58 +01:00
2 changed files with 9 additions and 4 deletions

View File

@@ -17,6 +17,8 @@ Execute `mullvad-best-server`. It outputs the code, e.g. `de05`. You can then co
Usage of dist/mullvad-best-server_darwin_amd64/mullvad-best-server: Usage of dist/mullvad-best-server_darwin_amd64/mullvad-best-server:
-c string -c string
Server country code, e.g. ch for Switzerland (default "ch") Server country code, e.g. ch for Switzerland (default "ch")
-l string
Log level. Allowed values: trace, debug, info, warn, error, fatal, panic (default "info")
-o string -o string
Output format. 'json' outputs server json Output format. 'json' outputs server json
-t string -t string
@@ -28,7 +30,7 @@ The `-c` flag allows to give a country code. Else `ch` will be used.
## Background ## Background
The program uses `https://api.mullvad.net/www/relays/<SERVER_TYPE/` to get the current server list, pings the ones with the right country The program uses `https://api.mullvad.net/www/relays/<SERVER_TYPE>/` to get the current server list, pings the ones with the right country
and outputs the server with the lowest ping. and outputs the server with the lowest ping.
## Integration into a script ## Integration into a script

View File

@@ -29,6 +29,9 @@ func main() {
zerolog.SetGlobalLevel(level) zerolog.SetGlobalLevel(level)
servers := getServers(*typeFlag) servers := getServers(*typeFlag)
bestIndex := selectBestServerIndex(servers, *countryFlag) bestIndex := selectBestServerIndex(servers, *countryFlag)
if bestIndex == -1 {
log.Fatal().Str("country", *countryFlag).Msg("No servers for country found.")
}
best := servers[bestIndex] best := servers[bestIndex]
log.Debug().Interface("server", best).Msg("Best latency server found.") log.Debug().Interface("server", best).Msg("Best latency server found.")
hostname := strings.TrimSuffix(best.Hostname, "-wireguard") hostname := strings.TrimSuffix(best.Hostname, "-wireguard")
@@ -37,7 +40,7 @@ func main() {
} else { } else {
serverJson, err := json.Marshal(best) serverJson, err := json.Marshal(best)
if err != nil { if err != nil {
log.Fatal().Err(err) log.Fatal().Err(err).Msg("Couldn't marshal server information to Json")
} }
fmt.Println(string(serverJson)) fmt.Println(string(serverJson))
} }
@@ -63,7 +66,7 @@ func selectBestServerIndex(servers []server, country string) int {
func getServers(serverType string) []server { func getServers(serverType string) []server {
resp, err := http.Get("https://api.mullvad.net/www/relays/" + serverType + "/") resp, err := http.Get("https://api.mullvad.net/www/relays/" + serverType + "/")
if err != nil { if err != nil {
log.Fatal().Err(err) log.Fatal().Err(err).Msg("Couldn't retrieve servers")
} }
responseBody, err := ioutil.ReadAll(resp.Body) responseBody, err := ioutil.ReadAll(resp.Body)
defer func(Body io.ReadCloser) { defer func(Body io.ReadCloser) {
@@ -78,7 +81,7 @@ func getServers(serverType string) []server {
var servers []server var servers []server
err = json.Unmarshal(responseBody, &servers) err = json.Unmarshal(responseBody, &servers)
if err != nil { if err != nil {
log.Fatal().Err(err) log.Fatal().Err(err).Msg("couldn't unmarshall server json")
} }
return servers return servers
} }