go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/logger/buffer.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package logger 5 6 import ( 7 "bytes" 8 "io" 9 "sync" 10 ) 11 12 func NewBufferedWriter(out io.Writer) io.Writer { 13 return &BufferedWriter{ 14 out: out, 15 } 16 } 17 18 type BufferedWriter struct { 19 out io.Writer 20 buf bytes.Buffer 21 paused bool 22 lock sync.RWMutex 23 } 24 25 func (bw *BufferedWriter) Pause() { 26 bw.lock.Lock() 27 defer bw.lock.Unlock() 28 29 bw.paused = true 30 } 31 32 func (bw *BufferedWriter) Resume() { 33 bw.lock.Lock() 34 defer bw.lock.Unlock() 35 36 if bw.paused == false { 37 return 38 } 39 bw.paused = false 40 bw.out.Write(bw.buf.Bytes()) 41 bw.buf = bytes.Buffer{} 42 } 43 44 func (bw *BufferedWriter) Write(p []byte) (n int, err error) { 45 bw.lock.RLock() 46 defer bw.lock.RUnlock() 47 48 if bw.paused { 49 return bw.buf.Write(p) 50 } 51 return bw.out.Write(p) 52 }