从垃圾堆捡到的一个纸条,上面写着:NVIDIA / SIMULATION

如题,从垃圾堆捡到的一个纸条,上面写着: NVIDIA / SIMULATION #!/usr/bin/env bash set -Eeuo pipefail IFS=$'\n\t' PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sb...
从垃圾堆捡到的一个纸条,上面写着:NVIDIA / SIMULATION
从垃圾堆捡到的一个纸条,上面写着:NVIDIA / SIMULATION

如题,从垃圾堆捡到的一个纸条,上面写着: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 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文