admin-scripts/helpers/state_machine.sh

81 lines
2.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
################################################################################
# STATE_MACHINE.SH
# ----------------
# This script saves the last message for a certain key and compares the next
# message for the same key to not have any repeating notifications.
#
# Author: Robin Meier - robin@meier.si
################################################################################
script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
set -o allexport
source ${script_dir}/../config/state_machine
set +o allexport
mkdir -p ${script_dir}/../storage/state_machine
# Get input from standard input or via first parameter
if [[ $# -eq 0 ]]; then
echo "[ERROR] Not enough arguments!"
exit 1
elif [[ $# -eq 1 ]]; then
message=$(timeout 32 cat)
key=$1
elif [[ $# -eq 2 ]]; then
key=$1
message=$2
else
echo "[ERROR] Too many arguments!"
exit 1
fi
# Check if key is empty
if [[ -z "${key}" ]]; then
echo "[ERROR] key argument is missing!"
exit 1
fi
key_file="${script_dir}/../storage/state_machine/${key}.txt"
if [[ -f $key_file && -z "${message}" ]]; then
# Previous message present and empty message now
OLD_message=$(cat $key_file)
echo "✅ Resolved"
echo "$OLD_message"
rm $key_file
exit 0
elif [[ -f $key_file ]]; then
# Message and previous message present
OLD_message=$(cat $key_file)
# Compare contents
if [[ "$OLD_message" == "$message" ]]; then
# Check last notification
if [ "$(( $(date +"%s") - $(stat -c "%Y" "$key_file") ))" -gt "$RENOTIFY_AGE_SEC" ]; then
touch $key_file
echo "‼Renotify"
else
exit 0
fi
else
echo "$message" > $key_file
echo "⁉Changed"
fi
else
if [[ -z "${message}" ]]; then
# No message present
exit 0
fi
# New message present, create key_file, continue to relaying
echo "$message" > $key_file
echo "❗New"
fi
# Relay message if made it until here (Quotes are important here, so lines dont get .join(' ')-ed)
echo "$message"
exit 0