diff --git a/skills/unraid/examples/disk-health.sh b/skills/unraid/examples/disk-health.sh index 25dbc0d..6b00a7f 100755 --- a/skills/unraid/examples/disk-health.sh +++ b/skills/unraid/examples/disk-health.sh @@ -5,12 +5,25 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" QUERY_SCRIPT="$SCRIPT_DIR/../scripts/unraid-query.sh" +if [[ ! -x "$QUERY_SCRIPT" ]]; then + echo "Error: Query script not found or not executable: $QUERY_SCRIPT" >&2 + exit 1 +fi + QUERY='{ array { disks { name device temp status isSpinning } } }' echo "=== Disk Health Report ===" echo "" -RESPONSE=$("$QUERY_SCRIPT" -q "$QUERY" -f raw) +RESPONSE=$("$QUERY_SCRIPT" -q "$QUERY" -f raw) || { + echo "Error: Query failed." >&2 + exit 1 +} + +if [[ -z "$RESPONSE" ]] || ! echo "$RESPONSE" | jq -e . > /dev/null 2>&1; then + echo "Error: Invalid or empty response from query." >&2 + exit 1 +fi echo "$RESPONSE" | jq -r '.array.disks[] | "\(.name) (\(.device)): \(.temp)°C - \(.status) - \(if .isSpinning then "Spinning" else "Spun down" end)"' diff --git a/skills/unraid/scripts/dashboard.sh b/skills/unraid/scripts/dashboard.sh index b0df5cd..685bb6a 100755 --- a/skills/unraid/scripts/dashboard.sh +++ b/skills/unraid/scripts/dashboard.sh @@ -173,8 +173,8 @@ process_server() { echo "" >> "$OUTPUT_FILE" echo "### Health" >> "$OUTPUT_FILE" - HOT_DISKS=$(echo "$RESPONSE" | jq -r '.data.array.disks[] | select(.temp > 45) | "- ⚠️ \(.name): \(.temp)°C (HIGH)"') - DISK_ERRORS=$(echo "$RESPONSE" | jq -r '.data.array.disks[] | select(.numErrors > 0) | "- ❌ \(.name): \(.numErrors) errors"') + HOT_DISKS=$(echo "$RESPONSE" | jq -r '(.data.array.disks // [])[] | select(.temp > 45) | "- ⚠️ \(.name): \(.temp)°C (HIGH)"') + DISK_ERRORS=$(echo "$RESPONSE" | jq -r '(.data.array.disks // [])[] | select(.numErrors > 0) | "- ❌ \(.name): \(.numErrors) errors"') if [ -z "$HOT_DISKS" ] && [ -z "$DISK_ERRORS" ]; then echo "- ✅ All disks healthy" >> "$OUTPUT_FILE" @@ -218,7 +218,7 @@ for server in "${SERVERS[@]}"; do url_var="UNRAID_${server}_URL" key_var="UNRAID_${server}_API_KEY" - NAME="${!name_var}" + NAME="${!name_var:-$server}" URL="${!url_var}" KEY="${!key_var}" diff --git a/skills/unraid/scripts/unraid-query.sh b/skills/unraid/scripts/unraid-query.sh index 73dd6c4..26a510a 100755 --- a/skills/unraid/scripts/unraid-query.sh +++ b/skills/unraid/scripts/unraid-query.sh @@ -112,7 +112,21 @@ CURL_FLAGS=("-sL" "-X" "POST") RESPONSE=$(curl "${CURL_FLAGS[@]}" "$URL" \ -H "Content-Type: application/json" \ -H "x-api-key: $API_KEY" \ - -d "$PAYLOAD") + -d "$PAYLOAD") || { + echo "Error: curl request failed (exit code $?). Check URL and network connectivity." >&2 + exit 1 +} + +if [[ -z "$RESPONSE" ]]; then + echo "Error: Empty response from server." >&2 + exit 1 +fi + +if ! echo "$RESPONSE" | jq -e . > /dev/null 2>&1; then + echo "Error: Server returned invalid JSON. Response:" >&2 + echo "$RESPONSE" | head -c 500 >&2 + exit 1 +fi # Check for errors if echo "$RESPONSE" | jq -e '.errors' > /dev/null 2>&1; then