webui: add "6. Scenario" page — run scriptable test scenarios from removable media through the normal task queue
Exposes the scenario engine (platform.System.RunScenario, added earlier) in the web UI instead of only the `bee run` CLI: a new nav item lists every scenarios/*.json found on mounted removable media (GET /api/scenario/list) and runs one with a click (POST /api/scenario/run), enqueued as a normal Task with target "scenario" — progress/logs live in Tasks like any other SAT pack, no separate live-output UI needed. - app.go: satRunner gains RunScenario, exportManager gains ListScenarioFilesOnRemovableMedia/ReadScenarioFromRemovableMedia — both already implemented on platform.System, just newly exposed through App. - webui/tasks.go: taskParams.ScenarioName; runTask's "scenario" case reads the file from removable media, parses it, and runs it. - webui/page_scenario.go: the page itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
20cd317c87
commit
bcf02e0515
@@ -73,6 +73,8 @@ type serviceManager interface {
|
||||
type exportManager interface {
|
||||
ListRemovableTargets() ([]platform.RemovableTarget, error)
|
||||
ExportFileToTarget(src string, target platform.RemovableTarget) (string, error)
|
||||
ListScenarioFilesOnRemovableMedia() ([]platform.ScenarioFileOnRemovableMedia, error)
|
||||
ReadScenarioFromRemovableMedia(name string) ([]byte, error)
|
||||
}
|
||||
|
||||
type toolManager interface {
|
||||
@@ -154,6 +156,7 @@ type satRunner interface {
|
||||
RunFanStressTest(ctx context.Context, baseDir string, opts platform.FanStressOptions) (string, error)
|
||||
RunPlatformStress(ctx context.Context, baseDir string, opts platform.PlatformStressOptions, logFunc func(string)) (string, error)
|
||||
RunNCCLTests(ctx context.Context, baseDir string, gpuIndices []int, logFunc func(string)) (string, error)
|
||||
RunScenario(ctx context.Context, baseDir string, spec platform.ScenarioSpec, logFunc func(string)) (string, error)
|
||||
}
|
||||
|
||||
type runtimeChecker interface {
|
||||
|
||||
@@ -14,6 +14,20 @@ func (a *App) ListRemovableTargets() ([]platform.RemovableTarget, error) {
|
||||
return a.exports.ListRemovableTargets()
|
||||
}
|
||||
|
||||
// ListScenarioFilesOnRemovableMedia lists scenarios/*.json found on any
|
||||
// mounted removable target (e.g. the blackbox USB stick) — see
|
||||
// platform.System.ListScenarioFilesOnRemovableMedia.
|
||||
func (a *App) ListScenarioFilesOnRemovableMedia() ([]platform.ScenarioFileOnRemovableMedia, error) {
|
||||
return a.exports.ListScenarioFilesOnRemovableMedia()
|
||||
}
|
||||
|
||||
// ReadScenarioFromRemovableMedia reads scenarios/<name>.json from whichever
|
||||
// mounted removable target has it — see
|
||||
// platform.System.ReadScenarioFromRemovableMedia.
|
||||
func (a *App) ReadScenarioFromRemovableMedia(name string) ([]byte, error) {
|
||||
return a.exports.ReadScenarioFromRemovableMedia(name)
|
||||
}
|
||||
|
||||
func (a *App) ExportLatestAudit(target platform.RemovableTarget) (string, error) {
|
||||
if _, err := os.Stat(DefaultAuditJSONPath); err != nil {
|
||||
return "", err
|
||||
|
||||
@@ -17,6 +17,17 @@ func (a *App) RunNvidiaAcceptancePack(baseDir string, logFunc func(string)) (str
|
||||
return a.sat.RunNvidiaAcceptancePack(baseDir, logFunc)
|
||||
}
|
||||
|
||||
// RunScenario runs a user-authored ScenarioSpec (see
|
||||
// platform.ParseScenarioJSON) — the webui Scenario page and `bee run` CLI
|
||||
// command both go through this so a scenario run gets the same SAT base
|
||||
// directory default as every other pack.
|
||||
func (a *App) RunScenario(ctx context.Context, baseDir string, spec platform.ScenarioSpec, logFunc func(string)) (string, error) {
|
||||
if strings.TrimSpace(baseDir) == "" {
|
||||
baseDir = DefaultSATBaseDir
|
||||
}
|
||||
return a.sat.RunScenario(ctx, baseDir, spec, logFunc)
|
||||
}
|
||||
|
||||
func (a *App) RunNvidiaAcceptancePackResult(baseDir string) (ActionResult, error) {
|
||||
path, err := a.RunNvidiaAcceptancePack(baseDir, nil)
|
||||
body := "Archive written."
|
||||
|
||||
@@ -91,6 +91,14 @@ func (f fakeExports) ExportFileToTarget(src string, target platform.RemovableTar
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (f fakeExports) ListScenarioFilesOnRemovableMedia() ([]platform.ScenarioFileOnRemovableMedia, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f fakeExports) ReadScenarioFromRemovableMedia(name string) ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
type fakeRuntime struct {
|
||||
collectFn func(string) (schema.RuntimeHealth, error)
|
||||
dumpFn func(string) error
|
||||
@@ -332,6 +340,10 @@ func (f fakeSAT) RunNCCLTests(_ context.Context, baseDir string, gpuIndices []in
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (f fakeSAT) RunScenario(_ context.Context, baseDir string, _ platform.ScenarioSpec, _ func(string)) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func TestRunNCCLTestsPassesSelectedGPUs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user