Add initial prototype (#1)

* 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
This commit is contained in:
Dave Gallant
2020-12-31 02:56:01 -05:00
committed by GitHub
parent c52d1e990a
commit a2afbc1e35
17 changed files with 1355 additions and 0 deletions

52
pkg/network/speedtest.go Normal file
View File

@@ -0,0 +1,52 @@
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
}