Commit 835e92f

Karn Wong <[email protected]>
2025-07-28 03:52:38
refactor(speedtest): move to internal
1 parent 11a5c7e
Changed files (5)
cmd
configs
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()
+}