github.com/cloudfoundry-attic/ltc@v0.0.0-20151123212628-098adc7919fc/logs/fake_log_reader/fake_log_reader.go (about) 1 package fake_log_reader 2 3 import ( 4 "sync" 5 6 "github.com/cloudfoundry/sonde-go/events" 7 ) 8 9 type FakeLogReader struct { 10 sync.RWMutex 11 stopChan chan struct{} 12 logs []*events.LogMessage 13 errors []error 14 logTailStopped bool 15 appGuid string 16 } 17 18 func NewFakeLogReader() *FakeLogReader { 19 return &FakeLogReader{ 20 stopChan: make(chan struct{}), 21 } 22 } 23 24 func (f *FakeLogReader) TailLogs(appGuid string, logCallback func(*events.LogMessage), errorCallback func(error)) { 25 for _, log := range f.logs { 26 logCallback(log) 27 } 28 29 for _, err := range f.errors { 30 errorCallback(err) 31 } 32 33 f.Lock() 34 defer f.Unlock() 35 f.appGuid = appGuid 36 37 go func() { 38 select { 39 case <-f.stopChan: 40 f.Lock() 41 defer f.Unlock() 42 f.logTailStopped = true 43 return 44 } 45 }() 46 } 47 48 func (f *FakeLogReader) StopTailing() { 49 f.stopChan <- struct{}{} 50 close(f.stopChan) 51 } 52 53 func (f *FakeLogReader) GetAppGuid() string { 54 f.RLock() 55 defer f.RUnlock() 56 return f.appGuid 57 } 58 59 func (f *FakeLogReader) IsLogTailStopped() bool { 60 f.RLock() 61 defer f.RUnlock() 62 return f.logTailStopped 63 } 64 65 func (f *FakeLogReader) AddLog(log *events.LogMessage) { 66 f.logs = append(f.logs, log) 67 } 68 69 func (f *FakeLogReader) AddError(err error) { 70 f.errors = append(f.errors, err) 71 }