()
| 1443 | } |
| 1444 | |
| 1445 | func (r *RootCmd) scaletestWorkspaceTraffic() *serpent.Command { |
| 1446 | var ( |
| 1447 | tickInterval time.Duration |
| 1448 | bytesPerTick int64 |
| 1449 | ssh bool |
| 1450 | disableDirect bool |
| 1451 | app string |
| 1452 | workspaceProxyURL string |
| 1453 | |
| 1454 | targetFlags = &workspaceTargetFlags{} |
| 1455 | tracingFlags = &scaletestTracingFlags{} |
| 1456 | strategy = &scaletestStrategyFlags{} |
| 1457 | cleanupStrategy = newScaletestCleanupStrategy() |
| 1458 | output = &scaletestOutputFlags{} |
| 1459 | prometheusFlags = &scaletestPrometheusFlags{} |
| 1460 | ) |
| 1461 | |
| 1462 | cmd := &serpent.Command{ |
| 1463 | Use: "workspace-traffic", |
| 1464 | Short: "Generate traffic to scaletest workspaces through coderd", |
| 1465 | Handler: func(inv *serpent.Invocation) (err error) { |
| 1466 | client, err := r.InitClient(inv) |
| 1467 | if err != nil { |
| 1468 | return err |
| 1469 | } |
| 1470 | |
| 1471 | ctx := inv.Context() |
| 1472 | |
| 1473 | notifyCtx, stop := signal.NotifyContext(ctx, StopSignals...) // Checked later. |
| 1474 | defer stop() |
| 1475 | ctx = notifyCtx |
| 1476 | |
| 1477 | me, err := RequireAdmin(ctx, client) |
| 1478 | if err != nil { |
| 1479 | return err |
| 1480 | } |
| 1481 | |
| 1482 | reg := prometheus.NewRegistry() |
| 1483 | metrics := workspacetraffic.NewMetrics(reg, "username", "workspace_name", "agent_name") |
| 1484 | |
| 1485 | logger := inv.Logger |
| 1486 | prometheusSrvClose := ServeHandler(ctx, logger, promhttp.HandlerFor(reg, promhttp.HandlerOpts{}), prometheusFlags.Address, "prometheus") |
| 1487 | defer prometheusSrvClose() |
| 1488 | |
| 1489 | workspaces, err := targetFlags.getTargetedWorkspaces(ctx, client, me.OrganizationIDs, inv.Stdout) |
| 1490 | if err != nil { |
| 1491 | return err |
| 1492 | } |
| 1493 | |
| 1494 | appHost, err := client.AppHost(ctx) |
| 1495 | if err != nil { |
| 1496 | return xerrors.Errorf("get app host: %w", err) |
| 1497 | } |
| 1498 | |
| 1499 | tracerProvider, closeTracing, tracingEnabled, err := tracingFlags.provider(ctx) |
| 1500 | if err != nil { |
| 1501 | return xerrors.Errorf("create tracer provider: %w", err) |
| 1502 | } |
no test coverage detected