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  }