X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/06d0338d638ce74b51ca3cfe10523e5515269fdf..f8067dd18b72705f3317e85745e87cffc9e25313:/services/crunchstat/crunchstat.go diff --git a/services/crunchstat/crunchstat.go b/services/crunchstat/crunchstat.go index 91027d7677..e35e98aa59 100644 --- a/services/crunchstat/crunchstat.go +++ b/services/crunchstat/crunchstat.go @@ -34,11 +34,19 @@ type Cgroup struct { cid string } -func CopyPipeToChan(in io.Reader, out chan string, done chan<- bool) { +func CopyPipeToChan(in io.ReadCloser, out chan string, done chan<- bool) { + defer in.Close() + + // TODO(twp): handle long input records gracefully, if possible + // without killing the child task (#4889) + // s := bufio.NewScanner(in) for s.Scan() { out <- s.Text() } + if s.Err() != nil { + out <- fmt.Sprintf("crunchstat: line buffering error: %s", s.Err()) + } done <- true } @@ -49,11 +57,12 @@ func CopyChanToPipe(in <-chan string, out io.Writer) { } var logChan chan string + func LogPrintf(format string, args ...interface{}) { if logChan == nil { return } - logChan <- fmt.Sprintf("crunchstat: " + format, args...) + logChan <- fmt.Sprintf("crunchstat: "+format, args...) } func ReadAllOrWarn(in *os.File) ([]byte, error) { @@ -192,7 +201,7 @@ func DoMemoryStats(cgroup Cgroup) { defer c.Close() b := bufio.NewScanner(c) thisSample := MemSample{time.Now(), make(map[string]int64)} - wantStats := [...]string{"cache", "pgmajfault", "rss"} + wantStats := [...]string{"cache", "swap", "pgmajfault", "rss"} for b.Scan() { var stat string var val int64 @@ -242,12 +251,12 @@ func DoNetworkStats(cgroup Cgroup, lastSample map[string]IoSample) { nextSample.txBytes = tx nextSample.rxBytes = rx var delta string - if lastSample, ok := lastSample[ifName]; ok { - interval := nextSample.sampleTime.Sub(lastSample.sampleTime).Seconds() + if prev, ok := lastSample[ifName]; ok { + interval := nextSample.sampleTime.Sub(prev.sampleTime).Seconds() delta = fmt.Sprintf(" -- interval %.4f seconds %d tx %d rx", interval, - tx-lastSample.txBytes, - rx-lastSample.rxBytes) + tx-prev.txBytes, + rx-prev.rxBytes) } LogPrintf("net:%s %d tx %d rx%s", ifName, tx, rx, delta) lastSample[ifName] = nextSample