diff --git a/cmd/disk.go b/cmd/disk.go index 5f21c79..c72f2d0 100644 --- a/cmd/disk.go +++ b/cmd/disk.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "io" "log" "os" "os/exec" @@ -30,7 +31,14 @@ var diskCmd = &cobra.Command{ outfile := fmt.Sprintf("of=%s", tempfile) ddCmd := exec.Command("dd", "bs=1M", blocksCount, "if=/dev/zero", outfile) - ddCmd.Stderr = os.Stdout + + if Log != "false" { + f, _ := os.Create(Log) + ddCmd.Stderr = io.MultiWriter(os.Stderr, f) + } else { + ddCmd.Stderr = os.Stdout + } + err = ddCmd.Run() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) diff --git a/cmd/net.go b/cmd/net.go index 5d365dd..140ea4d 100644 --- a/cmd/net.go +++ b/cmd/net.go @@ -5,6 +5,8 @@ import ( "github.com/showwin/speedtest-go/speedtest" "github.com/spf13/cobra" + + "git.metaunix.net/bitgoblin/hardware-tests/lib" ) var netCmd = &cobra.Command{ @@ -22,7 +24,14 @@ var netCmd = &cobra.Command{ s.DownloadTest(false) s.UploadTest(false) - fmt.Printf("Latency: %s, Download: %f, Upload: %f\n", s.Latency, s.DLSpeed, s.ULSpeed) + // put together the result + result := fmt.Sprintf("Latency: %s, Download: %f, Upload: %f\n", s.Latency, s.DLSpeed, s.ULSpeed) + // log the result if it's configured, otherwise print it out + if Log != "false" { + lib.WriteToFile(Log, result) + } else { + fmt.Printf("%s", result) + } } }, } diff --git a/cmd/ping.go b/cmd/ping.go index 262ac88..66ad20f 100644 --- a/cmd/ping.go +++ b/cmd/ping.go @@ -5,6 +5,8 @@ import ( "github.com/go-ping/ping" "github.com/spf13/cobra" + + "git.metaunix.net/bitgoblin/hardware-tests/lib" ) var ( @@ -23,11 +25,18 @@ var pingCmd = &cobra.Command{ } pinger.Count = count pinger.OnFinish = func(stats *ping.Statistics) { - fmt.Printf("--- %s ping statistics ---\n", stats.Addr) - fmt.Printf("%d packets transmitted, %d packets received, %v%% packet loss\n", + result := fmt.Sprintf("--- %s ping statistics ---\n", stats.Addr) + result += fmt.Sprintf("%d packets transmitted, %d packets received, %v%% packet loss\n", stats.PacketsSent, stats.PacketsRecv, stats.PacketLoss) - fmt.Printf("round-trip min/avg/max/stddev = %v/%v/%v/%v\n", + result += fmt.Sprintf("round-trip min/avg/max/stddev = %v/%v/%v/%v\n", stats.MinRtt, stats.AvgRtt, stats.MaxRtt, stats.StdDevRtt) + + // log the result if it's configured, otherwise print it out + if Log != "false" { + lib.WriteToFile(Log, result) + } else { + fmt.Printf("%s", result) + } } fmt.Printf("PING %s (%s):\n", pinger.Addr(), pinger.IPAddr()) err = pinger.Run() // Blocks until finished. diff --git a/cmd/root.go b/cmd/root.go index fdbb66d..e061df8 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -7,6 +7,10 @@ import ( "github.com/spf13/cobra" ) +var ( + Log string +) + var rootCmd = &cobra.Command{ Use: "bgbench", Short: "Bit Goblin hardware benching tool.", @@ -20,3 +24,7 @@ func Execute() { os.Exit(1) } } + +func init() { + rootCmd.PersistentFlags().StringVarP(&Log, "log", "l", "false", "File location to write results to.") +} diff --git a/lib/io.go b/lib/io.go new file mode 100644 index 0000000..9a5c1be --- /dev/null +++ b/lib/io.go @@ -0,0 +1,16 @@ +package lib + +import ( + "fmt" + "os" +) + +func WriteToFile(filepath string, content string) { + file, err := os.Create(filepath) + if err != nil { + fmt.Println(err) + } else { + file.WriteString(content) + } + file.Close() +}