func (lsi *LogstreamInput) Run(ir p.InputRunner, h p.PluginHelper, stopChan chan chan bool, deliverer p.Deliverer, sRunner p.SplitterRunner) { if !sRunner.UseMsgBytes() { sRunner.SetPackDecorator(lsi.packDecorator) } lsi.ir = ir lsi.stopChan = stopChan lsi.deliverer = deliverer lsi.sRunner = sRunner var err error // Check for more data interval interval, _ := time.ParseDuration("250ms") tick := time.Tick(interval) ok := true for ok { // Clear our error err = nil // Attempt to read and deliver as many as we can. err = lsi.deliverRecords() // Save our position if the stream hasn't done so for us. if err != io.EOF { lsi.stream.SavePosition() } lsi.recordCount = 0 if err != nil && err != io.EOF { ir.LogError(err) } // Did our parser func get stopped? if lsi.stopped != nil { ok = false continue } // Wait for our next interval, stop if needed select { case lsi.stopped = <-stopChan: ok = false case <-tick: continue } } close(lsi.stopped) deliverer.Done() sRunner.Done() }