#!/bin/bash
COMPLETE="complete";
BASIC="basic";
export CONF_DIR='/etc/hc_managed_servers'
export CONFIG_FILE="${CONF_DIR}/app.conf"
export ENV_FILE="${CONF_DIR}/.env"
export VENV_PATH="${PROJECT_ROOT}/env"
function check_exit() {
if [[ "$1" == "ex" ]]; then
shift; local EXIT_FLAG=1
fi
eval "$@" &>/dev/null;
if [ $? -ne 0 ]; then
write_log "$@";
eval "$@" 2>&1 | sed '1s/^/[log_start:'$(hostname)']\n/' | sed '$s/$/\n[log_end]/'
write_log 'Failed!'
if [[ -n $EXIT_FLAG ]]; then
write_log 'Exiting!'
rm $0
exit 1
fi
fi
}
function management_type_check() {
grep -q backup /etc/fstab && type=$COMPLETE || type=$BASIC
echo "$type"
}
read_conf() {
[ ! -e "$ENV_FILE" ] && { echo "Env file $ENV_FILE is missing" ; exit 1 ; }
[ ! -e "$CONFIG_FILE" ] && { echo "Config file $CONFIG_FILE is missing" ; exit 1 ; }
local key value
for file in "$ENV_FILE" "$CONFIG_FILE"; do
while IFS='=' read -r key value; do
if [[ $key =~ ^[[:space:]]*# || -z $key ]]; then
continue
fi
key=$(echo $key | tr -d '[:space:]' | tr '[:lower:]' '[:upper:]')
value=$(echo $value | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [[ -z $value ]]; then
echo "Error: Missing value for $key in $file" >&2
exit 1
fi
case $key in
CRON_INTERVAL_MIN)
if ! [[ $value =~ ^[0-9]+$ ]] || [[ $value -lt 10 ]]; then
echo "Error: Invalid value for $key: $value. Must be a number greater or equal to 10." >&2
exit 1
fi
;;
LOG_FILE)
if [[ ! $value =~ ^/ ]]; then
echo "Error: Invalid value for $key: $value. Must be an absolute path." >&2
exit 1
fi
;;
esac
export "$key"="$value"
done < "$file"
done
if [[ -z $CRON_INTERVAL_MIN || -z $LOG_FILE || -z $API_GW_URL || -z $API_TOKEN ]]; then
echo "Error: Missing one or more required variables: CRON_INTERVAL_MIN, LOG_FILE, API_GW_URL, API_TOKEN in $ENV_FILE or $CONFIG_FILE" >&2
exit 1
fi
}
read_conf
function write_log() {
mkdir -p "$(dirname "$LOG_FILE")"
echo -e "$(date +'%Y-%m-%d %T %z') $(hostname) [alert_fixer]:" $(echo "$*") | tee -a "$LOG_FILE"
}