aboutsummaryrefslogtreecommitdiff
path: root/compiler_wrapper/rusage_flag.go
diff options
context:
space:
mode:
authorRyan Beltran <ryanbeltran@chromium.org>2020-12-10 23:48:57 +0000
committerRyan Beltran <ryanbeltran@chromium.org>2020-12-14 23:07:08 +0000
commit914431e4196e3e38033293771ececf78db95e63d (patch)
treef46006cd4c12ef41c5be12e0356d93db1a2bb25c /compiler_wrapper/rusage_flag.go
parent028b14d40de70f7caf987fc76db932d78174b4cc (diff)
downloadtoolchain-utils-914431e4196e3e38033293771ececf78db95e63d.tar.gz
compiler_wrapper: make rusage logs json
Modified rusage logs generated by GETRUSAGE flag. Output from each entry is now in json format. BUG=chromium:1156314 TEST=Modified and ran unit tests Change-Id: Ia2cac4af201854de6d4a2c57e6cd8a4585f0931f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2585911 Tested-by: Ryan Beltran <ryanbeltran@chromium.org> Reviewed-by: George Burgess <gbiv@chromium.org>
Diffstat (limited to 'compiler_wrapper/rusage_flag.go')
-rw-r--r--compiler_wrapper/rusage_flag.go32
1 files changed, 26 insertions, 6 deletions
diff --git a/compiler_wrapper/rusage_flag.go b/compiler_wrapper/rusage_flag.go
index 690308b2..e8eb79a7 100644
--- a/compiler_wrapper/rusage_flag.go
+++ b/compiler_wrapper/rusage_flag.go
@@ -5,10 +5,10 @@
package main
import (
+ "encoding/json"
"fmt"
"os"
"path/filepath"
- "strings"
"syscall"
"time"
)
@@ -38,6 +38,16 @@ func lockFileExclusive(fd uintptr) error {
return fmt.Errorf("locking file failed after %d tries", maxTries)
}
+type rusageLog struct {
+ ExitCode int `json:"exit_code"`
+ ElapsedRealTime float64 `json:"elapsed_real_time"`
+ ElapsedUserTime float64 `json:"elapsed_user_time"`
+ ElapsedSysTime float64 `json:"elapsed_sys_time"`
+ MaxMemUsed int64 `json:"max_mem_used"`
+ Compiler string `json:"compiler"`
+ CompilerArgs []string `json:"compiler_args"`
+}
+
func logRusage(env env, logFileName string, compilerCmd *command) (exitCode int, err error) {
rusageBefore := syscall.Rusage{}
if err := syscall.Getrusage(syscall.RUSAGE_CHILDREN, &rusageBefore); err != nil {
@@ -71,10 +81,16 @@ func logRusage(env env, logFileName string, compilerCmd *command) (exitCode int,
}
timeUnit := float64(time.Second)
- data := fmt.Sprintf("%.5f : %.5f : %.5f : %d : %s : %s\n",
- float64(elapsedRealTime)/timeUnit, float64(elapsedUserTime)/timeUnit, float64(elapsedSysTime)/timeUnit,
- maxMemUsed, absCompilerPath,
- strings.Join(append([]string{filepath.Base(absCompilerPath)}, compilerCmd.Args...), " "))
+
+ logEntry := rusageLog{
+ ExitCode: exitCode,
+ ElapsedRealTime: float64(elapsedRealTime) / timeUnit,
+ ElapsedUserTime: float64(elapsedUserTime) / timeUnit,
+ ElapsedSysTime: float64(elapsedSysTime) / timeUnit,
+ MaxMemUsed: maxMemUsed,
+ Compiler: absCompilerPath,
+ CompilerArgs: compilerCmd.Args,
+ }
// Note: using file mode 0666 so that a root-created log is writable by others.
logFile, err := os.OpenFile(logFileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
@@ -91,7 +107,11 @@ func logRusage(env env, logFileName string, compilerCmd *command) (exitCode int,
return 0, wrapErrorwithSourceLocf(err, "locking rusage logfile %s: %v", logFileName, err)
}
- _, err = logFile.WriteString(data)
+ if err := json.NewEncoder(logFile).Encode(logEntry); err != nil {
+ _ = logFile.Close()
+ return 0, wrapErrorwithSourceLocf(err, "converting rusage logfile entry to JSON %v", logEntry)
+ }
+
closeErr := logFile.Close()
if err != nil {
return 0, wrapErrorwithSourceLocf(err, "writing to rusage logfile %s: %v", logFileName, err)