From 229bc04133551de280f41bf2352642a104308a2d Mon Sep 17 00:00:00 2001 From: Noah Stapp Date: Fri, 2 May 2025 15:59:05 -0400 Subject: [PATCH 1/3] PYTHON-5358 - Switch to supported Perf usage in EVG --- .evergreen/generated_configs/functions.yml | 18 +++++++++++++-- .evergreen/scripts/generate_config.py | 9 +++++--- .evergreen/scripts/perf-submission-setup.sh | 15 +++++++++++++ .evergreen/scripts/perf-submission.sh | 25 +++++++++++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100755 .evergreen/scripts/perf-submission-setup.sh create mode 100755 .evergreen/scripts/perf-submission.sh diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index a28cd2596e..bfe3156392 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -162,9 +162,23 @@ functions: # Send dashboard data send dashboard data: - - command: perf.send + - command: subprocess.exec + params: + binary: bash + args: + - .evergreen/scripts/perf-submission-setup.sh + working_dir: src + type: test + - command: expansions.update params: - file: src/results.json + file: src/expansion.yml + - command: subprocess.exec + params: + binary: bash + args: + - .evergreen/scripts/perf-submission.sh + working_dir: src + type: test # Setup system setup system: diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index e13976d8c7..564f703288 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -41,7 +41,6 @@ ec2_assume_role, expansions_update, git_get_project, - perf_send, ) from shrub.v3.evg_task import EvgTask, EvgTaskDependency, EvgTaskRef @@ -1103,8 +1102,12 @@ def create_attach_benchmark_test_results_func(): def create_send_dashboard_data_func(): - cmd = perf_send(file="src/results.json") - return "send dashboard data", [cmd] + cmds = [ + get_subprocess_exec(args=[".evergreen/scripts/perf-submission-setup.sh"]), + expansions_update(file="src/expansion.yml"), + get_subprocess_exec(args=[".evergreen/scripts/perf-submission.sh"]), + ] + return "send dashboard data", cmds mod = sys.modules[__name__] diff --git a/.evergreen/scripts/perf-submission-setup.sh b/.evergreen/scripts/perf-submission-setup.sh new file mode 100755 index 0000000000..ecb38751a5 --- /dev/null +++ b/.evergreen/scripts/perf-submission-setup.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# We use the requester expansion to determine whether the data is from a mainline evergreen run or not + +set -eu + +# shellcheck disable=SC2154 +if [ "${requester}" == "commit" ]; then + echo "is_mainline: true" >> expansion.yml +else + echo "is_mainline: false" >> expansion.yml +fi + +# We parse the username out of the order_id as patches append that in and SPS does not need that information +# shellcheck disable=SC2154 +echo "parsed_order_id: $(echo "${revision_order_id}" | awk -F'_' '{print $NF}')" >> expansion.yml diff --git a/.evergreen/scripts/perf-submission.sh b/.evergreen/scripts/perf-submission.sh new file mode 100755 index 0000000000..815bc2ca55 --- /dev/null +++ b/.evergreen/scripts/perf-submission.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# We use the requester expansion to determine whether the data is from a mainline evergreen run or not + +set -eu + +# Submit the performance data to the SPS endpoint +# shellcheck disable=SC2154 +response=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X 'POST' \ + "https://performance-monitoring-api.corp.mongodb.com/raw_perf_results/cedar_report?project=${project_id}&version=${version_id}&variant=${build_variant}&order=${parsed_order_id}&task_name=${task_name}&task_id=${task_id}&execution=${execution}&mainline=${is_mainline}" \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d @performance_results.json) + +http_status=$(echo "$response" | grep "HTTP_STATUS" | awk -F':' '{print $2}') +response_body=$(echo "$response" | sed '/HTTP_STATUS/d') + +# We want to throw an error if the data was not successfully submitted +if [ "$http_status" -ne 200 ]; then + echo "Error: Received HTTP status $http_status" + echo "Response Body: $response_body" + exit 1 +fi + +echo "Response Body: $response_body" +echo "HTTP Status: $http_status" From 0e33e17ddebe82cde6f79e87e4cd88a3f7dc2c1a Mon Sep 17 00:00:00 2001 From: Noah Stapp Date: Mon, 5 May 2025 10:58:48 -0400 Subject: [PATCH 2/3] Fix config --- .evergreen/generated_configs/functions.yml | 22 +++++++++++++++++++++ .evergreen/scripts/generate_config.py | 20 +++++++++++++++++-- .evergreen/scripts/perf-submission-setup.sh | 2 +- .evergreen/scripts/perf-submission.sh | 4 ++-- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index bfe3156392..7d9ab2df3b 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -168,6 +168,17 @@ functions: args: - .evergreen/scripts/perf-submission-setup.sh working_dir: src + include_expansions_in_env: + - requester + - revision_order_id + - project_id + - version_id + - build_variant + - parsed_order_id + - task_name + - task_id + - execution + - is_mainline type: test - command: expansions.update params: @@ -178,6 +189,17 @@ functions: args: - .evergreen/scripts/perf-submission.sh working_dir: src + include_expansions_in_env: + - requester + - revision_order_id + - project_id + - version_id + - build_variant + - parsed_order_id + - task_name + - task_id + - execution + - is_mainline type: test # Setup system diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 564f703288..c54908f5d7 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -1102,10 +1102,26 @@ def create_attach_benchmark_test_results_func(): def create_send_dashboard_data_func(): + includes = [ + "requester", + "revision_order_id", + "project_id", + "version_id", + "build_variant", + "parsed_order_id", + "task_name", + "task_id", + "execution", + "is_mainline", + ] cmds = [ - get_subprocess_exec(args=[".evergreen/scripts/perf-submission-setup.sh"]), + get_subprocess_exec( + include_expansions_in_env=includes, args=[".evergreen/scripts/perf-submission-setup.sh"] + ), expansions_update(file="src/expansion.yml"), - get_subprocess_exec(args=[".evergreen/scripts/perf-submission.sh"]), + get_subprocess_exec( + include_expansions_in_env=includes, args=[".evergreen/scripts/perf-submission.sh"] + ), ] return "send dashboard data", cmds diff --git a/.evergreen/scripts/perf-submission-setup.sh b/.evergreen/scripts/perf-submission-setup.sh index ecb38751a5..e18125f4a5 100755 --- a/.evergreen/scripts/perf-submission-setup.sh +++ b/.evergreen/scripts/perf-submission-setup.sh @@ -1,7 +1,7 @@ #!/bin/bash # We use the requester expansion to determine whether the data is from a mainline evergreen run or not -set -eu +set -x # shellcheck disable=SC2154 if [ "${requester}" == "commit" ]; then diff --git a/.evergreen/scripts/perf-submission.sh b/.evergreen/scripts/perf-submission.sh index 815bc2ca55..df492d70b1 100755 --- a/.evergreen/scripts/perf-submission.sh +++ b/.evergreen/scripts/perf-submission.sh @@ -1,7 +1,7 @@ #!/bin/bash # We use the requester expansion to determine whether the data is from a mainline evergreen run or not -set -eu +set -x # Submit the performance data to the SPS endpoint # shellcheck disable=SC2154 @@ -9,7 +9,7 @@ response=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X 'POST' \ "https://performance-monitoring-api.corp.mongodb.com/raw_perf_results/cedar_report?project=${project_id}&version=${version_id}&variant=${build_variant}&order=${parsed_order_id}&task_name=${task_name}&task_id=${task_id}&execution=${execution}&mainline=${is_mainline}" \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ - -d @performance_results.json) + -d @results.json) http_status=$(echo "$response" | grep "HTTP_STATUS" | awk -F':' '{print $2}') response_body=$(echo "$response" | sed '/HTTP_STATUS/d') From cce0cbf937863dff0341f999724670641548d75f Mon Sep 17 00:00:00 2001 From: Noah Stapp Date: Mon, 5 May 2025 13:36:30 -0400 Subject: [PATCH 3/3] Add metadata --- .evergreen/scripts/perf-submission-setup.sh | 2 +- .evergreen/scripts/perf-submission.sh | 2 +- test/performance/async_perf_test.py | 10 +++++++++- test/performance/perf_test.py | 10 +++++++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/perf-submission-setup.sh b/.evergreen/scripts/perf-submission-setup.sh index e18125f4a5..ecb38751a5 100755 --- a/.evergreen/scripts/perf-submission-setup.sh +++ b/.evergreen/scripts/perf-submission-setup.sh @@ -1,7 +1,7 @@ #!/bin/bash # We use the requester expansion to determine whether the data is from a mainline evergreen run or not -set -x +set -eu # shellcheck disable=SC2154 if [ "${requester}" == "commit" ]; then diff --git a/.evergreen/scripts/perf-submission.sh b/.evergreen/scripts/perf-submission.sh index df492d70b1..f7c3ea6664 100755 --- a/.evergreen/scripts/perf-submission.sh +++ b/.evergreen/scripts/perf-submission.sh @@ -1,7 +1,7 @@ #!/bin/bash # We use the requester expansion to determine whether the data is from a mainline evergreen run or not -set -x +set -eu # Submit the performance data to the SPS endpoint # shellcheck disable=SC2154 diff --git a/test/performance/async_perf_test.py b/test/performance/async_perf_test.py index 969437f9c9..6eb31ea4fe 100644 --- a/test/performance/async_perf_test.py +++ b/test/performance/async_perf_test.py @@ -144,7 +144,15 @@ async def asyncTearDown(self): }, }, "metrics": [ - {"name": "megabytes_per_sec", "type": "MEDIAN", "value": megabytes_per_sec}, + { + "name": "megabytes_per_sec", + "type": "MEDIAN", + "value": megabytes_per_sec, + "metadata": { + "improvement_direction": "up", + "measurement_unit": "megabytes_per_second", + }, + }, ], } ) diff --git a/test/performance/perf_test.py b/test/performance/perf_test.py index 39487eff6d..5688d28d2d 100644 --- a/test/performance/perf_test.py +++ b/test/performance/perf_test.py @@ -151,7 +151,15 @@ def tearDown(self): }, }, "metrics": [ - {"name": "megabytes_per_sec", "type": "MEDIAN", "value": megabytes_per_sec}, + { + "name": "megabytes_per_sec", + "type": "MEDIAN", + "value": megabytes_per_sec, + "metadata": { + "improvement_direction": "up", + "measurement_unit": "megabytes_per_second", + }, + }, ], } )