#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin CONFIG=$1 # BEGIN CONFIG CHECK ### Provides KEY, CHATID, CHKLIST if [ -n "$CONFIG" ]; then if [ -f "$CONFIG" ]; then . $CONFIG #Source config file else printf '%s\n' "$CONFIG: File does not exist." >&2 exit 10 fi else if [ -f ".httpcheck_telegram" ]; then . .httpcheck_telegram #Source config file else printf '%s\n' "No configuration file found." >&2 exit 10 fi fi # Check if config was loaded by examining all configuration variables, exit if not if [ -z "$KEY" ]; then printf '%s\n' "Configuration not set correctly: KEY not set" >&2 ERROR11=true fi if [ -z "$CHATID" ]; then printf '%s\n' "Configuration not set correctly: CHATID not set" >&2 ERROR11=true fi if [ -z "$CHKLIST" ]; then printf '%s\n' "Configuration not set correctly: CHKLIST not set" >&2 ERROR11=true fi [ "$ERROR11" = "true" ] && exit 11 # END CONFIG CHECK TIME="10" URL="https://api.telegram.org/bot$KEY/sendMessage" #Telegram message function send_message() { curl -s --max-time $TIME -d "chat_id=${CHATID}&disable_web_page_preview=1&text=$1" $URL >/dev/null } get_http_code() { if host $(awk '{gsub("https?://|/.*","")}1' <<< $1) &>/dev/null; then curl -sILk --max-time $TIME $1 | grep HTTP | tail -n 1 | grep -Eo '[0-9]{3}' || printf '%s\n' 999 else printf '%s\n' 000 fi } # Prepare message header MSG='HTTP/S Problems Found:' FAILURE=false # Check HTTP codes for site in $(< $CHKLIST); do respcode=$(get_http_code $site) case $respcode in 000) printf '%s\n' "[$(date '+%Y%m%d %H:%M:%S')]: PROBLEM -- $site: DNS record not found" >&2 MSG="${MSG}%0A%0A %2B ${site}%0A DNS record not found" FAILURE=true ;; 200) printf '%s\n' "[$(date '+%Y%m%d %H:%M:%S')]: OK -- $site returns $respcode" ;; 999) printf '%s\n' "[$(date '+%Y%m%d %H:%M:%S')]: PROBLEM -- $site caused general cURL failure" >&2 ;; *) printf '%s\n' "[$(date '+%Y%m%d %H:%M:%S')]: PROBLEM -- $site returns $respcode" >&2 MSG="${MSG}%0A%0A %2B ${site}%0A responding ${respcode}" FAILURE=true ;; esac done || exit 2 # Send compiled message if any problems were found send_message "$MSG" && printf '%s\n' "Problems found. Message sent via Telegram bot" >&2 || printf '%s\n' "Problems found. Message sending has failed" exit 0