github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/pkg/model/logstore/reader.go (about) 1 package logstore 2 3 import "sync" 4 5 // Thread-safe reading a log store, outside of the Store state loop. 6 type Reader struct { 7 mu *sync.RWMutex 8 store *LogStore 9 } 10 11 func NewReader(mu *sync.RWMutex, store *LogStore) Reader { 12 return Reader{mu: mu, store: store} 13 } 14 15 func (r Reader) Checkpoint() Checkpoint { 16 if r.store == nil { 17 return 0 18 } 19 20 r.mu.RLock() 21 defer r.mu.RUnlock() 22 return r.store.Checkpoint() 23 } 24 25 func (r Reader) Empty() bool { 26 if r.store == nil { 27 return true 28 } 29 30 r.mu.RLock() 31 defer r.mu.RUnlock() 32 return r.store.Empty() 33 } 34 35 func (r Reader) String() string { 36 if r.store == nil { 37 return "" 38 } 39 40 r.mu.RLock() 41 defer r.mu.RUnlock() 42 return r.store.String() 43 } 44 45 func (r Reader) ContinuingString(c Checkpoint) string { 46 if r.store == nil { 47 return "" 48 } 49 50 r.mu.RLock() 51 defer r.mu.RUnlock() 52 return r.store.ContinuingString(c) 53 } 54 55 func (r Reader) ContinuingLines(c Checkpoint) []LogLine { 56 if r.store == nil { 57 return nil 58 } 59 60 r.mu.RLock() 61 defer r.mu.RUnlock() 62 return r.store.ContinuingLines(c) 63 } 64 65 func (r Reader) Tail(n int) string { 66 if r.store == nil { 67 return "" 68 } 69 70 r.mu.RLock() 71 defer r.mu.RUnlock() 72 return r.store.Tail(n) 73 } 74 75 func (r Reader) TailSpan(n int, spanID SpanID) string { 76 if r.store == nil { 77 return "" 78 } 79 80 r.mu.RLock() 81 defer r.mu.RUnlock() 82 return r.store.TailSpan(n, spanID) 83 } 84 85 func (r Reader) Warnings(spanID SpanID) []string { 86 if r.store == nil { 87 return nil 88 } 89 90 r.mu.RLock() 91 defer r.mu.RUnlock() 92 return r.store.Warnings(spanID) 93 }