func (p *SlowLogParser) sendEvent(inHeader bool, inQuery bool) { if p.opt.Debug { l.Println("send event") } // Make a new event and reset our metadata. defer func() { p.event = log.NewEvent() p.headerLines = 0 p.queryLines = 0 p.inHeader = inHeader p.inQuery = inQuery }() if _, ok := p.event.TimeMetrics["Query_time"]; !ok { if p.headerLines == 0 { l.Panicf("No Query_time in event at %d: %#v", p.lineOffset, p.event) } // Started parsing in header after Query_time. Throw away event. return } // Clean up the event. p.event.Db = strings.TrimSuffix(p.event.Db, ";\n") p.event.Query = strings.TrimSuffix(p.event.Query, ";") // Send the event. This will block. select { case p.eventChan <- p.event: case <-p.stopChan: p.stopped = true } }
// NewSlowLogParser returns a new SlowLogParser that reads from the open file. func NewSlowLogParser(file *os.File, opt log.Options) *SlowLogParser { p := &SlowLogParser{ file: file, opt: opt, // -- stopChan: make(chan bool, 1), eventChan: make(chan *log.Event), inHeader: false, inQuery: false, headerLines: 0, queryLines: 0, lineOffset: 0, bytesRead: opt.StartOffset, event: log.NewEvent(), } return p }