feat(detmir): add rust-first operations tooling
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
WORKTIME_BASE_URL="${WORKTIME_BASE_URL:-http://127.0.0.1:5610}"
|
||||
WORKTIME_PREWARM_TIMEOUT_SECONDS="${WORKTIME_PREWARM_TIMEOUT_SECONDS:-45}"
|
||||
WORKTIME_PREWARM_HEALTH_TIMEOUT_SECONDS="${WORKTIME_PREWARM_HEALTH_TIMEOUT_SECONDS:-10}"
|
||||
WORKTIME_PREWARM_READY_TIMEOUT_SECONDS="${WORKTIME_PREWARM_READY_TIMEOUT_SECONDS:-60}"
|
||||
WORKTIME_PREWARM_READY_INTERVAL_SECONDS="${WORKTIME_PREWARM_READY_INTERVAL_SECONDS:-2}"
|
||||
WORKTIME_PREWARM_HOST="${WORKTIME_PREWARM_HOST:-${AW_WORKTIME_HOST:-SHARKON2025}}"
|
||||
WORKTIME_PREWARM_PROFILE="${WORKTIME_PREWARM_PROFILE:-full}"
|
||||
|
||||
log() {
|
||||
printf '%s %s\n' "$(date '+%F %T')" "$*"
|
||||
}
|
||||
|
||||
probe() {
|
||||
local url="$1"
|
||||
local timeout="$2"
|
||||
local tmp
|
||||
tmp="$(mktemp)"
|
||||
local code
|
||||
code="$(curl -sS --max-time "$timeout" -o /dev/null -D "$tmp" -w '%{http_code}' "$url" 2>/dev/null || true)"
|
||||
if [[ "$code" =~ ^2 ]]; then
|
||||
local cache
|
||||
cache="$(tr '\r' '\n' < "$tmp" | awk 'tolower($0) ~ /^x-aw-worktime-cache:/ {print $2; exit}' || true)"
|
||||
local reason
|
||||
reason="$(tr '\r' '\n' < "$tmp" | awk 'tolower($0) ~ /^x-aw-worktime-cache-reason:/ {print $2; exit}' || true)"
|
||||
rm -f "$tmp"
|
||||
log "ok code=$code cache=${cache:-none} reason=${reason:-none} url=$url"
|
||||
return 0
|
||||
fi
|
||||
rm -f "$tmp"
|
||||
log "warn code=${code:-000} url=$url"
|
||||
return 1
|
||||
}
|
||||
|
||||
wait_until_ready() {
|
||||
local deadline
|
||||
deadline=$(( $(date +%s) + WORKTIME_PREWARM_READY_TIMEOUT_SECONDS ))
|
||||
while true; do
|
||||
if probe "$WORKTIME_BASE_URL/health" "$WORKTIME_PREWARM_HEALTH_TIMEOUT_SECONDS"; then
|
||||
return 0
|
||||
fi
|
||||
if [[ "$(date +%s)" -ge "$deadline" ]]; then
|
||||
return 1
|
||||
fi
|
||||
sleep "$WORKTIME_PREWARM_READY_INTERVAL_SECONDS"
|
||||
done
|
||||
}
|
||||
|
||||
if ! wait_until_ready; then
|
||||
log "health readiness timed out; skip prewarm"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
full_urls=(
|
||||
"$WORKTIME_BASE_URL/reports/worktime/today?day=today&format=csv&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/today?day=today&format=json&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/today?day=today&format=html&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/management?day=today&format=csv&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/management?day=today&format=json&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/management?day=today&format=html&host=$WORKTIME_PREWARM_HOST"
|
||||
)
|
||||
|
||||
startup_urls=(
|
||||
"$WORKTIME_BASE_URL/reports/worktime/today?day=today&format=csv&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/today?day=today&format=json&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/management?day=today&format=json&host=$WORKTIME_PREWARM_HOST"
|
||||
"$WORKTIME_BASE_URL/reports/worktime/management?day=today&format=csv&host=$WORKTIME_PREWARM_HOST"
|
||||
)
|
||||
|
||||
case "$WORKTIME_PREWARM_PROFILE" in
|
||||
full)
|
||||
urls=("${full_urls[@]}")
|
||||
;;
|
||||
startup)
|
||||
urls=("${startup_urls[@]}")
|
||||
;;
|
||||
*)
|
||||
log "unknown profile=$WORKTIME_PREWARM_PROFILE"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
failures=0
|
||||
for url in "${urls[@]}"; do
|
||||
if ! probe "$url" "$WORKTIME_PREWARM_TIMEOUT_SECONDS"; then
|
||||
failures=$((failures + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$failures" -gt 0 ]]; then
|
||||
log "completed profile=$WORKTIME_PREWARM_PROFILE with failures=$failures"
|
||||
else
|
||||
log "completed profile=$WORKTIME_PREWARM_PROFILE successfully"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user