diff --git a/scaletest/templates/scaletest-runner/scripts/lib.sh b/scaletest/templates/scaletest-runner/scripts/lib.sh index a9df0a10eba0a..ec94e952fda3c 100644 --- a/scaletest/templates/scaletest-runner/scripts/lib.sh +++ b/scaletest/templates/scaletest-runner/scripts/lib.sh @@ -210,3 +210,33 @@ wait_baseline() { maybedryrun "$DRY_RUN" sleep $((s * 60)) PHASE_TYPE="phase-wait" end_phase } + +get_appearance() { + session_token=$CODER_USER_TOKEN + if [[ -f "${CODER_CONFIG_DIR}/session" ]]; then + session_token="$(<"${CODER_CONFIG_DIR}/session")" + fi + curl -sSL \ + -H "Coder-Session-Token: ${session_token}" \ + "${CODER_URL}/api/v2/appearance" +} +set_appearance() { + local json=$1 color=$2 message=$3 + + session_token=$CODER_USER_TOKEN + if [[ -f "${CODER_CONFIG_DIR}/session" ]]; then + session_token="$(<"${CODER_CONFIG_DIR}/session")" + fi + newjson="$( + jq \ + --arg color "${color}" \ + --arg message "${message}" \ + '. | .service_banner.message |= $message | .service_banner.background_color |= $color' <<<"${json}" + )" + maybedryrun "${DRY_RUN}" curl -sSL \ + -X PUT \ + -H 'Content-Type: application/json' \ + -H "Coder-Session-Token: ${session_token}" \ + --data "${newjson}" \ + "${CODER_URL}/api/v2/appearance" +} diff --git a/scaletest/templates/scaletest-runner/shutdown.sh b/scaletest/templates/scaletest-runner/shutdown.sh index 14d6023aaaa62..d5c81366b1217 100755 --- a/scaletest/templates/scaletest-runner/shutdown.sh +++ b/scaletest/templates/scaletest-runner/shutdown.sh @@ -8,6 +8,7 @@ set -e cleanup() { coder tokens remove scaletest_runner >/dev/null 2>&1 || true + rm -f "${CODER_CONFIG_DIR}/session" } trap cleanup EXIT @@ -16,3 +17,10 @@ annotate_grafana "workspace" "Agent stopping..." "${SCRIPTS_DIR}/cleanup.sh" shutdown annotate_grafana_end "workspace" "Agent running" + +appearance_json="$(get_appearance)" +service_banner_message=$(jq -r '.service_banner.message' <<<"${appearance_json}") +service_banner_message="${service_banner_message/% | */}" +service_banner_color="#4CD473" # Green. + +set_appearance "${appearance_json}" "${service_banner_color}" "${service_banner_message}" diff --git a/scaletest/templates/scaletest-runner/startup.sh b/scaletest/templates/scaletest-runner/startup.sh index df0f128b1ccd9..300ff40466b6f 100755 --- a/scaletest/templates/scaletest-runner/startup.sh +++ b/scaletest/templates/scaletest-runner/startup.sh @@ -21,6 +21,11 @@ fi # shellcheck disable=SC2153 source=scaletest/templates/scaletest-runner/scripts/lib.sh . "${SCRIPTS_DIR}/lib.sh" +appearance_json="$(get_appearance)" +service_banner_message=$(jq -r '.service_banner.message' <<<"${appearance_json}") +service_banner_message="${service_banner_message/% | */}" +service_banner_color="#D65D0F" # Orange. + annotate_grafana "workspace" "Agent running" # Ended in shutdown.sh. { @@ -55,8 +60,9 @@ annotate_grafana "workspace" "Agent running" # Ended in shutdown.sh. } & pprof_pid=$! +set_appearance "${appearance_json}" "${service_banner_color}" "${service_banner_message} | Scaletest running: [${CODER_USER}/${CODER_WORKSPACE}](${CODER_URL}/@${CODER_USER}/${CODER_WORKSPACE})!" + # Show failure in the UI if script exits with error. -failed_status=Failed on_exit() { code=${?} trap - ERR EXIT @@ -64,25 +70,37 @@ on_exit() { kill -INT "${pprof_pid}" + message_color="#4CD473" # Green. + message_status=COMPLETE + if ((code > 0)); then + message_color="#D94A5D" # Red. + message_status=FAILED + fi + case "${SCALETEST_PARAM_CLEANUP_STRATEGY}" in on_stop) # Handled by shutdown script. ;; on_success) if ((code == 0)); then + set_appearance "${appearance_json}" "${message_color}" "${service_banner_message} | Scaletest ${message_status}: [${CODER_USER}/${CODER_WORKSPACE}](${CODER_URL}/@${CODER_USER}/${CODER_WORKSPACE}), cleaning up..." "${SCRIPTS_DIR}/cleanup.sh" "${SCALETEST_PARAM_CLEANUP_STRATEGY}" fi ;; on_error) if ((code > 0)); then + set_appearance "${appearance_json}" "${message_color}" "${service_banner_message} | Scaletest ${message_status}: [${CODER_USER}/${CODER_WORKSPACE}](${CODER_URL}/@${CODER_USER}/${CODER_WORKSPACE}), cleaning up..." "${SCRIPTS_DIR}/cleanup.sh" "${SCALETEST_PARAM_CLEANUP_STRATEGY}" fi ;; *) + set_appearance "${appearance_json}" "${message_color}" "${service_banner_message} | Scaletest ${message_status}: [${CODER_USER}/${CODER_WORKSPACE}](${CODER_URL}/@${CODER_USER}/${CODER_WORKSPACE}), cleaning up..." "${SCRIPTS_DIR}/cleanup.sh" "${SCALETEST_PARAM_CLEANUP_STRATEGY}" ;; esac + set_appearance "${appearance_json}" "${message_color}" "${service_banner_message} | Scaletest ${message_status}: [${CODER_USER}/${CODER_WORKSPACE}](${CODER_URL}/@${CODER_USER}/${CODER_WORKSPACE})!" + annotate_grafana_end "" "Start scaletest" } trap on_exit EXIT @@ -93,7 +111,7 @@ on_err() { set +e log "Scaletest failed!" - GRAFANA_EXTRA_TAGS=error set_status "${failed_status} (exit=${code})" + GRAFANA_EXTRA_TAGS=error set_status "Failed (exit=${code})" "${SCRIPTS_DIR}/report.sh" failed lock_status # Ensure we never rewrite the status after a failure.