github-actions[bot]
Deploy from 4dfd54f2
857a91b
Raw
History Blame Contribute Delete
992 Bytes
// Package logs provides a bounded log buffer and an event broadcast bus used
// for streaming job lifecycle events over SSE.
package logs
import "sync"
// Ring is a byte-bounded buffer that keeps the most recent log output. Once the
// configured limit is exceeded, the oldest bytes are dropped.
type Ring struct {
mu sync.Mutex
buf []byte
limit int
}
// NewRing creates a Ring that retains at most limit bytes.
func NewRing(limit int) *Ring {
if limit <= 0 {
limit = 1024 * 1024
}
return &Ring{limit: limit}
}
// Write appends p, dropping the oldest bytes if the limit is exceeded. It never
// returns an error so it satisfies io.Writer.
func (r *Ring) Write(p []byte) (int, error) {
r.mu.Lock()
defer r.mu.Unlock()
r.buf = append(r.buf, p...)
if len(r.buf) > r.limit {
r.buf = r.buf[len(r.buf)-r.limit:]
}
return len(p), nil
}
// String returns the retained log contents.
func (r *Ring) String() string {
r.mu.Lock()
defer r.mu.Unlock()
return string(r.buf)
}