diff --git a/cmd/disk.go b/cmd/disk.go new file mode 100644 index 0000000..5f21c79 --- /dev/null +++ b/cmd/disk.go @@ -0,0 +1,53 @@ +package cmd + +import ( + "fmt" + "log" + "os" + "os/exec" + + "github.com/spf13/cobra" +) + +var ( + size int + tempfile string +) + +var diskCmd = &cobra.Command{ + Use: "disk", + Short: "Disk speed test.", + Long: "Uses the local 'dd' command to test a disk's speed", + Run: func(cmd *cobra.Command, args []string) { + _, err := exec.LookPath("dd") + if err != nil { + panic(err) + } + + // get number of blocks to write (1M * 1024 * number of Gigabytes) + blocksCount := fmt.Sprintf("count=%d", (size * 1024)) + // get outfile path + outfile := fmt.Sprintf("of=%s", tempfile) + + ddCmd := exec.Command("dd", "bs=1M", blocksCount, "if=/dev/zero", outfile) + ddCmd.Stderr = os.Stdout + err = ddCmd.Run() + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + + fileErr := os.Remove(tempfile) + if fileErr != nil { + fmt.Println(fileErr) + } + }, +} + +func init() { + // link flags to variables + diskCmd.Flags().IntVarP(&size, "size", "s", 10, "Size of the file to write, in Gigabytes.") + diskCmd.Flags().StringVarP(&tempfile, "tempfile", "t", "./tempfile", "Where to store the tempfile.") + + // add ping command to the main program + rootCmd.AddCommand(diskCmd) +} diff --git a/cmd/ping.go b/cmd/ping.go index e75aca0..262ac88 100644 --- a/cmd/ping.go +++ b/cmd/ping.go @@ -38,6 +38,7 @@ var pingCmd = &cobra.Command{ } func init() { + // link flags to variables pingCmd.Flags().StringVarP(&host, "host", "a", "8.8.8.8", "Host to attempt pinging.") pingCmd.Flags().IntVarP(&count, "count", "c", 50, "Number of pings to send.")