curlgrep-notify/curlgrep.sh

60 lines
1.2 KiB
Bash
Raw Normal View History

2023-08-14 09:58:34 +02:00
#!/bin/bash
2023-08-14 10:04:32 +02:00
source "$(dirname $(readlink -f "$0"))/config.sh"
2023-08-14 09:58:34 +02:00
2023-08-14 10:04:32 +02:00
function do_notify {
msg="$1"
curl "http://[::1]:51641/plain" -F message="$msg"
}
2023-08-14 09:58:34 +02:00
function do_one {
if [ "$#" -lt 4 ] ; then
>&2 echo "Missing argument to do_one."
return
fi
url="$1"
pattern="$2"
msg="$3"
elt_id="$4"
state_path="$STATE_DIR/$elt_id"
2023-08-14 10:04:32 +02:00
echo -n "Polling $url"
2023-08-14 09:58:34 +02:00
curl -s "$url" | grep -q "$pattern"
no_match="$?"
if [ "$no_match" -eq 1 ]; then
if [ -f "$state_path" ] ; then
2023-08-14 10:04:32 +02:00
echo "no match anymore"
2023-08-14 09:58:34 +02:00
rm -f "$state_path"
2023-08-14 10:04:32 +02:00
else
echo "still no match"
2023-08-14 09:58:34 +02:00
fi
else # match
if ! [ -f "$state_path" ] ; then # no previous match
2023-08-14 10:04:32 +02:00
echo "now matches"
2023-08-14 09:58:34 +02:00
touch "$state_path"
2023-08-14 10:04:32 +02:00
do_notify "$msg"
else
echo "still matches"
2023-08-14 09:58:34 +02:00
fi
fi
}
if [ "${#URLS[@]}" -ne "${#PATTERNS[@]}" ] \
|| [ "${#URLS[@]}" -ne "${#MESSAGES[@]}" ]
then
>&2 echo "Bad configuration: unbalanced number of elements"
exit 2
fi
mkdir -p "$STATE_DIR"
for elt_id in "${!URLS[@]}"; do
do_one \
"${URLS[$elt_id]}" \
"${PATTERNS[$elt_id]}" \
"${MESSAGES[$elt_id]}" \
"$elt_id"
done