in loadgen/cmd/otelbench/main.go [110:172]
func main() {
testing.Init()
if err := Init(); err != nil {
fmt.Fprintln(os.Stderr, err)
flag.Usage()
os.Exit(2)
}
flag.Parse()
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
// TODO(carsonip): configurable warm up
var maxLen int
for _, concurrency := range Config.ConcurrencyList {
for _, signal := range getSignals() {
for _, exporter := range getExporters() {
maxLen = max(maxLen, len(fullBenchmarkName(signal, exporter, concurrency)))
}
}
}
fetcher, ignore, err := newElasticsearchStatsFetcher(elasticsearchTelemetryConfig(Config.Telemetry))
if err != nil {
fmt.Fprintln(os.Stderr, err)
if !ignore {
os.Exit(2)
}
}
for _, concurrency := range Config.ConcurrencyList {
for _, signal := range getSignals() {
for _, exporter := range getExporters() {
benchName := fullBenchmarkName(signal, exporter, concurrency)
t := time.Now().UTC()
result := runBench(ctx, signal, exporter, concurrency, func(b *testing.B) {
if fetcher == nil {
return
}
// after each run wait a bit to capture late metric arrivals
time.Sleep(10 * time.Second)
stats, err := fetcher.FetchStats(ctx, t, time.Now().UTC())
if err != nil {
fmt.Fprintf(os.Stderr, "error while fetching remote stats %s", err)
return
}
for unit, n := range stats {
b.ReportMetric(n, unit)
}
})
// write benchmark result to stdout, as stderr may be cluttered with collector logs
fmt.Printf("%-*s\t%s\n", maxLen, benchName, result.String())
// break early if context was canceled
select {
case <-ctx.Done():
return
default:
}
}
}
}
}