From 0ba497e59deb2340d06173cf7d3755d099ec074e Mon Sep 17 00:00:00 2001 From: "Harper, Jason M" Date: Sat, 29 Nov 2025 17:30:30 -0800 Subject: [PATCH] show preparing message in stdout status update Signed-off-by: Harper, Jason M --- cmd/config/config.go | 5 +---- cmd/config/set.go | 8 ++++---- cmd/metrics/metadata.go | 4 ++-- internal/common/common.go | 5 +---- internal/script/script.go | 11 +++++++++-- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/cmd/config/config.go b/cmd/config/config.go index e4d50ff0..6c08f2f0 100644 --- a/cmd/config/config.go +++ b/cmd/config/config.go @@ -296,10 +296,7 @@ func printConfig(myTargets []target.Target, localTempDir string) (err error) { // collectOnTarget runs the scripts on the target and sends the results to the appropriate channels func collectOnTarget(myTarget target.Target, scriptsToRun []script.ScriptDefinition, localTempDir string, channelTargetScriptOutputs chan common.TargetScriptOutputs, channelError chan error, statusUpdate progress.MultiSpinnerUpdateFunc) { // run the scripts on the target - if statusUpdate != nil { - _ = statusUpdate(myTarget.GetName(), "collecting configuration") - } - scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir) + scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir, statusUpdate, "collecting configuration") if err != nil { if statusUpdate != nil { _ = statusUpdate(myTarget.GetName(), fmt.Sprintf("error collecting configuration: %v", err)) diff --git a/cmd/config/set.go b/cmd/config/set.go index 8324d8d1..6a9d82df 100644 --- a/cmd/config/set.go +++ b/cmd/config/set.go @@ -126,7 +126,7 @@ func setLlcSize(desiredLlcSize float64, myTarget target.Target, localTempDir str scripts = append(scripts, script.GetScriptByName(script.LspciBitsScriptName)) scripts = append(scripts, script.GetScriptByName(script.LspciDevicesScriptName)) scripts = append(scripts, script.GetScriptByName(script.L3CacheWayEnabledName)) - outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir) + outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "") if err != nil { completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)} return @@ -296,7 +296,7 @@ func setUncoreDieFrequency(maxFreq bool, computeDie bool, uncoreFrequency float6 // build list of compute or IO dies scripts := []script.ScriptDefinition{} scripts = append(scripts, script.GetScriptByName(script.UncoreDieTypesFromTPMIScriptName)) - outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir) + outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "") if err != nil { completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)} return @@ -354,7 +354,7 @@ func setUncoreFrequency(maxFreq bool, uncoreFrequency float64, myTarget target.T // Depends: []string{"rdmsr"}, // Lkms: []string{"msr"}, }) - outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir) + outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "") if err != nil { completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)} return @@ -639,7 +639,7 @@ func setPrefetcher(enableDisable string, myTarget target.Target, localTempDir st scripts = append(scripts, script.GetScriptByName(script.LscpuScriptName)) scripts = append(scripts, script.GetScriptByName(script.LspciBitsScriptName)) scripts = append(scripts, script.GetScriptByName(script.LspciDevicesScriptName)) - outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir) + outputs, err := script.RunScripts(myTarget, scripts, true, localTempDir, nil, "") if err != nil { completeChannel <- setOutput{goRoutineID: goRoutineId, err: fmt.Errorf("failed to run scripts on target: %w", err)} return diff --git a/cmd/metrics/metadata.go b/cmd/metrics/metadata.go index c7e94901..28722288 100644 --- a/cmd/metrics/metadata.go +++ b/cmd/metrics/metadata.go @@ -163,7 +163,7 @@ func (c *X86MetadataCollector) CollectMetadata(myTarget target.Target, noRoot bo return Metadata{}, fmt.Errorf("failed to get metadata scripts: %v", err) } // run the scripts - scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir) // nosemgrep + scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir, nil, "") // nosemgrep if err != nil { return Metadata{}, fmt.Errorf("failed to run metadata scripts: %v", err) } @@ -347,7 +347,7 @@ func (c *ARMMetadataCollector) CollectMetadata(myTarget target.Target, noRoot bo return Metadata{}, fmt.Errorf("failed to get metadata scripts: %v", err) } // run the scripts - scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir) // nosemgrep + scriptOutputs, err := script.RunScripts(myTarget, metadataScripts, true, localTempDir, nil, "") // nosemgrep if err != nil { return Metadata{}, fmt.Errorf("failed to run metadata scripts: %v", err) } diff --git a/internal/common/common.go b/internal/common/common.go index 861a6c80..b2b47c52 100644 --- a/internal/common/common.go +++ b/internal/common/common.go @@ -580,10 +580,7 @@ func collectOnTarget(myTarget target.Target, scriptsToRun []script.ScriptDefinit } else if duration != "0" && duration != "" { status += fmt.Sprintf(" for %s seconds", duration) } - if statusUpdate != nil { - _ = statusUpdate(myTarget.GetName(), status) - } - scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir) + scriptOutputs, err := script.RunScripts(myTarget, scriptsToRun, true, localTempDir, statusUpdate, status) if err != nil { if statusUpdate != nil { _ = statusUpdate(myTarget.GetName(), fmt.Sprintf("error collecting data: %v", err)) diff --git a/internal/script/script.go b/internal/script/script.go index 7f03b546..cc46876b 100644 --- a/internal/script/script.go +++ b/internal/script/script.go @@ -17,6 +17,7 @@ import ( "text/template" "perfspect/internal/cpus" + "perfspect/internal/progress" "perfspect/internal/target" "perfspect/internal/util" ) @@ -37,7 +38,7 @@ func RunScript(myTarget target.Target, script ScriptDefinition, localTempDir str err := fmt.Errorf("the \"%s\" script is not intended for the target processor", script.Name) return ScriptOutput{}, err } - scriptOutputs, err := RunScripts(myTarget, []ScriptDefinition{script}, false, localTempDir) + scriptOutputs, err := RunScripts(myTarget, []ScriptDefinition{script}, false, localTempDir, nil, "") if scriptOutputs == nil { return ScriptOutput{}, err } @@ -49,7 +50,7 @@ func RunScript(myTarget target.Target, script ScriptDefinition, localTempDir str } // RunScripts runs a list of scripts on a target and returns the outputs of each script as a map with the script name as the key. -func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScriptErrors bool, localTempDir string) (map[string]ScriptOutput, error) { +func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScriptErrors bool, localTempDir string, statusUpdate progress.MultiSpinnerUpdateFunc, collectingStatus string) (map[string]ScriptOutput, error) { // drop scripts that should not be run and separate scripts that must run sequentially from those that can be run in parallel canElevate := myTarget.CanElevatePrivileges() var sequentialScripts []ScriptDefinition @@ -70,6 +71,9 @@ func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScript } } // prepare target to run scripts by copying scripts and dependencies to target and installing LKMs + if statusUpdate != nil { + _ = statusUpdate(myTarget.GetName(), "preparing to collect data") + } installedLkms, err := prepareTargetToRunScripts(myTarget, append(sequentialScripts, parallelScripts...), localTempDir, false) if err != nil { err = fmt.Errorf("error while preparing target to run scripts: %v", err) @@ -83,6 +87,9 @@ func RunScripts(myTarget target.Target, scripts []ScriptDefinition, ignoreScript } }() } + if statusUpdate != nil { + _ = statusUpdate(myTarget.GetName(), collectingStatus) + } // if there's only 1 parallel script, run it sequentially if len(parallelScripts) == 1 { slog.Debug("running single parallel script sequentially", slog.String("script", parallelScripts[0].Name))