Commit 835e92f
Changed files (5)
cmd
internal
shouldideploytoday
speedtest
cmd/speedtest.go
@@ -1,13 +1,7 @@
package cmd
import (
- "context"
- "fmt"
- "time"
-
- "github.com/kahnwong/swissknife/color"
- "github.com/rs/zerolog/log"
- "github.com/showwin/speedtest-go/speedtest"
+ "github.com/kahnwong/swissknife/internal/speedtest"
"github.com/spf13/cobra"
)
@@ -15,71 +9,7 @@ var SpeedTestCmd = &cobra.Command{
Use: "speedtest",
Short: "Speedtest",
Run: func(cmd *cobra.Command, args []string) {
- // ref: <https://github.com/showwin/speedtest-go#api-usage>
- var speedtestClient = speedtest.New()
- serverList, _ := speedtestClient.FetchServers()
- targets, _ := serverList.FindServer([]int{})
-
- // print test server location
- fmt.Printf("%s: %s\n", color.Green("Server"), targets[0].Name)
-
- // start tests
- var s *speedtest.Server
- tests := make(chan struct{})
- ctx, cancel := context.WithCancel(context.Background())
-
- // -- background progress report -- //
- go func(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- tests <- struct{}{}
- return
- default:
- fmt.Print(".") // for progress report
- }
-
- time.Sleep(500 * time.Millisecond)
- }
- }(ctx)
-
- // -- actual tests -- //
- go func() {
- for _, s = range targets {
- fmt.Print("Pinging")
- err := s.PingTest(nil)
- if err != nil {
- log.Fatal().Msg("Error pinging server")
- }
- fmt.Printf("\033[2K\r") // clear line
-
- fmt.Print("Downloading")
- err = s.DownloadTest()
- if err != nil {
- log.Fatal().Msg("Error testing download speed")
- }
- fmt.Printf("\033[2K\r") // clear line
-
- fmt.Print("Uploading")
- err = s.UploadTest()
- if err != nil {
- log.Fatal().Msg("Error testing upload speed")
- }
- fmt.Printf("\033[2K\r") // clear line
- }
-
- cancel()
- }()
- <-tests
-
- // print results
- fmt.Print(
- fmt.Sprintf("%s: %s\n", color.Green("Latency"), s.Latency.Truncate(time.Millisecond)) +
- fmt.Sprintf("%s: %s\n", color.Green("Download"), s.DLSpeed) +
- fmt.Sprintf("%s: %s\n", color.Green("Upload"), s.ULSpeed),
- )
-
- s.Context.Reset()
+ speedtest.SpeedTest()
},
}
configs/color/color.go
@@ -0,0 +1,11 @@
+package color
+
+import "github.com/fatih/color"
+
+var (
+ Green = color.New(color.FgHiGreen).SprintFunc()
+ Magenta = color.New(color.FgHiMagenta).SprintFunc()
+ Red = color.New(color.FgRed).SprintFunc()
+ Yellow = color.New(color.FgYellow).SprintFunc()
+ Blue = color.New(color.FgBlue).SprintFunc()
+)
configs/colors.go
@@ -1,19 +0,0 @@
-package configs
-
-import "github.com/fatih/color"
-
-type ColorsStruct struct {
- Green func(a ...interface{}) string
- Magenta func(a ...interface{}) string
- Red func(a ...interface{}) string
- Yellow func(a ...interface{}) string
- Blue func(a ...interface{}) string
-}
-
-var Colors = ColorsStruct{
- Green: color.New(color.FgHiGreen).SprintFunc(),
- Magenta: color.New(color.FgHiMagenta).SprintFunc(),
- Red: color.New(color.FgRed).SprintFunc(),
- Yellow: color.New(color.FgYellow).SprintFunc(),
- Blue: color.New(color.FgBlue).SprintFunc(),
-}
internal/shouldideploytoday/shouldideploytoday.go
@@ -6,7 +6,7 @@ import (
"time"
"github.com/carlmjohnson/requests"
- "github.com/kahnwong/swissknife/configs"
+ "github.com/kahnwong/swissknife/configs/color"
"github.com/rs/zerolog/log"
)
@@ -40,8 +40,8 @@ func ShouldIDeployToday() {
response := getResponse()
if response.ShouldIDeploy {
- fmt.Printf("%s\n", configs.Colors.Green(response.Message))
+ fmt.Printf("%s\n", color.Green(response.Message))
} else if !response.ShouldIDeploy {
- fmt.Printf("%s\n", configs.Colors.Red(response.Message))
+ fmt.Printf("%s\n", color.Red(response.Message))
}
}
internal/speedtest/speedtest.go
@@ -0,0 +1,79 @@
+package speedtest
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "github.com/kahnwong/swissknife/configs/color"
+ "github.com/rs/zerolog/log"
+ "github.com/showwin/speedtest-go/speedtest"
+)
+
+func SpeedTest() {
+ // ref: <https://github.com/showwin/speedtest-go#api-usage>
+ var speedtestClient = speedtest.New()
+ serverList, _ := speedtestClient.FetchServers()
+ targets, _ := serverList.FindServer([]int{})
+
+ // print test server location
+ fmt.Printf("%s: %s\n", color.Green("Server"), targets[0].Name)
+
+ // start tests
+ var s *speedtest.Server
+ tests := make(chan struct{})
+ ctx, cancel := context.WithCancel(context.Background())
+
+ // -- background progress report -- //
+ go func(ctx context.Context) {
+ for {
+ select {
+ case <-ctx.Done():
+ tests <- struct{}{}
+ return
+ default:
+ fmt.Print(".") // for progress report
+ }
+
+ time.Sleep(500 * time.Millisecond)
+ }
+ }(ctx)
+
+ // -- actual tests -- //
+ go func() {
+ for _, s = range targets {
+ fmt.Print("Pinging")
+ err := s.PingTest(nil)
+ if err != nil {
+ log.Fatal().Msg("Error pinging server")
+ }
+ fmt.Printf("\033[2K\r") // clear line
+
+ fmt.Print("Downloading")
+ err = s.DownloadTest()
+ if err != nil {
+ log.Fatal().Msg("Error testing download speed")
+ }
+ fmt.Printf("\033[2K\r") // clear line
+
+ fmt.Print("Uploading")
+ err = s.UploadTest()
+ if err != nil {
+ log.Fatal().Msg("Error testing upload speed")
+ }
+ fmt.Printf("\033[2K\r") // clear line
+ }
+
+ cancel()
+ }()
+ <-tests
+
+ // print results
+ fmt.Print(
+ fmt.Sprintf("%s: %s\n", color.Green("Latency"), s.Latency.Truncate(time.Millisecond)) +
+ fmt.Sprintf("%s: %s\n", color.Green("Download"), s.DLSpeed) +
+ fmt.Sprintf("%s: %s\n", color.Green("Upload"), s.ULSpeed),
+ )
+
+ s.Context.Reset()
+}