func (s *Server) appendAuthService() { l := s.LogService.NewLogger("[noauth] ", log.LstdFlags) srv := noauth.NewService(l) s.AuthService = srv s.HTTPDService.Handler.AuthService = srv s.AppendService("auth", srv) }
// Generic Benchmark method func Bench(b *testing.B, tasksCount, pointCount, expectedProcessedCount int, tickScript, db, rp string, measurements ...string) { // Setup HTTPD service config := httpd.NewConfig() config.BindAddress = ":0" // Choose port dynamically config.LogEnabled = false httpdService := httpd.NewService(config, "localhost", logService.NewLogger("[http] ", log.LstdFlags), logService) httpdService.Handler.AuthService = noauth.NewService(logService.NewLogger("[noauth] ", log.LstdFlags)) err := httpdService.Open() if err != nil { b.Fatal(err) } writes := make([]struct { request *http.Request seeker io.Seeker }, len(measurements)) for i, m := range measurements { writes[i].request, writes[i].seeker = createWriteRequest(b, db, rp, m, pointCount) } dbrps := []kapacitor.DBRP{{Database: db, RetentionPolicy: rp}} b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { // Do not time setup b.StopTimer() tm := kapacitor.NewTaskMaster("bench", &LogService{}) tm.HTTPDService = httpdService tm.UDFService = nil tm.TaskStore = taskStore{} tm.DeadmanService = deadman{} tm.Open() httpdService.Handler.PointsWriter = tm tasks := createTasks(b, tm, tasksCount, tickScript, dbrps) // Seek writes back to beginning for _, write := range writes { write.seeker.Seek(0, 0) } wg := sync.WaitGroup{} wg.Add(len(writes)) // Time how long it takes to process all data b.StartTimer() for _, write := range writes { go func(writeRequest *http.Request, seeker io.Seeker) { defer wg.Done() responseRecorder := httptest.NewRecorder() httpdService.Handler.ServeHTTP(responseRecorder, writeRequest) if responseRecorder.Code != http.StatusNoContent { b.Fatalf("failed to write test data %s", responseRecorder.Body.String()) } }(write.request, write.seeker) } wg.Wait() tm.Drain() for _, t := range tasks { t.Wait() } // Do not time cleanup b.StopTimer() // Validate that tasks did not error out and processed all points validateTasks(b, tm, tasks, expectedProcessedCount) tm.Close() } }