thread-master/scripts/test-job-cancel.sh

76 lines
2.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 示範 job 建立與取消running 時會透過 Redis jobs:cancel:<id> 戳 worker
#
# 用法:
# ./scripts/test-job-cancel.sh
set -u
BASE_URL="${BASE_URL:-http://127.0.0.1:8890}"
SCOPE="${SCOPE:-user}"
SCOPE_ID="${SCOPE_ID:-demo_user_1}"
require_cmd() {
command -v "$1" >/dev/null 2>&1 || { echo "missing command: $1"; exit 1; }
}
require_cmd curl
require_cmd jq
echo "== create demo_long_task =="
CREATE_BODY="$(curl -sS -X POST "${BASE_URL}/api/v1/jobs" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg scope "$SCOPE" --arg scope_id "$SCOPE_ID" '{
template_type: "demo_long_task",
scope: $scope,
scope_id: $scope_id,
payload: {target: "demo"}
}')")"
echo "$CREATE_BODY" | jq .
JOB_ID="$(echo "$CREATE_BODY" | jq -r '.data.id // empty')"
if [[ -z "$JOB_ID" ]]; then
echo "failed to create job"
exit 1
fi
echo ""
echo "== wait until running (max 10s) =="
for _ in $(seq 1 20); do
STATUS="$(curl -sS "${BASE_URL}/api/v1/jobs/${JOB_ID}" | jq -r '.data.status')"
echo "status: $STATUS"
if [[ "$STATUS" == "running" || "$STATUS" == "cancel_requested" ]]; then
break
fi
if [[ "$STATUS" == "succeeded" || "$STATUS" == "cancelled" ]]; then
echo "job finished before cancel test: $STATUS"
exit 0
fi
sleep 0.5
done
echo ""
echo "== cancel while worker is active =="
CANCEL_BODY="$(curl -sS -X POST "${BASE_URL}/api/v1/jobs/${JOB_ID}/cancel" \
-H "Content-Type: application/json" \
-d '{"reason":"demo cancel from script"}')"
echo "$CANCEL_BODY" | jq .
echo ""
echo "== poll until cancelled (max 20s) =="
for _ in $(seq 1 40); do
BODY="$(curl -sS "${BASE_URL}/api/v1/jobs/${JOB_ID}")"
STATUS="$(echo "$BODY" | jq -r '.data.status')"
PHASE="$(echo "$BODY" | jq -r '.data.phase')"
SUMMARY="$(echo "$BODY" | jq -r '.data.progress.summary')"
echo "status=$STATUS phase=$PHASE summary=$SUMMARY"
if [[ "$STATUS" == "cancelled" ]]; then
echo ""
echo "ok: worker acknowledged cancel"
exit 0
fi
sleep 0.5
done
echo "timeout waiting for cancelled status"
exit 1