@@ -671,7 +671,7 @@ func runCmd(cmd *cobra.Command, args []string) error {
671
671
} else {
672
672
finalMessage += fmt .Sprintf (" for %d seconds" , flagDuration )
673
673
}
674
- multiSpinner .Status (targetContexts [i ].target .GetName (), finalMessage )
674
+ _ = multiSpinner .Status (targetContexts [i ].target .GetName (), finalMessage )
675
675
}
676
676
go collectOnTarget (& targetContexts [i ], localTempDir , localOutputDir , channelTargetError , multiSpinner .Status )
677
677
}
@@ -687,7 +687,7 @@ func runCmd(cmd *cobra.Command, args []string) error {
687
687
// finalize and stop the spinner
688
688
for _ , targetContext := range targetContexts {
689
689
if targetContext .err == nil {
690
- multiSpinner .Status (targetContext .target .GetName (), "collection complete" )
690
+ _ = multiSpinner .Status (targetContext .target .GetName (), "collection complete" )
691
691
}
692
692
}
693
693
// summarize outputs
@@ -750,11 +750,11 @@ func runCmd(cmd *cobra.Command, args []string) error {
750
750
751
751
func prepareTarget (targetContext * targetContext , targetTempRoot string , localTempDir string , localPerfPath string , channelError chan targetError , statusUpdate progress.MultiSpinnerUpdateFunc ) {
752
752
myTarget := targetContext .target
753
- // create a temporary directory on the target
754
- statusUpdate (myTarget .GetName (), "configuring target" )
755
753
var err error
754
+ // create a temporary directory on the target
755
+ _ = statusUpdate (myTarget .GetName (), "configuring target" )
756
756
if targetContext .tempDir , err = myTarget .CreateTempDirectory (targetTempRoot ); err != nil {
757
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %v" , err ))
757
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %v" , err ))
758
758
targetContext .err = err
759
759
channelError <- targetError {target : myTarget , err : err }
760
760
return
@@ -764,15 +764,15 @@ func prepareTarget(targetContext *targetContext, targetTempRoot string, localTem
764
764
var nmiWatchdogEnabled bool
765
765
if nmiWatchdogEnabled , err = NMIWatchdogEnabled (myTarget ); err != nil {
766
766
err = fmt .Errorf ("failed to retrieve NMI watchdog status: %w" , err )
767
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
767
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
768
768
targetContext .err = err
769
769
channelError <- targetError {target : myTarget , err : err }
770
770
return
771
771
}
772
772
if nmiWatchdogEnabled {
773
773
if err = DisableNMIWatchdog (myTarget , localTempDir ); err != nil {
774
774
err = fmt .Errorf ("failed to disable NMI watchdog: %w" , err )
775
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
775
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
776
776
targetContext .err = err
777
777
channelError <- targetError {target : myTarget , err : err }
778
778
return
@@ -784,14 +784,14 @@ func prepareTarget(targetContext *targetContext, targetTempRoot string, localTem
784
784
if ! flagNoRoot {
785
785
if targetContext .perfMuxIntervals , err = GetMuxIntervals (myTarget , localTempDir ); err != nil {
786
786
err = fmt .Errorf ("failed to get perf mux intervals: %w" , err )
787
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
787
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
788
788
targetContext .err = err
789
789
channelError <- targetError {target : myTarget , err : err }
790
790
return
791
791
}
792
792
if err = SetAllMuxIntervals (myTarget , flagPerfMuxInterval , localTempDir ); err != nil {
793
793
err = fmt .Errorf ("failed to set all perf mux intervals: %w" , err )
794
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
794
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
795
795
targetContext .err = err
796
796
channelError <- targetError {target : myTarget , err : err }
797
797
return
@@ -800,7 +800,7 @@ func prepareTarget(targetContext *targetContext, targetTempRoot string, localTem
800
800
// get the full path to the perf binary
801
801
if targetContext .perfPath , err = getPerfPath (myTarget , localPerfPath ); err != nil {
802
802
err = fmt .Errorf ("failed to find perf: %w" , err )
803
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %v" , err ))
803
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %v" , err ))
804
804
targetContext .err = err
805
805
channelError <- targetError {target : myTarget , err : err }
806
806
return
@@ -816,11 +816,11 @@ func prepareMetrics(targetContext *targetContext, localTempDir string, channelEr
816
816
return
817
817
}
818
818
// load metadata
819
- statusUpdate (myTarget .GetName (), "collecting metadata" )
819
+ _ = statusUpdate (myTarget .GetName (), "collecting metadata" )
820
820
var err error
821
821
if targetContext .metadata , err = LoadMetadata (myTarget , flagNoRoot , targetContext .perfPath , localTempDir ); err != nil {
822
822
err = fmt .Errorf ("failed to load metadata: %w" , err )
823
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
823
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
824
824
targetContext .err = err
825
825
channelError <- targetError {target : myTarget , err : err }
826
826
return
@@ -830,23 +830,23 @@ func prepareMetrics(targetContext *targetContext, localTempDir string, channelEr
830
830
var uncollectableEvents []string
831
831
if targetContext .groupDefinitions , uncollectableEvents , err = LoadEventGroups (flagEventFilePath , targetContext .metadata ); err != nil {
832
832
err = fmt .Errorf ("failed to load event definitions: %w" , err )
833
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
833
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
834
834
targetContext .err = err
835
835
channelError <- targetError {target : myTarget , err : err }
836
836
return
837
837
}
838
838
// load metric definitions
839
839
if targetContext .metricDefinitions , err = LoadMetricDefinitions (flagMetricFilePath , flagMetricsList , uncollectableEvents , targetContext .metadata ); err != nil {
840
840
err = fmt .Errorf ("failed to load metric definitions: %w" , err )
841
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
841
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
842
842
targetContext .err = err
843
843
channelError <- targetError {target : myTarget , err : err }
844
844
return
845
845
}
846
846
// configure metrics
847
847
if err = ConfigureMetrics (targetContext .metricDefinitions , GetEvaluatorFunctions (), targetContext .metadata ); err != nil {
848
848
err = fmt .Errorf ("failed to configure metrics: %w" , err )
849
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
849
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
850
850
targetContext .err = err
851
851
channelError <- targetError {target : myTarget , err : err }
852
852
return
@@ -877,7 +877,7 @@ func collectOnTarget(targetContext *targetContext, localTempDir string, localOut
877
877
// get the perf command
878
878
if processes , perfCommand , err = getPerfCommand (myTarget , targetContext .perfPath , targetContext .groupDefinitions , localTempDir ); err != nil {
879
879
err = fmt .Errorf ("failed to get perf command: %w" , err )
880
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
880
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
881
881
break
882
882
}
883
883
beginTimestamp := time .Now ()
@@ -887,7 +887,7 @@ func collectOnTarget(targetContext *targetContext, localTempDir string, localOut
887
887
if perfErr != nil {
888
888
if ! getSignalReceived () {
889
889
err = perfErr
890
- statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
890
+ _ = statusUpdate (myTarget .GetName (), fmt .Sprintf ("Error: %s" , err .Error ()))
891
891
}
892
892
break
893
893
}
@@ -916,21 +916,33 @@ func printMetrics(frameChannel chan []MetricFrame, targetName string, outputDir
916
916
var printedFiles []string
917
917
// block until next set of metric frames arrives, will exit loop when channel is closed
918
918
for metricFrames := range frameChannel {
919
- fileName := printMetricsTxt (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatTxt , ! flagLive && util .StringInList (formatTxt , flagOutputFormat ), outputDir )
920
- if fileName != "" {
919
+ fileName , err := printMetricsTxt (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatTxt , ! flagLive && util .StringInList (formatTxt , flagOutputFormat ), outputDir )
920
+ if err != nil {
921
+ fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
922
+ slog .Error (err .Error ())
923
+ } else if fileName != "" {
921
924
printedFiles = util .UniqueAppend (printedFiles , fileName )
922
925
}
923
- fileName = printMetricsJSON (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatJSON , ! flagLive && util .StringInList (formatJSON , flagOutputFormat ), outputDir )
924
- if fileName != "" {
926
+ fileName , err = printMetricsJSON (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatJSON , ! flagLive && util .StringInList (formatJSON , flagOutputFormat ), outputDir )
927
+ if err != nil {
928
+ fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
929
+ slog .Error (err .Error ())
930
+ } else if fileName != "" {
925
931
printedFiles = util .UniqueAppend (printedFiles , fileName )
926
932
}
927
933
// csv is always written to file unless no files are requested -- we need it to create the summary reports
928
- fileName = printMetricsCSV (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatCSV , ! flagLive , outputDir )
929
- if fileName != "" {
934
+ fileName , err = printMetricsCSV (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatCSV , ! flagLive , outputDir )
935
+ if err != nil {
936
+ fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
937
+ slog .Error (err .Error ())
938
+ } else if fileName != "" {
930
939
printedFiles = util .UniqueAppend (printedFiles , fileName )
931
940
}
932
- fileName = printMetricsWide (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatWide , ! flagLive && util .StringInList (formatWide , flagOutputFormat ), outputDir )
933
- if fileName != "" {
941
+ fileName , err = printMetricsWide (metricFrames , targetName , flagLive && flagOutputFormat [0 ] == formatWide , ! flagLive && util .StringInList (formatWide , flagOutputFormat ), outputDir )
942
+ if err != nil {
943
+ fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
944
+ slog .Error (err .Error ())
945
+ } else if fileName != "" {
934
946
printedFiles = util .UniqueAppend (printedFiles , fileName )
935
947
}
936
948
}
@@ -1170,7 +1182,11 @@ func runPerf(myTarget target.Target, noRoot bool, processes []Process, cmd *exec
1170
1182
outputLines = [][]byte {} // empty it
1171
1183
}
1172
1184
if timeout != 0 && int (time .Since (startPerfTimestamp ).Seconds ()) > timeout {
1173
- localCommand .Process .Signal (os .Interrupt )
1185
+ err = localCommand .Process .Signal (os .Interrupt )
1186
+ if err != nil {
1187
+ err = fmt .Errorf ("failed to terminate perf: %v" , err )
1188
+ slog .Error (err .Error ())
1189
+ }
1174
1190
}
1175
1191
}
1176
1192
}()
0 commit comments