2022-11-03 08:39:42 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
#set -eux
|
|
|
|
|
2022-11-03 11:06:01 +00:00
|
|
|
LOG_FILE="/media/workshop/Projects/openmedianetwork/.omn_watchdog.log"
|
|
|
|
|
2022-11-03 10:44:17 +00:00
|
|
|
RECIPIENTS=(
|
|
|
|
saunders@openworlds.info
|
|
|
|
witchescauldron@openworlds.info
|
|
|
|
)
|
2022-11-03 08:39:42 +00:00
|
|
|
|
2022-11-03 09:48:53 +00:00
|
|
|
URLS=(
|
|
|
|
unite.openworlds.info
|
2022-11-03 12:08:10 +00:00
|
|
|
# NOTE: [Currently down] openworlds.info
|
2022-11-03 09:48:53 +00:00
|
|
|
pad.openworlds.info
|
|
|
|
visionon.tv
|
2022-11-03 10:20:47 +00:00
|
|
|
activism.openworlds.info
|
|
|
|
campaign.openworlds.info
|
|
|
|
#indymedia.openworlds.info
|
|
|
|
#roadstonowhere.openworlds.info
|
|
|
|
#indymedia.hs2rebellion.earth
|
2022-11-03 09:48:53 +00:00
|
|
|
)
|
|
|
|
# TODO: How to check these sensibly?
|
|
|
|
SERVICES=(
|
|
|
|
chat.openworlds.info
|
|
|
|
conference.openworlds.info
|
|
|
|
# Not much point checking the mail server
|
|
|
|
# as this script relies on it to send reports
|
2022-11-03 10:20:47 +00:00
|
|
|
# TODO: Separate local check just for this?
|
2022-11-03 09:48:53 +00:00
|
|
|
#mail.openworlds.info
|
|
|
|
)
|
|
|
|
|
2022-11-03 12:08:10 +00:00
|
|
|
rotate_log()
|
|
|
|
{
|
|
|
|
local -n log=$1
|
|
|
|
local max_log=4096 # 4M as we get size in K below
|
|
|
|
local log_size=$(du -k "${log}" | cut -f 1)
|
|
|
|
|
|
|
|
if ((${log_size} > ${max_log})); then
|
|
|
|
# Clobber any previous backup
|
|
|
|
mv -f ${log} ${log}.1
|
|
|
|
fi
|
|
|
|
|
|
|
|
touch ${log}
|
|
|
|
}
|
|
|
|
|
|
|
|
send_mail()
|
|
|
|
{
|
2022-11-03 10:20:47 +00:00
|
|
|
local -n error_list=$1
|
|
|
|
local error_string=""
|
|
|
|
|
|
|
|
for i in "${!error_list[@]}"; do
|
|
|
|
# Use bash's awful syntax to escape any / in the server string
|
|
|
|
code=${i//\//\\\/}
|
|
|
|
server=${error_list[$i]}
|
|
|
|
error_string+=" ${code}: ${server}\n"
|
|
|
|
done
|
|
|
|
|
|
|
|
cat mail_template \
|
|
|
|
| sed "s/{ERR_LIST}/${error_string}/g" \
|
2022-11-03 12:08:10 +00:00
|
|
|
| msmtp -a omn_server_watch ${RECIPIENTS[@]} \
|
2022-11-03 11:06:01 +00:00
|
|
|
|| echo "[ERROR] Failed to send mail!"
|
2022-11-03 10:20:47 +00:00
|
|
|
}
|
|
|
|
|
2022-11-03 09:48:53 +00:00
|
|
|
declare -A FLAGGED
|
|
|
|
|
2022-11-03 12:08:10 +00:00
|
|
|
rotate_log LOG_FILE
|
|
|
|
# Redirect all output to LOG_FILE but preserve a link to stdout should we
|
|
|
|
# still want to use it
|
|
|
|
exec 3>&1 1>>${LOG_FILE} 2>&1
|
|
|
|
|
|
|
|
echo ">> $(date)"
|
2022-11-03 10:44:17 +00:00
|
|
|
echo "== Checking:"
|
|
|
|
|
2022-11-03 09:48:53 +00:00
|
|
|
for uri in "${URLS[@]}"; do \
|
|
|
|
full_uri="https://${uri}"
|
2022-11-03 10:44:17 +00:00
|
|
|
echo -n " ${full_uri} ... ";
|
2022-11-03 09:48:53 +00:00
|
|
|
stat="$(curl -s -o /dev/null -w "%{http_code}%{stdout}" ${full_uri})"
|
|
|
|
echo "${stat}"
|
|
|
|
|
2022-11-03 10:20:47 +00:00
|
|
|
# All other HTTP responses should not technically be errors
|
|
|
|
if ((${stat} >= 400 && ${stat} <= 599)); then
|
2022-11-03 09:48:53 +00:00
|
|
|
FLAGGED[${full_uri}]=${stat}
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2022-11-03 10:44:17 +00:00
|
|
|
ret=0
|
|
|
|
|
|
|
|
if ((${#FLAGGED[@]} > 0)); then
|
|
|
|
echo "== Error(s) detected. Sending mail to:"
|
|
|
|
|
|
|
|
for rcp in ${RECIPIENTS[@]}; do
|
|
|
|
echo " ${rcp}"
|
|
|
|
done
|
|
|
|
|
|
|
|
send_mail FLAGGED
|
|
|
|
ret=1
|
|
|
|
|
|
|
|
else
|
|
|
|
echo "== OK"
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit ${ret}
|