feat(cli): make minor improvements to speedtest (#6266)

- Remove mostly redundant "Transferred" column
- Rename "Bandwidth" to "Throughput"
- Replace "--reverse" (which has an ambiguous starting state) with "--direction=(up|down)"
- Tolerate AgentStartErrors which may be caused by failing startup
  script
This commit is contained in:
Ammar Bandukwala
2023-02-22 13:09:37 -06:00
committed by GitHub
parent 6149905a83
commit 8231de94ca
3 changed files with 27 additions and 22 deletions

View File

@ -21,7 +21,7 @@ func speedtest() *cobra.Command {
var ( var (
direct bool direct bool
duration time.Duration duration time.Duration
reverse bool direction string
) )
cmd := &cobra.Command{ cmd := &cobra.Command{
Annotations: workspaceCommand, Annotations: workspaceCommand,
@ -48,7 +48,7 @@ func speedtest() *cobra.Command {
return client.WorkspaceAgent(ctx, workspaceAgent.ID) return client.WorkspaceAgent(ctx, workspaceAgent.ID)
}, },
}) })
if err != nil { if err != nil && !xerrors.Is(err, cliui.AgentStartError) {
return xerrors.Errorf("await agent: %w", err) return xerrors.Errorf("await agent: %w", err)
} }
logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr())) logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr()))
@ -94,17 +94,22 @@ func speedtest() *cobra.Command {
} else { } else {
conn.AwaitReachable(ctx) conn.AwaitReachable(ctx)
} }
dir := tsspeedtest.Download var tsDir tsspeedtest.Direction
if reverse { switch direction {
dir = tsspeedtest.Upload case "up":
tsDir = tsspeedtest.Upload
case "down":
tsDir = tsspeedtest.Download
default:
return xerrors.Errorf("invalid direction: %q", direction)
} }
cmd.Printf("Starting a %ds %s test...\n", int(duration.Seconds()), dir) cmd.Printf("Starting a %ds %s test...\n", int(duration.Seconds()), tsDir)
results, err := conn.Speedtest(ctx, dir, duration) results, err := conn.Speedtest(ctx, tsDir, duration)
if err != nil { if err != nil {
return err return err
} }
tableWriter := cliui.Table() tableWriter := cliui.Table()
tableWriter.AppendHeader(table.Row{"Interval", "Transfer", "Bandwidth"}) tableWriter.AppendHeader(table.Row{"Interval", "Throughput"})
startTime := results[0].IntervalStart startTime := results[0].IntervalStart
for _, r := range results { for _, r := range results {
if r.Total { if r.Total {
@ -112,7 +117,6 @@ func speedtest() *cobra.Command {
} }
tableWriter.AppendRow(table.Row{ tableWriter.AppendRow(table.Row{
fmt.Sprintf("%.2f-%.2f sec", r.IntervalStart.Sub(startTime).Seconds(), r.IntervalEnd.Sub(startTime).Seconds()), fmt.Sprintf("%.2f-%.2f sec", r.IntervalStart.Sub(startTime).Seconds(), r.IntervalEnd.Sub(startTime).Seconds()),
fmt.Sprintf("%.4f MBits", r.MegaBits()),
fmt.Sprintf("%.4f Mbits/sec", r.MBitsPerSecond()), fmt.Sprintf("%.4f Mbits/sec", r.MBitsPerSecond()),
}) })
} }
@ -122,8 +126,9 @@ func speedtest() *cobra.Command {
} }
cliflag.BoolVarP(cmd.Flags(), &direct, "direct", "d", "", false, cliflag.BoolVarP(cmd.Flags(), &direct, "direct", "d", "", false,
"Specifies whether to wait for a direct connection before testing speed.") "Specifies whether to wait for a direct connection before testing speed.")
cliflag.BoolVarP(cmd.Flags(), &reverse, "reverse", "r", "", false, cliflag.StringVarP(cmd.Flags(), &direction, "direction", "", "", "down",
"Specifies whether to run in reverse mode where the client receives and the server sends.") "Specifies whether to run in reverse mode where the client receives and the server sends. (up|down)",
)
cmd.Flags().DurationVarP(&duration, "time", "t", tsspeedtest.DefaultDuration, cmd.Flags().DurationVarP(&duration, "time", "t", tsspeedtest.DefaultDuration,
"Specifies the duration to monitor traffic.") "Specifies the duration to monitor traffic.")
return cmd return cmd

View File

@ -5,9 +5,9 @@ Usage:
Flags: Flags:
-d, --direct Specifies whether to wait for a direct connection before testing speed. -d, --direct Specifies whether to wait for a direct connection before testing speed.
--direction string Specifies whether to run in reverse mode where the client receives
and the server sends. (up|down) (default "down")
-h, --help help for speedtest -h, --help help for speedtest
-r, --reverse Specifies whether to run in reverse mode where the client receives and
the server sends.
-t, --time duration Specifies the duration to monitor traffic. (default 5s) -t, --time duration Specifies the duration to monitor traffic. (default 5s)
Global Flags: Global Flags:

View File

@ -10,8 +10,8 @@ coder speedtest <workspace> [flags]
``` ```
-d, --direct Specifies whether to wait for a direct connection before testing speed. -d, --direct Specifies whether to wait for a direct connection before testing speed.
--direction string Specifies whether to run in reverse mode where the client receives and the server sends. (up|down) (default "down")
-h, --help help for speedtest -h, --help help for speedtest
-r, --reverse Specifies whether to run in reverse mode where the client receives and the server sends.
-t, --time duration Specifies the duration to monitor traffic. (default 5s) -t, --time duration Specifies the duration to monitor traffic. (default 5s)
``` ```