@@ -913,7 +913,7 @@ func (r *RootCmd) scaletestWorkspaceTraffic() *clibase.Cmd {
913
913
return xerrors .Errorf ("parse template: %w" , err )
914
914
}
915
915
}
916
- targetWorkspaceStart , targetWorkspaceEnd , err := parseTargetWorkspaces ( targetWorkspaces )
916
+ targetWorkspaceStart , targetWorkspaceEnd , err := parseTargetRange ( "workspaces" , targetWorkspaces )
917
917
if err != nil {
918
918
return xerrors .Errorf ("parse target workspaces: %w" , err )
919
919
}
@@ -1102,10 +1102,11 @@ func (r *RootCmd) scaletestWorkspaceTraffic() *clibase.Cmd {
1102
1102
1103
1103
func (r * RootCmd ) scaletestDashboard () * clibase.Cmd {
1104
1104
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
1109
1110
1110
1111
client = & codersdk.Client {}
1111
1112
tracingFlags = & scaletestTracingFlags {}
@@ -1128,6 +1129,10 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
1128
1129
if ! (jitter < interval ) {
1129
1130
return xerrors .Errorf ("--jitter must be less than --interval" )
1130
1131
}
1132
+ targetUserStart , targetUserEnd , err := parseTargetRange ("users" , targetUsers )
1133
+ if err != nil {
1134
+ return xerrors .Errorf ("parse target users: %w" , err )
1135
+ }
1131
1136
ctx := inv .Context ()
1132
1137
logger := inv .Logger .AppendSinks (sloghuman .Sink (inv .Stdout ))
1133
1138
if r .verbose {
@@ -1164,8 +1169,15 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
1164
1169
if err != nil {
1165
1170
return xerrors .Errorf ("get scaletest users" )
1166
1171
}
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
+ }
1167
1180
1168
- for _ , usr := range users {
1169
1181
//nolint:gosec // not used for cryptographic purposes
1170
1182
rndGen := rand .New (rand .NewSource (randSeed ))
1171
1183
name := fmt .Sprintf ("dashboard-%s" , usr .Username )
@@ -1236,6 +1248,12 @@ func (r *RootCmd) scaletestDashboard() *clibase.Cmd {
1236
1248
}
1237
1249
1238
1250
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
+ },
1239
1257
{
1240
1258
Flag : "interval" ,
1241
1259
Env : "CODER_SCALETEST_DASHBOARD_INTERVAL" ,
@@ -1452,28 +1470,28 @@ func parseTemplate(ctx context.Context, client *codersdk.Client, organizationIDs
1452
1470
return tpl , nil
1453
1471
}
1454
1472
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 == "" {
1457
1475
return 0 , 0 , nil
1458
1476
}
1459
1477
1460
- parts := strings .Split (targetWorkspaces , ":" )
1478
+ parts := strings .Split (targets , ":" )
1461
1479
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 )
1463
1481
}
1464
1482
1465
1483
start , err = strconv .Atoi (parts [0 ])
1466
1484
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 )
1468
1486
}
1469
1487
1470
1488
end , err = strconv .Atoi (parts [1 ])
1471
1489
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 )
1473
1491
}
1474
1492
1475
1493
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 )
1477
1495
}
1478
1496
1479
1497
return start , end , nil
0 commit comments