#!/bin/bash # Dependencies: curl, openssl, dig dns_server=1.1.1.1 # DNS server to test query dns_port=53 # DNS UDP port (Default is 53) gotify_server="https://push.gotify.example" # Gotify server address (including http:// or https://) gotify_api_key="###############" # Gotify server application token for this script # To do: Add sanity checks for the configuration variables # Stateful notifications (only send one notification when it goes down, one when it comes backup up, and reminders every x hours) # Log notification push errors to ~/.offline_error and print them at login with .bashrc # First argument is the message to be pushed, second argument is the message priority (integer from 0 to 10, 0 being low priority and 10 being high) gotify_send () { if [ "$2" -ge 0 ] && [ "$2" -le 10 ]; then # Message priority integer sanity check. Default to 5 on failure. priority=$2 else >&2 echo "\"$2\" isn't a valid priority. Defaulting priority to 5." priority=5 fi curl -s -X POST "$gotify_server/message?token=$gotify_api_key" -F "title=Message from: $HOSTNAME" -F "message=$1" -F "priority=$priority" return $? } if dig @$dns_server -p $dns_port google.com > /dev/null ; then # Default timeout is 5 seconds exit 0 else gotify_send "DNS Server $dns_server#$dns_port isn't responding to queries" 4 exit 1 fi