From 43ccdea8256741646e67642a452f7b2cec961373 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Sat, 29 Mar 2025 20:06:17 +0100 Subject: [PATCH 1/3] Docker: Stop record when session failure Signed-off-by: Viet Nguyen Duc --- Video/video.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Video/video.sh b/Video/video.sh index 6413e69a8a..0afd885709 100755 --- a/Video/video.sh +++ b/Video/video.sh @@ -239,7 +239,7 @@ else wait_for_api_respond while curl --noproxy "*" -H "Authorization: Basic ${BASIC_AUTH}" -sk --request GET ${NODE_STATUS_ENDPOINT} >/tmp/status.json; do - session_id=$(jq -r "${JQ_SESSION_ID_QUERY}" /tmp/status.json) + session_id=$(jq -e "${JQ_SESSION_ID_QUERY}" /tmp/status.json || echo "null") if [[ "$session_id" != "null" && "$session_id" != "" && "$session_id" != "reserved" && "$recording_started" = "false" ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Session: $session_id is created" return_list=($(bash ${VIDEO_CONFIG_DIRECTORY}/video_graphQLQuery.sh "$session_id")) From 3c1bd49527971d44e3df8d780ec0c93e2f3b2352 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Sat, 29 Mar 2025 20:06:17 +0100 Subject: [PATCH 2/3] Update func in video recording Signed-off-by: Viet Nguyen Duc --- Video/video.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Video/video.sh b/Video/video.sh index 6413e69a8a..837e33f9db 100755 --- a/Video/video.sh +++ b/Video/video.sh @@ -182,7 +182,6 @@ function wait_for_file_integrity() { function stop_if_recording_inprogress() { if [[ "$recording_started" = "true" ]] || check_if_ffmpeg_running; then stop_recording - wait_for_file_integrity fi } @@ -223,7 +222,6 @@ if [[ "${VIDEO_UPLOAD_ENABLED}" != "true" ]] && [[ "${VIDEO_FILE_NAME}" != "auto if ps -p $FFMPEG_PID >/dev/null; then wait $FFMPEG_PID fi - wait_for_file_integrity else trap graceful_exit_force SIGTERM SIGINT EXIT @@ -239,7 +237,7 @@ else wait_for_api_respond while curl --noproxy "*" -H "Authorization: Basic ${BASIC_AUTH}" -sk --request GET ${NODE_STATUS_ENDPOINT} >/tmp/status.json; do - session_id=$(jq -r "${JQ_SESSION_ID_QUERY}" /tmp/status.json) + session_id=$(jq -e "${JQ_SESSION_ID_QUERY}" /tmp/status.json || echo "null") if [[ "$session_id" != "null" && "$session_id" != "" && "$session_id" != "reserved" && "$recording_started" = "false" ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Session: $session_id is created" return_list=($(bash ${VIDEO_CONFIG_DIRECTORY}/video_graphQLQuery.sh "$session_id")) @@ -263,7 +261,6 @@ else sleep ${poll_interval} elif [[ "$session_id" != "$prev_session_id" && "$recording_started" = "true" ]]; then stop_recording - wait_for_file_integrity if [[ $max_recorded_count -gt 0 ]] && [[ $recorded_count -ge $max_recorded_count ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Node will be drained since max sessions reached count number ($max_recorded_count)" exit From 00bb321fc0cd0be090d72bc35489c3f4154f59ef Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Sat, 5 Apr 2025 18:19:27 +0700 Subject: [PATCH 3/3] Update func in video recording Signed-off-by: Viet Nguyen Duc --- .../actions/get-latest-upstream/action.yml | 2 +- .github/workflows/docker-test.yml | 4 +-- Makefile | 2 +- Video/video.sh | 35 +++++++++---------- tests/charts/make/chart_test.sh | 7 ++++ 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/.github/actions/get-latest-upstream/action.yml b/.github/actions/get-latest-upstream/action.yml index 1cbb7a73c4..156ffec885 100644 --- a/.github/actions/get-latest-upstream/action.yml +++ b/.github/actions/get-latest-upstream/action.yml @@ -25,7 +25,7 @@ runs: RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == false)] | .[0].tag_name') else echo "Getting the latest Nightly release." - RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == true)] | .[0].tag_name') + RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == true)] | .[0].tag_name' || echo "") if [ -z "${RELEASE}" ]; then echo "Nightly release not found, getting the latest stable release." RELEASE=$(curl -s -H "$AUTH_HEADER" https://api.github.com/repos/SeleniumHQ/selenium/releases | jq -r '[.[] | select(.prerelease == false)] | .[0].tag_name') diff --git a/.github/workflows/docker-test.yml b/.github/workflows/docker-test.yml index c214ce28f3..e55138d04d 100644 --- a/.github/workflows/docker-test.yml +++ b/.github/workflows/docker-test.yml @@ -252,7 +252,7 @@ jobs: if: contains(matrix.os, 'arm') == false uses: nick-invision/retry@master with: - timeout_minutes: 40 + timeout_minutes: 90 max_attempts: 2 retry_wait_seconds: 60 command: | @@ -261,7 +261,7 @@ jobs: if: contains(matrix.os, 'arm') == true uses: nick-invision/retry@master with: - timeout_minutes: 40 + timeout_minutes: 90 max_attempts: 2 retry_wait_seconds: 60 command: | diff --git a/Makefile b/Makefile index bdd73f143d..d6bc0dae30 100644 --- a/Makefile +++ b/Makefile @@ -951,7 +951,7 @@ chart_render_template: RENDER_HELM_TEMPLATE_ONLY=true NAMESPACE=$(NAME) KEDA_TAG_VERSION=$(KEDA_TAG_VERSION) BUILD_DATE=$(BUILD_DATE) make chart_test_autoscaling_disabled chart_test_autoscaling_deployment_https chart_test_autoscaling_deployment chart_test_autoscaling_job_https chart_test_autoscaling_job_hostname chart_test_autoscaling_job chart_test_autoscaling_playwright_connect_grid chart_test_autoscaling_disabled: - PLATFORMS=$(PLATFORMS) TEST_CHROMIUM=true RELEASE_NAME=selenium SELENIUM_GRID_AUTOSCALING=false CHART_ENABLE_TRACING=true TEST_PATCHED_KEDA=$(TEST_PATCHED_KEDA) TEST_CUSTOM_SPECIFIC_NAME=true \ + PLATFORMS=$(PLATFORMS) TEST_CHROMIUM=true RELEASE_NAME=selenium SELENIUM_GRID_AUTOSCALING=false CHART_ENABLE_TRACING=true TEST_PATCHED_KEDA=$(TEST_PATCHED_KEDA) TEST_CUSTOM_SPECIFIC_NAME=true SELENIUM_GRID_MONITORING=false \ SECURE_INGRESS_ONLY_GENERATE=true SELENIUM_GRID_PROTOCOL=https SELENIUM_GRID_HOST=$$(hostname -I | cut -d' ' -f1) SELENIUM_GRID_PORT=443 EXTERNAL_UPLOADER_CONFIG=true \ VERSION=$(TAG_VERSION) VIDEO_TAG=$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) KEDA_BASED_NAME=$(KEDA_BASED_NAME) KEDA_BASED_TAG=$(KEDA_BASED_TAG) NAMESPACE=$(NAMESPACE) BINDING_VERSION=$(BINDING_VERSION) BASE_VERSION=$(BASE_VERSION) \ TEMPLATE_OUTPUT_FILENAME="k8s_nodeChromium_enableTracing_secureIngress_generateCerts_ingressPublicIP_subPath.yaml" \ diff --git a/Video/video.sh b/Video/video.sh index b045680b51..dfc9e0defe 100755 --- a/Video/video.sh +++ b/Video/video.sh @@ -145,6 +145,7 @@ function stop_recording() { stop_ffmpeg echo "$(date -u +"${ts_format}") [${process_name}] - Video recording stopped" recorded_count=$((recorded_count + 1)) + recording_started="false" if [[ "${VIDEO_UPLOAD_ENABLED}" = "true" ]] && [[ -n "${UPLOAD_DESTINATION_PREFIX}" ]]; then upload_destination=${UPLOAD_DESTINATION_PREFIX}/${video_file_name} echo "$(date -u +"${ts_format}") [${process_name}] - Add to pipe a signal Uploading video to $upload_destination" @@ -152,7 +153,6 @@ function stop_recording() { elif [[ "${VIDEO_UPLOAD_ENABLED}" = "true" ]] && [[ -z "${UPLOAD_DESTINATION_PREFIX}" ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Upload destination not known since UPLOAD_DESTINATION_PREFIX is not set. Continue without uploading." fi - recording_started="false" } function check_if_ffmpeg_running() { @@ -237,7 +237,7 @@ else wait_for_api_respond while curl --noproxy "*" -H "Authorization: Basic ${BASIC_AUTH}" -sk --request GET ${NODE_STATUS_ENDPOINT} >/tmp/status.json; do - session_id=$(jq -e "${JQ_SESSION_ID_QUERY}" /tmp/status.json || echo "null") + session_id=$(jq -r "${JQ_SESSION_ID_QUERY}" /tmp/status.json) if [[ "$session_id" != "null" && "$session_id" != "" && "$session_id" != "reserved" && "$recording_started" = "false" ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Session: $session_id is created" return_list=($(bash ${VIDEO_CONFIG_DIRECTORY}/video_graphQLQuery.sh "$session_id")) @@ -245,20 +245,21 @@ else video_file_name="${return_list[1]}.mp4" endpoint_url="${return_list[2]}" /opt/bin/validate_endpoint.sh "${endpoint_url}" "true" - echo "$(date -u +"${ts_format}") [${process_name}] - Start recording: $caps_se_video_record, video file name: $video_file_name" - log_node_response - fi - if [[ "$session_id" != "null" && "$session_id" != "" && "$session_id" != "reserved" && "$recording_started" = "false" && "$caps_se_video_record" = "true" ]]; then - video_file="${VIDEO_FOLDER}/$video_file_name" - echo "$(date -u +"${ts_format}") [${process_name}] - Starting to record video" - ffmpeg -hide_banner -loglevel warning -flags low_delay -threads 2 -fflags nobuffer+genpts -strict experimental -y -f x11grab \ - -video_size ${VIDEO_SIZE} -r ${FRAME_RATE} -i ${DISPLAY} ${SE_AUDIO_SOURCE} -codec:v ${CODEC} ${PRESET} -pix_fmt yuv420p "$video_file" & - FFMPEG_PID=$! - if ps -p $FFMPEG_PID >/dev/null; then - recording_started="true" + if [[ "$caps_se_video_record" = "true" ]]; then + echo "$(date -u +"${ts_format}") [${process_name}] - Start recording: $caps_se_video_record, video file name: $video_file_name" + log_node_response + video_file="${VIDEO_FOLDER}/$video_file_name" + echo "$(date -u +"${ts_format}") [${process_name}] - Starting to record video" + ffmpeg -hide_banner -loglevel warning -flags low_delay -threads 2 -fflags nobuffer+genpts -strict experimental -y -f x11grab \ + -video_size ${VIDEO_SIZE} -r ${FRAME_RATE} -i ${DISPLAY} ${SE_AUDIO_SOURCE} -codec:v ${CODEC} ${PRESET} -pix_fmt yuv420p "$video_file" & + FFMPEG_PID=$! + if ps -p $FFMPEG_PID >/dev/null; then + recording_started="true" + prev_session_id=$session_id + fi + echo "$(date -u +"${ts_format}") [${process_name}] - Video recording started" + sleep ${poll_interval} fi - echo "$(date -u +"${ts_format}") [${process_name}] - Video recording started" - sleep ${poll_interval} elif [[ "$session_id" != "$prev_session_id" && "$recording_started" = "true" ]]; then stop_recording if [[ $max_recorded_count -gt 0 ]] && [[ $recorded_count -ge $max_recorded_count ]]; then @@ -268,10 +269,8 @@ else elif [[ $recording_started = "true" ]]; then echo "$(date -u +"${ts_format}") [${process_name}] - Video recording in progress" sleep ${poll_interval} - else - sleep ${poll_interval} fi - prev_session_id=$session_id done + stop_if_recording_inprogress echo "$(date -u +"${ts_format}") [${process_name}] - Node API is not responding now, exiting..." fi diff --git a/tests/charts/make/chart_test.sh b/tests/charts/make/chart_test.sh index 068a231d4f..66cade8b9a 100755 --- a/tests/charts/make/chart_test.sh +++ b/tests/charts/make/chart_test.sh @@ -160,6 +160,7 @@ if [ "${TEST_UPGRADE_CHART}" != "true" ] && [ "${RENDER_HELM_TEMPLATE_ONLY}" != kubectl create ns ${SELENIUM_NAMESPACE} || true kubectl apply -n ${SELENIUM_NAMESPACE} -f ${LOCAL_PVC_YAML} kubectl describe pod,svc,pv,pvc -n ${SELENIUM_NAMESPACE} -l app=ftp-server + kubectl delete pod -n ${SELENIUM_NAMESPACE} -l app=ftp-server --force --grace-period=0 fi if [ "${TEST_NAME_OVERRIDE}" = "true" ]; then @@ -472,6 +473,12 @@ elif [ "${TEST_EXISTING_KEDA}" != "true" ]; then fi fi +if [ "${TEST_UPGRADE_CHART}" != "true" ]; then + HELM_COMMAND_SET_IMAGES="${HELM_COMMAND_SET_IMAGES} \ + --set autoscaling.patchObjectFinalizers.enabled=false \ + " +fi + HELM_COMMAND_ARGS="${RELEASE_NAME} \ ${HELM_COMMAND_SET_BASE_VALUES} \ ${HELM_COMMAND_SET_AUTOSCALING} \