如题,从垃圾堆捡到的一个纸条,上面写着:NVIDIA / SIMULATION
#!/usr/bin/env bash
set -Eeuo pipefail
IFS=$'\n\t'
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
API_BASE_URL="https://api.dsx-air.nvidia.com/api/v3"
SIMULATION_ID="${SIMULATION_ID:-820b1c6a-aaaa-bbbb-cccc-879e4511dddd}"
HOURS_FROM_NOW="${HOURS_FROM_NOW:-70}"
: "${NVIDIA_API_KEY:?NVIDIA_API_KEY is required}"
log() {
printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
}
require_command() {
command -v "$1" >/dev/null 2>&1 || {
log "ERROR: Required command not found: $1"
exit 1
}
}
extract_sleep_at() {
local body_file="$1"
if command -v jq >/dev/null 2>&1; then
jq -r '.sleep_at // empty' "$body_file" 2>/dev/null || true
else
sed -n 's/.*"sleep_at"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$body_file" | head -n 1
fi
}
require_command curl
require_command date
SLEEP_AT_UTC="$(date -u -d "+${HOURS_FROM_NOW} hours" '+%Y-%m-%dT%H:%M:%SZ')"
PAYLOAD="$(printf '{"sleep_at":"%s"}' "$SLEEP_AT_UTC")"
BODY_FILE="$(mktemp)"
trap 'rm -f "$BODY_FILE"' EXIT
log "Task started"
log "Target sleep_at UTC: ${SLEEP_AT_UTC}"
if ! HTTP_CODE="$(
curl "${API_BASE_URL}/simulations/${SIMULATION_ID}/" \
--silent \
--show-error \
--location \
--connect-timeout 10 \
--max-time 30 \
--retry 2 \
--retry-delay 2 \
--output "$BODY_FILE" \
--write-out '%{http_code}' \
--request PATCH \
--header 'accept: application/json, text/plain, */*' \
--header "authorization: Bearer ${NVIDIA_API_KEY}" \
--header 'content-type: application/json' \
--data-raw "$PAYLOAD"
)"; then
log "ERROR: curl request failed"
log "Response body:"
cat "$BODY_FILE"
exit 1
fi
if [[ "$HTTP_CODE" =~ ^2[0-9]{2}$ ]]; then
RETURNED_SLEEP_AT="$(extract_sleep_at "$BODY_FILE")"
if [[ -n "$RETURNED_SLEEP_AT" ]]; then
LOCAL_TIME="$(date -d "$RETURNED_SLEEP_AT" '+%Y-%m-%d %H:%M:%S %Z')"
log "SUCCESS: sleep_at updated to ${LOCAL_TIME}"
else
log "SUCCESS: Request completed, but sleep_at was not found in response"
log "Response body:"
cat "$BODY_FILE"
fi
else
log "ERROR: Request failed with HTTP status code: ${HTTP_CODE}"
log "Response body:"
cat "$BODY_FILE"
exit 1
fi
log "Task finished"
使用方法
export NVIDIA_API_KEY="nvapi_xxxxxxxxxxxxxxxxxxxxx"
export SIMULATION_ID="820b1c6a-aaaa-bbbb-cccc-879e4511dddd"
bash update_sleep_time.sh
1 个帖子 - 1 位参与者