mirror of
https://github.com/davegallant/vpngate.git
synced 2025-08-05 08:13:41 +00:00
* Add survey library to select server * Add speedtest * Add --random flag to connect * Add list command * Cache server list * Tail the openvpn logs so that it appears in vpngate logs * Add goreleaser action * Add golangci-lint action
53 lines
1011 B
Go
53 lines
1011 B
Go
package network
|
|
|
|
import (
|
|
"github.com/juju/errors"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/showwin/speedtest-go/speedtest"
|
|
)
|
|
|
|
// TestSpeed tests the speed of an active network connection
|
|
func TestSpeed() error {
|
|
user, err := speedtest.FetchUserInfo()
|
|
|
|
if err != nil {
|
|
return errors.Annotate(err, "Unable to fetch user info")
|
|
}
|
|
|
|
serverList, err := speedtest.FetchServerList(user)
|
|
|
|
if err != nil {
|
|
return errors.Annotate(err, "Unable to fetch server list")
|
|
}
|
|
|
|
targets, _ := serverList.FindServer([]int{})
|
|
|
|
if err != nil {
|
|
return errors.Annotate(err, "Unable to find server")
|
|
}
|
|
|
|
for _, s := range targets {
|
|
err := s.PingTest()
|
|
|
|
if err != nil {
|
|
log.Error().Msg("Failed to obtain ping")
|
|
}
|
|
|
|
err = s.DownloadTest(true)
|
|
|
|
if err != nil {
|
|
log.Error().Msg("Failed download test")
|
|
}
|
|
|
|
err = s.UploadTest(true)
|
|
|
|
if err != nil {
|
|
log.Error().Msg("Failed upload test")
|
|
}
|
|
|
|
log.Info().Msgf("Latency: %s, Download: %f, Upload: %f", s.Latency, s.DLSpeed, s.ULSpeed)
|
|
}
|
|
|
|
return nil
|
|
}
|