X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2d2f3bed79f9504d15503277056feb394c12dd7c..0662b235357dd40b5d27efd06b60044ddcec06f6:/services/datamanager/loggerutil/loggerutil.go diff --git a/services/datamanager/loggerutil/loggerutil.go b/services/datamanager/loggerutil/loggerutil.go index f97f7c16c4..8c655cd5ff 100644 --- a/services/datamanager/loggerutil/loggerutil.go +++ b/services/datamanager/loggerutil/loggerutil.go @@ -5,18 +5,47 @@ 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 := logger.GetOrCreateMap(p, "run_info") + runInfo["started_at"] = 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() + }) + } +} + +// A LogMutator that records the current memory usage. This is most useful as a logger write hook. +func LogMemoryAlloc(p map[string]interface{}, e map[string]interface{}) { + runInfo := logger.GetOrCreateMap(p, "run_info") + var memStats runtime.MemStats + runtime.ReadMemStats(&memStats) + runInfo["memory_bytes_in_use"] = memStats.Alloc + runInfo["memory_bytes_reserved"] = memStats.Sys +} + func FatalWithMessage(arvLogger *logger.Logger, message string) { if arvLogger != nil { - properties, _ := arvLogger.Edit() - properties["FATAL"] = message - properties["run_info"].(map[string]interface{})["end_time"] = time.Now() - arvLogger.ForceRecord() + arvLogger.FinalUpdate(func(p map[string]interface{}, e map[string]interface{}) { + p["FATAL"] = message + runInfo := logger.GetOrCreateMap(p, "run_info") + runInfo["finished_at"] = time.Now() + }) } log.Fatalf(message)