From b09aa7d5f7df428c47a3ad2b711d2a2742cbda8a Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Fri, 31 Mar 2023 11:59:11 +0200 Subject: [PATCH] Elasticsearch: Add benchmarks for processing of requests and responses (#65354) * Elasticsearch: Add benchmarks for processing of requests and responses * Update, use package variable to elimitnate possible optimization * Update, require no error --- pkg/tsdb/elasticsearch/response_bench_test.go | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 pkg/tsdb/elasticsearch/response_bench_test.go diff --git a/pkg/tsdb/elasticsearch/response_bench_test.go b/pkg/tsdb/elasticsearch/response_bench_test.go new file mode 100644 index 00000000000..e5ffd1ae57f --- /dev/null +++ b/pkg/tsdb/elasticsearch/response_bench_test.go @@ -0,0 +1,91 @@ +package elasticsearch + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +// To avoid compiler optimizations eliminating the function under test +// we are storing the result to a package level variable +var Result queryDataTestResult + +func BenchmarkSimpleMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_simple") + responseBytes := getResponseBytesFromTestsDataFile("metric_simple") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkComplexMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_complex") + responseBytes := getResponseBytesFromTestsDataFile("metric_complex") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkMultiMetricResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("metric_multi") + responseBytes := getResponseBytesFromTestsDataFile("metric_multi") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkRawDataResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("raw_data") + responseBytes := getResponseBytesFromTestsDataFile("raw_data") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkRawDocumentResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("raw_document") + responseBytes := getResponseBytesFromTestsDataFile("raw_document") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func BenchmarkLogsResponse(b *testing.B) { + queriesBytes := getQueriesBytesFromTestsDataFile("logs") + responseBytes := getResponseBytesFromTestsDataFile("logs") + b.ResetTimer() + for i := 0; i < b.N; i++ { + result, err := queryDataTest(queriesBytes, responseBytes) + require.NoError(b, err) + Result = result + } +} + +func getQueriesBytesFromTestsDataFile(fileName string) []byte { + queriesName := filepath.Join("testdata_response", fileName+".queries.json") + queriesBytes, _ := os.ReadFile(filepath.Clean(queriesName)) + return queriesBytes +} + +func getResponseBytesFromTestsDataFile(fileName string) []byte { + responseName := filepath.Join("testdata_response", fileName+".response.json") + responseBytes, _ := os.ReadFile(filepath.Clean(responseName)) + return responseBytes +}