func (s *WorkerTestSuite) TestIter(t *C) { tickChan := make(chan time.Time, 1) i := perfschema.NewIter(pct.NewLogger(s.logChan, "iter"), tickChan) t.Assert(i, NotNil) iterChan := i.IntervalChan() t.Assert(iterChan, NotNil) i.Start() defer i.Stop() t1, _ := time.Parse("2006-01-02 15:04:05", "2015-01-01 00:01:00") t2, _ := time.Parse("2006-01-02 15:04:05", "2015-01-01 00:02:00") t3, _ := time.Parse("2006-01-02 15:04:05", "2015-01-01 00:03:00") tickChan <- t1 got := <-iterChan t.Check(got, DeepEquals, &qan.Interval{Number: 1, StartTime: time.Time{}, StopTime: t1}) tickChan <- t2 got = <-iterChan t.Check(got, DeepEquals, &qan.Interval{Number: 2, StartTime: t1, StopTime: t2}) tickChan <- t3 got = <-iterChan t.Check(got, DeepEquals, &qan.Interval{Number: 3, StartTime: t2, StopTime: t3}) }
func (f *RealIntervalIterFactory) Make(analyzerType string, mysqlConn mysql.Connector, tickChan chan time.Time) qan.IntervalIter { switch analyzerType { case "slowlog": // The interval iter gets the slow log file (@@global.slow_query_log_file) // every tick because it can change (not typical, but possible). If it changes, // the start offset is reset to 0 for the new file. getSlowLogFunc := func() (string, error) { if err := mysqlConn.Connect(1); err != nil { return "", err } defer mysqlConn.Close() // Slow log file can be absolute or relative. If it's relative, // then prepend the datadir. dataDir := mysqlConn.GetGlobalVarString("datadir") filename := AbsDataFile(dataDir, mysqlConn.GetGlobalVarString("slow_query_log_file")) return filename, nil } return slowlog.NewIter(pct.NewLogger(f.logChan, "qan-interval"), getSlowLogFunc, tickChan) case "perfschema": return perfschema.NewIter(pct.NewLogger(f.logChan, "qan-interval"), tickChan) default: panic("Invalid analyzerType: " + analyzerType) } }