Update kuma-push.sh
This commit is contained in:
parent
1048076564
commit
bec79c55e1
1 changed files with 21 additions and 16 deletions
37
kuma-push.sh
37
kuma-push.sh
|
@ -1,41 +1,46 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Uptime Kuma push script using JSON inventory + jq
|
# Uptime Kuma push script – Bash + jq + wget (no curl)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
|
|
||||||
CFG="/opt/kuma-checks.json"
|
CFG="/opt/kuma-checks.json"
|
||||||
BASE="https://status.jordanwages.com/api/push"
|
BASE="https://status.jordanwages.com/api/push"
|
||||||
CURL_OPTS=(--silent --show-error --max-time 4)
|
WGET_OPTS=(--quiet --tries=1 --timeout=4 --output-document=/dev/null)
|
||||||
|
|
||||||
# 0-4 s start-up jitter so many VMs don’t hit Kuma simultaneously
|
# 0-4 s jitter so many VMs don’t hit Kuma at the exact same second
|
||||||
sleep $(( RANDOM % 5 ))
|
sleep $(( RANDOM % 5 ))
|
||||||
|
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
push() { # $1 token $2 status $3 msg $4 ping-ms
|
push() { # $1 token $2 status $3 msg $4 ping-ms
|
||||||
curl "${CURL_OPTS[@]}" \
|
local url="${BASE}/${1}?status=${2}&msg=${3// /%20}&ping=${4}"
|
||||||
"${BASE}/${1}?status=${2}&msg=${3// /%20}&ping=${4}" \
|
wget "${WGET_OPTS[@]}" "$url" || true # Kuma will alert if pushes stop
|
||||||
|| true # don’t abort script if push itself fails
|
|
||||||
}
|
}
|
||||||
|
|
||||||
check_http() { # arg: URL
|
check_http() { # arg: URL
|
||||||
local t0=$(date +%s%3N)
|
local start elapsed
|
||||||
local code
|
start=$(date +%s%3N)
|
||||||
code=$(curl "${CURL_OPTS[@]}" -o /dev/null -w '%{http_code}' "$1" || echo 000)
|
if wget "${WGET_OPTS[@]}" "$1"; then
|
||||||
echo "$([[ $code =~ ^2|3 ]] && echo up || echo down) $(( $(date +%s%3N) - t0 ))"
|
elapsed=$(( $(date +%s%3N) - start ))
|
||||||
|
echo "up $elapsed"
|
||||||
|
else
|
||||||
|
elapsed=$(( $(date +%s%3N) - start ))
|
||||||
|
echo "down $elapsed"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_service() { systemctl is-active --quiet "$1" && echo "up 0" || echo "down 0"; }
|
check_service() { systemctl is-active --quiet "$1" && echo "up 0" || echo "down 0"; }
|
||||||
check_docker() { docker inspect -f '{{.State.Running}}' "$1" &>/dev/null && echo "up 0" || echo "down 0"; }
|
check_docker() { docker inspect -f '{{.State.Running}}' "$1" &>/dev/null && echo "up 0" || echo "down 0"; }
|
||||||
check_mount() { mountpoint -q "$1" 2>/dev/null && echo "up 0" || echo "down 0"; }
|
check_mount() { mountpoint -q "$1" 2>/dev/null && echo "up 0" || echo "down 0"; }
|
||||||
check_native() { echo "up 0"; }
|
check_native() { echo "up 0"; }
|
||||||
|
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
# Loop over checks defined in the JSON inventory
|
# Iterate through JSON inventory
|
||||||
jq -c '.[]' "$CFG" | while IFS= read -r item; do
|
jq -c '.[]' "$CFG" | while IFS= read -r item; do
|
||||||
name=$(jq -r '.name' <<<"$item")
|
name=$(jq -r '.name' <<<"$item")
|
||||||
type=$(jq -r '.type' <<<"$item")
|
type=$(jq -r '.type' <<<"$item")
|
||||||
id=$(jq -r '.push' <<<"$item")
|
id=$(jq -r '.push' <<<"$item")
|
||||||
tgt=$(jq -r '.target // empty' <<<"$item") # may be absent for "native"
|
tgt=$(jq -r '.target // empty' <<<"$item") # target may be absent
|
||||||
|
|
||||||
case "$type" in
|
case "$type" in
|
||||||
http) read -r stat ping < <(check_http "$tgt") ;;
|
http) read -r stat ping < <(check_http "$tgt") ;;
|
||||||
|
@ -43,7 +48,7 @@ jq -c '.[]' "$CFG" | while IFS= read -r item; do
|
||||||
docker) read -r stat ping < <(check_docker "$tgt") ;;
|
docker) read -r stat ping < <(check_docker "$tgt") ;;
|
||||||
mount) read -r stat ping < <(check_mount "$tgt") ;;
|
mount) read -r stat ping < <(check_mount "$tgt") ;;
|
||||||
native) read -r stat ping < <(check_native) ;;
|
native) read -r stat ping < <(check_native) ;;
|
||||||
*) stat=down; ping=0 ;;
|
*) stat=down ping=0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
push "$id" "$stat" "$name" "$ping"
|
push "$id" "$stat" "$name" "$ping"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue