X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/75f4b70625086aaa8ecf8daed23e4d151e54949f..f3250432a47c835f4c594348b0d4904a247c3365:/services/datamanager/loggerutil/loggerutil.go diff --git a/services/datamanager/loggerutil/loggerutil.go b/services/datamanager/loggerutil/loggerutil.go index fa876d4598..1514922396 100644 --- a/services/datamanager/loggerutil/loggerutil.go +++ b/services/datamanager/loggerutil/loggerutil.go @@ -5,15 +5,45 @@ package loggerutil import ( "git.curoverse.com/arvados.git/sdk/go/logger" "log" + "os" + "runtime" "time" ) -// Assumes you haven't already called arvLogger.Edit()! -// If you have called arvLogger.Edit() this method will hang waiting -// for the lock you're already holding. +// Useful to call at the begining of execution to log info about the +// current run. +func LogRunInfo(arvLogger *logger.Logger) { + if arvLogger != nil { + now := time.Now() + arvLogger.Update(func(p map[string]interface{}, e map[string]interface{}) { + runInfo := make(map[string]interface{}) + runInfo["time_started"] = now + runInfo["args"] = os.Args + hostname, err := os.Hostname() + if err != nil { + runInfo["hostname_error"] = err.Error() + } else { + runInfo["hostname"] = hostname + } + runInfo["pid"] = os.Getpid() + p["run_info"] = runInfo + }) + } +} + +// A LogMutator that records the current memory usage. This is most useful as a logger write hook. +// +// Assumes we already have a map named "run_info" in properties. LogRunInfo() can create such a map for you if you call it. +func LogMemoryAlloc(p map[string]interface{}, e map[string]interface{}) { + runInfo := p["run_info"].(map[string]interface{}) + var memStats runtime.MemStats + runtime.ReadMemStats(&memStats) + runInfo["alloc_bytes_in_use"] = memStats.Alloc +} + func FatalWithMessage(arvLogger *logger.Logger, message string) { if arvLogger != nil { - arvLogger.ForceUpdate(func(p map[string]interface{}, e map[string]interface{}) { + arvLogger.FinalUpdate(func(p map[string]interface{}, e map[string]interface{}) { p["FATAL"] = message p["run_info"].(map[string]interface{})["time_finished"] = time.Now() })