Skip to content

Commit fc5869a

Browse files
committed
extend to dashboard traffic (users)
1 parent 5ee9518 commit fc5869a

File tree

2 files changed

+54
-13
lines changed

2 files changed

+54
-13
lines changed

cli/exp_scaletest.go

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ func (r *RootCmd) scaletestWorkspaceTraffic() *clibase.Cmd {
913913
return xerrors.Errorf("parse template: %w", err)
914914
}
915915
}
916-
targetWorkspaceStart, targetWorkspaceEnd, err := parseTargetWorkspaces(targetWorkspaces)
916+
targetWorkspaceStart, targetWorkspaceEnd, err := parseTargetRange("workspaces", targetWorkspaces)
917917
if err != nil {
918918
return xerrors.Errorf("parse target workspaces: %w", err)
919919
}
@@ -1102,10 +1102,11 @@ func (r *RootCmd) scaletestWorkspaceTraffic() *clibase.Cmd {
11021102

11031103
func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
11041104
var (
1105-
interval time.Duration
1106-
jitter time.Duration
1107-
headless bool
1108-
randSeed int64
1105+
interval time.Duration
1106+
jitter time.Duration
1107+
headless bool
1108+
randSeed int64
1109+
targetUsers string
11091110

11101111
client = &codersdk.Client{}
11111112
tracingFlags = &scaletestTracingFlags{}
@@ -1128,6 +1129,10 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
11281129
if !(jitter < interval) {
11291130
return xerrors.Errorf("--jitter must be less than --interval")
11301131
}
1132+
targetUserStart, targetUserEnd, err := parseTargetRange("users", targetUsers)
1133+
if err != nil {
1134+
return xerrors.Errorf("parse target users: %w", err)
1135+
}
11311136
ctx := inv.Context()
11321137
logger := inv.Logger.AppendSinks(sloghuman.Sink(inv.Stdout))
11331138
if r.verbose {
@@ -1164,8 +1169,15 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
11641169
if err != nil {
11651170
return xerrors.Errorf("get scaletest users")
11661171
}
1172+
if targetUserEnd == 0 {
1173+
targetUserEnd = len(users)
1174+
}
1175+
1176+
for idx, usr := range users {
1177+
if idx < targetUserStart || idx >= targetUserEnd {
1178+
continue
1179+
}
11671180

1168-
for _, usr := range users {
11691181
//nolint:gosec // not used for cryptographic purposes
11701182
rndGen := rand.New(rand.NewSource(randSeed))
11711183
name := fmt.Sprintf("dashboard-%s", usr.Username)
@@ -1236,6 +1248,12 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
12361248
}
12371249

12381250
cmd.Options = []clibase.Option{
1251+
{
1252+
Flag: "target-users",
1253+
Env: "CODER_SCALETEST_DASHBOARD_TARGET_USERS",
1254+
Description: "Target a specific range of users in the format [START]:[END] (exclusive). Example: 0:10 will target the 10 first alphabetically sorted users (0-9).",
1255+
Value: clibase.StringOf(&targetUsers),
1256+
},
12391257
{
12401258
Flag: "interval",
12411259
Env: "CODER_SCALETEST_DASHBOARD_INTERVAL",
@@ -1452,28 +1470,28 @@ func parseTemplate(ctx context.Context, client *codersdk.Client, organizationIDs
14521470
return tpl, nil
14531471
}
14541472

1455-
func parseTargetWorkspaces(targetWorkspaces string) (start, end int, err error) {
1456-
if targetWorkspaces == "" {
1473+
func parseTargetRange(name, targets string) (start, end int, err error) {
1474+
if targets == "" {
14571475
return 0, 0, nil
14581476
}
14591477

1460-
parts := strings.Split(targetWorkspaces, ":")
1478+
parts := strings.Split(targets, ":")
14611479
if len(parts) != 2 {
1462-
return 0, 0, xerrors.Errorf("invalid target workspaces %q", targetWorkspaces)
1480+
return 0, 0, xerrors.Errorf("invalid target %s %q", name, targets)
14631481
}
14641482

14651483
start, err = strconv.Atoi(parts[0])
14661484
if err != nil {
1467-
return 0, 0, xerrors.Errorf("invalid target workspaces %q: %w", targetWorkspaces, err)
1485+
return 0, 0, xerrors.Errorf("invalid target %s %q: %w", name, targets, err)
14681486
}
14691487

14701488
end, err = strconv.Atoi(parts[1])
14711489
if err != nil {
1472-
return 0, 0, xerrors.Errorf("invalid target workspaces %q: %w", targetWorkspaces, err)
1490+
return 0, 0, xerrors.Errorf("invalid target %s %q: %w", name, targets, err)
14731491
}
14741492

14751493
if start == end {
1476-
return 0, 0, xerrors.Errorf("invalid target workspaces %q: start and end cannot be equal", targetWorkspaces)
1494+
return 0, 0, xerrors.Errorf("invalid target %s %q: start and end cannot be equal", name, targets)
14771495
}
14781496

14791497
return start, end, nil

cli/exp_scaletest_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,27 @@ func TestScaleTestDashboard(t *testing.T) {
243243
err := inv.WithContext(ctx).Run()
244244
require.NoError(t, err, "")
245245
})
246+
247+
t.Run("TargetUsers", func(t *testing.T) {
248+
t.Parallel()
249+
ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitMedium)
250+
defer cancelFunc()
251+
252+
log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
253+
client := coderdtest.New(t, &coderdtest.Options{
254+
Logger: &log,
255+
})
256+
_ = coderdtest.CreateFirstUser(t, client)
257+
258+
inv, root := clitest.New(t, "exp", "scaletest", "dashboard",
259+
"--target-users", "0:0",
260+
)
261+
clitest.SetupConfig(t, client, root)
262+
pty := ptytest.New(t)
263+
inv.Stdout = pty.Output()
264+
inv.Stderr = pty.Output()
265+
266+
err := inv.WithContext(ctx).Run()
267+
require.ErrorContains(t, err, "invalid target users \"0:0\": start and end cannot be equal")
268+
})
246269
}

0 commit comments

Comments
 (0)