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")
}