func main()

in cmd/apmbench/main.go [18:83]


func main() {
	flag.Parse()

	logger, err := setupLogger()
	if err != nil {
		log.Fatalf("failed to setup logger: %v", err)
	}

	extraMetrics := func(b *testing.B) {}
	resetStoreFunc := func() {}
	if cfg.BenchmarkTelemetryEndpoint != "" {
		telemetry := telemetry{endpoint: cfg.BenchmarkTelemetryEndpoint}
		extraMetrics = func(b *testing.B) {
			// TODO (lahsivjar): get a context with timeout based on test timeout
			if err := assertCleanupState(context.Background(), telemetry, logger); err != nil {
				logger.Warn(
					"failed to get cleanup metric, continuing without cleanup",
					zap.Error(err),
				)
			}
			m, err := telemetry.GetAll()
			if err != nil {
				logger.Warn(
					"failed to retrive benchmark metrics, extra metrics will not be reported",
					zap.Error(err),
				)
				return
			}
			// extra metrics may be aggregated by a grouping key. We can sum all the
			// values for the grouping key to get the final benchmark results.
			for unit, grp := range m {
				var total float64
				for _, val := range grp {
					total += val
				}
				b.ReportMetric(total, unit)
			}
		}
		resetStoreFunc = func() {
			if err := telemetry.Reset(); err != nil {
				logger.Warn(
					"failed to reset store, benchmark report may be corrupted",
					zap.Error(err),
				)
			}
		}
	}
	// Run benchmarks
	if err := Run(
		extraMetrics,
		resetStoreFunc,
		Benchmark1000Transactions,
		BenchmarkAgentAll,
		BenchmarkAgentGo,
		BenchmarkAgentNodeJS,
		BenchmarkAgentPython,
		BenchmarkAgentRuby,
		Benchmark10000AggregationGroups,
		BenchmarkOTLPTraces,
		BenchmarkOTLPLogs,
		BenchmarkOTLPMetrics,
	); err != nil {
		logger.Fatal("failed to run benchmarks", zap.Error(err))
	}
	logger.Info("finished running benchmarks")
}