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
}
}
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) {
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