Files
NWC2026-AstropotaPOD/check_launch
T
2026-09-06 12:08:05 -04:00

49 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Grab parameters with built-in fallbacks
SEARCH_REGEX="${1:-Starlink}"
LIMIT_COUNT="${2:-1}"
# Convert search string to lowercase for the safety pool check
LOWER_SEARCH=$(echo "$SEARCH_REGEX" | tr '[:upper:]' '[:lower:]')
# Define an intelligent data pool cap based on user request
if [[ "$LOWER_SEARCH" == *"starlink"* || "$LOWER_SEARCH" == *"oneweb"* || "$LOWER_SEARCH" == *"|"* ]]; then
# For specific trackers, fetch a wider baseline pool (at least 20)
FETCH_LIMIT=$(( LIMIT_COUNT > 20 ? LIMIT_COUNT : 20 ))
else
# Otherwise, trust the user input directly
FETCH_LIMIT=$LIMIT_COUNT
fi
# Hard-clamp the final fetch request strictly to 100 (the API's absolute max ceiling)
if [ "$FETCH_LIMIT" -gt 100 ]; then
FETCH_LIMIT=100
fi
# Fetch the upcoming space manifest using the stable 2.3.0 production API
DATA=$(curl -s "https://ll.thespacedevs.com/2.3.0/launches/upcoming/?limit=${FETCH_LIMIT}")
# Defensive Check: Ensure the API returned a valid JSON payload containing "results"
if ! echo "$DATA" | jq -e '.results' >/dev/null 2>&1; then
echo "CRITICAL - API Error: Received invalid response or rate limit from server | launch_alert=0"
exit 2
fi
# Filter the data pool locally using your regex, then slice cleanly to your display limit
LAUNCH_INFO=$(echo "$DATA" | jq -r --arg regex "$SEARCH_REGEX" --argjson limit "$LIMIT_COUNT" '
.results |
map(select(.name | test($regex; "i"))) |
.[0:$limit] |
.[] |
"\(.name) @ \(.net)"')
if [ ! -z "$LAUNCH_INFO" ]; then
# Output matches cleanly formatted for both CLI tracking and Nagios perf-piping
echo "OK - Target Approaching: $LAUNCH_INFO" | tr -d "|" | sed '$s/$/ | launch_alert=1/'
exit 0
else
echo "OK - No flights matching pattern [$SEARCH_REGEX] found in the upcoming queue | launch_alert=0"
exit 0
fi