43 lines
891 B
Go
43 lines
891 B
Go
package status
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
// TailBuffer holds a bounded buffer of terminal output.
|
|
type TailBuffer struct {
|
|
mu sync.Mutex
|
|
buf strings.Builder
|
|
max int
|
|
}
|
|
|
|
// NewTailBuffer creates a new TailBuffer with the given maximum capacity in bytes.
|
|
func NewTailBuffer(max int) *TailBuffer {
|
|
return &TailBuffer{max: max}
|
|
}
|
|
|
|
// Append appends a string to the buffer, truncating from the front if it exceeds capacity.
|
|
func (tb *TailBuffer) Append(s string) {
|
|
tb.mu.Lock()
|
|
defer tb.mu.Unlock()
|
|
tb.buf.WriteString(s)
|
|
raw := tb.buf.String()
|
|
if len(raw) <= tb.max {
|
|
return
|
|
}
|
|
tb.buf.Reset()
|
|
tb.buf.WriteString(raw[len(raw)-tb.max:])
|
|
}
|
|
|
|
// String returns the contents of the buffer.
|
|
func (tb *TailBuffer) String() string {
|
|
tb.mu.Lock()
|
|
defer tb.mu.Unlock()
|
|
return tb.buf.String()
|
|
}
|
|
|
|
// Snapshot holds a snapshot of a terminal session.
|
|
type Snapshot struct {
|
|
Tail string
|
|
}
|